최근 수정 시각 : 2025-02-12 02:20:21

SQL

파일:다른 뜻 아이콘.svg  
,
,
,
,
,
,
,
,
,
은(는) 여기로 연결됩니다.
다른 뜻에 대한 내용은 아래 문서를
IATA 코드가 SQL인 미국의 공항에 대한 내용은 샌 카를로스 공항 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
부분을
다른 뜻에 대한 내용은 아래 문서를
참고하십시오.

*
IATA 코드가 SQL인 미국의 공항:
샌 카를로스 공항
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분
*
:
문서의 번 문단
문서의 부분

프로그래밍 사이트 선정 프로그래밍 언어 순위 목록
{{{#!wiki style="margin: 0 -10px -5px; word-break: keep-all"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: 2em;"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px 0"
<rowcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++
}}}
}}}
}}}
[ Stack Overflow 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=#FFA500><tablebgcolor=#fff,#222> 2024년 Stackoverflow 설문조사 기준 인기 상위 25개 프로그래밍 언어 ||
1 JavaScript 14 Rust
2 HTML, CSS 15 Kotlin
3 Python 16 Lua
4 SQL 17 Dart
5 TypeScript 18 어셈블리어
6 Bash 19 Ruby
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Visual Basic
10 C 23 MATLAB
11 PHP 24 VBA
12 PowerShell 25 Groovy
13 Go
[ TIOBE 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=deepskyblue><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 MATLAB
2 C++ 12 Delphi / Object Pascal
3 C 13 PHP
4 Java 14 Rust
5 C# 15 Ruby
6 JavaScript 16 Swift
7 SQL 17 Assembly language
8 Visual Basic 18 Kotlin
9 Go 19 R
10 Fortran 20 Scratch
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px);"
{{{#!folding [ 21위 ~ 50위 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
21 COBOL 36 Scala
22 Classic Visual Basic 37 Transact-SQL
23 LISP 38 PL/SQL
24 Prolog 39 ABAP
25 Perl 40 Solidity
26 (Visual) FoxPro 41 GAMS
27 SAS 42 PowerShell
28 Haskell 43 TypeScript
29 Dart 44 Logo
30 Ada 45 Wolfram
31 D 46 Awk
32 Julia 47 RPG
33 Objective-C 48 ML
34 VBScript 49 Bash
35 Lua 50 Elixir
}}}}}}}}} ||
[ PYPL 2024 ]
||<tablewidth=100%><width=9999><-4><bgcolor=green><tablebgcolor=#fff,#222> 2024년 8월 기준 검색어 점유율 상위 20개 프로그래밍 언어 ||
1 Python 11 Objective-C
2 Java 12 Go
3 JavaScript 13 Kotlin
4 C# 14 MATLAB
5 C/C++ 15 PowerShell
6 R 16 VBA
7 PHP 17 Dart
8 TypeScript 18 Ruby
9 Swift 19 Ada
10 Rust 20 Lua

}}} ||
프로그래밍 언어 목록 · 분류 · 문법


1. 개요2. 특징3. 문법4. SQL의 정규화5. 외부 링크

1. 개요

#!syntax sql
SELECT "Hello, World!";
[1]
Structured Query Language: SQL

관계형(關係型, Relational) 데이터베이스 시스템에서 자료를 처리하는 용도로 사용되는 구조적 데이터 쿼리 언어.

1974년 IBM의 연구원이었던 도널드 체임벌린(Donald Chamberlin, 1944~)과 레이먼드 보이스(Raymond Boyce, 1946~1974)[2]가 개발하여 "시퀄(SEQUEL[3])"이라는 이름으로 발표한 언어가 그 시초이다. 이후 IBM에서는 상표권 문제로 SEQUEL의 이름을 SQL로 바꿨으며, 읽는 방법은 "시퀄"과 "에스큐엘"이 모두 통용된다.

공식적으로 정해진 로고는 없다. 필요한 경우 보통 데이터베이스를 상징하는 두꺼운 원반을 원통 모양으로 쌓은 형태를 쓰는 경우가 많다. 여기서 두꺼운 원반은 하드 디스크의 플래터를 의미한다.

2. 특징

SQL은 오라클 데이터베이스부터 SQLite에 이르기까지 거의 모든 관계형 데이터베이스 관리 시스템(RDBMS)에서 사용하는 언어이다. 다만 NoSQL 등 RDBMS가 아닌 데이터베이스에서는 대개 SQL을 사용하지 않는다.

