–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;