MySQL数据库06 简单查询练习题

–SQL 练习训练一

1、 选择部门30中的雇员

select * from emp where deptno = 30;

2、 检索emp表中的员工姓名、月收入及部门编号

select ename 姓名 , sal 月收入, deptno 部门编号 from emp ;

3、 检索emp表中员工姓名、及雇佣时间(雇佣时间按照yyyy-mm-dd显示)

select ename , hiredate from emp;

4、 检索emp表中的部门编号及工种,并去掉重复行

select distinct deptno , job from emp;

5、 检索emp表中的员工姓名及全年的月收入

select ename , (sal+ifnull(comm,0) )*12 from emp;

6、 用姓名显示员工姓名,用年收入显示全年月收入。

select ename 姓名, (sal+ifnull(comm,0) )*12 年收入 from emp;

7、 检索月收入大于2000的员工姓名及月收入

select ename 姓名, sal+ifnull(comm,0) 月收入 from emp where sal+ifnull(comm,0) > 2000;

8、 检索月收入在1000元到2000元的员工姓名、月收入及雇佣时间

select ename 姓名, sal+ifnull(comm,0) 月收入 hiredate 雇用时间
from emp where sal+ifnull(comm,0) between 1000 and 2000;

9、 检索以S开头的员工姓名及月收入

select ename, sal from emp where ename like 'S%';

10、 检索emp表中月收入是800的或是1250的员工姓名及部门编号

select ename , deptno from emp where sal in (800,1250)

11、 显示在部门20中岗位是CLERK的所有雇员信息

select * from emp where deptno = 20 and job = 'CLERK';

12、 显示工资高于2500或岗位为MANAGER的所有雇员信息

select * from emp where sal > 2500 and job = 'MANAGER';

13、 检索emp表中有奖金的员工姓名、月收入及奖金

select ename, sal ,comm from emp where comm is not null;

14、 检索emp表中部门编号是30的员工姓名、月收入及提成,并要求其结果按月收入升序、然后按提成降序显示

select ename,sal,comm from emp where deptno = 30 order by sal, comm desc;

15、 列出所有办事员的姓名、编号和部门

select ename, empno, deptno from emp where job = 'CLERK';
select ename, empno, dname from emp e join dept d on e.deptno = d.deptno
where job = 'CLERK';

16、 找出佣金高于薪金的雇员

select * from emp where comm > sal;

17、 找出部门10中所有经理和部门20中的所有办事员的详细资料

select * from emp 
where deptno = 10 and job = 'MANAGER' or deptno = 20 and job = 'CLERK';
# and 优先级 比or 高

18、 找出部门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;
select * from emp 
where deptno = 10 and job = 'MANAGER' or deptno = 20 and job = 'CLERK' or job not in('MANAGER','CLERK') and sal >= 2000;

19、 找出收取奖金的雇员的不同工作

select distinct job from emp where comm is not null;

20、 找出不收取奖金或收取的奖金低于100的雇员

select * from emp where comm is null or comm < 100;

21、 找出各月倒数第三天受雇的所有雇员

# 找出每月的最后一天 -2 所获得的日期就是倒数第三天
select * from emp where ADDDATE(hiredate,2) = last_day(hiredate);
# 用当前时间 +3 判断是不是下个月的 1号
SELECT * FROM emp WHERE DATE_FORMAT(ADDDATE(hiredate,3),'%d') = 1

22、 获取当前日期所在月的最后一天

select last_day(now());

23、 找出早于25年之前受雇的雇员

# 1- 当前日期 和 员工入职时间 相减 > 25 年 
select * from emp where timestampdiff(year,hiredate,now()) > 25
# 2- 当前日期 - 25 年 > 员工入职时间
select * from emp where adddate(now(), interval -35 year) > hiredate;

24、 显示正好为6个字符的雇员姓名

select ename from emp where length(ename) = 6;

25、 显示不带有’R’的雇员姓名

select ename from emp where ename not like '%R%';

26、 显示雇员的详细资料,按姓名排序

select * from emp order by ename;

27、 显示雇员姓名,根据其服务年限,将最老的雇员排在最前面

select ename from emp order by hiredate;

28、 显示所有雇员的姓名、工作和薪金,按工作的降序顺序排序,而工作相同时按薪金升序

select ename,job,sal from emp order by job desc , sal ;

29、 显示所有雇员的姓名和加入公司的年份和月份,按雇员受雇日所在月排序,将最早年份的项目排在最前面

select ename , year(hiredate) 年份,month(hiredate) 月份 from emp 
order by 月份,年份

30、 显示在一个月为30天的情况下所有雇员的日薪金

SELECT ename, ROUND(sal/30) FROM emp;

31、 找出在(任何年份的)2月受聘的所有雇员

select * from emp where month(hiredate) = 2;


32、 对于每个雇员,显示其加入公司的天数

select ename, datediff(now(),hiredate) from emp;

33、 显示姓名字段的任何位置,包含 “A” 的所有雇员的姓名

select ename from emp where ename like '%A%';

34、 以年、月和日显示所有雇员的服务年限

select ename, timestampdiff(year, hiredate,now()) 年,timestampdiff(month, hiredate,now()) 月,timestampdiff(day, hiredate,now()) 日 from emp 
# 显示格式如下, 员工入职 20 年 3个月 零 5 天

35、 选择公司中有奖金 (COMM不为空,且不为0) 的员工姓名,工资和奖金比例,按工资逆排序,奖金比例逆排序.

select ename, sal/comm 比例 from emp where comm is not null and comm != 0 
order by sal desc , 比例 desc;

36、 选择公司中没有管理者的员工姓名及job

select ename , job from emp where mgr is null;

37、 选择在1987年雇用的员工的姓名和雇用时间

select ename, hiredate from emp where year(hiredate) = 1987;
# 日期格式化
select ename, hiredate from emp where date_format(hiredate,'%Y') = 1987;

38、 选择在20或10号部门工作的员工姓名和部门号

select ename, deptno from emp where deptno in(10,20);

39、 选择雇用时间在1981-02-01到1981-05-01之间的员工姓名,职位(job)和雇用时间,按从早到晚排序.

select ename,job,hiredate from emp 
where hiredate between '1981-02-01' and '1981-05-01' order by hiredate

40、 选择工资不在5000到12000的员工的姓名和工资

select ename,sal from emp where sal not between 5000 and 12000;

41、 查询员工号为7934的员工的姓名和部门号

select ename , deptno from emp where empno = 7934

42、 查询工资大于1200的员工姓名和工资

select ename , sal from emp where sal > 1200;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章