用法:
当查询的字段来自于多个表时,就会用到连接查询
按照功能分类
内连接: 等值/非等值链接,自链接
外连接: 左/右外连接,全外链接
交叉链接
笛卡尔乘积现象
表1有m行,表2有n行,结果=m*n行
发生原因:没有有效的连接条件
一.内链接之等值连接
案例一:从女生表查找到男生表中的男女朋友关系
SELECT name,boyName FROM boys,beauty
WHERE beauty.boyfriend_id=boys.id
案例二:添加筛选条件
查询有奖金的员工名,部门名
SELECT last_name,department_name,commission_pct
FROM employees,departments
WHERE employees.department_id=departments.department_id
and employees.commission_pct is not null
案例三:添加分组
查询每个城市的部门个数
SELECT count(*) 个数, city
FROM departments, locations
WHERE departments.location_id=locations.location_id
GROUP BY city;
案例四:添加排序
查询每个工种的工种名 和 员工的个数,并按照员工的个数进行排序
SELECT job_title,count(*)
FROM employees,jobs
WHERE jobs.job_id = employees.job_id
GROUP BY job_title
ORDER BY COUNT(*) DESC;
案例四:实现三表链接
查询员工名,部门名 和 所在的城市
SELECT last_name,department_name,city
FROM employees,departments,locations
WHERE employees.department_id=departments.department_id
and departments.location_id = locations.location_id
ORDER BY department_name DESC;
二.内链接之非等值连接
查询员工的工资与工资级别
SELECT last_name,salary,grade_level
FROM employees e, job_grades g
WHERE salary BETWEEN g.lowest_sal and g.highest_sal
自连接
即连续查询一个表两次
案例:查询员工名和上级领导的名称
因为上级领导也是属于员工,需要在员工表中查询两次
SELECT e.employee_id ,e.last_name 员工名 ,m.employee_id,m.last_name 领导名
FROM employees e, employees m #查询第一遍备注为e,第二遍为m
WHERE e.manager_id=m.manager_id