SQLD

[SQLD] 39회 (복원)기출문제 오답노트

Jia H 2025. 3. 31. 11:11

01. 다음 중 데이터베이스 논리 모델에 대한 설명으로 올바르지 않은 것은?

①  개념 데이터 모델은 사용자 관점에서 데이터 요구사항을 식별한다.
② 논리 데이터 모델은 M:N 관계 해소, 식별자 확정, 정규화, 무결성 정의 등을 수행한다.
③ 논리 모델은 데이터베이스 구축을 위해서만 사용되는 것이다.
④ 데이터가 물리적으로 저장되는 방법을 정의하는 것이 물리적 모델이다.

 정답

더보기

③ 논리 모델은 데이터베이스 구축을 위해서만 사용되는 것이다.

 

 

 

05. 다음 보기 중 슈퍼/서브타입 데이터 모델의 변환타입에 대한 설명으로 옳은 것은?

① One to One이란 개별로 생성되는 트랜잭션에 대해서는 개별 테이블로 구성하는 것으로 테이블의 수가 많아진다.
② Plus Type은 하나의 테이블을 생성하는 것으로 조인(Join)이 발생하지 않는다.
③ Plus Type은 슈퍼 + 서브타입 형식으로 데이터를 처리하는 경우로 조인성능이 우수하여 Super Type과 Sub Type 변환 시에 항상 사용된다.
④ One To One Type은 조인성능이 우수하기 때문에 관리가 편리하다.

 정답

더보기

① One to One이란 개별로 생성되는 트랜잭션에 대해서는 개별 테이블로 구성하는 것으로 테이블의 수가 많아진다.

 

 

 

13. SUBSTR 결과가 다른 것을 고르시오.

① SELECT SUBSTR('DATABASE', 7) FROM DUAL;
SELECT SUBSTR('DATABASE', -2) FROM DUAL;
SELECT SUBSTR('DATABASE', 8, -2) FROM DUAL;
SELECT SUBSTR('DATABASE', INSTR('DATABASE', 'S'), 2) FROM DUAL;

 정답

더보기

 SELECT SUBSTR('DATABASE', 8, -2) FROM DUAL;

SUBSTR(문자열, 시작위치, 길이): 시작위치는 0부터가 아니라 1(첫 번째)부터

INSTR(문자열, 찾을문자열, 시작위치, 발생횟수, 비교모드): 시작위치, 발생횟수 기본값 1, 비교모드 기본값 대소문자 구분

 

 

22. 아래의 테이블에서 오류가 발생하는 SQL을 고르시오. 

ID COL1
1 A
2 B
3 C
4 D

[TEAM]

ID COL2
1 A
2 B

[STADIUM]

 

① SELECT * FROM TEAM A INNER JOIN STADIUM B ON A.ID = B.ID;
SELECT * FROM TEAM A INNER JOIN STADIUM B USING(ID);
SELECT * FROM TEAM A NATURAL JOIN STADIUM B;
SELECT * FROM TEAM A INNER JOIN STADIUM B ON (ID);

✅ 정답

더보기

 SELECT * FROM TEAM A INNER JOIN STADIUM B ON (ID);

 

 

 

23. 아래의 테이블과 데이터에 대한 SQL문의 결과로 올바른 것은?

COL1 COL2
1 A
1 A
1 B
1 B

[TBL]

SELECT COUNT(COL1), COUNT(COL2)
FROM (
     SELECT DISTINCT COL1, COL2
     FROM TBL
     );

① 1, 1
② 2, 2
③ 1, 2
④ 2, 1

 정답

더보기

② 2, 2

 

 

27. 아래의 ANSI JOIN SQL에서 가장 올바르지 않은 것은? 

① SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP INNER JOIN DEPT ON EMP.DEPNO = DEPT.DEPTNO;
② SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT;
③ SELECT * FROM JOIN DEPT_TEMP USING(DEPTNO);
④ SELECT E.EMPNO, E.NAME, D.DEPTNO, D.DNAME FROM EMP E INNER JOIN DEPT D ON (E.DEPTNO = D.DEPTNO)

 정답

더보기

② SELECT EMP.DEPTNO, EMPNO, ENAME, DNAME FROM EMP NATURAL JOIN DEPT;

 

 

30. 다음 주어진 데이터에 대해서 LIKE문을 사용하여 결과값에 "_"가 들어간 문자열을 찾는 SQL문으로 올바른 것은?

USERID USERNAME
1 __H
2 _B_
3 ___
4 D__

