0. 개요

오늘은 SQL에 대해서 배운 것들에 대해서 정리한다.


1. SQL 필터링 기능 추가

조건문, 필터 문구 의미 사용 방법( ex.예시 )
BETWEEN - AND - between A and B

A와 B 사이의 값이 있는 것들은 모두 출력
(즉, A와 B 사이의 것)
Select *
From food_orders
Where age between 30 and 40
= food_orders 테이블 전체에서 나이가 30세에서 40세에 해당하는 사람들은 모두 출력하시오.
IN in (A, B, C)

A, B, C 인 것들은 모두 출력한다.
(즉, 포함하는 조건을 말함)
Select *
From food_orders
Where cuisine_type in ('Korean', 'Japanese')
= food_orders 테이블 전체에서 한식과 일식에 해당하는 것이 포함된 것들을 모두 출력하시오. 
LIKE like '%문자'

완전히 똑같지는 않지만 해당 문구 있음 출력
(즉, 비슷한 것이라도 조건 해당하면 나옴)

like 의 경우에는 어떻게 작성하는냐에 따라출력이 달라지게 된다.

1. name 'A%' = A로 시작하는 이름을 가진 사람들을 출력한다. 다른 위치는 안된다.
EX) Adam, Abel, Ace, Aib ...
2. restaurant_name '%next%' = 식당이름에 next를 포함하는 경우는 모두 출력한다.
이는 위치를 상관하지 않는다.
EX) Girl 'next' Door, Blue Ribbon Next, Next cat restaurant
3. name '%A' = A로 끝나는 이름을 가진 사람들을 출력한다.
Ex) Maria, Avera, Rivera

2. SUM, AVERAGE, COUNT, MIN, MAX

숫자 연산자도 그대로 사용할 수 있다. 
+ = 더하기 / - = 빼기 / * = 곱하기 / / = 나누기
Ex)
Select 음식 배달시간, 음식 주문시간, 음식 주문시간 + 음식 배달시간
From food_orders

하지만 엑셀과 동일하게 더욱 깔끔하게 해당 함수들을 사용할 수 있으므로 이걸 쓰는 것이 더 편리하다.

함수명 함수 설명 사용방법 및 해설
SUM 해당 칼럼에 있는 모든 값을 더한다.
(값 안의 숫자값을 그대로 더한다.)

직접해보니 '숫자값'은 가능하지만
'문자형'의 값은 불가능하다.
[적어도 지금배운 것에 한해서는]
Select Sum(price) as total_price
From food_orders

food_orders 테이블에서 가격 칼럼에 있는
모든수치의 합계를 계산하여 이를 도출한다.
AVERAGE
(줄여서 AVG)
해당 칼럼에 있는 모든 값의
평균적인 수치값을 도출한다.

직접해보니 '숫자값'은 가능하지만
'문자형'의 값은 불가능하다.
[적어도 지금배운 것에 한해서는]
Select AVG(quantity) average_of_quantity
From food_orders

food_orders 테이블에서 양(갯수) 칼럼에 있는
모든 양의 평균을 계산하여 이를 도출한다.
COUNT
(* Distict)
엑셀과 마찬가지로 데이터를 1개로
치환해서 해당 데이터가 몇 개인지
세어주는 함수

['문자 함수'=1 로 봐서 1개로 치고,
'숫자형'=1로 봐서 1개로 친다.
같은 단어도 당연히 1로 친다.]

* Distict
강의에서는 몇개를 자기고 있는지를 구한다.
라고 하는데 사실은 '중복된 값을 제거할 때,
사용하는 함수라고 한다.
즉, count 에서만 쓰는 함수는 아니다.
TIP)
Count (*) or (1) 은 전체값을 나타낸다.
Count (칼럼) 은 해당 값의 갯수만 구한다.

Select count(1) count_of_orders
From food_orders
-> 이 경우에는 주문 테이블 그 자체 전부를
계산하라는 의미를 말한다.

Select count(1) count_of_orders,
count(distinct customer_id) count_of_customers
From food_orders
MIN 현재 테이블의 모든 값 중에서
가장 작은 값을 도출한다.

직접해보니 '숫자값'은 가능하지만
'문자형'의 값은 불가능하다.
[적어도 지금배운 것에 한해서는]
Select Min(price) as food_price
From food_orders
--> food_orders 테이블에서 가격 칼럼에서
가장 낮은 가격을 출력하라.
MAX 현재 테이블의 모든 값 중에서
가장 큰 값을 도출한다.

