1) 1주차 복습 - SQL 문의 기본 구조
- SQL 문이란 : DB에서 데이터를 조회하기 위한 언어로,
- SQL 문법을 이용하여 DB에 명령을 내리는 것을 Query 한다고 합니다.
- SQL 문의 기본 구조
- select # '데이터 조회' 의 명령어로 필수 구문 from # '어디에서 데이터를 조회할까' 의 명령어로 필수 구문 where # 조건을 지정해주는 구문
- 조건을 지정하는 방법다양한 구문 : IN, BETWEEN, LIKE
- 여러가지 조건의 적용 : AND, OR, NOT
- 비교연산자 : <, >, =, <>
2) 2주차 수업에서 배울 내용
- 두 컬럼의 합계 값을 뽑거나, 전체 데이터의 갯수를 구할 수 있을까?
- 범주별로 계산을 할 수 있을까?
- 데이터를 가나다 순으로 정렬한다면 보고서에 바로 사용할 수 있을텐데!
3) 엑셀 대신 SQL로 한번에 계산하기 (SUM, AVERAGE, COUNT, MIN, MAX)
- 숫자 연산 기호를 SQL 에서도 사용 가능하다.
- 숫자 연산의 사용 예시 (상품 준비시간과 배달시간의 합계 구하기)
- select food_preparation_time, delivery_time, food_preparation_time + delivery_time as total_time from food_orders
- 숫자 연산 종류 + - * /
4) 기본 연산, 합계와 평균 구하기
- SQL 에서는 계산의 편의를 위해 함수를 제공하고 있습니다.
- 사용방법은 엑셀과 유사하고, 유일하게 다른 점은 데이터의 범위가 아닌 계산할 ‘컬럼’을 적어준다는 것입니다.
- 함수 종류
- 합계 : SUM(컬럼)
- 평균 : AVG(컬럼)
- 사용 예시 (상품 준비시간의 합계와 평균 구하기)
- select sum(food_preparation_time) total_food_preparation_time, avg(delivery_time) avg_food_preparation_time from food_orders
5) 전체 데이터의 갯수 구하기
현재 테이블이 몇 개의 데이터를 가지고 있는지, 몇 개의 값을 가지고 있는지도 구할 수 있습니다.
- 함수 종류
- 데이터 갯수 : COUNT(컬럼) * 컬럼명 대신 1 혹은 * 사용 가능
- 몇개의 값을 가지고 있는지 구할 떄 : DISTINCT
- 예시
- 데이터 갯수 : 주문 테이블의 전체 주문은 몇건인가요?
- 몇개의 값을 가지고 있는지 구할 때 : 주문을 한 고객은 몇명인가요?
- 사용 예시 (주문건수와, 주문 한 고객 수 구하기)
- select count(1) count_of_orders, count(distinct customer_id) count_of_customers from food_orders
6) 데이터의 범위, 최솟값과 최댓값 구하기
- 함수 종류
- 최솟값 : MIN(컬럼)
- 최댓값 : MAX(컬럼)
- 사용 예시 (주문 가격의 최솟값, 최댓값 구하기)
- select min(price) min_price, max(price) max_price from food_orders
7) [실습] WHERE 절로 원하는 데이터를 뽑고, 계산해보기
- [실습] 주문 금액이 30,000원 이상인 주문건의 갯수 구하기
- select count(order_id) count_of_orders from food_orders where price>=30000
- [실습] 한국 음식의 주문 당 평균 음식가격 구하기
- select avg(price) as average_price from food_orders where cuisine_type='Korean'
8) GROUP BY로 범주별 연산 한 번에 끝내기
단위를 나누어 숫자 계산을 해봅시다
- 카테고리별로 숫자 연산을 간단하게 하기
- 음식 종류별로 평균 음식 가격을 구하기 위해 where 절을 사용해서 수십개의 쿼리를 작성하는 것은 너무 비효율적입니다. 이 문제를 Group by를 사용해서 어떻게 해결할 수 있을까요?
- 편의를 위해서 ‘원하는 단위로 (eg. 음식 종류별, 식당별) 나누는 것’ 을 수업에서는 앞으로 ‘카테고리별로’ 계산을 한다고 명명하겠습니다
- 여러번의 Query 없이, 카테고리를 지정하여 수식 함수로 연산을 할 수 있습니다.
- 이 때 사용되는 구문이 Group by 입니다.
- Group by 기본 구조
- Group by 는 카테고리 컬럼 지정, 그리고 Group by 를 적어주는 것으로 적용 가능합니다.
- 기본 구조
- select 카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼), from group by 카테고리컬럼(원하는컬럼 아무거나)
- 사용 예시(음식 종류별 주문 금액 합계)
- select cuisine_type, sum(price) sum_of_price from food_orders group by cuisine_type
- [실습] Group by 를 이용하여 카테고리별 연산해보기
- 음식점별 주문 금액 최댓값 조회하기
- select restaurant_name, max(price) "최대 주문금액" from food_orders group by restaurant_name
- 결제 타입별 가장 최근 결제일 조회하기
- select pay_type "결제타입", max(date) "최근 결제일" from payments group by pay_type
9) Query 결과를 정렬하여 업무에 바로 사용하기 (ORDER BY)
- Query 결과는 항상 동일한 순서로 출력될까
- 오름차순 : 숫자가 점점 커지는 순서로 정렬
- 내림차순 : 숫자가 점점 작아지는 순서로 정렬
- 정렬문 Order by 의 기본구조
- Order by 는 카테고리 컬럼 지정, 그리고 Order by를 적어주는 것으로 적용 가능하다
- 기본 구조
- 사용 예시 (음식 종류별 주문 금액 합계를 ‘주문 금액 합계’ 기준으로 오름차순 정렬)
- select cuisine_type, sum(price) sum_of_price from food_orders group by cuisine_type order by sum(price)
- 정렬의 종류
오름차순, 내림차순 desc
- [실습] Order by를 이용하여 데이터를 정렬해보기
- 음식점별 주문 금액 최댓값 조회하기 - 최댓값 기준으로 내림차순 정렬
- 고객의 이름 순으로 오름차순으로 정렬하기
10) SQL 구조 마스터 - WHERE, GROUP BY, ORDER BY 로 완성되는 SQL 구조
- 완성된 SQL 문의 기본 구조
- 복습의 차원에서 한 번 보고 갑시다
select from where group by order by
- [퀴즈] 조회 할 데이터를 SQL 구조에 맞춰서 바꿔보기
- 구조 맞춰보기
- order by sum(delivery_time) desc
- group by cuisine_type
- where day_of_the_week=’Weekend’
- from food_orders
- select cuisine_type, sum(delivery_time) total_delivery_time
- 정답
- 5 → 4 → 3 → 2 → 1
- 구조 맞춰보기
- 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
11) 음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기
정답 코드
select cuisine_type, min(price) min_price, max(price) max_price from food_orders group by cuisine_type order by min(price) desc
'SQL' 카테고리의 다른 글
SQL Pivot table (0) | 2024.06.27 |
---|---|
SQL subquery, join (0) | 2024.06.26 |
SQL substring, concat, if, case (0) | 2024.06.25 |
SQL 기본 (0) | 2024.06.19 |