[TBL] & [RESULT] (둘 다 동일)

① SELECT * FROM TBL WHERE NAME LIKE '%H';
SELECT * FROM TBL WHERE NAME LIKE '%#_%';
SELECT * FROM TBL WHERE NAME LIKE '%@_%' ESCAPE '@';
SELECT * FROM TBL WHERE NAME LIKE '%_%' ESCAPE '_';

 정답

더보기

 SELECT * FROM TBL WHERE NAME LIKE '%@_%' ESCAPE '@';

LIKE문에서 _(언더스코어)

- '_'는 SQL에서 한 글자를 의미하는 와일드카드

- 즉 '_' 자체를 검색하려면 별도의 ESCAPE 문자를 지정해야 함


문자 설명 예제 의미
% 0개 이상의 모든 문자 LIKE 'A%' 'A'로 시작하는 모든 문자열 (A, AB, ABC 등)
_ 정확히 한 개의 임의 문자 LIKE 'A_' 'A' 다음에 한 글자가 있는 문자열 (AB, AC, AD 등)
# 일반 문자 (ESCAPE로 지정하면 특별한 의미) LIKE '%#_%' ESCAPE '#' _가 포함된 문자열 찾기 (A_B 등)
@ 일반 문자 (ESCAPE로 지정하면 특별한 의미) LIKE '%@_%' ESCAPE '@' _가 포함된 문자열 찾기 (A_B 등)

 

 

31. 다음 중 PL/SQL에 대한 설명으로 가장 적절하지 않은 것은?

① 변수와 상수 등을 사용하여 일반 SQL 문장을 실행할 때 WHERE절의 조건 등으로 대입할 수 있다.
② Procedure, User Defined Function, Trigger 객체를 PL/SQL로 작성할 수 있다.
③ Procedure 내부에 작성된 절차적 코드는 PL/SQL 엔진이 처리하고 일반적인 SQL 문장은 SQL 실행기가 처리한다.
④ PL/SQL문의 기본 구조로 DECLARE, BEGIN ~ END, EXCEPTION은 필수적으로 써야한다.

 정답

더보기

④ PL/SQL문의 기본 구조로 DECLARE, BEGIN ~ END, EXCEPTION은 필수적으로 써야한다.

 

 

32. 다음 (   )에 해당되는 서브쿼리(Subquery)의 이름으로 올바른 것은?

SELECT (  ㉠  )
FROM (  ㉡  )
WHERE EXISTS (  ㉢  );

① ㉠ 스칼라 서브쿼리,  ㉡ 인라인 뷰,  ㉢ 중첩 서브쿼리
 인라인 뷰 ,  ㉡ 인라인 뷰 ,  ㉢ 스칼라 서브쿼리
 ㉠ 메인쿼리,  ㉡ 인라인 뷰 ,  ㉢ 서브쿼리
 ㉠ 서브쿼리,  ㉡ 인라인 뷰 ,  ㉢ 메인쿼리

 정답

더보기

 ㉠ 스칼라 서브쿼리,  ㉡ 인라인 뷰,  ㉢ 중첩 서브쿼리

스칼라 서브쿼리: SELECT 절에서 단일 값을 반환하는 서브쿼리

인라인 뷰: FROM 절에서 사용되는 서브쿼리(테이블처럼 취급됨)

중첩 서브쿼리: WHERE 또는 WHERE EXISTS 조건 안에서 사용되는 서브쿼리

 

용어 설명 예시
메인쿼리 (Main Query) 서브쿼리를 포함하는 최상위 쿼리 SELECT * FROM employees WHERE salary > (서브쿼리);
서브쿼리 (Subquery) 메인쿼리 내부에서 실행되는 쿼리 (SELECT AVG(salary) FROM employees)

 


37. 다음 중 해시조인(Hash Join)에 대한 설명으로 옳지 않은 것은?

① 해시조인은 두 개의 테이블 간에 조인을 할 때 범위검색이 아닌 동등조인(EQUI Join)에 적합한 방식이다.
② 작은 테이블(Build Input)을 먼저 읽어서 Hash Area에 해시 테이블을 생성하는 방법으로 큰 테이블로 Hash Area를 생성하면 과다한 Sort가 유발되어 성능이 저하될 수 있다.
③ 온라인 트랜잭션 처리(OTLP)에 유용하다.
④ 해시조인은 수행빈도가 낮고 수행시간이 오래 걸리는 대용량 테이블에 대한 조인을 할 때 유용하다.

 정답

더보기

