多表查询时,查询字段要指定是哪个表的,如果不指定,当两个表都有相同字段就会报错。
笛卡尔积
两个表的乘积,比如A 表有10 条数据,B表有10行,结果是100行数据
SELECT employee_id,department_name FROM employees,departments
等值连接
逻辑判断是相等
查询员工的employee_id,last_name,department_name
SELECT e.employee_id,last_name,d.department_name FROM employees e,departments d WHERE e.department_id = d.department
非等值连接
逻辑判断是大于,小于,大于等于,小于等于
查询员工的工资级别
SELECT e.last_name,e.salary,j.grade_level FROM employees e,job_grades j WHERE e.salary >= j.lowest_sal AND e.salary <= j.highest_sal
自连接
字面自已连接自己,所有字段都是同一表的字段
查询是员工employee_id,姓名和员工管理者的姓名、manager_id
SELECT e.employee_id,e.last_name,m.last_name,m.manager_id FROM employees e,employees m WHERE e.employee_id = m.manager_id
内边接 两个表交集
106 条数据
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
JOIN departments d ON e.department_id = d.department_id;
左外连接 左表多余数据+交集数据
107 条数据
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;
右外连接 右表多余数据+交集数据
122 条数据
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;
左表多余数据 左表所有数据-交集数据
1 条数据
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id
WHERE d.department_id IS NULL
右表多余数据 右表所有数据-交集数据
16 条数据
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
WHERE e.department_id IS NULL
右表多余数据 + 左表多余数据
17 条数据
SELECT employee_id,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL;
左表多余数据 + 交集数据 + 右表多余数据
123 数据
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id
UNION ALL
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id
WHERE e.department_id IS NULL
123 数据
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id
WHERE d.department_id IS NULL
UNION ALL
SELECT e.employee_id,e.last_name,d.department_name FROM employees e
RIGHT JOIN departments d ON e.department_id = d.department_id;