数据库进阶之路:常见例题
概述
本文用于记录常见的数据库编程例题。
重要
- 本文中将了解如何写出更好的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);