数据库进阶之路:常见例题

概述

本文用于记录常见的数据库编程例题。

重要

  • 本文中将了解如何写出更好的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);
posted @ 2022-03-29 10:32  adminmttt  阅读(35)  评论(0编辑  收藏  举报