lwq1996 发表于 2021-8-14 20:55:41

8/14mysql之子查询

mysql之子查询


定义:一个查询嵌套另一个查询

例:求出IT部门的姓名和员工编号
it部门            dept表 中的dept_name
name,sid    emp表中

内连接(先合表再根据条件查询)
select   name,sidfromdeptinner join emp on dept.dept1=emp.dept2where dept_name='IT技术' ;

select dept1 from dept where dept_name ='IT技术';

子查询:select name,sidfrom emp where dept2=(select dept1 from dept where dept_name ='IT技术');
========================================================================
子查询的分类:
1、标量子查询
2、列量子查询
3、行子查询
4、表子查询
========================================================================
1、标量子查询(返回一个值)
标量子查询 :把一个sql执行返回的一个值,作为另一个sql执行的一个条件,返回结果是一行一列,一般出现在where之后。

例:select dept1 from dept where dept_name ='IT技术';
       select name,sidfrom emp where dept2=(select dept1 from dept where dept_name ='IT技术');
C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7Vjp8N9B-UYSDrAgFp2cOyS1Q/89910dfaf9e94c9993b464fbc6c585c9/sz%7D%25kpoh9f7gtk8%28%5Bzvd5f2.png
注意点:允许使用运算付号:=,!=,>,<,>=,<=,<>
========================================================================
2、列子查询(返回一个列)
定义:返回的是一列值
注意:通常在where条件后使用, in或not in 不能使用=,<,>等运算符

例:select dept1 from dept where dept_name ='IT技术'or dept_name ='财务'    (1列多行)
       select name,sidfrom emp where dept2 in(select dept1 from dept where dept_name ='IT技术'   or dept_name ='财务' );

select name,sidfrom emp where dept2 =(select dept1 from dept where dept_name ='IT技术'or dept_name ='财务' );(报错)
select name,sidfrom emp where dept2 = any (select dept1 from dept where dept_name ='IT技术'or dept_name ='财务' );(对的)

anysomeall(了解)
C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7Vjp8N9B-UYSDrAgFp2cOyS1Q/9b6136f7fed542e1ba589e2f7be22a1f/bk6%24r%28k%5D%7Ds08idppyab%5D4fo.jpg
=========================================================================
3、行子查询(返回一行多列)
指子查询返回的结果是一行多列,一般出现在where后

造一个1880 刘十 64 1971/10同牛9
1881    马12 同刘十

例:selectage, incoming from emp where name='马十二';
       select* from empwhere (age,incoming)=any (selectage, incoming from emp where name='马十二');
=======================================================================
4、表子查询(重点)(返回一个表)

select *from dept,emp where dept1=dept2
selectname,sid from (select *from dept,emp where dept1=dept2) s where age=64;
                                                       一整个表
C:/Users/Administrator/AppData/Local/YNote/data/weixinobU7Vjp8N9B-UYSDrAgFp2cOyS1Q/c1723929e67b4277bf55c22411a89aee/pl4rlb3xxat8%28yl_lrrfqp3.png
临时表:给表取一个别名,聚合函数 最好取别名
=====================================================================
案例
2.财务部门的收入总和;
selectsum(incoming) fromempwhere dept2=(
selectdept1fromdept where dept_name="财务") ;

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


页: [1]
查看完整版本: 8/14mysql之子查询