[SQL] Subquery, JOIN

Sun choi·2024년 7월 9일

NEW 지식

목록 보기
5/34

안녕하세요, 오늘은 사전캠프 2주차 둘째날입니다.
SQL 코드카타는 재미들려서 9문정도 풀었고, 알고리즘 코드카타는 풀지못했습니다. 빨리 알고리즘 코드카타도 재밌게 풀 수 있었으면 좋겠습니다.

<오늘 공부한 내용>

SQL - ~ 4주차 완주

김영한님의 자바 입문(인프런) - 섹션1~2 변수

자바 입문은 처음이어서 환경 구축을 하고, 변수에 대해서만 배워 크게 어려운게 없었습니다. 그래서 오늘은 SQL 3주차, 4주차 내용을 정리하겠습니다.

🍞 3주차 내용

  • REPLACE, SUBSTRING, CONCAT
  • IF, CASE
  • User Segmentation 해보기

🍞 4주차 내용

  • Subquery
  • JOIN

우선 3주차 내용의 핵심만 정리!

  • replace(바꿀 컬럼, 현재 값, 바꿀 값)
    예시) replace(restaurant_name, 'Blue', 'Pink')
    'Blue ribbon~'인 식당이름이 'Pink ribbon~'로 바뀐다.

  • substr(조회 할 컬럼, 시작 위치, 글자 수)
    예시) substr(addr, 1, 2)
    addr칼럼의 1번째 글자부터 2글자만 가져온다.
    addr이 '서울특별시 마포구 공덕동'이라면 '서울'만 가져온다.

  • concat(붙이고 싶은 값1, 붙이고 싶은 값2, 붙이고 싶은 값3, .....)
    예시) concat('[', substring(addr, 1, 2), '] ', restaurant_name)
    -> [서울] Hangawi

  • if문
    if(조건, 조건을 충족할 때, 조건을 충족하지 못할 때)
    예시) if(cuisine_type='Korean', '한식', '기타')
    음식타입이 코리안이면 한식으로 나타나고, 아니라면 기타로 나타난다.

  • case문
    case when 조건1 then 값(수식)1
    when 조건2 then 값(수식)2
    else 값(수식)3
    end

    Case 문은 각 조건별로 적용 할 값을 지정해 줄 수 있다.
    예시) case when addr like '%경기도%' then '경기도'
    when addr like '%특별%' or addr like '%광역%' then substring(addr, 1, 5)
    else substring(addr, 1, 2) end

  • User Segmentation 예시

    select name,
    age,
    gender,
    case when (age between 10 and 19) and gender='male' then "10대 남자"
    when (age between 10 and 19) and gender='female' then "10대 여자"
    when (age between 20 and 29) and gender='male' then "20대 남자"
    when (age between 20 and 29) and gender='female' then "20대 여자" end "그룹"
    from customers
    where age between 10 and 29

4주차 내용으로는 크게 두가지이다.

- Subquery 를 활용하여 복잡한 연산을 수행
Query 안에 sub 로 들어간 구문이며 기본구조는 다음과 같다.

select column1, special_column
from
( / subquery /
select column1, column2 special_column
from table1
) a

예시)

select restaurant_name,
case when sum_of_quantity<=5 then 0.1
when sum_of_quantity>15 and sum_of_price>=300000 then 0.005
else 0.01 end ratio_of_add
from
(
select restaurant_name,
sum(quantity) sum_of_quantity,
sum(price) sum_of_price
from food_orders
group by 1
) a

- Join 을 활용하여 여러개의 테이블에 있는 데이터를 한 번에 조회하고 연산

LEFT JOIN : 공통 컬럼 (키값) 을 기준으로, 하나의 테이블에 값이 없더라도 모두 조회되는 경우를 의미합니다.
INNER JOIN : 공통 컬럼 (키값) 을 기준으로, 두 테이블 모두에 있는 값만 조회합니다.
기본구조는 다음과 같다.

- LEFT JOIN
select 조회 할 컬럼
from 테이블1 a left join 테이블2 b on a.공통컬럼명=b.공통컬럼명

- INNER JOIN
select 조회 할 컬럼
from 테이블1 a inner join 테이블2 b on a.공통컬럼명=b.공통컬럼명

여기서, 공통컬럼은 묶어주기 위한 ‘공통 값’ 이기 때문에 두 테이블의 컬럼명은 달라도 괜찮다. 예를 들어 주문정보에는 ‘고객ID’, 고객정보에는 ‘고객아이디’ 라고 컬럼명이 되어있다면,
테이블1.고객ID=테이블2.고객아이디 와 같이 묶어줄 수 있다.

예시)

select a.order_id,
a.customer_id,
a.restaurant_name,
a.price,
b.name,
b.age,
b.gender
from food_orders a left join customers b on a.customer_id=b.customer_id

여기서 food_orders a에 a는 food_orders 테이블에 a라는 별명을 만들어준거고 같은 의미라서 a.customer_id 여기서 간편하게 쓸 수 있다.
select 뒤 가져올 칼럼명을 적어줄 때에도 어느 테이블의 칼럼인지 표시해야 한다. a테이블의 order_id 칼럼 보여주라!-> a.order_id

이렇게 4주차까지 SQL 강의 요약 끝!
내일이면 5주차까지 완주하고 자바 입문편을 이번주 안에 다 듣는 게 목표이다.
열심히 하자!🙂

profile
풀스택 개발자의 공부기록 📖

0개의 댓글