본문 바로가기
Database/SQLD

SQLD 문제 풀이 8

by KkingKkang 2023. 5. 22.

1. 아래는 어느 회사의 생산설비를 위한 데이터 모델의 일부에 대한 설명으로 가장 적절한 것을 2개 고르시오.

1) 제품, 생산제품, 생산라인 엔터티를 INNER JOIN 하기 위해서 생산제품 엔터티는 WHERE 절에 최소 2번이 나타나야 한다.

SELECT * FROM 생산제품, 제품, 생산라인
WHERE 생산제품.제품코드 = 제품.제품코드
AND 생산제품.라인번호 = 생산라인.라인번호

2) 제품과 생산라인 엔터티를 JOIN시 적절한 JOIN조건이 없으므로 카티시안 곱이 발생한다.

카티시안 곱 = 발생 가능한 모든 경우의 수의 행이 출력되는 것. N개의 행을 가진 테이블과 M개의 행을 가진 테이블의 카티시안 곱은 N*M이 된다. 

3) 제품과 생산라인 엔터티에는 생산제품과 대응되지 않는 레코드는 없다.

4) 특정 생산라인번호에서 생산되는 제품의 제품명을 알기 위해서는 제품, 생산제품, 생산라인까지 3개 엔터티의 INNER JOIN 이 필요하다.  → 생산제품의 라인번호가 있기에 생산제품과 제품 테이블을 조인하면 된다.

 

2. 아래의 테이블 스키마 정보를 참고하여, 다음 중 '구매 이력이 있는 고객 중 구매 횟수가 3회 이상고객의 이름과 등급을 출력하시오.' 라는 질의에 대해 아래의 SQL 문장의 ㄱ, ㄴ에 들어갈 구문은?

[테이블]
고객(고객번호(PK),이름,등급)
구매정보(구매번호(PK),구매금액,고객번호(FK))

[SQL 문장]
SELECT A.이름, A.등급
FROM 고객 A [ ㄱ ]
GROUP BY A.이름, A.등급 [ ㄴ ]

ㄱ : INNER JOIN 구매정보 B ON A.고개번호 = B.고객번호 

ㄴ : HAVING COUNT(B.구매번호) >= 3

 

3. 아래는 어느 회사의 정산 데이터 모델의 일부이며 고객이 서비스를 사용한 시간대에 따라 차등 단가를 적용하려고 한다. 다음 중 시간대별사용량 테이블을 기반으로 고객별 사용금액을 추출하는 SQL로 가장 적절한 것은?

 

--1

SELECT A.고객ID, A.고객명, SUM(B.사용금 * C.단가) AS 사용금액
FROM 고객 A
INNER JOIN 시간대별사용량 B ON (A.고객ID = B.고객ID)
INNER JOIN 시간대구간 C ON (B.사용시간대 <= C.시작시간대 AND B.사용시간대 >= C.종료시간대) --부등호 조건이 잘못됨
GROUP BY A.고객ID, A.고객명
ORDER BY A.고객ID, A.고객명;

--2

SELECT A.고객ID, A.고객명, SUM(B.사용금 * C.단가) AS 사용금액
FROM 고객 A
INNER JOIN 시간대별사용량 B 
INNER JOIN 시간대구간 C 
ON (A.고객ID = B.고객ID AND B.사용시간대 BETWEEN C.시작시간대 AND C.종료시간대) --B 조인 조건이 여기 들어가면 안됨
GROUP BY A.고객ID, A.고객명
ORDER BY A.고객ID, A.고객명;

--3

SELECT A.고객ID, A.고객명, SUM(B.사용량 * C.단가) AS 사용금액
FROM 고객 A 
INNER JOIN 시간대별사용량 B ON (A.고객ID = B.고객ID)
INNER JOIN 시간대구간 C ON (B.사용시간대 BETWEEN C.시작시간대 AND C.종료시간대)
GROUP BY A.고객ID, A.고객명
ORDER BY A.고객ID, A.고객명;

 

3번 

 

4. 다음 중 팀(TEAM) 테이블과 구장(STADIUM) 테이블의 관계를 이용해서 소속팀이 가지고 있는 전용구장의 정보를 팀의 정보와 함께 출력하는 SQL을 작성할 때 결과가 다른 것은?

--1
SELECT T.REGION_NAME, T.TEAM_NAME, T.STADIUM_ID, S.STADIUM_NAME
FROM TEAM T
INNER JOIN STADIUM S USING (T.STADIUM_ID = S.STADIUM_ID);
--문법적 오류
--FROM절의 USING 조건절을 이용하면 같은 이름을 가진 컬럼들 중에서 원하는 컬럼에 대해서만 EQUI JOIN을 할 수 있다. 
--sql server에서는 지원하지 않는다. 
--예시
SELECT  *
FROM    DEPT JOIN DEPT_TEMP
USING   (DEPTNO) ;

--2
SELECT TEAM.REGION_NAME, TEAM.TEAM_NAME, TEAM.STADIUM_ID, STADIUM.STADIUM_NAME
FROM TEAM 
INNER JOIN STADIUM ON (TEAM.STADIUM_ID = STADIUM.STADIUM_ID);

--3
SELECT T.REGION_NAME, T.TEAM_NAME, T.STADIUM_ID, S.STADIUM_NAME
FROM TEAM T, STADIUM S
WHERE T.STADIUM_ID = S.STADIUM_ID;

--4
SELECT TEAM.REGION_NAME, TEAM.TEAM_NAME, TEAM.STADIUM_ID, STADIUM.STADIUM_NAME
FROM TEAM, STADIUM 
WHERE TEAM.STADIUM_ID = STADIUM.STADIUM_ID;
반응형

'Database > SQLD' 카테고리의 다른 글

SQLD 문제 풀이 10  (0) 2023.05.30
SQLD 문제 풀이 9  (2) 2023.05.22
SQLD 문제 풀이 7  (0) 2023.05.15
SQLD 문제 풀이 6  (0) 2023.05.15
SQLD 문제 풀이 5  (1) 2023.05.13

댓글