1주차 정리
1주차 복습 - SQL 문의 기본 구조
-
- SQL 문이란 : DB 에서 데이터를 조회하기 위한 언어로, SQL 문법을 이용하여 DB에 명령을 내리는 것을 Query 한다고 합니다.
- SQL 문의 기본 구조
- select # '데이터 조회' 의 명령어로 필수 구문 from # '어디에서 데이터를 조회할까' 의 명령어로 필수 구문 where # 조건을 지정해주는 구문
- 조건을 지정하는 방법
- 비교연산자 : <, >, =, <>
- 다양한 구문 : IN, BETWEEN, LIKE
- 여러가지 조건의 적용 : AND, OR, NOT
2주차엔 SELECT문과 WHERE절로 원하는 데이터를 뽑는 방법을 알아볼려고 한다.
- 통계: 최대 / 최소 / 평균 / 개수 (MAX,MIN,AVG,COUNT)
- 통계 구하기: 기존 방법의 한계
- 동일한 범주의 데이터를 묶어주는 Group by
- 깔끔하게 데이터를 정렬해보자: Order by
최대 / 최소 / 평균 / 개수 (MAX,MIN,AVG,COUNT)
MAX(컬럼) :데이터의 최댓값
ex)
select MAX(price)
from food_orders
MIN(컬럼) :데이터의 최솟값
ex)
select MIN(price)
from food_orders
AVG(컬럼):데이터의 평균값
ex)
select AVG(price)
from food_orders
COUNT(컬럼):데이터의 갯수 ※컬럼명 대신 1혹은 * 사용가능
- DISTINT:중복을 제외한 갯수
ex)
select COUNT(*)
from food_orders
1. [실습] 주문 금액이 30,000원 이상인 주문건의 갯수 구하기
select count(*) as '주문건의 갯수'
from food_orders
where price>=30000
2. [실습] 한국 음식의 주문 당 평균 음식가격 구하기
select avg(price) as '한국식당 평균가격'
from food_orders
where cuisine_type = 'korean'
동일한 범주의 데이터를 묶어주는 Group by
음식 종류별로 평균 음식 가격을 구하기위해 where 절을 사용해서 수십개의 쿼리를 만드는것은 매우 비효울적이다.
이 문제를 해결하기 위해 Group by 를 사용해야 한다.
Group by의 기본구조
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
이를 이용하여 실습을 진행해보자
1.음식점별 주문 금액 최댓값 조회하기
select restaurant_name ,MAX(price)
from food_orders
group by restaurant_name
2.결제 타입별 가장 최근 결제일 조회하기
select pay_type as '결제타입',
MAX(date) as '최근 결제일'
from payments
group by pay_type
- 최근 날짜를 보고 싶을땐 MAX 를 사용해야 한다.
깔끔하게 데이터를 정렬해보자: Order by
SQL 결과도 원하는 값 기준으로, 오름차순 혹은 내림차순으로 정렬할 수 있다.
- 오름차순 : 숫자가 점점 커지는 순서로 정렬
- 내림차순 : 숫자가 점점 작아지는 순서로 정렬
Order by의 기본구조
select 카테고리컬럼(원하는컬럼 아무거나),
sum(계산 컬럼),
from
group by 카테고리컬럼(원하는컬럼 아무거나)
order by 정렬을 원하는 컬럼 (카테고리컬럼(원하는컬럼 아무거나), sum(계산 컬럼) 둘 다 가능)
이쯤에서 SQL 실행 순서가 햇갈려 문법의 실행 순서에 대해 알아보자
- FROM : 각 테이블 확인
- ON : 조인 조건 확인
- JOIN : 테이블 조인 (병합)
- WHERE : 데이터 추출 조건 확인
- GROUP BY : 특정 칼럼으로 데이터 그룹화
- HAVING : 그룹화 이후 데이터 추출 조건 확인
- SELECT : 데이터 추출
- DISTINCT : 중복 제거
- ORDER BY : 데이터 정렬
2주차 마무리 문제
음식 종류별 가장 높은 주문 금액과 가장 낮은 주문금액을 조회하고, 가장 낮은 주문금액 순으로 (내림차순) 정렬하기
select cuisine_type,
MAX(price) as '가장 높은 주문금액',
MIN(price) as '가장 낮은 주문금액'
from food_orders
group by cuisine_type
order by min(price) desc
'SQL' 카테고리의 다른 글
[SQL]CSV 파일을 이용해 데이터 가져오기(MY SQL) (0) | 2025.01.20 |
---|---|
[SQL]불필요한 Query 처리방법(coalesce,<>), Pivot Table (0) | 2025.01.17 |
[SQL]서브쿼리,JOIN (0) | 2025.01.17 |
[SQL]REPLACE, SUBSTRING, CONCAT,IF, CASE (2) | 2025.01.16 |
[SQL]SQL의 개요 (0) | 2025.01.14 |