关联查询

-需求:查询员工及其所在部门(显示员工姓名,部门名称)

1. 交叉连接查询(不推荐。产生笛卡尔乘积现象:4 * 4=16,有些是重复记录)

SELECT empName,deptName FROM employee,dept;

--需求:查询员工及其所在部门(显示员工姓名,部门名称)

--多表查询规则:

1)确定查询哪些表

2)确定哪些哪些字段

3)表与表之间连接条件(规律:连接条件数量是表数量-1)

2. 内连接查询:只有满足条件的结果才会显示(使用最频繁)

SELECT empName,deptName-- 2)确定哪些哪些字段

FROMemployee,dept-- 1)确定查询哪些表

WHEREemployee.deptId=dept.id-- 3)表与表之间连接条件

--内连接的另一种语法

SELECT empName,deptName

FROMemployee

INNERJOIN dept

ONemployee.deptId=dept.id;

--使用别名

SELECT e.empName,d.deptName

FROMemployee e

INNERJOIN dept d

ONe.deptId=d.id;

--需求:查询每个部门的员工

--预期结果:

--软件开发部张三

--软件开发部李四

--应用维护部王五

--秘书部陈六

--总经办null

-- 左[外]连接查询:使用左边表的数据去匹配右边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null

--(注意:左外连接:左表的数据一定会完成显示!)

SELECT d.deptName,e.empName

FROMdept d

LEFTOUTER JOIN employee e

ONd.id=e.deptId;

-- 右[外]连接查询:使用右边表的数据去匹配左边表的数据,如果符合连接条件的结果则显示,如果不符合连接条件则显示null

--(注意:右外连接:右表的数据一定会完成显示!)

SELECT d.deptName,e.empName

FROMemployee e

RIGHTOUTER JOIN dept d

ONd.id=e.deptId;

自连接查询

--需求:查询员工及其上司

--预期结果:

--张三null

--李四张三

--王五李四

--陈六王五

SELECT e.empName,b.empName

FROMemployee e

LEFTOUTER JOIN employee b

ONe.bossId=b.id;

你可能感兴趣的:(关联查询)