多表查询不指定条件的话可能会先笛卡尔积。
避免笛卡尔积,加上有效的查询条件即可
-- 多表连接查询
SELECT name,boyName FROM beauty be,boys b
WHERE be.boyfriend_id=b.id
多表连接的方式
内连接
等值连接
上方的消除笛卡尔积即等值连接
-- 查询员工名对应的部门名
SELECT e.department_id, last_name,department_name FROM employees e,departments d
WHERE e.department_id=d.department_id
加上条件的等值连接
-- 查询有奖金的员工名和部门名
SELECT last_name,department_name FROM employees e, departments d
WHERE e.department_id=d.department_id
AND e.commission_pct IS NOT NULL
等值连接总结:
1、多表连接查询为查询的交集部分
2、多表的顺序没有要求
3、一般需要给表加上别名,加上别名后原表名将失效
4、可以搭配排序、分组、筛选函数结合使用。
非等值连接
-- 查询员工的工资和工资级
SELECT salary,grade_level
FROM employees e, job_grades j
WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal
自连接
-- 查询员工的上级姓名
SELECT e.employee_id,e.last_name,m.last_name 上级姓名
FROM employees e,employees m
WHERE e.employee_id=m.employee_id