找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
mysql之子查询
定义:一个查询嵌套另一个查询
案例:
请:求出IT技术部门的姓名和员工编号?
it部门                       dept     中的dept_name
name   sid                emp表
内连接(先合表在根据条件查询):select   name  ,sid  from  dept  inner  join   emp  on  dept1=dept2  where dept_name="IT技术";
子查询案例:select  name,sid from   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,sid from   emp  where dept2=(select  dept1  from dept  where dept_name="IT技术" )
========================================================================
C:\Users\l1774\AppData\Local\YNote\data\weixinobU7VjrfpVh6PoJ9DxQOzizgtyRg\c4badc6a0b514055abbd1b567839fd86\a1076f45cabc.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="IT技术")
C:\Users\l1774\AppData\Local\YNote\data\weixinobU7VjrfpVh6PoJ9DxQOzizgtyRg\3293e2602b274399a20557a10b98bff2\30289cddac49.png

C:\Users\l1774\AppData\Local\YNote\data\weixinobU7VjrfpVh6PoJ9DxQOzizgtyRg\1d50fe09abe348c4b2306beb5fb8d5a1\9f329a548d9f.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\l1774\AppData\Local\YNote\data\weixinobU7VjrfpVh6PoJ9DxQOzizgtyRg\ec3570c07d7e4dc8a6b5c791400c4e85\3cc9d0a278d3.png
C:\Users\l1774\AppData\Local\YNote\data\weixinobU7VjrfpVh6PoJ9DxQOzizgtyRg\90bb43fd82564926a3a717538d4fb44e\57bcdd52acb9.png

C:\Users\l1774\AppData\Local\YNote\data\weixinobU7VjrfpVh6PoJ9DxQOzizgtyRg\1d50fe09abe348c4b2306beb5fb8d5a1\9f329a548d9f.png
========================================================================
4、表子查询(重点)(返回一个表)
一般都是接from后面
select * from  dept,emp where dept1=dept2 ;
select  name,sid from  ( select * from  dept,emp where dept1=dept2)s where age=64;
临时表:给表取一个别名   聚合函数 最好取别名


===================================================
案例:求财务部门的收入总和;
解法一:
子查询方法:select  sum(incoming) from  emp  where dept2=(select  dept1  from  dept where dept_name="财务") ;

解法二:
SELECT SUM(incoming)   FROM dept inner join  emp  on  dept.dept1=emp.dept2 WHERE dept_name="财务";
解法三:
select sum(s.incoming) from  (select  *from  emp ,dept  where dept1=dept2)s where dept_name="财务" ;

分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册