5 minute read

  • Structured Query Language
  • 관계 데이터베이스에서 사용되는 대표적인 언어
  • SQL의 종류
    • 정의어(DDL, Data Definition Language)
    • 조작어(DML, Data Manipulation Language)
    • 제어어(DCL, Data Control Language)


SQL 문법

1. 데이터 정의어(DDL)

  • 스키마, 도메인, 테이블, 뷰, 인덱스를 정의하거나 변경 또는 삭제할 때 사용하는 언어
  • 종류
    • CREATE: 스키마, 도메인, 테이블, 뷰, 인덱스 정의
    • ALTER: TABLE에 대한 정의 변경
    • DROP: 스키마, 도메인, 테이블, 뷰, 인덱스를 삭제


CREATE

  • 테이블 정의

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    1. CREATE TABLE 테이블_이름
    2. 		({속성_이름 데이터_타입 [DEFAULT 기본값] [NOT NULL], ...}
    3. 		[PRIMARY KEY(기본키_속성명),]
    4.  	[UNIQUE(대체키_속성명),]
    5.  	[FOREIGN KEY(외래키_속성명) REFERENCES 참조테이블(기본키_속성명)]
    6.  		[ON DELETE CASCADE | SET NULL | SET DEFAULT | NO ACTION]
    7.  		[ON UPDATE CASCADE | SET NULL | SET DEFAULT | NO ACTION],
    8.  	[CONSTRAINT 제약조건명 CHECK(조건식)]
    9. );
    
    1. 생성할 데이터베이스의 타입(TABLE)과 이름 지정
    2. 괄호(())를 사용해 테이블의 속성 지정
      • {}: 반복적으로 사용되는 요소
      • []: 생략 가능한 요소 ([NOT NULL]: 공백을 허용하지 않는다는 속성이 필드마다 선택 사항임)
    3. 기본키로 지정할 속성 선택(NOT NULL 기본 지정)
    4. 유일키로 지정할 속성 선택
    5. 왜래키로 지정할 속성 선택
      • 외부 테이블의 기본 키를 가져와 자신의 테이블 속성에 나타냄
      • 외부 테이블의 이름과 속성명 => 외래키의 속성으로 저장
    6. 외래키 데이터의 영향을 받으면 어떻게 처리할지 옵션 지정
      • ON DELETE/UPDATE: 영향을 받는 데이터가 있다면 레코드를 함께 삭제하거나 갱신
      • SET NULL: 레코드 삭제를 하지 않고 관련 데이터만 변경
      • SET DEFAULT: 기본 값으로 변경
      • NO ACTION: 아무 작업도 하지 않음
    7. 별도의 제약 조건 지정
  • 예제

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    1. 학번, 성명, 학과, 학년, 학점으로 구성된 [학생] 테이블을 만들어라.
    2. 학번과 학년은 숫자형 자료이며, 나머지는 문자형이다.
    3. 성명은 가변길이 최대 5자리, 학과는 고정길이 10자리, 학점은 고정길이 1자리 문자형이다.
    4. 학번을 기본키로 지정한다.
    5. 성명 속성은 공백이 있을  없다.
    6. 학과 속성을 이용하여 [수강] 테이블의 학과를 참조하도록 외래키를 지정하며, 참조 테이블에서 삭제가 발생하면 NULL값으로 하고, 수정이 발생하면 연쇄적으로 수정하도록 한다.
    7. 학년의 속성값은 4 이하의 값을 갖도록 'hak' 이름으로 제약한다.
      
      
    CREATE TABLE 학생 ( 학번 INT, 성명 VARCHAR(5) NOT NULL, 학과 CHAR(10), 학년 INT, 학점 CHAR(1),
                     PRIMARY KEY(학번),
                     FOREIGN KEY(학과), REFERENCES 수강(학과), ON DELETE SET NULL ON UPDATE CASCADE,
                     CONSTRAINT hak CHECK(학년 <= 4)
    );
    
  • 스키마 정의

    1
    
    CREATE SCHEMA 스키마_이름 AUTHORIZATION 사용자;
    
  • 도메인 정의

    1
    2
    
    CREATE DOMAIN 도메인_이름 데이터_타입 [DEFAULT 기본값]
    	[CONSTRAINT 제약조건_이름 CHECK(VALUE IN(범위_))];
    
    • 예제

      1
      2
      3
      4
      5
      
      // 속성의 값으로 'T' 'F'로만 구성되는 'success'라는 이름의 도메인을 정의하시오
      // (, 속성값이 입력되지 않을 경우 기본값은 'T' 한다.)
          
      CREATE DOMAIN success CHAR(1) DEFAULT 'T'
      	CONSTRAINT success CHECK(VALUE IN('T', 'F'));
      
  • 인덱스 정의(중복 가능)

    1
    
    CREATE INDEX 인덱스_이름 ON 테이블_이름(속성_이름 [ASC|DESC]);
    
  • 인덱스 정의(중복 불가능)

    1
    
    CREATE UNIQUE INDEX 인덱스_이름 ON 테이블_이름(속성_이름 [ASC|DESC]);
    
    • 예제

      1
      2
      3
      
      // [학생] 테이블의 학과 속성값을 오름차순 정렬하여, 중복을 허용하지 않도록 'stud_idx'라는 이름의 인덱스를 정의하시오.
          
      CREATE UNIQUE INDEX stud_idx ON 학생(학과 ASC);
      


