DQL_SQL多表连接查询
多表联合查询:一般一个业务都会对应多张表,避免出现数据冗余
连接查询
分类:按连接方式
分类 | 细分 |
---|---|
内连接(inner join) | 等值连接 |
非等值连接 | |
自连接 | |
外连接(left join ; right join) | 左外连接 |
右外连接 | |
全连接 |
在表的连接查询方面有一种现象被成为:笛卡尔积现象(笛卡尔乘积现象)
案例:找出每个员工的部门名称,要求显示员工名和部门名
1 | select e.ename,d.dname from emp e,dept d; |
当两张表进行连接查询时,如果没有任何条件限制,最终查询结果为两张表的乘积
表的别名好处:执行效率高,指定在那张表中查询;可读性好
避免笛卡尔积现象
添加条件进行过滤,但是匹配次数仍然没变,只是显示的是过滤后的记录
内连接—–等值连接
最大特点:条件是等量关系
找出每个员工的部门名称,要求显示员工名和部门名
sql92(旧语法),where后添加条件为and,关系不明确
1 | select e.ename,d.dname from emp e ,dept d where e.deptno=d.deptno; |
sql99(新语法),后面可以添加where过滤条件,inner可省略
1 | select e.ename,d.dname from emp e inner join dept d on e.deptno=d.deptno; |
内连接—–非等值连接
最大特点:连接条件中的关系是非等量关系,inner可省略
案例:找出每个员工的工资等级,要求显示员工名,工资,工资等级
1 | select |
内连接—–自连接
最大特点:一张表看做两张表,自己连接自己,inner可省略
案例:找出每个员工的上级领导,要求显示员工名和对应的上级 的领导名
1 | select |
#### 外连接
内连接:两张表没有主副之分,inner
可省略
外连接:一张为主表,一张为副表,当副表中没有数据和主表中数据匹配,副表自动模拟出null与之匹配,outer
可省略
左连接:左外连接,左边的表为主表
右连接:右外连接,右边的表为主表
案例:找出每个员工的上级领导(所有员工必须查询出)
1 | select |
案例:找出没有员工的部门
1 | select |
多表连接
1 | select |
表示a表与b表先连接查询,然后a表再与c表连接查询
案例:找出每一个员工的部门名称,工资等级
1 | select |
案例:找出每一个员工的部门名称,工资等级,以及上级领导
1 | select |