프로그래밍기능사 실기 · 2장 1절 · DDL · 인쇄는 머리글/바닥글(날짜·URL)을 꺼 주세요 — 쪽 머리·꼬리는 이미 들어가요
dumok.net ·
dumok.net · 프로그래밍기능사 실기 ·
dumok.net ·
[ ] / –쪽 🏠
CHAPTER02

SQL

학습 방향

관계형 데이터베이스와 SQL 문장 해석 및 작성에 중점을 두고 학습하시기 바랍니다.

SECTION 01DDL난이도 상중하

01CREATE : 생성

1) CREATE TABLE

[예제1]

SQL
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]

SQL
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회)

SQL
CREATE [UNIQUE] INDEX <인덱스명>ON 테이블명({속성명 [ASC | DESC] [,속성명 [ASC | DESC]]});

① UNIQUE

  • ●
    사용된 경우 : 중복 값이 없는 속성으로 인덱스를 생성한다.
  • ●
    생략된 경우 : 중복 값을 허용하는 속성으로 인덱스를 생성한다.

② 정렬 여부 지정

  • ●
    ASC : 오름차순 정렬 (생략된 경우 : 오름차순으로 정렬됨)
  • ●
    DESC : 내림차순 정렬

[예제]

고객 테이블에서 중복 값이 없는 속성을 갖는 고객번호에 대해 내림차순으로 정렬하여 ‘고객번호_idx’라는 이름의 인덱스를 생성하는 SQL 문을 작성하시오. (산업기사)

SQL
CREATE UNIQUE INDEX 고객번호_idx ON 고객(고객번호 DESC);

3) CREATE VIEW (20.1회)

SQL
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 문을 작성하시오.

SQL
CREATE VIEW DB_학생 AS SELECT 학번, 이름, 학과 FROM 학생WHERE 학과 = ‘컴퓨터공학과’ WITH CHECK OPTION;

2ALTER - 테이블에 대한 정의 변경

1) ADD : 속성 추가 (20.3회, 21.3회)

SQL
ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT '기본값'];

[예제]

학생 테이블에 최대 50문자까지 입력할 수 있는 주소 속성을 추가하는 SQL을 작성하시오.

SQL
ALTER TABLE 학생 ADD 주소 VARCHAR(50);

2) ALTER COLUMN : 기본값 변경

SQL
ALTER TABLE 테이블명 ALTER COLUMN 속성명 [SET DEFAULT '기본값'];

[예제] 기본값 변경

학생 테이블에서 나이 속성의 기본값을 20으로 설정하는 SQL을 작성하시오.

SQL
ALTER TABLE 학생 ALTER COLUMN 나이 SET DEFAULT 20;

3) MODIFY / ALTER COLUMN : 자료형 변경 (20.2회)

① MODIFY (MY SQL) - 가장 많이 사용되는 형태

SQL
ALTER TABLE 테이블명 MODIFY 속성명 데이터타입;

② ALTER COLUMN (표준 SQL)

SQL
ALTER TABLE 테이블명 ALTER COLUMN 속성명 데이터타입;

[예제1]

학생 테이블의 이름 속성을 최대 30문자까지 입력할 수 있는 자료형으로 변경하는 SQL을 작성하시오.

SQL
ALTER TABLE 학생 MODIFY 이름 VARCHAR(30);
SQL
ALTER TABLE 학생 ALTER COLUMN 이름 TYPE VARCHAR(30);

[예제2] 자료형과 기본값을 동시에 변경

학생 테이블의 학년 속성 데이터 타입을 INT로 변경하고 기본값을 1로 설정하는 SQL을 작성하시오.

SQL
ALTER TABLE 학생 MODIFY 학년 INT DEFAULT 1;
SQL
ALTER TABLE 학생 ALTER COLUMN 학년 TYPE INT;ALTER TABLE 학생 ALTER COLUMN 학년 SET DEFAULT 1;

4) DROP : 속성(필드)을 삭제

SQL
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];

[예제]

학생 테이블의 학과코드 속성을 삭제하고, 참조하는 제약조건(외래키 등), 관련 객체도 함께 삭제하는 SQL을 작성하시오.

SQL
ALTER TABLE 학생 DROP COLUMN 학과코드 CASCADE;

3DROP - 삭제

1) 테이블 제거 (22.2회)

SQL
DROP TABLE 테이블명 [CASCADE | RESTRICT]  // 테이블 삭제
  • ●
    CASCADE : 삭제할 요소를 참조하고 있는 모든 개체를 연쇄적으로 삭제
  • ●
    RESTRICT : 삭제할 요소를 다른 개체에서 참조하고 있으면 삭제하지 못함

2) 뷰 삭제

SQL
DROP VIEW 뷰이름 [RESTRICT | CASCADE];
  • ●
    RESTRICT : 뷰를 다른 곳에서 참조하고 있으면 제거가 취소된다.
  • ●
    CASCADE : 뷰를 참조하는 다른 뷰나 제약조건까지 모두 제거한다.

