資料庫進階之路:常見例題
阿新 • • 發佈:2022-03-29
概述
本文用於記錄常見的資料庫程式設計例題。
重要
- 本文中將瞭解如何寫出更好的SQL語句:
- 刪除重複元素的SQL
前置條件
- 基本SQL的增刪改查語句
經典案例
1.刪除重複行的高效SQL
假設存在這麼一張表格
name(商品名) | price(價格) |
---|---|
蘋果 | 500 |
橘子 | 100 |
橘子 | 100 |
橘子 | 100 |
香蕉 | 80 |
刪除重複行得到如下表格: |
name(商品名) | price(價格) |
---|---|
蘋果 | 500 |
橘子 | 100 |
香蕉 | 80 |
使用關聯子查詢刪除重複行的SQL語句:
DELETE FROM Products WHERE rowid <( SELECT MAX(P2.ROWID) FROM Products P2 WHERE Products.name = P2.name AND Products.price = P2.price);
思路:直接求刪除哪些行比較困難,所以這裡先求出了要留下的行,然後將它們從全部組合中提取出來除掉,把剩下的刪除——這就是補集的思想。使用關聯子查詢的這種方法是以“商品名,價格”組合為單位來處理的(面向過程語言的迴圈、中斷控制)。接下來,我們在子查詢裡直接求出要刪除的rowid。
DELETE FROM Products
WHERE rowid in (
SELECT rowid FROM Products
EXCEPT
SELECT MAX(rowid) FROM Products GROUP BY name,price);