sql语句练习题或面试题

根据下面表的描述,创建DEPTEMP表,并运行下列SQL,最终完成后面的练习

1、   部门表:DEPT

No.

字段名称

类型

描述

1

DEPTNO

BIGINT

部门编号,由两位数字所组成(主键)

2

DNAME

VARCHAR(20)

部门名称,由14位字符所组成

3

LOC

VARCHAR(20)

部门位置

2、   雇员表:EMP

No.

字段名称

类型

描述

1

EMPNO

BIGINT

雇员编号,由四位数字所组成(主键)

2

ENAME

VARCHAR(20)

雇员姓名

3

JOB

VARCHAR(20)

职位

4

MGR

BIGINT

一个雇员对应的领导编号(雇员编号)

5

HIREDATE

DATE

雇员的雇佣日期

6

SAL

DOUBLE(7,2)

基本工资,由两位小数和五位整数所组成

7

COMM

DOUBLE(7,2)

奖金/奖金

8

DEPTNO

BIGINT

一个雇员所在的部门编号,与dept表的对应

DEPT表数据:

INSERT INTO `DEPT` VALUES (10, 'ACCOUNTING', 'NEW YORK');

INSERT INTO `DEPT` VALUES (20, 'RESEARCH', 'DALLAS');

INSERT INTO `DEPT` VALUES (30, 'SALES', 'CHICAGO');

INSERT INTO `DEPT` VALUES (40, 'OPERATIONS', 'BOSTON');

EMP表数据:

INSERT INTO `EMP` VALUES (7369, 'SMITH', 'CLERK', 7902, '1980-12-17', 800, NULL, 20);

INSERT INTO `EMP` VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1600, 300, 30);

INSERT INTO `EMP` VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);

INSERT INTO `EMP` VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 2975, NULL, 20);

INSERT INTO `EMP` VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);

INSERT INTO `EMP` VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30);

INSERT INTO `EMP` VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10);

INSERT INTO `EMP` VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-04-19', 3000, NULL, 20);

INSERT INTO `EMP` VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);

INSERT INTO `EMP` VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);

INSERT INTO `EMP` VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-05-23', 1100, NULL, 20);

INSERT INTO `EMP` VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);

INSERT INTO `EMP` VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 3000, NULL, 20);

INSERT INTO `EMP` VALUES (7934, 'MILLER', 'CLERK', 7782, '1982-01-23', 1300, NULL, 10);


练习题:

01.查询每个雇员的编号、姓名、职位。

02.查询每个雇员的职位,职位。

03.查询每个雇员的职位,使用DISTINCT消除掉显示的重复记录。

04.计算出每个雇员的基本年薪,同时查询出雇员的编号、姓名。

05.每个雇员每个月公司会补贴饭食200元,交通补助300元,计算年薪(年薪=(工资+奖金)*12)。

06.查询基本工资高于2000的全部雇员信息。

07.查询出smith的信息。

08.查询出所有不是CLERK的详细信息。

09.查询出所有销售人员(SALESMAN)的基本信息,并且要求销售人员的工资高于1300。

10.查询出工资范围在1500~3000之间的全部雇员信息(包含1500和3000)。

10.1查询出工资范围不在1500~3000之间的全部雇员信息(不包含1500和3000)。

11.查询出所有经理或者是销售人员的信息,并且要求这些人的基本工资高于1500。

12.要求查询出所有在1981年雇佣的雇员信息。

13.查询所有领取奖金的雇员信息(comm不为空)。

14.查询所有领取奖金高于100的雇员信息。

15.查询出雇员编号是7369、7566、9999的雇员信息。

16.查询出所有雇员姓名是以A开头的全部雇员信息。

17.查询出雇员姓名第二个字母是M的全部雇员信息。

 

18.查询出雇员姓名任意位置上包含字母A的全部雇员信息。

19.查询出所有雇员的信息,要求按照工资排序。

SELECT * FROM emp WHERE ENAME LIKE '%A%'

20.要求查询所有雇员的信息,按照雇佣日期由先后排序。

SELECT * FROM emp ORDER BY HIREDATE

21.查询全部雇员信息,按照工资由高到低排序,如果工资相同,则按照雇佣日期由先后排序。

SELECT * FROM emp ORDER BY SAL DESC,HIREDATE ASC

22.查询部门30中的所有员工。

SELECT * FROM emp WHERE DEPTNO='30'

23.查询出所有办事员(CLERK)的姓名,编号和部门编号。

SELECT ENAME,EMPNO,DEPTNO FROM emp WHERE JOB ='CLERK'

24.查询出奖金高于薪金的员工。

SELECT * FROM emp WHERE IFNULL(COMM,0)>SAL

25.查询出奖金高于薪金的60%的员工。

SELECT * FROM emp WHERE IFNULL(COMM,0)>SAL*0.6

