mysql的sql作业_sql作业

一.

创建一个员工表和部门表的交叉连接。

select e.empno, e.ename, d.dname

from emp e cross join dept d;

二.

使用自然连接,显示入职日期在80年5月1日之后的员工姓名,部门名称,入职日期

select e.ename, d.dname,e.hiredate

from emp e natural join dept d

where

e.hiredate>'1980-05-21';

三.

使用左连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来。

select e.ename,m.ename

from emp e left outer join emp m on(e.mgr = m.empno);

四.

使用右连接,查询每个员工的姓名,经理姓名,没有经理的King也要显示出来

select e.ename,m.ename

from emp e right outer join emp m on(e.mgr = m.empno);

五.

显示员工SMITH的姓名,部门名称,直接上级名称

select e.ename 员工姓名 ,d.dname 部门名称 ,m.ename 上级经理

from emp e,emp m,dept d

where e.mgr = m.empno and e.deptno=d.deptno and e.ename='SMITH';

六.

显示员工姓名,部门名称,工资,工资级别,要求工资级别大于4级。

select e.ename 员工姓名, e.sal 工资 , s.grade 工资等级 ,d.dname 部门

from emp e, salgrade s,dept d

where e.deptno=d.deptno and e.sal between s.losal and s.hisal and s.grade>4;

七.

显示员工KING和FORD管理的员工姓名及其经理姓名。

mysql> select e.ename 员工,m.ename 领导

from emp e,emp m

where m.empno=e.mgr and m.ename in('FORD','KING');

八.

显示员工姓名,参加工作时间,经理名,参加工作时间,要求参加时间比经理早。

select e.ename 员工,e.hiredate 参加工作时间 ,m.ename 经理,m.hiredate 参加工作时间

from emp e,emp m

where m.empno=e.mgr and e.hiredate>m.hiredate;

九.

查询入职日期比10部门任意一个员工晚的员工姓名、入职日期,不包括10部门员工

SELECT

ename,

HIREDATE

FROM

emp

WHERE

HIREDATE > ANY (

SELECT

HIREDATE

FROM

emp

WHERE

DEPTNO = 10

)

AND DEPTNO <> 10;

十.

查询入职日期比10部门所有员工晚的员工姓名、入职日期,不包括10部门员工

SELECT

ename,

HIREDATE

FROM

emp

WHERE

HIREDATE > ALL (

SELECT

HIREDATE

FROM

emp

WHERE

DEPTNO = 10

)

AND DEPTNO <> 10;

十一.

查询职位和10部门任意一个员工职位相同的员工姓名,职位,不包括10部门员

SELECT

ename,

JOB

FROM

emp

WHERE

JOB = ANY (

SELECT

JOB

FROM

emp

WHERE

DEPTNO = 10

)

AND DEPTNO <> 10;

十二.

查询部门平均工资在2500元以上的部门名称及平均工资。

SELECT

d.dname,

avg(sal)

FROM

emp e,

dept d

WHERE

e.DEPTNO = d.DEPTNO

GROUP BY

e.DEPTNO

HAVING

avg(sal) > 2500;

十三.

查询员工岗位中不是以“SA”开头并且平均工资在2500元以上的岗位及平均工资,并按平均工资降序排序。

SELECT

job,

avg(sal)

FROM

emp

WHERE

JOB NOT LIKE 'SA%'

GROUP BY

JOB

HAVING

avg(sal) > 2500

ORDER BY

avg(sal);

十四.

查询部门人数在2人以上的部门名称、最低工资、最高工资。

SELECT

d.dname,

min(e.sal),

max(e.sal),

COUNT(*)

FROM

emp e,

dept d

WHERE

d.deptno = e.deptno

GROUP BY

d.dname

HAVING

COUNT(*) > 2;

十五.

查询岗位不为SALESMAN,工资和大于等于2500的岗位及每种岗位的工资和。

SELECT

job,

sum(sal)

FROM

emp

WHERE

job <> 'SALESMAN'

GROUP BY

job

HAVING

sum(sal) >= 2500;

十六.

显示经理号码和经理姓名,这个经理所管理员工的最低工资,没有经理的KING也要显示,不包括最低工资小于3000的,按最低工资由高到低排序

SELECT

e.mgr 经理号码,

m.ename 经理姓名,

MIN(e.sal) 管理员工最低工资

FROM

emp e

LEFT JOIN emp m ON (e.mgr = m.empno)

GROUP BY

e.mgr,

m.ename

HAVING

MIN(e.sal) >= 3000

ORDER BY

MIN(m.sal) DESC;

SELECT

mgr

FROM

emp

GROUP BY

mgr;

十七.

查询工资高于编号为7782的员工工资,并且和7369号员工从事相同工作的员工的编号、姓名及工资。

SELECT

e.EMPNO,

e.ENAME,

e.SAL

FROM

emp e

WHERE

e.SAL > (

SELECT

SAL

FROM

emp

WHERE

EMPNO = 7782

)

AND (

SELECT

JOB

FROM

emp

WHERE

EMPNO = 7369

十八.

查询工资最高的员工姓名和工资。

SELECT

ename,

SAL

FROM

emp

WHERE

SAL = (SELECT MAX(SAL) FROM emp);

十九.

查询部门最低工资高于10号部门最低工资的部门的编号、名称及部门最低工资。

SELECT

e.DEPTNO,

d.dname,

MIN(e.SAL)

FROM

emp e,

dept d

WHERE

e.DEPTNO = d.deptno

GROUP BY

e.DEPTNO,

d.dname

HAVING

MIN(e.SAL) > (

SELECT

MIN(SAL)

FROM

emp

WHERE

DEPTNO = 10

GROUP BY

DEPTNO

);

二十.

查询员工工资为其部门最低工资的员工的编号和姓名及工资。

SELECT

EMPNO,

ENAME,

SAL

FROM

emp

WHERE

sal = ANY (

SELECT

MIN(SAL)

FROM

emp

GROUP BY

DEPTNO

);

二十一.

显示经理是KING的员工姓名,工资。

SELECT

ENAME,

SAL

FROM

emp

WHERE

MGR = (

SELECT

EMPNO

FROM

emp

WHERE

ENAME = 'KING'

);

二十二.

显示比员工SMITH参加工作时间晚的员工姓名,工资,参加工作时间。

SELECT

ENAME,

SAL,

HIREDATE

FROM

emp

WHERE

HIREDATE > ANY (

SELECT

HIREDATE

FROM

emp

WHERE

ENAME = 'SMITH'

);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值