首页 小组 文章 相册 留言本 用户 搜索 我的社区 在线学堂 商城 购物车 支付钱包

[打卡]蒂催溪程 外连接

2024-04-16 15:06:32
0
114

-- 内连接vs外连接
-- 回顾
SELECT employee_id,department_name
from employees e,departments d
where e.department_id=d.department_id;

-- 外连接
SELECT * FROM employees;
-- 有员工没部门,有部门没员工。如果把所有的都查出来就叫外连接
-- 外连接,涉及两个语法SQL92和SQL99
-- 外连接:合并具有同一列的两个以上的表的行,结果集中除了包含一个表与另一个表匹配的行之外,还查询到了左表或右表中不匹配的行
-- 外连接的分类:左外连接、右外连接、满外连接
-- 左外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回左表中不满足条件的行,这种连接称为左外连接。
-- 右外连接:两个表在连接过程中除了返回满足连接条件的行以外还返回右表中不满足条件的行,这种连接称为右外连接。

-- SQL92的内连接
SELECT employee_id,department_name
from employees e,departments d
where e.department_id=d.department_id;

-- SQL92的外连接使用“+”(MYSQL不支持SQL92语法)
-- 查询所有的员工id和部门名字
SELECT e.employee_id,d.department_name
FROM employees e,departments d
where e.department_id=d.department_id(+);

-- SQL99的内连接(INNER可以省略)
SELECT e.employee_id,d.department_name
FROM employees e JOIN departments d
ON e.department_id=d.department_id;

SELECT e.employee_id,d.department_name
FROM employees e INNER JOIN departments d
ON e.department_id=d.department_id;

-- SQL99的内连接加上city(INNER可以省略)
SELECT e.employee_id,d.department_name,city
FROM employees e JOIN departments d
ON e.department_id=d.department_id
JOIN locations l
ON d.location_id=l.location_id;

-- SQL99的外连接(OUTER可以省略)
-- 左外连接(有员工没部门)
SELECT employee_id,department_name
FROM employees e LEFT OUTER JOIN departments d
ON e.department_id=d.department_id;

SELECT e.employee_id,d.department_name
FROM employees e LEFT JOIN departments d
ON e.department_id=d.department_id;

-- 右外连接(有部门没员工)
SELECT employee_id,department_name
FROM employees e RIGHT JOIN departments d
ON e.department_id=d.department_id;

评论
意见反馈