사전 SQL
표준

SQL

gabury1

데이터베이스에 무엇을 달라고 적어 보내는 언어입니다. 표 모양으로 쌓인 데이터를 만들고 꺼내고 고치고 지웁니다. 어느 회사가 만든 제품이 아니라 국제 표준 문서가 정해 놓은 규격입니다.

상세

SQL(Structured Query Language, 구조화 질의 언어)을 정하는 문서는 ISO/IEC 9075 입니다. 표준 자신이 "ISO/IEC 9075 defines the SQL language" 라고 적습니다. 그 언어가 다루는 범위는 데이터 구조를 정의하는 일, 그리고 그 구조에 담긴 데이터 위의 연산이라고 밝힙니다.

표준이 못 박는 것은 둘입니다. 문의 문법, 그리고 구현이 그 문을 처리했을 때 나오는 결과입니다. 규격의 첫 파트는 자기 범위를 "이 시리즈의 다른 파트가 SQL 의 문법과, 그 언어의 문을 SQL 구현이 처리한 결과를 규정할 때 쓰는 개념 틀을 기술한다" 로 적습니다. 어떤 순서로 어느 경로를 타고 그 결과에 도달할지는 규정 대상이 아닙니다. 쓰는 쪽은 원하는 것을 적고, 찾아내는 방법은 적지 않습니다.

문이 무엇으로 갈리는지는 두 번째 파트가 정합니다. 그 파트의 2016년 판은 자기가 정의하는 것을 데이터 구조와 SQL 데이터 위의 기본 연산이라고 적습니다. SQL 데이터를 만들고, 접근하고, 유지하고, 제어하고, 보호하는 기능을 제공한다고 밝힙니다. 그리고 다음 갈래의 구문과 의미를 규정한다고 적습니다.

무엇을 하는 문인가 규격이 적은 말
구조와 무결성 제약을 정하고 고치기 specifying and modifying the structure and the integrity constraints of SQL-data
데이터와 커서 위의 연산을 선언하고 호출하기 declaring and invoking operations on SQL-data and cursors
데이터베이스 언어 프로시저 선언하기 declaring database language procedures
다른 언어로 쓴 컴파일 단위 안에 문 심기 embedding SQL-statements in a compilation unit […] host language
문을 직접 호출하기 direct invocation of SQL-statements
문을 실행 시점에 준비해 돌리기 dynamic preparation and execution of SQL-statements

같은 파트는 자기가 SQL 구현 사이에서 데이터 정의와 컴파일 단위를 옮겨 다닐 수 있게 하는 수단이라고도 적습니다. 표를 정의하는 문과 데이터를 꺼내는 문이 제품마다 따로 놀지 않게 하려는 것이 이 규격의 목적입니다.

명세가 구현에 맡긴 자리가 있습니다. 2008년 판의 초록은 파트 1 과 파트 2 와 파트 11 이 이 언어의 최소 요구를 이루고, 나머지 파트는 확장을 정한다고 적습니다. 규격 전체를 다 지켜야 SQL 인 것이 아니라는 뜻입니다.

요구 강도를 적는 낱말도 다릅니다. RFC 문서가 MUST 와 SHOULD 로 가르는 자리를, SQL 표준은 적합성 어휘로 가릅니다. PostgreSQL 공식 문서는 SQL:1999 판부터 표준이 SQL-92 의 세 등급 대신 개별 기능의 큰 묶음을 정의한다고 적습니다. 그 가운데 큰 부분집합이 Core 기능이고, 적합한 SQL 구현이라면 전부 제공해야 한다고 설명합니다. 나머지는 순전히 선택 사항이라고 적습니다. 같은 문서는 Core 적합을 온전히 채우는 데 필요한 필수 기능 177 개 가운데 PostgreSQL 이 적어도 170 개를 지킨다고 밝히고, 글을 쓰는 시점에 Core SQL:2023 완전 적합을 주장하는 데이터베이스 관리 시스템은 어느 제품의 어느 판도 없다는 점을 덧붙입니다.

출처 문서

정본은 ISO(International Organization for Standardization, 국제표준화기구)와 IEC(International Electrotechnical Commission, 국제전기기술위원회)가 함께 내는 한 벌의 문서입니다. 소관 위원회는 ISO/IEC JTC 1/SC 32 Data management and interchange 입니다.

번호   ISO/IEC 9075
제목   Information technology — Database languages SQL
종류   International Standard
현행   파트 1 · 파트 2 모두 제6판. 발행일 2023-06-01. 상태 Published
분류   ICS 35.060

이 규격은 한 권이 아닙니다. 파트마다 번호와 판과 상태가 따로 붙습니다. 파트 1 이 규범 참조로 거는 목록이 현재 구성입니다.

