--标量子查询
子查询:嵌套在其它查询中的查询
标量子查询:只返回一行一列(即一个单元格数据)的子查询。相当于是一个数
SELECT ... ---查询的内容不做限制
FROM ...
WHERE ( ---表示大小关系的>/=/<
SELECT... ---目标值:一行一列一个值,当做常数处理
FROM...
WHERE...);
--关联子查询
嵌套在其他表中的查询。只用于组内比较。
子查询返回一列数据:子查询的结果,与主查询的目标列存在一定的关联。
SELECT ... ---查询的内容不做限制
FROM ...
WHERE ( ---表示大小关系的>/=/<
SELECT... ---目标值:一列值
FROM...
WHERE...); ---注意关联条件的位置
(具体解释详见:https://blog.csdn.net/qq_34988996/article/details/119937359)
--普通子查询
子查询:嵌套在其它查询中的查询。
子查询返回一列数据:将子查询的结果列,作为主查询的取值范围。
SELECT ... ---查询的内容不做限制
FROM ...
WHERE ( ---表示取值范围的IN
SELECT... ---目标值:一列值
FROM...
WHERE...); ---注意关联条件的位置
--表联结
关系型数据库将数据保存在不同的表中,原则:一类数据一个表,表之间相互关联
分解数据为多个表,能有效方便地处理数据,但是检索数据的时候必须使用 联结
1.联结:一种机制,关联多个表,返回一组输出。在一条SELECT语句中实现
2.主键:唯一的标识,可以是ID或任何唯一值
SELECT 列名 ---指定的检索列,可以出自不同的表
FROM 表1,表2 ---从一个表扩充到两个表,也可以是更多的表,中间用逗号相连
WHERE 表1.列a = 表2.列b ---过滤条件外,多了一个联结条件。逐行匹配
注意:
1.必须完整的列名,否则会出现二义性,而返回错误
2.必须是一个连续的联结关系,不允许有表单独存在。
--内部联结
联结的前提:必须有共同列
联结结果:所有表的所有列、共同列重复的行
SELECT ...
FROM 表1 INNER JOIN 表2,...
ON 表1.列a = 表2.列b,... ---联结条件
注意:
相比子查询,性能更好,且可以从多个表中的选择结果字段,而子查询只能从主表中选择结果字段。
--外部联结
联结的前提:必须有共同列
联结结果:所有表的所有列、包含相关表中没有关联行的行
SELECT ...
FROM 表1 RRIGHT(包含右边表的所有行)/LEFT(包含左边表的所有行)/FULL(包含两边边表的所有行)
OUTER JOIN 表2,...
ON 表1.列a = 表2.列b,... ---联结条件
注意:
多表联结先测试每一个联结
--在联结中使用聚集函数:
SELECT ...
FROM (SELECT...
FROM...
WHERE...) ---构建一个虚拟表
GROUP BY...; ---聚合函数
--组合查询 UNION(表的加法,并集)
SELECT 列字段
FROM 单表/多个表
UNION
SELECT 列字段
FROM 单表/多个表
注意
1.自动过滤重复行
2.两条及两条以上的SELECT语句,每两条语句之间UNION一次
3.UNION ALL关键字,重复行也保留
4.列字段中必须有相同的列,表达式或聚集函数
5.列字段数据类型必须一致(允许隐式转换)
6.最终列字段名由第一条SELECT语句决定
7.在最后一个SELECT语句中可以使用ORDER BY子句,且作用于整个检索结果。
8.字段名由SELECT展示结果决定