MYSQL查询员⼯信息练习
01.查询每个雇员的编号、姓名、职位。
select empno,ename,job from emp;
02.查询出所有的职位,使⽤DISTINCT消除掉显⽰的重复⾏记录。
select DISTINCT job from emp;
03.计算每个雇员的编号、姓名、基本年薪。年薪=(⼯资+奖⾦comm)*12,(使⽤IFNULL函数判断NULL)select empno as '编号',ename as '姓名', (SAL + ifnull(comm,0))*12 AS '基本年薪' from emp;
04.每个雇员每个⽉公司会补贴饭⾷200元,交通补助300元,计算年薪。
select empno as '编号',ename as '姓名', (SAL + ifnull(comm,0)+300+200)*12 AS '基本年薪' from emp;
05.查询基本⼯资⾼于2000的全部雇员信息。
select * from emp e where e.SAL>2000;
06.查询出smith的信息。
select * from emp e where e.ENAME='SMITH';
07.查询出所有不是CLERK的详细信息。
select * from emp e where e.JOB !='CLERK';
08.查询出所有销售⼈员(SALESMAN)的基本信息,并且要求销售⼈员的⼯资⾼于1300。
select * from emp e where e.JOB ='SALESMAN' AND e.sal>1300;
09.查询出⼯资范围在1500~3000之间的全部雇员信息(包含1500和3000)。
select * from emp e where e.sal>=1500 and e.sal<=3000;
10.查询出所有经理或者是销售⼈员的信息,并且要求这些⼈的基本⼯资⾼于1500。
select * from emp e where e.job>='salesman' or e.job='manager' and e.sal>1500;
11.要求查询出所有在1981年雇佣的雇员信息。
select * from emp e where e.HIREDATE between('1981-1-01') and('1981-12-31');
12.查询所有领取奖⾦的雇员信息(comm不为空)。
select * from emp e where em !='';
13.查询所有领取奖⾦⾼于100的雇员信息。
select * from emp e where em >100;
14.查询出雇员编号是7369、7566、9999的雇员信息。
select * from emp e where e.EMPNO=7369 or e.EMPNO=7566 or e.EMPNO=9999;
15.查询出所有雇员姓名是以A开头的全部雇员信息。
select * from emp e ame like 'A%';
16.查询出雇员姓名第⼆个字母是M的全部雇员信息。
select * from emp e where ame,2,1)='m';
17.查询出雇员姓名任意位置上包含字母A的全部雇员信息。
select * from emp e where e.ENAME like '%A%';
18.查询出所有雇员的信息,要求按照⼯资排序。
select * from emp e order by e.sal asc;
19.要求查询所有雇员的信息,按照雇佣⽇期由先后排序。
select * from emp e order by e.HIREDATE asc;
20.查询全部雇员信息,按照⼯资由⾼到低排序,如果⼯资相同,则按照雇佣⽇期由先后排序。
SELECT * FROM emp ORDER BY sal DESC,HIREDATE ASC;
21.查询部门30中的所有员⼯。
SELECT * from emp where DEPTNO =30;
22.查询出所有办事员(CLERK)的姓名,编号和部门编号。
SELECT empno,ename,DEPTNO from emp where job ='clerk';
23.查询出奖⾦⾼于薪⾦的员⼯。
SELECT * from emp e where em >e.SAL
24.查询出奖⾦⾼于薪⾦的60%的员⼯。
SELECT * from emp e where em > 0.6*e.SAL
25.查询出部门10中所有经理(MANAGER)和部门20中所有办事员(CLERK)的详细资料。联表查询
(SELECT * from emp e where e.job='manager' and e.DEPTNO=10 )union all(SELECT * from emp b where b.job='clerk' and b.DEPTNO=20)
26.查询出部门10中所有经理,部门20中所有办事员,既不是经理⼜不是办事员但其薪⾦⼤于或等于2000
的所有员⼯的信息。
(SELECT * from emp e where e.job!='manager' and e.DEPTNO=10 and e.SAL>=2000 and e.job != 'clerk' )union all
(SELECT * from emp b where b.job!='clerk' and b.job!= 'manager'and b.DEPTNO=20 and b.sal>=2000)
27.查询出收取了奖⾦的员⼯从事的⼯作。
select job from emp e where e.COMM!=''
28.查询出不收取奖⾦或收取的奖⾦低于100的员⼯。
select * from emp e where e.COMM is null or em<100
29.查询出不带有“R”的员⼯的姓名。直接查询。
select EMPNO,ENAME from emp e ame not like '%R%'
30.查询出每个雇员的姓名、职位、领导姓名。
distinct查询SELECT a.EMPNO AS '员⼯⼯号',a.ENAME AS '员⼯姓名', a.JOB AS '员⼯职务',b.ename as '上级姓名'FROM EMP a,EMP B =b.EMPNO
31.查询出所有员⼯的编号、姓名及其直接上级的编号、姓名,显⽰的结果按领导年⼯资的降序排列。
SELECT a.EMPNO AS '员⼯⼯号',a.ENAME AS '员⼯姓名', A.MGR,a.JOB AS '员⼯职务',b.ename as '上级姓名',b.EMPNO as '上级⼯号',b.job as '上级职务'FROM EMP a,EMP B =b.EMPNO
ORDER BY (B.SAL+IFNULL(B.COMM,0))*12 DESC
32.查询出在销售部(SALES)⼯作的员⼯姓名、基本⼯资、雇佣⽇期、部门名称。(不知道销售部编号)。
select a.EMPNO,a.sal,a.HIREDATE,b.dname from emp a ,( SELECT DEPTNO,dname FROM DEPT WHERE DNAME ='sales')b where a.DEPTNO=b.DEPTNO ORDER BY a.SAL asc
33.查询出所有员⼯的姓名、部门名称和⼯资。
select a.EMPNO,b.dname,a.sal from emp a ,( SELECT DEPTNO,dname FROM DEPT)b where a.DEPTNO=b.DEPTNO ORDER BY a.SAL asc
34.查询出所有员⼯的年⼯资,所在部门名称,按年薪从低到⾼排序。
select a.EMPNO,b.dname,(a.sal+IFNULL(am,0))*12 as 'NIANXIN' from emp a ,( SELECT DEPTNO,dname FROM DEPT)b where a.DEPTNO=b.DEPTNO ORDER BY NIANXIN asc
35.查询出某个员⼯的上级主管及所在部门名称,并要求出这些主管中的薪⽔超过3000。
SELECT c.*,d.DNAME as '上级所属部门名称' FROM (SELECT a.ENAME,A.MGR,B.ame as '该员⼯上级姓名',b.EMPNO as '上级⼯号'FROM EMP a,EMP B =b.EMPNO and b.SAL >3000 and a.EMPNO='7566')c
LEFT JOIN dept d on c.DEPTNO=d.DEPTNO
36.查询出公司的最⾼和最低⼯资。
select MIN(sal),MAX(sal) from emp;
SELECT (SELECT SAL FROM emp ORDER BY SAL LIMIT 1),(SELECT SAL FROM emp ORDER BY SAL DESC LIMIT 1)
37.查询出每个部门的⼈数、平均⼯资,只显⽰部门编号。
select pno),avg(sal),d.DEPTNO from emp a,(select deptno from dept)d where a.DEPTNO = d.deptno GROUP BY d.deptno
38.查询出每种职位的最⾼和最低⼯资。
select max(sal),MIN(sal),job from emp GROUP BY job
39.查询平均⼯资⾼于2000的职位信息,以及从事此职位的雇员⼈数、平均⼯资。
SELECT * from (select COUNT(EMPNO) a,AVG(sal) b,job c from emp GROUP BY job) d WHERE d.b>2000
40.查询员⼯编号⼤于其领导编号的每个员⼯的姓名、职位、领导名称。
pno as '员⼯⼯号',a.ENAME as '员⼯姓名',a.job as '职位',b.ENAME as '领导名称' from emp a,emp b where
<=
b.EMPNO and a.EMPNO>a.MGR
41查询出⾄少有⼀个员⼯的所有部门编号、名称,并统计出这些部门的平均⼯资、最低⼯资、最⾼⼯资。
SELECT
e.`部门编号`,e.`部门名称`,e.`平均⼯资`,e.`最低⼯资`,e.`最⾼⼯资`
FROM
(
SELECT
pno) AS '部门⼈数',
d.DEPTNO AS '部门编号',
d.DNAME AS '部门名称',
avg(sal) AS '平均⼯资',
MAX(sal) AS '最⾼⼯资',
min(sal) AS '最低⼯资'
FROM
emp a,
(SELECT deptno, DNAME FROM dept) d
WHERE
a.DEPTNO = d.deptno
GROUP BY
d.deptno
) e
WHERE
e.`部门⼈数` > 0
42./*查询出部门名称和这些部门的员⼯信息(数量、平均⼯资),同时列出那些没有员⼯的部门。*/
43.查询⼯资⽐ smith更⾼的全部员⼯信息。
select a.* from emp a,(select sal from emp b where b.ENAME='SMITH' )c where a.SAL>c.sal
44.查询⼯资和职位和 smith相同的所有员⼯信息。
select a.* from emp a,(select sal ,job from emp b where b.ENAME='SMITH' )c where a.SAL=c.sal and a.job=c.job
45.查询各部门的部门编号,部门名词,部门地址,员⼯⼈数和平均⼯资。
select pno),avg(sal),d.* from emp a,(select * from dept)d where a.DEPTNO = d.deptno GROUP BY d.deptno
两表结构如下:
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp` (
`EMPNO` bigint(20) NOT NULL AUTO_INCREMENT,
`ENAME` varchar(20) DEFAULT NULL,
`JOB` varchar(20) DEFAULT NULL,
`MGR` bigint(20) DEFAULT NULL,
`HIREDATE` date DEFAULT NULL,
`SAL` double(7,2) DEFAULT NULL,
`COMM` double(7,2) DEFAULT NULL,
`DEPTNO` bigint(2) DEFAULT NULL,
PRIMARY KEY (`EMPNO`)
) ENGINE=InnoDB AUTO_INCREMENT=7935 DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `dept`;
CREATE TABLE `dept` (
`DEPTNO` bigint(20) NOT NULL AUTO_INCREMENT,
`DNAME` varchar(20) DEFAULT NULL,
`LOC` varchar(20) DEFAULT NULL,
PRIMARY KEY (`DEPTNO`)
) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论