Oracle SQL語句面試題二

  1. 與 查詢與 141 號或 174 號員工的 manager_id 和 和 department_id 相同的
    的 其他員工的 employee_id, manager_id, department_id
[ 方式一]
select employee_id,manager_id,department_id
from employees
where manager_id in
    (select manager_id
    from employees
    where employee_id in (174,141))
    and
    department_id in (
        select department_id 
        from employees
        where employee_id in (174,141))
        and
        employee_id not in(174,141);
[ 方式二]
select employee_id,manager_id,department_id
from employees
where(manager_id,department_id)
    in
    (
    select manager_id,department_id
    from employees
    where employee_id in (141,174))
    and
    employee_id not in (174,141);

結果:

EMPLOYEE_ID MANAGER_ID DEPARTMENT_ID
----------- ---------- -------------
        199        124            50
        198        124            50
        197        124            50
        196        124            50
        144        124            50
        143        124            50
        142        124            50
        179        149            80
        177        149            80
        176        149            80
        175        149            80

已選擇11行。
  1. 的 返回比本部門平均工資高的員工的 last_name, department_id,
    salary
[ 方式一]
select last_name,department_id,salary,
(select avg(salary)from employees e3
where e1.department_id = e3.department_id
group by department_id) avg_salary
from employees e1
where salary >
(select avg(salary)
from employees e2
where e1.department_id = e2.department_id
--group by department_id
)
[ 方式二]
SELECT a.last_name, a.salary,
a.department_id, b.salavg
FROM employees a, (SELECT department_id,
AVG(salary) salavg
FROM employees
GROUP BY department_id) b
WHERE a.department_id = b.department_id
AND a.salary > b.salavg;

結果:


LAST_NAME                 DEPARTMENT_ID     SALARY AVG_SALARY
------------------------- ------------- ---------- ----------
King                                 90      24000 19333.3333
Hunold                               60       9000       5760
Ernst                                60       6000       5760
Greenberg                           100      12008 8601.33333
Faviet                              100       9000 8601.33333
Raphaely                             30      11000       4150
Weiss                                50       8000 3475.55556
Fripp                                50       8200 3475.55556
Kaufling                             50       7900 3475.55556
Vollman                              50       6500 3475.55556
Mourgos                              50       5800 3475.55556
Ladwig                               50       3600 3475.55556
Rajs                                 50       3500 3475.55556
Russell                              80      14000 8955.88235
Partners                             80      13500 8955.88235
Errazuriz                            80      12000 8955.88235
Cambrault                            80      11000 8955.88235
Zlotkey                              80      10500 8955.88235
Tucker                               80      10000 8955.88235
Bernstein                            80       9500 8955.88235
Hall                                 80       9000 8955.88235
King                                 80      10000 8955.88235
Sully                                80       9500 8955.88235
McEwen                               80       9000 8955.88235
Vishney                              80      10500 8955.88235
Greene                               80       9500 8955.88235
Ozer                                 80      11500 8955.88235
Bloom                                80      10000 8955.88235
Fox                                  80       9600 8955.88235
Abel                                 80      11000 8955.88235
Sarchand                             50       4200 3475.55556
Bull                                 50       4100 3475.55556
Chung                                50       3800 3475.55556
Dilly                                50       3600 3475.55556
Bell                                 50       4000 3475.55556
Everett                              50       3900 3475.55556
Hartstein                            20      13000       9500
Higgins                             110      12008      10154

已選擇38行。
  1. 的 顯式員工的 employee_id,last_name 和 和 location 。其中,若員工
    department_id 與 與 location_id 爲 爲 1800 的 的 department_id 相同,則
    location 爲’Canada’, 其餘則爲’USA’ 。
SELECT employee_id, last_name,
(CASE department_id
WHEN (SELECT department_id FROM departments
WHERE location_id = 1800)
THEN 'Canada' ELSE 'USA' END) location
FROM employees;
``
結果:

