概述
- 含义:又称多表查询,当查询的字段来自于多个表的时候,就会用到连接查询
笛卡尔乘积现象
- 例如表1有m行,表2有n行,结果有m*n行,这种现象就叫做笛卡尔乘积现象
- 发生原因:没有添加有效的连接条件
- 如何避免:添加有效的连接条件
连接查询的分类
- 按年代分类
- sql92标准(即1992年推出的标准):MySQL中仅仅支持内连接
- sql99标准(即1999年推出的标准):MySQL中支持内连接、外连接(仅支持左外和右外连接)以及交叉连接。
- 按功能分类:
- 内连接:
- 等值连接
- 非等值连接
- 自连接
- 外连接:
- 左外连接
- 右外连接
- 全外连接
- 交叉连接
- 内连接:
各种连接方式举例(MySQL)
等值连接
特点
- 多表等值连接的结果为多表的交集部分
- n个表连接,至少有n-1个连接条件
- 多表的顺序没有要求
- 一般需要为表取别名
- 可以搭配之前学过的所有查询子句来使用,比如分组、排序、筛选等等
简单举例
- 查询女神名对应的男神名(女生男朋友的名字)
- 查询员工名对应的部门名
为表起别名
- 好处
- 提高语句的简洁度
- 区分多个重名的字段
- 如果为表起了别名,则查询的字段就不能使用原来的表名去限定
- 查询员工名、工种号、工种名
添加筛选条件
- 查询有奖金的员工名和部门名
- 查询城市名中第二个字符为o的部门名和城市名
添加分组条件
- 查询每个城市的部门个数
- 查询有奖金的每个部门的部门名和部门的领导编号和该部门的最低工资
添加排序
- 查询每个工种的工种名和员工的个数,并且按员工的个数降序
实现三表连接
- 查询员工名、部门名和所在的城市
非等值连接
- 与等值连接基本相同,只不过连接条件不再是等式,而是不等式
- 查询员工的工资和工资水平
- 员工的工资水平如下表
- 员工的工资水平如下表
自连接
- 自连接与等值连接和非等值连接的区别就是,其他两种内连接方式都涉及到多个表,而自连接只涉及到一个表。
- 查询员工名以和他上级的名称