发布时间:2022-08-19 12:18
目录
1.外键约束 foreign key
2.表的设计
表的三种形式:
3.聚合查询
3.1.聚合函数
3.2. GROUP BY子句
3.3HAVING
4.联合查询
4.1笛卡尔积
4.2.内连接和外连接
4.3.自连接(用的并不多)
4.4.子查询
4.5.合并查询
5.sql中各个关键字执行的先后顺序
外键用于关联其他表的主键或唯一键
--语法
foreign key (字段名) references 主(列)
1.外键约束同样约束着父表,当父表的某个记录被子表中依赖着的时候,此时尝试进行删除或者修改,都会失败
2外键的工作原理:在子表中插入新的记录时,就会先根据对应的值,在父表中先查询,查询到之后,才能够执行插入
根据实际的问题的场景,把表给设计出来
如何来设计表呢?
一个典型的通用办法:先找出这个场景中涉及到的“实体”,然后来分析“实体之间的关系”
实体:实体就可视为是需求中的一些关键性名词
1.一对一的关系:一个账户对应一个学生,一个学生也只能有一个账户
2.一对多的关系:一个学生处于一个班级中,一个班级也可以包含多个学生
3.多对多的关系:一个学生可以选择多个课程,一个课程也可以包含多个学生
--聚合函数
1.count((distinct) expr) -- 返回查询到的数据的数量
2.sum((distinct) expr) -- 返回查询到的数据的总和,不是数字没有意义
3.avg((distinct) expr) -- 返回查询到的数据的平均值,不是数字没有意义
4.max((distinct) expr) -- 返回查询到的数据的最大值,不是数字没有意义
5.min((distinct) expr) -- 返回查询到的数据的最小值,不是数字没有意义
SELECT 中使用 GROUP BY 子句可以对指定列进行分组查询。需要满足:使用 GROUP BY 进行分组查
询时,SELECT 指定的字段必须是“分组依据字段”,其他字段若想出现在SELECT 中则必须包含在聚合函
数中
group by子句进行分组后,不能使用where进行筛选了,而需要使用having!!!
实际开发中往往数据来自不同的表,所以需要使用多表联合查询,而多表查询就是对多种表进行笛卡尔积
假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。
MySQL使用笛卡尔积进行多表查询,其原理就是通过多张表进行笛卡尔积组成一个临时表,通过这个临时表去除一些不需要的数据,然后再取去除数据的基础上再加上条件最终得到 我们想要的数据
--语法(内连接))
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
内连接:指连接结果包含符合连接条件的就行,参与连接的两个表都应该符合连接条件
外连接:连接条件不仅包含符合连接条件的行同时也包含自身不符合条件的行
左外连接:左边表的数据行全部保留,右边表保留符合连接条件的行
右外连接:右边表的数据行全部保留,左边表保留符合连接条件的行
全外连接:左外连接 union 右外连接
想要进一步了解:内连接与外链接的区别_坤少IT之路-CSDN博客_内连接和外连接的区别
自连接是指在同一张表中连接自身进行查询,其本质就是把 行与行 之间的比较变成 列与列
嵌套在其他sql语句中的select语句,也叫嵌套查询,不做多介绍。
//详细请看这个:
SQL语句基础-子查询_livovil的博客-CSDN博客_子查询的sql语句
1.union(去重)
--语法
select 字段 from 表名(where) 条件
union
select 字段 from 表名(where) 条件
2.union all(不去重)
--语法
select 字段 from 表名(where) 条件
union all
select 字段 from 表名(where) 条件
from > on> join > where > group by > with > having >select > distinct > order by > limit