SQL

(♥ 0)

분류


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




1. 개요
2. 특징
5. 외부 링크


1. 개요[편집]


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
  "display: none; display: 문단=inline"를
의 [[SQL/문법#s-"display: inline; display: 앵커=none@"
@앵커@@앵커_1@ 부분을
참고하십시오.



4. SQL의 정규화[편집]


파일:상세 내용 아이콘.svg
  "display: none; display: 문단=inline"를
의 [[SQL/정규화#s-"display: inline; display: 앵커=none@"
@앵커@@앵커_1@ 부분을
참고하십시오.



5. 외부 링크[편집]


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


파일:CC-white.svg 이 문서의 내용 중 전체 또는 일부는 2024-08-20 23:11:29에 나무위키 SQL 문서에서 가져왔습니다.


[1] Oracle 환경에서는 해당 방식으로 입력시 ORA-00923 오류 출력. Oracle 기준으로는 모든 쿼리에 FROM이 필수값이므로,
로 입력해야함
[2] 일반적으로 단순히 '에스 큐 엘'이라고 읽지만, 영미권에서 '스퀼' 이라고 읽기도 한다. 우연하게도(...) 영단어 squeal은 속어에서 '(경찰에)불다', '자백하다' 라는 뜻으로 쓰인다.[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절만 표기한다.