IT 일반

SQL

역사

SQL은 IBM에서 1970년대 초에 도널드 D. 챔벌린과 레이먼드 F. 보이스가 처음 개발하였다. 초기에는 SEQUEL(씨퀄:Structured English Query Language, 구조 영어 질의어)라는 이름으로 시작하였으며, IBM의 준 관계형 데이터베이스 관리 시스템 시스템 R에 저장된 데이터를 조작하고 수신하기 위해 고안되었다. 

SQL 구문

명령어 종류

데이터베이스 언어 SQL 문법의 종류는 다음 세 가지로 대별된다.

 

명령어 문법

데이터 정의 언어

  • CREATE (데이터베이스 개체 (테이블, 인덱스, 제약조건 등)의 생성)
  • DROP (데이터베이스 개체 삭제)
  • ALTER (데이터베이스 개체 정의 변경)

데이터 정의 언어는 테이블과 인덱스 구조를 관리한다. DDL의 가장 기본적인 요소는 CREATEALTERRENAMEDROP과 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는 다양한 방법으로 현존하는 객체의 구조를 변경한다. 예를 들어, 현재의 테이블에 컬럼을 추가하거나 제한을 추가한다. 예를 들면:
ALTER TABLE My_table ADD my_field4 NUMBER(3) NOT NULL;
  • TRUNCATE는 테이블에서 모든 데이터를 빠르게 삭제한다. 내부 테이블의 데이터를 삭제하는 것이지, 테이블 자체를 삭제하는 것은 아니다. 이 과정은 보통 순차적인 COMMIT 연산을 내포한다. 따라서 이것은 롤백되지 않는다. (DELETE와는 달리 이후 롤백을 위한 로그가 기록되지 않는다.).
TRUNCATE TABLE My_table;
  • DROP은 데이터베이스에서 객체를 삭제하며, 보통 롤백을 통해 복원할 수 없다. 예를 들어:
DROP TABLE My_table;

데이터 조작 언어

  • INSERT INTO (행 데이터 또는 테이블 데이터의 삽입)
  • UPDATE ~ SET (데이터의 업데이트)
  • DELETE FROM (테이블에서 특정 행 삭제)
  • SELECT ~ FROM ~ WHERE (테이블 데이터의 검색 결과 집합의 취득)

데이터 제어 언어

  • GRANT (특정 데이터베이스 사용자에게 특정 작업을 수행 권한을 부여)
  • REVOKE (특정 데이터베이스 이용자로부터 이미 준 권한을 박탈 함.)
  • SET TRANSACTION ( 트랜잭션 모드 설정 )
  • BEGIN (트랜잭션 시작)
  • COMMIT (트랜잭션의 실행)
  • ROLLBACK (트랜잭션 취소)
  • SAVEPOINT (무작위로 롤백 지점을 설정)
  • LOCK (테이블 등의 자원을 잠금)

 

연산자

연산자 설명
= 같음
<> 또는 != 같지 않음
> 보다 큼
< 보다 작음
>= 보다 크거나 같음
<= 보다 작거나 같음
BETWEEN 일정 범위 사이
LIKE 패턴 검색
IN 컬럼의 여러 가능한 값들을 지정

조건 표현

SQL은 case/when/then/else/end 표현을 가지고 있으며, 이것은 SQL-92에서 도입되었다. 다른 프로그램 언어에서 else if와 같은 역할을 수행한다:

CASE WHEN n > 0 THEN 'positive' WHEN n < 0 THEN 'negative' ELSE 'zero' END

WHEN 조건은 소스에서 등장하는 순서에서 시험된다. 아무런 ELSE 표현식이 지정되지 않으면, ELSE NULL을 기본값으로 하게 된다.  

자료형

SQL 테이블에서 각 컬럼은 컬럼이 포함하는 자료형(data type)을 선언한다. ANSI SQL은 다음과 같은 데이터형을 포함하고 있다.

문자열

  • CHARACTER(n) 또는 CHAR(n): 고정폭 n-문자열, (필요한만큼 공백으로 채워진다.)
  • CHARACTER VARYING(n) 또는 VARCHAR(n): 가변폭 문자열 (n 문자의 최대 크기를 가진)

비트 열

  • BIT(n)n 비트의 배열
  • BIT VARYING(n)n 비트까지의 배열

  • INTEGER 와 SMALLINT
  • FLOATREAL 과 DOUBLE PRECISION
  • NUMERIC(precisionscale) 또는 DECIMAL(precisionscale)

예를 들어, 숫자 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 or TIMETZTIME과 같지만, 해당 지역의 시간대 정보를 포함하고 있다.
  • TIMESTAMP: 이것은 DATE 와 TIME이 하나의 변수로 결합된 것이다. (예, 2011-05-03 15:51:36).
  • TIMESTAMP WITH TIME ZONE or TIMESTAMPTZTIMESTAMP와 동일하지만, 해당 지역의 시간대에 대한 상세 정보를 포함하고 있다.

 

댓글

댓글 본문
작성자
비밀번호
graphittie 자세히 보기