SQL Delete使用示例详解

 更新时间:2025年01月24日 10:29:03   作者:F_D_Z  
文章主要介绍了如何使用SQL中的DELETE语句删除表中满足特定条件的行,包括删除所有行和根据条件删除部分行,讨论了WHERE子句的使用方法,通过示例,展示了如何删除所有重复的电子邮件,只保留一个具有最小id的唯一电子邮件,感兴趣的朋友一起看看吧

语法

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  |
+----+------------------+

分析

编写解决方案 删除 所有重复的电子邮件,只保留一个具有最小 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
)

到此这篇关于SQL Delete使用的文章就介绍到这了,更多相关SQL Delete使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • clickhouse介绍、安装、数据类型、sql操作

    clickhouse介绍、安装、数据类型、sql操作

    ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告,这篇文章主要介绍了clickhouse介绍、安装、数据类型、sql操作的相关知识,需要的朋友可以参考下
    2025-04-04
  • SQL Server复制删除发布时遇到错误18752的问题及解决方法

    SQL Server复制删除发布时遇到错误18752的问题及解决方法

    朋友反馈他无法删除一台SQL Server数据库上的发布,具体情况为删除一个SQL Server Replication的发布时,遇到这样的错误问题如何解决呢,下面小编给大家分享SQL Server复制删除发布时遇到错误18752的问题及解决方法,感兴趣的朋友一起看看吧
    2024-01-01
  • sql server如何去除数据中的一些无用的空格

    sql server如何去除数据中的一些无用的空格

    这篇文章主要介绍了sql server去除数据中的一些无用的空格,本文给大家提到了一些常用的函数,结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • sql server 更改日志模式的三种方法

    sql server 更改日志模式的三种方法

    更改SQL Server数据库的日志恢复模式是数据库管理中的一个重要操作,本文就来介绍一下SQL Server三种主要的恢复模式,具有一定的参考价值,感兴趣的可以了解一下
    2024-12-12
  • SQl Function 创建函数实例介绍

    SQl Function 创建函数实例介绍

    这篇文章主要介绍了SQl Function 创建函数实例介绍,需要的朋友可以参考下
    2016-10-10
  • INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别

    INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别

    INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别介绍,需要的朋友可以参考下面的说明与条件
    2012-05-05
  • Godaddy 导入导出MSSQL数据库的实现步骤

    Godaddy 导入导出MSSQL数据库的实现步骤

    可以从限制文件中导入SQL共享服务器数据库。如果想把存放在其他地方的数据导入,需要先把其内容拷到限制文件中。(
    2010-02-02
  • 数据库分页存储过程代码

    数据库分页存储过程代码

    数据库分页存储过程代码...
    2007-04-04
  • SQLServer中的触发器基本语法与作用

    SQLServer中的触发器基本语法与作用

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。本文给大家介绍SQLServer中的触发器基本语法与作用,感兴趣的朋友一起学习吧
    2016-04-04
  • SQL Server利用bcp命令把SQL语句结果生成文本文件

    SQL Server利用bcp命令把SQL语句结果生成文本文件

    在SQL Server里可以调用DOS下的命令行工具bcp来实现把表里的数据或者SQL语句结果生成文本文件,详细看下操作方法,感兴趣的你可不要错过了哈
    2013-02-02

最新评论