백엔드 부트캠프 4일차 (2024.10.10 목) SQL 기본구조와 문법 연습

커비·2024년 10월 10일
0

백엔드 부트캠프

목록 보기
8/49
post-thumbnail

⏰ Today's Schedule

06:30 ~ 10:40 SQL 1, 2, 3주차 강의 재수강
11:00 ~ 15:30 병원일정
16:00 ~ 18:00 SQL 4주차 강의 2회 수강
19:00 ~ 19:30 블로그 작성 & 개인회고
19:30 ~ 21:30 SQL 문법 연습문제 풀기


🖍️ Today I Learned

4주차 SQL 기본구조와 문법 연습

오늘 강의의 주제는 Subquery을 활용한 연산과 Join를 활용헤 2개 이상의 테이블에 있는 데이터를 한 번에 조회하며 연산하는 것이다.

📌 Subquery

SELECT cuisine_type,
       total_quantity,
       count_res,
       CASE WHEN count_res >= 5 and total_quantity >= 30 THEN 0.005
       CASE WHEN count_res >= 5 and total_quantity < 30 THEN 0.008
       CASE WHEN count_res < 5 and total_quantity >= 30 THEN 0.01
       CASE WHEN count_res < 5 and total_quantity < 30 THEN 0.02 end rate
FROM (
	SELECT cusine_type,
    	SUM(quantity) total_quantity,
    	COUNT(DISTINCT restaurant_name) count_res
    FROM food_orders
    GROUP BY 1
) a

💡 Subquery가 필요한 경우

  • 여러번의 연산을 수행해야 할 때
    ex. 수수료를 부과할 수 있는 시간 + 구해진 시간에 주문금액별 가중치 부여 + 가중치를 적용한 결과로 최종 예상 배달비를 계산해야할 때
  • 조건문에 연산 결과를 사용해야 할 때
  • 조건에 Query 결과를 사용하고 싶을 때

💡 기본구조

SELECT column1, special_column
FROM (
    SELECT column1, column2 special_column
    FROM table1
    ) a
SELECT column1, column2
FROM table1
WHERE column1 = (SELECT col1 FROM table2)

📌 Join

SELECT *
FROM food_orders LEFT JOIN payments on food_oders.order_id = payments.order_id

💡 Join이 필요한 경우

  • 필요한 데이터가 한 테이블이 아닌 여러 테이블에 있을 때
    ex. A를 계산하려고 하는데 B테이블에 있는 데이터를 이용해야할 때

💡 Join 기본 원리

  • 엑셀(Excel)의 Vlookup과 유사함
  • INNER JOINA에도 있고 B에도 있는 공통분모만 가져오겠다는 것
  • LEFT JOINA에 있는 테이블은 전부 조회하는 대신에 B에서는 전부가 아닌 A와 B가 공통되는 부분만 가져오겠다는 것

💡 기본구조

-- 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.공통컬럼명
SELECT column1, column2
FROM table1
WHERE column1 = (SELECT col1 FROM table2)

📌 숙제

오늘 주어진 숙제의 주제는 '식당별 평균 주문금액과 주문자의 평균 연령을 기반으로 Segmentation'하는 것이다.

SELECT restaurant_name,
       CASE WHEN price <=5000 THEN 'price_group1'
            WHEN price >5000 AND price <=10000 THEN 'price_group2'
            WHEN price >10000 AND price <=30000 THEN 'price_group3'
            WHEN price >30000 THEN 'price_group4' END price_group,
       CASE WHEN age <30 then 'age_group1'
            WHEN age BETWEEN 30 AND 39 THEN 'age_group2'
            WHEN age BETWEEN 40 AND 49 THEN 'age_group3'
            else 'age_group4' END age_group
FROM
(
SELECT a.restaurant_name,
       AVG(price) price,
       AVG(age) age
FROM food_orders a inner join customers b on a.customer_id = b.customer_id
GROUP BY 1
) a
ORDER BY 1

이해한 상태에서 풀고 싶다는 생각에 강의를 3회전하고서야 풀 수 있었다. 이정도면 머리가 안좋은걸까 하는 생각이 드는 순간이었지만 그래도 해결하고 나니 재미있었다. 이제 어느정도 스케치 정도는 정말 이해가 간다는 생각이 들었지만, 5주차를 듣고 또다시 생각이 달라질지도 모르겠다 ㅎㅎ 그래도 내일은 내일의 해가 뜰테니까 오늘은 목표치 먼저 달성해야겠다!


👀 회고

오늘 수강한 4주차 강의는 조금 많이 어려웠다. 중첩되는 코드를 짜게 된다는 점에서 약간의 겁을 먹은 건지 모르겠지만, 쉽게 기억되지 않아서 기억될 때까지 읽고 실습해보면서 이해해야할 것 같다. 나에게 맞는 납득 방법을 찾아야할지 있는 그대로 받아들이는게 옳은지 파악도 함께 해야겠다는 생각이 들었다.

profile
전공은 컴퓨터공학, 복수전공은 해킹보안학, 직장은 방학(파워 구직중)

0개의 댓글