小马哥 发表于 2021-8-15 08:24:10

mysql 子查询

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

请:求出IT技术部门的姓名和员工编号?
IT部门                  dept       中的dept_name
name   sid            emp
内连接(先合表在根据条件查询): select name .,sid from dept inner join emp on dept1=dept2 where dept name="T技术";
子查询selectname,sid from   empwhere dept2=(selectdept1from deptwhere dept_name="IT技术" )
子查询分类:
1、标量子查询
2、列子查询
3、行子查询
4、表子查询
============================================================================
1、标量子查询(返回一个值)
标量子查询 把一个sql执行返回的一个值,作为另一个sql执行的一个条件,得到的结果是一行一列,一般出现在where之后
案例:
selectname,sid from   empwhere dept2=(selectdept1from deptwhere dept_name="IT技术" )
file:///C:\Users\admin\Documents\Tencent Files\673263061\Image\Group2\SZ\}%\SZ%7D%25KPOH9F7GTK8(%5BZVD5F2.png
注意点:标量子查询允许使用符号:=,!=,>,<,>=,=<,<>(不等于)
============================================================================
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="T技术");

file:///C:\Users\admin\AppData\Roaming\Tencent\Users\673263061\QQ\WinTemp\RichOle\(LSO~5%60IQX%24362V9VCO45YP.png
==============================
行子查询:返回一行多列
指子查询返回的结果集是一行多列,一般出现在where后
案例: select age,incoming from emp where name="马十二";
I
select * from emp where (age,incoming) =any (select age,incoming from emp where name="马十二")

select * fromemp where (age,incoming) in (select age,incoming from emp where name="马十二")
file:///C:\Users\admin\Documents\Tencent Files\673263061\Image\Group2\Z$\%Z\Z%24%25ZNEDTPR(OU)OY~PJ4Q46.png
======================================================================
4、表子查询(重点)(返回一整个表)
file:///C:\Users\admin\Documents\Tencent Files\673263061\Image\Group2\PL\4R\PL4RLB3XXAT8(YL_LRRFQP3.png
select * from dept,emp where dept1=dept2 ;
select name,sid from ( select * from dept,emp where dept1=dept2)s where age=64;

临时表:给表取一个别名 聚合函数 最好取别名

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


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