그러나 DBMS 벤더(개발사)에 따라 사용하는 SQL 문법에는 다소 차이가 있다. 현재 SQL은 국제표준화기구(ISO)에 의해 ISO/IEC 9075로 표준화되어 있으나 현실에서는 아무도 이 표준을 완전히 준수하지 않으며, DBMS 개발 회사/단체마다 자신의 입맛에 맞게 조금씩 개량한 SQL 문법을 사용한다. 당장 저 위의 Hello World 쿼리조차 오라클 데이터베이스에서는 안 돌아간다. 그래도 오픈소스 DBMS 중에서 PostgreSQL은 표준 SQL을 잘 지키는 편이다.

일반적으로 사용하는 데이터베이스는 RDB(관계형 데이터베이스)[4]이며, RDB에서 데이터 처리는 데이터 모음인 테이블[5]을 기준으로 이루어지기 때문에 SQL 역시 테이블을 염두에 두고 읽으면 이해하기 쉽다.

아래 구문 설명 및 예제는 공통적으로 대문자는 키워드, 소문자는 이름이나 값 등 변수를 의미하고, 주로 사용되는 WHERE 옵션은 중괄호로 표기한다.[6] SQL은 대소문자를 구분하지 않으므로 SELECT와 select는 같은 것이다. 물론 따옴표로 인용된 '값'은 대소문자를 구분한다. 문자열을 대소문자를 구분하지 않게 하려면 명령 맨 뒤에 COLLATE NOCASE를 붙인다. 또한 대부분의 DBMS는 세미콜론(;)을 입력하지 않으면 명령어를 계속 입력하고 있다고 간주한다. GUI를 사용할 경우 GUI 프론트엔드에서 알아서 세미콜론을 붙여 주기 때문에 잘 모르고 넘어갈 수 있는데 터미널로 작업할 경우에는 이것 때문에 셸이 먹통이 되는 경우가 있다.

그리고 쿼리를 연습할 때 주의할 점이 한 가지 있는데 SQL 구문은 탐욕스럽다(Greedy)는 것이다. SQL은 가능한 넓은 범위에 걸쳐 작업하려 한다. 따라서 WHERE절이나 LIMIT 구문을 생략하면 SELECT의 경우 끝도 없이 출력하는 레코드열을 보게 될 것이고 UPDATE와 DELETE의 경우 사보타주에 가까운 광역 변조(파괴)가 일어난다. 또한 대부분의 DBMS에서는 트랜잭션 BEGIN을 먼저 걸고 작업하지 않는 한 작업을 취소(UNDO)할 수 없다. 다시 말해 BEGIN을 입력하지 않고 DELETE from table; 을 입력한 경우 ROLLBACK 명령을 입력해도 소용이 없다. 가장 치명적인 오타로 WHERE절 입력 직전에 따옴표를 닫는다는 게 바로 옆의 세미콜론을 잘못 쳐서 오타를 낸 경우. 이 경우 앞의 명령어를 모든 레코드에 대해 수행해서 테이블을 파괴해 버린 뒤에 뒤쪽 명령어를 '문법 오류'로 출력한다.

따라서 UPDATE, DELETE를 실행해 보기 전에는 반드시 BEGIN을 입력하여 트랜잭션을 시작한 뒤에 해당 쿼리를 실행하고, 실행 결과가 의도한 대로인지를 SELECT로 검증한 뒤에 의도한 결과대로 쿼리가 수행되었음을 확인하고 나서, COMMIT을 입력하여 트랜잭션을 '적용'하는 습관을 들이는 게 좋다. 만약 뭔가가 잘못되었을 경우 즉시 ROLLBACK 명령을 입력하면 BEGIN을 입력한 뒤에 행한 모든 작업이 취소된다. GUI의 경우에는 여러 쿼리를 입력했을 경우 마지막 SELECT의 결과를 보여주는 기능이 탑재되어 있다는 전제 아래(그렇지 않은 GUI 프론트엔드도 있다. 이 경우 그냥 OK 한 줄 보여주고 끝이다.) 처음부터 BEGIN; ~ ROLLBACK; 블럭을 미리 입력해 두고 작업을 하는 게 안전하다.

일단 SQL을 입력할 때에는 절대 함부로 엔터 키를 눌러선 안 된다. 지적 확인을 하는 게 도움이 될 수도 있다. 특히 WHERE절 앞뒤를 매우 꼼꼼하게 살펴야 하고 WHERE절이 없는 쿼리는 무조건 틀렸다고 간주하자. SQL은 기본값이 rm -rf /라고 생각하는 게 편하다. 많은 DBMS에서 날쿼리를 함부로 넣지 말라고 프로시저(Procedure)라는 쿼리 템플릿 기능을 제공한다.

