内连接,左连接,右链接的不同之处
- inner join on ;
- left join on 和 right join on .
创建员工表和部门表
-- 创建部门表
CREATE TABLE IF NOT EXISTS t_department (
id TINYINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL
);
-- 初始化部门数据
INSERT INTO t_department(name)
VALUES('开发部'),
('技术服务部'),
('研发部'),
('测试部'),
('财务部'),
('人事部'),
('产品一部'),
('产品二部');
-- 创建员工表
CREATE TABLE IF NOT EXISTS t_employee (
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(20) NOT NULL,
sex CHAR(1) DEFAULT 'M',
age TINYINT UNSIGNED,
dept_id TINYINT UNSIGNED
);
inner join 语法
-- 内联
-- 语法一
SELECT m.*, n.name AS dept_name
FROM t_employee m
INNER JOIN t_department n ON m.dept_id = n.id;
-- 语法二
SELECT m.*, n.name AS dept_name
FROM t_employee m, t_department n
WHERE m.dept_id = n.id;
left join 和 right join 语法
-- 左外连
SELECT m.id, m.name, m.sex, m.age, n.name AS dept_name
FROM t_employee m LEFT OUTER JOIN t_department n
ON m.dept_id = n.id;
-- 右外连
SELECT m.id, m.name, m.sex, m.age, n.name AS dept_name
FROM t_department n RIGHT OUTER JOIN t_employee m
ON m.dept_id = n.id;
区别
- 当某一员工,处于没有部门状态下,那么使用inner join 内关联,无法将该员工查询出,利用right join 或 left join 将 主要的表的所有需要展示的列查询出.
- left join 和 right join 都是需要查询那一张表,就将哪张表放在对应的放向,例如上左连接,右链接用法.