SELECT A.ID,B.ID
FROM table1 A, table2 B
WHERE A.ID = B.ID
UNION ALL
SELECT A.ID, NULL
FROM table1 A
WHERE NOT EXISTS
(SELECT 1 FROM table2 B
WHERE A.ID = B.ID)
UNION ALL
SELECT NULL, B.ID
FROM table2 B
WHERE NOT EXISTS (SELECT 1 FROM table1 A
WHERE B.ID = A. ID)
혼자 SQL을 빵상빵상 알아가는 중인데 도저히 이해가 안가서 열심히 찾아보았다. 배우는게 너무 오래 걸리지만.. 그래도 한번 이해하고 까먹지 않으면 된거 아닐까
1
2
...NULL
___에 들어가면 table이 가진 행의 수만큼을 해당 값으로 출력한다.
- 다중 행 서브쿼리[
EXISTS
NOT EXISTS
] 에서WHERE
절 내, 조건으로 사용하게 된다.SELECT * FROM TABLE SELECT 1 FROM TABLE
*
과1
이 논리식에 사용 될 때, 값의 존재 유무를 알기 위해 간단하게 사용하는 방식이다.
SELECT 1 FROM exam WHERE examCol = 'abc'
- 숫자 그대로가 아닌
TRUE
라고 보면 쉽다.
exam의 examCol의 값이 abc라면, 1을 반환한다.
다시 처음으로 돌아와서 UNION ALL
을 기준으로 2개의 쿼리를 해석해보자면,
SELECT A.ID, NULL FROM table1 A WHERE NOT EXISTS (SELECT 1 FROM table2 B WHERE A.ID = B.ID)
table1
을 불러온 후,
서브쿼리
A.ID와 B.ID이 같은 조건 (WHERE)
을제외 (NOT EXISTS)
한
A.ID
와A.ID
행의 수 만큼 NULL을 출력하라.