[Oracle] 10.NULL 조회와 집합연산자


NULL인 값 찾기



속성 값이 NULL인 것을 검색하기 위해서는 어떻게 해야할까요??

다음과 같이 생각하기 쉽습니다.


--잘못된 예--
SELECT *
FROM employees
WHERE manager_id=NULL;



하지만 위의 예는 잘못된 예입니다!

NULL인 것을 구하고 싶으면 다음과 같이 해야합니다.


SELECT *
FROM employees
WHERE manager_id IS NULL;



NULL이 아닌 것을 조회할 때는 IS NOT을 이용합니다.


SELECT *
FROM employees
WHERE manager_id IS NOT NULL;



정렬을 위한 ORDER BY 절



검색한 데이터를 오름차순 또는 내림차순으로 정렬하여 검색하고 싶으면 ORDER BY절을 이용합니다.


-- 사원번호 순으로 오름차순 --

SELECT EMPLOYEE_ID,FIRST_NAME
FROM EMPLOYEES
ORDER BY EMPLOYEE_ID ASC;



실행결과


image




-- 사원번호 순으로 내림차순 --

SELECT EMPLOYEE_ID,FIRST_NAME
FROM EMPLOYEES
ORDER BY EMPLOYEE_ID DESC;




image




-- 상사번호는 오름차순, 사원번호는 내림차순 --


SELECT manager_id "상사번호",first_name "사원이름",employee_id "사원번호"
FROM employees
ORDER BY manager_id ASC, employee_id DESC;




image



집합연산자: UNION, MINUS, INTERSECT



집합연산자에 대한 예제는 다음 두 테이블을 가지고 하겠습니다.


image



집합연산자를 사용할 때는 위의 테이블 같이 테이블의 형태와 속성 타입이 같아야합니다.

UNION : 합집합



UNION 연산자는 두 테이블의 행을 중복을 제거해서 합쳐줍니다.


SELECT
    *
FROM
    group_star
UNION
SELECT
    *
FROM
    single_star;



출력결과를 보시죠~ 중복되는 행 서태지가 사라졌죠!


image



만약 중복되는 행을 제거하기 싫으면 UNION ALL을 사용합니다.


SELECT
    *
FROM
    group_star
UNION ALL
SELECT
    *
FROM
    single_star;



출력 결과입니다.


image



INTERSECT: 교집합



INTERSECT 연산자는 두 테이블의 공통된 행을 조회합니다.


SELECT
    *
FROM
    group_star
INTERSECT
SELECT
    *
FROM
    single_star;



실행결과


image



Minus : 차집합



Minus 연산자는 차집합한 결과를 보여줍니다.


SELECT
    *
FROM
    group_star
MINUS
SELECT
    *
FROM
    single_star;



실행결과


image