概念:指从多张表中查询数据
多表关系:
多表关系关联:
一对多:在多的乙方设置外键,关联一的一方的主键。
多对多:建立中间表,中间表包含两个外键,关联两张表的主键。
一对一:在其中任意一方设置外键(UNIQUE),关联另一方的主键。
连接查询
1.内连接:相当于查询A,B交集部分数据
? ? ???隐式内连接:SELECT 字段列表 FROM 表1,表2 WHERE 条件...;
? ? ? ?显示内连接:SELECT 字段列表 FROM 表1?[INNER] JOIN 表2 ON 连接条件...;
2.外连接:当我们的一张表相关联的数据为NULL时,使用外连接就可以把表中为NULL的数据也查询出来
? ? ? ?左外连接:查询左表所有数据以及两表交集部分数据。
? ? ? ? ? ? ? ? ? ? ? ? ? ? SELECT 字段列表 FROM 表1 LEFT?[OURER] JOIN 表2 ON 连接条件...;
? ? ? ?右外连接:查询右表所有数据以及两表交集部分数据
? ? ? ? ? ? ? ? ? ? ? ? ? ??SELECT 字段列表 FROM 表1 RIGHT?[OURER] JOIN 表2 ON 连接条件...;
3.自连接:当前表与自身的连接查询,自连接必须使用表别名,可以使用内连接也可以使用外连接查询,语法跟上面一样,给表取个别名当成两张表进行操作即
?联合查询
将多次查询的结果合并起来,形成一个新的查询结果,相当于‘且’。
注意:
1.去掉ALL可以去重。
2.联合查询的字段数,字段类型需要保持一致。
语法:? ?
? ? ? ? SELECT 字段列表 FROM 表 A...
? ? ? ? UNION[ALL]
????????SELECT 字段列表 FROM 表 B...
子查询:?SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
SELECT * FROM 表1?WHERE 字段=(SELECT 字段 FROM 表2);
子查询外部的语句可以是INSERT/UPDAT/DELETE/SELECT中的任何一个。
标量子查询:子查询结果为单个值
列子查询:子查询结果为一列
行子查询:子查询结果为一行
表子查询:子查询结果为多行多列
操作符:
IN:在指定集合范围多选一
NOT IN:不在指定范围集合内
ANY:子查询返回列表有一个满足即可
SOME:与ANY 等同
ALL:子查询返回列表所有值都得满足
注意:当给表取了别名之后,就不能使用原表名来限制字段