进阶6:连接查询
含义:又称多表查询,当查询的字段来自于多个表时,就会用到连接查询
笛卡尔乘积现象:表1 有m行,表2有n行,结果=m*n行
发生原因:没有有效的连接条件
如何避免:添加有效的连接条件
分类
按年代分类:
- sql92标准:仅仅支持内连接(等值、非等值、自连接)
- sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接
按功能分类:
- 内连接:等值连接、非等值连接、自连接
- 外连接:左外连接、右外连接、全外连接
- 交叉连接
sql92标准
1、等值连接
特点:
①多表等值连接的结果为多表的交集部分
②n表连接,至少需要n-1个连接条件
③多表的顺序没有要求
④一般需要为表起别名
⑤可以搭配前面介绍的所有子句使用,比如排序、分组、筛选
案例1 :查询女神名和对应的男神名
SELECT
NAME,
boyName
FROM
boys,
beauty
WHERE beauty.`boyfriend_id` = boys.`id` ;
结果:
案例2:查询员工名和对应的部门名
SELECT
last_name,
department_name
FROM
employees,
departments
WHERE employees.`department_id` = departments.`department_id` ;
结果:
(1)为表起别名
- 提高语句的简洁度
- 区分多个重名的字段
注意:如果为表起了别名,则查询的字段就不能使用原来的表名去限定
案例:查询员工名、工种号、工种名
SELECT
last_name,
e.job_id,
job_title
FROM
employees AS e,
jobs AS j
WHERE e.`job_id` = j.`job_id` ;
结果:
(2)两个表的顺序是可以调换
案例:查询员工名、工种号、工种名
SELECT
e.last_name,
e.job_id