查詢練習一 ...
查詢練習一
表創建
create table employee as select * from soctt.emp ;
--記得授權
sysdba用戶登錄
grant select on scott.emp to $username$
--表結構
create table empployee_demo(
empno number(4) not null primary key, --員工編號,主鍵
ename varchar2(10) not null unique, --員工名,唯一鍵
job varchar2(9), --職位、工作
mgr number(4), --經理編號
hiredate date default sysdate, --入職日期,預設約束
sal number(7,2) check(sal>=500 and sal<=10000), --工資
comm number(7,2), --資金
deptno number(2) --部門編號
)
--16. 找出各月倒數第三天受雇的所有員工
select * from employee where last_day(hiredate)-2=hiredate;
--17. 找出早於25年前受雇佣的員工
select * from employee where months_between(hiredate,sysdate)/12>25;
select * from employee where year(sysdate)-year(hiredate)>25;
--18. 以首字母大寫其它字母小寫的方式顯示所有的員工的姓名
select upper(substr(ename,0,1))||lower(substr(ename,1)) from employee;
--下麵這兩種寫法都是可以獲得同樣的結果,不過不太清楚加nls的區別
select nls_initcap(ename) from employee;
select initcap(ename) from employee;
--以首字母小寫其它字母大寫的方式顯示所有的員工的姓名。
select lower(substr(ename,1,1))||upper(substr(ename,2)) from employee;
--19. 顯示正好為5字元的員工的姓名
select ename from employee where length(ename)=5;
--20. 顯示不帶有‘R’的與員工的姓名
select ename from employee where ename not like '%R%';
--21. 顯示所有員工姓名的前三個字元。
select substr(ename,1,3) from employee --註意,與java中截取字元串的有所區別
--22. 顯示所有員工的姓名,用 A 替換 a
select replace(ename,'a','A') from employee; --把a替換成A
--23. 顯示 滿25年 服務年限的員工的姓名 和受雇日期
select ename,hiretate from employee where months_between(hiredate,sysdate)/12 >=25
--24. 顯示員工的詳細資料,按姓名排序,姓名相同按工資降序排序。
select * from employee order by ename,sal desc; --asc升序 desc降序 預設升序
--25. 顯示與員工的姓名和受雇日期,根據其服務年限,將最老的員工排在最前面。
select ename,hiredate,months_between(hiredate,sysdate)
from employee
order by months_between(hiredate,sysdate)
select ename,hiredate,months_between(sysdate,hiredate)
from employee
order by months_between(sysdate,hiredate) desc
--26. 顯示所有員工的姓名,工作和薪金,按工作的降序排序,若工作相同按薪金排序
select ename,job,sal from employee
order by job,sal;
/*
27. 顯示所有員工的姓名,加入公司的年份和月份,按受雇日期所在的月排序,
若月份相同,則將最早的年份的員工排在最前面
*/
select ename,JOB,TO_CHAR(hiredate,'yyyy') year,
TO_CHAR(hiredate,'mm') month
from employee
order by month,year;