Oracle初探(二)
阿新 • • 發佈:2019-01-30
基礎查詢
--1.查詢部門編號為30的職務種類(不重複) select job from emp where deptno=30;--重複 select distinct job from emp where deptno=30;--不重複 --2.建立一個查詢,顯示員工編號為7788的員工的姓名和部門編號 select ename,deptno from emp where empno=7788; --3.查詢工資高於3000的員工的姓名和薪資 select ename,sal from emp where sal>3000; --4.查詢工資低於3000的員工 select * from emp where sal<3000; --5.查詢在1981年2月20日和1985年5月1日之間入職的員工的姓名、職務和日期 select ename,job,hiredate from emp where hiredate between date'1981-2-20' and date'1985-5-1'; --6.顯示在1981年聘用的每位員工的姓名和聘用日期 select ename,hiredate from emp where hiredate between date'1981-1-1' and date'1985-12-31'; --7.查詢沒有佣金的員工 select * from emp where comm is null; --8.查詢姓以B開頭的員工 select * from emp where ename like 'B%'; --9.查詢部門號為10或者20或者30的員工 select * from emp where deptno in(10,20,30); --10.查詢沒有經理的所有員工的姓名和職稱 select ename,job from emp where mgr is null; --11.顯示員工名字中的第三個字母為“A”的所有員工的姓名 select ename from emp where ename like '__A%'; --12.集合 --12.1 並集 --12.1.1 union select ename,sal from emp where sal>1000 union select ename,sal from emp where job='MANAGER'; --12.1.2 union all select ename,sal from emp where sal>1000 union all select ename,sal from emp where job='MANAGER'; --12.2 交集 select ename,sal from emp where sal>1000 intersect select ename,sal from emp where job='MANAGER'; --12.3 剪集 select ename,sal from emp where sal>1000 minus select ename,sal from emp where job='MANAGER'; --13.排序 --13.1 查詢員工資料,按薪資升序排列 select * from emp order by sal asc; --13.2 查詢員工資料,在部門號從大到小的情況下按按薪資升序排列 select * from emp order by deptno desc, sal asc; --13.3 按姓名的字母順序顯示部門20和部門50中的所有員工的姓名和部門編號 select ename,deptno from emp where deptno in(20,50)order by ename; --13.4 顯示可以賺取佣金的所有員工的姓名、薪金和佣金,按薪金和佣金的降序對資料進行排序 select ename,sal,comm from emp where comm is not null order by sal desc,comm desc; --14 函式 --14.1、顯示當前日期 select sysdate from dual; --14.2 顯示當前日期,格式為****年**月**日,別名為hday select substr(to_char(sysdate,'dl'),1,11) as hday from dual; select to_char(sysdate,'yyyy"年"mm"月"dd"日"') as hday from dual; --14.3 編寫一個查詢,顯示姓名以J、A或M開始的所有員工的姓名(第一個字母大寫,其餘字母小寫)和姓名的長度,給每列一個合適的標籤; select concat(upper(substr(ename,1,1)),lower(substr(ename,2,length(ename)))) as lname,length(ename)as len from emp where ename like 'J%' or ename like 'A%' or ename like'M%'; --14.4 計算每位員工截止到當前時間入職的星期數,別名為weeks_worked。按聘用的星期數對結果進行排序。該星期數舍入到最接近的整數。同時顯示員工的名字; select ename,round((sysdate - to_date(hiredate))/7)as weeks_worked from emp order by weeks_worked ; --14.5 計算每位員工截止到當前時間入職的月數,別名為months_worked。該星期數舍入到最接近的整數。同時顯示員工的名字。 select ename,round(months_between(sysdate,to_date(hiredate)))as months_worked from emp order by months_worked ; --14.6 查詢在1981年2月20日和1987年5月1日之間入職的員工的姓名、職務標識和起始日期 select ename,job,hiredate from emp where hiredate<=to_date('1987-5-1','yyyy-mm-dd') and hiredate>=to_date('1981-2-20','yyyy-mm-dd'); --14.7 建立一個查詢。顯示所有員工的姓名和薪金。將薪金格式規定為15個字元長,左邊填充$ select ename,lpad(sal,15,'$') from emp; --14.8 顯示員工的姓名、聘用日期和該員工在星期幾開始工作的 select ename,hiredate,to_char(hiredate,'day')as start_worked from emp; --14.9 使用decode函式編寫一個查詢,使其按照以下資料根據job列的值顯示所有員工的級別,同時顯示員工的姓名 select ename,job,decode(job,'PRESIDENT','A','MANAGER','B','ANALYST','C','SALESMAN','D','CLERK','E') as grade from emp; --15.分組查詢 --15.1 求所有員工的平均工資、最高工資、最低工資和工資總和,給予適當的別名 select avg(sal),max(sal),min(sal),sum(sal) from emp; --15.2 求每種工作的平均工資 select job,avg(sal) from emp group by job; --15.3 求每個部門中同一種工作的平均工資,同時顯示部門號,按部門號升序顯示 select deptno,avg(sal) from emp group by job,deptno order by deptno asc; --15.4 查詢出各部門的部門編號以及各部門的總工資和平均工資,按部門編號升序排列 select deptno,sum(sal),avg(sal) from emp group by deptno order by deptno; --15.5 顯示每種工作的人數 select job,count(*) from emp group by job; --15.6 顯示員工最高工資超過3000的部門的id及其員工最高工資 select deptno,max(sal) from emp where sal>3000 group by deptno; --15.7 顯示每種工作的最低、最高、總計和平均工資 select job,min(sal),max(sal),sum(sal),avg(sal) from emp group by job; --15.8 確定經理的人數 select count(distinct mgr) from emp; --15.9 顯示最高薪資和最低薪資的差別,標記為DIFFERENCE select max(sal)-min(sal)as difference from emp; --15.10 顯示非銷售人員(SALESMAN)工作名稱以及從事同一工作僱員的月工資的總和,並且要滿足從事同一工作的僱員的月工資合計大於5000,輸出結果按月工資和排序 select job,sum(sal) from emp where job<>'SALESMAN' group by job having sum(sal)>5000 order by sum(sal); --15.11 顯示經理編號以及該經理所管理員工的最低薪資。不包括其經理未知的任何員工。排除最低薪資不超過2000的所有組。按最低薪資降序對輸出進行排序。 select mgr,min(sal) from emp where mgr is not null group by mgr having min(sal)>2000 order by min(sal) desc; --15.12 顯示在1981、1982、1980和1987年份每年聘用的員工總數,並按年號排序 select to_char(hiredate,'yyyy'),count(*) from emp group by to_char(hiredate,'yyyy') order by to_char(hiredate,'yyyy');