ALTER

  • 데이터베이스 구조 변경 (TABLE 정의 변경)

    • 대부분 속성을 추가하거나 삭제하는데 사용
  • 속성 추가

    1
    
    ALTER TABLE 테이블_이름 ADD 속성_이름 데이터_타입 [DEFAULT 기본값];
    
    • 예제

      학번 성명 학과 학년 학점
      071025 이영진 전기통신 3 A
      081517 홍길동 산업공학 2 B
      081520 강희영 컴퓨터공학 4 A
      1
      2
      3
      4
      
      // 아래 [학생] 테이블에 '주소' 속성을 추가하시오
      // (, 주소 항목은 가변길이 문자형으로 30자까지 입력될  있다.)
          
      ALTER TABLE 학생 ADD 주소 VARCHAR(30);
      
  • 속성 변경(기본값 변경)

    1
    
    ALTER TABLE 테이블_이름 ALTER 속성_이름 [SET DEFAULT 기본값];
    
  • 속성 삭제

    1
    2
    3
    
    ALTER TABLE 테이블_이름 DROP 속성_이름 [CASCADE | RESTRICT];
    // CASCADE: 연관이 있는 테이블 함께 다룸
    // RESTRICT: 연관이 있는 테이블이 있다면 작업 취소
    
    • 예제

      학번 성명 연락처 전공 학년
      072233 박봉달 010-1234-5678 컴퓨터 3
      084466 김태수 010-2345-6789 국문 3
      090522 최우수 010-4321-1357 영문 2
      053322 이영진 010-2468-3579 법학 4
      1
      2
      
      // 아래 [학적] 테이블에서 '학년' 속성을 제거하시오
      ALTER TABLE 학적 DROP 학년;
      


DROP

  • 스키마, 도메인, 테이블, 뷰, 인덱스 삭제

    1
    2
    3
    4
    5
    6
    
    DROP SCHEMA 스키마_이름 [CASCADE | RESTRICT];
    DROP DOMAIN 도메인_이름 [CASCADE | RESTRICT];
    DROP TABLE 테이블_이름 [CASCADE | RESTRICT];
    DROP VIEW _이름 [CASCADE | RESTRICT];
    DROP INDEX 인덱스_이름;
    DROP CONSTRAINT 제약조건_이름 // 제약조건 삭제
    
    • CASCADE: 참조하는 다른 모든 개체 함께 삭제 RESTRICT: 다른 개체가 참조 중일 경우 삭제 취소

    • 예제

      학번 성명 주민등록번호 전공 학년
      083577 강희영 850502-1234657 컴퓨터 3
      093505 김정미 840127-2345678 컴퓨터 2
      072719 홍길동 811022-1345678 토목 4
      100325 이영진 890628-1456789 법학 1
      1
      2
      3
      
      // 아래 [학적] 테이블을 제거하시오. 만약, 관계된 데이터가 있을 경우 함께 삭제하시오.
          
      DROP TABLE 학적 CASCADE;
      



