多表关系
1.概述:项目开发中,在进行数据库表结构设计时,会根据业务需求集业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在各种联系。
2.分类
①一对多:在多的一方建立外键,指向一的一方的主键
②多对多:建立第三张中间表,中间表至少包含两个外键,分别关联两方主键。
③一对一:在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
多表查询
1.概述:指从多张表中查询数据
附:笛卡儿积,指在数学中,两个集合,A集合和B集合的所有组合情况(在多表查询中需要消除无效的笛卡儿积)
2.代码实现
# 未消除笛卡儿积的多表查询
SELECT * FROM 表名1,表名2;
# 消除了笛卡儿积的多表查询(可用WHERE条件消除)
SELECT * FROM 表名1,表名2 WHERE 表名1.外键 = 表名2.主键;
连接查询
内连接
1.内连接查询的是两张表交集的部分
2.语法
# 隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件……;
# 显示内连接
SELECT 字段列表 FROM 表1 [INNER] JION 表2 ON 连接条件……;
# 两个连接方式效果是一样的,区别在于语法的不同
外连接
1.外连接查询的是两个表中满足连接条件的所有行,以及左表中未找到匹配行的右表的所有行(左外连接),或右表中未找到匹配行的左表的所有行(右外连接)。外连接通常用于查找相关联的数据,即使在某些表中没有匹配的行。
2.语法
# 左外连接
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件……;
相当于查询表1(左表)的所有数据,包含表1和表2交集部分的数据
# 右外连接
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JION 表2 ON 条件……;
相当于查询表2(右表)的所有数据,包含表1和表2交集部分的数据
自连接
1.自连接是指使用表的别名实现表与其自身连接的查询方法。
2.语法
SELECT 字段列表 FROM 表A 别名A JION 表A 别名B ON 条件……;
# 自连接查询,可以是内连接查询,也可以是外连接查询。
联合查询-union,union all
对于union查询,就是把多次查询的结果合并起来,形成一个新的查询结果集
# 将两次查询结果进行合并成一个新的查询结果集
SELECT 字段列表 FROM 表A ……
UNION [ALL]
SELECT 字段列表 FROM 表B ……;
注意:
① 对于联合查询的多张表的列数要保持一致,字段类型也需要保持一致
② union all会将全部的数据直接合并在一起,union会将查询结果进行去重。
子查询
1. 概念:SQL语句中嵌套SELECT语句,称为嵌套查询,又称子查询。
2.代码
SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);
# 注意:子查询外部的语句可以是INSERT\ UPDATE\ DELETE\ SELECT的任何一个。
3.分类
A.根据子查询的结果,分为
①标量子查询(子查询结果为单个值)
②列子查询(子查询结果为一列)
③行子查询(子查询结果为一行)
④表子查询(子查询结果为多行多列)
附: