[SQLD] SQL 활용 2회독 문풀 -1

·2023년 6월 2일
0

SQLD

목록 보기
17/18
post-thumbnail

66번

💡정답 : 3, 4번

1번이 틀린 이유

1번 지문이 헷갈렸는데 여기서 B는 추천컨텐츠 테이블을 말함.
NOT EXISTS (SELECT X.컨텐츠ID FROM 비선호컨텐츠 X WHERE X.고객ID = B.고객ID);
다시 읽어보니 고객ID로 조건을 걸고 있었다. 만약 고객이 단 하나의 컨텐츠라도 비선호로 선택했다면 당연히 해당 조건절이 FALSE가 된다.

67번

💡정답 : 1, 2번

4번이 틀린 이유

제품-생산제품-생산라인은 1:N, N:1의 관계를 갖는다. 생산제품 테이블은 제품-생산라인이 N:M 관계를 해소하기 위한 조인테이블이므로 특정 생산라인번호에서 생산되는 제품의 제품명을 알기 위해서는 제품과 생산제품 2개의 엔티티 사이에 JOIN이 필요하다.

70번

💡정답 : 1번

USING절에는 ALIAS 사용이 금지되어 있다.

USING(STADIUM_ID)로 변경하면 오류가 발생하지 않는다.

77번

💡정답 : 1번

A.게시판ID = B.게시판ID(+)의 의미는 A 테이블을 기준으로 OUTER JOIN을 하라는 의미이다.
따라서 ANSI 기준으로 변경하면
FROM 게시판 A LEFT OUTER JOIN 게시글 B ON (A.게시판ID = B.게시판ID)가 된다.

또한, WHERE절에 이어서 붙여진 조건을 살펴 보면
AND B.삭제여부(+) = 'N' AND A.사용여부='Y'이라 되어있는데 (+) 표시가 붙어있는 조건은 JOIN의 ON 조건절에 포함되어야 한다는 의미이다.

따라서
FROM 게시판 A LEFT OUTER JOIN 게시글 B ON (A.게시판ID = B.게시판ID AND B.삭제여부 = 'N') WHERE A.사용여부='Y' 로 변경해야 한다.

80번

💡정답 : 2번

문제의 수행 SQL문은 이용한 서비스들을 나열하는 문장이다.
서비스 테이블과 서비스 이용 테이블은 서로 1:N 관계를 가지고 있고, 서비스 이용 테이블은 서비스 테이블의 부분 테이블이라고 볼 수 있다.

1번이 틀린 이유

서비스 테이블과 서비스 이용 테이블은 서로 1:N 관계를 가지고 있기 때문에 서비스 이용 건수만큼 결과를 출력하게 된다.

서비스1를 고객1, 고객2가 이용하게 되었다면 1번의 쿼리로는 2개의 행을 출력하고, 문제의 쿼리에서는 1개의 행이 출력된다.

86번

💡정답 : 3번

회원기본정보 - 회원상세정보는 1:1, 양쪽 필수 관계이다. 기본정보가 없으면 상세정보도 없고 상세정보가 없으면 기본정보도 없는 것!

1번

EXCEPT는 차집합을 말한다.
회원기본정보에 회원상세정보와 공통된 부분을 제한 값이 결과값으로 출력된다. 이때 결과는 회원상세정보가 등록되지 않은 회원ID가 출력되는 것이 아니라 항상 공집합을 출력한다. 왜? 둘은 필수관계!

2번

UNION ALL은 중복이 가능한 합집합을 말한다. UNION연산을 실행하였다면 중복된 결과가 1개의 결과로 나타나기 때문에 회원기본정보의 전체건수와 같지만, UNION ALL 연산을 실행하면 회원기본정보의 건수와 회원 상세 정보의 건수가 같이 출력된다.

4번

INTERSECT는 교집합을 말한다. 회원기본정보 - 회원상세정보 양쪽필수관계이므로 모든 건수가 공통된 결과이므로 UNION 연산과 같은 결과가 나온다.

90번

💡정답 : 4번

❌PROIR 키워드는 CONNECT BY 절에만 사용할 수 있으며❌

PROIR 키워드는 CONNECT BY 절뿐만 아니라 SELECT, WHERE절에서도 사용 가능하다.

93번

💡정답 : 3번

2번이 틀린 이유

GROUP BY절에 지정한 기준컬럼으로 연산이 수행된다. 2번의 GROUP BY절에서는 B.일자를 그룹으로 묶었는데 이렇게 되면 B.일자를 기준으로 결과가 연산되므로 A.일자보다 작거나 같은 쪽에 누적매출액이 쌓이게 된다.

95번

💡정답 : 2번

다가 틀린 이유

복수 행 결과를 반환하는 경우 복수 행 비교 연산자(ANY, SOME 등)를 사용해야 한다.

마가 틀린 이유

다중 컬럼 서브쿼리는 SQL Server에서 지원하지 않는다.

96번

💡정답 : 3번

현재 부양하는 가족들이 없는 사원들의 이름을 구하라.

NOT EXISTS (조건식)은 조건식에 해당하는 것을 제외하고 연산을 수행한다.

SELECT 이름 FROM 사원 WHERE NOT EXISTS (SELECT * FROM 가족 WHERE 사번=부양사번)
은 사원의 사번과 가족의 부양사번이 동일하지 않은 사원들의 이름을 구하는 문장이 된다.

profile
🧑‍💻백엔드 개발자, 조금씩 꾸준하게

0개의 댓글