1. 程式人生 > 其它 >資料庫進階之路:常見例題

資料庫進階之路:常見例題

概述

本文用於記錄常見的資料庫程式設計例題。

重要

  • 本文中將瞭解如何寫出更好的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);