Oracle SQL語句面試題一

以下是Oracle 數據庫中hr 用戶下面的表。下面的sql語句是以hr身份進入的。若是以system 身份進入需要在表名前面加hr. (如hr.employees)。
以下是表的基本結構
employees 表:

EMPLOYEE_ID NUMBER(6)
FIRST_NAME VARCHAR2(20)
LAST_NAME VARCHAR2(25)
EMAIL VARCHAR2(25)
PHONE_NUMBER VARCHAR2(20)
HIRE_DATE DATE
JOB_ID VARCHAR2(10)
SALARY NUMBER(8,2)
COMMISSION_PCT NUMBER(2,2)
MANAGER_ID NUMBER(6)
DEPARTMENT_ID NUMBER(4)

departments

DEPARTMENT_ID NUMBER(4)
DEPARTMENT_NAME VARCHAR2(30)
MANAGER_ID NUMBER(6)
LOCATION_ID NUMBER(4)

locations

LOCATION_ID NUMBER(4)
STREET_ADDRESS VARCHAR2(40)
POSTAL_CODE VARCHAR2(12)
CITY VARCHAR2(30)
STATE_PROVINCE VARCHAR2(25)
COUNTRY_ID CHAR(2)

jobs 表

JOB_ID VARCHAR2(10)
JOB_TITLE VARCHAR2(35)
MIN_SALARY NUMBER(6)
MAX_SALARY NUMBER(6)
  1. 查詢每個月倒數第 2 天入職的員工的信息.

sql 語句如下:

select last_name, hire_date  from employees  where hire_date = last_day(hire_date) – 1  

結果

LAST_NAME                 HIRE_DATE
------------------------- --------------
Atkinson                  30-10月-05
Tucker                    30-1月 -05
Olsen                     30-3月 -06
King                      30-1月 -04
  1. 查詢出 last_name 爲 ‘Chen’ 的 manager 的信息.
1). 通過兩條 sql 查詢:
select manager_id
from employees
where lower(last_name) = 'chen' --返回的結果108

select *
from employees
where employee_id = 108
2). 通過一條 sql 查詢(自連接):
select m.*
from employees e, employees m
where e.manager_id = m.employee_id and e.last_name
= 'Chen'

3). 通過一條 sql 查詢(子查詢): 
select *
from employees
where employee_id = (
select manager_id
from employees
where last_name = 'Chen'
)

結果

EMPLOYEE_ID FIRST_NAME           LAST_NAME
----------- -------------------- -------------------------
EMAIL                     PHONE_NUMBER         HIRE_DATE      JOB_ID
------------------------- -------------------- -------------- ----------
    SALARY COMMISSION_PCT MANAGER_ID DEPARTMENT_ID
---------- -------------- ---------- -------------
        108 Nancy                Greenberg
NGREENBE                  515.124.4569         17-8月 -02     FI_MGR
     12008                       101           100
  1. 查詢平均工資高於 8000 的部門 id 和它的平均工資
SELECT department_id, avg(salary)
FROM employees e
GROUP BY department_id
HAVING avg(salary) > 8000

結果

DEPARTMENT_ID AVG(SALARY)
------------- -----------
          100  8601.33333
           90  19333.3333
           20        9500
           70       10000
          110       10154
           80  8955.88235

已選擇6行。
  1. 查詢工資最低的員工信息: last_name, salary
SELECT last_name, salary
FROM employees
WHERE salary = (
SELECT min(salary)
FROM employees
)

結果:

LAST_NAME                     SALARY
------------------------- ----------
Olson                           2100
  1. 查詢平均工資最低的部門信息
select * 
from departments
where department_id =(
    select department_id
    from employees
    group by department_id
    having avg (salary) =
    (
        select min (avg(salary))
        from employees
        group by department_id
    )
)

結果:

DEPARTMENT_ID DEPARTMENT_NAME                MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
           50 Shipping                              121        1500
  1. 查詢平均工資最低的部門信息和該部門的平均工資
select d.*,(select avg(salary)  from employees where department_id=d.department_id)
    from departments d 
    where d.department_id=(
        select department_id
        from 
        employees
        group by department_id
        having avg(salary) =(
        select min (avg(salary))
        from employees
        group by department_id
        )
    )

