-: 한 줄 주석/* /: 여러 줄 주석테이블 구조 정의 언어
CREATE TABLE PK 지정 가능 DW에서는 PK uniqueness가 지켜지지 않음CREATE TABLE raw_data.table_1 (
column_1 int,
column_2 varchar(32) primary key,
column_3 varchar(32)
);CTAS CREATE TABLE schema_name.table_name AS SELECT 의 약자 SELECT문을 이용하여 간단하게 테이블을 생성과 동시에 내용을 채울 수 있다.CREATE TABLE raw_data.table_2 AS
SELECT column_1, column_2
FROM raw_data.table_1;DROP TABLE 존재하지 않는 테이블 삭제시 에러 발생 → IF EXISTS 를 뒤에 추가해 해결 가능DELETE FROM DROP TABLE 은 DDL로 테이블의 존재를 삭제DELETE FROM 은 DML로 테이블의 레코드를 삭제 (조건 삭제 가능)ALTER TABLEALTER TABLE table_name ADD COLUMN field_name field_type; ALTER TABLE table_name RENAME field_name TO new_field_name; ALTER TABLE table_name DROP COLUMN field_name; ALTER TABLE table_name RENAME TO new_table_name;테이블 데이터 조작 언어
SELECT column_1 FROM table_name
테이블에서 레코드, 필드를 읽어옴
WHERE
레코드 선택 조건을 지정
GROUP BY
그룹별 집계
ORDER BY
레코드를 정렬
다수의 테이블을 조인해서 사용하기도 한다.
SELECT COUNT(column_1), column_2
FROM raw_data.table1
WHERE column_1 >= 3
GROUP BY column_2
HAVING COUNT(column_1) > 0
ORDER BY 1 DESC
LIMIT 5;
INSERT INTOUPDATE FROMDELETE FROMTRUNCATEDELETE FROM 은 조건 지정이 가능, 속도 느림TRUNCATE 는 조건 지정 불가능, 모든 레코드 삭제, 속도 빠름중복된 레코드가 있는가?
최근 데이터가 있는가? (freshness)
PK uniqueness가 지켜지는가?
값이 비어있는 컬럼이 있는가?
⇒ unit test의 형태로 만들어 매번 쉽게 체크 가능
테이블에서 레코드를 읽어온다.
WHERE* 를 넣으면 모든 컬럼을 선택한다.LIMITORDER BY 와 자주 함께 사용된다.DISTINCTGROUP BY 와 함께 사용된다. NULL은 집계되지 않는다.CASE WHENCASE
WHEN 조건1 THEN 값1
WHEN 조건2 THEN 값2
ELSE 값3
END AS 필드이름NULLis (not) NULL 을 사용한다. (등호 사용 X)field1 is NULL
field1 is not NULL조건을 만족하는 레코드의 수 반환
NULL은 카운트되지 않음
SELECT COUNT(1) FROM count_testSELECT COUNT(0) FROM count_testSELECT COUNT(NULL) FROM count_testSELECT COUNT(value) FROM count_testSELECT COUNT(DISTINCT value) FROM count_test
⇒ 어떤 값을 세는지에 주의
레코드 선택 조건 지정
IN · NOT INWHERE channel IN ('Google', 'Youtube')
WHERE channel = 'Google' OR channel = 'Youtube'LIKE , ILIKELIKE 는 대소문자를 구별하여 매칭ILIKE 는 대소문자를 구별하지 않고 매칭 NOT을 앞에 붙일 수 있다.WHERE channel LIKE 'G%'
WHERE channel LIKE '%o%'BETWEENLEFT(str, N)REPLACE(str, exp1, exp2)UPPER(str)LOWER(str)LEN(str)LPAD(str, N, exp) , RPAD(str, N, exp)SUBSTRING(str, N1, N2)레코드를 특정 컬럼을 기준으로 정렬
ASC 는 오름차순(default), DESC 는 내림차순ASC / DESC 는 컬럼 뒤에 붙여준다.NULL FIRST / NULL LAST 를 통해 지정이 가능하다.CONVERT_TIMEZONE('America/Los_Angeles', ts)DATE_TRUNC(datepart, time_column)EXTRACT(datepart from time_column) , DATE_PART(interval, time_column)EXTRACT 는 OracleDATE_PART 는 PostgreSQLDATEDIFF(seperator, start_time_column, end_time_column)DATEADD(datepart, N, time_column)GET_CURRENTTO_CHAR / TO_TIMESTAMPcolumn_name::new_typeCAST(column_name as new_type)