예상문제은행 Part 1
다음은 SELECT 권한을 취소하는 SQL문이다. 괄호에 들어갈 가장 적합한 SQL 명령어를 쓰시오.
( ) SELECT ON course FROM HONG;
다음은 <수강생> 테이블에 가변적인 20자리 문자가 저장되는 ‘연락처’ 속성을 추가하는 SQL문이다. 괄호에 들어갈 알맞은 데이터 타입을 쓰시오.
ALTER TABLE 수강생 ADD 연락처 ( );
인덱스 운영 중 데이터의 Insert, Update, Delete 등의 반복 작업으로 단편화가 발생하여 인덱스 성능이 저하될 수 있다. 다음은 idx_P 인덱스를 재구성하기 위한 SQL문이다. 괄호에 들어갈 알맞은 명령어를 쓰시오.
ALTER INDEX idx_P ( );
다음은 기존 테이블과 동일한 구조의 테이블을 복사하여 생성하는 SQL문이다. 괄호에 알맞은 명령어를 쓰시오.
( ) TABLE order_backup SELECT * FROM order_main;
다음은 이순신에게 <수강생> 테이블에 대한 모든 권한을 부여하고, 해당 권한을 다른 사용자에게도 부여할 수 있도록 하는 SQL문이다. 괄호에 들어갈 가장 적합한 명령어를 쓰시오.
GRANT ALL ON 수강생 TO 이순신 ( );
다음은 <member> 테이블의 email 속성을 제거하면서 연계된 모든 제약 조건도 함께 제거하는 SQL문이다. 괄호에 적합한 예약어를 쓰시오.
ALTER TABLE member DROP COLUMN email ( );
예상문제은행 Part 2
다음은 <Inventory> 테이블에서 quantity가 50 미만인 제품들의 item_id, item_name, quantity를 가져와 <low_stock> 뷰를 생성하는 SQL문이다. 괄호(①, ②)에 적절한 예약어를 쓰시오.
CREATE VIEW low_stock ( ① )
SELECT item_id, item_name, quantity
FROM Inventory
( ② ) quantity < 50;
다음 <처리 조건>을 준수하여 인덱스를 생성하는 SQL문의 괄호(①, ②)에 들어갈 알맞은 명령어를 쓰시오.
• 기본 테이블 S의 열(A, B, C)에 관한 조합으로 Y 인덱스를 생성한다.
• 인덱스 정렬은 A(오름차순), B(내림차순), C(오름차순)이다.
• UNIQUE와 CLUSTER는 생략한다.
CREATE ( ① ) Y ( ② ) S(A, B DESC, C);
<환자> 테이블을 정의하는 SQL문이다. 아래의 <요구사항>을 만족하도록 괄호에 적합한 예약어를 쓰시오.
• 'pid(문자 5)', 'pname(문자 10)', 'gender(문자 1)', 'contact(문자 20)' 속성을 가진다.
• 'pid' 속성은 기본키이다.
• 'gender' 속성은 'M' 또는 'F' 값만 갖도록 한다(제약조건명 : gender_ck).
• 'pid'는 <physician> 테이블에 있는 'phy_id'를 참조한다(제약조건명 : pid_fk).
CREATE TABLE patient (
pid CHAR(5) ( ),
pname CHAR(10),
gender CHAR(1),
contact CHAR(20),
CONSTRAINT gender_ck CHECK (gender='M' or gender='F'),
CONSTRAINT pid_fk FOREIGN KEY(pid) REFERENCES physician(phy_id)
);
SQL에 대한 다음 설명에서 괄호(①~③)에 들어갈 알맞은 DDL 명령어를 쓰시오.
• ( ① ) : 스키마, 도메인, 테이블 등의 객체를 정의하는 명령어
• ( ② ) : 객체에 대한 정의를 변경하는 명령어
• ( ③ ) : 스키마, 도메인, 테이블 등의 객체를 삭제하는 명령어
예상문제은행 Part 3
데이터 제어어(DCL)에 대한 다음 설명에서 괄호(①, ②)에 들어갈 알맞은 답을 <보기>에서 찾아 쓰시오.
• ( ② ) : 작업이 비정상적으로 종료되었을 때 원래 상태로 복구할 때 사용하는 명령어
<보기>
GRANT ROLLBACK SAVEPOINT COMMIT REVOKE UNDO REDO
다음 <보기>에 나열된 SQL 명령어를 DDL, DML, DCL로 구분하시오. (각 분류별로 쉼표로 구분하여 작성)
SELECT REVOKE ALTER CREATE DELETE DROP INSERT GRANT UPDATE
<고객> 테이블에 가변 길이 25자의 ‘이메일’ 속성을 추가하는 SQL문을 완성하시오. 괄호(①, ②)에 들어갈 알맞은 예약어를 쓰시오.
( ① ) TABLE 고객 ( ② ) 이메일 VARCHAR(25);
<직원> 테이블에서 ‘성명’이 ‘김철수’인 튜플을 삭제하고자 한다. 다음 <처리 조건>을 참고하여 SQL문을 작성하시오.
• 최소한의 코드로 SQL문을 구성한다.
• 마지막 세미콜론(;)은 생략 가능하다.
• 인용 부호가 필요한 경우 작은따옴표(')를 사용한다.
다음은 <Employee> 테이블의 ‘emp_no’ 속성에 대해 중복을 허용하지 않는 ‘Emp_idx’라는 이름의 인덱스를 정의하는 SQL문이다. 괄호(①, ②)에 알맞은 예약어를 쓰시오.
CREATE ( ① ) ( ② ) Emp_idx ON Employee (emp_no);
예상문제은행 Part 4
<PRODUCT> 테이블의 구조와 데이터를 모두 삭제하되, 외래키 제약 등 다른 테이블이 참조하고 있다면 삭제되지 않도록 제한하는 SQL문을 작성하시오.
다음 <직원> 테이블의 정의문과 <조건>을 참고하여 괄호(①, ②)에 들어갈 알맞은 답을 쓰시오.
CREATE TABLE 직원
(
사번 NUMBER NOT NULL,
성명 CHAR(10) UNIQUE,
부서 CHAR(10) ( ① ) (부서 ( ② ) ('개발', '기획', '인사', '영업')),
급여 NUMBER
);
• '사번' 속성은 NULL을 갖지 않는다.
• '성명' 속성은 중복 값을 허용하지 않는다.
• '부서' 속성에는 '개발', '기획', '인사', '영업' 중 하나의 값만 저장할 수 있다.
다음 <employees> 테이블에서 사번(emp_id)이 E1035인 직원의 급여(salary)를 3200으로 갱신하는 SQL문을 작성하시오.
| emp_id | name | salary |
|---|---|---|
| E1031 | Kim | 2800 |
| E1032 | Lee | 2500 |
| E1035 | Park | 2900 |
| E1038 | Choi | 3500 |
| E1041 | Jung | 4100 |
다음 <처리조건>에 부합하는 SQL문이 완성되도록 괄호(①~③)에 적합한 명령어를 쓰시오.
• <상품> 테이블에 상품명이 '무선마우스', 카테고리가 '주변기기', 가격이 '25000'인 상품 정보를 입력하시오.
• <상품> 테이블에서 상품명이 '유선키보드'인 상품의 가격을 '18000'으로 변경하시오.
• INSERT ( ① ) 상품 (상품명, 카테고리, 가격) ( ② ) ('무선마우스', '주변기기', 25000);
• UPDATE 상품 ( ③ ) 가격 = 18000 WHERE 상품명 = '유선키보드';
핵심 요약
DDL 핵심 포인트
- CREATE TABLE : PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK, NOT NULL 제약 조건
- CREATE VIEW :
AS SELECT문 사용, UNION/ORDER BY 사용 불가 - CREATE INDEX : UNIQUE(고유 인덱스), ASC/DESC(정렬), CLUSTER
- ALTER TABLE : ADD(추가), ALTER(변경), DROP COLUMN(삭제, CASCADE 옵션)
- DROP : CASCADE(연쇄 삭제) vs RESTRICT(참조 시 삭제 취소)
- INDEX REBUILD : 단편화 발생 시 인덱스 재구성
DML 핵심 포인트
- INSERT INTO ~ VALUES : 속성명 생략 시 모든 속성에 대응하는 데이터 필요
- DELETE FROM ~ WHERE : WHERE 생략 시 전체 삭제 (구조는 유지)
- UPDATE ~ SET ~ WHERE : SET 절에서 산술 연산 가능 (예: 가격 = 가격 * 1.1)
- SELECT ~ FROM ~ WHERE : 데이터 검색의 기본 구문
DCL 핵심 포인트
- GRANT ~ ON ~ TO : 권한 부여,
WITH GRANT OPTION으로 재부여 가능 - REVOKE ~ ON ~ FROM : 권한 취소,
GRANT OPTION FOR로 재부여 권한만 취소 가능 - COMMIT : 트랜잭션 결과를 영구적으로 반영
- ROLLBACK : COMMIT 이전 상태로 복원,
ROLLBACK TO 저장점으로 특정 지점까지 복원 - SAVEPOINT : 트랜잭션 내 롤백 지점 설정