【SQL】Delete使用

目录

语法

需求

示例

分析

代码


语法

DELETE删除表中所需内容

删除表中满足特点条件的行:DELETE FROM 表名 WHERE 条件;

删除表中所有行:DELETE FROM 表名;

WHERE子句

WHERE子句用于指定从表中选取记录的条件。允许筛选数据,只返回满足特定条件的记录。WHERE子句可以包含各种条件,这些条件可以基于一个或多个列的值。可以使用逻辑运算符(如ANDORNOT)来组合多个条件。后文示例可供提供and和not的用法。

子查询

子查询(Sub Query)或称为内查询(Inner Query)、嵌套查询(Nested Query),是SQL语言中一种常用的程序模块,用于在一个查询语句中嵌套另一个查询语句。当一个查询的结果是另一个查询的条件时,这个查询就被称为子查询。

  • 子查询必须括在圆括号中。
  • 子查询SELECT子句通常只有一个列,除非主查询中多个列与子查询中的列进行比较。
  • 子查询不能直接使用ORDER BY,但可以在子查询中使用GROUP BY。
  • 返回多行数据的子查询只能与多值操作符(如IN)一起使用。

需求

表: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| email       | varchar |
+-------------+---------+
id 是该表的主键列(具有唯一值的列)。
该表的每一行包含一封电子邮件。电子邮件将不包含大写字母。

编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 id 的唯一电子邮件。

运行脚本后,显示的答案是 Person 表。驱动程序将首先编译并运行代码片段,然后再显示 Person 表。Person 表的最终顺序 无关紧要 。

示例

输入: 
Person 表:
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
| 3  | john@example.com |
+----+------------------+
输出: 
+----+------------------+
| id | email            |
+----+------------------+
| 1  | john@example.com |
| 2  | bob@example.com  |
+----+------------------+
解释: john@example.com重复两次。我们保留最小的Id = 1。

分析

编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 id 的唯一电子邮件。

相当于删除所有id较大且重复的电子邮箱

仅提供一个Person表,包含id和email

可以直接作笛卡尔积,比较id大小和电子邮箱,删除所有id较大且相同的电子邮箱

通过where语句和and并列即可实现,where a.id>b.id and a.email=b.email

同样的思路,也可以通过子查询实现

通过子查询查找id最小的电子邮箱,

select min(id) as id from Person group by email

再通过where not in 剔除其他信息

where id not in 
(
   select id from 
   (
       select min(id) as id 
       from Person 
       group by email
   ) u
)

代码

delete a
from Person a, Person b
where a.id>b.id and a.email=b.email

OR

delete from Person
where id not in 
(
   select id from 
   (
       select min(id) as id 
       from Person 
       group by email
   ) a
)

### 如何在VBA中正确使用SQL DELETE语句 #### SQL DELETE 语句概述 DELETE FROM 语句用于删除表中的现有记录。当希望移除特定条件下的某些记录或是清空整个表格的内容时,可以使用此命令。需要注意的是,在编写 DELETE 语句时不指定 WHERE 子句将会导致该表内所有的行被清除。 #### VBA 中实现 SQL DELETE 的方法 为了通过 VBA 执行 SQL DELETE 命令来操作外部数据库(例如 Microsoft Access),通常需要遵循如下模式: 1. **设置连接对象** 需要先初始化 ADO (ActiveX Data Objects) 或 DAO (Data Access Objects) 连接对象并打开目标数据库文件。 2. **构建 SQL 查询字符串** 构造包含适当筛选条件的 DELETE 语句作为查询的一部分。确保指定了正确的表名称以及任何必要的过滤器以限定受影响的范围。 3. **执行命令** 将上述准备好的 SQL 字符串传递给已建立的数据库连接实例来进行实际的数据修改动作。 4. **关闭资源** 完成所有操作之后记得释放占用的对象变量,并断开与数据库之间的链接。 下面给出一段具体的代码样例展示如何安全有效地运用这些原则完成预期的任务: ```vba Sub DeleteRecords() Dim conn As Object ' 创建ADO连接对象 Set conn = CreateObject("ADODB.Connection") ' 实例化 ' 设置连接字符串,此处假设为Access数据库路径 Const DB_PATH = "C:\path\to\your\Database.accdb" With conn .Provider = "Microsoft.ACE.OLEDB.12.0;" .Open "Data Source=" & DB_PATH On Error GoTo ErrorHandler ' 错误处理机制 ' 准备并运行带有WHERE子句的安全版本delete语句 .Execute ("DELETE FROM Employees WHERE Department='Sales'") MsgBox "成功删除符合条件的员工记录.", vbInformation ExitHandler: If Not .State = adStateClosed Then .Close Exit Sub ErrorHandler: MsgBox Err.Description, vbCritical Resume ExitHandler End With End Sub ``` 这段脚本展示了怎样利用 VBA 和 ADO 库去访问本地存储的一个 Access 数据库,并从中依据部门字段等于'Sales'这一条件精准定位到待删除的目标集合[^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F_D_Z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值