그래서 SQL로 얻을 수 있는건 이게 다에요?
그렇게 생각하고 이 글에 들어왔다면 오산이다. 나도 오만했다. SQL 언어의 장벽은 다시 한글 떼기처럼 다가온다.
그래서 오늘은 지난 번과 같은 DB와 Table로 복잡한 숫자 놀이도 해볼 것이다.
그래서 SQL이 엑셀보다 나아요?
엑셀도 하나의 훌륭한 도구이다. 하지만 SQL를 하나의 언어로 생각한다면 둘을 비교할 수는 없을 것이다.
그래서 또 어떤 기능이 있는데요?
또 다른 함수로 현재의 Table이 가지고 있는 데이터의 값과 갯수를 구할 수 있다.
그래서 이 둘이 뭐가 다를까?
예시) 음식 주문에서 주문 건수랑 주문한 고객 수 좀 정리해줘
Select count(1), count(distinct customer_id)
from food_orders
이렇게만 요청하면 음식 주문 Table에서 주문 건수와 주문한 고객의 수가 짜잔하고 나타난다.
→ 체크포인트 : 데이터 갯수(count) 안에 데이터의 값(distinct)가 들어간다. 이를 유념해서 쿼리를 작성하자.
그리고 최소값, 최대값의 범위도 정할 수 있다.
+최소값 = MIN(컬럼)
+최대값 = MAX(컬럼)
예시) 음식 주문에서 최소 음식 가격이랑 최대 음식 가격 좀 조회해줘
Selcet min(price), max(price)
from food_orders
이러면 우리는 조건절과 함께 데이터의 개수도 함께 합칠 수 있다.
그러면 어떻게 조건절과 데이터 값을 합쳐요?
바로 예시를 들어보자.
예시) 주문 금액이 3만원 이상인 주문건의 갯수 구하기
Select count(order_id)
from food_orders
where price>=30000
이때 무조건 예시에서 쿼리로 넘어가는 것이 아니라 쿼리를 역으로 해석해보는 연습을 해보는 것이 중요하다고 느낀다.
그래서 또 어떤 숫자놀이를 할 수 있어요?
앞으로 더 큰 DB를 볼 것이고 더 많은 Table을 사용할 것인데 그 때마다 조건절 Where을 사용해서 길게 만드는 것은 비효율적이다.
그럼 효율적으로 줄일 수 있는 방법은 뭘까? 하나 하나씩 흩어져있는 조건을 하나의 '그룹'으로 묶는 것이다.
그래서 문장도 똑같이 'group by'를 사용한다.
예시) 음식점별 주문 금액 최대값 조회해줘
Select resturant_name, max(price)
from food_orders
group by resturant_name
이러면 음식점별로 주문 금액이 최대값인 것들만 정리되어 출력된다.
또한 오름차순, 내림차순으로도 정리할 수 있는데 이 때는 'order by'를 사용한다.
기본적으로 'order by'는 오름차순으로 정렬되기 때문에 내림차순으로 정리하고 싶다면 'order by sum(컬럼) desc'와 같이 'desc'가 마지막에 붙으면 된다.
예시) 고객을 이름 순으로 오름차순으로 정렬해줘
Select *
from customers
order by name
오늘의 SQL 요약
▶ SQL에서도 엑셀과 같이 다양한 숫자 놀이를 할 수 있다.
▶ group by, order by에 씌임에 주의하자
▶ 내가 데이터를 뽑는 목적을 다시 한 번 생각하자.