오라클 데이터베이스에서는 SQL에 (에이다를 기반으로) 절차적 프로그래밍 기능을 더한 PL/SQL 언어를 제공한다. PL/SQL이 SQL을 포함하고 있기는 하지만 SQL을 자유자재로 쓸 정도의 실력이 되지 않았는데 PL/SQL을 공부하면 안 된다. 금융계에서는 PL/SQL을 널리 쓰니까 금융권에 개발자로 취업하려면 꼭 배워야 하지만 배울 때 배우더라도 SQL을 자신 있게 다룰 수 있게 된 다음의 일이다. 진도를 빨리 빼고 싶은 욕심에 SQL도 모르는 채로 PL/SQL에 도전했다간 기존에 공부한 데이터베이스의 이론 체계에 혼동을 일으켜 오히려 진도가 뒤로 후퇴한다. 레알 주화입마

한편 오라클이 1991년 독자 규격인 PL/SQL을 자사 데이터베이스에 도입하자, ISO는 PL/SQL에 많은 "영향"을 받아 SQL 표준안에 SQL/PSM(Persistent Stored Modules)을 추가하였다. MariaDBMySQL 등의 프로시저 기능은 SQL/PSM을 기반으로 하고 있지만 완전히 동일하진 않다. PostgreSQL은 PL/SQL과 SQL/PSM의 혼종인 PL/pgSQL을 사용하며, 마이크로소프트의 SQL Server는 Transact-SQL이라는 언어를 사용한다.

3. 문법

파일:상세 내용 아이콘.svg   자세한 내용은 SQL/문법 문서
번 문단을
부분을
참고하십시오.

4. SQL의 정규화

파일:상세 내용 아이콘.svg   자세한 내용은 SQL/정규화 문서
번 문단을
부분을
참고하십시오.

5. 외부 링크

  • Oracle Live SQL: 프로그램 설치 없이 웹 브라우저상에서 코드를 학습하고 테스트해 볼 수 있는 사이트.
  • SQLite의 알려지지 않은 이야기: SQLite 개발자 Richard Hipp의 인터뷰 팟캐스트 요약. 개발 역사, 오픈 소스, 컨소시움 설립, 테스트 등 다양하고 유익한 개발 후기 기록.


[1] Oracle 환경에서는 해당 방식으로 입력 시 ORA-00923 오류 출력. Oracle 기준으로는 모든 쿼리에 FROM이 필숫값이므로, #!syntax sql SELECT 'Hello, World!' FROM DUAL;로 입력해야 함.[2] 데이터베이스 공부를 조금 하다 보면 나오는 "보이스-코드 정규형(Boyce-Codd Normal Form; BCNF)"에서 "보이스"가 이 사람 이름이다. 1974년에 SQL과 BCNF를 공동 개발, 발표하면서 27세라는 젊은 나이에 컴퓨터공학의 역사에 족적을 남겼으나, 같은 해에 동맥류가 발병하며 요절하였다.[3] A STRUCTURED ENGLISH QUERY LANGUAGE(구조화된 영어 질의 언어). 과거에 사용되었던 QUEL이라는 언어의 후속작(sequel)이라는 뜻으로 지은 언어유희역 두문자어 이름이라는 설도 있다.[4] 데이터가 하나 이상의 열과 행의 테이블(또는 관계)에 저장되어 서로 다른 데이터구조가 어떻게 관계되어 있는지 쉽게 파악할 수 있어 관계형이라고 불린다.[5] 단일 주제에 대해 행과 열로 이루어진 데이터 집합이다. 주로 행은 데이터 원소(entity)이며 열은 데이터 원소가 가지는 속성값으로 표현된다. 표나 엑셀 시트 하나를 생각하면 이해하기 쉬운데 예를 들어 '고객'이라는 테이블이 있다고 가정하면 고객 한 명은 ID, 이름, 주소, 전화번호 등의 값을 가진다. 각각의 고객은 하나의 행을 차지하여 첫 번째 열에는 고객의 ID가, 두 번째 열에는 고객의 이름이, 세 번째 열에는 고객의 주소가...와 같이 지정되어 저장된다. 테이블에서 열의 순서는 중요하지 않으며 입출력 시 열의 이름을 정확하게 지정하여 준다.[6] 물론 옵션은 WHERE 말고도 GROUP BY, COUNT 등 목적에 따라 여러 가지 있을 수 있으나 구문 설명을 위해 WHERE절을 사용하지 않을 수 없으므로 WHERE절만 표기한다.

분류