EMPLOYEE_ID LAST_NAME LOCATI


    100 King                      USA
    101 Kochhar                   USA
    102 De Haan                   USA
    103 Hunold                    USA
    104 Ernst                     USA
    105 Austin                    USA
    106 Pataballa                 USA
    107 Lorentz                   USA
    108 Greenberg                 USA
    109 Faviet                    USA
    110 Chen                      USA
    111 Sciarra                   USA
    112 Urman                     USA
    113 Popp                      USA
    114 Raphaely                  USA
    115 Khoo                      USA
    116 Baida                     USA
    117 Tobias                    USA
    118 Himuro                    USA
    119 Colmenares                USA
    120 Weiss                     USA
    121 Fripp                     USA
    122 Kaufling                  USA
    123 Vollman                   USA
    124 Mourgos                   USA
    125 Nayer                     USA
    126 Mikkilineni               USA
    127 Landry                    USA
    128 Markle                    USA
    129 Bissot                    USA
    130 Atkinson                  USA
    131 Marlow                    USA
    132 Olson                     USA
    133 Mallin                    USA
    134 Rogers                    USA
    135 Gee                       USA
    136 Philtanker                USA
    137 Ladwig                    USA
    138 Stiles                    USA
    139 Seo                       USA
    140 Patel                     USA
    141 Rajs                      USA
    142 Davies                    USA
    143 Matos                     USA
    144 Vargas                    USA
    145 Russell                   USA
    146 Partners                  USA
    147 Errazuriz                 USA
    148 Cambrault                 USA
    149 Zlotkey                   USA
    150 Tucker                    USA
    151 Bernstein                 USA
    152 Hall                      USA
    153 Olsen                     USA
    154 Cambrault                 USA
    155 Tuvault                   USA
    156 King                      USA
    157 Sully                     USA
    158 McEwen                    USA
    159 Smith                     USA
    160 Doran                     USA
    161 Sewall                    USA
    162 Vishney                   USA
    163 Greene                    USA
    164 Marvins                   USA
    165 Lee                       USA
    166 Ande                      USA
    167 Banda                     USA
    168 Ozer                      USA
    169 Bloom                     USA
    170 Fox                       USA
    171 Smith                     USA
    172 Bates                     USA
    173 Kumar                     USA
    174 Abel                      USA
    175 Hutton                    USA
    176 Taylor                    USA

EMPLOYEE_ID LAST_NAME LOCATI


    177 Livingston                USA
    178 Grant                     USA
    179 Johnson                   USA
    180 Taylor                    USA
    181 Fleaur                    USA
    182 Sullivan                  USA
    183 Geoni                     USA
    184 Sarchand                  USA
    185 Bull                      USA
    186 Dellinger                 USA
    187 Cabrio                    USA
    188 Chung                     USA
    189 Dilly                     USA
    190 Gates                     USA
    191 Perkins                   USA
    192 Bell                      USA
    193 Everett                   USA
    194 McCain                    USA
    195 Jones                     USA
    196 Walsh                     USA
    197 Feeney                    USA
    198 OConnell                  USA
    199 Grant                     USA
    200 Whalen                    USA
    201 Hartstein                 Canada
    202 Fay                       Canada
    203 Mavris                    USA
    204 Baer                      USA
    205 Higgins                   USA
    206 Gietz                     USA

已選擇107行。

  1. 查 詢 員 工 的 employee_id,last_name, 要 求 按 照 員 工 的
    department_name 排序
select employee_id,last_name
from employees e
order by(
    select department_name
    from departments d
    where e.department_id = d.department_id
);

結果:

EMPLOYEE_ID LAST_NAME
----------- -------------------------
        205 Higgins
        206 Gietz
        200 Whalen
        100 King
        101 Kochhar
        102 De Haan
        109 Faviet
        108 Greenberg
        112 Urman
        111 Sciarra
        110 Chen
        113 Popp
        203 Mavris
        107 Lorentz
        106 Pataballa
        105 Austin
        103 Hunold
        104 Ernst
        201 Hartstein
        202 Fay
        204 Baer
        119 Colmenares
        114 Raphaely
        115 Khoo
        116 Baida
        117 Tobias
        118 Himuro
        167 Banda
        168 Ozer
        169 Bloom
        170 Fox
        171 Smith
        172 Bates
        173 Kumar
        174 Abel
        175 Hutton
        176 Taylor
        177 Livingston
        179 Johnson
        145 Russell
        146 Partners
        147 Errazuriz
        148 Cambrault
        149 Zlotkey
        150 Tucker
        151 Bernstein
        152 Hall
        153 Olsen
        154 Cambrault
        155 Tuvault
        156 King
        157 Sully
        158 McEwen
        159 Smith
        160 Doran
        161 Sewall
        162 Vishney
        163 Greene
        164 Marvins
        165 Lee
        166 Ande
        180 Taylor
        144 Vargas
        182 Sullivan
        183 Geoni
        184 Sarchand
        185 Bull
        186 Dellinger
        187 Cabrio
        188 Chung
        189 Dilly
        190 Gates
        191 Perkins
        192 Bell
        193 Everett
        194 McCain
        195 Jones

EMPLOYEE_ID LAST_NAME
----------- -------------------------
        196 Walsh
        197 Feeney
        198 OConnell
        199 Grant
        120 Weiss
        121 Fripp
        122 Kaufling
        123 Vollman
        124 Mourgos
        125 Nayer
        126 Mikkilineni
        127 Landry
        128 Markle
        129 Bissot
        130 Atkinson
        131 Marlow
        132 Olson
        133 Mallin
        134 Rogers
        135 Gee
        136 Philtanker
        137 Ladwig
        138 Stiles
        139 Seo
        140 Patel
        141 Rajs
        142 Davies
        143 Matos
        181 Fleaur
        178 Grant

已選擇107行。
  1. 查詢員工中工資大於本部門平均工資的員工的 last_name,
    salary 和其 department_id
