进阶6:连接查询
含义:又称为多表查询,当查询的字段来自于多个表时,就会涉及到多表查询
`select * from beauty;
select * from boys;
select name,boyName from boys,beauty;`
(出现笛卡尔集错误情况)
select count() from beauty;
假设输出12行
select count() from boys;
假设输出4行
最终结果:12*4=48行
发生原因:没有有效的连接条件
如何避免:先加上有效的连接条件
改正:
`select * from beauty;
select * from boys;
select name,boyName from boys,beauty
where beauty.boyfriend_id = boys.id;`
分类;
按年代分类:
sql92标准:仅仅支持内连接
sql99标准【推荐】:支持内连接+外连接(左外和右外)+交叉连接
##按功能分类
内连接:等值连接、非等值连接、自连接
外连接:左外连接、右外连接、全外连接
交叉连接
一、sql92标准
1、等值连接
案例1:查询女神名和对应的男神名
`select * from beauty;
select * from boys;
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;`
2、查询员工号、工种号、工种名(job_id有歧义,故job_id查询的时候也需要限定一下)
`select last_name,employees.job_id,job_title from employees,jobs
where employees.job_id = jobs.job_id;`
(语句过长,可为表去别名)
`select last_name,e.job_id,job_title from employees e,jobs j
where e.job_id = j.job_id;`
(取了别名,除了那两都要改)
(如果为表起了别名,则查询的字段就不能用原来的表名去限定)
3、两个表的顺序是否可以调换(可以)
4、可以加筛选吗?
案例:查询有奖金的员工名、部门名
`select last_name,department_name from employees e,departments d where e.