hyeonga_code
Database_42_SUB QUERY_다중 행 연산자 IN, OUT, AN 본문
-- 다중 행 연산자
-- IN
SELECT last_name, hire_date, department_id
FROM employees
WHERE hire_date IN (
SELECT MAX(hire_date)
FROM employees
GROUP BY department_id);
/*
LAST_NAME HIRE_DATE DP_ID
-------------------------------------------------
De Haan 08/01/13 90
Lorentz 14/02/07 60
Mourgos 14/11/16 50
Zlotkey 15/01/29 80
Grant 14/05/24 ( null )
Whalen 02/09/17 10
Fay 12/08/17 20
Higgins 09/06/07 110
Gietz 09/06/07 110
*/
-- ANY
SELECT salary
FROM employees
WHERE department_id=80;
/*
SALARY
---------
10500
11000
8600
*/
/*
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE salary > (
SELECT salary
FROM employees
WHERE department_id=80);
- 다중 행을 반환하므로 오류가 발생합니다.
<오류>----------------------------------------------------------------
ORA-01427: single-row subquery returns more than one row
01427. 00000 - "single-row subquery returns more than one row"
*Cause:
*Action:
------------------------------------------------------------------------
*/
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE salary > ANY (
SELECT salary
FROM employees
WHERE department_id=80);
SELECT employee_id, last_name, salary, department_id
FROM employees
WHERE salary > ALL (
SELECT salary
FROM employees
WHERE department_id=80);
-- IIN/NOT IN 의 주의사항
SELECT last_name, manager_id
FROM employees
WHERE manager_id IN(100, 101, NULL);
-- NULL 값이 출력되지 않는 이유는 IN에 '='의 의미가 들어있기 때문입니다.
-- OR 가 됩니다.
/*
LAST_NAME M_ID
-----------------------------
Kochhar 100
De Haan 100
Mourgos 100
Zlotkey 100
Whalen 101
Hartstein 100
Higgins 101
*/
SELECT last_name, manager_id
FROM employees
WHERE manager_id NOT IN(100, 101, NULL);
-- 어떠한 값도 출력되지 않습니다.
-- AND가 됩니다.
-- 정상출력됩니다.
SELECT last_name, manager_id
FROM employees
WHERE manager_id NOT IN(100, 101);
SELECT last_name, manager_id
FROM employees
WHERE employee_id IN (SELECT manager_id FROM employees);
/*
LAST_NAME M_ID
-------------------------------
King ( null )
Kochhar 100
De Haan 100
Hunold 102
Mourgos 100
Zlotkey 100
Hartstein 100
Higgins 101
*/
'Oracle Database' 카테고리의 다른 글
Database_44_데이터 조작과 트랜잭션_작업 단위 (0) | 2023.08.03 |
---|---|
Database_43_SUB QUERY_서브쿼리에서의 널(NULL) 값 (0) | 2023.08.02 |
Database_41_SUB QUERY_HAVING 절에서 서브쿼리 사용 (0) | 2023.08.02 |
Database_40_SUB QUERY_서브쿼리 작성 실습 (0) | 2023.08.02 |
Database_39_SUB QUERY_서브쿼리 기본 개념, 단일행, 다중행, 스칼라, 인라인 뷰 (0) | 2023.08.02 |