최근 수정 시각 : 2024-11-19 14:42:12

SQL


파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
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

데이터베이스 시스템에서 자료를 처리하는 용도로 사용되는 구조적 데이터 질의 언어. 에스큐엘, 혹은 시퀄이라고 읽는다.[2]

로고는 SQL을 사용하는 회사별로 색상을 다르게 해 표현한다. 그러나 심볼 자체는 두꺼운 원반을 원통 모양으로 쌓은 모양이 공용으로 쓰인다. 여기서 두꺼운 원반은 하드디스크의 플래터를 의미한다.

2. 특징

이 직관적인 언어는 어느 데이터베이스에서나 기본으로 제공하기 때문에 배워두면 여러 곳에서 쓸데가 많다. 다만, NoSQL 계열에서는 SQL 문을 사용하지 않는다.

그러나 DBMS[3] 벤더[4]에 따라 사용하는 SQL에는 다소 차이가 있다. 그래서 ANSI SQL이라고 하는 표준 SQL 구문이 있으나 DBMS 시장을 독식하고 있는 오라클이 잘 지키지 않아서 거기다가 오픈 소스 DBMS인 MySQL도 표준 따위는 지키질 않는다. 현실은 시궁창. 최근 인기를 얻고 있는 PostgreSQL은 표준 SQL을 잘 지키고 있다. 일반적으로 사용하는 데이터베이스는 RDB(관계형 데이터베이스)[5]이며, RDB에서 데이터 처리는 데이터 모음인 테이블[6]을 기준으로 이루어지기 때문에 SQL 역시 테이블을 염두에 두고 읽으면 이해하기 쉽다.

아래 구문 설명 및 예제는 공통적으로 대문자는 키워드, 소문자는 이름이나 값 등 변수를 의미하고, 주로 사용되는 WHERE 옵션은 중괄호로 표기한다.[7] 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 /라고 생각하는 게 편하다. 아예 날쿼리를 함부로 넣지 말라고 프로시저(Procedure)라는 쿼리 템플릿 기능을 제공한다.

참고로 SQL과 PL/SQL은 다른 것이다. PL/SQL이 SQL을 포함하고 있기는 하지만 SQL을 자유자재로 쓸 정도의 실력이 되지 않았는데 PL/SQL을 공부하면 안 된다. 금융계에서는 PL/SQL을 널리 쓰니까 은행에 개발자로 취업하려면 꼭 배워야 하지만 배울 때 배우더라도 SQL을 자신 있게 다룰 수 있게 된 다음의 일이다. 진도를 빨리 빼고 싶은 욕심에 SQL도 모르는 채로 PL/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] 본래 IBM에서 개발했을 때 Structured English QUEry Language의 약자로 SEQUEL이란 이름이 붙었다가 상표권 분쟁으로 인해 SQL로 바뀐 역사가 있기 때문.출처[3] DataBase Management System, 이름만 들으면 어렵지만 단순히 이해해서 데이터베이스를 관리하는 응용 프로그램이다. (오피스를 깔면 Word, Excel, Powerpoint와 같이 익숙하게 보이는 애들도 있지만 어쩐지 존재감에서 늘 잊혀지는 Microsoft Access도 DBMS라고 할 수 있다.)[4] 대표적으로 Oracle DB, MySQL, MariaDB, MSSQL 등이 있다.[5] 데이터가 하나 이상의 열과 행의 테이블(또는 관계)에 저장되어 서로 다른 데이터구조가 어떻게 관계되어 있는지 쉽게 파악할 수 있어 관계형이라고 불린다.[6] 단일 주제에 대해 행과 열로 이루어진 데이터 집합이다. 주로 행은 데이터 원소(entity)이며 열은 데이터 원소가 가지는 속성값으로 표현된다. 표나 엑셀 시트 하나를 생각하면 이해하기 쉬운데 예를 들어 '고객'이라는 테이블이 있다고 가정하면 고객 한 명은 ID, 이름, 주소, 전화번호 등의 값을 가진다. 각각의 고객은 하나의 행을 차지하여 첫 번째 열에는 고객의 ID가, 두 번째 열에는 고객의 이름이, 세 번째 열에는 고객의 주소가...와 같이 지정되어 저장된다. 테이블에서 열의 순서는 중요하지 않으며 입출력 시 열의 이름을 정확하게 지정하여 준다.[7] 물론 옵션은 WHERE 말고도 GROUP BY, COUNT 등 목적에 따라 여러 가지 있을 수 있으나 구문 설명을 위해 WHERE절을 사용하지 않을 수 없으므로 WHERE절만 표기한다.

분류