3. SQL의 요소
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 질의문
테이블1JOIN
테이블2ON
조인조건
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으로 삭제