DQL(Data Query Language)은 데이터셋에서 정보를 조회하기 위해 사용하는 SQL의 하위 집합으로 데이터셋에 저장된 데이터를 질의하고 검색 결과를 반환합니다. 데이터 질의어인 DQL은 데이터셋에서 필요한 정보를 추출하는데 필수적인 도구이며, 대표적으로 **SELECT
**문이 있습니다.
**SELECT
**문은 데이터 조작어인 DML(Data Manipulation Language)로 분류되기도 하고, DQL로 별도로 분류되기도 합니다. Google BigQuery에서는 데이터셋의 관리와 데이터의 조작을 명확하게 분리하고자 하여 **SELECT
**문을 DQL로 분류하나, 대부분의 SQL에서는 DML으로 포함시킵니다.
다음은 DQL인 **SELECT
**문과 함께 사용되는 기본 구성요소입니다.
쿼리 작성 시 **SELECT
**는 데이터를 선택, **FROM
**은 데이터를 추출하는 기능을 수행하기 때문에 **SELECT
**와 **FROM
**은 DQL의 필수 키워드라고 할 수 있습니다.
선택 구성요소인 WHERE
, GROUP BY
, HAVING
, ORDER BY
, **LIMIT
**은 데이터 필터링, 데이터 결과 갯수 제한 기능으로 조회하고자 하는 데이터를 효과적으로 탐색하여 효율성을 높여줄 수 있습니다.
SELECT # 데이터 조회
column1
, column2
FROM Table1 AS alias # 별칭(alias) 지정하여 데이터 추출
WHERE condition1 # 조건(condition1)을 지정하여 데이터 필터링
GROUP BY column[1|2] # 원하는 컬럼명 그룹화
HAVING condition2 # 필터링 된 데이터 기준으로 조건(condition2) 지정
ORDER BY column[1|2][ASC|DESC] # 원하는 컬럼명 기준 결과 정렬
LIMIT limiting number; # 데이터 결과 갯수 제한
SELECT
SELECT
는 데이터를 조회하기 위한 SQL 키워드입니다. **SELECT
**절에 조회하고자 하는 컬럼명을 리스트로 나열합니다. 모든 컬럼을 조회하려면 *
(Asterisk)을 사용합니다.
FROM
FROM
은 데이터를 탐색하거나 조작할 대상 테이블(Table)을 정의하는 구성요소입니다. **FROM
**절에 데이터셋.테이블명
형태로 데이터를 조회 할 테이블의 이름을 지정해 줍니다. 여러 테이블의 조인, 서브쿼리, 테이블 별칭 지정 등 다양한 기능을 제공합니다.
WHERE
**WHERE
**절은 행에 대한 필터링 조건을 지정하여 특정 조건을 만족하는 행만 조회하기 위한 키워드입니다. **WHERE
**절에서 비교연산자와 논리연산자를 활용하여 조건을 설정함으로써 원하는 데이터를 효과적으로 조회할 수 있습니다.
비교 연산자를 사용하여 조건을 지정할 수 있습니다. ****a=
b : a는 b와 같음 a =
b
a >
b : a는 b보다 큼
a <
b : a는 b보다 작음
a >=
b : a는 b보다 크거나 같음
a <=
b : a는 b보다 작거나 같음
a <>
b : a는 b와 같지 않음
a !=
b : a는 b와 같지 않음
논리 연산자를 사용하여 여러 조건을 결합하거나 결과를 반전시킬 수 있습니다.
a AND
b : a와 b 두 조건이 모두 TRUE
일 경우, TRUE
를 반환
a OR
b : a와 b 두 조건 중 한 조건이라도 TRUE
일 경우, TRUE
를 반환
NOT
a : 주어진 조건 a의 결과를 반대로 반환 (a가 TRUE
이면 FALSE
, a가 FALSE
이면 TRUE
)
문자열, 날짜, 수치 등의 함수를 사용하여 조건을 세밀하게 설정할 수 있습니다.
AS
AS
는 테이블명과 컬럼명을 별칭 하는 데 사용합니다. **SELECT
**절에서 컬럼명 뒤에 **AS
**키워드와 별칭을 지정하여 사용합니다. 별칭은 결과셋에서 해당 컬럼의 이름으로 사용됩니다.
**FROM
**절에서는 테이블명 뒤에 **AS
**키워드와 별칭을 지정하여 사용합니다. SELECT
, WHERE
, GROUP BY
, ORDER BY
등 구문에서 **FROM
**절에서 별칭 한 테이블을 참조 시 ‘별칭.테이블명’ 형식으로 사용합니다.
GROUP BY
**GROUP BY
**는 지정한 컬럼을 기준으로 결과를 그룹화합니다. **GROUP BY
**절에 그룹화 할 컬럼명 리스트를 “’column1, column2,..” 형식으로 순서대로 나열해 줍니다.
HAVING
**HAVING
**은 앞의 **GROUP BY
**절에서 그룹화 한 결과에 대해 특정 조건을 적용하여 필터링 하는데 사용합니다.
**HAVING
**은 그룹화 된 데이터를 필터링하고, **WHERE
**은 개별 행에 대해 필터링을 수행한다는 점에서 차이가 있습니다.
ORDER BY
ORDER BY
는 SQL 질의의 결과를 특정 컬럼 또는 여러 컬럼을 기준으로 정렬합니다. 여러 컬럼을 기준으로 정렬하고자 할 경우 “column1, column2, ..” 형식으로 컬럼명을 나열해줍니다. 첫 번째 열을 기준으로 정렬한 후, 동일한 값이 있을 경우 두 번째 열을 기준으로 추가 정렬을 수행하고, 이를 계속 반복합니다.
기본적으로 오름차순(’ASC’)으로 정렬되며, 내림차순으로 정렬하려면 ‘DESC’ 키워드를 사용합니다.
LIMIT
**LIMIT
**은 반환할 행의 최대 수를 지정하여 결과를 제한합니다. 제한할 행(limiting number)의 시작 인덱스는 0부터 시작하며, 반환할 행의 수를 지정하여 결과의 범위를 조절할 수 있습니다.