結果:


DEPARTMENT_ID DEPARTMENT_NAME                MANAGER_ID LOCATION_ID
------------- ------------------------------ ---------- -----------
(SELECTAVG(SALARY)FROMEMPLOYEESWHEREDEPARTMENT_ID=D.DEPARTMENT_ID)
------------------------------------------------------------------
           50 Shipping                              121        1500
                                                        3475.55556
  1. 查詢平均工資最高的 job
1). 按 job_id 分組, 查詢最高的平均工資
SELECT max(avg(salary))
FROM employees
GROUP BY job_id
2). 查詢出平均工資等於 1) 的 job_id
SELECT job_id
FROM employees
GROUP BY job_id
HAVING avg(salary) = (
SELECT max(avg(salary))
FROM employees
GROUP BY job_id
)
3). 查詢出 2) 對應的 job 信息
SELECT *
WHERE job_id = (
SELECT job_id
FROM employees
GROUP BY job_id
HAVING avg(salary) = (
SELECT max(avg(salary))
FROM employees
GROUP BY job_id
)
)

結果
JOB_ID     JOB_TITLE                           MIN_SALARY MAX_SALARY
---------- ----------------------------------- ---------- ----------
AD_PRES    President                                20080      40000
  1. 查詢平均工資高於公司平均工資的部門有哪些?
1). 查詢出公司的平均工資
SELECT avg(salary)
FROM employees
2). 查詢平均工資高於 1) 的部門 ID
SELECT department_id
FROM employees
GROUP BY department_id
HAVING avg(salary) > (
SELECT avg(salary)
FROM employees
)

結果:
DEPARTMENT_ID
-------------
          100

           90
           20
           70
          110
           80
           40

已選擇8行。
  1. 查詢出公司中所有 manager 的詳細信息
SELECT employee_id, last_name
FROM employees
WHERE employee_id in (
SELECT distinct manager_id
FROM employees
)


結果
EMPLOYEE_ID LAST_NAME
----------- -------------------------
        148 Cambrault
        102 De Haan
        147 Errazuriz
        121 Fripp
        108 Greenberg
        201 Hartstein
        205 Higgins
        103 Hunold
        122 Kaufling
        100 King
        101 Kochhar
        124 Mourgos
        146 Partners
        114 Raphaely
        145 Russell
        123 Vollman
        120 Weiss
        149 Zlotkey

已選擇18行。
  1. 各個部門中 最高工資中最低的那個部門的
1). 查詢出各個部門的最高工資
SELECT max(salary)
FROM employees
GROUP BY department_id
2). 查詢出 1) 對應的查詢結果的最低值: 各個部門中最低的最高工
資(無法查詢對應的 department_id)
SELECT min(max(salary))
FROM employees
GROUP BY department_id
3). 查詢出 2) 所對應的部門 id 是多少: 各個部門中最高工資等於
2) 的那個部門的 id
SELECT department_id
FROM employees
GROUP BY department_id
HAVING max(salary) = (
SELECT min(max(salary))
FROM employees
GROUP BY department_id
)
4). 查詢出 3) 所在部門的最低工資
select min (salary) 
from employees 
where department_id =(
    select department_id
from employees
group by department_id
having max(salary) = (
    select min (max(salary))
    from employees
    group by department_id
    )
)

結果:

MIN(SALARY)
-----------
       4400
  1. 查詢平均工資最高的部門的 manager 的詳細信息: last_name,department_id, email,salary
1). 各個部門中, 查詢平均工資最高的平均工資是多少
SELECT max(avg(salary))
FROM employees
GROUP BY department_id
2). 各個部門中, 平均工資等於 1) 的那個部門的部門號是多少
SELECT department_id
FROM employees
GROUP BY department_id
HAVING avg(salary) = (
SELECT max(avg(salary))
FROM employees
GROUP BY department_id
)
3). 查詢出 2) 對應的部門的 manager_id
SELECT manager_id
FROM departments
WHERE department_id = (
SELECT department_id
FROM employees
GROUP BY department_id
HAVING avg(salary) = (
SELECT max(avg(salary))
FROM employees
GROUP BY department_id
)
)
4). 查詢出 employee_id 爲 3) 查詢的 manager_id 的員工的
last_name, department_id, email, salary
select last_name,department_id,email,salary
 from employees 
 where employee_id = (
     select manager_id 
    from departments
    where department_id = (
     select department_id
    from employees 
    group by department_id
    having avg (salary) = (
    select max(avg(salary))
    from employees
    group by department_id
    )
    )
 )
