SQL
SQL은 데이터베이스 전용 언어로 DBMS로 데이터를 작업하기 위해 사용한다. SQL은 데이터 정의어(DDL), 데이터 조작어(DML), 데이터 제어어(DCL)로 나뉜다.
SQL 기본 문법
- 데이터 정의어(DDL): 테이블이나 관계의 구조를 생성하는데 사용. CREATE, ALTER, DROP 등
- 데이터 조작어(DML): 테이블에 데이터를 검색/삽입/수정/삭제 하는데 사용. SELECT, INSERT, DELETE, UPDATE 등
- 데이터 데어어(DCL): 데이터의 사용 권한을 관리하는데 사용. GRANT, REVOKE 등
SELECT 문의 기본적인 사용 형태는 다음과 같다.
해석하자면, Customer 테이블에서 name 속성이 '김연아'인 튜플을 집합을 찾아, 그 튜플의 phone 속성을 반환하는 것이다.
데이터 조작어 DML - 검색
SELECT문은 테이블에서 데이터를 검색하는 기본 문장이다. 이것을 '질의'라고도 한다. 질의의 기본 구성요소는 세 가지다.
- 속성 이름
- 테이블 이름
- 검색 조건
SELECT
SELECT문의 기본 문법은 다음과 같다.
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를 사용한다.
- 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는 속성값이 같은 값끼리 그룹을 만들 수 있다.
-> (a, a가 같은 행들의 갯수, a가 같은 행들 중 c속성의 총합)
HAVING절을 추가할 수 있는데, 그룹을 묶을 때 조건을 부여한다.
두개 이상의 테이블에서
조인은 두 테이블간 카티션 프로덕트를 수행해 조합 가능한 모든 튜플을 만든다. 5개 행 테이블과 10개 행 테이블을 조인하면 5 * 10 인 50개 행이 만들어진다.
하지만 카티션 프로덕트만 수행하면 발생할 수 있는 데이터간 논리 오류를 막기 위해 다음과 같이 조건을 건다.
데이터 정의어 DDL - 테이블
CREATE
테이블을 정의한다.
테이블을 좀더 고급화하자면 다음과 같다.
ON DELETE CASCADE는 외래키로 설정한 값을 기본키로 하는 다른 테이블에서 해당 튜플이 삭제된 경우 연쇄 삭제되도록 하는 설정이다. 해당 값만 NULL로 바꾼다면 SET NULL로 설정한다.
기본키로 복합키를 구성하고 싶다면 PRIMARY KEY (a, b)와 같이 PRIMARY KEY에 여러 속성을 준다.
ALTER
테이블 구조를 변경한다.
- ADD: 속성을 추가
- DROP COLUMN: 속성을 제거
- MODIFY: 속성을 변경
DROP
테이블 구조와 데이터를 모두 삭제한다. 구조는 유지하되 인스턴스만 날리는것은 DELETE이다.
데이터 조작어 DML - 삽입/수정/삭제
INSERT
테이블에 튜플을 삽입한다.
SELECT문과 함께 사용할수도 있다.
UPDATE
특정 속성값을 수정한다.
-> t1 테이블의 B속성이 'b'인 튜플의 A 속성을 'alpha'로 수정한다.
DELETE
특정 튜플을 삭제한다.
-> t1 테이블에서 a 속성값이 'alpha'인 튜플을