【数据库】6、多表查询

本文详细介绍了SQL查询中的内连接(包括隐式和显示)、外连接(左外连接和右外连接)的概念及用法,并通过实例解析了子查询在不同场景下的应用,如单行单列、单行多列和多行多列的比较。此外,还探讨了子查询在WHERE和FROM子句中的作用及其在复杂查询中的重要性。
摘要由CSDN通过智能技术生成

1.表链接查询

1.1内连接

⽤左边表的记录去匹配右边表的记录,如果符合条件的则显示。

1.1.1隐式内连接

隐式内连接:看不到 JOIN 关键字,条件使⽤ WHERE 指定。

1.1.2显示内连接

显示内连接:使⽤ INNER JOIN ... ON 语句,可以省略 INNER。

1.1.3内连接查询步骤

1. 确定查询哪些表 2. 确定表连接的条件 3. 确定查询的条件 4. 确定查询的字段

1.2外连接

1.2.1左外连接

    左外连接:使⽤ LEFT OUTER JOIN ... ON,OUTER 可以省略。⽤左边表的记录去匹配右边表的记录,如果符合条件的则显示;否则,显示 NULL。 即:在内连接的基础上保证左表的数据全部显示

1.2.2右外连接

类似左外连接;

2.子查询

⼦查询的概念:

1. ⼀个查询的结果做为另⼀个查询的条件

2. 有查询的嵌套,内部的查询称为⼦查询

3. ⼦查询要使⽤括号。

2.1⼦查询结果的三种情况

2.1.1.子查询的结果是单行单列的时候,值可以直接比较

-- 查询公司中最高薪资的员工姓名和所在部门编号

select max(sal) from emp; 

select ename,deptno from emp where sal = 5000 ; 

select ename,deptno from emp where sal = (select max(sal) from emp);

2.1.2 .子查询的结果是单行多列的,集合in\ not in\ >any \ <all

-- 查询部门平均薪资高于1800的部门中所有员工的信息

select deptno from emp group by deptno having avg(sal)>1800; 

select * from emp where deptno in
(select deptno from emp group by deptno having avg(sal)>1800);

2.1.3.子查询结果是多行多列的,作为一张临时表使用

-- 查询薪资大于所在部门平均薪资的所有员工信息

select * from emp; 

select avg(sal),deptno from emp group by deptno; 

select * 
from emp e join (select avg(sal)s_avg,deptno from emp group by deptno)d 
on e.deptno=d.deptno
where e.sal>d.s_avg;
可以用子查询的字句: from where having select
-- 查询部门平均薪资 大于 公司平均薪资
select avg(sal) from emp;
select AVG(sal),deptno from emp group by deptno
having avg(sal) > (select avg(sal) from emp);

2.2 子查询总结:

     ⼦查询结果只要是单列,则在 WHERE 后⾯作为条件

     ⼦查询结果只要是多列,则在 FROM 后⾯作为表进⾏⼆次查询。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值