SQL
관계형 데이터베이스와 SQL 문장 해석 및 작성에 중점을 두고 학습하시기 바랍니다.
01CREATE : 생성
1) CREATE TABLE
[예제1]
CREATE TABLE 대여정보 // 대여정보 테이블 생성(대여번호 INT NOT NULL, // 대여번호 속성은 정수로 Null 값을 갖지 않는다.대여일자 DATE, // 대여일자의 자료형은 날짜이다.대여자번호 CHAR(6), // 대여자번호는 문자형 6자리로 작성도서번호 VARCHAR(6), // 도서번호는 최대 6자리로 작성PRIMARY KEY(대여번호), // 대여번호 속성을 기본키로 지정FOREIGN KEY(대여자번호) REFERENCES 고객(고객번호) // 대여자번호 속성은 고객 테이블의 고객번호를 참조하는 외래키로 지정ON UPDATE CASCADE, // 외래키 옵션으로 고객의 고객번호를 변경하면 대여자번호도 함께 변경된다.CHECK (대여일자 >= ‘2026-10-1’)); // 대여일자는 2026년 10월 1일 이후 값만 저장할 수 있다.
[예제2]
CREATE TABLE 학생 (이름 VARCHAR(15) NOT NULL,// 학생 테이블을 생성, 이름은 최대 15자리 문자형으로, NULL 값을 갖지 않는다.학번 CHAR(8), // 학번은 반드시 8자리 문자로 작성전공 VARCHAR(10) // 전공은 최대 10자리 문자로 작성생년월일 DATE, // 생년월일 속성은 날짜형으로 작성PRIMARY KEY(학번), // 학번 속성을 기본키로 정의한다.FOREIGN KEY(전공) REFERENCES 학과(학과코드)// 전공 속성은 학과 테이블의 학과코드 속성을 참조하는 외래키이다.ON DELETE SET NULL// 학과 테이블에서 튜플이 삭제되면 관련된 모든 튜플의 전공 속성 값을 NULL로 변경ON UPDATE CASCADE,// 학과 테이블에서 학과코드가 변경되면 관련된 모든 튜플의 전공 속성 값도 변경된다.CONSTRAINT 생년월일제약 CHECK(생년월일 >= '2005-01-01');// 생년월일은 2005-01-01 이후의 값만을 입력하며 제약조건 이름은 ‘생년월일제약’이다.
2) CREATE INDEX (20.4회, 22.2회)
CREATE [UNIQUE] INDEX <인덱스명>ON 테이블명({속성명 [ASC | DESC] [,속성명 [ASC | DESC]]});
① UNIQUE
- ●사용된 경우 : 중복 값이 없는 속성으로 인덱스를 생성한다.
- ●생략된 경우 : 중복 값을 허용하는 속성으로 인덱스를 생성한다.
② 정렬 여부 지정
- ●ASC : 오름차순 정렬 (생략된 경우 : 오름차순으로 정렬됨)
- ●DESC : 내림차순 정렬
[예제]
고객 테이블에서 중복 값이 없는 속성을 갖는 고객번호에 대해 내림차순으로 정렬하여 ‘고객번호_idx’라는 이름의 인덱스를 생성하는 SQL 문을 작성하시오. (산업기사)
CREATE UNIQUE INDEX 고객번호_idx ON 고객(고객번호 DESC);3) CREATE VIEW (20.1회)
CREATE VIEW 뷰이름[(속성명[,속성명,...])] AS SELECT문 [WITH CHECK OPTION];① AS SELECT (22.2회)
- ●일반 SELECT문과 같으며, UNION이나 ORDER BY를 사용할 수 없다.
② WITH CHECK OPTION
- ●뷰의 조건을 위반하는 데이터는 INSERT(삽입), UPDATE(수정) 할 수 없다.
③ 속성명을 기술하지 않으면, SELECT 문의 속성명이 자동으로 뷰의 속성명이 된다.
[예제] (20.1회)
학생 테이블에서 학과가 ‘컴퓨터공학과’인 학생의 학번, 이름, 학과 속성을 갖는 뷰를 <DB_학생>이라는 이름으로 생성하는 SQL 문을 작성하시오.
CREATE VIEW DB_학생 AS SELECT 학번, 이름, 학과 FROM 학생WHERE 학과 = ‘컴퓨터공학과’ WITH CHECK OPTION;
2ALTER - 테이블에 대한 정의 변경
1) ADD : 속성 추가 (20.3회, 21.3회)
ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];[예제]
학생 테이블에 최대 50문자까지 입력할 수 있는 주소 속성을 추가하는 SQL을 작성하시오.
ALTER TABLE 학생 ADD 주소 VARCHAR(50);2) ALTER COLUMN : 기본값 변경
ALTER TABLE 테이블명 ALTER COLUMN 속성명 [SET DEFAULT '기본값'];[예제] 기본값 변경
학생 테이블에서 나이 속성의 기본값을 20으로 설정하는 SQL을 작성하시오.
ALTER TABLE 학생 ALTER COLUMN 나이 SET DEFAULT 20;3) MODIFY / ALTER COLUMN : 자료형 변경 (20.2회)
① MODIFY (MY SQL) - 가장 많이 사용되는 형태
ALTER TABLE 테이블명 MODIFY 속성명 데이터타입;② ALTER COLUMN (표준 SQL)
ALTER TABLE 테이블명 ALTER COLUMN 속성명 데이터타입;[예제1]
학생 테이블의 이름 속성을 최대 30문자까지 입력할 수 있는 자료형으로 변경하는 SQL을 작성하시오.
ALTER TABLE 학생 MODIFY 이름 VARCHAR(30);ALTER TABLE 학생 ALTER COLUMN 이름 TYPE VARCHAR(30);[예제2] 자료형과 기본값을 동시에 변경
학생 테이블의 학년 속성 데이터 타입을 INT로 변경하고 기본값을 1로 설정하는 SQL을 작성하시오.
ALTER TABLE 학생 MODIFY 학년 INT DEFAULT 1;ALTER TABLE 학생 ALTER COLUMN 학년 TYPE INT;ALTER TABLE 학생 ALTER COLUMN 학년 SET DEFAULT 1;
4) DROP : 속성(필드)을 삭제
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];[예제]
학생 테이블의 학과코드 속성을 삭제하고, 참조하는 제약조건(외래키 등), 관련 객체도 함께 삭제하는 SQL을 작성하시오.
ALTER TABLE 학생 DROP COLUMN 학과코드 CASCADE;3DROP - 삭제
1) 테이블 제거 (22.2회)
DROP TABLE 테이블명 [CASCADE | RESTRICT] // 테이블 삭제- ●CASCADE : 삭제할 요소를 참조하고 있는 모든 개체를 연쇄적으로 삭제
- ●RESTRICT : 삭제할 요소를 다른 개체에서 참조하고 있으면 삭제하지 못함
2) 뷰 삭제
DROP VIEW 뷰이름 [RESTRICT | CASCADE];- ●RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 제거가 취소된다.
- ●CASCADE : 뷰를 참조하는 다른 뷰나 제약조건까지 모두 제거한다.
[예제]
DB_학생 뷰를 제거하되 다른 곳에서 참조하고 있으면 제거하지 않는 SQL을 작성하시오.
DROP VIEW DB_학생 RESTRICT;03) TRUNCATE (20.1회)
- ●테이블의 모든 데이터(행)을 한 번에 삭제하는 DDL 명령이다.
- ●테이블의 구조(스키마, 제약조건, 인덱스)는 그대로 유지된다.
[DROP와 TRUNCATE 차이점]
| 연산자 | DROP | TRUNCATE |
|---|---|---|
| 목적 | 테이블 자체(구조+데이터) 삭제 | 테이블 데이터만 삭제(구조는 유지) |
| 영향 | 테이블 정의, 데이터, 제약조건, 인덱스까지 모두 삭제 | 테이블 구조(컬럼, 제약조건, 인덱스)는 남고, 행 데이터만 삭제 |
| 특징 | 테이블 자체가 사라져서 다시 사용하려면 CREATE 필요 | 빈 테이블이 남고 데이터만 0건으로 초기화 됨 |
- ●DROP과 TRUNCATE는 실행하는 순간 자동으로 COMMIT이 발생되어 ROLLBACK으로 취소할 수 없다.
test 테이블의 구조와 데이터를 모두 삭제하고, 연관 조건이 있다면 해당 연관 조건까지 모두 삭제하는 SQL 쿼리를 3개의 키워드와 테이블 이름(test)만 사용하여 쓰시오.
정답 · 해설눌러서 확인
- ●DROP TABLE : 테이블 구조와 데이터를 삭제
- ●CASCADE : 테이블을 참조하는 외래키(FK) 등 연관 객체까지 함께 삭제
학생 테이블에 주소 필드가 누락이 되어 이를 추가하려고 할 때 SQL 쿼리를 3개의 키워드와 테이블 이름(학생)만 사용하여 쓰시오.
다음은 학생 테이블의 주소 속성 자료형을 최대 50자까지 입력할 수 있도록 수정하는 SQL 문이다. 괄호를 채워 완성하시오.
ALTER TABLE 학생 ( ① ) 주소 ( ② );①
②
학생 테이블을 삭제하되, 다른 테이블에서 참조하고 있으면 삭제하지 말라는 SQL 쿼리를 3개의 키워드와 테이블 이름(학생)만 사용하여 쓰시오.
성적 테이블의 모든 데이터(행)를 한 번에 삭제하는 명령으로, WHERE를 이용하여 조건을 지정하거나 ROLLBACK을 이용해서 실행 취소를 할 수 없는 SQL 쿼리를 2개의 키워드와 테이블 이름(성적)만 사용하여 쓰시오.
아래 SQL문은 <학생> 테이블에 최대 3문자로 구성되는 학년 속성을 추가하는 SQL문이다. 괄호 안에 알맞은 답안을 작성하시오. (22.3회)
ALTER TABLE 학생 ( ① ) 학년 ( ② );①
②
다음은 학생 테이블의 학과 속성값을 오름차순 정렬하여, 중복을 허용하지 않도록 'stud_ idx'라는 이름의 인덱스를 정의하는 SQL 명령이다. 괄호를 채워 완성하시오. (산업기사)
CREATE ( ① ) ( ② ) stud_idx ON 학생(학과 ASC);①
②
사원 테이블 생성 시, ‘직급’ 속성의 도메인을 ‘차장’, ‘과장’, ‘사원’의 문자열 상수로 제한하는 SQL문이다. 괄호를 채워 완성하시오. (산업기사)
CREATE TABLE 사원 ( 사번 CHAR(6) NOT NULL, 이름 VARCHAR(20) NOT NULL, 부서 VARCHAR(20) NOT NULL, 직급 VARCHAR(20), PRIMARY KEY(사번), ( ① ) ( 직급 ( ② ) (‘차장’, ‘과장’, ‘사원’) )
①
②
2) 기본값 변경
- ①MODIFY (MY SQL) - 가장 많이 사용되는 형태, 권장 답안
ALTER TABLE 테이블명 MODIFY 속성명 [자료형 DEFAULT '기본값'];- ②ALTER COLUMN - 표준 SQL
ALTER TABLE 테이블명 ALTER COLUMN 속성명 [SET DEFAULT '기본값'];[예제] 기본값 변경
학생 테이블에서 나이 속성의 기본값을 20으로 설정하는 SQL을 작성하시오.
[권장 답안] - MODIFY
ALTER TABLE 학생 MODIFY 나이 INT DEFAULT 20;ALTER TABLE 학생 ALTER COLUMN 나이 SET DEFAULT 20;Section 01. 예상문제 정답눌러서 확인
| 01번 | ALTER TABLE 학생 ADD 주소; |
|---|---|
| 02번 | ①MODIFY 또는 ALTER COLUMN 이지만 권장 답안은 MODIFY입니다.②VARCHAR(50) |
| 03번 | DROP TABLE 학생 RESTRICT; |
| 04번 | TRUNCATE TABLE 성적; |
| 05번 | ①ADD②VARCHAR(3) |
| 06번 | ①UNIQUE②INDEX |
| 07번 | ①CHECK②IN |