company练习

表结构

--部门表create tabledept(deptnoint(3)primary key,dnamevarchar(14),locvarchar(13));--雇员表create tableemp(empnoint(4)notnullprimary key,enamevarchar(10),jobvarchar(10),mgrint(4),hiredate datetime,saldouble,commdouble,deptnoint(3),foreignkey(deptno)referencesdept(deptno));--工资级别表create tablesalgrade(gradeint(3)primary key,losalint(3),hisalint(3));2.插入数据(进行初始化)use company;--往部门表中查数据insert into deptvalues(10,'Accounting','New York');insert into deptvalues(20,'Research','Dallas');insert into deptvalues(30,'Sales','Chicago');insert into deptvalues(40,'Operations','Boston');insert into deptvalues(50,'Admin','Washing');--往雇员表中插数据insert into empvalues(7369,'Smith','Clerk',7902,'1980-12-17',800,0,20);insert into empvalues(7499,'Allen','Salesman',7698,'1981-2-20',1600,300,30);insert into empvalues(7844,'Turner','Salesman',7499,'1981-9-8',1500,0,30);insert into empvalues(7698,'Tom','Manager',0,'1981-9-8',6100,600,40);insert into empvalues(7876,'Adams','Clerk',7900,'1987-5-23',1100,0,20);insert into empvalues(7900,'James','Clerk',7698,'1981-12-3',2400,0,30);insert into empvalues(7902,'Ford','Analyst',7698,'1981-12-3',3000,null,20);insert into empvalues(7901,'Kik','Clerk',7900,'1981-12-3',1900,0,30);--往工资级别表中插数据insert into salgradevalues(1,700,1200);insert into salgradevalues(2,1201,1400);insert into salgradevalues(3,1401,2000);insert into salgradevalues(4,2001,3000);insert into salgradevalues(5,3001,5000);insert into salgradevalues(6,5001,10000);

1.查询雇员表中工资最高的雇员的员工号、员工姓名、工资和部门号。

SELECT    empno,    ename,    sal,    deptnoFROM empWHERE sal = (SELECTmax(sal)FROM emp);

2.薪水大于1200的雇员,按照部门编号进行分组,分组后的平均薪水必须大于1500,查询各分组的平均工资,按照工资的倒序进行排列。

SELECTavg(sal)avg_sal,    deptnoFROM    empWHERE    sal > 1200GROUP BY    deptnoHAVING    avg_sal > 1500ORDER BY    avg_sal DESC;

3.查询每个雇员和其所在的部门名

SELECT    ename,dnameFROM    emp,deptWHERE(emp.deptno = dept.deptno);

-- 或者(推荐)(on中就写连接条件,where中就写过滤条件,各司其职)

SELECT    ename,dnameFROM    empJOIN deptON(emp.deptno = dept.deptno);

4.查询每个雇员姓名及其工资所在的等级

SELECTename,gradeFROMempeJOINsalgradesON(e.salBETWEENs.losalANDs.hisal);

5.查询雇员名第2个字母不是a的雇员的姓名、所在的组名、工资所在的等级。

SELECT    ename,    dname,    gradeFROM    emp eJOIN dept d ON (e.deptno = d.deptno)JOIN salgrade s ON (    e.sal BETWEEN s.losalANDs.hisal)WHERE    ename NOT LIKE'_a%';

6.查询每个雇员和其经理的姓名

SELECT    e1.ename,    e2.enameFROM    emp e1,emp e2WHERE(e1.mgr = e2.empno);SELECT    e1.ename,    e2.enameFROM    emp e1JOIN emp e2ON(e1.mgr = e2.empno);

7.查询每个雇员和其经理的姓名(包括公司老板本身(他上面没有经理))

SELECT    e1.ename,    e2.enameFROM    emp e1LEFT JOIN emp e2ON(e1.mgr = e2.empno);

8.查询每个雇员的姓名及其所在部门的部门名(包括没有雇员的部门)

SELECT    ename,dnameFROM    emp eRIGHT JOIN dept dON(e.deptno = d.deptno);

9.查询每个部门中工资最高的人的姓名、薪水和部门编号

-- 先求出每个部门中的最高工资:select max(sal) max_sal,deptnofromemp group by deptno-- 在使用连接查询:select ename,sal,e.deptnofromemp e join(select max(sal) max_sal,deptnofromemp group by deptno) ton(e.sal = t.max_salande.deptno = t.deptno);

10.查询每个部门平均工资所在的等级

