SQL

Structured Query Language
관계형 데이터베이스의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어

1. 역사[편집]

  • 관계형 데이터베이스의 튜플 해석 이론을 기반으로 만들어졌다.
  • 1970년대 초 IBM의 도널드 D. 챔벌린과 레이먼드 F. 보이스가 개발하였다.
  • 현재는 대부분의 관계형 데이터베이스 시스템에서 표준으로 채택해 사용하고 있다.
  • ANSI와 ISO의 공동작업에 의해 지속적으로 발전하고 있다.
    • SQL-86, SQL-89, SQL-92, SQL-99, SQL-2003, SQL-2011 등
    • 그러나 대부분의 DBMS는 표준을 정확히 따르기 보단 자사 특유의 문법을 같이 활용한다.

2. 특징[편집]

  • 비절차적 언어
  • 관계형 언어

3. 구분[편집]

SQL은 아래 3가지로 구분 가능

3.1. 데이터 정의 언어(DDL)[편집]

Data Definition Language
  • DB(Schema), Table, View, Index 등을 정의(생성·갱신·삭제)할 때 쓰인다.
  • 대표적인 명령: CREATE, ALTER, DROP

3.2. 데이터 조작 언어(DML)[편집]

Data Manipulation Language
  • 테이블의 데이터를 조회하고 조작(삽입·갱신·삭제)할 때 쓰인다.
  • 대표적 명령: SELECT, INSERT, DELETE, UPDATE

3.3. 데이터 제어 언어(DCL)[편집]

Data Control Language
  • 데이터의 보안, 무결성, 트랜잭션 병행제어 등을 위해 쓰인다.
  • 대표적 명령: COMMIT, ROLLBACK, GRANT, REVOKE

4. 용법[편집]

4.1. 데이터 정의 언어(DDL)[편집]

4.1.1. CREATE 구문[편집]

스키마, 도메인, 테이블, 뷰를 정의할 때 사용

4.1.2. ALTER 구문[편집]

스키마, 도메인, 테이블, 뷰를 수정할 때 사용
  • 뷰 수정
    • ALTER VIEW [대상 뷰] AS SELECT [대상 필드] FROM [대상 테이블]

4.1.3. DROP 구문[편집]

스키마, 도메인, 테이블, 뷰를 삭제할 때 사용
  • 뷰 삭제
    • DROP VIEW [대상 뷰]

4.2. 데이터 조작 언어(DML)[편집]

4.2.1. SELECT 구문[편집]

테이블의 데이터를 조회·검색할 때 사용
  • SELECT [조회할 속성] FROM [조회 대상 테이블] WHERE [조회 조건]
  • SELECT 조회할 속성
    • 속성을 따옴표로 나열하여서 적는다.
      • SELECT 이름, 나이 FROM 학생
    • 모든 속성에 대해 조회하려면 * 을 적는다. (* 는 'all'이라 읽음)
      • SELECT * FROM 학생 ('셀렉트 올 프럼 학생' 이라고 읽음)
  • FROM 조회 대상 테이블
    • 조회 대상 테이블을 따옴표로 나열하여 적는다.
  • WHERE 조회 조건
    • 일치하는 조건을 찾을 때는 속성 = '값'으로 적는다.
      • ex) SELECT * FROM 학생 WHERE 이름 = '홍길동'
    • 크거나 작은 조건을 찾을 때는 >, <, <=, >=와 같이 부등호를 사용한다.
      • ex) SELECT * FROM 학생 WHERE 나이 > '11살'
    • 다름을 표현할 때는 != 또는 <> 를 사용한다.
      • ex) SELECT * FROM 학생 WHERE 나이 <> '11살'
    • 단, NULL이 아님을 표현 할 때는 'IS NOT NULL' 이라고 적는다.
      • ex) SELECT * FROM 학생 WHERE 직업 IS NOT NULL
    • 비슷함을 표현할 때는 LIKE와 %를 사용한다.
      •  %는 WILD CARD로, %가 위치한 곳은 어떤 문자열도 올수 있다.
      • ex) SELECT * FROM 학생 WHERE 이름 LIKE '홍%
    • 조건이 여러개일 때는 AND나 OR로 잇고 괄호를 사용할 수 있다.
      • ex) SELECT * FROM 학생 WHERE 이름 = '홍길동' AND (나이 <= '19' OR 직업 = '학생')

4.2.2. INSERT 구문[편집]

테이블의 데이터를 삽입할 때 사용

4.2.3. DELETE 구문[편집]

테이블의 데이터를 삭제할 때 사용

4.2.4. UPDATE 구문[편집]

테이블의 데이터를 갱신할 때 사용
  • UPDATE [갱신 대상 테이블] SET [갱신할 속성] = [갱신 값] WHERE [검색 조건]

4.3. 데이터 제어 언어(DCL)[편집]

4.3.1. COMMIT[편집]

4.3.2. ROLLBACK[편집]

4.3.3. GRANT[편집]

권한을 부여할 때 사용
  • GRANT [행위] ON [대상] FROM [사용자]
    • ex) GRANT SELECT, INSERT, UPDATE dbname.* TO testuser@localhost identified by 'password'
    • ex) GRANT ALL PRIVILEGES ON *.* TO testuser@"%" identified by 'password'

4.3.4. REVOKE[편집]

권한을 회수할 때 사용
  • REVOKE [행위] ON [대상] FROM [사용자]
    • ex) REVOKE SELECT, INSERT, UPDATE dbname.* FROM testuser@localhost
    • ex) REVOKE ALL ON *.* FROM testuser@"%"