본문 바로가기
데이터 엔지니어링/실리콘밸리에서 날아온 데이터 엔지니어링 스타터 키트 with Python

[2주차] SQL 장단점 & 기본 문법

by whdgus928 2023. 6. 12.

SQL

장점

- 빅데이터를 처리하기 좋다

 -구조화된 데이터를 처리하는데 적합하다

 -어떤 작업을 하는건지 파악하기쉽다

 

단점

 -비구조화된 데이터 처리에는 좋지 않다

 

기억해야할 점

현업에서 깨끗한 데이터란 존재하지 않음

 ●항상 데이터를 믿을 수 있는지 의심하기

 ●실제로 레코드를 몇 개 살펴보는 것이 중요

데이터 일을 한다면 항상 데이터의 품질을 의심하고 체크

 ● 중복된 레코드 체크

 ● 최근 데이터의 존재 여부 체크

 ● Primary key uniqueness가 지켜지는지 체크하기

 ● 값이 비어있는 컬럼들이 있는지 테크

 ● 위의 체크는 코딩의 단위 테스트로 만들어 쉽게 체크할 수 있다

 

기본 문법

  • 다수의 SQL 문을 실행한다면 세미콜론으로 분리 필요 ex) SQL문1; SQL문2; SQL문3
  • 주석 
    • -- : 인라인 한줄짜리 주석
    • /* -- */: 여러 줄에 걸쳐 사용 가능한 주석
  • 테이블/필드이름의 명명규칙 정하기 ex) User vs Users

DDL

데이터 포맷을 지정하는 언어

 

CREATE TABLE

● Primary key 속성을 지정할 수 있으나 무시됨

● Big Data 데이터웨어하우스에서는 지켜지지 않음 (Redshift, Snowflake, BigQuery)

● 지키려면 빅데이터 적재하는데 시간이 오래걸림

● CTAS : 테이블을 조회하고 만들어주는것

 CREATE TABLE schema_name.table_name AS SELECT #elt

 

DROP TABLE : 테이블 자체가 없어진다

● DROP TABLE schema_name.table_name;

● 없는 테이블을 지우려고 하는 경우 에러를 냄, 아래 코드처럼 사용 추천

● DROP TABLE IF EXISTS table_name;

● delete from: 테이블에서 레코드들만 삭제

 

ALTER TABLE

새로운 컬럼 추가:

 ■ ALTER TABLE 테이블이름 ADD COLUMN 필드이름 필드타입;

기존 컬럼 이름 변경:

 ■ ALTER TABLE 테이블이름 RENAME 현재필드이름 to 새필드이름

기존 컬럼 제거:

 ■ ALTER TABLE 테이블이름 DROP COLUMN 필드이름;

테이블 이름 변경:

 ■ ALTER TABLE 현재테이블이름 RENAME to 새테이블이름;

 

DML

SELECT: 테이블(들)에서 레코드들(혹은 레코드수)을 읽어오는데 사용

INSERT INTO: 테이블에 레코드를 추가하는데 사용 (COPY)

UPDATE FROM: 테이블 레코드의 필드 값 수정

DELETE FROM: 테이블에서 레코드를 삭제

 

SELECT

SELECT 필드이름1, 필드이름2, …

FROM 테이블이름 [JOIN …]

WHERE 선택조건 GROUP BY 필드이름1, 필드이름2, ...

ORDER BY 필드이름 [ASC|DESC] -- 필드 이름 대신에 숫자 사용 가능

LIMIT N; 출력 개수 제한

 

WHERE

IN

WHERE channel in (‘Google’, ‘Youtube’)

WHERE channel = ‘Google’ OR channel = ‘Youtube

LIKE and ILIKE

● LIKE: 정해진 문자 탐색

● ILIKE: 대문자 소문자 상관없이 탐색

● WHERE channel LIKE ‘G%’ -> ‘G*’

● WHERE channel LIKE ‘%o%’ -> ‘*o*’

● NOT LIKE or NOT ILIKE

BETWEEN

날짜 사이

 

STRING 함수

● LEFT(str, N) 왼쪽부터

● REPLACE(str, exp1, exp2) 문자 교체

● UPPER(str)

● LOWER(str)

● LEN(str)

● LPAD, RPAD 길이가 기준보다 작을때 특정문자로 채우기

● SUBSTRING 위치 상관없이 대체

 

INSERT INTO vs. COPY(Bulk update)

- 속도 COPY가 INSERT보다 빠르다

 

ORDER BY

- null값의 기준은 DB보다 달라서 기억하기보다 코드로 해결하는 것이 편하다

- ORDER BY 1 DESC; -- NULL값이 가장 앞에 옴

- ORDER BY 1 DESC NULLS LAST; -- NULL값이 맨뒤로 이동

 

Type Cast

- category::int or cast(category as int)

- 일시적으로 타입 지정

 

NULL

- 값이 존재하지 않음을 의미

- 0이나 비어있는 string과는 다르다

- =이 아니라 IS를 사용해서 연산해야한다

반응형

댓글