교재: SQL 자격 검정 실전 문제
2과목 제2장 - SQL 활용
75번 ~ 84번
답: LEFT (OUTER) JOIN
사원이 없는 부서 정보도 같이 출력하려면, DEPT 테이블은 모두 출력하는 것이므로 LEFT OUTER JOIN을 해야 한다.
답: 2번
OUTER JOIN에서 ON절은 조인할 대상을 결정한다. 이때 기준 테이블은 항상 모두 표시된다
결과 건에 대한 필터링은 WHERE 절에서 수행된다.
답: 1번

보기는 게시판별 게시글의 개수를 조회하는 SQL구문이다. 이때 게시글이 존재하지 않는 게시판도 조회되어야 한다. ORACLE에서는 (+) 기호를 사용하여 처리할 수도 있으며, 이를 ANSI 문장으로 변경하기 위해서는 INNER쪽 테이블(게시글)에 조건절을 ON절에 함께 위치시켜야 정상적인 OUTER JOIN을 수행할 수 있다.
A.ID = B.ID(+) : LEFT OUTER
A.ID(+) = B.ID : RIGHT OUTER
(+) 표시가 있는 A.ID = B.ID 와 B의 '삭제여부' 조건을 ON절에 표기하고 있는 건 1번뿐이다.
답: 5
NOT EXISTS에 주의하도록 하자.
답: 4번
EXCEPT는 차집합에 대한 연산이므로 NOT IN 또는 NOT EXISTS로 대체하여 처리가 가능하다.
2번은 NOT IN을 사용하였으나, PK컬럼 A, B에 대하여 각각 NOT IN 연산을 수행하여 다른 결과가 생성된다.
+) 1번의 <> 표시는 같지 않다는 뜻이다.

답: 2번
코드도 중요하지만 각 컬럼에 담긴 의미를 파악하는 것도 중요하다.
1번: 이용된 적이 있었던 서비스를 추출하는 것은 동일하나 서비스와 서비스이용은 1:N 관계이므로 서비스이용건수만큼 추출되므로 전체 결과가 다르다. GROUP BY를 수행하면 동일한 결과를 출력할 수 있다.
2번: 전체 서비스에서 이용된 적이 있었던 서비스를 MINUS하였으므로 이용된 적이 없었던 서비스가 서브쿼리에서 추출된다. 그러므로 NOT EXISTS 구문을 적용하면 이용된 적이 있었던 서비스가 출력된다.
3번: 서비스를 기준으로 OUTER JOIN을 수행하였으므로, 이용된 적이 없었던 서비스만 출력된다. B.서비스ID IS NOT NULL로 변경해야 동일한 결과가 출력된다.
답: 2번
SET OPERATOR : 합집합은 UNION, 교집합은 INTERSECT, 차집합은 MINUS/EXCEPT이다.
답: 2번
첫 번째 컬럼인 ENAME을 기준으로 정렬하면, J가 S보다 먼저 오기 때문에 2번이 답이 된다.
ORDER BY 1, 2 : 1번째 컬럼을 기준으로 정렬 후 2번째 컬럼을 기준으로 정렬한다. 뒤에 DESC ASC가 올 수 있다.

답: 1번
집합 연산자는 SQL에서 위에 정의된 연산자가 먼저 수행된다.
그러므로 UNION이 나중에 수행되므로 결과적으로 중복 데이터가 모두 제거되어 1번과 같은 결과가 도출된다. 만일 UNION과 UNION ALL의 순서를 바꾼다면 2번과 같은 결과가 도출된다.
답: 1번