③ 온라인 트랜잭션 처리(OTLP)에 유용하다.

- 해시조인은 동등 조인에 최적화됨, 범위비교(>, <)에는 적합하지 않음

- 작은 테이블을 먼저 읽어서 해시 테이블 생성

- 대량 데이터 처리(DSS, Data Warehouse)에 유용, OTLP에는 부적합(OTLP는 Nested Loop Join)이 더 적합

- 대용량 테이블 간의 조인에 최적, 수행 시간이 오래 걸리는 복잡한 쿼리에서 유리

 

38. 다음 테이블에 대해서 아래와 같은 결과값이 나오도록 SQL문의 빈칸에 들어갈 수 있는 내용을 고르시오.

DEPTNO JOB SAL
10 CLERK 1300
10 MANAGER 2150
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2000

[T_TEST]

DEPTNO JOB SUM(SAL)
10 CLERK 1300
10 MANAGER 2150
10 NULL 3450
20 CLERK 1900
20 ANALYST 6000
20 MANAGER 2000
20 NULL 9900
NULL NULL 13350

[RESULT]

 

① DEPTNO, JOB

② GROUPING SETS(DEPTNO, JOB)
③ ROLLUP(DEPTNO, JOB)
④ CUBE(DEPTNO, JOB)

 정답

더보기

③ ROLLUP(DEPTNO, JOB)



40. 다음 주어진 테이블에서 아래의 SQL을 수행한 결과로 알맞은 것은?

COL1 COL2 COL3 COL4
10 10 10 20
20 20 NULL 30
30 NULL NULL 10
NULL 30 10 40

[TBL]

SELECT SUM(COL1+COL2+COL3+COL4) FROM TBL;
SELET SUM(COL1) + SUM(COL2) + SUM(COL3) + SUM(COL4) FROM TBL;

① 50, NULL
② NULL, 240
③ 50, 240
④ NULL, NULL

 정답

더보기

③ 50, 240

덧셈 시 NULL을 더하면 결과도 NULL이 되고, SUM 함수는 NULL인 행은 제외하고 합산을 한다. 첫 번째 SELECCT문은 COL1+COL2+COL3+COL4를 먼저 계산한 후 여기에 SUM을 호출하고 있으므로 각 행의 결과는 50, NULL, NULL, NULL이 되며 이에 대해 SUM을 호출하면 결과는 50이다. 두 번째 SELECT문은 각각의 칼럼에 먼저 SUM을 호출한 후 더하고 있으므로 60+60+20+100이 되어 240이다.

 

 

47. 다음 중 인덱스 생성 구문으로 올바른 것은?

① ALTER TABLE <테이블명> ADD INDEX <인덱스명>(<칼럼명>)
② INDEX <인덱스명>(<칼럼명>)
③ CREATE INDEX <인덱스명> ON <테이블명>(<칼럼명>)
④ DROP INDEX FROM <테이블명>

 정답

더보기

③ CREATE INDEX <인덱스명> ON <테이블명>(<칼럼명>)

 

 

49. 보기의 연산자 중 우선순위가 가장 나중인 것은?

① 연결 연산자
② 비교 연산자
③ NOT 연산자
④ OR 연산자

 정답

더보기

④ OR 연산자

📌 (우선순위가 높을수록 먼저 연산됨)

우선순위 연산자 설명
1 () (괄호) 가장 높은 우선순위, 먼저 계산
2 .*, /, % 산술 연산자 (곱셈, 나눗셈, 나머지)
3 +, - 산술 연산자 (덧셈, 뺄셈)
4 || 연결 연산자
5 =, !=, <, >, <=, >= 비교 연산자
6 NOT 논리 연산자 (부정)
7 AND 논리 연산자 (그리고)
8 OR 논리 연산자 (또는, 가장 낮은 우선순위)

 

 

50. TABLE1, TABLE2, TABLE3 테이블에 대한 아래의 INSERT 결과 개수로 알맞은 것은?

N1
1
2
5

[TBL]

INSERT FIRST
    WHEN N1 >= 2 THEN INTO TABLE1(N1) VALUES(N1)
    WHEN N1 >= 3 THEN INTO TABLE2(N1) VALUES(N1)
    ELSE INTO TABLE3 VALUES(N1)
SELECT N1 FROM TBL;

① 2, 0, 1
② 0, 1, 2
③ 2, 1, 1
④ 2, 2, 2

 정답

더보기

① 2, 0, 1

WHEN 문을 IF-ELSE 구조처럼 생각하면 이해하기 쉬움