파트 이름 무엇을 정하나
9075-1 Framework (SQL/Framework) 다른 파트가 쓰는 개념 틀과 용어와 표기
9075-2 Foundation (SQL/Foundation) 데이터 구조와 기본 연산. 규격의 본체
9075-3 Call-Level Interface (SQL/CLI) 호출 수준 인터페이스
9075-4 Persistent Stored Modules (SQL/PSM) 저장 프로시저
9075-9 Management of External Data (SQL/MED) 바깥에 있는 데이터를 다루기
9075-10 Object Language Bindings (SQL/OLB) 객체 언어 바인딩
9075-11 Information and Definition Schemas (SQL/Schemata) 정보 스키마와 정의 스키마
9075-13 SQL Routines and Types Using the Java Programming Language (SQL/JRT) 자바 루틴과 타입
9075-14 XML-Related Specifications (SQL/XML) XML 관련 규정
9075-15 Multidimensional Arrays (SQL/MDA) 다차원 배열
9075-16 Property Graph Queries (SQL/PGQ) 속성 그래프 질의

값도 파트마다 다릅니다. 파트 1 은 74 쪽이고 무료입니다. 파트 2 는 1715 쪽이고 227 스위스 프랑입니다. 규격 본문 전체를 읽으려면 돈을 내야 한다는 뜻입니다.

대체 관계를 확인하고 인용해야 합니다. 검색은 대개 폐기된 판을 먼저 물어옵니다.

ISO/IEC 9075-1:2016   Withdrawn   →  ISO/IEC 9075-1:2023 이 대체
ISO/IEC 9075-2:2016   Withdrawn   →  ISO/IEC 9075-2:2023 이 대체
ISO/IEC 9075-1:2023   Published   ·  Cor 1:2026 이 붙어 있다

현행 판도 이미 개정 절차에 들어가 있습니다. 파트 1 과 파트 2 는 2025-06-22 부로 90.92 단계, 곧 International Standard to be revised 로 표시됩니다. 파트 1 의 다음 판은 위원회 초안 단계입니다.

예시

값은 PostgreSQL 공식 튜토리얼 문서에 실린 그대로입니다.

CREATE TABLE

표 하나를 만드는 문입니다. 칸마다 이름과 타입을 적습니다.

SQL
CREATE TABLE weather (
    city            varchar(80),
    temp_lo         int,           -- low temperature
    temp_hi         int,           -- high temperature
    prcp            real,          -- precipitation
    date            date
);

varchar(80) 은 최대 80 글자짜리 가변 길이 문자열입니다. int 는 정수, real 은 실수, date 는 날짜입니다. 이 문 하나가 weather 라는 표의 모양을 정합니다.

SELECT

만들어 둔 표에서 행을 꺼내는 문입니다. 별표는 모든 칸을 뜻합니다.

SQL
SELECT * FROM weather;
     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
 San Francisco |      43 |      57 |    0 | 1994-11-29
 Hayward       |      37 |      54 |      | 1994-11-29
(3 rows)

돌려받는 것도 표입니다. Hayward 행의 prcp 칸은 비어 있습니다. 값이 없다는 뜻입니다.

꺼낼 칸을 고르고 그 자리에서 계산을 시킬 수 있습니다.

SQL
SELECT city, (temp_hi+temp_lo)/2 AS temp_avg, date FROM weather;

조건을 붙이면 행이 걸러집니다.

SQL
SELECT * FROM weather
    WHERE city = 'San Francisco' AND prcp > 0.0;
     city      | temp_lo | temp_hi | prcp |    date
---------------+---------+---------+------+------------
 San Francisco |      46 |      50 | 0.25 | 1994-11-27
(1 row)

세 행 가운데 한 행만 남았습니다. 어느 행을 어떤 순서로 훑어 이 한 행을 찾아냈는지는 이 문 안에 없습니다.

배경

1970년 Communications of the ACM 에 실린 Codd 의 논문이 문제를 이렇게 적습니다. 큰 데이터 뱅크를 쓸 사람들은 데이터가 기계 안에 어떻게 놓여 있는지를 알아야만 하는 처지에서 벗어나야 한다는 것입니다. 내부 표현이 바뀌면 단말 앞 사용자의 활동과 대부분의 응용 프로그램이 흔들렸습니다. 질의와 갱신과 보고서 요청이 달라지고 저장하는 정보의 종류가 자라면 표현을 바꿔야 할 일은 자주 생긴다고 적습니다. 그때까지의 시스템은 사용자에게 트리 구조 파일이나 그보다 조금 일반적인 네트워크 모델을 줬습니다. Codd 는 그 모델의 모자란 점을 짚고, n 항 관계에 기댄 모델과 데이터베이스 관계의 정규형, 그리고 보편 데이터 부언어라는 개념을 내놓습니다.

이 개념을 실제로 돌아가는 물건으로 만들어 보려는 시도가 IBM 안에서 시작됩니다. IBM 의 공식 역사 문서는 1973년에 프로그래머 한 무리가 산업용 수준의 구현에 착수했고 그것이 System R 프로젝트였다고 적습니다. 팀에는 Chamberlin 과 Boyce 가 있었습니다. 같은 문서는 두 사람이 SQL 을 만들었고 높은 수준의 질의를 효율적인 실행 계획으로 자동 번역하는 시스템도 함께 만들었다고 밝힙니다. 두 사람이 1974년 ACM SIGFIDET 워크숍에 낸 논문의 이름이 SEQUEL, 곧 structured English query language 입니다. 그 논문은 속박 변수와 한정 기호라는 개념을 끌어들이지 않고 표 모양 구조 위의 간단한 연산 집합을 골라냈다고 적습니다. 사용자가 만나는 것은 일관된 키워드 영어 템플릿이고, 그것이 사람이 표에서 정보를 얻는 방식을 반영한다고 설명합니다.

