Jasontreks Blog

DM 보내기


Send

SQL

SQL은 데이터베이스 전용 언어로 DBMS로 데이터를 작업하기 위해 사용한다. SQL은 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 나뉜다.

SQL 기본 문법

  • 데이터 정의어(DDL): 테이블이나 관계의 구조를 생성하는데 사용. CREATE, ALTER, DROP 등
  • 데이터 조작어(DML): 테이블에 데이터를 검색/삽입/수정/삭제 하는데 사용. SELECT, INSERT, DELETE, UPDATE 등
  • 데이터 데어어(DCL): 데이터의 사용 권한을 관리하는데 사용. GRANT, REVOKE 등

SELECT 문의 기본적인 사용 형태는 다음과 같다.

SELECT phone
FROM Customer
WHERE name = '김연아'

해석하자면, Customer 테이블에서 name 속성이 '김연아'인 튜플을 집합을 찾아, 그 튜플의 phone 속성을 반환하는 것이다.


데이터 조작어 DML - 검색

SELECT문은 테이블에서 데이터를 검색하는 기본 문장이다. 이것을 '질의'라고도 한다. 질의의 기본 구성요소는 세 가지다.

  • 속성 이름
  • 테이블 이름
  • 검색 조건

SELECT

SELECT문의 기본 문법은 다음과 같다.

SELECT 속성이름
FROM 테이블 이름
WHERE 검색 조건

WHERE 절에는 조건 판별을 위해 다양한 연산자가 올 수 있다.

  • =, <, >, <=, >= : 비교연산
  • AND, OR, NOT: 논리연산
  • BETWEEN a AND b: a이상 b이하
  • IN (a, b): 오른쪽 집합에 포함 (a이거나 b이거나)
  • LIKE: 문자열 패턴/ %a%: a를 포함, a%: a로 시작, %a: a로 끝, _a%: 두번째 자리에 a

테이블을 특정 순서대로 출력하고 싶다면 ORDER BY를 사용한다.

SELECT 속성이름
FROM 테이블 이름
ORDER BY 정렬 기준
  • ORDER BY a ASC: a를 기준으로 오름차순. ASC는 생략 가능
  • ORDER BY a DESC: a를 기준으로 내림차순

집계 함수

총액, 평균과 같은 집계를 빠르게 구하기 위한 함수이다.

  • SUM: 총합
  • AVG: 평균
  • COUNT: 갯수
  • MAX: 최대값
  • MIN: 최소값

SELECT SUM(a) FROM b: b 테이블에서 a속성의 총합

GROUP BY는 속성값이 같은 값끼리 그룹을 만들 수 있다.

SELECT a, COUNT(*), SUM(b)
FROM t
GROUP BY a

-> (a, a가 같은 행들의 갯수, a가 같은 행들 중 c속성의 총합)

HAVING절을 추가할 수 있는데, 그룹을 묶을 때 조건을 부여한다.

SELECT a, COUNT(*), SUM(b)
FROM t
GROUP BY a
HAVING COUNT(*) >= 2 // a 속성이 같은 행이 2개 이상일 경우에만 그룹으로

두개 이상의 테이블에서

조인은 두 테이블간 카티션 프로덕트를 수행해 조합 가능한 모든 튜플을 만든다. 5개 행 테이블과 10개 행 테이블을 조인하면 5 * 10 인 50개 행이 만들어진다.

SELECT *
FROM t1, t2

하지만 카티션 프로덕트만 수행하면 발생할 수 있는 데이터간 논리 오류를 막기 위해 다음과 같이 조건을 건다.

SELECT *
FROM t1, t2
WHERE t1.key = t2.key // t1에서 어떤 튜플의 값이 t2에서도 해당되는 튜플끼리만 조인

데이터 정의어 DDL - 테이블

CREATE

테이블을 정의한다.

CREATE TABLE 테이블이름
(
    속성1 INTEGER,
    속성2 VARCHAR(20),
    속성3 VARCHAR(20),
    PRIMARY KEY (속성1)
)

테이블을 좀더 고급화하자면 다음과 같다.

CREATE TABLE 테이블이름
(
    속성1 INTEGER,
    속성2 INTEGER NOT NULL,
    속성3 VARCHAR(20) NOT NULL,
    속성4 VARCHAR(20) NOT NULL,
    PRIMARY KEY (속성1),
    FOREIGN KEY (속성2) REFERENCES 다른테이블(속성2) ON DELETE CASCADE
)

ON DELETE CASCADE는 외래키로 설정한 값을 기본키로 하는 다른 테이블에서 해당 튜플이 삭제된 경우 연쇄 삭제되도록 하는 설정이다. 해당 값만 NULL로 바꾼다면 SET NULL로 설정한다.

기본키로 복합키를 구성하고 싶다면 PRIMARY KEY (a, b)와 같이 PRIMARY KEY에 여러 속성을 준다.

ALTER

테이블 구조를 변경한다.

ALTER TABLE t1 ADD new1 INTEGER
  • ADD: 속성을 추가
  • DROP COLUMN: 속성을 제거
  • MODIFY: 속성을 변경

DROP

테이블 구조와 데이터를 모두 삭제한다. 구조는 유지하되 인스턴스만 날리는것은 DELETE이다.

DROP TABLE t1

데이터 조작어 DML - 삽입/수정/삭제

INSERT

테이블에 튜플을 삽입한다.

INSERT INTO t1 VALUES (a, b, c, d) // 테이블 속성 순서와 일치
INSERT INTO t1(C, D, A, B) VALUES(c, d, a, b) // 순서를 다르게 명시

SELECT문과 함께 사용할수도 있다.

INSERT INTO t1(A, B, C, D) 
SELECT A, B, C, D 
FROM t2

UPDATE

특정 속성값을 수정한다.

UPDATE t1 
SET A = 'alpha' 
WHERE B = 'b'

-> t1 테이블의 B속성이 'b'인 튜플의 A 속성을 'alpha'로 수정한다.

DELETE

특정 튜플을 삭제한다.

DELETE FROM t1
WHERE a = 'alpha'

-> t1 테이블에서 a 속성값이 'alpha'인 튜플을