在实际开发当中,数据量往往会比较大,往往会涉及到多张表,也就意味着要从多张表中查询数据,这里会涉及到多表关系,此篇博客也是建立在了解了多表关系之后的。
前言
此篇为个人初期笔记
如有错误,请兄弟们指正。
多表查询就是在单表的基础上加上一个表,然后会出现一个问题,就是查询的数据和想要的数据不一致,这被称作笛卡尔积,我们现在的目的就是消除无效的笛卡尔积,在原先的语句基础上加上一个条件即可。
1.内连接
- 查询俩张表交集部分的数据
a>隐式内连接
SELECT 字段列表 FROM 表1,表2 WHERE 条件…
b>显式内连接
SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON连接条件…
2.外连接
a>左外连接
-
查询左表以及交际部分的数据
-
SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 条件;
b>右外连接
-
查询右表以及交集部分的数据
-
SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 条件;
3.自连接
-
俩张相同的表进行连接查询
-
SELECT 字段列表 FROM 表A 别名A JOIN 表A 别名B ON 条件;
-
自连接查询,可以是内连接,也可以是外连接。
4.联合查询
把多次查询的结果合并起来,形成一个新的查询结果集
- union:去重
- union all :不去重
注意:
- 对联合查询的多张表的列数必须保持一致,字段类型也需要保持一致
5.子查询
a>概念
- sql语句中嵌套sql语句
- 子查询外部的语句可以是:INSERT / UPDATE / DELETE / SELECT
b>分类
- 按查询结果
-
标量子查询
使用的关键字:
=、<、>、>、>=、<、<= -
列子查询
子查询返回的结果为多列
使用的关键字:
IN:多选一NOT IN:不能为这些值
ANY :只要满足一个就行
SOME:只要满足一个即可
ALL:所有都得满足
-
行子查询
子查询返回的结果为多行
使用的关键字:
=、<、>、IN、NOT IN -
表子查询
子查询返回的结果为多行多列
IN