【MySQL】连接查询

笛卡儿积现象:

多表连接查询就是从多个表中获取数据,若两张表进行连接查询的时候没有任何条件限制,最终的查询结果总数是两张表记录的乘积,该现象称为笛卡儿积现象。

内连接

根据连接条件从多个表中查询选择数据,显示这些表中与连接条件相匹配的行,组合成新的记录。


分类:
        等值连接:连接条件为相等判断的

        非等值连接:连接条件不为相等判断的

        自连接:在一个连接查询中,涉及的两个表都是同一张表的查询,自连接是一种特殊的连接查询,它指相互连接的表在物理上为同一张表,在逻辑上分为两张表

#等值连接
select * from emp, dept
where emp.deptno = dept.deptno;

select * from emp join dept
on emp.deptno = dept.deptno;


select ename, emp.deptno, dname
from emp join dept
on emp.deptno = dept.deptno;


#非等值连接:查询员工的薪水等级
select e.ename, e.sal, s.grade
from emp e join salgrade s
on e.sal between s.losal and s.hisal;

#自连接:查询员工所对应的领导名称
select e1.ename, e2.ename mgr_name 
from emp e1 join emp e2 
on e1.mgr=e2.empno;

select e1.ename, e2.ename mgr_name 
from emp e1, emp e2 
where e1.mgr=e2.empno;

外连接

A表和B表能够完全匹配的记录查询出来之外,将其中一张表的记录无条件的完全查询出来,对方表没有匹配的记录时,会自动模拟出null值与之匹配。


注意:外连接的查询结果条数>=内连接的查询结果条数


分类:


左外连接left [outer] join显示左表全部记录,右表满足连接条件的记录

右外连接right [outer] join显示右表全部记录,左表满足连接条件的记录

#左外连接
select *
from dept left join emp
on emp.deptno = dept.deptno;

#右外连接
select *
from emp right join dept
on emp.deptno = dept.deptno;

#查询员工所对应的领导名称
select e1.ename, e2.ename mgr_name 
from emp e1 left join emp e2 
on e1.mgr=e2.empno;

练习题

1.查询员工所对应的部门名称

2.查询员工薪水所对应的薪水等级

3.查询出员工所对应的领导名称

4.查询员工所对应的部门名称,要求显示所有部门

5.查询员工所对应的部门名称,要求显示所有员工

6.查询出员工的部门名称,员工的领导名称和薪水等级
 

#1.
select * 
from emp join dept
on emp.deptno=dept.deptno;

#2.
select ename, sal, grade
from emp join salgrade
on sal between losal and hisal;

#3.
select e1.ename, e2.ename mgr_name 
from emp e1 join emp e2 
on e1.mgr=e2.empno;

#4.
select *
from emp right join dept
on emp.deptno=dept.deptno;

#5.
select *
from emp left join dept
on emp.deptno=dept.deptno;

#6.
select e1.ename, e2.ename mgr_name, d.dname, grade
from emp e1
join emp e2 on e1.mgr = e2.empno
join dept d on e1.deptno=d.deptno
join salgrade on e1.sal between losal and hisal;

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值