SQL(Structured Query Language)
사용자가 DBMS를 이용하여 DB를 관리하는데 사용하는 질의어(Query Language)중 하나.
SQL은 가장 대중적인 데이터베이스 언어이며 많은 DBMS에서 기본적으로 사용하고 있다.
대표적인 특징으로는 언어내에서 대소문자를 구분하지 않는다.
표준 SQL이 존재하지만 DBMS마다 조금씩 다른 방언을 가지고 있다.
SQL의 종류
DDL (Data Definition Language)
CREATE, ALTER, DROP, RENAME, TRUNCATE
의 명령어가 존재하며 주로 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어들이다.
DML (Data Manipulation Language)
SELECT
명령어를 이용해 데이터베이스를 조회할 수 있다.
INSERT, UPDATE, DELETE
명령어를 이용해 데이터를 삽입, 갱신, 삭제할 수 있다.
DCL (Data Control Language)
GRANT, REVOKE
의 명령어가 존재하며 사용자 권한을 부여하거나 회수한다.
SQL 테이블 구조
SELECT의 우선순위
1 | SELECT [컬럼명] |
우선 순위
- FROM [컬럼명] - 찾고자하는 테이블에 접근
- WHERE [테이블 조건] - 테이블에서 조건에 맞는 것만 필터링
- GROUP BY [컬럼명] - [컬럼명]을 기준으로 그룹화
- HAVING [그룹 조건] - [그룹 조건]에 맞는 그룹만 필터링
- ORDER BY [컬럼명] - [컬럼명]을 기준으로 [ASC|DESC] 정렬
SQL 집계 함수
집계 함수는 그룹화된 데이터에서 통계적 계산을 위해 사용하는 함수이다.
SQL 대표 집계 함수
- COUNT (컬럼명)
- SUM (컬럼명)
- AVG (컬럼명)
- MAX (컬럼명)
- MIN (컬럼명)
GROUP BY를 사용하지 않았다면 조회하고자 하는 테이블 전체를 지칭한다.
그룹 조건에서 사용되면 그룹을 필터링 할 수 있다.
SQL JOIN
1 | TB1 [NATURAL] [LEFT|RIGHT|FULL] [INNER|OUTER] JOIN [USING|ON] TB2 |
자연 조인 (Natural Join)
같은 이름과 타입을 가진 컬럼을 모두 이용해 두 테이블을 조인
내부 조인 (Inner Join)
- 왼쪽 오른쪽 모두 존재하는 원소만을 조인
외부 조인 (Outer Join)
- Left Outer Join
- 왼쪽 테이블에 존재하는 원소를 기준으로 오른쪽 테이블에 존재하지 않으면 Null로 조인
- Right Outer Join
- 오른쪽 테이블에 존재하는 원소를 기준으로 왼쪽 테이블에 존재하지 않으면 Null로 조인
- Full Outer Join
- Left, Right Join를 전부 한 결과와 같음
USING, ON
USING은 괄호안에 조인에 사용할 컬럼들을 집어 넣는다.
CTE (Common Table Expression)
비재귀적 CTE
1 | WITH CTE AS ( |
[쿼리문]에 해당하는 내용의 임시 테이블을 만드는 표현이다. 쿼리 실행 도중에만 메모리에 존재하게 된다.
재귀적 CTE
1 | WITH RECURSIVE CTE AS ( |
SQL 계층적인 구조를 조회할 때 주로 사용한다.
자기 자신의 집합을 반복적으로 조회하면서 결과가 나오지 않을때까지 반복한다.
종료 조건이 반드시 명확해야한다.
- (응용) 0에서 24까지 출력 (입양시각구하기 문제)
1 | WITH RECURSIVE CTE AS ( |
DBMS를 최대한 잘 활용하려면
해당 DBMS에서 지원하는 내장 함수에 대해 더 조사해본다.
코딩테스트에서는 보통 MySQL 또는 Oracle이 대중적이다.