26.查询出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。

SELECT * FROM emp WHERE (DEPTNO='10' AND JOB='MANAGER') OR (DEPTNO='20' AND JOB='CLERK')

27.查询出部门10中所有经理,部门20中所有办事员,既不是经理又不是办事员但其薪金大于或等于2000的所有员工的信息。

SELECT * FROM emp WHERE (DEPTNO='10' AND JOB='MANAGER') OR (DEPTNO='20' AND JOB='CLERK') OR (JOB<>'MANAGER' AND JOB<>'CLERK' AND SAL>=2000)

28.查询出收取奖金的员工的不同工作。

SELECT DISTINCT JOB FROM emp WHERE IFNULL(COMM,0)>0

39.查询出不收取奖金或收取的奖金低于100的员工。

SELECT * FROM emp WHERE IFNULL(COMM,0)=0 OR IFNULL(COMM,0)<100

40.查询出不带有“R”的员工的姓名。

SELECT * FROM emp WHERE ENAME NOT LIKE '%R%'

41.查询出每个雇员的姓名、职位、领导姓名。

SELECT e.ENAME 雇员姓名,e.JOB 职位,m.ENAME 经理姓名 FROM emp e,emp m WHERE e.MGR=m.EMPNO

42.查询出所有员工的编号、姓名及其直接上级的编号、姓名,显示的结果按领导年工资的降序排列。

SELECT e.EMPNO 员工编号,e.ENAME 员工姓名,m.EMPNO 上级编号,m.ENAME 上级姓名,(m.SAL+IFNULL(m.COMM,0))*12

FROM emp e,emp m

ORDER BY (m.SAL+IFNULL(m.COMM,0))*12 DESC

43.查询出在销售部(SALES)工作的员工姓名、基本工资、雇佣日期、部门名称。(不知道销售部编号)。

SELECT e.ENAME 员工姓名,e.SAL 基本工资,e.HIREDATE 雇用日期,d.DNAME 部门名称

FROM emp e,dept d

WHERE d.DNAME='SALES' AND d.DEPTNO=e.DEPTNO

44.查询出所有员工的姓名、部门名称和工资。

SELECT e.ENAME 员工姓名,d.DNAME 部门名称,e.SAL 工资

FROM emp e,dept d

WHERE e.DEPTNO=d.DEPTNO

45.查询出所有员工的年工资,所在部门名称,按年薪从低到高排序。

SELECT e.ENAME 姓名,(e.SAL+IFNULL(e.COMM,0))*12 年工资,d.DNAME 部门

FROM emp e,dept d

WHERE e.DEPTNO=d.DEPTNO

ORDER BY (e.SAL+IFNULL(e.COMM,0))*12 ASC

46.查询出某个员工的上级主管及所在部门名称,并要求出这些主管中的薪水超过3000。

SELECT e.ENAME 主管姓名,e.JOB 职位,d.DNAME 部门,e.SAL 工资

FROM emp e,dept d

WHERE e.DEPTNO=d.DEPTNO AND e.JOB='MANAGER' AND e.SAL>3000

47.查询出公司的最高和最低工资。

SELECT MAX(e.SAL) 最高工资,MIN(e.SAL) 最低工资 FROM emp e

48.查询出每个部门的人数、平均工资,只显示部门编号。

SELECT COUNT(e.ENAME) 部门人数,AVG(e.SAL) 平均工资,d.DEPTNO 部门编号

FROM emp e,dept d

WHERE e.DEPTNO=d.DEPTNO

GROUP BY d.DEPTNO

49.查询出每种职位的最高和最低工资。

SELECT MAX(e.SAL) 最高工资,MIN(e.SAL) 最低工资,e.JOB 职位

FROM emp e

GROUP BY e.JOB

50.查询平均工资高于2000的职位信息,以及从事此职位的雇员人数、平均工资。

SELECT e.JOB 职位,COUNT(e.ENAME) 员工人数,AVG(e.SAL) 平均工资

FROM emp e

WHERE (SELECT AVG(m.SAL) FROM emp m WHERE e.JOB=m.JOB)>2000

GROUP BY e.JOB

51查询出至少有一个员工的所有部门编号、名称,并统计出这些部门的平均工资、最低工资、最高工资。

SELECT d.DEPTNO 部门编号,d.DNAME 部门名称,AVG(e.SAL) 平均工资,MIN(e.SAL) 最低工资,MAX(e.SAL) 最高工资

FROM emp e,dept d

WHERE (SELECT COUNT(e.ENAME) FROM emp)>0 AND e.DEPTNO=d.DEPTNO

GROUP BY d.DEPTNO

52.查询出部门名称和这些部门的员工信息(数量、平均工资),同时列出那些没有员工的部门。



发布了17 篇原创文章 · 获赞 6 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/keenstyle/article/details/45628389