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 구조처럼 생각하면 이해하기 쉬움
'SQLD' 카테고리의 다른 글
[SQLD] 데이터 모델링의 이해 출제예상문제(20문항) (0) | 2025.03.28 |
---|---|
[SQLD] 2과목 SQL 기본 및 활용 - 관리구문 (0) | 2025.03.16 |
[SQLD] 2과목 SQL 기본 및 활용 - SQL 활용(2) (0) | 2025.03.15 |
[SQLD] 2과목 SQL 기본 및 활용 - SQL 활용(1) (0) | 2025.03.14 |
[SQLD] 2과목 SQL 기본 및 활용 - SQL 기본 (0) | 2025.03.13 |