首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用where not exists和select distinct子查询时,不会从表中删除SQL行

。这两个子查询是用于查询数据而不是删除数据的。

  1. where not exists子查询:where not exists子查询用于检查一个表中是否存在满足特定条件的记录。它的语法如下:
代码语言:sql
复制

SELECT column1, column2, ...

FROM table1

WHERE NOT EXISTS (SELECT column1 FROM table2 WHERE condition);

代码语言:txt
复制

这个子查询会返回满足条件的记录,但不会删除任何数据。它可以用于在查询结果中排除已经存在于另一个表中的记录。

例如,假设我们有两个表:customersorders,我们想要查询没有下过订单的客户。可以使用where not exists子查询来实现:

代码语言:sql
复制

SELECT *

FROM customers

WHERE NOT EXISTS (SELECT * FROM orders WHERE orders.customer_id = customers.id);

代码语言:txt
复制

这个查询会返回所有没有下过订单的客户。

  1. select distinct子查询:select distinct子查询用于返回唯一的记录,即去除重复的记录。它的语法如下:
代码语言:sql
复制

SELECT DISTINCT column1, column2, ...

FROM table;

代码语言:txt
复制

这个子查询会返回表中所有不重复的记录,但不会删除任何数据。

例如,假设我们有一个products表,其中包含了多个相同名称的产品。我们想要查询所有不重复的产品名称,可以使用select distinct子查询:

代码语言:sql
复制

SELECT DISTINCT name

FROM products;

代码语言:txt
复制

这个查询会返回所有不重复的产品名称。

总结:

使用where not exists和select distinct子查询时,不会从表中删除SQL行。它们分别用于查询满足特定条件的记录和返回不重复的记录。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SQL Cookbook》 - 第三章 多表查询

为了避免NOT INNULL值带来的问题,可以结合使用NOT EXISTS关联查询。关联查询指的是外层查询执行的结果集会被内层查询引用。...EXISTS/NOT EXISTS关联查询一起使用时,SELECT的列,不重要,之所以使用了NULL,是为了让注意力集中在查询的连接操作上,而不是SELECT的列上。 5. ...从一个检索另一个不相关的 基于共同列将两个连接起来,返回一个的所有,不论这些行在另一个是否存在匹配,然后,只存储这些不匹配的即可。...组合适用连接查询聚合函数 如果连接查询产生了重复,通常有两种办法来使用聚合函数, (1) 调用聚合函数使用关键字DISTINCT,每个值都会先去掉重复项再参与计算。...多个返回缺少的值 使用全外连接,基于一个共同值两个返回缺少的值,全外连接查询就是合并两个的外连接查询的结果集。

2.3K50

PostgreSQL基础知识整理

可以使用WHERE子句DELETE查询删除所选,否则所有的记录会被删除。...可以使用查询的有SELECT,INSERT,UPDATEDELETE语句,与运算符如=,,>=,<=,IN等一起使用。有几个子查询必须遵循的规则: 必须用括号括起来的查询。...查询只能有一个在SELECT子句中的列,除非多列在主查询查询来比较其选定的列。 ORDER BY不能使用查询,虽然主查询就可以使用ORDER BY。...GROUP BY可以用来执行相同的功能在查询的ORDER BY。 查询返回多于一只能用于使用多值的运算符,如为IN,EXISTS,IN,ANY / SOME,ALL运算符。...EXISTS指定一个查询,检测的存在。NOT EXISTS的作用与EXISTS正好相反。如果子查询没有返回,则满足了NOT EXISTSWHERE子句。

3.5K10

数据库系统概述——第三章 关系数据库标准语言SQL(知识点复习+练习题)

