1.啥叫多表查询?
我要查询的信息 a表有一些 b 表也有一些
2.多表查询方式
- 内连接
- 隐式内连接
- 显式内连接
- 外连接
- 全连接 full outner
- Left outner 左外连接 左表过滤
- Right outner 右外连接 右表过滤
2.1.1啥叫隐式内连接
语法:select *from work1,work2 where 连接条件
没有限制条件就会得到笛卡尔积
2.1.2啥叫显式内连接
语法:select *from work1 (inner)join work2 on 连接条件
2.1.3外连接
左外连接(left [outer] join):查询出 join 左边表的全部数据,右边的表不能匹配的数据使用 null
来填充数据
右外连接(right [outer] join):查询出 join 右边表的全部数据,左边的表不能匹配的数据使用
null 来填充数据
全外连接(full [outer] join):MySQL 不支持,可以通过 union + 左右连接查询来完成
3.如何查询
如果表有别名,则不能再使用表的真名
MySQL 执行关联查询的过程:MySQL 先在一个表中循环取出单条数据,然后再嵌套循环到下一个表中寻找匹
配的行,依次下去,直到找到所有表中匹配的行为止。然后根据各个表匹配的行,返回査询中需要的各个列(嵌
套循环关联)
4.子查询
子查询必须要位于圆括号中
不能把同一个表既用于子查询的 from 子句,又用于更新目标,如
update t1 set column2 = (select max(column1) from t1);
update t1 set column2 = (select max(column1) from t1);
4.1子查询的分类
标量子查询:子查询返回的结果是一个数据(一行一列),当成一个标量值使用,可以使用单行记录比较运算符
列子查询:返回的结果是一列(一列多行),当成一个值列表,需要使用 in、any 和 all 等关键字,any
和 all 可以与 >、>=、<、<=、<>、= 等运算符结合使用 in:与列表中的任意一个值相等 any:与列表中
的任意一个值比较,=any、>any、all、