2. 데이터 조작어(DML)

  • DB 사용자가 저장된 데이터를 실질적으로 처리하는데 사용
    • 데이터의 검색, 삽입, 수정, 삭제 등
  • 종류
    • SELECT: 테이블에서 조건에 맞는 튜플 검색
    • INSERT: 테이블에 새로운 튜플 삽입
    • DELETE: 테이블에서 조건에 맞는 튜플 삭제
    • UPDATE: 테이블에서 조건에 맞는 튜플의 내용 변경


SELECT

1
2
3
4
5
1. SELECT [DISTINCT][테이블명.]속성명1, [테이블명.]속성명2, ...
2. FROM 테이블명1, 테이블명2, ...
3. [WHERE 조건]
4. [GROUP BY 속성명1, 속성명2, ...[HAVING 조건]]
5. [ORDER BY 속성명 [ASC | DESC]];
  1. SELECT
    • DISTINCT: 중복된 튜플이 있으면 그 중 첫번째 튜플만 검색
    • 속성명: 검색해 불러올 속성(열) 및 수식
  2. FROM: 질의에 의해 검색될 데이터들을 포함하는 테이블명
  3. WHERE: 검색할 조건
  4. GROUP BY: 특정 속성을 기준으로 그룹화하여 검색할 때 그룹화 할 속성
    • HAVING: 해당 그룹에 대한 조건
  5. ORDER BY
    • 속성명: 정렬 기준이 되는 속성명
    • [ASC | DESC]: 정렬 방식(ASC:오름차순, DESC/생략:내림차순)


INSERT INTO

  • 기본 테이블에 새로운 튜플 삽입

    1
    
    INSERT INTO 테이블명([속성명1, 속성명2, ...]) VALUES (데이터1, 데이터2, ...);
    


DELETE FROM

  • 기본 테이블의 튜플 중 특정 튜플 삭제

    1
    
     DELETE FROM 테이블명 [WHERE 조건];
    


UPDATE SET

  • 기본 테이블의 튜플 중 특정 튜플의 내용 변경

    1
    
    UPDATE 테이블명 SET 속성명=데이터[, 속성명=데이터, ...][WHERE 조건];
    


조건 연산자


LIKE

  • 대표 문자를 이용해 지정된 속성의 값이 문자 패턴과 일치하는 튜플을 검색하기 위해 사용
    • %: 모든 문자
    • _: 문자 하나
    • #: 숫자 하나


BETWEEN

  • 지정된 속성이 두 숫자 사이의 값을 가지는 튜플 검색
    • eg) 생일 01/09/69~10/23/73 사이 자료만 검색 => WHERE 생일 BETWEEN #01/09/69# AND #10/22/73#


그룹 함수

  • GROUP BY절에 지정된 그룹별로 속성의 값 집계
  • COUNT/SUM/AVG/MAX/MIN(속성명): 그룹별 튜플 수/합/평균/최대/최소


집합 연산자 종류

  • UNION: 두 조회 결과 통합, 중복된 행은 한 번만 출력
  • UNION ALL: 중복된 행 전부 출력
  • INTERSECT: 두 조회 결과 중 공통된 행 출력
  • EXCEPT: 첫번째 조회 결과에서 두번째 조회 결과를 제외한 행 출력



3. 데이터 제어어(DCL)

  • 데이터의 보안, 무결성, 회복, 병행 수행 제어 등을 정의하는데 사용되는 언어
    • COMMITROLLBACK은 트랜잭션 수행과정에서 사용됨(TCL에 해당)
  • COMMIT: 명령에 의해 수행된 결과를 실제 물리적 디스크로 저장

    • 데이터베이스 조작 작업이 정상적으로 완료되었음을 알림
  • ROLLBACK: 데이터베이스 조작 작업이 비정상적으로 종료되었을 때 원래 상태로 복구

  • GRANT: 데이터베이스 사용자에게 사용 권한 부여

    1
    
      GRANT 권한_종류 ON 테이블_이름 TO 사용자 [WITH GRANT OPTION | WITH ADMIN OPTION];
    
  • REVOKE: 데이터베이스 사용자의 사용 권한 취소

    1
    
      REVOKE 권한_종류 ON 테이블_이름 FROM 사용자 [CASCADE];
    

Leave a comment