3. SQL의 요소


db

Overview

SQL의 요소와 사용법에 대해 알아본다.


SQL 정의어(DDL)

CREATE

  • 테이블 생성
      CREATE TABLE 테이블이름
      (
          {속성이름 데이터타입 [NOT NULL][DEFAULT 값],}
          [PRIMARY KEY(속성이름),]
          [UNIQUE(속성이름),]
          [FORIGN KEY(속성이름) REFERENCES 참조테이블(속성이름)]
              [ON DELETE CASCADE | SET NULL | SET DEFAULT | NO ACTION]
              [ON UPDATE CASCADE | SET NULL | SET DEFAULT | NO ACTION],
          [CONSTRAINT 제약조건이름][CHECK(속성이름=범위값)]
      );
    
  • 스키마 정의
      CREATE SCHEMA 스키마이름 AUTHORIZATION 허가권자
    
  • 도메인 정의
      CREATE DOMAIN 도메인이름 데이터타입
      [DEFAULT 기본값]
      [CONSTRAINT 제약조건이름 CHECK(VALUE IN(범위값))];
    
  • 인덱스 정의
      CREATE [UNIQUE] INDEX 인덱스 이름
      ON 테이블이름(속성이름 [ASC|DESC])
      [CLUSTER];	//인접된 튜플들을 물리적인 그룹으로 묶어 저장 시 사용
    

ALTER

ALTER TABLE 테이블이름 ADD 속성이름 데이터타입 [DEFAULT];
ALTER TABLE 테이블이름 ALTER 속성이름 [SET DEFAULT];
ALTER TABLE 테이블이름 DROP 속성이름 [CASCADE | RESTRICT];

DROP

DROP TABLE 테이블이름 [CASCADE | RESTRICT];
DROP SCHEMA 스키마이름 [CASCADE | RESTRICT];
DROP DOMAIN 도메인이름 [CASCADE | RESTRICT];
DROP VIEW 뷰이름 [CASCADE | RESTRICT];
DROP INDEX 인덱스이름;
DROP CONSTRAINT 제약조건이름;
  • CASCADE : 참조된 테이블도 같이 삭제
  • RESTRICT : 참조중이면 삭제하지 않음

SQL 조작어(DML)

  • SELECT
      SELECT [DISTINCT] 속성이름			// DISTINCT : 검색결과에 중복되는 값이 있는 경우 한번만 표현
      FROM 테이블이름
      [WHERE 조건]					// 검색에 필요한 조건(관계연산자와 논리연산자)
      [GROUP BY 속성이름 [HAVING 그룹조건]]	// 작업의 효율을 위해 한 속성값을 그룹으로 분류하기 위함
                              // HAVING : GROUP BY 에 의해 그룹으로 분류한 후 조건 제시
      [ORDER BY 속성이름 [ASC | DESC]];		// 정렬 옵션
    
    • 추가 옵션
      SELECT SUM(점수)	// 집계함수 (SUM, AVG, MAX, MIN, COUNT)
      FROM 학생
      WHERE 학년 IN(3, 4);	// 원소함수 (IN) : OR과 같은 의미 -> 학년=3 OR 학년=4
      
    • 그룹분류 질의문
      Ex : 학생 테이블에서 점수가 85점 이상인 학생이 2명 이상인 학년 검색
      SELECT 학년
      FROM 학생
      WHERE 점수>=85
      GROUP BY 학년
      HAVING COUNT(*)>=2;
      
    • 부속(하위) 질의문
      Ex : 학생정보 테이블과 학과인원 테이블을 이용하여 ‘이영진’학생이 혹한 학과의 학생 수 검색
      SELECT 학생수
      FROM 학과인원
      WHERE 학과 = 
          (SELECT 학과
          FROM  학생정보
          WHERE 이름 = '이영진');
      
    • 부분 매치 질의문
      와일드카드 %LIKE를 사용 SELECT 이름 FROM 학생 WHERE 연락처 LIKE ‘010%’;

    • NULL 값과 비교 : IS NULL, IS NOT NULL을 사용

    • JOIN 질의문
      테이블1 JOIN 테이블2 ON 조인조건
      Ex : 학생정보 테이블과 학과인원 테이블에서 학과명이 같은 튜플을 JOIN하여 이름, 학과, 학생수를 검색
      SELECT 이름, 학과, 학생수
      FROM 학생정보 JOIN 학과인원 ON (학생정보.학과=학과인원.학과);
      FROM 학생정보 JOIN 학과인원 USING(학과);
      
  • INSERT
      INSERT INTO 테이블이름[(속성이름...)]
      VALUE (자료...);
    
  • UPDATE
      UPDATE 테이블이름
      SET 속성이름 = 변경내용
      [WHERE 조건];
    
  • DELETE
      DELETE FROM 테이블이름
      [WHERE 조건];
    

