员工表和部门表两张表,需要查出employee_id和department_name这两个字段
一、关联查询基本介绍
1、笛卡尔积类错误的查询方式:
SELECT employee_id, department_name
FROM employees, departments通过这样查出来的效果有1000多条,因为每个员工id 将department_name的值都匹配了一次。
2、增加连接条件
连接条件:根据员工表中的dept_id和部门表中的dept_id 对应
SELECT employee_id, department_name
FROM employees, departments
WHERE employees.`department_id` = departments.`department_id`即可成功,也叫关联查询
在关联查询时尽可能的在每个字段前增加对应的表
SELECT employees.employee_id, departments.department_name, departments.department_id
FROM employees, departments
WHERE employees.`department_id` = departments.`department_id`3、起别名
如果在查询过程中 给表起了别名,该语句中只能用别名
错误方式:
SELECT employees.employee_id, departments.department_name, departments.department_id
FROM employees emp , departments dept
WHERE employees.`department_id` = departments.`department_id`正确方式:
SELECT emp.employee_id, dept.department_name, dept.department_id
FROM employees emp , departments dept
WHERE emp.`department_id` = dept.`department_id`二、关联查询的分类
1、分类一:等值连接 非等值连接
数据库学习笔记系列(6)——等值与非等值连接查询_bigface1234fdfg的博客-CSDN博客
2、分类二:自连接 非自连接
自连接:
表与本身关联,比如在员工表中有主管或者上级字段时(因为主管字段的值即为员工号) 
例子:#查询员工和上级的id与姓名
SELECT emp1.`employee_id`, emp1.`last_name`, emp2.`employee_id` 'boos_id',emp2.`last_name` 'boos_name'
FROM employees emp1, employees emp2
WHERE emp1.`manager_id` = emp2.`employee_id`相当于两个emp表合并在一起,合并的条件是emp1中的manager_id与emp2的emp_id相等。合并的新的表有20个字段(10+10)
3、分类三:内连接 外连接
内连接
合并具有同一列的两个以上的表的行,相当于两个表的交集,结果中不包含一个表与另一个表不匹配的行。
SELECT dept.`department_id`, emp.`last_name`
FROM employees emp JOIN departments dept
ON emp.`department_id` = dept.`department_id`
employee表中有107条员工数据,但有一条数据没有部门,所以输出的结果只有106条,相当根据 选取条件取得了交集
外连接
(1)左外连接/右外连接
交集加左边的集合/右边的集合
SELECT dept.`department_id`, emp.`last_name`
FROM employees emp LEFT JOIN departments dept
ON emp.`department_id` = dept.`department_id`
此例主表为左边的表,此时获取的结果有107条,员工有部门编号的106条加 左表emp中有一个员工没有部门号。
SELECT dept.`department_id`, emp.`last_name`
FROM employees emp LEFT JOIN departments dept
ON emp.`department_id` = dept.`department_id`
此例主表为右边的表,因此显示了122条,其中106条有部门的员工加上16条 没有员工的部门

(2)满外连接
full outer join ... on ...(mysql不支持)
SELECT * FROM xxx
WHERE employees FULL OUTER JOIN departments
ON ...
三、最后7中Join的实现

版权声明:本文为weixin_42196338原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。
