当前位置:Gxlcms > 数据库问题 > 数据库常用语句

数据库常用语句

时间:2021-07-01 10:21:17 帮助过:27人阅读

2 基本sql create table create database select insert update delete 3 select 模糊查询 like 分组查询 group by 排序 order by 聚合函数 sum count avg min max 分页 limit index,count 为什么要分页:数据量比较大 如果全部查询 出现一下问题: 1 全部数据都展示用户 数据量太大 用户难以接受 2 数据量大 查询慢 3 如果将大量数据读取到java内存中 可能存储崩溃 ( 4GB 1GB = 1024MB 1MB = 1024KB 1KB = 1024B 1B = 8b int a = 10 4字节 ) 分页:(链接数据库查询 是非常占用资源) A 全部查询 在前台展示的时候 只展示 其中的一部分(js) (数据库较少) B 数据库获取数据的时候 就只查询部分数据(当前页展示的数据)然后前台直接展示 (数据量大) B : 在查询的时候 只查询部分数据 -----》 limit index,length select * from product limit 0,5 -- 1 5 select * from product limit 1,5 -- 2 6 select * from product limit 3,7 -- 4 10 首页 上一页 1 2 3 4 5 6 下一页 尾页 跳转【】页 每页【5】条 共20页 问题1 : 第一页 limit 0,5 第二页 limit 5,5 第三页 limit 10,5 第四页 limit 15,5 第n页 每页x条 limit (n-1)* x ,x 问题2 : 100条 5 总:20 101条 5 总:21 105条 5 总:21 106条 5 总:22 t条 x 总:(t+x-1)/x 4 多表查询 1 为什么会多表 (主键,外键) 学生表 id name age grade 1 张三 18 QY97 2 李四 18 QY97 3 王五 60 QY98 4 马六 61 QY98 领导通知: QY97 ----》 最强97 班主任 : update student set grade = 最强97 where grade = QY97 (80亿) 数据库数据冗余(减少冗余) 学生表 班级表 id name age gid id gname 1 张三 18 1 1 QY97 2 李四 18 1 2 QY98 3 王五 18 2 4 马六 18 2 班主任: update grade set gname=最强97 where id = 1 2 两张表如何查询数据? select * from student 1 张三 18 1 2 李四 18 1 3 吴昂无 18 2 4 王阿斯顿18 2 5 阿斯顿 19 3 6 暗室逢灯19 3 班级我们其实希望看到 是 班级的名字 并不是班级的编号(我们需要将数据多表存储 又需要在查询的时候 将多表的数据 全部查询出来) 多表查询会出现 "笛卡尔乘积"问题 (a,b) (c,d) ===> ac,ad,bc,bd (哪几张表,各个表之间的联系) 内连接 隐式内连接 SELECT s.id,s.name,s.age,g.gname FROM student s, grade g WHERE s.gid = g.id ==>消除笛卡尔乘积 显示内连接 SELECT s.id, s. NAME, s.age, g.gname FROM student s INNER JOIN grade g ON s.gid = g.id select 列名 from 表1 inner join 表2 on 表1.列 = 表2.列 外连接 左外(需求:查询所有学生信息 如果有班级显示班级名称) SELECT s.id, s. NAME, s.age, g.gname FROM student s left JOIN grade g ON s.gid = g.id 右外 SELECT s.id, s. NAME, s.age, g.gname FROM student s right JOIN grade g ON s.gid = g.id 内连接查询的是多个表的交集 外连接查询的是一张表的全部数据和另一张表满足要求的数据 5 子查询 需求: 查询张三的同班同学 1 查询张三是哪个班? select gid from student WHERE name = "张三" 2 查询和张三班级一样的同学 select * from student where gid = 1 SELECT * FROM student WHERE gid = ( SELECT gid FROM student WHERE NAME = "张三" )
数据库范式(数据库设计的规范):
注意:后面的范式一定满足前面

第一范式: 原子性(范式、事务ACID、线程)(不可再分 列不能再分)

表:存储用户信息  手机号 (需求 一个用户可能没有手机号 也可能有多个手机号)

错误一:(
关系型数据库(列固定 行多个)MySQL oracle sqlserver 
非关系型数据库NoSQL 是关系型数据库的补充(基于内存)缓存服务 redis 
)
id name age sex tel tel1 tel2 tel3 tel4 tel5

错误二:
id  name age sex   tel
 1  张三 182  李四 18  男    110
 3  王五 18  男    120,130,140

正确
User                       telephone
id  name  age  sex          id   uid  tel
1   张三   18   男           1    2   120             
2   李四   19   男           2    3   130
3   王五   19   男           3    3   140


第二范式:唯一性 

设计:  学生  选修课  成绩

id  姓名  年龄   选修课  成绩
 1  张三  18     化学     99
 2  张三  18     毛概     66
 3  李四  18     物理     99
 4  李四  18     java     59

 学生表                成绩表
id  姓名  年龄        id sid  课程  成绩
1   张三  18           1  1    化学  99              
2   李四  18           2  1    毛概  66 
                       3  2    物理  99
                       4  2    java  59


第三方式:减少冗余

 id  name age  gname  班主任
  1  张三 18   QY97   罗
  2  李四 18   QY97   罗
  3  王五 18   QY98   罗
  4  赵六 18   QY98   萝

  id name age gid      id gname
  1  张三 18   1        1  QY97
  2  李四 18   1        2  QY98
  3  王五 18   2
  4  赵六 18   2

  问题: 主外键  总结 哪张表应该加外键 
  一对多   一个班级 有 多个学生
           一个用户 有 多个手机号
           一个学生 有 多个课程


反三范式:在实际开发中,适当的冗余能提高开发效率

 

数据库常用语句

标签:base   dex   效率   pre   nbsp   ade   三范式   链接   课程   

人气教程排行