데이터 분석 업무를 하다 보면 데이터를 가져오기 위해 SQL을 사용할 일이 많다. 그동안 계속 SQL을 공부를 미뤄왔는데 우연한 기회에 좋은 사이트를 발견하여 공부하면서 내용도 같이 정리해본다.

코드 출처

https://mode.com/sql-tutorial/introduction-to-sql/

주석 사용

-- 주석 사용
SELECT *  --This comment won't affect the way the code runs
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013

/* Here's a comment so long and descriptive that
it could only fit on multiple lines. Fortunately,
it, too, will not affect how this code runs. */
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013

모든 데이터 불러오기

-- 모든 데이터 불러오기
SELECT *
	FROM tutorial.us_housing_units

Untitled

-- 특정 Column 만 100개 불러오기
SELECT west, south
	FROM tutorial.us_housing_units
LIMIT 100

조건문

Untitled

-- 조건문
SELECT *
	FROM tutorial.us_housing_units
WHERE south > 30

Untitled

-- 조건문
SELECT *
	FROM tutorial.us_housing_units
WHERE month_name != 'January'

Untitled

연산

-- 연산
SELECT year,
       month,
       west,
       south,
       west + south AS south_plus_west
  FROM tutorial.us_housing_units

Untitled

정렬

-- 정렬 (year_rank가 1인 row를 year 기준 오름차순 정렬)
SELECT *  
FROM tutorial.billboard_top_100_year_end
WHERE year_rank=1
ORDER BY year ASC

Untitled

-- 정렬 (year_rank가 10인 row를 year 기준 내림차순 정렬)
SELECT *
  FROM tutorial.billboard_top_100_year_end
  WHERE year_rank=10
 ORDER BY year DESC

Untitled

-- 여러 열로 정렬 (year_rank가 3이하인 row를 year로 내림차순 정렬 후 각 년도별 year_rank를 오름차순으로 정렬)
SELECT *
  FROM tutorial.billboard_top_100_year_end
  WHERE year_rank <= 3
 ORDER BY year DESC, year_rank
-- ORDER BY 뒤에 DESC(내림차순)를 붙이지 않으면 ASC(오름차순)으로 정렬됨.

Untitled

-- 여러 열로 정렬 (year_rank가 3이하인 row를 year & year_rank를 오름차순으로 정렬)
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank <= 3
 ORDER BY year_rank, year DESC

Untitled

다양한 연산자들

-- LIKE 연산자 (Snoop으로 시작하는 row 반환, 대소문자 구분)
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE "group" LIKE 'Snoop%'

-- group column은 SQL 연산자중 group이 있기 때문에 ""로 표시

Untitled

-- ILIKE 연산자 (대소문자 구분 없음)
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE artist ILIKE 'dr_ke'
-- "_"는 개별 문자를 대체(dr과 ke가 포함된 row를 모두 반환)

Untitled

-- IN 연산자 (year_rank가 1,2,3인 row 반환)
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank IN (1, 2, 3)

Untitled

-- IN 연산자
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE artist IN ('Taylor Swift', 'Usher', 'Ludacris')
-- 문자의 경우 작은따옴표('') 안에 넣고 쉼표로 구분

Untitled

-- BETWEEN 연산자 (year_rank가 5~10 사이인 row 반환) 
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank BETWEEN 5 AND 10

SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year_rank >= 5 AND year_rank <= 10

-- 위, 아래 동일한 결과를 반환함.

Untitled

-- IS NULL 연산 (누락된 데이터 반환)
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE artist IS NULL

Untitled

-- AND 연산자 (year가 2012이고 year_rank가 10 이하 이며 group에 feat가 포함된 row 반환)
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2012
   AND year_rank <= 10
   AND "group" ILIKE '%feat%'

Untitled

-- OR 연산자 (year가 2013이고 group이 macklemore나 timberlake를 포함하는 row 반환) 
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND ("group" ILIKE '%macklemore%' OR "group" ILIKE '%timberlake%')

Untitled

-- NOT 연산자
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND year_rank NOT BETWEEN 2 AND 3

Untitled

-- NOT 연산자 오류
SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND year_rank NOT > 3

-- 위의 코드는 실행 되지 않음. <=를 사용하여 아래와 같이 작성

SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND year_rank <= 3
-- IS NOT NULL

SELECT *
  FROM tutorial.billboard_top_100_year_end
 WHERE year = 2013
   AND artist IS NOT NULL

카테고리:

업데이트:

댓글남기기