본문 바로가기
IT/SQLP

[SQLD] 기출문제 질문 모음

by by디디 2022. 5. 23.
반응형

1번

SQLD 문제

select'x' 에서 엑스가 뭘 의미하나요..?

답변 : 

Exists 서브 쿼리는 뭘 조회하는 목적이 아닌 존재 여부를 체크하는 목적이라
Select 절에 마땅히 적을게 없어 아무거나 적는 건데.
뭘 적든 상관이 없지만 단순한 0 이나 1, 'X' 등이 주로 사용됩니다.

 

2번

table c가
         COL1             COL2
                Z                     10
                Y                     20
                X                     30

일 때
select count(*) from c where col1 = 'X' and col2 < 20;
이건 0 이 나오고
select count(*) from c having count(*) > 3;
이건 공집합이 나오는데
where 과 having 조건이 내부적으로 다르게 연산되는 게 있는 건가요??
왜 차이가 발생하는지 가르쳐주시면 감사하겠습니다!

답변 : 

where절은 테이블 검색 조건 (집계 전 조건)이고 having 절은 집계 결과에 대한 조건(집계 후 조건)이고
where 절을 만족하는 행이 없을 때는 count(*)=0이고
having절 같은 경우에는 having 수행 전에 count(*)=3이라는 결과가 나오는데 이게 having count(*)>3이라는 조건을 만족하지 못하니까 null이 나오는 게 아닌가요..??

 

3번

DISTINCT UNION ALL 순서
DISTINCT UNION ALL 순서

결과 테이블이 왜 저렇게 나오나요? 

UNION ALL 하면 모든 중복 허용으로 

COL1 COL2 
1 2
1 2
1 3
1 4 
1 5 
이렇게 되고, 중복을 제거하면 

COL1 COL2 
1 2
1 2
1 3
1 4 
1 5 

따라서 4개 아닌가요 ㅠㅠ?

답변 : 

A union all B 라면 A 실행 결과에 B 실행 결과를 그냥 붙이는 건데 DISTINCT는 A 쿼리의 결과를 뽑을 때만 실행되는 거라서 순서가 UNION ALL 하고 DISTINCT가 아닙니다.

union all은 앞에 쿼리를 실행하고 뒤에 쿼리를 실행해서 앞에 쿼리 실행한 결과 밑에 뒤에 쿼리 실행한 걸 붙여줍니다. 근데 문제에서는 앞에 쿼리에 대해서만 distinct인 거예요 중복제거. 만약 select ~ from ~ union all select distinct ~ from ~이라면 뒤에 쿼리 실행한 거에 중복제거를 해줘서 앞에 쿼리 실행한 결과 밑에 그냥 붙여준다는 겁니다

 

4번

ANSI JOIN QUIZ
ANSI JOIN QUIZ

답변 : 

natural 조인이나 using을 이용한 조인의 경우에는
조인 컬럼은 한 번만 나오게 됩니다.
그래서 emp.deptno, dept.deptno처럼 사용 못하고 그냥 deptno 로만 사용합니다.

 

5번

SQL QUIZ
SQL QUIZ

4번을 구할 때 N1 = N2이고, 이전의 N1값이 2인 행을 추출했는데
3번도 N1=N2이고, 이전의 C2값이 B인 거를 고르라면 
3번도 D B 4 2 아닌가요?ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ

답변 : 

그냥 편의상으로 n1 n2 c1 c2로 결과 적을게영
3번 : start with c1='B'인 (2 1 B A) 시작 / prior n1 = n2, prior c2 = 'B' -> 다음 행의 n2 = 이전행의 n1 = 2, 이전행의 c2 = 'B'
이 조건을 보면 다음행의 n2 = 2인 로우는 다음 로우인 (4 2 D B)가 되는데 이 (4 2 D B)의 이전 로우의 c2 = 'A'니까 조건을 만족하지 않아요 그러므로 이 2개의 조건을 만족하는 로우는 없으니까 3번은 (2 1 B A)만 리턴되는 거예요

4번 : start with n1 = 2이니까 (2 1 B A) 시작 / PRIOR N1 = N2, PRIOR N1 = 2 -> 이전행의 N1 (2) = 다음행의 N2, 이전행의 N1 = 2를 만족하는 로우는 (4 2 D B ) / PRIOR N1 = N2, PRIOR N1 = 2 -> 이전행의 N1(4) = 다음행의 N2, 이전행의 N1(4)!= 2니까 4번의 최종 결과는 (4 2 D B)로 리턴

반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

댓글