萬事俱備之ORACLE_SQL 練手 part3

--腳本和其它參考見part1
select * from employees;
select * from DEPARTMENTS;
select * from locations;

SELECT TO_CHAR(SALARY,'U99,999.99','NLS_DUAL_CURRENCY=RMB') FROM EMPLOYEES WHERE ROWNUM < 5;
SELECT TO_CHAR(SALARY,'$99,999.99')  FROM EMPLOYEES WHERE ROWNUM < 5;
SELECT TO_CHAR(SALARY,'99,999.$99')  FROM EMPLOYEES WHERE ROWNUM < 5;
--系統貨幣單位? 對應參數NLS_ISO_CURRENCY
SELECT TO_CHAR(SALARY,'C99,999.99')  FROM EMPLOYEES WHERE ROWNUM < 5;
--本地貨幣符號 對應參數NLS_CURRENCY
SELECT TO_CHAR(SALARY,'L99,999.99')  FROM EMPLOYEES WHERE ROWNUM < 5;
--不足補0,9表數字,0和9數量等於爲數
SELECT TO_CHAR(SALARY,'L099,999.99')  FROM EMPLOYEES WHERE ROWNUM < 5;

--C ISO 國家對應貨幣英文縮寫  CNY USD
alter session set NLS_ISO_CURRENCY='China';

--L 所件即所得,亂碼的話去修改編碼
alter session set NLS_CURRENCY='RMB';
alter session set NLS_CURRENCY='¥';

--查看 v$nls_parameters(客戶端nls參數) 和nls_database_parameters(數據庫nls參數)
select * from v$nls_parameters;
select * from nls_database_parameters;

-- 均無權限,不知啥影響
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
alter system set nls_language='SIMPLIFIED CHINESE' scope=spfile;

--2. 列出前五位每個員工的名字, 工資、漲薪後的的工資( 漲幅爲8% ) , 以“ 元”爲單位進行四捨五入。
---第一句快些,數據少的時候,再select 1次 比加剪乘除快
select first_name,sal,round(sal*1.08) Acsal_now from (select first_name,salary sal from employees where rownum < 6);
select  first_name,salary sal ,round(salary*1.08) sal_now from employees where rownum < 6;

--3. 找出誰是最高領導,將名字按大寫形式顯示。
select upper(first_name) from employees where manager_id is null;

--4. 找出First_Name 爲David , Last_Name 爲Austin 的直接領導名字。
select first_name||' '||last_name ename from employees 
where employee_id=
      (select manager_id from employees where first_name= 'David' and last_name='Austin' );

--5. First_Name 爲Alexander , Last_Name 爲Hunold 的直接下屬員工是哪些
select  first_name||' '||last_name ename from employees 
where manager_id=
      (select employee_id from employees where first_name= 'Alexander' and last_name='Hunold' );

--6. 哪些員工的工資高於他直接上司的工資,列出員工的名字和工資,上司的名字和工資
---隱性連接
select  a.first_name||' '||a.last_name ename ,a.salary,  b.first_name||' '||b.last_name mname ,b.salary
from employees a, employees b
where a.manager_id=b.employee_id
and a.salary > b.salary;
--內連接
select  a.first_name||' '||a.last_name ename ,a.salary,  b.first_name||' '||b.last_name mname ,b.salary
from employees a inner join employees b
on a.manager_id=b.employee_id
and a.salary > b.salary;

--7. 哪些員工和Chen(LAST_NAME) 同部門。
select first_name||' '||last_name ename,department_id from employees 
where  department_id =
(select department_id from employees where last_name='Chen');

--8. 哪些員工跟De Haan(LAST_NAME) 做一樣職位。
select first_name||' '||last_name ename,job_id from employees 
where  job_id =
(select job_id from employees where last_name='De Haan');

--9. 哪些員工跟Hall(LAST_NAME) 不在同一個部門。
select first_name||' '||last_name ename,department_id from employees 
where  department_id !=
(select department_id from employees where last_name='Hall');

--10. 哪些員工跟William ( FIRST_NAME ) 、Smith(LAST_NAME) 做不一樣的職位。
select first_name||' '||last_name ename,job_id from employees 
where  job_id !=
(select job_id from employees where last_name='Smith' and FIRST_NAME='William');

--11. 顯示有提成的員工的信息:名字、提成、所在部門名稱、所在地區的名稱。
select first_name|| ' ' ||last_name ename,commission_pct,empp.department_id ,department_name,city
from employees empp left join
(select d.department_name,l.city,department_id from locations l right join departments d
on l.location_id= d.location_id) locdept
on locdept.department_id =empp.department_id
where commission_pct is not null;
--12. 顯示Executive 部門有哪些職位。
select empp.job_id from employees empp right join departments d
on empp.department_id=d.department_id
where d.department_name ='Executive';

--13. 整個公司中,最高工資和最低工資相差多少。
select max(salary)-min(salary) from employees;

--14. 提成大於0 的人數。
select count(*) num from employees where commission_pct>0;

--15. 顯示整個公司的最高工資、最低工資、工資總和、平均工資保留到整數位。
select round(max(salary)),round(min(salary)),round(avg(salary)),round(sum(salary) )
from employees;

--16. 整個公司有多少個領導。
select count(distinct manager_id) cmn from employees ;

--17. 列出在同一部門入職日期晚但工資高於其他同事的員工:名字、工資、入職日 期。
--蒙圈,
select  first_name|| ' ' ||last_name ename,salary,hire_date 
from employees empp left join (select department_id,max(hire_date),salary maxsal from employees  group by department_id) maxsal
on empp.department_id = maxsal.department_id 
where empp.hire_date>=maxsal.hire_date
and empp.salary>=maxsal.;
--某答案
select distinct e1.first_name||' '||e1.last_name,e1.salary,e1.hire_date 
from employees e1 join employees e2 
on e1.department_id=e2.department_id 
where e1.hire_date> e2.hire_date and  e1.salary>e2.salary;

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