본 장에서는 SQL의 기본 개념과 데이터베이스 작업에 필요한 SQL 문장에 대해 간략히 소개한다.
SQL(Structured Query Language)은 영문명을 풀이하면 구조화된 질의 언어라는 의미이다. 단순하게 질의만을 수행하는 것이 아니라 데이터베이스의 모든 작업을 통제하는 비절차적(Non-procedural) 언어이다.
비절차적 언어라는 것은 데이터베이스 사용자(이하 사용자)가 SQL을 사용해 원하는 작업의 결과만 기술하고, 그 작업이 어떻게 수행될 것인지는 전혀 고려하지 않아도 된다는 것을 의미한다. 사용자가 작성한 SQL 문장을 데이터베이스 안에서 어떻게 수행할 것인가는 각 시스템에 의해서 결정된다. 데이터베이스 시스템은 데이터를 어떻게 저장할 것인지, 메모리를 어떻게 이용할 것인지, 데이터를 어떠한 순서로 읽을 것인지 등에 대한 정책과 최적화 과정을 수립하고 있다.
SQL은 일반적인 데이터베이스 작업을 기술하기 위한 SQL 문장(Statement)을 정의하고 있다. 이처럼 SQL을 이용하여 기술할 수 있는 데이터베이스 작업은 다음과 같다.
스키마 객체(Schema Object)의 생성, 변경, 제거
데이터베이스 질의
데이터의 삽입, 갱신, 삭제
트랜잭션 관리 및 세션 관리 등을 포함하는 데이터베이스 관리
SQL 표준은 ANSI(American National Standard Institute)와 ISO/IEC(International Standard Organization/International Electrotechnical Commission)에서 공동으로 제정하였다.
SQL 표준은 1992년과 1999년에 각각 버전 2와 버전 3이 제정되었다. 1992년에 발표된 SQL 표준은 SQL2 또는 SQL-92라고 불리며, 관계형 데이터베이스를 위한 언어이다. 1999년에 제정된 SQL 표준은 SQL3 또는 SQL-99라고 불리며, SQL2에 객체지향 개념을 추가하여 확장한 객체관계형 데이터베이스 언어이다. SQL-2003에는 XML, OLAP, Object-Retational 관련 기능과 MERGE 문 등이 추가되었다.
SQL 표준은 구현 범위에 따라 몇 개의 단계에 걸쳐 제정된다.
SQL-92는 다음과 같이 3단계로 구분된다.
Entry Level
Entry Level은 SQL-92 내용의 80% 이상을 포함한다.
Intermediate Level
Entry Level을 포함하고, 여기에 덧붙여 추가적인 내용을 포함하고 있다.
Full Level
SQL-92 내용의 전체를 포함한다.
SQL 표준의 내용은 매우 방대하여, 제정한 모든 내용을 지원하는 상업용 데이터베이스 시스템은 하나도 없다. Tibero에서는 Entry Level의 대부분과 Intermediate Level의 일부를 지원한다.
SQL 언어는 프로그램 언어에 포함되어 사용되기도 한다. SQL 표준으로 정해진 프로그램 언어 인터페이스로는 내장 SQL(Embedded SQL, 이하 ESQL)과 저장 프러시저(Persistent Stored Module, 이하 PSM)가 있다. Tibero에서는 각각에 대해 tbESQL과 tbPSM이라는 인터페이스를 제공하고 있다.
tbPSM은 Tibero 서버 쪽에 저장되고 실행되는 프로그램 인터페이스이다. tbPSM 프로그램은 서버 쪽에서만 실행되므로 클라이언트와의 통신이 최소화되어 작업의 수행 속도를 크게 향상시킬 수 있다. 하지만 클라이언트 쪽의 사용자가 프로그램 실행의 과정을 검토할 수 없으므로 에러를 처리하기 위한 작업을 좀 더 세밀하게 해야 한다.
또한, tbESQL이라는 별도의 SQL을 지원하는데, tbESQL은 프로그램 언어와 SQL의 장점을 융합한 것이다. 일반적으로, 프로그램 언어는 매우 복잡하고 세밀한 작업을 빠르게 수행할 수 있으며, SQL은 간단한 문장만으로 데이터베이스에 대한 직접적인 작업을 표현할 수 있다.
1.tbESQL에 대한 자세한 내용은 "Tibero tbESQL/C 안내서"를 참고한다.
2.tbPSM에 대한 자세한 내용은 "Tibero tbPSM 안내서"를 참고한다.
SQL 표준에서 정의하고 있는 SQL 문장은 크게 다음과 같이 세 가지로 나눌 수 있다.
데이터 정의어(Data Definition Language)
데이터 조작어(Data Manipulation Language)
데이터 제어어(Data Control Language)
본 안내서에서는 데이터 제어어에 포함되는 COMMIT, ROLLBACK 등의 SQL 명령어를 트랜잭션 및 세션 관리 언어의 일부로 설명한다. 따라서 전체 데이터 제어어에 대한 내용은 관련 문서를 참고하기 바란다.
데이터 정의어(이하 DDL)는 데이터 간에 관계를 정의하여 데이터베이스 구조를 설정하는 SQL 문장이다. 기본적으로 스키마 객체를 생성, 변경, 제거하기 위해 사용된다. 대부분의 스키마 객체에 대해서 생성, 변경, 제거를 위한 CREATE, ALTER, DROP 명령이 모두 존재하지만, 일부 객체는 한두 가지 명령어밖에 존재하지 않는다.
DDL은 그 외에 특권(Privilege)과 역할(Role)을 부여하고 회수하기 위한 명령어와 이러한 특권과 역할을 감시하기(Auditing) 위한 명령어, 테이블 객체에 대한 최적화(Optimization)를 위한 명령어를 포함한다.
Tibero에서 제공하는 DDL은 다음과 같다.
구분 | 명령어 | 설명 |
---|---|---|
데이터베이스 | CREATE DATABASE | 데이터베이스를 생성한다. |
ALTER DATABASE | 데이터베이스를 변경한다. | |
테이블 | CREATE TABLE | 테이블을 생성한다. |
ALTER TABLE | 테이블을 변경한다. | |
DROP TABLE | 테이블을 제거한다. | |
테이블스페이스 | CREATE TABLESPACE | 테이블스페이스를 생성한다. |
ALTER TABLESPACE | 테이블 스페이스를 변경한다. | |
DROP TABLESPACE | 테이블 스페이스를 제거한다. | |
인덱스 | CREATE INDEX | 인덱스를 생성한다. |
ALTER INDEX | 인덱스를 변경한다. | |
DROP INDEX | 인덱스를 제거한다. | |
뷰 | CREATE VIEW | 뷰를 생성한다. |
ALTER VIEW | 뷰를 변경한다. | |
DROP VIEW | 뷰를 제거한다. | |
동의어 | CREATE SYNOMYM | 동의어를 생성한다. |
DROP SYNOMYM | 동의어를 제거한다. | |
사용자 | CREATE USER | 사용자를 생성한다. |
ALTER USER | 사용자를 변경한다. | |
DROP USER | 사용자를 제거한다. | |
함수 | CREATE FUNCTION | 함수를 생성한다. |
ALTER FUNCTION | 함수를 변경한다. | |
DROP FUNCTION | 함수를 제거한다. | |
프러시저 | CREATE PROCEDURE | 프러시저를 생성한다. |
ALTER PROCEDURE | 프러시저를 변경한다. | |
DROP PROCEDURE | 프러시저를 제거한다. | |
타입 | CREATE TYPE | 타입을 생성한다. |
ALTER TYPE | 타입을 변경한다. | |
DROP TYPE | 타입을 제거한다. | |
특권 | GRANT | 사용자에게 특권을 부여한다. |
REVOKE | 사용자에게 특권을 회수한다. | |
역할 | CREATE ROLE | 역할을 생성한다. |
ALTER ROLE | 역할을 변경한다. | |
DROP ROLE | 역할을 제거한다. | |
객체 | RENAME | 테이블, 뷰, 동의어, 시퀀스 등의 스키마 객체의 이름을 변경한다. |
감시 | AUDIT | 특권의 사용을 감시한다. |
NOAUDIT | 특권의 감시를 해제한다. |
자세한 내용은 “제7장 데이터 정의어”를 참고한다.
데이터 조작어(이하 DML)는 데이터베이스에 저장된 데이터에 대한 질의, 삽입, 갱신, 삭제를 수행하기 위한 SQL 문장이다.
Tibero에서 제공하는 DML의 명령어는 다음과 같다.
명령어 | 설명 |
---|---|
SELECT | 데이터를 조회한다. |
INSERT | 데이터를 삽입한다. |
UPDATE | 데이터를 변경한다. |
DELETE | 데이터를 삭제한다. |
자세한 내용은 “제8장 데이터 조작어”를 참고한다.
트랜잭션 관리 언어는 트랜잭션을 관리하는 SQL 문장이다. 즉, 트랜잭션의 특성을 설정하거나 트랜잭션을 완료하고 저장하는 등의 작업을 수행한다. 세션 관리 언어는 세션의 특성을 설정하기 위한 SQL 문장이다.
Tibero에서 제공하는 트랜잭션 관리 및 세션 관리 명령어는 다음과 같다.
명령어 | 설명 |
---|---|
ALTER SESSION | 세션을 변경한다. |
COMMIT | 트랜잭션을 완료하고 저장한다. |
ROLLBACK | 트랜잭션을 원래 상태로 복구한다. |
SAVEPOINT | 저장점을 설정한다. |
SET ROLE | 사용자에게 할당된 역할을 활성화하거나 비활성화한다. |
SET TRANSACTION | 트랜잭션의 특성을 설정한다. |
자세한 내용은 “제9장 트랜잭션 및 세션 관리 언어”를 참고한다.