結果:
LAST_NAME                 DEPARTMENT_ID EMAIL                         SALARY
------------------------- ------------- ------------------------- ----------
King                                 90 SKING                          24000

  1. 查詢 1999 年來公司的人所有員工的最高工資的那個員工的信息.
1). 查詢出 1999 年來公司的所有的員工的 salary
SELECT salary
FROM employees
WHERE to_char(hire_date, 'yyyy') = '1999'
2). 查詢出 1) 對應的結果的最大值
SELECT max(salary)
FROM employees
WHERE to_char(hire_date, 'yyyy') = '1999'
3). 查詢工資等於 2) 對應的結果且 1999 年入職的員工信息
SELECT *
FROM employees
WHERE to_char(hire_date, 'yyyy') = '1999' AND salary
= (
SELECT max(salary)
FROM employees
WHERE to_char(hire_date, 'yyyy') = '1999'
)

  1. 比 返回其它部門中比 job_id 爲‘IT_PROG’ 部門所有工資都低的員工的員
    工號、姓名、job_id 以及 salary
SELECT employee_id, last_name, job_id, salary
FROM employees
WHERE salary < ALL
(SELECT salary
FROM employees
WHERE job_id = 'IT_PROG')
AND job_id <> 'IT_PROG'

結果:

EMPLOYEE_ID LAST_NAME                 JOB_ID         SALARY
----------- ------------------------- ---------- ----------
        185 Bull                      SH_CLERK         4100
        192 Bell                      SH_CLERK         4000
        193 Everett                   SH_CLERK         3900
        188 Chung                     SH_CLERK         3800
        137 Ladwig                    ST_CLERK         3600
        189 Dilly                     SH_CLERK         3600
        141 Rajs                      ST_CLERK         3500
        186 Dellinger                 SH_CLERK         3400
        133 Mallin                    ST_CLERK         3300
        129 Bissot                    ST_CLERK         3300
        180 Taylor                    SH_CLERK         3200
        138 Stiles                    ST_CLERK         3200
        125 Nayer                     ST_CLERK         3200
        194 McCain                    SH_CLERK         3200
        115 Khoo                      PU_CLERK         3100
        196 Walsh                     SH_CLERK         3100
        142 Davies                    ST_CLERK         3100
        181 Fleaur                    SH_CLERK         3100
        187 Cabrio                    SH_CLERK         3000
        197 Feeney                    SH_CLERK         3000
        116 Baida                     PU_CLERK         2900
        190 Gates                     SH_CLERK         2900
        134 Rogers                    ST_CLERK         2900
        183 Geoni                     SH_CLERK         2800
        130 Atkinson                  ST_CLERK         2800
        117 Tobias                    PU_CLERK         2800
        195 Jones                     SH_CLERK         2800
        126 Mikkilineni               ST_CLERK         2700
        139 Seo                       ST_CLERK         2700
        143 Matos                     ST_CLERK         2600
        199 Grant                     SH_CLERK         2600
        118 Himuro                    PU_CLERK         2600
        198 OConnell                  SH_CLERK         2600
        140 Patel                     ST_CLERK         2500
        131 Marlow                    ST_CLERK         2500
        119 Colmenares                PU_CLERK         2500
        191 Perkins                   SH_CLERK         2500
        182 Sullivan                  SH_CLERK         2500
        144 Vargas                    ST_CLERK         2500
        127 Landry                    ST_CLERK         2400
        135 Gee                       ST_CLERK         2400
        128 Markle                    ST_CLERK         2200
        136 Philtanker                ST_CLERK         2200
        132 Olson                     ST_CLERK         2100

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