2과목 제1장 SQL 기본 (17~32번 문제풀이)
SQL 기본
17. 아래 7개의 SQL 문장이 성공적으로 수행되었다고 할 때, A, B, C 세 개의 SQL 문장을 차례대로 실행하면 A와 C의 SELECT 문장 수행결과는 각각 무엇인가?
CREATE TABLE 부서 (부서번호 CHAR(10), 부서명 CHAR(10), PRIMARY KEY(부서번호));
CREATE TABLE 직원 (직원번호 CHAR(10), 소속부서 CHAR(10), PRIMARY KEY(직원번호),
FOREIGN KEY(소속부서) REFERENCES 부서(부서번호) ON DELECTE CASCADE);
INSERT INTO 부서 VALUES('10', '영업과');
INSERT INTO 부서 VALUES('20', '기획과');
INSERT INTO 직원 VALUES('1000', '10');
INSERT INTO 직원 VALUES('2000', '20');
INSERT INTO 직원 VALUES('3000', '20');
COMMIT;
--
A. SELECT COUNT(직원번호) FROM 직원
B. DELETE FROM 부서 WHERE 부서번호 = '20'
C. SELECT COUNT(직원번호) FROM 직원
COMMIT;
3, 1
DELECT ACTION
1. CASCADE: MASTER 삭제 시 CHILD 같이 삭제
2. SET NULL: MASTER 삭제 시 CHILD 해당 필드 NULL
3. SET DEFAULT: MASTER 삭제 시 CHILD 해당 필드 DEFAULT 값으로 설정
4. RESTRICT: CHILD 테이블에 PK 값이 없는 경우만 MASTER 삭제 허용
5. NO ACTION: 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음
DELECT FROM 부서 WHERE 부서번호 = '20'
→ CASCADE 참조무결성 규정이므로 직원 테이블의 '2000', '3000'도 같이 삭제됨
SELECT COUNT(직원번호) FROM 직원
직원테이블 '1000'에 대한 1건이 출력됨
18. STADIUM 테이블의 이름을 STADIUM_JSC로 변경하는 SQL은? (ANSI 표준 기준)
RENAME STADIUM TO STADIUM_JSC;
RENAME OLD_OBJECT_NAME TO NEW_ OBJECT_ NAME
(ANSI 표준 기준, 오라클과 동일함)
19. 표준 SQL(SQL:1999)에서 테이블 생성 시 참조관계를 정의하기 위해 외래키를 선언함. 관계형 데이터베이스에서 Child Table의 FK 데이터 생성 시 Parent Table에 PK가 없는 경우, Child Table 데이터 입력을 허용하지 않는 참조동작(Referential Action)인 것은?
DEPENDENT
DELECT ACTION
1. CASCADE: MASTER 삭제 시 CHILD 같이 삭제
2. SET NULL: MASTER 삭제 시 CHILD 해당 필드 NULL
3. SET DEFAULT: MASTER 삭제 시 CHILD 해당 필드 DEFAULT 값으로 설정
4. RESTRICT: CHILD 테이블에 PK 값이 없는 경우만 MASTER 삭제 허용
5. NO ACTION: 참조무결성을 위반하는 삭제/수정 액션을 취하지 않음
INSERT ACTION
1. AUTOMATIC: MASTER 테이블에 PK가 없는 경우 MASTER PK를 생성 후 CHILD 입력
2. SET NULL: MASTER 테이블에 PK가 없는 경우 CHILD 외부키를 NULL 값으로 처리
3. SET DEFAULT: MASTER 테이블에 PK가 없는 경우 CHILD 외부키를 지정된 기본값으로 입력
4. DEPENDENT: MASTER 테이블에 PK가 존재할 때만 CHILD 입력 허용
5. NO ACTION: 참조무결성을 위반하는 입력 액션을 취하지 않음
20. 아래와 같은 SQL문에 대해 삽입이 성공하는 SQL문은?
CREATE TABLE TBL
(
ID NUMBER PRIMARY KEY,
AMT NUMBER NOT NULL,
DEGREE VARCHAR2(1)
)
1. INSERT INTO TBL VALUES(1, 100)
2. INSERT INTO TBL(ID, AMT, DEGREE) VALUES(2, 200, 'AB')
3. INSERT INTO TBL(ID, DEGREE) VALUES(4, 'X')
4. INSERT INTO TBL(ID, AMT) VALUES(3, 300)
5. INSERT INTO TBL VALUES(5, 500, NULL)
4, 5
1. 삽입 칼럼을 명시하지 않았을 경우 모든 칼럼을 삽입해야 함
2. DEGREE 컬럼의 길이는 VARCHAR2(1)이고, 'AB'는 컬럼 길이를 초과함
3. NOT NULL 컬럼인 AMT 컬럼을 명시하지 않음
21. 아래와 같은 데이터모델에서 데이터를 조작하려고 함. 다음 중 오류가 발생하는 SQL 문장인 것은?
REG_DATE 컬럼에 NOT NULL 제약조건이 있지만 INSERT INTO 구문에는 REG_DATE 컬럼이 대입되지 않아 NULL로 입력되므로 오류가 발생함
22. 아래 데이터모델과 같이 고객과 주문테이블이 생성되어 있으며, 고객과 주문테이블에 입력되어 있는 데이터는 아래 표와 같음. 이때 FK_001이라는 제약조건을 아래 SQL과 같이 설정함. 다음 중 오류없이 정상적으로 수행되는 SQL은? (2개)
- INSERT INTO 고객 VALUES ('C003', '강감찬', '2014-01-01');
- DELETE FROM 주문 WHERE 주문번호 IN ('0001', '0002');
INSERT INTO 주문 VALUES ('0005', 'C003', '2013-12-28');
고객테이블에 존재하지 않는 고객ID의 주문을 입력하려고 하여 무결성제약 오류가 발생함
DELETE FROM 고객 WHERE 고객ID = 'C002';
고객테이블의 고객ID C002를 삭제하려고 할 때 CONSTRAINT에 따라 주문테이블의 고객ID를 NULL로 업데이트하려고 DBMS에서 시도하지만, 주문테이블 고객ID 컬럼의 NOT NULL 제약조건 때문에 실패(SET NULL)함
23. 개발프로젝트의 표준은 모든 삭제 데이터에 대한 로그를 남기는 것을 원칙으로 하고, 테이블 삭제의 경우 허가된 인력만이 정기적으로 수행 가능하도록 정하고 있음. 개발팀에서 사용 용도가 없다고 판단한 STADIUM 테이블의 데이터를 삭제하는 가장 좋은 방법은?
DELETE FROM STADIUM;
TRUNCATE TABLE과 DROP TABLE은 로그를 남기지 않으므로 개발기준과 상충됨
24. 아래 고객지역 테이블을 대상으로 질의 결과와 같이 거주지와 근무지를 출력하고자 함. 아래 SQL의 (ㄱ) 안에 들어갈 내용은?
DISTINCT
DISTINCT: 데이터의 중복 제거
GROUP BY문을 사용하여 데이터의 중복을 제거할 수도 있음
SELECT 거주지, 근무지
FROM 고객지역
GROUP BY 거주지, 근무지;
25. 다음 중 아래 상황에서 사용할 수 있는 SQL 명령어는?
아래: 우리가 관리하는 데이터베이스의 '매출' 테이블이 너무나 많은 디스크 용량을 차지하여 '매출' 테이블에서 필요한 데이터만을 추출하여 별도의 테이블로 옮겨 놓았다. 이후 '매출' 원본 테이블의 데이터를 모두 삭제함과 동시에, 디스크 사용량도 초기화 하고자 한다. (단, '매출' 테이블의 스키마 정의는 유지함)
TRUNCATE TABLE 매출;
1. DETELE TABLE: 테이블의 데이터를 모두 삭제하지만 디스크 사용량을 초기화하진 않음
2. TRUNCATE TABLE: 테이블 자체가 삭제되는 것은 아니고 해당 테이블에 들어있던 모든 행들이 제거됨, 저장 공간을 재사용할 수 있도록 해제함 (로그를 남기지 않음)
3. DROP TABLE: 테이블의 데이터 및 디스크 사용량, 스미카 정의까지 테이블 구조를 완전히 삭제함 (로그를 남기지 않음)
26. 다음 중 DELETE와 TRUNCATE, DROP 명령어에 대해 비교한 설명 중 가장 부적절한 것은? (2개)
- 특정 테이블에 대해 WHERE 조건절이 없는 DELETE 명령을 수행하면 DROP TABLE 명령을 수행했을 때와 똑같은 결과를 얻을 수 있음
- DROP은 Auto Commit이 되고, DELETE와 TRUNCATE는 사용자 Commit으로 수행됨
DROP TRUNCATE DELETE DDL DDL
(일부 DML 성격을 가짐)DML Rollback 불가능 Rollback 불가능 Commit 이전 Rollback 가능 Auto Commit Auto Commit 사용자 Commit 테이블이 사용했던 Storage를 모두 Release 테이블이 사용했던 Storage 중 최초테이블 생성 시 할당된 Storage만 남기고 Release 데이터를 모두 Delete해도 사용했던 Storage는 Release되지 않음 테이블의 정의 자체를 완전히 삭제함 테이블을 최초 생성된 초기상태로 만듦 데이터만 삭제
27. 데이터베이스 트랜잭션에 대한 설명으로 가장 부적절한 것은? (2개)
- 일관성(Consistency): 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장됨
- 지속성(Durability): 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 됨
트랜잭션의 목표 설명 원자성(Atomicity) 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않은 상태로 남아 있어야 함 일관성(Consistency) 트랜잭션이 실행되기 전의 데이터베이스 내용이 잘못되어 있지 않다면 트랜잭션이 실행된 이후에도 데이터베이스의 내용에 잘못이 있으면 안 됨 고립성(Isolation) 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들면 안 됨 지속성(Durability) 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 내용은 영구적으로 저장됨
28. 데이터베이스 트랜잭션에 대한 격리성이 낮은 경우 발생할 수 있는 문제점으로 가장 부적절한 것은? (2개)
- Dirty Read: 다른 트랜잭션에 의해 수정되었고 이미 커밋된 데이터를 읽는 것
- Isolation: 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과를 만들어서는 안 됨
1. Dirty Read: 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
2. Isolation: 트랜잭션의 문제점이 아닌 목표
3. Non-Repeatable Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 두 쿼리 결과가 다르게 나타나는 현상
4. Phantom Read: 한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나는 현상
29. 테이블 A에 대해 아래와 같은 SQL을 수행했을 때 테이블 A의 ID '001'에 해당하는 최종 VAL의 값이 ORACLE에서는 200, SQL Server에서는 100이 되었음. 다음 설명 중 가장 부적절한 것은? (단, AUTO COMMIT은 FALSE로 설정되어 있음)
ORACLE에서는 CREATE TABLE 문장 수행에 의해 VAL 값은 200이 되었지만, ROLLBACK 실행으로 인해 최종적으로 B 테이블은 생성되지 않음
정리
ORACLE: DDL 문장 수행 후 묵시적으로 COMMIT 수행, 내부적으로 트랜잭션을 종료시킴
SQL Server: DDL 문장 수행 후 자동으로 COMMIT 수행하지 않음, 트랜잭션 종료되지 않음
1. ORACLE: DDL (CREATE, ALTER, DROP, RENAME) 문장 수행 후 묵시적으로 COMMIT이 수행되어 VAL 값은 200이 됨
2. SQL Server: DDL 문장 수행 후 자동으로 COMMIT을 수행하지 않기에, ROLLBACK 문장에 의해 UPDATE가 취소되어 VAL 값은 100이 됨
3. ORCLE: DDL 문장의 수행 = 내부적으로 트랜잭션을 종료시키므로 B 테이블은 생성됨
4. SQL Server: CREATE TABLE 문장도 트랜잭션의 범주에 포함되므로 ROLLBACK 문장에 의해 B 테이블은 생성되지 않음
30. 아래 내용의 (ㄱ), (ㄴ), (ㄷ)에 해당하는 단어는?
아래:
(ㄱ)은 데이터베이스의 논리적 연산단위로서 밀접히 관련되어 분리될 수 없는 한 개 이상의 데이터베이스 조작을 가리킴
(ㄱ)의 종료를 위한 대표적 명령어로는 데이터에 대한 변경사항을 데이터베이스에 영구적으로 반영하는 (ㄴ)과 데이터에 대한 변경사항을 모두 폐기하고 변경 전의 상태로 되돌리는 (ㄷ)이 있음
- (ㄱ): 트랜잭션(Transaction)
- (ㄴ): 커밋(Commit)
- (ㄷ): 롤백(Rollback)
31. 아래와 같은 테이블에 SQL 구문이 실행되었을 경우 최종 출력 값은?
3
ROLLBACK 구문: COMMIT되지 않은 상위의 모든 Transaction을 모두 Rollback함
32. 아래의 상품테이블의 데이터에 대해 관리자가 아래와 같이 SQL문장을 실행하여 데이터를 변경함. 데이터 변경 후 상품ID '001' 최종 상품명은?
LCD-TV
ROLLBACK TRANSACTION SP2로 인해 UPDATE 상품 SET 상품명 = '평면-TV' WHERE 상품ID = '001'이 ROLLBACK됨
첫 번째 UPDATE 문장만 유효한 상태에서 COMMIT 되었기 때문에 첫 번째 UPDATE한 내역만 반영됨
참고 서적: https://product.kyobobook.co.kr/detail/S000001399867
SQL 자격검정 실전문제 | 한국데이터진흥원 - 교보문고
SQL 자격검정 실전문제 | SQL 자격검정 실전문제는 국가공인 SQL 전문가 및 국가공인 SQL 개발자 자격시험 대비 수험서로 SQL 전문가 가이드에서 다루고 있는 데이터 모델링의 이해, SQL기본 및 활용,
product.kyobobook.co.kr