SQL을 배워보자 본격의 본격!

joonfly·2021년 9월 30일
0

SQL, WHERE

  • 엑셀의 필터 기능과 흡사한 기능
SELECT
FROM
WHERE PRICE < 100
AND name = "문자"
AND price BETWEEN 50 AND 150
AND (Neighbourhood = 'Midtown' OR 'Soho')
  • 문자는 '' or "" 으로 감싸줘야함
    • 문자열에 ' 가 이미 포함 되어 있으면 "" 로 사용
  • 문자는 대소문자를 구별함
  • =, ≠(! + =) 등호, 부등호
  • Where 절을 2개이상 쓸때는 and 로 이어줄것
  • BETWEEN A AND BA 이상 B 이하
  • 둘중 하나만 만족해되 될 경우 OR 사용가능
  • 여러 조건을 하나로 묶고싶을때는 괄호를 써주어야 함. (직렬, 병렬 차이)
    SELECT
    FROM
    WHERE PRICE < 100
    AND name = "문자"
    AND price BETWEEN 50 AND 150
    AND (Neighbourhood = 'Midtown' OR Neighbourhood = 'Soho')
  • IN 이중에 1개만 만족해도 OK! / NOT IN 리스트에 있는게 하나라도 포함되면 안돼!
    SELECT
    FROM
    WHERE PRICE < 100
    AND name = "문자"
    AND price BETWEEN 50 AND 150
    AND Neighbourhood IN ('Midtown','Soho')
  • 문자열에 <,> 비교를 하면 알파벳 순으로 따짐

SQL WHERE #2

  • 비어있는 데이터 = NULL (0과는 다르다)
WHERE 어디어디 IS NULL
WHERE 어디어디 IS NOT NULL
  • 데이터가 내가 찾는 값이랑 일치하진 않지만, 포함하고 있는 경우 LIKENOT LIKE
WHERE 어디어디 LIKE '%찾으려는글자%'

%는 그 자리에 다른 값이 있어도 된다는 뜻.

  • %찾으려는글자 = 앞에 다른 값이 있고 '찾으려는글자' 로 끝남
  • 찾으려는글자% = 뒤에 다른 값이 있고 '찾으려는글자' 로 시작됨
  • UPPER(컬럼), LOWER(컬럼) 모든 영문자를 대문자, 소문자로
  • 새로운 이름은 AS 로 설정할 수 있음 (생략가능)
SELECT name, UPPER(name) AS upper_name, LOWER(name) AS lower-name
WHERE LOWER(name) LIKE '%abcd%'

ABCD일 경우(또는 하나라도 대문자일 경우) abcd와 다르다고 인식하기 때문에 LOWER 를 이용하여 전부 소문자로 바꾼 다음 LIKE 로 작성하면 전부 소문자로 바뀌어 전부 찾을 수 있음.

  • 숫자인 값의 경우 연산 가능
WHERE 숫자컬럼 * 2 < 300

SQL Aggregate

  • Aggregate → 데이터를 하나의 값으로 요약하는것
    • sum, count, avg, ...
  • ID컬럼의 값의 갯수 구하기 (null은 제외함)
SELECT COUNT(ID) AS 이름
FROM ----
  • 전체 row 의 수 구하기
SELECT COUNT(*) AS 전부
FROM ----
  • 이렇게 하면 ID 컬럼에 빈 값(null)이 얼마나 있는지 확인할 수 있음
SELECT COUNT(*) AS 전부, COUNT(ID) AS 이름
FROM ----
  • ID 컬럼에 중복을 확인
SELECT COUNT(ID) AS 이름 , COUNT(DISTINCT id) AS 중복제거
FROM ----
  • 최대값, 최소값, 평균값
SELECT MAX(price), MIN(prince), AVG(price)
FROM ----
  • 총 합
SELECT SUM(review)
FROM ----

SQL GROUP BY

SELECT 컬럼
FROM 테이블
WHERE 필터링 조건
GROUP BY 묶어서 볼 컬럼
HAVING 필터링 조건
ORDER BY
LIMIT 상위N개d
  • neighbourhood_group과 negibourhood별 숙소 갯수, 평균 가격
SELECT neighbourhood_group,neighbourhood,
    COUNT(id) AS id_count,
    AVG(price) AS average_price

FROM `taling-excercise.data_pre.airbnb`
GROUP BY neighbourhood_group, neighbourhood
SELECT neighbourhood_group,neighbourhood,
    COUNT(id) AS id_count,
    AVG(price) AS average_price

FROM `taling-excercise.data_pre.airbnb`
GROUP BY neighbourhood_group, neighbourhood
ORDER BY 정렬기준_1, 정렬기준_2 ---오름차순
ORDER BY 정렬기준 DESC ---내림차순
  • 만약 정렬기준1은 오름차순, 정렬기준2는 내림차순으로 하고싶다면,
    ORDER BY 정렬기준_1, 정렬기준_2 DESC 로 작성하면됨
  • 위 부터 각 SELECT 한 컬럼별로 1,2,3,4... 순으로 GROUP BY, ORDER BY에 쓸 수 있음.
    GROUP BY 1,2

SQL WHERE vs HAVING

WHERE : 개별 행에 적용, GROUP BY 되기 전에 작동, GROUP BY 앞에

HAVING : 그룹화 된 결과에 적용 GROUP BY 후에 작동, GTOUP BY 뒤에

이부분은 쌤의 설명을 들어도 뭔가 이해가 잘 안간다. 막상 실습을 해보니 aggregation 전의 원본 column 값은 where절로, aggregation 하며 생성한 column 은 having으로 해야하는 것 같은데... Q&A에 남겨봐야지

0개의 댓글

관련 채용 정보