select deptno,avg_sal,gradefromsalgradejoin(select deptno,avg(sal) avg_salfromemp group by deptno) ton(t.avg_sal between salgrade.losalandsalgrade.hisal);或者:select deptno,avg_sal,gradefrom(select deptno,avg(sal) avg_salfromemp group by deptno) tjoin salgrade s on(t.avg_sal between s.losalands.hisal);

11.查询每个部门内平均的薪水等级

先求每个人的薪水等级selectename,deptno,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal);再按组进行分组求平均selectdeptno,avg(grade)from(selectename,deptno,gradefromempjoinsalgradeson(emp.salbetweens.losalands.hisal))tgroupbydeptno;

12.查询雇员中有哪些人是经理人:

select enamefromemp where empnoin(select distinct mgrfromemp);或者:select enamefromemp join(select distinct mgrfromemp) ton(emp.empno=t.mgr);

13.平均薪水最高的部门的部门编号

1:先求出每个部门的平均薪水和部门号(把这个看成一张表)select avg(sal) avg_sal,deptnofromemp group by deptno;2:再求出平均薪水最高值(把这个看成一个值)select max(avg_sal)from(select avg(sal) avg_sal,deptnofromemp group by deptno) t;3:对1表使用2条件进行查询即可select avg_sal,deptnofrom(select avg(sal) avg_sal,deptnofromemp group by deptno) t1where avg_sal=(select max(avg_sal)from(select avg(sal) avg_sal,deptnofromemp group by deptno) t2);

14.求平均薪水最高的部门的部门名称

select dnamefromdept where deptno = ( select deptnofrom(select avg(sal) avg_sal,deptnofromemp group by deptno) t1  where avg_sal=    (select max(avg_sal)from(select avg(sal) avg_sal,deptnofromemp group by deptno) t2));

15.查询平均薪水的等级最低的部门名称

1.求平均薪水select avg(sal) avg_sal,deptnofromemp group by deptno;2.求平均薪水的等级select avg_sal,deptno,gradefrom(select avg(sal) avg_sal,deptnofromemp group by deptno) tjoin salgrade s on(t.avg_sal between s.losalandhisal);3.求平均薪水的等级最低的那个值select min(grade)from(  select avg_sal,deptno,gradefrom(select avg(sal) avg_sal,deptnofromemp group by deptno) t  join salgrade s on(t.avg_sal between s.losalandhisal)) t3;4.平均薪水的等级最低的部门的部门编号(将2和3组合起来,将2看成要查询的表,将3看成查询条件)select deptnofrom(  select avg_sal,deptno,gradefrom(select avg(sal) avg_sal,deptnofromemp group by deptno) t    join salgrade s on(t.avg_sal between s.losalandhisal)) t2where grade=(  select min(grade)from(  select avg_sal,deptno,gradefrom(select avg(sal) avg_sal,deptnofromemp group by deptno) t            join salgrade s on(t.avg_sal between s.losalandhisal)    ) t3);5.平均薪水的等级最低的部门名称select dname,deptnofromdept where deptnoin(  select deptnofrom(  select avg_sal,deptno,gradefrom(select avg(sal) avg_sal,deptnofromemp group by deptno) t        join salgrade s on(t.avg_sal between s.losalandhisal)    ) t2  where grade=      (  select min(grade)from(  select avg_sal,deptno,gradefrom(select avg(sal) avg_sal,deptnofromemp group by deptno) t                join salgrade s on(t.avg_sal between s.losalandhisal)      ) t3      ));

作者:foreknow

链接:https://www.jianshu.com/p/77f0c5c78921

来源:简书

简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

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

推荐阅读更多精彩内容

  • ORACLE自学教程 --create tabletestone ( id number, --序号usernam...
    落叶寂聊阅读 1,064评论 0 0
  • 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资? –查询工资最高和最低的工资是多少? –查询公...
    C_cole阅读 7,277评论 0 3
  • 目标 聚合函数 分组函数 子查询 多行子查询 引出 •请思考如下问题? –查询所有员工的每个月工资总和,平均工资?...
    wqjcarnation阅读 4,141评论 0 6
  • 1. select * from emp; 2. select empno, ename, job from em...
    海纳百川_4d26阅读 1,878评论 0 4
  • 逢上一场春雨 让初生的柳枝 得以拥抱碧绿的湖水 照亮着清澈的眸 感念这场相遇 欢喜生命的盎然成长 夏日闷雷莽撞 溪...
    不慕如斯阅读 240评论 0 0