【数据库查询之多表连接查询】

一级目录

多表查询(连接查询)

内连接查询

内连接查询-只可以查询AB表中都匹配的行
(1)等值连接
select 字段 from A表 inner join B表 on 连接条件a.name=b.name (where)。。。
eg:员工对应的部门
select e.ename,d.dname from emp e inner join dept d on e.deptno = d.deptno;

(2)非等值连接
select 字段 from A表 inner join B表 on 条件
eg:员工的工资等级
select e.ename,e.sal,s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal;

(3)自连接
eg:查询员工的名称和员工对应的领导名称 select a.ename empname ,b.ename leadername from emp a join emp b on a.mgr = b.empno;

外连接查询

外连接的查询结果条数 >= 内连接的查询结果条数
外连接–AB两张表,其中一张为主表、另一张为副表,主要查主表,带着查副表,外连接先将主表中的数据全部输出,在匹配副表,当副表中的数据与主表不匹配时 副表自动模拟空值与之匹配。

什么是外连接和内连接有什么区别?
外连接:AB两张表当中一张表是主表,另一张表是副表,主要查询主表中的数据,带着查询副表,当副表中的数据与主表匹配不上的时候,副表自动模拟出null与之匹配
区别:内连接没有主副之分,外连接有主副表之分

select 字段 from A表 left(right) join B表 on 条件。。
left join左边的为主表 right join右边的为主表

三表查询

三表查询
先连接AB表 再连接C表

子查询

子查询in,exists,any(任意一条件),union(连接,去重复),unionAll
什么是子查询?
select 语句当中嵌套select语句,被嵌套的select语句是子查询

子查询可以出现在哪里呢?
(1)where子句中使用子查询
找出高于平均薪资的员工信息
第一步:找出平均薪资
	select avg(sal) from emp;
第二步:where过滤
	select * from emp where sal>...
合并:select * from emp where sal>(select avg(sal) from emp);
(2)from 后面嵌套子查询
找出每个部门平均薪资的薪水等级
select pid,avg(sal) from emp group by pid;
select ename,distinct job from emp;//错误,ename有13条,job只有4条
注意:distinct只能出现在所有字段的最前面
select distinct pid,job from emp;
distinct在最前面表示后面所有字段联合起来去除重复

统计岗位的数量
select count(distinct job) from emp;

不足:对于多表查询不是很熟练。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值