SQL이란?
- RDBMS에서 자료를 관리, 처리하기 위해 설계된 언어
1. SELECT FROM
- SELECT [column] FROM [table]
2. WHERE
- SELECT [column] FROM [table] WHERE [condition]
3. GROUP BY
- SELECT [columns], [function(column)] FROM [table] GROUP BY [column]
예) 각 product id별 quantity의 최솟값에 대한 목록을 보여주세요.
SELECT ProductID, MIN(Quantity) FROM OrderDetails GROUP BY ProductID
- 들어갈 수 있는 function: SUM(), COUNT(), MAX(), MIN(), AVG()
4. ORDER BY
- SELECT [column] FROM [table] ORDER BY column
- 기본적으로 오름차순(asc)이며 내림차순을 원할 경우 정렬 기준으로 삼을 column 뒤에 desc를 붙임
5. LIMIT
- SELECT [column] FROM [table] ORDER BY column LIMIT [num]
- 한 번에 보여주고 싶은 row 개수를 LIMIT 뒤에 적어주기
6. DISTINCT
예) 주문 기록이 존재하는 고객의 수
SELECT COUNT(DISTINCT CustomerID) FROM Orders
7. LIKE
예) 1996년에 주문 기록이 존재하는 고객의 수
SELECT COUNT(DISTINCT CustomerID) FROM Orders WHERE Orderdate LIKE '1996%'
- %는 와일드카드로, 뒤에 문자/숫자/기호가 있어도 되고, 없어도 됨
8. AS
예) 1996년에 주문 기록이 존재하는 고객의 수인 Valid_count
SELECT COUNT(DISTINCT CustomerID) AS Valid_count FROM Orders WHERE Orderdate LIKE '1996%'
- AS를 쓰지 않으면 컬럼명이 COUNT(DISTINCT CustomerID)로 나오기 때문에 지저분해서 AS를 쓰는 것임
9. HAVING
- 일반적으로 WHERE 절에서는 집계함수를 사용할 수 없는데, HAVING을 이용하면 집계함수를 이용해 조건비교를 할 수 있다.
예) Quantity의 최댓값이 100보다 크거나 같은 상품에 대한 목록
SELECT ProductID, MAX(Quantity) FROM OrderDetails GROUP BY ProductID HAVING MAX(Quantity) >= 100
10. JOIN
예) 모든 주문에 대하여 주문이 발생한 국가에 대한 정보를 포함한 OrderID, ShipperID, City 목록
SELECT OrderID, ShipperID, City FROM Orders JOIN Customers ON Orders.CustomerID = Customers.CustomerID
11. Subquery
-
하나의 SQL 문장에 속하는 또다른 SQL 문장, 두 번 이상의 query를 통해 얻을 수 있는 결과를 한 번의 query로 해결 가능
SELECT 별칭1.열 이름1, 별칭2.열 이름2
FROM 테이블 명1 (AS) 별칭1 LEFT OUTER JOIN
(SELECT *
FROM 테이블 명2
WHERE 조건 절) (AS) 별칭2
ON 별칭1.KEY=별칭2.KEY
-
WITH를 사용하면 조금 더 깔끔하게 사용 가능
문제 풀이
- 집계함수로 조건을 걸어줄 게 아니라면 Having 대신 Where을 사용해야 함 (다른 결과가 나옴)
- 조건에 따라 그룹으로 묶기 전에 조건을 걸어줘야 할 수 있음! (순서 중요)