SQL

SQL(, 또는 , , 구조화 질의어, S-Q-L)는 관계형 데이터베이스 관리 시스템(RDBMS)의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어이다. 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안되었다. 많은 수의 데이터베이스 관련 프로그램들이 SQL을 표준으로 채택하고 있다.
역사.
SQL은 IBM에서 1970년대 초에 도널드 D. 챔벌린과 레이먼드 F. 보이스가 처음 개발하였다. 초기에는 SEQUEL(Structured English Query Language, 구조 영어 질의어)라는 이름으로 시작하였으며, IBM의 준 관계형 데이터베이스 관리 시스템 시스템 R에 저장된 데이터를 조작하고 수신하기 위해 고안되었다. SEQUEL은 나중에 SQL로 바뀌었는데, 그 까닭은 SEQUEL이 영국의 호커 시들리 항공사의 상표였기 때문이다.
설계.
SQL은 관계형 모델과 그것의 튜플 해석이라는 이론적 기초로부터 파생되었다. 해당 모델에서 테이블은 튜플의 집합이지만, SQL에서는 테이블과 쿼리 결과는 행(row)의 목록이다. 같은 행은 여러 번 발생할 수 있고 행의 순서는 쿼리에 의해 나타난다. (예: LIMIT 절)
SQL 구문.
명령어 종류.
데이터베이스 언어 SQL 문법의 종류는 다음 세 가지로 대별된다.
기타 이러한 명령의 적용 범위를 보완하기 위한 기능으로 SQL 문을 실행 시에 해석하는 "동적 SQL"과 내장 SQL에 대한 지침이 포함되어 있다. 관계형 데이터베이스 관리시스템(RDBMS) 이전의 데이터베이스 관리 시스템(DBMS)에서 이들은 반드시 동일한 언어가 아니었다. 데이터 정의 언어는 존재하지 않고, 모든 전용 명령에 매개 변수를 사용하여 실행하는 구현도 존재했다.
명령어 문법.
데이터 정의 언어.
데이터 정의 언어는 테이블과 인덱스 구조를 관리한다. DDL의 가장 기본적인 요소는 CREATE, ALTER, RENAME, DROP과 TRUNCATE 구문이다:
CREATE는 데이터베이스에서 객체(예, 테이블)를 생성한다. 예를 들어:
CREATE TABLE My_table(
 my_field1 INT,
 my_field2 VARCHAR(50),
 my_field3 DATE NOT NULL,
 PRIMARY KEY (my_field1, my_field2)
ALTER TABLE My_table ADD my_field4 NUMBER(3) NOT NULL;
TRUNCATE TABLE My_table;
DROP TABLE My_table;
커서 정의 및 사용.
‘커서’는 SELECT 문장 등에 의한 데이터베이스 검색에 의한 검색 실행 결과를 한 줄씩 검색하고, 처리하기 위해 데이터베이스 서버 측의 결과 집합과 행 획득 위치를 나타내는 개념을 말한다. 커서의 정의와 그 작업은 주로 응용 프로그램 등의 절차적 언어에서의 SQL 실행시 사용한다.
조건 표현.
SQL은 codice_4 표현을 가지고 있으며, 이것은 SQL-92에서 도입되었다. 일반적인 형식에서, 이것은 SQL 표준에서 "searched case"라고 불리며, 다른 프로그램 언어에서 else if와 같은 역할을 수행한다:
CASE WHEN n &gt; 0 THEN 'positive' WHEN n &lt; 0 THEN 'negative' ELSE 'zero' END
codice_5 조건은 소스에서 등장하는 순서에서 시험된다. 아무런 codice_6 표현식이 지정되지 않으면, codice_7을 기본값으로 하게 된다. switch statement을 미러링하는 약어 구문도 존재한다. 이것은 SQL 표준에서 "simple case"라고 불린다:
CASE n WHEN 1 then 'one' WHEN 2 THEN 'two' ELSE 'i cannot count that high' END
이 구문은 NULL과 비교하는 통상적인 경고를 이용하여 내포적 특질 비교를 이용한다.
오라클 SQL 구문에서 후자는 codice_8 구문으로 축약될 수 있다:
SELECT DECODE(n, 1, "one", 2, "two", "i cannot count that high") FROM some_table;
마지막 값은 default이다; 아무것도 지정되지 않으면, codice_9이 기본값이 된다. 그러나 표준 "simple case"와는 달리 오라클의 codice_8는 2개의 codice_9을 서로 동일한 것으로 간주한다.
자료형.
SQL 테이블에서 각 컬럼은 컬럼이 포함하는 자료형(data type)을 선언한다. ANSI SQL은 다음과 같은 데이터형을 포함하고 있다.
수.
예를 들어, 숫자 123.45는 5라는 precision(정밀도, 자리값)과 2라는 scale(소수점 이하 자릿수)을 포함하고 있다. precision은 특정 진법(이진법 또는 십진법)에서 중요한 10자리수를 결정하는 양의 정수값이다. scale은 음이 아닌 정수이다. 0의 scale은 그 수가 정수임을 지시하는 숫자이다. S 자릿수를 가진 10진법에서, 정확한 숫자값은 10S로 나눈 중요한 10진법 정수값이다.
SQL은 숫자, 날짜를 반올림해주는 codice_30 (인포믹스, DB2, PostgreSQL, 오라클 그리고 MySQL에서) 또는 codice_31 (인포믹스, SQLite, Sybase, Oracle, PostgreSQL and Microsoft SQL Server) 함수를 제공한다.
날짜와 시간.
SQL은 날짜 / 시간 변수를 생성하는 여러 개의 함수를 date / time 열 (codice_46, codice_47, codice_48)로부터 제공한다. 또한 그러한 각각의 변수 항목 (예를 들면, 초)을 통해 추출할 수도 있다. 현재 데이터베이스 서버 시스템의 날짜 / 시간은 codice_49와 같은 함수를 통해 호출할 수 있다.
SQL 기타.
동적 SQL.
동적 SQL은 일반적으로 SQL문을 RDBMS에 보낼 때마다 데이터베이스 엔진에서 실행 가능한 내부 중간 코드로 번역하는 작업을 미리 수행하여 변환된 SQL 코드를 재사용하여, SQL 분석 오버헤드를 줄이고, SQL 문을 소스 코드로 고정하지 않고 데이터베이스에 액세스할 때마다 구문을 다시 할 경우 유용하다. 데이터 조작 언어(DML)도 물론 수행할 수 있지만, 데이터 정의 언어 (DDL)와 같이 데이터베이스 제품의 기능 업데이트에 의해 새로운 명령이 추가되는 것은 전처리 해당 작업이 부담이 되기 때문에, 대부분의 데이터베이스 제품에서는 DDL 문은 동적 SQL에서 실행하는 것이 일반적이다.
임베디드 SQL.
임베디드 SQL(또는 내장 SQL)은 원래 커서가 포함된 SQL에서 호스트 언어에서 결과 집합을 얻기 위해 더 편리한 방법으로 고안된 것이다. 데이터베이스와 통신하기 위한 자원 할당 확보와 개방한 줄에 호스트 언어의 반복으로 가져 오기위한 명령 (FETCH) 등이 있다.
3값 논리.
SQL에서 사용되는 논리값은 컴퓨터 세계에서 가장 널리 이용되는 ‘2값 논리’(TRUE, FALSE) 대신 ‘3값 논리’(TRUE, FALSE, UNKNOWN)이 있다.
표준화.
SQL 표준은 다음과 같은 많은 개정을 거쳤다:
표준 구조.
ISO/IEC 9075은 ISO/IEC 13249 SQL 멀티미디어 및 응용 프로그램 패키지로 보충된다.