SQL 소개
SQL의 기본 개념과 데이터베이스 작업에 필요한 SQL 문장에 대해 간략히 소개합니다.
개요
SQL(Structured Query Language)은 영문명을 풀이하면 구조화된 질의 언어라는 의미입니다. 단순하게 질 의만을 수행하는 것이 아니라 데이터베이스의 모든 작업을 통제하는 비절차적(Non-procedural) 언어입니다.
비절차적 언어라는 것은 데이터베이스 사용자(이하 사용자)가 SQL을 사용해 원하는 작업의 결과만 기술 하고, 그 작업이 어떻게 수행될 것인지는 전혀 고려하지 않아도 된다는 것을 의미합니다. 사용자가 작성한 SQL 문장을 데이터베이스 안에서 어떻게 수행할 것인가는 각 시스템에 의해서 결정됩니다. 데이터베이스 시스템은 데이터를 어떻게 저장할 것인지, 메모리를 어떻게 이용할 것인지, 데이터를 어떠한 순서로 읽을 것인지 등에 대한 정책과 최적화 과정을 수립하고 있습니다.
SQL은 일반적인 데이터베이스 작업을 기술하기 위한 SQL 문장(Statement)을 정의하고 있습니다.
이처럼 SQL을 이용하여 기술할 수 있는 데이터베이스 작업은 다음과 같습니다.
스키마 객체(Schema Object)의 생성, 변경, 제거
데이터베이스 질의
데이터의 삽입, 갱신, 삭제
트랜잭션 관리 및 세션 관리 등을 포함하는 데이터베이스 관리
SQL 표준
SQL 표준은 ANSI(American National Standard Institute)와 ISO/IEC(International Standard Organization/In ternational Electrotechnical Commission)에서 공동으로 제정하였습니다.
SQL 표준 현역
현재 SQL 표준의 가장 최신 버전은 SQL-2023입니다. SQL 표준의 이전 버전은 SQL-92, SQL-99, SQL-2003, SQL-2006, SQL-2008, SQL-2011, SQL-2016, SQL-2019이 있으며, 각 버전별로 추가된 내용은 다음과 같습니다.
SQL-92 관계형 데이터베이스를 위한 표준입니다.
SQL-99 객체 지향 개념이 추가되었고, Core SQL이라는 분류 기준이 생겼습니다.
SQL-2003 XML, OLAP, Object-Retational 관련 기능과 MERGE 문 등이 추가되었습니다.
SQL-2006 XML 관련 기능들이 추가되거나 수정되었습니다.
SQL-2008 Merge 기능이 강화되었고, offset, fetch 절이 추가 되었으며, 몇몇 분석함수 등이 추가되었습니다.
SQL-2011 Window function이 강화되었고, fetch 절에 옵션이 추가되었으며, period table 등이 추가되었습니다.
SQL-2016 JSON 관련 기능과 다형성 테이블 함수 관련 기능, listagg 등이 추가되었습니다.
SQL-2019 다차원 배열 관련 기능이 추가되었습니다.
SQL-2023 Property Graph 관련 기능이 추가되었고, JSON 관련 기능이 더 추가되었습니다.
SQL 표준의 분류
SQL 표준은 SQL-2023을 기준으로 다음 Part들로 구성됩니다.
Part 1: Framework (SQL/Framework)
Part 2: Foundation (SQL/Foundation)
Part 3: Call-Level Interface (SQL/CLI)
Part 4: Persistent stored modules (SQL/PSM)
Part 9: Management of External Data (SQL/MED)
Part 10: Object language bindings (SQL/OLB)
Part 11: Information and definition schemas (SQL/Schemata)
Part 13: SQL Routines and types using the Java TM programming language (SQL/JRT)
Part 14: XML-Related Specifications (SQL/XML)
Part 15: Multidimensional arrays (SQL/MDA)
Part 16: Property Graph Queries (SQL/PGQ)
SQL 표준의 기능들은 SQL-2023을 기준으로 다음의 2가지로 구분됩니다.
Mandatory feature(Core SQL) SQL 표준을 만족하기 위한 필수적인 기능들을 의미하며, Part 2와 Part 11에 정의되어 있습니다.
Optional feature Mandatory feature를 제외한 나머지 모든 기능을 의미합니다.
Tibero의 SQL 표준 지원 현황
SQL 표준의 내용은 매우 방대하여, 제정한 모든 내용을 지원하는 상업용 데이터베이스 시스템은 하나도 없습니다. Tibero에서는 Core SQL의 대부분과 optional feature의 일부를 지원합니다.
SQL 표준의 대부분을 차지하는 Part 2의 기능들 중 Tibero가 지원하는 optional feature에는 다음과 같은 것들이 있습니다.
SQL-1999 및 그 이전부터 있었던 기능 동적 SQL, revoke 확장 기능, transaction 관련 기능, join 확장 기능, cursor 관련 기능, object type, LOB type, trigger, with clause 등
SQL-2003에 추가된 기능 merge statement, varray, multiset, 서브쿼리 관련 추가 기능, Identity column, Table function, 동적 SQL statement(PSM) 등
SQL-2008에 추가된 기능 정규 표현식 관련 함수, order by, fetch, offset 관련 기능, 분석함수(NTILE, LEAD, LAG, FIRST_VALUE, LAST_VALUE), Instead of trigger 등
SQL-2011에 추가된 기능 flashback table, routine 관련 확장 기능 등
SQL-2016에 추가된 기능 JSON 관련 기능, LISTAGG, 삼각함수, 로그함수 등
SQL 언어는 프로그램 언어에 포함되어 사용되기도 합니다. SQL 표준으로 정해진 프로그램 언어 인터페이 스로는 내장 SQL(Embedded SQL, 이하 ESQL)과 저장 프러시저(Persistent Stored Module, 이하 PSM) 가 있습니다. Tibero에서는 각각에 대해 tbESQL과 tbPSM이라는 인터페이스를 제공하고 있습니다.
tbPSM은 Tibero 서버 쪽에 저장되고 실행되는 프로그램 인터페이스입니다. tbPSM 프로그램은 서버 쪽에서 만 실행되므로 클라이언트와의 통신이 최소화되어 작업의 수행 속도를 크게 향상시킬 수 있습니다. 하지만 클라이언트 쪽의 사용자가 프로그램 실행의 과정을 검토할 수 없으므로 에러를 처리하기 위한 작업을 좀 더 세밀하게 해야 합니다.
또한, tbESQL이라는 별도의 SQL을 지원하는데, tbESQL은 프로그램 언어와 SQL의 장점을 융합한 것이 다. 일반적으로, 프로그램 언어는 매우 복잡하고 세밀한 작업을 빠르게 수행할 수 있으며, SQL은 간단한 문장만으로 데이터베이스에 대한 직접적인 작업을 표현할 수 있습니다.
참고
tbESQL에 대한 자세한 내용은 "Tibero tbESQL/C 안내서"를 참고합니다.
tbPSM에 대한 자세한 내용은 "Tibero tbPSM 안내서"를 참고합니다.
SQL 문장의 종류
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 SYNONYM
동의어를 생성
DROP SYNONYM
동의어를 제거
사용자
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
특권의 감시를 해제
참고
자세한 내용은 “데이터 정의어”를 참고합니다.
데이터 조작어
데이터 조작어(이하 DML)는 데이터베이스에 저장된 데이터에 대한 질의, 삽입, 갱신, 삭제를 수행하기 위 한 SQL 문장입니다.
Tibero에서 제공하는 DML의 명령어는 다음과 같습니다.
SELECT
데이터를 조회
INSERT
데이터를 삽입
UPDATE
데이터를 변경
DELETE
데이터를 삭제
참고
자세한 내용은 “데이터 조작어”를 참고합니다.
트랜잭션 및 세션 관리 언어
트랜잭션 관리 언어는 트랜잭션을 관리하는 SQL 문장입니다. 즉, 트랜잭션의 특성을 설정하거나 트랜잭션 을 완료하고 저장하는 등의 작업을 수행합니다.
세션 관리 언어는 세션의 특성을 설정하기 위한 SQL 문장이 다.
Tibero에서 제공하는 트랜잭션 관리 및 세션 관리 명령어는 다음과 같습니다.
ALTER SESSION
세션을 변경
COMMIT
트랜잭션을 완료하고 저장
ROLLBACK
트랜잭션을 원래 상태로 복구
SAVEPOINT
저장점을 설정
SET ROLE
사용자에게 할당된 역할을 활성화하거나 비활성화
SET TRANSACTION
트랜잭션의 특성을 설정
참고
자세한 내용은 “트랜잭션 및 세션 관리 언어”를 참고합니다.
Last updated