[예제]

DB_학생 뷰를 제거하되 다른 곳에서 참조하고 있으면 제거하지 않는 SQL을 작성하시오.

SQL
DROP VIEW DB_학생 RESTRICT;

03) TRUNCATE (20.1회)

  • ●
    테이블의 모든 데이터(행)을 한 번에 삭제하는 DDL 명령이다.
  • ●
    테이블의 구조(스키마, 제약조건, 인덱스)는 그대로 유지된다.

[DROP와 TRUNCATE 차이점]

연산자DROPTRUNCATE
목적테이블 자체(구조+데이터) 삭제테이블 데이터만 삭제(구조는 유지)
영향테이블 정의, 데이터, 제약조건, 인덱스까지 모두 삭제테이블 구조(컬럼, 제약조건, 인덱스)는 남고, 행 데이터만 삭제
특징테이블 자체가 사라져서 다시 사용하려면 CREATE 필요빈 테이블이 남고 데이터만 0건으로 초기화 됨
  • ●
    DROP과 TRUNCATE는 실행하는 순간 자동으로 COMMIT이 발생되어 ROLLBACK으로 취소할 수 없다.
공단 예시 문제

test 테이블의 구조와 데이터를 모두 삭제하고, 연관 조건이 있다면 해당 연관 조건까지 모두 삭제하는 SQL 쿼리를 3개의 키워드와 테이블 이름(test)만 사용하여 쓰시오.

정답 · 해설눌러서 확인
DROP TABLE test CASCADE;
해설
  • ●
    DROP TABLE : 테이블 구조와 데이터를 삭제
  • ●
    CASCADE : 테이블을 참조하는 외래키(FK) 등 연관 객체까지 함께 삭제
합격을 다지는Section 01. 예상문제
01

학생 테이블에 주소 필드가 누락이 되어 이를 추가하려고 할 때 SQL 쿼리를 3개의 키워드와 테이블 이름(학생)만 사용하여 쓰시오.

정답
02

다음은 학생 테이블의 주소 속성 자료형을 최대 50자까지 입력할 수 있도록 수정하는 SQL 문이다. 괄호를 채워 완성하시오.

SQL
ALTER TABLE 학생 (     ①     ) 주소 (     ②     );
정답

①

②

03

학생 테이블을 삭제하되, 다른 테이블에서 참조하고 있으면 삭제하지 말라는 SQL 쿼리를 3개의 키워드와 테이블 이름(학생)만 사용하여 쓰시오.

정답
04

성적 테이블의 모든 데이터(행)를 한 번에 삭제하는 명령으로, WHERE를 이용하여 조건을 지정하거나 ROLLBACK을 이용해서 실행 취소를 할 수 없는 SQL 쿼리를 2개의 키워드와 테이블 이름(성적)만 사용하여 쓰시오.

정답
05

아래 SQL문은 <학생> 테이블에 최대 3문자로 구성되는 학년 속성을 추가하는 SQL문이다. 괄호 안에 알맞은 답안을 작성하시오. (22.3회)

SQL
ALTER TABLE 학생 (   ①   ) 학년 (   ②   );
정답

①

②

06

다음은 학생 테이블의 학과 속성값을 오름차순 정렬하여, 중복을 허용하지 않도록 'stud_ idx'라는 이름의 인덱스를 정의하는 SQL 명령이다. 괄호를 채워 완성하시오. (산업기사)

SQL
CREATE (   ①   ) (   ②   ) stud_idx ON 학생(학과 ASC);
정답

①

②

07

사원 테이블 생성 시, ‘직급’ 속성의 도메인을 ‘차장’, ‘과장’, ‘사원’의 문자열 상수로 제한하는 SQL문이다. 괄호를 채워 완성하시오. (산업기사)

SQL
CREATE TABLE 사원 (  사번 CHAR(6) NOT NULL,  이름 VARCHAR(20) NOT NULL,  부서 VARCHAR(20) NOT NULL,  직급 VARCHAR(20),  PRIMARY KEY(사번),  (   ①   ) ( 직급 (   ②   ) (‘차장’, ‘과장’, ‘사원’) )
정답

①

②

2) 기본값 변경

  • ①
    MODIFY (MY SQL) - 가장 많이 사용되는 형태, 권장 답안
SQL
ALTER TABLE 테이블명 MODIFY 속성명 [자료형 DEFAULT '기본값'];
  • ②
    ALTER COLUMN - 표준 SQL
SQL
ALTER TABLE 테이블명 ALTER COLUMN 속성명 [SET DEFAULT '기본값'];

[예제] 기본값 변경

학생 테이블에서 나이 속성의 기본값을 20으로 설정하는 SQL을 작성하시오.

[권장 답안] - MODIFY

SQL
ALTER TABLE 학생 MODIFY 나이 INT DEFAULT 20;
SQL
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
dumok.net · 프로그래밍기능사 실기 · 한다맨 강의 교재