表连接查询
什么是多表查询
# 数据准备
# 多表查询的作用
* 比如:我们想查询孙悟空的名字和他所在的部门的名字,则需要使用多表查询
# 如果一条 SQL 语句查询多张表,因为查询结果在多张不同的表中,每张表取 1 列或多列
# 多表查询的分类
笛卡尔积现象
# 什么是笛卡尔积现象?
# 如何消除笛卡尔积现象的影响
* 我们发现不是所有的数据组合都是有用的,只有员工表.dept_id = 部门表.id 的数据才是有用的。所以需要通过条件过滤掉没用的数据
内连接
用左边表的记录去匹配右边表的记录,如果符合条件的则显示。如:从表.外键 = 主表.主键
# 隐式内连接
* 看不到 JOIN 关键字,条件使用 WHERE 指定
# 显示内连接
* 使用 INNER JOIN ... ON 语句,可以省略 INNER
# 内连接查询的步骤:
* 确定查询哪些表
* 确定表连接的条件
* 确定查询的条件
* 确定查询的字段
左外连接
# 使用 LEFT OUTER JOIN ... ON 语句,OUTER 可以省略
* 用左表的记录去匹配右边表的记录,如果符合条件的则显示,否则,显示 NULL
* 可以理解为:在内连接的基础上保证坐标的数据全部显示
右外连接
# 使用 RIGHT OUTER JOIN ... ON 语句,OUTER 可以省略
* 用右边表的记录去匹配左边表的记录,如果符合条件的则显示
* 可以理解为:在内连接的基础上保证右表的数据全部显示
子查询
什么是子查询
# 子查询的概念:
* 一个查询的结果作为另一个查询的条件
* 有查询的嵌套,内部的查询称为子查询
* 子查询要用括号
子查询结果的三种情况
# 子查询的结果是单行单列的
# 子查询的结果是多行单列的
# 子查询的结果是多行多列的
子查询的结果是一个值的时候
# 子查询的结果只要是单行单列,肯定在 WHERE 后面作为条件,父查询一般使用比较运算符
# 案例:查询工资最高的员工是谁
# 案例:查询工资低于平均工资的员工有哪些
子查询的结果是多行单列的时候
# 子查询的结果是单列多行,结果集类似于一个数组,父查询使用 IN 运算符。