SQL 제어어(DCL)

  • COMMIT
    • 데이터베이스 내의 연산이 성공적으로 종료되어 연산에 의한 수정 내용을 지속적으로 유지하기 위한 명령어
  • ROLLBACK
    • 데이터베이스 내의 연산이 비정상적으로 종료되거나 이전 상태로 되돌리기 위해 연산내용을 취소할 때 사용
  • GRANT
    • 관리자가 사용자에게 데이터베이스에 대한 권한을 부여하기 위한 명령어
    • 표기방법
        GRANT 권한내용 ON 테이블이름 TO 사용자 [WITH GRANT OPTION];
      
  • REVOKE
    • 관리자가 사용자에게 부여했던 권한을 취소하기 위해 사용되는 명령어
    • 표기방법
        REVOKE 권한내용 ON 테이블이름 FROM 사용자 [CASCADE]
      

내장 SQL(Embedded-SQL)

  • 삽입 SQL // 일반 응용프로그램에 SQL을 삽입하여 데이터베이스 자료를 이용하고 다양한 조작을 할 수 있도록 한 것
  • 응용프로그램이 실행될 때 같이 실행되도록 호스트 프로그램 언어에 삽입된 SQL언어

특징

  • ‘EXEC SQL’문으로 시작하여 세미콜론으로 종료
  • 호스트 프로그램 실행 시 같이 실행
  • 일반 SQL문은 실행 후 결과 값으로 여러 자료를 얻을 수 있지만 내장 SQL은 하나의 튜플만 얻을 수 있음
  • 호스트 언어에 데이터베이스의 자료를 불러와 기억하기 위한 변수가 필요
  • 호스트 변수를 사용하기 위해 VEGIN DECLARE SECTION~END DECLARE SECTION을 통해 선언되어야 함
  • 호스트 변수명과 데이터베이스의 속성명은 같아도 무방
  • 호스트 변수는 구분을 위해 콜론을 변수명 앞에 붙임
  • 데이터베이스 속성의 데이터 타입과 호스트 변수의 데이터 타입은 서로 같아야 함

커서(Cursor)

  • 내장SQL에 의해 얻은 값은 하나의 튜플 단위로 처리됨에 따라 여러 개의 튜플을 그룹으로 처리하기 위해 커서를 사용
  • 커서는 실행 후 튜플들의 집합을 처리하는 데 사용되는 위치(포인터) 역할을 하며 한 번에 하나씩 순서대로 수행
  • 커서 관련 명령어
    • DECLARE : 사용할 커서를 선언하기 위한 명령어
    • OPEN : 커서를 첫 번째 튜플로 이동하기 위한 명령어
    • FETCH : 순서대로 처리하기 위해 커서를 다음 튜플로 이동하는 명령어
    • CLOSE : 처리가 완료된 후 커서를 종료하는 명령어

Stored Procedure

  • 자주 수행해야 할 SQL 처리 과정을 미리 하나의 작은 프로그램으로 작성하여 데이터베이스에 저장해 두었다가 필요한 경우 호출하여 사용하여 사용하기 위해 만들어 놓은 프로그램
  • 반복되는 작업을 매번 작성하지 않아도 되므로 작업이 효율적이며 수행시간을 단축시킬 수 있음
  • CREATE로 생성 및 DROP으로 삭제





© 2019. by RaP0d

Powered by aiden