A.职工删除(‘025’,‘王芳’,‘03’,720) B.将(‘005,’,‘乔兴’,‘04’,750)插入到职工 C.将职工号为,‘001’的工资改为700 D.将职工号为,’038’...的部门号改为‘03’ 5、在SQL语言中,用来测试一个集合里是否有重复元组存在,使用下列哪一个关键字(A) A.UNIQUE B.DISTINCT C.EXISTS D.NOT IN 6、SQL数据查询语句...SELECT Sname,2012-Sage /*假定当年的年份为2012年,减去年龄 即得出生年份*/ FROM Student; (2)选择的若干元组 取消取值重复的:(指定DISTINCT关键词...,去掉重复的) 例:查询选修了课程的学生号码 SELECT DISTINCT Sno (使用DISTINCT关键词取消了重复学号的) FROM SC; 查询满足条件的:(WHERE语句) 例:...,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname=‘ 刘晨 ’); 带有比较运算符的查询:(当内查询的结果是一个值

15710

详解SQL集合运算

为什么使用集合运算: 1.在集合运算中比联接查询EXISTS/NOT EXISTS更方便。 在阅读下面的章节时,我们可以先把环境准备好,以下的SQL脚本可以帮助大家创建数据库,创建,插入数据。...如果输入的查询1的第一列为char类型,输入的查询2的第一列为datetime类型,则会提示转换失败:字符串转换日期/或时间,转换失败; (6)集合运算结果列名由输入的查询1决定,如果要为结果分配结果列...,应该在输入的查询1分配相应的别名; (7)集合运算,对行进行进行比较,集合运算认为两个NULL相等; (8)UNION支持DISTINCTALL。...进行查询,如果custid或empid其中有null值存在,则不能用NOT EXISTS进行查询,因为比较NULL值的结果是UNKNOWN,这样的用NOT EXISTS查询返回的查询的行会被过滤掉,...custid或empid其中有null值存在,则不能用EXISTS进行查询,因为比较NULL值的结果是UNKNOWN,这样的EXISTS查询返回的查询的行会被过滤掉,所以最后的外查询会少NULL值的

2.2K80

高效sql性能优化极简教程

) 应用执行计划 执行必要的I/O排序操作 提取(FETCH) 查询结果返回记录 必要进行排序 使用ARRAY FETCH机制 七,sql的基本连接方式 连接有几种?...(此时这样建只是为了演示连接SQL语句,当然实际开发我们不会这样建,实际开发这两个会有自己不同的主键。) 一、外连接 外连接可分为:左连接、右连接、完全外连接。...5,用exists、not existsin、not in相互替代 原则是哪个的查询产生的结果集小,就选哪个 select * from t1 where x in (select y from...6,使用exists替代distinct 当提交一个包含一对多表信息(比如部门雇员)的查询,避免在select子句中使用distinct,一般可以考虑使用exists代替,exists使查询更为迅速...子句中对列的任何操作结果都是在sql运行时逐行计算得到,因此它不得不进行全扫描,而没有使用上面的索引;如果这些结果在查询编译就能得到,那么就可以被sql优化器优化,使用索引,避免全扫描,因此sql

3.2K50

【T-SQL基础】03.查询

在逻辑上,查询会为每个外部单独计算一次。 标量子查询:返回单个值的查询。标量子查询可以出现在外部查询中期望使用单个值的任何地方。 多值查询:在一个列 为什么要使用查询?...一、独立查询 1.独立标量子查询(查看练习题1,2) 例子:HR.Employees返回empid最大的员工信息。...2.如果标量子查询没有返回任何值,其结果就转换为NULL,NULL行进行比较得到的是UNKNOWN,查询过滤器不会返回任何让过滤表达式计算结果为UNKNOWN的。...3.查询distinct关键字 当我们想要剔除掉查询的重复值,会想到在查询不必指定distinct关键字,其实是没有必要的,因为数据库引擎会帮助我们删除重复的值,而不用我们显示指定distinct...如果O1某行的订单日期查询返回的订单日期匹配,那么O1的这个订单日期就是当前客户的最大的订单日期,在这种情况下,查询便会返回O1的这个

1.8K60

SQL 进阶技巧(上)

2、注释,有单行注释多行注释,如下 -- 单行注释 -- SomeTable查询col_1 SELECT col_1 FROM SomeTable; /* 多行注释 SomeTable...SQL 性能优化技巧 一、参数是查询使用 EXISTS 代替 IN 如果 IN 的参数是(1,2,3)这样的值列表,没啥问题,但如果参数是查询,就需要注意了。比如,现在有如下两个: ?...如果使用 EXISTS,那么只要查到一数据满足条件就会终止查询, 不用像使用 IN 一样扫描全。...ON A.id = B.id; 用到了 「id」列上的索引,而且由于没有查询,也不会生成临时 二、避免排序 SQL 是声明式语言,即对用户来说,只关心它能做什么,不用关心它怎么做。...八、减少中间SQL 查询的结果会产生一张新,不过如果不加限制大量使用中间的话,会带来两个问题,一是展示数据需要消耗内存资源,二是原始的索引不容易用到,所以尽量减少中间也可以提升性能

1.1K20

SQL起飞(优化)

1.1 查询EXISTS代替IN 当IN的参数是查询,数据库首先会执行查询,然后将结果存储在一张临时的工作表里(内联视图),然后扫描整个视图。很多情况下这种做法都非常耗费资源。...使用EXISTS的话,数据库不会生成临时的工作。但是代码的可读性上来看,IN要比EXISTS好。使用IN的代码看起来更加一目了然,易于理解。...因此,如果确信使用IN也能快速获取结果,就没有必要非得改成EXISTS了。 这里用Class_AClass_B举例, 图片 我们试着Class_A查出同时存在于Class_B的员工。...(同样的IN也可以使用索引,这不是重要原因) 如果使用EXISTS,那么只要查到一数据满足条件就会终止查询,不用像使用IN一样扫描全。在这一点上NOT EXISTS也一样。...实际上,大部分情况在查询数量较小的场景下EXISTSIN的查询性能不相上下,由EXISTS查询更快第二点可知,查询数量较大使用EXISTS才会有明显优势。

1.4K42

MySQL数据库:SQL优化与索引优化

4、避免使用select的内联查询: 在select后面有查询的情况称为内联查询SQL返回多少查询就需要执行过多少次,严重影响SQL性能。...对于连续的数值,能用 between 就不要用 in: 10、小驱动大,即小的数据集驱动大的数据集: in exists 都可以用于查询,那么 MySQL in exists 有什么区别呢...(2)in在内查询或者外表查询过程中都会用到索引;exists仅在内查询时会用到索引 (3)一般来说,当查询的结果集比较大,外表较小使用exist效率更高;当查询的结果集较小,外表较大,...(4)对于 not in not exists,not exists 效率比 not in 的效率高,与查询的结果集无关,因为 not in 对于内外表都进行了全扫描,没有使用到索引。...not exists查询可以用到上的索引。

1.3K20

SQL进阶-9-谓词exists使用

extists谓词不仅可以将多行数据作为整体来表达高级的条件,还可以在使用关联查询表现出良好的性能。...将B全部记录作为参数 from Bar B where F.id=B.id); Exists查询select子句的列表可以有3种写法:...都不满足条件P SQL实现全称量化,需要将所有的行都满足条件P转成不存在不满足条件P的 案例1-查询没有参会人员 需求 Meeting找出没有参会的人员 ?...-- 小于50分的科目 需求2-查询分数 某个学生的所有记录,如果科目是数学,则分数在80分以上;如果科目是语文,则分数在50以上 SQL实现 select distinct student_id...需求3-查询全是1的 从下面的找出全部是1的 ?

1K20

Sql 语句中 IN EXISTS 的区别及应用「建议收藏」

EXISTS语句:执行student.length次 指定一个查询,检测的存在。遍历循环外表,然后看外表的记录有没有的数据一样的。匹配上就将结果放入结果集中。...但是,不一样的是它们的执行流程完全不一样:   使用exists关键字进行查询的时候,首先,我们先查询的不是查询的内容,而是查我们的主查询,也就是说,我们先执行的sql语句是: select *...区别及应用场景     in exists的区别: 如果子查询得出的结果集记录较少,主查询较大且又有索引应该用in, 反之如果外层的主查询记录较少,查询大,又有索引使用exists...not in not exists     如果查询语句使用了not in 那么内外表都进行全扫描,没有用到索引;而not extsts 的查询依然能用到上的索引。...11、用exists替换distinct: 当提交一个包含一对多表信息的查询,避免在select子句中使用distinct.

82330

MySQL优化总结

clo = 1 那么,使用这条sql查询,可直接(clo1,clo2)索引树获取数据,无需回查询 因此我们需要尽可能的在select后只写必要的查询字段,以增加索引覆盖的几率。...join 3.避免 SELECT *,数据库里读出越多的数据,那么查询就会变得越慢 4.尽可能的使用 NOT NULL列,可为NULL的列占用额外的空间,且在值比较使用索引需要特殊处理,影响性能...5.用exists、not existsin、not in相互替代 原则是哪个的查询产生的结果集小,就选哪个 select * from t1 where x in (select y from...6、使用exists替代distinct 当提交一个包含一对多表信息(比如部门雇员)的查询,避免在select子句中使用distinct,一般可以考虑使用exists代替,exists使查询更为迅速...SELECTDEPENDENT SUBQUERY:查询的第一个SELECT,取决于外面的查询DERIVED:导出SELECT(FROM子句的查询) table 输出的所引用的 type 联接类型

1.7K40

SQL养成这8个好习惯是一笔财富

OUTER JOIN保留(preserved table)未找到的行将作为外部添加到vt2 生成t3如果from包含两个以上表则对上一个联结生成的结果下一个重复执行步骤步骤直接结束 4...:处理select列表产生vt8 9.DISTINCT:将重复的vt8去除产生vt9 10.ORDER BY:将vt9的按order by子句中的列列表排序生成一个游标vc10 11.TOP:...(2)当在SQL语句中连接多个, 请使用的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。...C、杜绝不必要的查询连接查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。...六、查询的用法 查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它查询

10610

Oracle性能优化-查询到特殊问题

SQL> select * from dual where 2 not in (select 1 from dual); D - X SQL> select * from dual where 2 not...IN/EXISTS 原理来讲,IN操作是先进行查询操作,再进行主查询操作。EXISTS操作是先进行主查询操作,再到查询中进行过滤。...IN操作相当于对inner table执行一个带有distinct查询语句,然后得到的查询结果集再与outer table进行连接,当然连接的方式索引的使用仍然等同于普通的两连接。...当查询数据量巨大且索引情况不好(大量重复值等),则不宜使用产生对子查询distinct检索而导致系统开支巨大的IN操作;反之当外部数据量巨大(不受索引影响)而查询数据较少且索引良好,不宜使用引起外部扫描的...如果限制性强的条件在查询,一般建议使用IN操作。如果限制性强的条件在主查询,则使用EXISTS操作。 2. NOT IN/EXISTS查询,NOT IN子句将执行一个内部的排序和合并。

1.7K70

如何写出更快的 SQL (db2)

首先要明白什么是执行计划 执行计划是数据库根据 SQL 语句相关的统计信息作出的一个查询方案,这个方案是由查询优化器自动分析产生的,比如一条 SQL 语句如果用来从一个 10 万条记录的查 1...exists 代替 in 当()的数据量较大使用 exists() ,较少时可以使用 in ()。...like ‘%xx%’ 不会执行索引 like ‘y%xx%’ 会执行索引 用 TRUNCATE 替代 DELETE 来清空一个删除的记录,在通常情况下, 回滚段 (rollback segments...在这种情况下, 使用EXISTS(或 NOT EXISTS)通常将提高查询的效率. 在查询,NOT IN 子句将执行一个内部的排序和合并。...(比如部门雇员)的查询,避免在SELECT 子句中使用 DISTINCT, 一般可以考虑用 EXIST 替换, EXISTS 使查询更为迅速,因为 RDBMS 核心模块将在查询的条件一旦满足后

2.1K20

SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(二)数据查询

选择的若干元组 消除取值重复的,如果没有指定DISTINCT关键词,则缺省为ALL 【1】查询选修了课程的学生学号。...Cno= ' 2 '); 说明: 上层的查询块称为外层查询或父查询,下层查询块称为内层查询查询 SQL语言允许多层嵌套查询【即一个查询还可以嵌套其他查询查询的限制,不能使用ORDER...使用ANY或ALL谓词必须同时使用比较运算 语义为: > ANY 大于查询结果的某个值 > ALL 大于查询结果的所有值 < ANY 小于查询结果的某个值...指定要删除的元组 缺省表示要删除的全部元组,的定义仍在字典 三种删除方式 删除某一个元组的值 删除多个元组的值 带子查询删除语句 【1】 删除学号为201215128的学生记录...这是一场独特的学习冒险,基本概念到算法实现,逐步揭示更深层次的模式分析、匹配算法智能模式识别的奥秘。渴望挑战数据库SQL Server的模式匹配学习路径掌握信息领域的技术?

47710

数据仓库开发 SQL 使用技巧总结

in 好 -- in/notin -- 略 -- exists/not exists(略) -- 查询是相关的, 对于 scores 的每一查询检查 class 是否有对应的。 ...如果有匹配,则查询返回一个使外部查询包含 scores 的当前行的查询。 ...如果没有相应的,则查询不返回导致外部查询不包括结果集中 scores 的当前行的 select     id, score from     scores where     exists(...可通过在 left semi join, where ...in where exists 嵌套子查询来实现。...,不是按照索引内读,无法利用索引Using index 表示覆盖索引得到结果,避免回Using where 列数据是仅仅使用了索引的信息而没有读取实际的行动的返回,表示对表的全部请求都是索引的部分

3.1K30

3.4 《数据库系统概论》之数据查询SELECT(单查询、连接查询、嵌套查询、集合查询、多表查询

❶ 算术表达式 ❷ 字符串常量及函数 ❸ 使用列别名改变查询结果的列标题 (2)选择的若干元组() ① 关键词DISTINCT去掉重复的查询满足条件的元组() ❶ 比较大小 ❷ 确定范围...() ① 关键词DISTINCT去掉重复的 如果没有指定DISTINCT关键词,则缺省为ALL SELECT Sno FROM SC; /*等价于:*/ SELECT ALL Sno FROM...指定DISTINCT关键词,去掉重复的 SELECT DISTINCT Sno FROM SC; ② 查询满足条件的元组() 常用的查询条件 查询条件 谓词 比较 =,>,=,<=,!...当遇到2第一条大于1连接字段值的元组,对表2的查询不再继续 找到1的第二条元组,然后刚才的中断点处继续顺序扫描2,查找满足连接条件的元组,找到后就将1的第一个元组与该元组拼接起来,形成结果中一个元组...)(table2)其中一个存在匹配,则返回

