SQL 기본
기본사용법
- 다수의 SQL문을 실행하다면 세미콜론으로 분리 필요
- SQL문1; SQL문2; SQL문3;
- "--": 인라인 한줄짜리 주석
- "/--/: 여러 줄에 걸쳐 사용 가능한 주석
규칙
- 키워드의 대문자 사용, 테이블, 필드 이름 정하기 등 팀 프로젝트라면 팀에서 사용하는 규칙을 만들고 따르는 것이 중요
- 단수형 User vs Users 복수형
- _ vs CamelCasing -> user_session_channel vs UserSessionChannel
SQL DDL(테이블 구조 정의 언어)
CREATE TABLE
- Primary key 속성을 지정할 수 있으나 무시됨
- Big Data 데이터웨어하우스에서는 지켜지지 않음
- CTAS: CREATE TABLE table_name AS SELECT
- vs CREATE TABLE and then INSERT
CREATE TABLE raw_data.user_session_channel(
userid int,
sessionid varchar(32) primary key,
channel varchar(32)
);
- CTAS를 통해 선택한 자료를 새로만들 테이블을 만들면서 데이터까지 가져올 수 있음
DROP TABLE
- DROP TABLE table_name;
- 없는 테이블을 지우려고 하는 경우 에러를 냄
- DROP TABLE IF EXISTS table_name;
- 테이블이 있을 때만 DROP 명령 수행함
- vs. DELETE FROM
- DELETE FROM은 조건에 맞는 레코드들을 지움(테이블 자체는 존재)
ALTER TABLE
- 새로운 컬럼 추가: ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;
- 기존 컬럼 이름 변경: ALTER TABLE 테이블이름 RENAME 현재필드이름 to 새필드이름;
- 기존 컬럼 제거: ALTER TABLE 테이블이름 DROP COLUMN 필드이름;
- 테이블 이름 변경:ALTER TABLE 현재테이블이름 RENAME to 새테이블이름;
SQL DML(테이블 데이터 조작 언어)
레코드 수정 언어
- INSER INTO: 테이블에 레코드를 추가하는데 사용(인서트는 오래결려서 copy 기능을 많이 사용)
- UPDATE FROM: 테이블 레코드의 필드 값 수정
- DELETE FROM: 테이블에서 레코드를 삭제
- vs. TRUNCATE
레코드 질의 언어: SELECT
- SELECT FROM: 테이블에서 레코드와 필드를 읽어오는데 사용
- WHERE: 레코드 선택 조건을 지정
- GROUP BY: 정보를 그룹 레벨에서 뽑는데 사용하기도 함
- DAU, WAU, MAU 계산은 GROUP BY를 필요로 함
- ORDER BY: 레코드 순서를 결정
- 보통 다수의 테이블을 조인해서 사용함
데이터 처리 주의사항
- 항상 데이터를 믿을 수 있는지 의심할 것!
- 실제 레코드를 몇 개 살펴보는 것 만한 것이 없음 -> 노가다
- 중복된 레코드들 체크하기
- 최근 데이터의 존재 여부 체크하기
- 값이 비어있는 컬럼들이 있는지 체크하기
- 위의 체크는 코딩의 UNIT TEST 형태로 만들어 매번 쉽게 체크해볼 수 있음