007. 조건 분기, 집합연산, 윈도우 함수, 갱신 - llighter/database GitHub Wiki

SQL 레벨업

1. SQL과 조건분기

- CASE 식의 구문

CASE expression
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
   ...
    WHEN conditionN THEN resultN
    ELSE result
END

- CASE 식의 작동

  • 절차지향의 switch 식과 유사
  • 차이 : SQL 조건 분기에서는 특정 값을 리턴
SELECT OrderID, Quantity,
CASE
    WHEN Quantity > 30 THEN "The quantity is greater than 30"
    WHEN Quantity = 30 THEN "The quantity is 30"
    ELSE "The quantity is something else" 
END AS Comparison
  • CASE식의 강력한 점은 이라는 것이다. 따라서 어디서든 활용할 수 있다.
  • 예) SELECT, WHERE, GROUP BY, HAVING, ORDER BY
SELECT CustomerName, City, Country FROM Customers
ORDER BY (CASE
WHEN City IS NULL THEN Country
ELSE City
END);

2. SQL의 집합 연산

- UNION으로 합집합 구하기

109. UNION 참고

- INTERSECT로 교집합 구하기

- EXCEPT로 차집합 구하기

cf. 뺄셈 연산은 교환법칙이 성립하지 않는다.

3. 윈도우 함수

  • 집약기능이 없는 GROUP BY
  • PARTITION BY
    • 출력 결과의 레코드 수 = 입력되는 테이블의 레코드 수
    • 집약 함수 뒤에 OVER 구를 작성
SELECT name,
       age,
       RANK() OVER(ORDER BY age DESC) AS rnk
   FROM Address;
  • DENCE_RANK() : RANK()와 달리 건너뛰기 없음.

4. 트랜잭션과 갱신

SQL 갱신 작업의 종류 3가지

  • 삽입(INSERT)
  • 제거(DELETE)
  • 갱신(UPDATE)
  • cf 삽입 + 갱신 = MERGE

- INSERT로 데이터 삽입

INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
INSERT INTO table_name
VALUES (value1, value2, value3, ...);

- DELETE로 데이터 제거

DELETE FROM table_name
WHERE condition;
  • cf. 테이블을 삭제하고 싶은 경우 DROP TABLE table_name;

- UPDATE로 데이터 갱신

-- syntax
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;
-- example
UPDATE Customers
SET ContactName = 'Alfred Schmidt', City= 'Frankfurt'
WHERE CustomerID = 1;