SELECT last_name, salary, department_id
FROM employees outer
WHERE salary >
(SELECT AVG(salary)
FROM employees
WHERE department_id =
outer.department_id) ;

結果:


LAST_NAME                     SALARY DEPARTMENT_ID
------------------------- ---------- -------------
King                           24000            90
Hunold                          9000            60
Ernst                           6000            60
Greenberg                      12008           100
Faviet                          9000           100
Raphaely                       11000            30
Weiss                           8000            50
Fripp                           8200            50
Kaufling                        7900            50
Vollman                         6500            50
Mourgos                         5800            50
Ladwig                          3600            50
Rajs                            3500            50
Russell                        14000            80
Partners                       13500            80
Errazuriz                      12000            80
Cambrault                      11000            80
Zlotkey                        10500            80
Tucker                         10000            80
Bernstein                       9500            80
Hall                            9000            80
King                           10000            80
Sully                           9500            80
McEwen                          9000            80
Vishney                        10500            80
Greene                          9500            80
Ozer                           11500            80
Bloom                          10000            80
Fox                             9600            80
Abel                           11000            80
Sarchand                        4200            50
Bull                            4100            50
Chung                           3800            50
Dilly                           3600            50
Bell                            4000            50
Everett                         3900            50
Hartstein                      13000            20
Higgins                        12008           110

已選擇38行。
  1. 若 若 employees 表中 employee_id 與 job_history 表中 employee_id
    於 相同的數目不小於 2 ,輸出這些相同 id 的員工的 employee_id,last_name
    其 和其 job_id
select e.employee_id ,last_name,e.job_id
from employees e
    where 2<=(select count(*)
        from job_history
        where employee_id = e.employee_id
    );

結果:

EMPLOYEE_ID LAST_NAME                 JOB_ID
----------- ------------------------- ----------
        101 Kochhar                   AD_VP
        176 Taylor                    SA_REP
        200 Whalen                    AD_ASST

–EXISTS 操作符
• EXISTS 操作符檢查在子查詢中是否存在滿足條件的行
• 如果在子查詢中存在滿足條件的行:
– 不在子查詢中繼續查找
– 條件返回 TRUE
7. 的 查詢公司管理者的 employee_id,last_name,job_id,
department_id

SELECT employee_id, last_name, job_id, department_id
FROM employees outer
WHERE EXISTS ( SELECT 'X'
FROM employees
WHERE manager_id =
outer.employee_id);
  1. 詢 查 詢 departments 於 表 中, 不存 在於 employees 表 中的 部門 的
    department_id 和 和 department_name
SELECT department_id, department_name
FROM departments d
WHERE NOT EXISTS (SELECT 'X'
FROM employees
WHERE department_id
= d.department_id)

修改表 employees, 添加 department_name 列,賦予 department_id
相應的部門名稱。

ALTER TABLE employees
ADD(department_name VARCHAR2(14));
UPDATE employees e
SET department_name =
(SELECT department_name
FROM departments d
WHERE e.department_id = d.department_id);
  1. 刪除表 employees 中,其與 emp_history
DELETE FROM employees E
WHERE employee_id in
(SELECT employee_id
FROM emp_history
WHERE employee_id = E.employee_id);

查詢公司中各部門的總工資大於公司中各部門的平均總工資的部門信息

dept_costs AS (
SELECT d.department_name, SUM(e.salary) AS dept_total
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY d.department_name),
avg_cost AS (
SELECT SUM(dept_total)/COUNT(*) AS dept_avg
FROM dept_costs)
SELECT *
FROM dept_costs
WHERE dept_total >
(SELECT dept_avg
FROM avg_cost)
ORDER BY department_name

12.的 查詢員工的 last_name, department_id, salary. 其中員工的
salary,department_id 與有獎金的任何一個員工的 salary,
department_id 相同即可

select last_name, department_id, salary
from employees
where (salary,department_id) in (
select salary,department_id
from employees
where commission_pct is not null
)

13.有 選擇工資大於所有 JOB_ID = ‘SA_MAN’ 的員工的工資的員工的
last_name, job_id, salary

select last_name, job_id, salary
from employees
where salary > all(
select salary
from employees
where job_id = 'SA_MAN'
)

14選擇所有沒有管理者的員工的 last_name

select last_name
from employees e1
where not exists (
select 'A'
from employees e2
where e1.manager_id = e2.employee_id
)
  1. 查詢 10 ,50 ,20 號部門的 job_id ,department_id 並且
    department_id 按 按 10 ,50 ,20
Column dummy noprint;
select job_id , department_id ,1 dummy
from employees
where department_id = 10
union
select job_id , department_id , 2
from employees
where department_id = 50
union
select job_id , department_id , 3
from employees
where department_id= 20
order by 3

結果:

JOB_ID     DEPARTMENT_ID
---------- -------------
AD_ASST               10
SH_CLERK              50
ST_CLERK              50
ST_MAN                50
MK_MAN                20
MK_REP                20

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