5.7K20

SQL好的写法

为真的才被插入vt2     3.OUTER(join):如果指定了 OUTER JOIN保留(preserved table)未找到的行将作为外部添加到vt2 生成t3如果from包含两个以上表则对上一个联结生成的结果下一个重复执行步骤步骤直接结束...> 为true的组才插入vt7     8.SELECT:处理select列表产生vt8     9.DISTINCT:将重复的vt8去除产生vt9     10.ORDER BY:将vt9的按...(2)当在SQL语句中连接多个, 请使用的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。     ...C、杜绝不必要的查询连接查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。   ...六、查询的用法   查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它查询

91120

8个能提升工作效率的SQL好习惯

保留(preserved table)未找到的行将作为外部添加到vt2 生成t3如果from包含两个以上表则对上一个联结生成的结果下一个重复执行步骤步骤直接结束 4.WHERE:对vt3...select列表产生vt8 9.DISTINCT:将重复的vt8去除产生vt9 10.ORDER BY:将vt9的按order by子句中的列列表排序生成一个游标vc10 11.TOP:vc10...(2)当在SQL语句中连接多个, 请使用的别名并把别名前缀于每个Column上.这样一来,就可以减少解析的时间并减少那些由Column歧义引起的语法错误。...C、杜绝不必要的查询连接查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。...查询的用法 查询是一个 SELECT 查询,它嵌套在 SELECT、INSERT、UPDATE、DELETE 语句或其它查询

21620
领券