답: 3번
전체 테이블 개수에서 최소 N-1개의 JOIN 조건이 필요하다.
답: 4번
영화명과 배우명은 출연 테이블이 아니라 영화와 배우 테이블에서 가지고 와야 하는 속성이다.
따라서 마지막 WHERE절의 조건은
WHERE 출연료 >= 8888
AND 출연.영화번호 = 영화.영화번호
AND 출연.배우번호 = 배우.배우변호;
여야 한다.
이때 선지 1번은 SELECT절이 출연.영화명, 영화.배우명이어서 안된다.
영화명과 배우명은 각각 영화, 배우 테이블에서 가져와야 한다.
답: 4번
DBMS 옵티마이져는 FROM 절에 나열된 테이블들을 최대 2개로 묶어서 JOIN 처리시킬 수 있다.
일반적으로 JOIN은 PK와 FK 값의 연관성에 의해 성립된다.
어떤 경우에는 이러한 PK, FK 관계가 없어도 논리적인 값들의 연관만으로 JOIN이 성립 가능하다.
EQUI JOIN은 JOIN에 관여하는 테이블 간의 컬럼 값들이 정확하게 일치하는 경우에 사용되는 방법이다.
EQUI JOIN은 '=' 연산자에 의해서만 수행되며, 그 이외의 비교 연산자를 사용하는 경우에는 모두 Non EQUI JOIN이다.
대부분 Non EQUI JOIN을 수행할 수 있지만, 때로는 설계상의 이유로 수행이 불가능한 경우도 있다.
답: 3번
테이블의 본래 값은 조건에 따라 중복적으로 표시될 수 있다.
위 문제는 LIKE 연산자를 이용한 JOIN으로, 조건을 충족하는 단어는 각 조건별로 중복하여 표시되었다.
WHERE 절을 살펴보면 A테이블의 ENAME이 B테이블의 RULE을 만족시키는 것이 조건이다.
여기서 RULE 칼럼을 확인해보자.
S% 의 의미는 S로 시작하는 모든 글자를 뜻한다.
S로 시작한다면 뒤에 어떤 글자, 얼마만큼의 글자수가 오는 것은 상관없다.
예를 들어, Sa, Sabcd, Sabcdefghijk 등등 모두 가능하다는 것이다.
%T% 의 의미는 앞에 어떤 글자가 오고 T가 있고 뒤에 다시 어떤 문자들이 온다.
예를 들어, aTa, abcTabc, abccccTabc 등 모두 가능하다.
그럼 문제에서
S%에 해당하는 것은 SMITH와 SCOTT이 있고
%T%에 해당하는 것은 SMITH와 SCOTT이 있다.
그러니 총 4개의 값이 나온다.
답: 2번
순수 관계 연산자에는 SELECT, PROJECT, JOIN, DIVIDE가 있다.
SPDJ로 암기하기
답: 3, 4번
1번: NOT EXIST 절의 연관서브쿼리에 X.컨텐츠ID = B.컨텐츠ID가 존재하지 않아
단 하나의 컨텐츠라도 비선호로 등록한 고객에 대해서는 모든 컨텐츠가 추천에서 배재된다.
2번: 추천컨텐츠를 기준으로 비선호컨텐츠와의 LEFT OUTER JOIN이 수행되고 비선호 컨텐츠의 컨텐츠ID에 대해서 IS NULL 조건이 있다면 정확히 비선호 컨텐츠만 필터링할 수 있다.
답: 1, 2번
Cartesian Product(카티시안 곱)
WHERE절에 JOIN 조건을 주지 않는 것으로,
가능한 모든 조합의 데이터가 조회되는 현상이다. (CROSS JOIN으로 조회한다.)
3번: 제품과 생산라인 엔터티에 생산제품과 대응되지 않는 레코드가 있을 수 있다.
4번: <생산제품> 엔터티에 <라인번호>가 있기 때문에 <제품>과 <생산제품> 두 개의 엔터티의 Inner Join만으로도 특정 생산라인번호에서 생산되는 제품의 제품명을 알 수 있다.
4번이 틀린 이유
제품-생산제품-생산라인은 1:N, N:1의 관계를 갖는다.
생산제품 테이블은 제품-생산라인이 N:M 관계를 해소하기 위한 조인테이블이므로
특정 생산라인번호에서 생산되는 제품의 제품명을 알기 위해서는
제품과 생산제품 2개의 엔티티 사이에 JOIN이 필요하다.
답: 2번
구매이력이 있어야 하므로 INNER JOIN
구매 횟수이므로 COUNT 함수를 이용한다.
답: 3번
1번: 부등호가 아니라 BETWEEN AND 절을 사용해야 한다.
2번: INNER JOIN 구문 오류이다. 두 절을 연속해서 작성할 수 없다.
4번: BETWEEN JOIN이라는 구문은 없다.
답: 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 가 조인 컬럼이기 때문에 테이블 이름을 붙이지 않는다.
USING 절을 이용한 JOIN
SELECT T.REGION_NAME, T.TEAM_NAME, STADIUM_ID, S.STADIUM_NAME
FROM TEAM T INNER JOIN STADIUM S
USING (STADIUM_ID);
USING절에는 조인 컬럼을 기술해야 하며, 괄호로 묶어서 표현해야 한다.
ON절과 다르게 조인 조건을 기술하지 않아도 된다.
'Certification > SQLD 개발자' 카테고리의 다른 글
[SQLD] 2 단원 51 - 60 번 문제 (0) | 2023.11.13 |
---|---|
[SQLD] 1단원 41-52문제 (0) | 2023.11.13 |
[SQLD] 1단원 31-40문제 (0) | 2023.11.13 |
[SQLD] 1단원 21-30문제 (0) | 2023.11.13 |
[SQLD] 1단원 11-20 문제 (0) | 2023.11.13 |