SQL 기초 튜토리얼

이더영·2022년 9월 30일
0

SQL이란?

  • RDBMS에서 자료를 관리, 처리하기 위해 설계된 언어

1. SELECT FROM

  1. SELECT [column] FROM [table]

2. WHERE

  1. SELECT [column] FROM [table] WHERE [condition]

3. GROUP BY

  1. 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

  1. SELECT [column] FROM [table] ORDER BY column
  • 기본적으로 오름차순(asc)이며 내림차순을 원할 경우 정렬 기준으로 삼을 column 뒤에 desc를 붙임

5. LIMIT

  1. 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

  1. 하나의 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

  2. WITH를 사용하면 조금 더 깔끔하게 사용 가능

문제 풀이

  1. 집계함수로 조건을 걸어줄 게 아니라면 Having 대신 Where을 사용해야 함 (다른 결과가 나옴)
  2. 조건에 따라 그룹으로 묶기 전에 조건을 걸어줘야 할 수 있음! (순서 중요)

0개의 댓글