SQL 2주 차 강의
2-1
1주 차 강의 복습과 2주 차 학습할 내용
- SQL 문이란 : 데이터베이스에 질문하는 언어, 여기서 질문은 "쿼리"라고 함
- SQL 문의 기본 구조
- SELECT
= 어떤 컬럼을 가져올지
2. FROM
= 선택한 컬럼을 어떤 테이블에서 가져올지
3. WHERE
= 조건을 걸어 그에 맞는 데이터를 가져옴
조건의 종류는
비교연산자( 부등호, = )
IN
= 제시한 값이 하나라도 있을 경우 출력
사용 예시
WHERE age in ( 6,21 ) = 6살 또는 21살인 모든 사람 출력
LIKE
= 패턴 매칭 연산자, %를 사용해 앞, 뒤, 중간에 비슷한 형태의 데이터를 찾기
사용 예시
WHERE age LIKE '2%' = 20대인 사람들 출력
BETWEEN
= 제시한 두 값 사이의 범위에 있는 값 출력
사용 예시
WHERE age BETWEEN 20 and 29 = 20살부터 29살까지 사람들 출력
AND
= 제시한 모든 값을 만족해야 출력
사용 예시
WHERE age >= 20 and gender 'male' = 20살 이상이면서 남자인 사람 출력
OR
= 하나라도 해당되면 출력
사용 예시
WHERE age >= 20 or gender 'male' = 20살 이상이거나 남자면 출력
NOT
= 제시한 값이 아닌 것 출력
WHERE NOT gender 'male' = 남자가 아닌 사람 출력
+
2주 차 강의에서 배울 내용
1. 집계 함수 (SUM, AVERAGE, COUNT, MIN, MAX),
2. GROUP BY = 그룹으로 묶어서 처리
3. ORDER BY = 오름차순 ASC , 내림차순 DESC
2-2
SELECT 절에서 컬럼과 컬럼의 사칙연산이 가능하다
사용 예시
1. " + " 사용
SELECT food_preparation_time + delivery_time as total_time
= 음식 준비 시간 컬럼과 배달 시간 컬럼을 합쳐 총 시간을 구할 수 있다.
2. SUM (더하기), AVG (평균)
select sum(food_preparation_time) total_food_preparation_time,
= 음식 준비 시간 컬럼을 모두 더해 total_food_preparation_time 이란 별칭으로 변경한다.
avg(delivery_time) avg_delivery_time
= 배달 시간의 평균을 구하고 avg_delivery_time라는 별칭으로 변경한다.
3. COUNT = 총개수 세기
select
count(1) count_of_orders,
= Count (1) 전체 행의 개수를 세고, Count_of_orders 라는 별칭으로 출력
count(distinct customer_id) count_of_customers
= count(distinct customer_id) Customer_ID가 중복되지 않게 행의 개수를 세고
= count_ofcustomers라는 별칭으로 출력
select count(1) as total_payments
from payments
= payments 테이블에서 전체 행의 개수를 구한다.
이걸 이용해서
select count(distinct pay_type) as total_pay_type
= 중복되지 않는 pay_type의 행의 개수를 구하고 total_pay_type라는 별칭으로 출력한다.
값이 2가 나오는데 pay_type은 Cash, card만 있기 때문이다.
4. min(최솟값), max(최댓값)
사용 예시
select
min(price) as min_price = price 컬럼의 최솟값을 min_price라는 별칭으로 출력
max(price) as max_price = price 컬럼의 최댓값을 max_price라는 별칭으로 출력
2-3 [실습] WHERE 절로 원하는 데이터를 뽑고, 계산해 보기
- Query를 적기 전에 흐름을 정리해 보기
- 어떤 테이블에서 데이터를 뽑을 것인가
- 어떤 컬럼을 이용할 것인가
- 어떤 조건을 지정해야 하는가
- 어떤 함수 (수식) 을 이용해야 하는가
실습 1
주문금액 30,000원 이상 주문 건 개수
주문금액이 들어갔으니 food_orders 테이블에서
주문 건 컬럼인 order_id와
가격 컬럼인 price를 사용
30000원 이상의 조건 = WHERE 절에서 30000원 이상
개수가 들어가니 = count 함수 사용
select count(order_id)
from food_orders
where price >= 30000
실습 2
한국 음식의 주문 당 평균 음식 가격 구하기
음식 관련 = food_orders 테이블에서
한국 음식의 = WHERE Cuisine_type = 'Korean'
평균 음식 가격 = avg(price)
select avg(price) as avg_price
from food_orders
where cuisine_type = 'Korean'
2-4 GROUP BY로 범주별 연산 한 번에 끝내기
GROUP BY = 원하는 컬럼을 묶어서 출력함
[실습] Group by를 이용하여 카테고리별 연산해 보기
1. 음식점별 주문 금액 최댓값 조회하기
음식점 정보가 있는 테이블 = food_orders
주문 금액 컬럼 = Price
최댓값 함수 = MAX()
음식점별 = group by restaurant_name
주문 금액 최댓값 = max(price)
select restaurant_name, MAX(price) as max_price
from food_orders
group by restaurant_name
2. 결제 타입별 가장 최근 결제일 조회하기
어떤 테이블? = 결제 테이블 Payments
어떤 칼럼? = 페이 타입별 최근 결제일이니까 pay_type, date
어떤 조건? = 없음
어떤 함수? = 최근 결제일이니까 date에 MAX 함수
select pay_type, max(date)
from payments
group by pay_type
2-5 Query 결과를 정렬하여 업무에 바로 사용하기 (ORDER BY)
ORDER BY = 지정한 컬럼의 데이터 정렬 오름차순, 내림차순
ASC = 오름차순, order by의 기본은 오름차순이기에 생략 가능
DESC = 내림차순
+
Order by 컬럼_1, 컬럼_2 이렇게 되어있으면
컬럼_1 부터 정렬되고 그 다음 컬럼_2가 정렬됨
[실습] Order by를 이용하여 데이터를 정렬해 보기
1. 음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬
어떤 테이블? = food_orders
어떤 컬럼 ? = 음식점별 restaurant_name, 주문금액 최댓값 price
어떤 조건 = x
어떤 함수, 수식?
= 최댓값이니 MAX(), 최댓값 기준 내림차순 order by, 음식점별 group by
select restaurant_name, MAX(price) as max_price
from food_orders
group by restaurant_name
order by max_price DESC
2. 고객을 이름순으로 오름차순으로 정렬하기
테이블? = 고객 정보 테이블
컬럼? = 고객 이름
조건? = x
함수, 수식? = 이름 오름차순 order by
select customer_name
from customers
order by customer_name
2-6 SQL 구조 마스터 WHERE, GROUP BY, ORDER BY로 완성되는 SQL 구조
SQL에서 순서는 매우 중요하다
select
from
where
group by
order by
항상 이 순서를 지킬 것
[퀴즈] 조회할 데이터를 SQL 구조에 맞춰서 바꿔보기
- 1번 구조 맞춰보기
- order by sum(delivery_time) desc
- group by cuisine_type
- where day_of_week=’Weekend’
- from food_orders
- select cuisine_type, sum(delivery_time) total_delivery_time
5-4-3-2-1
- 2번 구조 맞춰보기
- where age between 20 and 40
- select age, count(name) count_of_name
- order by age
- group by age
- from customers
2-5-1-4-3
2주 차 숙제
음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고,
가장 낮은 주문금액 순으로 (내림차순) 정렬하기
테이블? = Food_orders
컬럼 ? = 음식 종류별 cuisine_type, 가격 price
조건? = x
함수, 수식? = MAX, MIN, GROUP BY, ORDER BY
select
cuisine_type,
min(price) as min_price,
max(price) as max_price
from food_orders
group by cuisine_type
order by min_price DESC
오늘 학습하면서 느낀 점, 어려웠던 점
= 강의로 보면 전부 이해가 되는 느낌인데 막상 다시 복습하면서 문제만 보고 쿼리를 만들려고 하니 생각보다 수월하게 풀리지 않음.
실습 문제 풀었던 거 모아놓고 계속 풀고 ChatGPT한테도 내가 공부했던 부분의 문제를 만들어 달라 하고 풀어봐야겠음