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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章