yoki 发表于 2021-8-15 17:56:42

8.14 mysql之子查询

mysql之子查询
定义:一个查询嵌套另一个查询

求:求出IT技术部门的姓名和员工编号
it部门                  dept   中的dept_name
namesid            emp表

内连接(先合表在根据条件查询) :
select name ,sid from dept inner join emp on dept1=dept2 where dept name="T技术";

子查询案例:
select name,sid from emp where dept2=(select dept1 from dept where dept_name="T技术")

=======================================

子查询分类:
1、标量子查询
2、列子查询
3、行子查询
4、表子查询

=======================================
1、标量子查询(返回一个值)
定义:把一个sql执行返回的一个值,作为另一个sql执行的条件,得到结果是一行一列,一般出现在where之后
案例:   
selectdept1fromdeptwheredept_name = "IT技术";

标量子查询: select name,sid from emp where dept2=(select dept1 from dept where dept_name="IT技术")
C:\Users\Yoki\AppData\Local\YNote\data\weixinobU7VjntXr7VbiM-MS1QByjAFGEc\fd7914aafc5f4bd8b0175db7021eb589\sz}%kpoh9f7gtk8(

注意点:标量子查询允许使用符号:= ,!=,>,<,>=,<=,<>


====================================

2、列子查询(返回一个列)
定义:返回的是一列值
注意:通常在where 条件后使用,in或not in,不能使用= ,>,<,等比较运算符。
案例:
select dept1 from dept where dept_name="财务" or dept_name="IT技术";
select name,sid from emp where dept2 in (select dept1 from dept where dept name="财务" or dept name="IT技术")
C:\Users\Yoki\AppData\Local\YNote\data\weixinobU7VjntXr7VbiM-MS1QByjAFGEc\e57987874ba5410db5523333533b38ff\clipboard.png

C:\Users\Yoki\AppData\Local\YNote\data\weixinobU7VjntXr7VbiM-MS1QByjAFGEc\430584869af54edbb4bdc4459b087497\86e5f74607bd5c729ed6f13e0237841.png

======================================================

3、行子查询:(返回一行多列)
定义:指子查询返回的结果集是一行多列,一般出现在where后面
案例:
select age,incoming from emp where name=“马十二”;
select * from emp where (age,incoming) =any (select age,incoming from emp where name="马十二')

select * from emp where (age,incoming) in (select age,incoming from emp where name="马十二")

C:\Users\Yoki\AppData\Local\YNote\data\weixinobU7VjntXr7VbiM-MS1QByjAFGEc\dfaa3fdcd162428ea7705466a6c28d5c\clipboard.png

C:\Users\Yoki\AppData\Local\YNote\data\weixinobU7VjntXr7VbiM-MS1QByjAFGEc\79154ef820e94ac7ad6dee9932af9283\clipboard.png

========================================

4、表子查询(重点)(返回一个表)
select * from dept,emp where dept1=dept2 ;
select name,sid from ( select * from dept,emp where dept1=dept2)s where age=64;

临时表:给表取一个别名聚合函数 最好取别名
C:\Users\Yoki\AppData\Local\YNote\data\weixinobU7VjntXr7VbiM-MS1QByjAFGEc\1ea0b5b03705494a887a19c8c80e6824\pl4rlb3xxat8(yl_lrrfqp3.png



总结:
1、带in关键字的子查询
一个查询预计的条件

页: [1]
查看完整版本: 8.14 mysql之子查询