직접해보니 '숫자값'은 가능하지만
'문자형'의 값은 불가능하다.
[적어도 지금배운 것에 한해서는]
Select Max(price) as food_price
From food_orders
--> food_orders 테이블에서 가격 칼럼에서
가장 높 가격을 출력하라.

3. GROUP BY 절

GROUP BY 는 데이터를 그룹화 하는 절을 말한다.
쉽게 말하면 특정 칼럼을 기준으로 집계 함수를 사용하여 COUNT, SUM, AVG 와 같은 함수들에게서 데이터를 추출할때 사용하는 함수를 말한다.

수많은 WHERE 절을 사용하여 조회하는 것보다는 GROUP 절을 사용하여 원하는 단위로 여러 단위의 Query(절) 없이 계산할 수 있는 절 중에 하나이다.

Select 칼럼 1, 칼럼 2
       Sum (계산 칼럼)
from data table
group by 카테고리 칼럼 (원하는 칼럼 아무거나)

예시 - 책에서 나온 예시를 그대로 해보기

[음식점별 주문 금액 최댓값 조회하기]

Select restaurant_name, max(price) max_price
From food_orders
group by restaurant_name

-> 해석 : food_orders 데이터 테이블에서 레스토랑 이름 칼럼 그룹 중에서 가장 최대 값을 도출해라.
GROUP BY 는 SELECT 절에 존재해야 사용할 수 있으며, SELECT 절에 사용된 함수를 제외하면 GROUP BY 에 적힌다.

4. ORDER BY

ORDER BY 절은 조회하는 결과를 원하는 순서대로 정렬하는 QUERY(절)이라고 할 수 있다.
해당 문구가 없다면 일반적으로는 랜덤으로 값이 출력된다. 이에 오름차 순으로 값을 정렬할 것인지, 내림차 순으로 값을 정렬할 것인지 정해주는 것이다.

TIP) 오름차순 : 숫자가 점점 커짐, A -> Z / 내림차순 : 숫자가 점점 작아지는 순서, Z -> A

Select 칼럼1, 칼럼2
       집계함수(ex. sum, avg ..) (계산할 칼럼)
From data table
Group by 칼럼 1(위에서 언급된 칼럼 1,2 모두 해당)
Order by 정렬을 원하는 칼럼 (카테고리 칼럼 1,2) 도 가능, 집계함수 (칼럼)

ORDER BY 함수는 GROUP BY 와는 다르게 정렬을 원하는 칼럼이면 어떠한 칼럼과 상관없이 모두 사용할 수 있다.
오름차순, 내림차순을 쓰고 싶을 때는 다음과 같이 쓴다.

종류 구문 예시
오름차순 강의는 생략
asc도 가능
order by name asc
order by sum(price)
내림차순 desc order by avg(quantity) desc
order by restaurant_name desc

5. SQL 기본 구조 작성 방법

Select 칼럼1, 칼럼2, Sum(칼럼3)...
From data table
Where 원하는 칼럼
Group by 함수 칼럼을 제외한 나머지 카테고리
Order by Select 함수에서 선택된 칼럼들

오늘 2주차를 모두 완료하면서 느꼈던 점은 SQL의 기본 구조에 대해서 배웠다는 점이다.
개강하면서 코드카타를 풀었는데, 막상 풀어보니 어려워서 좀 헤맸다.

다 강의에서 알려준 내용들인데도 불구하고 어떤 함수를 써야하지? 이리저리 뒤지고 꺠지고.
한번 썼었는데, 갑자기 출력이 안되거나 출력은 됐는데 답이 아니란다. 그래서 엄청 고민하다가 결국 2문제 정도
제출하게 됐었다.

아...잠깐 Replace, Substring, concat 과 관련해서 들었는데 얼마나 헷갈리던지.. 아직도 잘 모르겠다.
지금이라도 다시 1주차꺼 복습해야지. 주말 됐다고 다시 까먹고 또 까먹는 기분이다. 역시 한번 배웠다고
끝이 아니구나. (그래서 내가 회계랑 세무를 그렇게 말아먹었지...)

여튼 지금이라도 다시 1주차 내용 복습해야겠다.

myo