제품이 여럿 갈린 뒤에 문서가 나옵니다. ISO 카탈로그에 남은 첫 판은 ISO 9075:1987, 제목은 Information processing systems — Database language — SQL 입니다. 프로젝트가 위원회 작업 계획에 등록된 것은 그보다 앞섭니다. 지금은 폐기 상태이고, 그 자리를 뒤의 판들이 차례로 넘겨받았습니다.

갈래

판을 가르는 축은 문서가 몇 권으로 서 있느냐입니다. 한 권이던 것이 파트 묶음으로 쪼개졌고, 그 뒤로는 파트가 하나씩 늘어나는 방식으로 규격이 자랍니다. 카탈로그에 남은 번호와 판과 쪽수가 그 변화를 그대로 보여 줍니다.

한 권이던 판

초판은 ISO 9075:1987 입니다. 제2판 ISO/IEC 9075:1989 는 제목이 바뀝니다. Database Language SQL with integrity enhancement 입니다. 그 판이 보탠 것이 무결성 제약이라는 뜻이 제목에 그대로 적혀 있습니다. 분량은 120 쪽입니다.

제3판 ISO/IEC 9075:1992 는 제목에서 그 꼬리표를 떼고 587 쪽이 됩니다. 앞 판의 다섯 배 남짓입니다. 여기까지는 SQL 이 문서 한 권이었습니다.

파트로 쪼갠 판

1999년 판에서 한 권이 갈라집니다. ISO/IEC 9075-1:1999 Framework 와 ISO/IEC 9075-2:1999 Foundation 이 나란히 나옵니다. 둘 다 제1판입니다. 그리고 둘 다 판 이력의 앞자리에 ISO/IEC 9075:1992 를 답니다. 한 권이 두 갈래를 낳았다는 표시입니다.

쪽수도 이 자리에서 갈립니다. 개념 틀만 담은 파트 1 은 67 쪽, 본체인 파트 2 는 1121 쪽입니다. 파트 3 Call-Level Interface 는 이보다 앞선 1995년에 제1판으로 먼저 나와 있었습니다.

파트가 늘어난 판

이 뒤로는 새 영역이 새 파트로 붙습니다. 파트 9 Management of External Data 는 데이터베이스 바깥에 있는 데이터를 다루는 방법을 정하고 제1판이 2001년에 나옵니다. 파트 13 은 자바 프로그래밍 언어로 쓴 루틴과 타입을 받으려고 2002년에 제1판이 나옵니다. 파트 14 는 XML(Extensible Markup Language, 확장 가능 마크업 언어)과 관련된 규정을 모아 2003년에 제1판이 나옵니다. 파트 15 는 다차원 배열과 함께 SQL 을 쓰는 방법을 정하고 2019년에 제1판이 나옵니다.

파트가 각자 개정된다는 점이 여기서 갈립니다. 같은 해에 모든 파트가 함께 새 판을 내기도 하고, 새 파트 하나만 따로 나오기도 합니다.

현행 판

2023년 판에서 파트 16 Property Graph Queries 가 생깁니다. 이 파트는 판 이력에 앞자리가 없습니다. 제1판이고 상태는 Published 입니다. 새로 생긴 파트라는 뜻입니다. 신규 프로젝트 승인은 2019-09-13 입니다.

본체인 파트 2 는 제6판이 되어 1715 쪽입니다. 1999년 제1판의 1121 쪽에서 계속 자란 결과입니다. 그리고 이 판도 이미 개정 예정으로 표시돼 있습니다.

관련 항목

SQL 규격을 이루는 파트

SQL/Framework · SQL/Foundation · SQL/CLI · 저장 프로시저 · SQL/MED · SQL/OLB · 스키마 · SQL/JRT · SQL/XML · SQL/MDA · SQL/PGQ

SQL이 비롯된 배경

IBM · System R · SEQUEL · ACM SIGFIDET · SIGMOD

SQL에 관여한 사람

E. F. Codd · Donald D. Chamberlin · Raymond F. Boyce · Patricia Selinger

SQL 표준을 관리하는 위원회

ISO · IEC · ISO/IEC JTC 1/SC 32

SQL을 구현한 데이터베이스 제품

PostgreSQL · SQLite · MySQL

SQL 판을 가리키는 이름

SQL-92 · SQL:1999 · SQL:2003 · SQL:2016 · SQL:2023

요구 강도 표현이 다른 표준

RFC 2119 · POSIX(Portable Operating System Interface, 이식 가능 운영체제 인터페이스)

다른 이름: Structured Query Language · ISO/IEC 9075