SQL-多表查询-子查询

# 子查询介绍

  • 概念:SQL语句中嵌套SELECT语句,称谓嵌套查询,又称子查询。

例如:

SELECT * FROM t1 WHERE column1 = ( SELECT column1 FROM t2);

子查询外部的语句可以是 INSERT / UPDATE / DELETE / SELECT 的任何一个


  • 根据子查询结果不同,分为:
  1. 标量子查询(子查询结果为单个值)
  2. 列子查询(子查询结果为一列)
  3. 行子查询(子查询结果为一行)
  4. 表子查询(子查询结果为多行多列)

  • 根据子查询位置,分为
  1. WHERE 之后
  2. FROM 之后
  3. SELECT 之后

一、标量子查询

子查询返回的结果是单个值(数字、字符串、日期等)。
常用操作符:- < > > >= < <=
示例:

--查询销售部所有员工信息
--1.查询销售部部门id
select id from dept where name='销售部';
--2.根据得到的销售部部门id,查询员工信息:
select * from emp where dept_id=...;
--子查询写法:
select * from emp where dept_id=(select id from dept where name='销售部');

二、列子查询

返回的结果是一列(可以是多行)。
常用操作符:

操作符描述
IN在指定的集合范围内,多选一
NOT IN不在指定的集合范围内
ANY子查询返回列表内,有任意一个满足即可
SOME等同ANY
ALL子查询列表的所有制都必须满足
  • 例一:查询市场部和销售部所有员工信息:
select * from emp where dept_id in (select id from dept where name='销售部'||name ='市场部');
  • 例二:– 查询比财务部所有人工资都高的员工信息
select * from emp where salary > all(select salary from emp where dept_id=(selcet id from dept where name ='财务部'));

三、行子查询

返回的结果是一行(可以是多列)。
常用操作符:=, <, >, IN, NOT IN

  • 例:查询与xxx的薪资及所在部门相同的员工信息
select * from emp where(salary,dept_id)=(select salary,dept_id from emp where name ='XXX');

四、表子查询

返回的结果是多行多列
常用操作符:IN

  • 例1:查询与AAA,BBB的部门和薪资相同的员工
select * 
from emp
where(dept_id,salary) in (select dept_id,salary from emp where name ='AAA' or name='BBB');
  • 例2: 查询入职日期是2006-01-01之后的员工,及其部门信息
select e.*,d.* 
from(select * from emp where entrydate>'2006-01-01') as e 
left join dept as d on e.dept_id=d.id;

上述语句不用子查询也可以写为

select emp.*,dept.*
from emp 
left join dept 
on emp.dept_id=dept.id
where entrydate>'2006-01-01';

欢迎补充与指正

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