SQLD 모의고사 5회
50문항 · 제한 시간 90분. 다 풀면 과목별 점수와 합격 여부, 문제마다 해설을 보여 줘요.
1. C사 모델링팀은 업무 프로세스(회원가입, 주문접수, 배송처리 등)를 행으로, 엔터티(회원, 주문, 상품 등)를 열로 놓고 각 칸에 C·R·U·D를 표기하였다. 이를 통해 업무 처리 방법에 따라 데이터가 어떤 영향을 받는지 분석하였다.
이 분석이 해당하는 데이터 모델링의 관점과 분석 방법으로 가장 적절한 것은?
- 데이터 관점 - 정적 분석, 구조 분석
- 프로세스 관점 - 시나리오 분석, 동적 분석
- 물리적 관점 - 저장 구조 분석
- 상관 관점 - CRUD 매트릭스 분석
2. 다음 중 엔터티와 인스턴스에 대한 설명으로 가장 적절하지 않은 것은?
- 인스턴스는 엔터티에 속한 개별 대상으로, 어커런스(Occurrence)라고도 부른다.
- 엔터티는 물리 모델에서 보통 테이블로, 인스턴스는 행(Row)으로 구현된다.
- 엔터티는 인스턴스의 집합이므로 '사원들'처럼 복수형 명사로 이름을 짓는다.
- 엔터티 이름은 '고객제품'보다 '계약'처럼 생성되는 업무 의미가 드러나게 짓는다.
3.
회원엔터티에 다음 정보를 관리하려 한다.- 회원번호: 가입 시 부여하는 번호
- 주소: 시·구·동·상세주소로 나누어 볼 수 있음
- 연락처: 한 회원이 집·휴대폰·회사 번호를 여러 개 등록할 수 있음
속성의 분류와 처리에 대한 설명으로 가장 적절한 것은?
- 연락처는 다중값 속성이므로 별도 엔터티로 분리하여 1:M 관계로 표현하는 것이 원칙이다.
- 주소는 여러 하위 속성으로 분해될 수 있으므로 다중값 속성에 해당한다.
- 회원번호는 여러 의미 있는 하위 속성으로 분해되므로 복합 속성에 해당한다.
- 다중값 속성은 하나의 인스턴스에서 하나의 값만 가지는 속성을 의미한다.
4. 도서관 시스템에서
회원과대출엔터티 사이의 관계에 관계명을 붙이려 한다.(회원 기준 관계명 / 대출 기준 관계명)의 쌍으로 가장 적절한 것은?
- 관련이 있다 / 관련된다
- 대출을 신청했다 / 신청되었다
- 신청한다 / 신청된다
- 이다 / 한다
5.
주문상품엔터티의 본래 식별자는 (주문번호, 상품코드)였다. 설계자는 SQL을 단순하게 하려고 '주문상품일련번호'를 새로 만들어 단독 주식별자로 지정하고, (주문번호, 상품코드)에는 별도 제약을 두지 않았다. 운영 중 같은 주문번호·상품코드 조합의 행이 2건 저장된 사례가 발견되었다.이 상황에 대한 설명으로 가장 적절한 것은?
- 주문상품일련번호는 업무에 의해 자연스럽게 만들어진 본질식별자에 해당한다.
- 주문상품일련번호가 주식별자이므로 이런 조합의 중복은 원천적으로 발생할 수 없다.
- 인조식별자는 주식별자가 될 수 없으므로 보조식별자로 지정했어야 한다.
- 본질식별자의 유일성 보장이 사라져 생긴 문제로, 막으려면 별도 유니크 인덱스가 필요하다.
6. 다음
사원테이블의 PK는 사번이며, 부서위치는 부서코드에 의해 결정된다.사번 이름 부서코드 부서위치 E01 강도윤 D10 서울 E02 문채원 D20 부산 E03 백시우 D10 서울 E02 사원이 퇴사하여 해당 행을 삭제하자, D20 부서가 부산에 있다는 정보까지 함께 사라졌다. 이 현상의 이름과 이를 해결하기 위한 정규화 단계의 연결로 가장 적절한 것은?
- 갱신 이상 - 제2정규형
- 삽입 이상 - 제3정규형
- 삭제 이상 - 제2정규형
- 삭제 이상 - 제3정규형
7.
EMP테이블의 MGR_NO는 같은 테이블의 EMP_NO를 참조한다.EMP_NO EMP_NM MGR_NO E1 한대표 NULL E2 오부장 E1 E3 진부장 E1 E4 류과장 E2 E5 남대리 E4 E6 표대리 E2 다음 SQL의 결과 행 수로 옳은 것은?
SELECT M.EMP_NM AS MGR_NM, COUNT(*) AS CNT FROM EMP E JOIN EMP M ON E.MGR_NO = M.EMP_NO GROUP BY M.EMP_NM;- 3건
- 4건
- 5건
- 6건
8.
주문과주문상세는 IE 표기법으로주문 ||--|{ 주문상세와 같이 양쪽 모두 필수 관계로 모델링되어 있다. 주문 O7에는 주문상세가 1건만 있는데, 고객이 그 품목을 취소하여 주문 전체가 무효가 되었다.이를 처리하는 방법으로 가장 적절한 것은?
- 주문상세만 삭제하고 COMMIT한다. 주문은 상세가 없어도 존재할 수 있으므로 그대로 둔다.
- 마지막 주문상세를 삭제할 때 주문도 함께 삭제하여 하나의 트랜잭션으로 COMMIT한다.
- 주문을 먼저 삭제하여 COMMIT한 뒤, 다음 트랜잭션에서 남은 주문상세를 삭제한다.
- 주문상세는 그대로 두고 주문의 고객번호만 NULL로 바꾸어 관계를 끊은 뒤 COMMIT한다.
9. 테이블
T의 데이터가 다음과 같을 때, SQL의 결과로 옳은 것은? (결과는 C1 / C2 / C3 순서)ID A B 1 10 5 2 20 NULL 3 NULL 7 4 30 3 SELECT SUM(A + B) AS C1, SUM(A) + SUM(B) AS C2, COUNT(A + B) AS C3 FROM T;- 75 / 75 / 4
- 48 / 48 / 2
- 48 / 75 / 2
- 75 / 48 / 4
10. 식별자를 분류하는 기준과 그 기준에 따른 식별자 유형의 연결로 가장 적절한 것은?
- 대표성 여부 - 본질식별자 / 인조식별자
- 업무에 의해 만들어지는지 여부 - 본질식별자 / 인조식별자
- 스스로 생성되는지 여부 - 단일식별자 / 복합식별자
- 구성하는 속성의 수 - 주식별자 / 보조식별자
11. 테이블 간 관계(ERD)에 대한 설명으로 적절하지 않은 것은?
- 1:1 관계는 한 행이 상대 테이블의 최대 한 행과 대응하는 관계다.
- M:N 관계는 물리 모델에서 교차 테이블을 두어 두 개의 1:N 관계로 분해한다.
- 외래키 컬럼은 NOT NULL 제약이 없다면 NULL 값을 가질 수 있다.
- 부서(1)–사원(N) 관계에서 외래키는 1쪽인 부서 테이블에 둔다.
12. EMP 테이블에 테이블 별칭 E를 지정하여 조회하려 한다. Oracle에서 실행 시 오류가 발생하는 SQL은?
SELECT E.ENAME, E.SAL FROM EMP E;SELECT ENAME, SAL FROM EMP E;SELECT EMP.ENAME, SAL FROM EMP E;SELECT E.* FROM EMP E;
13. Oracle의 DUAL 테이블에 대한 설명으로 적절하지 않은 것은?
- 사용자가 DUAL 테이블을 직접 생성해야 함수 결과 확인 용도로 사용할 수 있다.
- DUMMY라는 컬럼 하나에 'X' 값을 가진 1행 1열 테이블이다.
- SYS 소유의 테이블이지만 모든 사용자가 접근할 수 있다.
- Oracle은 FROM 절이 필수이므로 테이블과 무관한 계산을 할 때 사용한다.
14. 다음 SQL의 실행 결과로 옳은 것은? (Oracle)
SELECT TRIM(LEADING '0' FROM '000120') AS A, TRIM('x' FROM 'xxAxBxx') AS B, LENGTH(RTRIM(' AB ')) AS C FROM DUAL;12, AB, 2120, AxB, 4120, AB, 4120, AxB, 2
15. 다음 [SCORE] 테이블에 SQL을 실행했을 때 GRADE 값을 ID 순서대로 나열한 것으로 옳은 것은?
[SCORE]
ID PT 1 95 2 85 3 NULL 4 70 5 60 SELECT ID, CASE WHEN PT >= 70 THEN 'B' WHEN PT >= 90 THEN 'A' ELSE 'C' END AS GRADE FROM SCORE ORDER BY ID;A, B, C, B, CA, B, NULL, B, CB, B, NULL, B, CB, B, C, B, C
16. Oracle에서 PRODUCT 테이블의 CODE 컬럼은 VARCHAR2(10) 타입이며 CODE에 인덱스가 생성되어 있다. 다음 SQL에 대한 설명으로 가장 적절한 것은?
SELECT * FROM PRODUCT WHERE CODE = 100;- CODE 컬럼 쪽이 숫자로 암시적 변환되므로, 숫자로 바꿀 수 없는 CODE 값이 있으면 오류가 발생할 수 있다.
- 숫자 100이 문자 '100'으로 암시적 변환되므로 CODE 인덱스를 정상적으로 사용한다.
- 문자 타입 컬럼과 숫자 리터럴을 비교하면 실행 전에 항상 문법 오류가 발생한다.
- 두 값의 타입이 달라 비교 결과가 항상 FALSE이므로 결과는 항상 0건이다.
17. 다음 [EMP] 테이블에 SQL을 실행했을 때 결과 값은?
[EMP]
ENAME DEPTNO JOB SAL A 10 CLERK 1000 B 10 MANAGER 3000 C 20 CLERK 2500 D 20 ANALYST 3000 E 30 SALESMAN 1500 F NULL MANAGER 4000 SELECT COUNT(*) FROM EMP WHERE NOT DEPTNO = 10 AND SAL > 2000 OR JOB = 'CLERK';- 1
- 2
- 3
- 4
18. Oracle의 ROWNUM과 SQL Server의 TOP에 대한 설명으로 적절하지 않은 것은?
WHERE ROWNUM <= 3은 조건을 통과한 행 중 최대 3건을 반환한다.WHERE ROWNUM = 2는 두 번째로 읽힌 행 1건만 반환한다.- SQL Server는
SELECT TOP(3) ...형태로 반환 행 수를 제한한다. - ROWNUM은 결과에 포함되는 행에 1부터 순서대로 부여되는 가상 컬럼이다.
19. 다음 [STAFF] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle)
[STAFF]
SID TEAM PAY 1 A 300 2 NULL 200 3 B 400 4 A NULL 5 NULL 100 6 B 400 SELECT TEAM, COUNT(PAY) AS CNT, SUM(PAY) AS TOT FROM STAFF GROUP BY TEAM ORDER BY TEAM;A, 1, 300/B, 2, 800/NULL, 2, 300A, 2, 300/B, 2, 800/NULL, 2, 300A, 1, 300/B, 2, 800NULL, 2, 300/A, 1, 300/B, 2, 800
20. 다음 [SALES] 테이블에 SQL을 실행한 결과로 옳은 것은? (Oracle)
[SALES]
SNO BRANCH AMT 1 강남 100 2 강남 300 3 종로 200 4 종로 NULL 5 마포 500 6 강남 200 SELECT COUNT(COUNT(*)), MAX(AVG(AMT)), MIN(SUM(AMT)) FROM SALES GROUP BY BRANCH;6, 500, 2003, 500, 1003, 200, 2003, 500, 200
21. 다음 [EMP] 테이블에 SQL을 실행한 결과의 출력 순서로 옳은 것은? (Oracle)
[EMP]
ENAME COMM KIM 200 LEE NULL PARK 0 CHOI NULL JUNG 200 HAN 100 SELECT ENAME FROM EMP ORDER BY COMM NULLS FIRST, ENAME DESC;- CHOI, LEE, PARK, HAN, JUNG, KIM
- LEE, CHOI, PARK, HAN, KIM, JUNG
- PARK, HAN, KIM, JUNG, LEE, CHOI
- LEE, CHOI, KIM, JUNG, HAN, PARK
22. EMP 테이블(ENAME, JOB, SAL, HIREDATE)에 대해 실행할 때 오류가 발생하는 SQL은?
SELECT ENAME, SAL * 12 AS ANNUAL FROM EMP ORDER BY ANNUAL DESC, 1;SELECT ENAME, SAL FROM EMP ORDER BY SAL * 12 DESC;SELECT ENAME, SAL FROM EMP ORDER BY 3;SELECT ENAME FROM EMP ORDER BY HIREDATE DESC, SAL;
23. 다음 [ORDERS], [CUSTOMER], [PRODUCT] 테이블에 SQL을 실행했을 때 결과 값은?
[ORDERS]
OID CID PID 1 C1 P1 2 C2 P2 3 C1 P3 4 C3 P1 5 C9 P2 [CUSTOMER]
CID CNAME C1 가 C2 나 C3 다 [PRODUCT]
PID PNAME P1 사과 P2 배 P4 감 SELECT COUNT(*) FROM ORDERS O, CUSTOMER C, PRODUCT P WHERE O.CID = C.CID AND O.PID = P.PID;- 5
- 2
- 4
- 3
24. 다음 [EMP] 테이블에 SQL을 실행한 결과로 옳은 것은? (MGR은 관리자의 EMPNO이다. 이름은 가나다순으로 정렬된다.)
[EMP]
EMPNO ENAME SAL MGR 1 윤 5000 NULL 2 장 3000 1 3 임 3500 2 4 한 2500 2 5 오 4000 3 6 서 2000 3 SELECT E.ENAME FROM EMP E, EMP M WHERE E.MGR = M.EMPNO AND E.SAL > M.SAL ORDER BY E.ENAME;- 오, 임
- 임
- 윤, 오, 임
- 장, 임
25. 다음 [A], [B] 테이블에 SQL을 실행했을 때 결과 값은?
[A]
X 1 3 5 NULL [B]
Y 2 3 4 SELECT COUNT(*) FROM A CROSS JOIN B WHERE A.X > B.Y;- 12
- 3
- 4
- 5
26. 다음 [CUSTOMER], [ORDERS] 테이블에 SQL을 실행한 결과로 옳은 것은? (이름은 가나다순으로 정렬된다.)
[CUSTOMER]
CID CNAME 1 가람 2 나무 3 다온 4 라온 5 마루 [ORDERS]
OID CID AMT 10 1 500 11 3 NULL 12 3 200 13 6 100 14 1 300 SELECT C.CNAME FROM CUSTOMER C LEFT OUTER JOIN ORDERS O ON C.CID = O.CID WHERE O.AMT IS NULL ORDER BY C.CNAME;- 나무, 라온, 마루
- 나무, 다온, 라온, 마루
- 다온
- 나무, 라온
27. 다음 SQL의 실행 결과로 출력되는 DEPTNO를 모두 나열한 것은?
[EMP]
ENAME DEPTNO SAL A 10 300 B 10 500 C 20 200 D 20 250 E 30 600 SELECT DEPTNO, AVG(SAL) FROM EMP GROUP BY DEPTNO HAVING AVG(SAL) > (SELECT AVG(SAL) FROM EMP) ORDER BY DEPTNO;10, 20, 303010, 3010
28. EMP 테이블에 다음과 같이 5건이 있다. (가), (나) SQL의 결과로 옳은 것은? (DEPTNO가 99인 행은 없다)
[EMP]
ENAME DEPTNO SAL A 10 100 B 10 200 C 20 300 D 20 400 E 30 500 -- (가) SELECT COUNT(*) FROM EMP WHERE SAL < ALL (SELECT SAL FROM EMP WHERE DEPTNO = 99); -- (나) SELECT COUNT(*) FROM EMP WHERE SAL < ANY (SELECT SAL FROM EMP WHERE DEPTNO = 99);(가) 5, (나) 0(가) 0, (나) 0(가) 0, (나) 5(가) 5, (나) 5
29. 다음 SQL의 실행 결과로 옳은 것은? (값의 순서는 고려하지 않는다)
[A]
X 1 1 NULL 2 3 [B]
X 2 NULL 4 SELECT X FROM A MINUS SELECT X FROM B;1, 1, 31, NULL, 341, 3
30. ORD_2024와 ORD_2025 테이블은 구조가 같고, 주문번호(ORD_NO)가 두 테이블 사이에서 겹치지 않으며 각 테이블 안에도 중복 행이 없다. 두 테이블을 합쳐 전체 주문 목록을 조회할 때, 결과의 정확성과 성능을 함께 고려한 선택으로 가장 적절한 것은?
- UNION: 중복 제거 과정을 거치므로 결과 정확성이 더 높다
- UNION ALL: 겹치는 행이 없어 중복 제거 부담 없이 같은 결과를 얻는다
- INTERSECT: 두 테이블의 모든 주문을 하나로 합쳐 보여 준다
- MINUS: 2024년 주문 중 2025년과 겹치지 않는 주문을 모두 합친다
31. 다음 SQL의 결과에 포함되는 행은? (REGION | PROD | S 순서로 표기)
[SALES]
REGION PROD AMT 서울 A 10 서울 B 20 부산 A 30 대구 B 40 SELECT REGION, PROD, SUM(AMT) AS S FROM SALES GROUP BY ROLLUP(PROD, REGION);NULL | A | 40서울 | NULL | 30NULL | B | 40NULL | NULL | 90
32. 다음 SQL의 결과에서 LV 값이 '부서계'인 행 수와 '직무계'인 행 수로 옳은 것은?
[EMP]
DEPTNO JOB 10 CLERK 10 MANAGER 20 CLERK 30 CLERK 30 MANAGER SELECT CASE WHEN GROUPING(DEPTNO) = 1 AND GROUPING(JOB) = 1 THEN '전체' WHEN GROUPING(JOB) = 1 THEN '부서계' WHEN GROUPING(DEPTNO) = 1 THEN '직무계' ELSE '상세' END AS LV, COUNT(*) AS CNT FROM EMP GROUP BY CUBE(DEPTNO, JOB);부서계 2행, 직무계 3행부서계 3행, 직무계 3행부서계 3행, 직무계 2행부서계 3행, 직무계 0행
33. 다음 SQL의 실행 결과에서 TOP 값을 ENAME 순서(A~E)대로 나열한 것으로 옳은 것은?
[EMP]
ENAME DEPTNO SAL A 10 300 B 10 500 C 10 200 D 20 400 E 20 100 SELECT ENAME, FIRST_VALUE(ENAME) OVER (PARTITION BY DEPTNO ORDER BY SAL DESC) AS TOP FROM EMP ORDER BY ENAME;C, C, C, E, EA, B, C, D, EB, B, B, E, EB, B, B, D, D
34. 다음 SQL의 실행 결과에서 MA 값을 MON 순서대로 나열한 것으로 옳은 것은?
[SALE]
MON AMT 1 30 2 60 3 90 4 30 5 120 SELECT MON, AVG(AMT) OVER (ORDER BY MON ROWS BETWEEN 2 PRECEDING AND CURRENT ROW) AS MA FROM SALE ORDER BY MON;10, 30, 60, 60, 8030, 45, 60, 60, 8030, 45, 60, 52.5, 6645, 60, 60, 80, 75
35. 윈도우 함수에 대한 설명으로 가장 적절하지 않은 것은?
- 윈도우 함수를 사용해도 결과 행 수는 줄어들지 않는다.
- ORDER BY만 있고 윈도우 절이 없으면 범위는 파티션 처음부터 현재 행까지이다.
- RANK, DENSE_RANK, ROW_NUMBER는 OVER 절 안에 ORDER BY가 필요하다.
- WHERE 절에서 윈도우 함수를 직접 사용해 순위를 필터링할 수 있다.
36. 다음 SQL의 결과 건수는? (Oracle 12c 이상 기준)
[EMP]
ENAME SAL A 500 B 400 C 400 D 400 E 300 F 200 SELECT ENAME, SAL FROM EMP ORDER BY SAL DESC OFFSET 1 ROWS FETCH NEXT 2 ROWS WITH TIES;- 2
- 3
- 4
- 5
37. EMP 테이블에서 급여(SAL) 내림차순으로 4~6번째 사원을 조회하려고 한다. 의도한 결과를 얻는 SQL은? (Oracle 기준)
-- (가) SELECT ENAME FROM (SELECT ENAME FROM EMP ORDER BY SAL DESC) WHERE ROWNUM BETWEEN 4 AND 6; -- (나) SELECT ENAME FROM (SELECT ROWNUM AS RN, ENAME FROM EMP ORDER BY SAL DESC) WHERE RN BETWEEN 4 AND 6; -- (다) SELECT ENAME FROM (SELECT ROWNUM AS RN, ENAME FROM (SELECT ENAME FROM EMP ORDER BY SAL DESC)) WHERE ROWNUM BETWEEN 4 AND 6; -- (라) SELECT ENAME FROM (SELECT ROWNUM AS RN, A.ENAME FROM (SELECT ENAME FROM EMP ORDER BY SAL DESC) A WHERE ROWNUM <= 6) WHERE RN >= 4;- (가)
- (나)
- (다)
- (라)
38. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)
[EMP]
EMPNO ENAME MGR 1 A NULL 2 B 1 3 C 1 4 D 2 5 E 4 SELECT COUNT(*) AS CNT FROM EMP CONNECT BY PRIOR EMPNO = MGR;- 12
- 5
- 9
- 15
39. 다음 SQL의 실행 결과로 옳은 것은? (SQL Server 기준)
[EMP]
EMPNO ENAME MGR 1 KIM NULL 2 LEE 1 3 PARK 1 4 CHOI 2 5 JUNG 4 6 KANG 3 WITH UP (EMPNO, ENAME, MGR, LVL) AS ( SELECT EMPNO, ENAME, MGR, 1 FROM EMP WHERE ENAME = 'JUNG' UNION ALL SELECT E.EMPNO, E.ENAME, E.MGR, U.LVL + 1 FROM EMP E INNER JOIN UP U ON E.EMPNO = U.MGR ) SELECT ENAME FROM UP WHERE LVL = 3;- CHOI
- KIM
- LEE
- PARK
40. 다음 (가), (나) SQL의 결과 건수로 옳은 것은? (Oracle 기준)
[QSCORE]
NAME Q1 Q2 Q3 A 10 NULL 30 B NULL NULL NULL C 20 25 NULL -- (가) SELECT * FROM QSCORE UNPIVOT (PT FOR QTR IN (Q1, Q2, Q3)); -- (나) SELECT * FROM QSCORE UNPIVOT INCLUDE NULLS (PT FOR QTR IN (Q1, Q2, Q3));- (가) 4건, (나) 4건
- (가) 3건, (나) 9건
- (가) 6건, (나) 9건
- (가) 4건, (나) 9건
41. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준)
SELECT REGEXP_SUBSTR('order:A-102;B-77', '([A-Z])-([0-9]+)', 1, 2, NULL, 2) AS R FROM DUAL;- 77
- B
- 102
- B-77
42. 다음 SQL의 실행 결과로 옳은 것은? (Oracle 기준, C1, C2 순서로 표기)
SELECT REGEXP_COUNT('Data data DATA dAta', 'data', 6, 'i') AS C1, REGEXP_COUNT('Data data DATA dAta', 'data', 1, 'ic') AS C2 FROM DUAL;- 4, 1
- 3, 4
- 3, 1
- 4, 4
43. 다음 두 테이블에 대해 아래 UPDATE 문을 실행(Oracle)한 후
SELECT SUM(price), SUM(stock) FROM prod;의 결과는?PROD
PID PRICE STOCK P1 100 10 P2 200 20 P3 300 30 NEW_PRICE
PID PRICE STOCK P1 150 5 P3 280 12 P4 500 1 UPDATE prod p SET (price, stock) = (SELECT n.price, n.stock FROM new_price n WHERE n.pid = p.pid) WHERE EXISTS (SELECT 1 FROM new_price n WHERE n.pid = p.pid);- 630, 37
- 430, 17
- 1130, 38
- 600, 60
44. 다음 두 테이블에 대해 아래 두 DELETE 문을 순서대로 실행한 후
SELECT COUNT(*) FROM orders;의 결과는?ORDERS
OID CUST_ID 1 A 2 B 3 C 4 NULL BLACK
CUST_ID B NULL DELETE FROM orders WHERE cust_id NOT IN (SELECT cust_id FROM black); DELETE FROM orders WHERE cust_id IN (SELECT cust_id FROM black);- 1
- 2
- 0
- 3
45. SQL Server의 기본 설정(AUTO COMMIT)에서 아래 문장을 순서대로 실행했다. 실행 후의 상태로 옳은 것은?
CREATE TABLE t (c INT); INSERT INTO t VALUES (1); BEGIN TRAN; INSERT INTO t VALUES (2); CREATE TABLE t_tmp (c INT); INSERT INTO t_tmp VALUES (9); ROLLBACK TRAN; INSERT INTO t VALUES (3);- T에는 1, 2, 3이 있고 T_TMP는 존재한다.
- T에는 1, 3이 있고 T_TMP는 존재하지 않는다.
- T에는 1, 3이 있고 T_TMP는 빈 테이블로 존재한다.
- T에는 1, 2, 3이 있고 T_TMP는 존재하지 않는다.
46. Oracle에서 세션 A가 아래 UPDATE를 실행하고 아직 COMMIT하지 않았다. 이 상태에서 세션 B가 (가)~(다)를 실행할 때의 설명으로 가장 적절한 것은? (EMP의 1번 사원 SAL은 원래 3000으로 커밋되어 있다.)
-- 세션 A UPDATE emp SET sal = sal + 100 WHERE empno = 1; -- 세션 B (가) SELECT sal FROM emp WHERE empno = 1; (나) UPDATE emp SET sal = 0 WHERE empno = 1; (다) UPDATE emp SET sal = 0 WHERE empno = 2;- (가)는 세션 A가 COMMIT할 때까지 대기한 뒤 3100을 반환한다.
- (가)는 대기 없이 세션 A가 변경한 값인 3100을 반환한다.
- (나)는 세션 A가 COMMIT 또는 ROLLBACK할 때까지 대기하고, (다)는 바로 수행된다.
- (다)도 EMP 테이블 전체가 잠겨 있으므로 (나)와 마찬가지로 대기한다.
47. 데이터 타입에 대한 설명으로 적절하지 않은 것은? (Oracle)
- CHAR(10) 컬럼에 'ABC'를 입력하면 나머지가 공백으로 채워져 10바이트로 저장된다.
- DATE 타입은 날짜(연·월·일)만 저장하며 시각 정보는 저장하지 않는다.
- NUMBER(7, 2) 컬럼에는 최대 99999.99까지 저장할 수 있다.
- VARCHAR2는 입력한 길이만큼만 저장하며, 비교 시 뒤쪽 공백도 문자로 취급한다.
48. EMP 테이블의 ENAME 컬럼 이름을 EMP_NAME으로, 또는 테이블 이름을 바꾸려 한다. DBMS와 문장의 짝이 올바르지 않은 것은?
- Oracle:
ALTER TABLE emp RENAME COLUMN ename TO emp_name; - Oracle:
RENAME emp TO employee; - SQL Server:
EXEC sp_rename 'emp.ename', 'emp_name', 'COLUMN'; - SQL Server:
ALTER TABLE emp RENAME COLUMN ename TO emp_name;
- Oracle:
49. 아래 DCL을 순서대로 실행한 뒤 KIM, LEE, PARK이 새로 접속했다. SCOTT.EMP에 대해 SELECT가 가능한 사용자와 INSERT가 가능한 사용자를 바르게 짝지은 것은? (Oracle, SCOTT 제외)
-- DBA 실행 CREATE ROLE r_emp; GRANT r_emp TO kim, lee, park; -- SCOTT 실행 GRANT SELECT, INSERT ON scott.emp TO r_emp; GRANT SELECT ON scott.emp TO lee; REVOKE SELECT ON scott.emp FROM r_emp; -- DBA 실행 REVOKE r_emp FROM park;- SELECT: LEE / INSERT: KIM, LEE
- SELECT: 없음 / INSERT: KIM, LEE
- SELECT: LEE / INSERT: KIM, LEE, PARK
- SELECT: KIM, LEE / INSERT: KIM, LEE
50. DBA와 사용자들이 아래 순서로 DCL을 실행했다. 실행 후 CREATE TABLE 권한을 가지고 있는 사용자를 모두 고른 것은? (Oracle, 모든 문장은 정상 실행되었다.)
-- DBA 실행 GRANT CREATE TABLE TO u1 WITH ADMIN OPTION; -- U1 실행 GRANT CREATE TABLE TO u2 WITH ADMIN OPTION; GRANT CREATE TABLE TO u3; -- U2 실행 REVOKE CREATE TABLE FROM u3; -- DBA 실행 REVOKE CREATE TABLE FROM u1;- U2, U3
- 없음
- U2
- U1, U2
AI가 SQLD 출제 범위를 바탕으로 새로 만든 예상 문제이며, 실제 기출문제가 아닙니다.