역사
SQL은 IBM에서 1970년대 초에 처음 개발하였다. 초기에는 SEQUEL(씨퀄:Structured English Query Language, 구조 영어 질의어)라는 이름으로 시작하였으며, IBM의 준 관계형 데이터베이스 관리 시스템에 저장된 데이터를 조작하고 수신하기 위해 고안되었다.
SQL 구문
명령어 종류
데이터베이스 언어 SQL 문법의 종류는 다음 세 가지로 대별된다.
- 데이터 정의 언어 (DDL : Data Definition Language)
- 데이터 조작 언어 (DML : Data Manipulation Language)
- 데이터 제어 언어 (DCL : Data Control Language)
명령어 문법
데이터 정의 언어
CREATE는 데이터베이스에서 객체(예, 테이블)를 생성한다. 예를 들어:
CREATE TABLE My_table(
my_field1 INT,
my_field2 VARCHAR(50),
my_field3 DATE NOT NULL,
PRIMARY KEY (my_field1, my_field2)
);
ALTER
는 다양한 방법으로 현존하는 객체의 구조를 변경한다. 예를 들어, 현재의 테이블에 컬럼을 추가하거나 제한을 추가한다. 예를 들면:
ALTER TABLE My_table ADD my_field4 NUMBER(3) NOT NULL;
DROP TABLE My_table;
데이터 조작 언어
- INSERT INTO (행 데이터 또는 테이블 데이터의 삽입)
- UPDATE ~ SET (데이터의 업데이트)
- DELETE FROM (테이블에서 특정 행 삭제)
- SELECT ~ FROM ~ WHERE (테이블 데이터의 검색 결과 집합의 취득)
데이터 제어 언어
- GRANT (특정 데이터베이스 사용자에게 특정 작업을 수행 권한을 부여)
- REVOKE (특정 데이터베이스 이용자로부터 이미 준 권한을 박탈 함.)
- BEGIN (트랜잭션 시작)
- COMMIT (트랜잭션의 실행)
- ROLLBACK (트랜잭션 취소)
- SAVEPOINT (무작위로 롤백 지점을 설정)
- LOCK (테이블 등의 자원을 잠금)
연산자
연산자 | 설명 |
---|---|
= | 같음 |
<> 또는 != | 같지 않음 |
> | 보다 큼 |
< | 보다 작음 |
>= | 보다 크거나 같음 |
<= | 보다 작거나 같음 |
BETWEEN | 일정 범위 사이 |
LIKE | 패턴 검색 |
IN | 컬럼의 여러 가능한 값들을 지정 |
조건 표현
SQL은 case/when/then/else/end
과 같은 조건 분기 표현을 가지고 있다.
CASE WHEN n > 0 THEN 'positive' WHEN n < 0 THEN 'negative' ELSE 'zero' END
자료형
SQL 테이블에서 각 컬럼은 컬럼이 포함하는 자료형(data type)을 선언한다. SQL은 다음과 같은 데이터형을 포함하고 있다.
문자열
CHARACTER(n)
또는CHAR(n)
: 고정폭 n-문자열, (필요한만큼 공백으로 채워진다.)CHARACTER VARYING(n)
또는VARCHAR(n)
: 가변폭 문자열 (n 문자의 최대 크기를 가진)
수
INTEGER
와SMALLINT
FLOAT
,REAL
과DOUBLE PRECISION
NUMERIC(precision, scale)
또는DECIMAL(precision, scale)
예를 들어, 숫자 123.45는 5라는 precision(정밀도, 자리값)과 2라는 scale(소수점 이하 자릿수)을 포함하고 있다. precision은 전체 자리수를 나타내며 scale은 음이 아닌 정수이다. 0의 scale은 그 수가 정수임을 지시하는 숫자이다.
날짜와 시간
DATE
: 날짜 값 (예,2011-05-03
)TIME
: 시간 값 (예,15:51:36
). 시간 값은 보통 tick (100 nanoseconds)이다.TIME WITH TIME ZONE
orTIMETZ
:TIME
과 같지만, 해당 지역의 시간대 정보를 포함하고 있다.TIMESTAMP
: 이것은DATE
와TIME
이 하나의 변수로 결합된 것이다. (예,2011-05-03 15:51:36
).TIMESTAMP WITH TIME ZONE
orTIMESTAMPTZ
:TIMESTAMP
와 동일하지만, 해당 지역의 시간대에 대한 상세 정보를 포함하고 있다.