MySQL子查询(六)

子查询

定义:查询中嵌套查询就是子查询

注意:子查询必须用()括起来

子查询的本质:

a. 内联视图 
b. 把子查询的结果作为外部查询的条件

找出工资大于Mark的员工名字和工资
分析:
1.查询出Mark的工资是多少

 select salary from s_emp where first_name='Mark';//1450

2.查询出高于1450工资的人

select first_name,salary from s_emp where salary>1450;

整合成子查询

    select first_name,salary 
    from s_emp 
    where salary>(
        select salary 
        from s_emp 
        where first_name='Mark'
    ); 

子查询的特点:

1.子查询很灵活,可以解决很多其他查询方式不能解决的问题

2.子查询效率很低,其中相关子查询效率最低

3.子查询嵌套的层数越多,则效率越低

为什么相关子查询的效率极其低下?

内查询用到了外查询的列,每次查询行记录时都会迭代表格中

每一行的行记录,而这种迭代中产生的值都是动态生成的.

结论:

性能排序/优先使用

关联/分组查询>无关子查询>相关子查询

练习

1. 找出工资比'BLAKE'多的员工

select *
from emp 
where salary > (select salary from emp where ename ='BLAKE');

2. 列出薪金高于公司平均薪金的所有员工,所在部门

select  empno,ename,salary,deptno
from emp 
where salary > (select avg(salary) from emp);

3. 查询出工资最低的员工的姓名,工作,工资

select ename,job,salary
from emp 
where salary = (select min(salary) from emp);

4. 列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称

select e.ename, e.salary, d.dname
from emp e join dept d
on e.deptno = d.deptno
where    d.deptno !=30 and  salary > (select max(salary) from emp where deptno = 30);

或者

select e.ename, e.salary, d.dname
from emp e join dept d
on e.deptno = d.deptno
where    d.deptno !=30 and  salary > all  (select salary from emp where deptno = 30);

5.查找出职位和'MARTIN' 或者'SMITH'一样的员工的平均工资

select avg(salary)
from emp 
where job in (
    select job from emp where ename in('MARTIN','SMITH')
);

6. 列出薪金比“BLAKE”或“WARD”多的所有员工的编号、姓名、部门名称、其领导姓名。

select   e.empno 员工的编号,e.ename 员工姓名,d.dname 部门名称,m.ename 领导姓名
from emp e join dept d
on e.deptno = d.deptno 
left join emp m 
on e.mgr = m.empno
where e.salary  > any ( select salary from emp where ename in ('BLAKE','WARD')  );

select  * 
from emp 
where salary  > ( select min( salary)  from emp where ename in ('BLAKE','WARD)  );

7. 找出各个部门中大于他所在部门平均工资的员工名和工资

select em.empno '员工编号',em.ename '员工姓名',em.salary '员工薪资',tm.avg_sal '所在部门的平均薪资'
from emp em join (
    select * from (
    select  d.deptno ,avg(e.salary) avg_sal
    from emp e join dept d
    on e.deptno = d.deptno
    group by d.deptno )t
)tm
on em.deptno = tm.deptno
where em.salary > tm.avg_sal
query_result1.png

8. 查找出收入(工资加上奖金),下级比自己上级还高的员工编号,员工名字,员工收入

select e.empno,e.ename ,  e.salary+ifnull(e.comm,0)
from emp e join emp m
on e.mgr = m.empno 
where ( e.salary + ifnull(e.comm,0) ) > ( m.salary  + ifnull(m.comm,0));

9. 得到每个月工资总数最少的那个部门的部门编号,部门名称,部门位置

select * 
from (select d.deptno dno, d.dname dname ,d.loc  loc , sum(salary)  s
from emp e join dept d
on e.deptno = d.deptno 
group by d.deptno) temp  
having  s = min(s);
 
 select * 
from (select d.deptno dno, d.dname dname ,d.loc  loc , sum(salary)  s
from emp e join dept d
on e.deptno = d.deptno 
group by d.deptno) temp 
order by s 
limit 0,1;   -----------limit startNo, length 

10. 查找出部门10和部门20中,工资最高第3名到工资第5名的员工的员工名字,部门名字,部门位置

select  e.ename,d.dname,d.loc
from  emp join dept d
on e.deptno = d.deptno 
where e.deptno in(10,20)
order by salary
limit 2,3;

11. 以职位分组,找出平均工资最高的两种职位

select job,avg(salary)
from emp 
group by job 
order by avg(salary) desc
limit 2

12. 查询出各部门总薪资,平均薪资,总人数,显示部门编号,部门名称与部门总薪资(没有员工的部门也需要统计)

select sum(salary),avg(salary),count(empno),d.deptno,dname
from emp e   right  join dept d
on e.deptno = d.deptno 
group by d.deptno;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • where子句:子查询返回结果为单行单列,单行多列,多行单列(往往使用in,any,all)操作符having子句...
    李哈哈_bing阅读 2,548评论 0 4
  • where子句:子查询返回结果为单行单列,单行多列,多行单列(往往使用in,any,all)操作符having子句...
    Mtllll阅读 1,138评论 0 0
  • /*含义:出现在其他语句中的select语句,称为子查询或内查询外部的查询语句,称为主查询或外查询。 分类:按子查...
    弦好想断阅读 155评论 0 0
  • 1、定义 指嵌入在其他sql语句中的select语句 通俗的来讲指的是在一个查询之中嵌入若干个小的查询 子查询可以...
    唯老阅读 189评论 0 1
  • 进阶7:子查询 /*含义:出现在其他语句中的select语句,称为子查询或内查询外部的查询语句,称为主查询或外查询...
    majorty阅读 3,041评论 0 1