SQLD 모의고사 10회
50문항 · 제한 시간 90분. 다 풀면 과목별 점수와 합격 여부, 문제마다 해설을 보여 줘요.
1. H사 데이터베이스에는 전사
고객테이블이 있다. 영업팀 프로그램에는 고객명·연락처만, 회계팀 프로그램에는 고객번호·미수금만 보이도록 팀별로 뷰를 정의하여 제공하였다.ANSI-SPARC 3단계 스키마 관점의 설명으로 가장 적절한 것은?
- 각 팀의 뷰는 사용자 관점의 외부 스키마에 해당하며, 외부 스키마는 여러 개 존재할 수 있다.
- 각 팀의 뷰는 통합 관점의 개념 스키마에 해당하며, 팀 수만큼 개념 스키마가 생긴다.
- 전사 고객 테이블의 컬럼·제약조건 같은 논리 구조는 내부 스키마에 해당한다.
- 고객 테이블에 인덱스를 추가하면 물리적 독립성에 따라 각 팀의 뷰도 수정해야 한다.
2. 온라인 서점의 업무 기술서에서 다음 내용을 바탕으로 엔터티를 도출하려 한다.
회원은 도서를 주문한다. 회원은 가입할 때 회원명과 이메일을 등록한다. 고객센터에서는 회원을 '고객'이라고 부르기도 한다.
엔터티 도출 과정의 처리로 가장 적절한 것은?
- '회원명'은 기술서에 등장하는 명사이므로 별도 엔터티로 도출한다.
- '회원'과 '고객'은 이름이 다르므로 각각 독립된 엔터티로 정의한다.
- '회원명'과 '이메일'은 회원을 설명하는 정보이므로 회원 엔터티의 속성으로 처리한다.
- '주문한다'는 업무의 핵심 행위이므로 동사 그대로 엔터티 후보로 추출한다.
3. 다음 중 도메인(Domain)에 대한 설명으로 가장 적절한 것은?
- 도메인은 두 엔터티 간 관계에 참여하는 인스턴스의 수를 정의한 것이다.
- 도메인은 논리 모델의 개념이므로 CHECK 제약 등으로 물리적으로 구현할 수 없다.
- '금액', '일자'처럼 공통 도메인을 정의해 여러 속성에 일관되게 적용하면 표준화에 도움이 된다.
- 도메인은 데이터 타입만을 의미하며 길이나 허용 값, 제약조건은 포함하지 않는다.
4. 다음 중 관계와 관계의 표기에 대한 설명으로 가장 적절하지 않은 것은?
- 관계는 엔터티 간에 정의되며, 인스턴스 간의 개별 연결을 페어링(Pairing)이라 한다.
- 관계차수(Cardinality)는 관계에 참여하는 인스턴스의 수를 1:1, 1:M, M:N 등으로 나타낸다.
- 관계선택사양(Optionality)은 관계에 대한 참여가 필수인지 선택인지를 나타낸다.
- 하나의 관계에는 기준이 되는 한쪽 방향에만 관계명을 하나 부여하는 것이 원칙이다.
5. 다음 중 식별 관계와 비식별 관계에 대한 설명으로 가장 적절한 것은?
- 비식별 관계만 사용하면 상위 엔터티 정보를 조회할 때 불필요한 조인이 늘어날 수 있다.
- IE 표기법에서 식별 관계는 점선으로, 비식별 관계는 실선으로 표현한다.
- 비식별 관계에서는 부모의 주식별자가 자식 주식별자의 일부로 상속된다.
- 식별 관계는 약한 연결 관계이므로 부모 없이도 자식 인스턴스를 생성할 수 있다.
6. 정규형에 대한 설명으로 가장 적절한 것은?
- PK가 단일 속성이고 제1정규형을 만족하면 부분 함수 종속이 생길 수 없으므로 제2정규형도 만족한다.
- 제3정규형을 만족하는 릴레이션은 모든 결정자가 후보키이므로 항상 BCNF도 만족한다.
- 제2정규형은 일반 속성 사이의 이행 함수 종속을 제거하여 얻는다.
- 제5정규형은 하나의 키에 서로 독립적인 다중값 속성이 둘 이상 붙은 다치 종속을 제거한다.
7.
DEPT와EMP는 1:M 관계이며 데이터는 다음과 같다.DEPT
DEPT_NO DEPT_NM BUDGET D10 영업 1000 D20 개발 2000 D30 기획 500 EMP
EMP_NO DEPT_NO E1 D10 E2 D10 E3 D20 E4 D20 E5 D20 다음 SQL의 결과로 옳은 것은?
SELECT SUM(D.BUDGET) FROM DEPT D JOIN EMP E ON D.DEPT_NO = E.DEPT_NO;- 3000
- 3500
- 5000
- 8000
8. IE 표기법으로 작성된 다음 모델에서
주문1건은 결제가 0건 또는 1건이고,결제는 반드시 하나의 주문에 속한다. 무통장입금 주문은 주문 접수 후 며칠이 지나 입금이 확인될 때 결제가 생성된다.이 모델을 근거로 한 트랜잭션 설계로 가장 적절한 것은?
주문 ||--o| 결제 : 지불된다- 결제는 반드시 주문에 속하므로 주문 INSERT와 결제 INSERT는 항상 하나의 트랜잭션으로 묶어야 한다.
- 주문 쪽 관계가 선택이므로 결제를 먼저 생성하고 주문은 나중에 생성해도 무방하다.
- 결제는 주문 이후 다른 시점에 생길 수 있으므로 별도 트랜잭션으로 처리하되, 이미 존재하는 주문을 참조해야 한다.
- 두 엔터티는 1:1 관계이므로 반드시 하나의 테이블로 통합해야 트랜잭션을 처리할 수 있다.
9. 테이블
T의 데이터가 다음과 같을 때, SQL의 결과로 옳은 것은? (결과는 C1 / C2 순서)ID GRADE 1 A 2 NULL 3 B 4 NULL SELECT SUM(CASE GRADE WHEN NULL THEN 1 ELSE 0 END) AS C1, SUM(CASE WHEN GRADE IS NULL THEN 1 ELSE 0 END) AS C2 FROM T;- 2 / 2
- 0 / 2
- 2 / 0
- NULL / 2
10.
견적상세엔터티는 현재 본질식별자 (견적번호, 품목코드)를 PK로 사용한다. 그런데 업무 규칙이 바뀌어, 같은 견적 안에서도 같은 품목을 납기일만 다르게 하여 여러 줄로 나누어 견적할 수 있어야 한다.이에 대응하는 식별자 설계로 가장 적절한 것은?
- (견적번호, 순번)처럼 견적 안에서 일련번호를 부여하는 인조식별자로 PK를 바꾼다.
- 현재 PK (견적번호, 품목코드)를 그대로 두어도 같은 품목을 여러 줄 입력할 수 있다.
- PK에서 품목코드를 빼고 견적번호만 PK로 두어 같은 품목의 여러 줄을 구분한다.
- PK는 그대로 두고 납기일 컬럼에 UNIQUE 제약을 추가하여 여러 줄 입력을 허용한다.
11. 다음 [ENROLL] 테이블의 현재 데이터를 기준으로 할 때, 기본키(PK)로 지정할 수 있는 컬럼(조합)은?
[ENROLL]
STU_NO COURSE TERM SCORE 1 DB 2025-1 90 1 OS 2025-1 85 2 DB 2025-1 85 2 DB 2025-2 NULL 3 OS 2025-2 70 - (STU_NO)
- (STU_NO, COURSE)
- (STU_NO, COURSE, TERM)
- (COURSE, SCORE)
12. 다음 중 Oracle에서 실행 시 오류가 발생하는 SQL은?
SELECT ENAME AS 사원명 FROM EMP;SELECT ENAME 사원명 FROM EMP;SELECT ENAME "사원 명" FROM EMP;SELECT ENAME '사원명' FROM EMP;
13. 다음 [EMP] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle)
[EMP]
ENAME SAL A 1000 B 800 C 2000 D 1600 SELECT ENAME, SAL * 2 AS SAL FROM EMP WHERE SAL > 1500;- 2행 (SAL: 4000, 3200)
- 3행 (SAL: 2000, 4000, 3200)
- 2행 (SAL: 2000, 1600)
- 별칭이 컬럼명과 같아 오류 발생
14. 다음 [ITEM] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle, ID 순서로 나열)
[ITEM]
ID QTY BOX 1 25 10 2 30 10 3 7 4 4 NULL 5 SELECT ID, CEIL(QTY / BOX) AS BOXES, MOD(QTY, BOX) AS REST FROM ITEM ORDER BY ID;- BOXES:
2, 3, 1, NULL/ REST:5, 0, 3, NULL - BOXES:
3, 4, 2, NULL/ REST:5, 0, 3, NULL - BOXES:
3, 3, 2, NULL/ REST:5, 0, 3, NULL - BOXES:
3, 3, 2, 0/ REST:5, 0, 3, 0
- BOXES:
15. 다음 [EMP] 테이블에 SQL을 실행했을 때 LV 값을 ENAME 순서대로 나열한 것으로 옳은 것은? (Oracle)
[EMP]
ENAME SAL A 2500 B 2000 C 1500 D NULL SELECT ENAME, DECODE(SIGN(SAL - 2000), 1, 'HIGH', 0, 'MID', 'LOW') AS LV FROM EMP ORDER BY ENAME;HIGH, MID, LOW, NULLHIGH, MID, LOW, LOWHIGH, HIGH, LOW, LOWHIGH, MID, MID, NULL
16. 다음 SQL의 실행 결과로 옳은 것은? (Oracle)
SELECT EXTRACT(DAY FROM LAST_DAY(DATE '2028-02-01')) AS A, DATE '2025-03-01' - DATE '2025-02-01' AS B, TRUNC(MONTHS_BETWEEN(DATE '2025-08-20', DATE '2025-01-31')) AS C FROM DUAL;28, 28, 729, 29, 629, 28, 629, 28, 7
17. 다음 [MEMBER] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과로 옳은 것은?
[MEMBER]
ID NAME 1 ALICE 2 BOB 3 NULL 4 AMY 5 CHRIS 6 NULL -- (가) SELECT COUNT(*) FROM MEMBER WHERE NAME LIKE '%'; -- (나) SELECT COUNT(*) FROM MEMBER WHERE NAME NOT LIKE 'A%';- (가) 6, (나) 2
- (가) 6, (나) 4
- (가) 4, (나) 4
- (가) 4, (나) 2
18. 다음 [EMP] 테이블에 SQL을 실행했을 때 결과 값은? (Oracle)
[EMP]
ENAME DEPTNO JOB A 10 CLERK B 10 MANAGER C 20 MANAGER D 20 CLERK E NULL CLERK F 10 CLERK SELECT COUNT(*) FROM EMP WHERE (DEPTNO, JOB) IN ((10, 'CLERK'), (20, 'MANAGER'));- 3
- 4
- 5
- 6
19. 다음 [REVIEW] 테이블에 SQL을 실행한 결과로 옳은 것은?
[REVIEW]
RID SHOP STAR 1 가 5 2 가 3 3 나 4 4 가 4 5 나 NULL 6 나 2 SELECT SHOP, COUNT(CASE WHEN STAR >= 4 THEN 1 ELSE 0 END) AS C1, SUM(CASE WHEN STAR >= 4 THEN 1 ELSE 0 END) AS C2, COUNT(CASE WHEN STAR >= 4 THEN 1 END) AS C3 FROM REVIEW GROUP BY SHOP ORDER BY SHOP;가, 2, 2, 2/나, 1, 1, 1가, 3, 2, 2/나, 3, 1, 1가, 3, 2, 2/나, 2, 1, 1가, 3, 2, 3/나, 3, 1, 3
20. 집계 함수와 GROUP BY 절에 대한 설명으로 적절하지 않은 것은?
- 그룹핑 컬럼 값이 NULL인 행들은 각각 별도의 그룹으로 분리되어 집계된다.
- GROUP BY 절에 사용한 컬럼을 SELECT 절에 반드시 포함할 필요는 없다.
- MAX, MIN 함수는 숫자뿐 아니라 문자형, 날짜형 데이터에도 사용할 수 있다.
- GROUP BY는 결과의 정렬 순서를 보장하지 않으므로 정렬이 필요하면 ORDER BY를 써야 한다.
21. 다음 [CODE] 테이블에 SQL을 실행한 결과의 출력 순서로 옳은 것은? (정렬은 문자 코드(ASCII) 값을 기준으로 하는 이진 정렬이다.)
[CODE]
CD apple Banana cherry Apple banana SELECT CD FROM CODE ORDER BY CD;- apple, Apple, banana, Banana, cherry
- Apple, apple, Banana, banana, cherry
- Apple, Banana, apple, banana, cherry
- apple, banana, cherry, Apple, Banana
22. SQL Server에서 [EXAM] 테이블의 SCORE를 오름차순으로 정렬하되, SCORE가 NULL인 행은 맨 뒤에 출력하려고 한다. 가장 적절한 ORDER BY 절은?
ORDER BY SCORE ASCORDER BY SCORE NULLS LASTORDER BY SCORE DESCORDER BY CASE WHEN SCORE IS NULL THEN 1 ELSE 0 END, SCORE
23. 다음 [A], [B] 테이블에 대해 (가), (나) SQL을 실행했을 때 결과 값으로 옳은 것은? (Oracle)
[A]
CODE AV X 1 Y 2 NULL 3 NULL 4 [B]
CODE BV X 10 NULL 20 Y 30 Y 40 -- (가) SELECT COUNT(*) FROM A, B WHERE A.CODE = B.CODE; -- (나) SELECT COUNT(*) FROM A, B WHERE NVL(A.CODE, '-') = NVL(B.CODE, '-');- (가) 3, (나) 3
- (가) 5, (나) 5
- (가) 3, (나) 5
- (가) 3, (나) 4
24. 다음 [EMP], [DEPT], [LOC] 테이블에 SQL을 실행했을 때 결과 건수와 CITY가 NULL인 행의 수로 옳은 것은?
[EMP]
ENAME DEPTNO 가 10 나 20 다 30 라 NULL [DEPT]
DEPTNO LOC_ID 10 L1 20 NULL 30 L9 [LOC]
LOC_ID CITY L1 서울 L2 부산 SELECT E.ENAME, L.CITY FROM EMP E, DEPT D, LOC L WHERE E.DEPTNO = D.DEPTNO(+) AND D.LOC_ID = L.LOC_ID(+);- 1행 / 0행
- 3행 / 2행
- 4행 / 2행
- 4행 / 3행
25. 다음 [PROD], [STOCK] 테이블에 SQL을 실행한 결과로 옳은 것은? (두 테이블에서 이름이 같은 컬럼은 PCODE뿐이다.)
[PROD]
PCODE PNAME A1 연필 B2 볼펜 NULL 샤프 C3 지우개 [STOCK]
PCODE QTY A1 10 A1 5 NULL 7 D4 3 SELECT COUNT(*), SUM(QTY) FROM PROD NATURAL JOIN STOCK;3, 222, 151, 104, 25
26. 다음 [PARCEL], [FEE] 테이블에 SQL을 실행한 결과로 옳은 것은?
[PARCEL]
PID KG 1 2 2 5 3 7 4 10 5 12 [FEE]
FROM_KG TO_KG FEE 0 5 3000 5 10 5000 SELECT COUNT(*), SUM(F.FEE) FROM PARCEL P INNER JOIN FEE F ON P.KG > F.FROM_KG AND P.KG <= F.TO_KG;4, 160005, 210004, 180005, 16000
27. 다음 SQL의 실행 결과로 옳은 것은? (DNAME(CNT) 형식으로 표기)
[DEPT]
DEPTNO DNAME 10 총무 20 영업 30 개발 40 기획 [EMP]
ENAME DEPTNO A 10 B 10 C 20 D 20 E 20 F 30 SELECT DNAME, CNT FROM (SELECT D.DNAME, (SELECT COUNT(*) FROM EMP E WHERE E.DEPTNO = D.DEPTNO) AS CNT FROM DEPT D) WHERE CNT < 2 ORDER BY DNAME;개발(1)개발(1), 기획(NULL)총무(2), 개발(1)개발(1), 기획(0)
28. CUST(CID가 PK)와 ORD(한 고객이 여러 건 주문 가능) 테이블이 있다. 주문 이력이 있는 고객의 이름을 중복 없이 조회하려 할 때, 요구 사항을 충족하지 못하는 SQL은?
SELECT C.CNAME FROM CUST C WHERE C.CID IN (SELECT O.CID FROM ORD O);SELECT C.CNAME FROM CUST C, ORD O WHERE C.CID = O.CID;SELECT C.CNAME FROM CUST C WHERE EXISTS (SELECT 1 FROM ORD O WHERE O.CID = C.CID);SELECT C.CNAME FROM CUST C WHERE C.CID = ANY (SELECT O.CID FROM ORD O);
29. 다음 SQL의 실행 결과로 옳은 것은? (C1, C2, C3 순서로 표기)
[A]
X 1 2 NULL [B]
X 2 NULL 3 SELECT COUNT(*) AS C1, COUNT(X) AS C2, COUNT(DISTINCT X) AS C3 FROM (SELECT X FROM A UNION ALL SELECT X FROM B);6, 6, 44, 3, 36, 4, 36, 4, 4
30. 다음 SQL의 실행 결과로 옳은 것은? (SQL Server 기준, 값의 순서는 고려하지 않는다)
[A]
X 1 2 3 [B]
X 2 [C]
X 1 2 4 SELECT X FROM A EXCEPT SELECT X FROM B INTERSECT SELECT X FROM C;1, 3131, 2, 3
31. 다음 SQL의 결과 건수는?
[EMP]
DEPTNO JOB SAL 10 CLERK 100 10 MANAGER 300 20 CLERK 200 SELECT DEPTNO, JOB, SUM(SAL) FROM EMP GROUP BY ROLLUP(DEPTNO), ROLLUP(JOB);- 6행
- 7행
- 8행
- 9행
32. 다음 SQL의 결과에서 SUM(AMT)가 450인 행의 Y, Q 값으로 옳은 것은? (YR, QTR은 문자형)
[SALES]
YR QTR AMT 2024 Q1 100 2024 Q2 200 2025 Q1 150 SELECT DECODE(GROUPING(YR), 1, '총계', YR) AS Y, DECODE(GROUPING(QTR), 1, '소계', QTR) AS Q, SUM(AMT) FROM SALES GROUP BY ROLLUP(YR, QTR);Y = 총계, Q = 소계Y = 총계, Q = NULLY = 총계, Q = 총계Y = NULL, Q = 소계
33. 다음 SQL의 결과 행 수와 첫 행의 C1, C2, A 값으로 옳은 것은?
[T]
ID V 1 10 2 NULL 3 20 4 30 SELECT ID, COUNT(*) OVER () AS C1, COUNT(V) OVER () AS C2, AVG(V) OVER () AS A FROM T ORDER BY ID;1행, 4, 3, 204행, 4, 4, 154행, 3, 3, 204행, 4, 3, 20
34. 다음 SQL의 실행 결과로 옳은 것은?
[EMP]
ENAME SAL A 400 B 500 C 400 D 300 E 500 SELECT ENAME FROM (SELECT ENAME, DENSE_RANK() OVER (ORDER BY SAL DESC) AS DR FROM EMP) WHERE DR = 2 ORDER BY ENAME;- 결과 없음 (0건)
A, CB, ED
35. 다음 SQL의 실행 결과에서 S 값을 ENAME 순서(A~D)대로 나열한 것으로 옳은 것은?
[EMP]
ENAME SAL A 100 B 200 C 200 D 300 SELECT ENAME, SUM(SAL) OVER (ORDER BY SAL RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING) AS S FROM EMP ORDER BY ENAME;800, 700, 500, 300100, 500, 500, 800800, 800, 800, 800800, 700, 700, 300
36. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, 테이블의 행은 표에 나온 순서대로 읽힌다고 가정한다)
[EMP]
ENAME SAL A 100 B 300 C 250 D 150 E 400 SELECT ENAME FROM EMP WHERE SAL > 200 AND ROWNUM <= 2;- B
- B, E
- A, B
- B, C
37. 다음 SQL의 결과 건수는? (Oracle 12c 이상 기준)
[EMP]
ENAME SAL A 900 B 800 C 700 D 600 E 500 F 400 G 300 H 200 SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC FETCH FIRST 50 PERCENT ROWS ONLY;- 3
- 4
- 5
- 8
38. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, (ROOT_NM, ENAME, LV)로 표기하며 행 순서는 무시한다)
[EMP]
EMPNO ENAME MGR 1 KIM NULL 2 LEE 1 3 PARK 2 4 CHOI 3 5 JUNG 1 SELECT CONNECT_BY_ROOT ENAME AS ROOT_NM, ENAME, LEVEL AS LV FROM EMP WHERE CONNECT_BY_ISLEAF = 1 START WITH ENAME IN ('CHOI', 'JUNG') CONNECT BY EMPNO = PRIOR MGR;- (CHOI,KIM,3), (JUNG,KIM,1)
- (KIM,CHOI,4), (KIM,JUNG,2)
- (CHOI,KIM,4), (JUNG,KIM,2)
- (CHOI,CHOI,1), (JUNG,JUNG,1)
39. SQL Server에서 재귀 CTE로 계층 구조를 조회하는 방법에 대한 설명으로 옳은 것은?
- 앵커 멤버와 재귀 멤버는 UNION ALL로 연결하며, 재귀 멤버가 더 이상 행을 반환하지 않으면 반복이 끝난다.
- 재귀 CTE는 Oracle과 같이 CONNECT BY PRIOR 절과 함께 사용해야 계층을 전개할 수 있다.
- 재귀 멤버는 CTE 자신을 참조할 수 없으므로 원본 테이블끼리만 셀프 조인해야 한다.
- 재귀 CTE의 결과는 ORDER BY 없이도 항상 부모 바로 아래에 자식이 오는 깊이 우선 순서로 출력된다.
40. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, (STU, KOR, ENG)를 출력 순서대로 표기)
[GRADE_T]
STU SUBJ GRADE 철수 국어 B 철수 영어 A 영희 국어 A 영희 국어 C 민수 국어 B 민수 수학 B SELECT * FROM (SELECT STU, SUBJ, GRADE FROM GRADE_T) PIVOT (MAX(GRADE) FOR SUBJ IN ('국어' AS KOR, '영어' AS ENG)) ORDER BY STU;- (민수,B,NULL), (영희,C,NULL), (철수,B,A)
- (민수,B,NULL), (영희,A,NULL), (철수,B,A)
- (민수,B,NULL), (영희,A,NULL), (영희,C,NULL), (철수,B,A)
- (영희,C,NULL), (철수,B,A)
41. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)
SELECT REGEXP_REPLACE('Cat cat CAT', 'cat', 'dog', 1, 2, 'i') AS R FROM DUAL;- dog dog dog
- Cat dog dog
- dog cat CAT
- Cat dog CAT
42. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)
SELECT REGEXP_INSTR('ab12cd', '([a-z]+)([0-9]+)', 1, 1, 0, 'c', 2) AS POS FROM DUAL;- 1
- 3
- 5
- 4
43. LOGIN_LOG 테이블에 대해 아래 DELETE 문을 실행(Oracle)한 후
SELECT COUNT(*) FROM login_log;의 결과는?LOGIN_LOG
LOG_ID USER_ID LOGIN_DT 1 a 2026-01-01 2 a 2026-01-05 3 b 2026-01-02 4 b 2026-01-02 5 c 2026-01-03 DELETE FROM login_log l WHERE l.login_dt < (SELECT MAX(x.login_dt) FROM login_log x WHERE x.user_id = l.user_id);- 4
- 3
- 2
- 5
44. T 테이블(C 컬럼)에는 1, 2, 3 세 행이 있다. Oracle에서 아래 문장을 순서대로 실행한 후
SELECT COUNT(*), MAX(c) FROM t;의 결과는?INSERT INTO t SELECT c + 10 FROM t; INSERT INTO t SELECT c * 2 FROM t WHERE c > 10; DELETE FROM t WHERE c > 20 AND MOD(c, 4) = 0;- 9, 26
- 6, 13
- 8, 26
- 8, 24
45. T 테이블에는 (ID, VAL) = (1, 'A')인 한 행이 커밋되어 있다. Oracle에서 세션 A가 아래 문장을 실행한 직후 네트워크 장애로 세션이 비정상 종료되었다. 이후 세션 B가
SELECT * FROM t;를 실행했을 때의 결과는?-- 세션 A INSERT INTO t VALUES (2, 'B'); COMMIT; UPDATE t SET val = 'Z' WHERE id = 1; INSERT INTO t VALUES (3, 'C'); -- (비정상 종료)- (1, 'A')
- (1, 'A'), (2, 'B')
- (1, 'Z'), (2, 'B'), (3, 'C')
- (1, 'Z'), (2, 'B')
46. 잠금(LOCK)에 대한 설명으로 적절하지 않은 것은?
- 공유 잠금은 데이터를 읽을 때 사용하며 여러 트랜잭션이 동시에 걸 수 있다.
- DML이 획득한 잠금은 해당 트랜잭션이 COMMIT 또는 ROLLBACK할 때 해제된다.
- 변경 중인 행에 걸린 잠금은 다른 트랜잭션이 같은 행을 동시에 변경하지 못하게 한다.
- 배타 잠금이 걸린 데이터에도 다른 트랜잭션이 공유 잠금을 추가로 걸 수 있다.
47. Oracle에서 EMP 테이블에 DEPT 테이블을 참조하는 FK 제약조건을 정의하려 한다. 다음 컬럼 정의 중 오류가 발생하는 것은?
deptno NUMBER REFERENCES dept(deptno) ON DELETE CASCADEdeptno NUMBER REFERENCES dept(deptno) ON UPDATE CASCADEdeptno NUMBER REFERENCES dept(deptno) ON DELETE SET NULLdeptno NUMBER REFERENCES dept(deptno)
48. SCORE 테이블의 데이터가 아래와 같을 때, Oracle에서 다음 ALTER 문 중 오류가 발생하는 것은? (각 문장은 독립적으로 실행한다고 가정한다.)
SCORE
ID PT 1 80 2 NULL 3 95 ALTER TABLE score ADD CONSTRAINT score_pk PRIMARY KEY (id);ALTER TABLE score ADD CONSTRAINT score_ck CHECK (pt >= 0);ALTER TABLE score MODIFY (pt NOT NULL);ALTER TABLE score ADD CONSTRAINT score_uk UNIQUE (pt);
49. DBA, SCOTT, U1이 아래 순서로 DCL을 실행했다. 모든 문장이 실행된 후 U2가 가진 권한으로 옳은 것은? (Oracle)
-- DBA 실행 GRANT CREATE TABLE TO u1 WITH ADMIN OPTION; -- SCOTT 실행 GRANT SELECT ON scott.emp TO u1 WITH GRANT OPTION; -- U1 실행 GRANT CREATE TABLE TO u2; GRANT SELECT ON scott.emp TO u2; -- DBA 실행 REVOKE CREATE TABLE FROM u1; -- SCOTT 실행 REVOKE SELECT ON scott.emp FROM u1;- CREATE TABLE 권한만 가진다.
- SCOTT.EMP에 대한 SELECT 권한만 가진다.
- CREATE TABLE과 SCOTT.EMP SELECT 권한을 모두 가진다.
- 두 권한을 모두 잃는다.
50. Oracle에서 롤을 이용해 권한을 관리하려고 아래 문장들을 작성했다. 오류가 발생하는 것은? (실행자는 필요한 권한을 모두 가지고 있다고 가정한다.)
CREATE ROLE r_app;GRANT CREATE SESSION, CREATE VIEW TO r_app;GRANT r_app TO kim, lee;GRANT SELECT ON scott.emp TO r_app WITH ADMIN OPTION;
AI가 SQLD 출제 범위를 바탕으로 새로 만든 예상 문제이며, 실제 기출문제가 아닙니다.