多表查询不指定条件的话可能会先笛卡尔积。
避免笛卡尔积,加上有效的查询条件即可

  1. -- 多表连接查询
  2. SELECT name,boyName FROM beauty be,boys b
  3. WHERE be.boyfriend_id=b.id

多表连接的方式

内连接

等值连接

上方的消除笛卡尔积即等值连接

  1. -- 查询员工名对应的部门名
  2. SELECT e.department_id, last_name,department_name FROM employees e,departments d
  3. WHERE e.department_id=d.department_id

加上条件的等值连接

  1. -- 查询有奖金的员工名和部门名
  2. SELECT last_name,department_name FROM employees e, departments d
  3. WHERE e.department_id=d.department_id
  4. AND e.commission_pct IS NOT NULL

等值连接总结:

1、多表连接查询为查询的交集部分
2、多表的顺序没有要求
3、一般需要给表加上别名,加上别名后原表名将失效
4、可以搭配排序、分组、筛选函数结合使用。

非等值连接

  1. -- 查询员工的工资和工资级
  2. SELECT salary,grade_level
  3. FROM employees e, job_grades j
  4. WHERE e.salary BETWEEN j.lowest_sal AND j.highest_sal

自连接

  1. -- 查询员工的上级姓名
  2. SELECT e.employee_id,e.last_name,m.last_name 上级姓名
  3. FROM employees e,employees m
  4. WHERE e.employee_id=m.employee_id

总结:

相当于复制了一张表出来,在复制的表上再做查询。

外连接

左连接
右连接
全联接

交叉连接