[Day14] 讀 RDBMS 課程 2019 - Common SQL Syntax
Author: Triton Ho
At Lesson 4: Page 1 - Page 26
Notes
SQL: 2003
- (2019 時間點) MYSQL 5.7 不支持、PostgresSQL 不支持 MERGE, Oracle 全面支持、MARIADB 10.2 支持
- New Features: window function, MERGE
case when
- SQL 的 if-else
- 使用時機:通常要修正報表或者資料時會用到
Eg.
SELECT * frim students ORDER BY gender ( case when gender = 'female' then height when gender = 'male' then height * -1 end )
Window Function
- 在 SQL 2003 之前,若需要 pagination ,需使用各家 RDBMS 自己的語法
- Start from SQL 2003
- 它統一了 pagination 的做法,並且增強了功能
- Eg.
ROW_NUMBER() OVER, RANK() OVER
WITH
Clause
- 能在 Query statement 中,建立只給這 statement 使用的 view (modularization)
Eg. 找尋每班成績首三名的學生中,他們之間有兄弟姐妹關係的人
With top3students as ( select * from ( SELECT class_id, student_id, parent_id rank() over (partition by class_id order by score desc) as ranking FROM students ) t1 where t1.ranking <= 3 ) Select * from top3students t1 where exists ( Select 1 from top3students t2 where t1.student_id != t2.student_id and t1.parent_id = t2.parent_id )
- 推測使用時機:也就是說有重複的 query 時,可以用
WITH
clause 來避免重複寫
Recursive Query
- 在 2019 年時語法尚未統一 (儘管 Oracle/PostgresSQL/MYSQL 都有支援)
- 一般來說是為了 tree-like 的資料,像是: 祖譜、物種分類
Others
Insert into...... select
: 將 A table 抄到 B table 很好用