SQL의 기본
- 먼저 다수의 SQL 문을 실행한다면 세미콜론으로 분리 필요
- SQL1문; SQL2문; SQL3문;
- SQL 주석
- --: 인라인 한줄짜리 주석, 자바에서 //에 해당
- /* -- */: 여러 줄에 걸쳐 사용 가능한 주석
- SQL 키워드는 대문자를 사용한다던지 하는 나름대로의 포맷팅이 필요
- 팀 프로젝트라면 팀에서 사용하는 공통 포맷이 필요
- 테이블/필드 이름의 명명규칙을 정하는 것이 중요
- 단수형 vs 복수형
- _ vs CamelCasing
DDL: 테이블 구조 정의 언어
1. CREATE TABLE
- Primary key 속성을 지정할 수 있으나 무시됨
- Primary key uniqueness
- BigData 데이터 웨어하우스에서는 지켜지지 않음 (Redshift, Snowflake, BigQuery)
- 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)
);
2. DROP TABLE
- DROP TABLE table_name;
- 없는 테이블을 지우려고 하는 경우 에러 발생
- DROP TABLE IF EXISTS table_name;
- vs. DELETE FROM
- DELETE FROM은 조건에 맞는 레코드들을 지움 (테이블 자체는 존재)
3. ALTER TABLE
- 새로운 컬럼 추가
- ALTER 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;
DML: 테이블 데이터 조작 언어
- SELECT: 레코드 질의 언어
- SELECT FROM: 테이블에서 레코드와 필드를 읽어오는 데 사용
- WHERE를 사용해서 레코드 선택 조건을 지정
- GROUP BY를 통해 정보를 그룹 레벨에서 뽑는데 사용
- DAU, WAU, MAU 계산은 GROUP BY를 필요로 함
- ORDER BY를 사용해서 레코드 순서를 결정
- 보통 다수의 테이블을 조인해서 사용
- 레코드 수정 언어
- INSERT INTO: 테이블의 레코드를 추가하는 데 사용
- UPDATE FROM: 테이블 레코드의 필드 값 수정
- DELETE FROM: 테이블에서 레코드를 삭제, 트랜잭션 사용 가능
- vs. TRUNCATE: 트랜잭션 사용 불가능
반응형