[231109] SQLD 2과목_2장(65~74)

ese2o·2023년 11월 8일

SQLD

목록 보기
7/8

교재: SQL 자격 검정 실전 문제
2과목 제2장 - SQL 활용
65번 ~ 74번

65번

답: 2번

순수 관계 연산자에는 SELECT, PROJECT, JOIN, DIVIDE가 있다.

SPDJ로 암기하기

66번

답: 3, 4번
1번: NOT EXIST 절의 연관서브쿼리에 X.컨텐츠ID = B.컨텐츠ID가 존재하지 않아 단 하나의 컨텐츠라도 비선호로 등록한 고객에 대해서는 모든 컨텐츠가 추천에서 배재된다.
2번: 추천컨텐츠를 기준으로 비선호컨텐츠와의 LEFT OUTER JOIN이 수행되고 비선호 컨텐츠의 컨텐츠ID에 대해서 IS NULL 조건이 있다면 정확히 비선호 컨텐츠만 필터링할 수 있다.

67번

답: 1, 2번

Cartesian Product(카티시안 곱)
WHERE절에 JOIN 조건을 주지 않는 것으로, 가능한 모든 조합의 데이터가 조회되는 현상이다. (CROSS JOIN으로 조회한다.)

3번: 제품과 생산라인 엔터티에 생산제품과 대응되지 않는 레코드가 있을 수 있다.
4번: <생산제품> 엔터티에 <라인번호>가 있기 때문에 <제품>과 <생산제품> 두 개의 엔터티의 Inner Join만으로도 특정 생산라인번호에서 생산되는 제품의 제품명을 알 수 있다.

68번

답: 2번
구매이력이 있어야 하므로 INNER JOIN
구매 횟수이므로 COUNT 함수를 이용한다.

69번

답: 3번
1번: 부등호가 아니라 BETWEEN AND 절을 사용해야 한다.
2번: INNER JOIN 구문 오류이다. 두 절을 연속해서 작성할 수 없다.
4번: BETWEEN JOIN이라는 구문은 없다.

70번

답: 1번
USING 조건절을 이용한 EQUI JOIN에서도 NATURAL JOIN과 마찬가지로 JOIN 컬럼에 대해서는 ALIAS나 테이블 이름과 같은 접두사를 붙일 수 없다.
USING T.STADIUM_ID = S.STADIUM_ID
-> USING (STADIUM_ID)
SELECT T.REGION_NAME, T.TEAM_NAME, T.STADIUM_ID, S.STADIUM_NAME
-> SELECT T.REGION_NAME, T.TEAM_NAME, STADIUM_ID, S.STADIUM_NAME
STADIUM_ID 가 조인 컬럼이기 때문에 테이블 이름을 붙이지 않는다.

JOIN 글을 참고하자.

71번

답: CROSS JOIN

CROSS JOIN
테이블간 JOIN 조건이 없는 경우 생길 수 있는 모든 데이터의 조합을 말한다. 결과는 양쪽 집합의 M*N 건의 데이터 조합이 발생한다.

72번

답: 1번

JOIN 컬럼에서 같은 값이 없는 경우에는 B테이블(오른쪽 테이블)에서 가져오는 컬럼들은 NULL값으로 채운다.
WHERE절이 아니라 ON절에 A.고객번호 IN (11000, 12000) 조건을 넣고 있다. ON절이기 때문에 모든 고객에 대해서 출력을 하되 JOIN 대상 데이터를 고객번호 11000과 12000으로 제한하여 결과를 출력한다.
WHERE절에 해당 조건이 들어갔다면 정답은 2번이 되었을 것이다.

73번

답: 4번

세 SQL구문 모두 FULL OUTER JOIN의 결과를 반환한다.
1번: 단순한 FULL OUTER JOIN이다.
2번: LEFT OUTER JOIN + RIGHT OUTER JOIN을 병합한다. 병합할 때 UNION을 사용했기 때문에 (=/= UNION ALL) 중복은 제거된다. 따라서 FULL OUTER JOIN과 동일한 결과가 출력된다.
3번:

SELECT A.ID, B.ID
FROM TBL1 A, TBL2 B
WHERE A.ID = B.ID

(1) WHERE 절을 사용해 A.ID와 B.ID가 같은 컬럼만 출력

SELECT A.ID, NULL
FROM TBL1 A
WHERE NOT EXISTS (SELECT 1 FROM TBL2 B WHERE A.ID = B.ID)

(2) NOT EXISTS를 사용해서 TBL1(A)에서 TBL2(B)와 일치하는 ID가 있는지 검사한다. 없는 경우 A.ID를 선택하고, B.ID를 NULL로 설정한다.

SELECT NULL, B.ID
FROM TBL2 B
WHERE NOT EXISTS (SELECT 1 FROM TBL1 A WHERE B.ID = A.ID)

(3) NOT EXISTS를 사용해서 TBL1(A)에서 TBL2(B)와 일치하는 ID가 있는지 검사한다. 없는 경우 B.ID를 선택하고, A.ID를 NULL로 설정한다.

UNION ALL

(4) 결과 집합은 결과 집합은 TBL1과 TBL2에서 일치하는 ID 쌍, TBL1에만 있는 ID, TBL2에만 있는 ID를 모두 포함하게 된다. 결과가 중복을 허용하는 UNION ALL을 사용하므로, 중복 행이 유지되어 FULL OUTER JOIN이 된다.

74번

답: 1번

0개의 댓글