插入数据:
INSERT INTO dept VALUES(4,'软件开发部');
INSERT INTO dept VALUES(5,'软件维护部');
INSERT INTO dept VALUES(6,'秘书部');
INSERT INTO employee(NAME,deptId) VALUES('张三',4);
INSERT INTO employee(NAME,deptId) VALUES('李四',5);
INSERT INTO employee(NAME,deptId) VALUES('王五',4);
INSERT INTO employee(NAME,deptId) VALUES('陈六',5);
***多表查询的步骤: ***
1)确定查询哪些表
2)确定查询哪些字段
3)确定连接条件(规则: 表数量-1)
内连接查询(使用最多):
-- 内连接效果:只有满足连接条件的数据才会显示出来
SELECT e.name,d.name
FROM employee e,dept d
WHERE e.deptId=d.id;
-- 另一种语法
SELECT e.name,d.name
FROM employee e
INNER JOIN dept d
ON e.deptId=d.id;
因为没有秘书部的人,所以这个部门也没有显示
左/右外连接查询(其次):
-- 需求: 查询部门及其部门的员工(部门全部显示)
-- 左外连接查询效果: 左表(部门表)的数据全部显示,右表(员工)的数据当满足连接条件的时候,
-- 就显示满足条件的的数据,但是如果不满足连接条件,则显示null
-- 预期结果:
-- 软件开发部 张三
-- 软件开发部 王五
-- 软件维护部 李四
-- 软件维护部 陈六
-- 秘书部 null
SELECT d.name,e.name
FROM dept d
LEFT OUTER JOIN employee e
ON d.id=e.deptId;
-- 可以理解为,dept在 employee表的左边
-- 1.4 右外连接查询
-- 右外连接查询效果: 右表(部门表)的数据全部显示,左表(员工)的数据当满足连接条件的时候,
-- 就显示满足条件的数据,但是如果不满足连接条件,则显示null
SELECT d.name,e.name
FROM employee e
RIGHT OUTER JOIN dept d
ON d.id=e.deptId;
-- 可以理解为,employee在dept表的右边
以左边的部门为主显示,然后找到对应的右边的员工,没有显示null
自连接查询:
-- 需求: 查询员工姓名及其上司姓名(没有上司的员工也显示)
-- 预期结果:
员工 上司
-- 张三 null
-- 李四 张三
-- 王五 李四
-- 陈六 王五
SELECT e.name AS '员工',b.name AS '上司'
FROM employee e
LEFT OUTER JOIN employee b
ON e.bossId=b.id;