SQLD 모의고사 17회
50문항 · 제한 시간 90분. 다 풀면 과목별 점수와 합격 여부, 문제마다 해설을 보여 줘요.
1. 물류회사 C사의 시스템 진단 결과 다음 사례들이 발견되었다.
- (가) 창고관리시스템과 배송관리시스템이 거래처 주소를 각자 따로 저장하고 있어, 주소가 바뀌면 한쪽만 수정되는 일이 반복되었다.
- (나) 출고 절차에 '검수' 단계가 추가되는 등 업무 절차가 조금만 바뀌어도 매번 출고 테이블 구조를 고쳐야 했다.
- (다) 출고 데이터와 재고 데이터 사이의 연관 관계가 명확히 정의되지 않아, 출고가 완료된 상품이 재고에는 그대로 남아 있는 모순이 생겼다.
각 사례와 데이터 모델링 시 유의점의 연결로 가장 적절한 것은?
- (가) 비일관성, (나) 중복, (다) 비유연성
- (가) 중복, (나) 비일관성, (다) 비유연성
- (가) 중복, (나) 비유연성, (다) 비일관성
- (가) 비유연성, (나) 중복, (다) 비일관성
2. 물류 시스템을 설계하면서 엔터티 이름을 다음과 같이 정하였다. 엔터티 명명 규칙에 비추어 가장 적절한 것은?
- 고객의 출고 요청으로 생성되는 엔터티를 '고객상품'이 아닌 '출고지시'처럼 생성되는 업무 의미가 드러나도록 명명하였다.
- 창고 엔터티에는 여러 창고 인스턴스가 담기므로 '창고들'처럼 복수형 명사로 명명하였다.
- '운송배차관리정보'는 이름이 길어 'TDMI'처럼 영문 약어로 줄여 엔터티명으로 사용하였다.
- 창고팀과 배송팀이 각자 '거점'이라는 같은 엔터티명을 서로 다른 의미로 사용하도록 허용하였다.
3. 물류센터의
창고엔터티를 다음과 같이 정의하였다.창고코드 창고명 소재지 대표전화 W01 평택1센터 경기 평택 031-111-2222 W02 이천센터 경기 이천 031-333-4444 엔터티·인스턴스·속성·속성값의 관계에 대한 설명으로 가장 적절하지 않은 것은?
창고엔터티는 창고코드, 창고명, 소재지 등 두 개 이상의 속성으로 구성된다.- 하나의 인스턴스(창고코드 W01)는 각 속성에 대해 하나의 속성값만 가진다.
- 속성은 업무에서 필요로 하며 더 이상 분리되지 않는 최소의 데이터 단위로 정의한다.
- 한 창고가 대표전화를 여러 개 가지게 되면 '대표전화' 속성 하나에 여러 번호를 함께 저장하는 것이 원칙이다.
4. 운송 관리 시스템의 업무 규칙이 다음과 같다.
운송차량 1대는 여러 배송 건을 배정받을 수 있으며, 배정받은 배송이 하나도 없는 차량도 있다. 배송 1건은 반드시 1대의 차량에만 배정된다.
차량과배송사이의 관계에 대한 설명으로 가장 적절한 것은?- 차량과 배송은 M:N 관계이므로 교차 엔터티를 두어 해소해야 한다.
- 차량 1대는 0건 이상의 배송에, 배송 1건은 정확히 1대의 차량에 참여하는 1:M 관계이다.
- 배송 쪽에서 차량은 선택 참여이므로 배송 테이블의 차량번호 FK는 NULL을 허용해야 한다.
- IE 표기법으로는 차량 쪽 선 끝에
o|, 배송 쪽 선 끝에|{를 표시한다.
5.
출고엔터티의 속성이 다음과 같다.속성 설명 출고번호 출고 시 시스템이 부여하는 번호. 주식별자 출고지시서번호 업무상 중복되지 않는 지시서 번호. 출고를 구분할 수는 있으나 다른 엔터티와의 관계 연결에는 쓰지 않음 창고코드 창고엔터티의 주식별자를 관계를 통해 받아온 속성출고일자 출고가 이루어진 날짜 식별자 분류에 대한 설명으로 가장 적절한 것은?
- 출고번호는 다른 엔터티로부터 관계를 통해 받아온 값이므로 외부식별자에 해당한다.
- 출고지시서번호는 유일성을 만족하므로 다른 엔터티와의 참조 관계 연결에 반드시 사용해야 한다.
- 창고코드는
창고와의 관계를 통해 받아온 속성으로,출고입장에서 외부식별자(FK)에 해당한다. - 출고번호와 출고지시서번호 모두 인스턴스를 유일하게 구분하므로 둘 다 주식별자로 지정한다.
6. 다음
출고지시테이블의 PK는 출고지시번호이다.출고지시번호 창고코드 품목코드1 수량1 품목코드2 수량2 품목코드3 수량3 OD01 W1 P10 5 P20 3 NULL NULL OD02 W2 P30 7 NULL NULL NULL NULL 이 테이블에 대한 설명으로 가장 적절한 것은?
- 각 칸에 하나의 값만 들어 있으므로 제1정규형을 만족하며 더 이상 분해할 필요가 없다.
- PK가 단일 속성이므로 부분 함수 종속이 발생하며, 이는 제2정규화로 해결한다.
- 품목코드1~3은 서로 이행 함수 종속 관계에 있으므로 제3정규화의 대상이다.
- 품목코드·수량이 반복되는 속성 그룹이므로
출고지시상세엔터티로 분리하는 것이 바람직하다.
7.
창고와품목은 M:N 관계이며, 교차 엔터티STOCK으로 해소하였다. 다음 SQL의 결과로 옳은 것은? (ITEM_CD / WH_CNT / TOT_QTY 순서로 표기)[ITEM]
ITEM_CD ITEM_NM I1 박스 I2 팔레트 I3 랩 [STOCK]
WH_CD ITEM_CD QTY W1 I1 100 W2 I1 50 W2 I2 30 W3 I2 0 SELECT I.ITEM_CD, COUNT(S.WH_CD) AS WH_CNT, SUM(S.QTY) AS TOT_QTY FROM ITEM I LEFT OUTER JOIN STOCK S ON I.ITEM_CD = S.ITEM_CD GROUP BY I.ITEM_CD ORDER BY I.ITEM_CD;- I1 / 2 / 150, I2 / 2 / 30, I3 / 0 / NULL
- I1 / 2 / 150, I2 / 1 / 30, I3 / 0 / NULL
- I1 / 2 / 150, I2 / 2 / 30, I3 / 1 / NULL
- I1 / 2 / 150, I2 / 2 / 30
8. IE 표기법으로 작성된 입고 업무 모델이 다음과 같다. (
|는 필수,o는 선택,{는 여러 건을 의미한다.)창고 ||--o{ 입고: 창고는 입고가 없을 수도 있고, 입고는 반드시 하나의 창고에 속한다.입고 ||--|{ 입고상세: 입고는 반드시 1건 이상의 입고상세를 가지며, 입고상세는 반드시 하나의 입고에 속한다.입고상세 ||--o| 검수결과: 검수결과는 입고 며칠 뒤 검수가 끝나야 생성되며, 0건 또는 1건이다.
이 모델을 근거로 한 트랜잭션 설계로 가장 적절한 것은?
- 창고를 등록할 때 첫 입고 건을 반드시 함께 INSERT하고 한 번에 COMMIT해야 한다.
- 입고와 그 입고상세는 하나의 트랜잭션으로 함께 INSERT하고, 하나라도 실패하면 모두 ROLLBACK한다.
- 입고상세를 INSERT할 때는 검수결과도 반드시 같은 트랜잭션으로 함께 INSERT해야 한다.
- 입고를 먼저 INSERT하여 COMMIT한 뒤 입고상세를 별도 트랜잭션으로 입력해도 무결성 문제는 생기지 않는다.
9. Oracle에서 비어 있는 SHIP 테이블(ID NUMBER, MEMO VARCHAR2(20))에 다음 문장을 실행하였다. 마지막 SELECT의 결과로 옳은 것은? (C1 / C2 / C3 순서)
INSERT INTO SHIP VALUES (1, '파손주의'); INSERT INTO SHIP VALUES (2, ''); INSERT INTO SHIP VALUES (3, NULL); INSERT INTO SHIP VALUES (4, '냉장'); SELECT COUNT(MEMO) AS C1, SUM(CASE WHEN MEMO IS NULL THEN 1 ELSE 0 END) AS C2, COUNT(NVL(MEMO, '없음')) AS C3 FROM SHIP;- 3 / 1 / 4
- 2 / 2 / 2
- 3 / 1 / 3
- 2 / 2 / 4
10. 택배사가 부여하는
운송장번호를배송이력테이블의 단독 PK로 사용해 왔다. 그런데 택배사가 운송장번호를 약 2년 주기로 재사용한다는 사실이 확인되었고, 배송이력은 5년간 보관해야 한다.이에 대한 식별자 설계로 가장 적절한 것은?
- 운송장번호는 업무에서 실제 쓰는 본질식별자이므로 재사용되더라도 그대로 단독 PK로 유지한다.
- 운송장번호 컬럼에 NOT NULL 제약을 추가하면 재사용으로 인한 중복 문제를 해결할 수 있다.
- 시스템이 부여하는 인조식별자(배송이력ID)를 PK로 두고, (운송장번호, 발송일자) 조합에 별도 UNIQUE 제약을 두어 업무 중복을 막는다.
- 인조식별자를 PK로 쓰면 운송장번호로는 조회할 필요가 없으므로 운송장번호 컬럼은 삭제한다.
11. WAREHOUSE.WH_CD는 기본키이고, STOCK.WH_CD는 WAREHOUSE.WH_CD를 참조하는 외래키이다. 외래키에는 ON DELETE 옵션이 없고 NOT NULL 제약도 없다. 현재 데이터가 다음과 같을 때, Oracle에서 실행하면 오류가 발생하는 문장은?
[WAREHOUSE]
WH_CD WH_NM W1 평택 W2 이천 W3 김해 [STOCK]
STK_ID WH_CD QTY 1 W1 10 2 W1 20 3 NULL 5 DELETE FROM WAREHOUSE WHERE WH_CD = 'W3';DELETE FROM WAREHOUSE WHERE WH_CD = 'W1';UPDATE STOCK SET WH_CD = 'W2' WHERE STK_ID = 3;INSERT INTO STOCK VALUES (4, NULL, 7);
12. DELIVERY 테이블에는 DLV_NO, WH_CD, QTY 컬럼이 있다. 다음 중 Oracle에서 오류 없이 실행되는 SQL은?
SELECT D.*, QTY * 2 AS DBL FROM DELIVERY D;SELECT *, QTY * 2 AS DBL FROM DELIVERY;SELECT DELIVERY.QTY FROM DELIVERY D;SELECT DLV_NO, QTY * 2 AS DBL FROM DELIVERY WHERE DBL > 10;
13. 다음 [PARCEL] 테이블에 SQL을 실행했을 때 결과 행 수는? (Oracle)
[PARCEL]
PID WEIGHT 1 3 2 8 3 12 4 15 5 27 6 NULL SELECT DISTINCT TRUNC(WEIGHT / 10) * 10 AS W_BAND FROM PARCEL;- 2
- 3
- 4
- 5
14. 다음 SQL의 실행 결과로 옳은 것은? (Oracle, A / B / C 순서)
SELECT LTRIM(SUBSTR('KR-ICN-2026-000731', INSTR('KR-ICN-2026-000731', '-', -1) + 1), '0') AS A, LENGTH(REPLACE('KR-ICN-2026', '-')) AS B, INSTR('KR-ICN-2026-000731', '-', 4, 2) AS C FROM DUAL;- 731 / 11 / 12
- 000731 / 9 / 12
- 731 / 9 / 7
- 731 / 9 / 12
15. 다음 SQL의 실행 결과로 옳은 것은? (Oracle, A / B / C 순서)
SELECT TO_CHAR(ADD_MONTHS(DATE '2026-04-30', -2), 'MM-DD') AS A, DATE '2026-03-02' - DATE '2026-02-26' AS B, TO_CHAR(DATE '2026-03-27' + 36/24, 'DD HH24') AS C FROM DUAL;- 02-28 / 5 / 28 12
- 02-28 / 4 / 28 12
- 03-02 / 4 / 28 12
- 02-28 / 4 / 29 12
16. 다음 [ORDER_SHIP] 테이블에 SQL을 실행했을 때 FEE 값을 ORD_NO 순서대로 나열한 것으로 옳은 것은? (Oracle)
[ORDER_SHIP]
ORD_NO REGION WEIGHT 1 서울 3 2 제주 3 3 부산 12 4 NULL 5 SELECT ORD_NO, CASE WHEN REGION = '제주' THEN 5000 WHEN WEIGHT > 10 THEN 4000 ELSE 3000 END + DECODE(REGION, NULL, 1000, 0) AS FEE FROM ORDER_SHIP ORDER BY ORD_NO;- 3000, 5000, 4000, 4000
- 3000, 5000, 4000, 3000
- 3000, 5000, 4000, NULL
- 3000, 5000, 3000, 4000
17. 다음 [STOCK] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과로 옳은 것은?
[STOCK]
ITEM QTY A 5 B 10 C 30 D 50 E 70 F NULL -- (가) SELECT COUNT(*) FROM STOCK WHERE QTY BETWEEN 50 AND 10; -- (나) SELECT COUNT(*) FROM STOCK WHERE QTY NOT BETWEEN 10 AND 50;- (가) 4, (나) 2
- (가) 0, (나) 3
- (가) 4, (나) 3
- (가) 0, (나) 2
18. 다음 [SHIPMENT] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과로 옳은 것은?
[SHIPMENT]
SHIP_NO STATUS RETURN_YN 1 완료 N 2 완료 Y 3 완료 NULL 4 배송중 NULL 5 NULL N 6 배송중 N -- (가) SELECT COUNT(*) FROM SHIPMENT WHERE NOT (STATUS = '완료' AND RETURN_YN = 'N'); -- (나) SELECT COUNT(*) FROM SHIPMENT WHERE STATUS <> '완료' OR RETURN_YN <> 'N';- (가) 5, (나) 3
- (가) 3, (나) 5
- (가) 3, (나) 3
- (가) 5, (나) 5
19. 다음 [SHIPMENT] 테이블에 SQL을 실행한 결과로 옳은 것은? (SHIP_DT는 DATE 타입, (MM, CNT, TOT) 순서로 표기)
[SHIPMENT]
SHIP_NO SHIP_DT QTY 1 2026-01-05 10 2 2026-01-20 40 3 2026-02-03 25 4 2026-02-14 30 5 2026-03-09 NULL 6 2026-03-22 15 7 2026-03-30 50 SELECT TO_CHAR(SHIP_DT, 'MM') AS MM, COUNT(*) AS CNT, SUM(QTY) AS TOT FROM SHIPMENT GROUP BY TO_CHAR(SHIP_DT, 'MM') HAVING MAX(QTY) - MIN(QTY) >= 20 ORDER BY MM;- (01, 2, 50), (03, 2, 65)
- (01, 2, 50), (03, 3, 65)
- (01, 2, 50), (02, 2, 55), (03, 3, 65)
- (03, 3, 65)
20. STOCK 테이블(WH_CD, ITEM_CD, QTY)에 대해 Oracle에서 실행할 때 오류가 발생하는 SQL은?
SELECT WH_CD, SUM(QTY) FROM STOCK GROUP BY WH_CD ORDER BY SUM(QTY) DESC;SELECT WH_CD FROM STOCK GROUP BY WH_CD HAVING AVG(QTY) > 10;SELECT COUNT(*) FROM STOCK HAVING COUNT(*) > 0;SELECT WH_CD, SUM(QTY) FROM STOCK GROUP BY WH_CD ORDER BY ITEM_CD;
21. STOCK 테이블(WH_CD, ITEM_CD, QTY)에 대해 Oracle에서 실행할 때 오류가 발생하는 SQL은?
SELECT DISTINCT WH_CD FROM STOCK ORDER BY QTY;SELECT WH_CD FROM STOCK ORDER BY QTY;SELECT WH_CD AS W, QTY FROM STOCK ORDER BY W, 2 DESC;SELECT WH_CD, QTY FROM STOCK ORDER BY 2 DESC NULLS LAST, WH_CD;
22. 다음 [DLV] 테이블의 DLV_DT는 VARCHAR2 타입이다. SQL을 실행한 결과의 출력 순서로 옳은 것은?
[DLV]
DLV_NO DLV_DT D1 2026-9-15 D2 2026-10-2 D3 2026-1-30 D4 2026-10-15 SELECT DLV_NO FROM DLV ORDER BY DLV_DT DESC;- D4, D2, D1, D3
- D2, D4, D1, D3
- D1, D2, D4, D3
- D1, D4, D2, D3
23. 다음 [PARCEL], [ZONE_FEE] 테이블에 SQL을 실행한 결과로 옳은 것은? (건수 / 합계 순서)
[PARCEL]
PID DIST P1 5 P2 10 P3 20 P4 25 P5 35 [ZONE_FEE]
ZONE MIN_KM MAX_KM FEE A 0 10 3000 B 10 20 4000 C 20 30 5000 SELECT COUNT(*), SUM(Z.FEE) FROM PARCEL P, ZONE_FEE Z WHERE P.DIST BETWEEN Z.MIN_KM AND Z.MAX_KM;- 4 / 16000
- 6 / 24000
- 5 / 21000
- 6 / 21000
24. 다음 [WAREHOUSE], [OUTBOUND] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과 행 수로 옳은 것은? (Oracle)
[WAREHOUSE]
WH_CD WH_NM W1 평택 W2 이천 W3 김해 W4 칠곡 [OUTBOUND]
OB_NO WH_CD STATUS 1 W1 완료 2 W1 취소 3 W2 취소 4 W3 완료 5 W9 완료 -- (가) SELECT W.WH_CD FROM WAREHOUSE W, OUTBOUND O WHERE W.WH_CD = O.WH_CD(+) AND O.OB_NO IS NULL; -- (나) SELECT W.WH_CD, O.OB_NO FROM WAREHOUSE W, OUTBOUND O WHERE W.WH_CD = O.WH_CD(+) AND O.STATUS = '완료';- (가) 1, (나) 4
- (가) 2, (나) 2
- (가) 0, (나) 2
- (가) 1, (나) 2
25. 창고관리시스템(WMS)과 전사시스템(ERP)의 재고를 대사(對査)하려고 한다. 다음 SQL의 결과로 출력되는 ITEM_CD를 순서대로 나열한 것은?
[WMS_STOCK]
ITEM_CD QTY I1 10 I2 5 I3 0 I4 7 [ERP_STOCK]
ITEM_CD QTY I2 5 I3 2 I5 9 I6 1 SELECT COALESCE(W.ITEM_CD, E.ITEM_CD) AS ITEM_CD FROM WMS_STOCK W FULL OUTER JOIN ERP_STOCK E ON W.ITEM_CD = E.ITEM_CD WHERE W.ITEM_CD IS NULL OR E.ITEM_CD IS NULL OR W.QTY <> E.QTY ORDER BY 1;- I1, I3, I4, I5, I6
- I1, I4, I5, I6
- I1, I2, I3, I4, I5, I6
- I3, I5, I6
26. 다음 [CARRIER], [DISPATCH] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과 행 수로 옳은 것은?
[CARRIER]
CR_CD CR_NM C1 한진 C2 CJ C3 롯데 [DISPATCH]
DSP_NO CR_CD STATUS 1 C1 완료 2 C1 취소 3 C2 취소 -- (가) SELECT C.CR_CD, D.DSP_NO FROM CARRIER C LEFT OUTER JOIN DISPATCH D ON C.CR_CD = D.CR_CD AND D.STATUS = '완료'; -- (나) SELECT C.CR_CD, D.DSP_NO FROM CARRIER C LEFT OUTER JOIN DISPATCH D ON C.CR_CD = D.CR_CD WHERE D.STATUS = '완료' OR D.STATUS IS NULL;- (가) 3, (나) 3
- (가) 3, (나) 2
- (가) 2, (나) 2
- (가) 4, (나) 2
27. 다음 [STOCK], [WAREHOUSE] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과로 옳은 것은?
[STOCK]
ITEM WH_CD I1 W1 I2 W2 I3 NULL I4 W9 [WAREHOUSE]
WH_CD W1 W2 W3 -- (가) SELECT COUNT(*) FROM STOCK S WHERE S.WH_CD NOT IN (SELECT WH_CD FROM WAREHOUSE); -- (나) SELECT COUNT(*) FROM STOCK S WHERE NOT EXISTS (SELECT 1 FROM WAREHOUSE W WHERE W.WH_CD = S.WH_CD);- (가) 1, (나) 1
- (가) 2, (나) 2
- (가) 1, (나) 2
- (가) 0, (나) 2
28. 다음 [STOCK] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle)
[STOCK]
WH ITEM QTY W1 A 30 W2 A 20 W1 B 10 W2 C 40 W3 C 30 W3 D 30 SELECT ITEM FROM STOCK GROUP BY ITEM HAVING SUM(QTY) > (SELECT AVG(SUM(QTY)) FROM STOCK GROUP BY ITEM) ORDER BY ITEM;- C
- A, C, D
- A, B, C, D
- A, C
29. 다음 [INBOUND] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과 행 수로 옳은 것은? (OUTBOUND 테이블에는 데이터가 있지만
WHERE 1 = 2조건으로 한 건도 선택되지 않는다.)[INBOUND]
ITEM A A B C NULL NULL -- (가) SELECT ITEM FROM INBOUND UNION SELECT ITEM FROM OUTBOUND WHERE 1 = 2; -- (나) SELECT ITEM FROM INBOUND UNION ALL SELECT ITEM FROM OUTBOUND WHERE 1 = 2;- (가) 4, (나) 6
- (가) 3, (나) 6
- (가) 6, (나) 6
- (가) 4, (나) 4
30. 두 시스템의 품목 목록을 대사하기 위해 다음 SQL을 실행하였다. 결과 행 수는? (Oracle)
[WMS]
ITEM I1 I2 I2 I3 [ERP]
ITEM I2 I3 I3 I4 I5 SELECT ITEM FROM (SELECT ITEM FROM WMS MINUS SELECT ITEM FROM ERP) UNION ALL SELECT ITEM FROM (SELECT ITEM FROM ERP MINUS SELECT ITEM FROM WMS);- 2
- 3
- 4
- 5
31. 다음 [SHIP] 테이블에 SQL을 실행한 결과에 대한 설명으로 옳은 것은?
[SHIP]
WH CARRIER QTY W1 한진 10 W1 CJ 20 W2 CJ 30 W2 롯데 40 W3 한진 50 SELECT WH, CARRIER, SUM(QTY) FROM SHIP GROUP BY CUBE(WH, CARRIER) HAVING GROUPING(WH) = 1;- 결과는 창고별 소계 3건과 총계 1건으로 4건이다.
- 결과는 운송사별 소계 3건뿐이며, 총계 행은 포함되지 않는다.
- 결과는 CUBE가 만드는 12건 중 GROUPING(WH) = 0인 행들이다.
- 결과는 운송사별 소계 3건과 총계 1건으로 4건이며, 총계 행의 SUM(QTY)는 150이다.
32. 다음 [SHIP] 테이블에 SQL을 실행했을 때 (전체 결과 건수 / CARRIER 컬럼이 NULL로 표시되는 행 수 / GC가 1인 행 수)로 옳은 것은?
[SHIP]
WH CARRIER QTY W1 한진 10 W1 NULL 20 W2 CJ 30 SELECT WH, CARRIER, SUM(QTY), GROUPING(CARRIER) AS GC FROM SHIP GROUP BY ROLLUP(WH, CARRIER);- 6 / 3 / 3
- 5 / 3 / 3
- 6 / 4 / 3
- 6 / 4 / 4
33. 다음 [DLV] 테이블에 SQL을 실행했을 때 PREV_SUM 값을 출력 순서대로 나열한 것으로 옳은 것은?
[DLV]
DRIVER SEQ QTY K 1 10 K 2 30 K 3 20 L 1 40 L 2 10 SELECT DRIVER, SEQ, SUM(QTY) OVER (PARTITION BY DRIVER ORDER BY SEQ ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING) AS PREV_SUM FROM DLV ORDER BY DRIVER, SEQ;- NULL, 10, 40, NULL, 40
- 0, 10, 40, 0, 40
- 10, 40, 60, 40, 50
- NULL, 10, 40, 60, 100
34. 다음 [STOCK] 테이블에 SQL을 실행했을 때 RNK 값을 ITEM 순서(A~E)대로 나열한 것으로 옳은 것은? (Oracle)
[STOCK]
ITEM QTY A 50 B NULL C 70 D 50 E 30 SELECT ITEM, RANK() OVER (ORDER BY QTY DESC) AS RNK FROM STOCK ORDER BY ITEM;- 2, NULL, 1, 2, 4
- 3, 1, 2, 3, 5
- 2, 5, 1, 2, 4
- 3, 1, 2, 3, 4
35. 다음 [VISIT] 테이블은 트럭별 방문일(DAY, 숫자형)을 기록한 것이다. SQL의 실행 결과로 옳은 것은? ((TRUCK, DAY)를 출력 순서대로 표기)
[VISIT]
TRUCK DAY T1 1 T1 3 T1 8 T2 2 T2 4 T2 5 SELECT TRUCK, DAY FROM (SELECT TRUCK, DAY, LEAD(DAY) OVER (PARTITION BY TRUCK ORDER BY DAY) - DAY AS GAP FROM VISIT) WHERE GAP >= 2 ORDER BY TRUCK, DAY;- (T1, 3), (T2, 2)
- (T1, 1), (T1, 3), (T1, 8), (T2, 2)
- (T1, 3), (T1, 8), (T2, 4)
- (T1, 1), (T1, 3), (T2, 2)
36. 다음 [STOCK] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle, (RN, ITEM)을 출력 순서대로 표기)
[STOCK]
ITEM QTY A 40 B 90 C 10 D 70 E 60 SELECT ROWNUM AS RN, ITEM FROM (SELECT ITEM, QTY FROM STOCK ORDER BY QTY DESC) WHERE ROWNUM <= 3 ORDER BY QTY;- (1, E), (2, D), (3, B)
- (1, C), (2, A), (3, E)
- (3, E), (2, D), (1, B)
- (1, B), (2, D), (3, E)
37. 다음 [DRIVER] 테이블에 SQL을 실행했을 때 결과 건수와 첫 번째로 출력되는 NAME으로 옳은 것은? (Oracle 12c 이상)
[DRIVER]
NAME SCORE 가 88 나 NULL 다 95 라 88 마 70 바 88 SELECT NAME, SCORE FROM DRIVER ORDER BY SCORE DESC FETCH FIRST 3 ROWS WITH TIES;- 5건, 나
- 4건, 다
- 3건, 나
- 5건, 다
38. 물류센터의 보관 위치를 계층 구조로 관리하는 [LOCATION] 테이블에 다음 SQL을 실행했다. 결과 건수와 'A-01-1셀' 행의 LV 값으로 옳은 것은? (Oracle)
[LOCATION]
LOC_ID LOC_NM PARENT_ID C1 평택센터 NULL Z1 A구역 C1 Z2 B구역 C1 R1 A-01랙 Z1 R2 A-02랙 Z1 S1 A-01-1셀 R1 S2 A-01-2셀 R1 R3 B-01랙 Z2 SELECT LOC_NM, LEVEL AS LV FROM LOCATION START WITH LOC_ID = 'Z1' CONNECT BY PRIOR LOC_ID = PARENT_ID;- 5건, LV = 4
- 5건, LV = 3
- 8건, LV = 4
- 4건, LV = 2
39. 다음 SQL의 결과에 포함되는 행은? (Oracle, LOC_NM | UP_NM | LV 순서로 표기)
[LOCATION]
LOC_ID LOC_NM PARENT_ID C1 평택센터 NULL Z1 A구역 C1 Z2 B구역 C1 R1 A-01랙 Z1 R2 A-02랙 Z1 S1 A-01-1셀 R1 S2 A-01-2셀 R1 R3 B-01랙 Z2 SELECT LOC_NM, PRIOR LOC_NM AS UP_NM, LEVEL AS LV FROM LOCATION WHERE LEVEL >= 3 START WITH PARENT_ID IS NULL CONNECT BY PRIOR LOC_ID = PARENT_ID;- A-01랙 | 평택센터 | 3
- A구역 | 평택센터 | 2
- A-01-1셀 | A구역 | 4
- B-01랙 | B구역 | 3
40. 다음 [OUTBOUND] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle, (WH, CJ, HJ)를 출력 순서대로 표기)
[OUTBOUND]
OB_NO WH CARRIER 1 W1 CJ 2 W1 CJ 3 W1 한진 4 W2 한진 5 W3 롯데 SELECT * FROM (SELECT WH, CARRIER FROM OUTBOUND) PIVOT (COUNT(*) FOR CARRIER IN ('CJ' AS CJ, '한진' AS HJ)) ORDER BY WH;- (W1, 2, 1), (W2, NULL, 1)
- (W1, 2, 1), (W2, 0, 1)
- (W1, 2, 1), (W2, 0, 1), (W3, 0, 0)
- (W1, 2, 1), (W2, NULL, 1), (W3, NULL, NULL)
41. 다음 SQL의 실행 결과로 옳은 것은? (Oracle, A / B / C 순서)
SELECT REGEXP_SUBSTR('WH-A12-R03-S7', '[A-Z][0-9]+', 1, 2) AS A, REGEXP_COUNT('WH-A12-R03-S7', '[0-9]{2}') AS B, REGEXP_REPLACE('WH-A12-R03-S7', '[^0-9]', '') AS C FROM DUAL;- R03 / 2 / 12037
- A12 / 2 / 12037
- R03 / 3 / 12037
- R03 / 2 / WHARS
42. 운송장번호 형식을 검증하기 위해 다음 SQL을 실행하였다. 결과 건수는? (Oracle)
[WAYBILL]
WB_NO CJ1234567890 cj1234567890 HJ12345678 LT123456789012 CJ12345A7890 SELECT WB_NO FROM WAYBILL WHERE REGEXP_LIKE(WB_NO, '^(CJ|LT)[0-9]{10,12}$');- 1
- 2
- 3
- 4
43. 다음 [STOCK] 테이블에 아래 문장을 순서대로 실행한 후
SELECT COUNT(*), SUM(QTY) FROM STOCK;의 결과로 옳은 것은?[STOCK]
ITEM WH QTY A W1 10 A W2 0 B W1 5 C W2 0 C W3 8 UPDATE STOCK SET QTY = CASE WHEN QTY = 0 THEN NULL ELSE QTY - 2 END; DELETE FROM STOCK WHERE QTY < 5;- 2, 14
- 5, 17
- 3, 14
- 4, 14
44. 비어 있는 DAILY_SUM 테이블에 아래 INSERT 문을 실행한 후
SELECT COUNT(*), SUM(TOT_QTY), SUM(CNT) FROM DAILY_SUM;의 결과로 옳은 것은?[OUTBOUND]
OB_DT WH QTY 0301 W1 10 0301 W1 5 0301 W2 7 0302 W1 3 0302 W2 NULL INSERT INTO DAILY_SUM (OB_DT, WH, TOT_QTY, CNT) SELECT OB_DT, WH, SUM(QTY), COUNT(QTY) FROM OUTBOUND GROUP BY OB_DT, WH;- 4, 25, 4
- 3, 25, 4
- 4, 25, 5
- 5, 25, 5
45. STOCK 테이블은
QTY NUMBER CHECK (QTY >= 0)로 정의되어 있고, ('A', 10), ('B', 5) 두 행이 커밋되어 있다. Oracle에서 아래 문장을 순서대로 실행한 후 STOCK의 데이터로 옳은 것은? (오류가 발생한 문장은 무시하고 다음 문장이 실행된다고 가정한다.)UPDATE STOCK SET QTY = QTY - 3; UPDATE STOCK SET QTY = QTY - 3; SAVEPOINT SP1; UPDATE STOCK SET QTY = QTY - 2 WHERE ITEM = 'A'; ROLLBACK TO SP1; UPDATE STOCK SET QTY = QTY + 1 WHERE ITEM = 'B'; COMMIT;- A 4, B 3
- A 10, B 6
- A 7, B 3
- A 5, B 3
46. 재고 조회 트랜잭션 TX1과 출고 트랜잭션 TX2가 다음 순서로 실행되었다.
- TX1: 품목 A의 재고를 조회 → 10
- TX2: 품목 A의 재고를 4로 UPDATE하고 COMMIT
- TX1: 같은 조건으로 품목 A의 재고를 다시 조회 → 4
TX1에서 나타난 현상과, 이 현상을 방지할 수 있는 가장 낮은 격리 수준(ANSI 표준)의 짝으로 옳은 것은?
- Dirty Read – READ COMMITTED
- Non-Repeatable Read – REPEATABLE READ
- Phantom Read – SERIALIZABLE
- Non-Repeatable Read – READ COMMITTED
47. VIEW, INDEX, SEQUENCE에 대한 설명으로 가장 적절하지 않은 것은?
- 뷰는 데이터를 직접 저장하지 않는 가상 테이블이며, 기반 테이블의 데이터가 바뀌면 뷰 조회 결과에도 반영된다.
- SQL Server에서는 순차 번호를 만들 때 시퀀스 대신 IDENTITY 속성을 주로 사용한다.
- 인덱스는 조회 속도를 높일 수 있지만, INSERT·UPDATE·DELETE 시 인덱스도 함께 갱신되어 DML 부하가 늘어난다.
- Oracle에서 뷰의 SELECT 정의를 바꿀 때는 ALTER VIEW 문으로 정의 내용을 직접 수정한다.
48. Oracle에서 STOCK 테이블이 아래 첫 번째 문장으로 정의되어 있고 데이터도 들어 있다. 이어서 나머지 문장을 순서대로 실행했을 때, 마지막 SELECT의 결과로 옳은 것은? (오류가 발생한 문장은 무시하고 진행한다.)
CREATE TABLE STOCK ( ITEM_CD VARCHAR2(10) PRIMARY KEY, WH_CD VARCHAR2(5) NOT NULL, QTY NUMBER DEFAULT 0 CHECK (QTY >= 0) ); CREATE TABLE STOCK_TMP AS SELECT * FROM STOCK WHERE 1 = 2; INSERT INTO STOCK_TMP VALUES ('A', 'W1', -5); -- ㄱ INSERT INTO STOCK_TMP VALUES ('A', 'W2', 3); -- ㄴ INSERT INTO STOCK_TMP (ITEM_CD, WH_CD) VALUES ('B', 'W1'); -- ㄷ INSERT INTO STOCK_TMP (ITEM_CD, QTY) VALUES ('C', 1); -- ㄹ SELECT COUNT(*), SUM(QTY), COUNT(QTY) FROM STOCK_TMP;- 3, -2, 2
- 2, 3, 2
- 3, -2, 3
- 4, -1, 3
49. KIM 사용자는 CREATE SESSION, CREATE TABLE 시스템 권한만 가지고 있다. KIM이 아래 테이블을 만들려고 하자 권한 부족 오류가 발생했다. SCOTT가 KIM에게 부여해야 할 권한으로 가장 적절한 것은? (Oracle)
-- KIM 실행 CREATE TABLE kim.dock_slot ( slot_id NUMBER PRIMARY KEY, wh_cd VARCHAR2(5) REFERENCES scott.warehouse (wh_cd) );GRANT SELECT ON scott.warehouse TO kim;GRANT INDEX ON scott.warehouse TO kim;GRANT REFERENCES ON scott.warehouse TO kim;GRANT ALTER ON scott.warehouse TO kim;
50. SCOTT가 W1 창고의 재고만 KIM에게 공개하려고 아래 문장을 실행하였다. 이후 KIM이 실행한 문장 중 오류 없이 수행되는 것은? (Oracle, KIM은 이 문장들 외에 SCOTT 객체에 대한 권한이 없다.)
-- SCOTT 실행 CREATE OR REPLACE VIEW v_stock_w1 AS SELECT item, qty FROM stock WHERE wh = 'W1'; GRANT SELECT ON v_stock_w1 TO kim;SELECT * FROM scott.stock;SELECT item, qty FROM scott.v_stock_w1;SELECT wh FROM scott.v_stock_w1;UPDATE scott.v_stock_w1 SET qty = 0;
AI가 SQLD 출제 범위를 바탕으로 새로 만든 예상 문제이며, 실제 기출문제가 아닙니다.