首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    NOT IN子查询中出现NULL值对结果的影响你注意到了吗

    exists的子查询被称之为反连接,经常会有技术人员来评论in 与exists 效率孰高孰低的问题,我在SQL优化工作中也经常对这类子查询做优化改写,比如半连接改为内连接,反连接改为外连接等,哪个效率高是要根据执行计划做出判断的...,本文不是为了讨论效率问题,是要提醒一点:not in子查询的结果集含NULL值时,会导致整个语句结果集返回空,这可能造成与SQL语句书写初衷不符。...这一点在MySQL与Oracle中返回结果都是一致的。如果想表达最初的含义,需要将子查询中NULL值去除。...而not exists关联子查询,在将外查询的NULL值传递给内查询时执行子查询 select * from t2 where t2.c2=NULL,子查询中找不到记录,所以条件返回false, 表示not...结论 使用not in 的非关联子查询注意NULL值对结果集的影响,为避免出现空结果集,需要子查询中查询列加 is not null条件将NULL值去除。

    13010

    mysql查询字段中带空格的值的sql语句,并替换

    (自己写的这四行)查询带有空格值的数据:SELECT * FROM 表名 WHERE 字段名 like ‘% %’; 去掉左边空格 update tb set col=ltrim(col); 去掉右边空格...查询的时候,如果数据库中的这个字段的值含有空格(字符串内部,非首尾),或者我们查询的字符串中间有空格,而字段中没有空格。...title like ‘%李杨技术博客%’; 以上两句sql均无法查询出正确的结果,那么我们应该怎么写呢?...以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索replace , 字符串 , 函数 代码 mysql新增字段sql...补充:MySQL中关于查询条件中的字符串空格问题 https://blog.csdn.net/alibert/article/details/40981185 假设当前mysql数据库中有个表:sysuser

    9.4K20

    在 SQL 中,如何使用子查询来获取满足特定条件的数据?

    在 SQL 中,可以使用子查询来获取满足特定条件的数据。子查询是嵌套在主查询中的查询语句,它返回一个结果集,可以用来过滤主查询的结果。...下面是使用子查询来获取满足特定条件的数据的一般步骤: 在主查询中使用子查询,将子查询的结果作为条件。 子查询可以在主查询中的 WHERE 子句、FROM 子句或 HAVING 子句中使用。...子查询可以返回单个值或多个值,具体取决于使用的运算符和子查询的语法。 以下是一些示例: 使用子查询在 WHERE 子句中过滤数据: SELECT column1, column2, ......FROM (SELECT column FROM table WHERE condition) AS temp_table; 使用子查询在 HAVING 子句中过滤数据: SELECT column1,...FROM table GROUP BY column1 HAVING column1 > (SELECT AVG(column1) FROM table); 请注意,子查询的性能可能会较低,因此在设计查询时应谨慎使用

    24010

    SQL优化之一则MySQL中的DELETE、UPDATE 子查询的锁机制失效案例

    UPDATE、DELETE 子查询条件下优化器的实现导致子查询下的行锁机制失效,行锁升级,对更多无关的行数据加锁,进而影响数据库并发和性能 。...一、UPDATE、DELETE 子查询锁机制失效解析及优化方案 下面以普通的 UPDATE 关联子查询更新来详解子查询对锁机制的影响及具体优化解决方案: 子查询下的事务、锁机制分析: 优化器实现: UPDATE...事务二果真被事务一阻塞,事务一的子查询操作的确锁住了不相关的数据行,阻碍了数据库的并发操作。...,锁住了表中数据行,阻碍了对表的 delete,update 操作,却不妨碍 insert 的并发操作,MySQL 5.6 之后的优化器对 not in 子查询做了相关优化工作,检索效率高于 not exists...MySQL 优化器以及 InnoDB 行锁机制特性,增加了 UPDATE、DELETE 下子查询复杂的度,在 MySQL 数据库程序开发数据库维护过程中,真正了解优化器的实现和 InnoDB 行锁机制的行为

    2.4K40

    sql中的 where 、group by 和 having 用法解析

    这就是我们需要注意的一点,如果在返回集字段中,这些字段 要么就要包含在Group By语句的后面,作为分组的依据; 要么就要被包含在聚合函数中,作为分组的依据; --出现的错误详解:咱们看看...这就是我们需要注意的一点,如果在返回集字段中,这些字段 要么就要包含在Group By语句的后面,作为分组的依据; 要么就要被包含在聚合函数中,作为分组的依据; –出现的错误详解:咱们看看group by...1、显示90分以上学生的课程名和成绩 //这是一个简单的查询,并没有使用分组查询 SQL> select sno,pno,grade from sc where grade>=90;...这就是我们需要注意的一点,如果在返回集字段中,这些字段 要么就要包含在Group By语句的后面,作为分组的依据; 要么就要被包含在聚合函数中,作为分组的依据; --出现的错误详解:咱们看看...这就是我们需要注意的一点,如果在返回集字段中,这些字段 要么就要包含在Group By语句的后面,作为分组的依据; 要么就要被包含在聚合函数中,作为分组的依据; –出现的错误详解:咱们看看group by

    12.9K30

    要精通SQL优化?那就学一学explain吧!

    id不同时,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。...SUBQUERY 当 select 或 where 中包含有子查询,该子查询被标记为SUBQUERY。 DERIVED 在SQL语句中包含在from子句中的子查询。...四、partitions 表示SQL语句查询时匹配到的分区信息,对于非分区表值为NULL,当查询的是分区表则会显示分区表命中的分区情况。...可以通过这个数据很直观的显示 SQL 性能的好坏,一般情况下 rows 值越小越好。 十一、filtered 指返回结果的行占需要读到的行(rows列的值)的百分比,一般来说越大越好。...explain的信息中,一般我们要关心的是type,看是什么级别,如果是在互联网公司一般需要在range以上的级别,接着关心的是Extra,有没有出现filesort或者using template,一旦出现就要想办法避免

    58730

    2-SQL语言中的函数

    # 类似于三元运算符,表达式1的值成立返回表达式2的值,否则返回表达式3的值 SELECT IF('10>5','大于','小于') AS result; # CASE函数,实现类似于switch...`department_id`; # 外连接 /* 用于查询一个表中有,另一个表中没有的记录 特点: 外连接的查询结果为主表中的所有记录 如果表中有和它匹配,则显示匹配的值 如果没有匹配值...(多行多列或0行0列都不可以) # 列子查询(多行子查询,因为子查询结果是一列多行) /* 多行操作符: IN/NOT IN 等于/不等于列表中的任意一个 ANY/SOME 和子查询中的某个值作比较...,例如15>ANY(40,10,25),因为15>10所以上式成立 ALL 和子查询返回的所有值比较,例如15>ANY(40,10,25),因为40>15所以上式不成立 */ # 返回location_id...应用场景: 当要显示的数据,一夜显示不全,需要分页提交sql请求 LIMIT 语句放在查询语句的最后 # 分页查询 /* 应用场景: 当要显示的数据,一夜显示不全,需要分页提交sql请求 语法:

    2.8K10

    mysql基础知识(3)

    MySQL中有哪些重要的日志文件? 错误日志: 记录MySQL服务器运行过程中的错误信息。 查询日志(General Log): 记录数据库执行的所有命令。...3.限制数据库权限和特权 将数据库用户的功能设置为最低要求;这将限制攻击者在设法获取访问权限时可以执行的操作。 4.避免直接向用户显示数据库错误 攻击者可以使用这些错误消息来获取有关数据库的信息。...其他数据库也叫做唯一索引扫描 C:eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现...或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。...G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值 H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值

    8911

    MySQL深入浅出(二):索引的设计原则、SQL优化、MySQL日志、备份与恢复

    通过以上几个参数,可以了解到当前数据库的应用是插入更新为主还是以查询操作为主。 2.2 通过explain分析低效SQL的执行计划 ?...各属性含义: id: 查询的序列号 select_type: 查询的类型,主要是区别普通查询和联合查询、子查询之类的复杂查询 SIMPLE:查询中不包含子查询或者UNION 查询中若包含任何复杂的子部分...,最外层查询则被标记为:PRIMARY 在SELECT或WHERE列表中包含了子查询,该子查询被标记为:SUBQUERY 在FROM列表中包含的子查询被标记为:DERIVED(衍生) 若第二个SELECT...如果type列是ALL或index,而没有出现该信息,则你有可能在执行错误的查询:返回所有数据。 Using filesort:不是“使用文件索引”的含义!...最左匹配原则可以算是MySQL中B-Tree索引使用的首要原则 以%开头的like查询不能够利用B-Tree索引,执行计划中key的值为NULL表示没有使用索引 数据类型出现隐式转换的时候也不会使用索引

    1.1K21

    Navicat Premium 技巧介绍 + MySQL性能分析

    类似,表示这个subquery的查询要受到外部表查询的影响 H:derived:from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select table 输出的行所引用的表...或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。...G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值 H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值...如果没有索引被选择,键是NULL 查询真正使用到的索引,select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。...如果内表的数据量比较大,就可能出现这个 K:loosescan(m..n):5.6.x之后引入的优化子查询的新特性之一,在in()类型的子查询中,子查询返回的可能有重复记录时,就可能出现这个   除了这些之外

    5K21

    SQL命令 SELECT(一)

    解析为正整数的输入参数。 如果没有指定TOP关键字,则默认显示满足SELECT条件的所有行。 TOP ALL仅在子查询或CREATE VIEW语句中有意义。...在更复杂的查询中,SELECT可以检索列、聚合和非列数据,可以使用连接从多个表检索数据,也可以使用视图检索数据。 SELECT还可以用于从SQL函数、宿主变量或字面量返回值。...所有都是可选的,但是,如果使用,必须按照指定的顺序出现: DISTINCT子句,指定只返回不同的(非重复的)值。 一个TOP子句,它指定要返回多少行。...ORDER BY子句,指定显示行的顺序。 子查询或CREATE VIEW查询中的ORDER BY子句必须与TOP子句配对。 以错误的顺序指定SELECT子句将产生SQLCODE -25错误。...任何类型的DISTINCT子句都可以指定多个项来测试唯一性。 列出一个以上的项将检索两个项组合中不同的所有行。 DISTINCT认为NULL是唯一的值。

    5.3K10

    Oracle优化05-执行计划

    在多表关联查询或者SQL中有子查询时,每个关联表或者子查询的Cardinality的值对主查询的影响非常大,甚至可以说,CBO就是依赖于各个关联表或者子查询Cardinality值来计算出最后的执行计划...0):禁止动态采用 cardinality(t2 10000):告诉CBO从T2表中取10000条记录 通过这种方式,我们模拟子查询中返回的结果数,同时为了让CBO完全依赖这个信息生成执行计划,我们禁止了子查询使用动态采样...我们在查询中将子查询的返回值设置为1,即 Cardinality(t2,1) 此时CBO选择了两个表通过nested loop join 进行关联的执行计划,因为子查询只有1条记录,这个时候CBO会选择最适合择偶张情况的...---- 从这个试验中我们可以得到如下结论: 子查询的Cardinality的值,直接影响了主查询的执行计划,如果CBO对子查询的Cardinality判断有误,那么饿主查询的执行计划很有可能是错误的...总结 以上的例子主要说明Cardinality对CBO生成执行计划的影响,所以我们在看多表查询的时候,一定要注意每个操作返回的Cardinality的值,如果这个值明显的不对,那么很有可能操作的表的分析数据出了问题

    79010

    MySQL数据库:explain执行计划详解

    2、select_type: 查询的类型,主要用于区分普通查询、联合查询、子查询等复杂的查询; (1)simple:表示查询中不包括union操作或者子查询,位于最外层的查询的select_type即为...(1)如果查询使用了别名,那么这里显示的是别名; (2)如果不涉及对数据表的操作,那么这显示为null; (3)如果显示为尖括号括起来的 就表示这个是临时表,后边的N就是执行计划中的...(3)eq_ref:主键或者唯一索引中的所有字段被用于连接使用,只会返回一行匹配的数据。简单的select查询语句不会出现这种情况。 (4)ref:普通索引扫描,可能返回多个符合查询条件的行。...(8)unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值; (9)index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值...6、key: 实际使用哪个索引来优化对该表的访问;select_type为index_merge时,这里可能出现两个以上的索引,其他的select_type这里只会出现一个。

    1.1K20

    常用sql查询语句

    分组函数只能出现在选择列表、having、order by子句中(不能出现在where中) b....因为返回结果只有一行,所以用“=”连接子查询语句 5.2 多行子查询 SQL>SELECT ename,job,sal,deptno from emp WHERE job IN (SELECT DISTINCT...因为返回结果有多行,所以用“IN”连接子查询语句。 in与exists的区别: exists() 后面的子查询被称做相关子查询,它是不返回列表的值的。...只是返回一个ture或false的结果,其运行方式是先运行主查询一次,再去子查询里查询与其对 应的结果。如果是ture则输出,反之则不输出。再根据主查询中的每一行去子查询里去查询。...in()后面的子查询,是返回结果集的,换句话说执行次序和 exists()不一样。子查询先产生结果集,然后主查询再去结果集里去找符合要求的字段列表去。符合要求的输出,反之则不输出。

    11910

    Oracle数据库学习笔记 (四 —— select 从入门到放弃 【下】)

    emp group by deptno; 注意: 分组查询只能由两部份构成,一是 group by 中出现的列 另外是分组函数,除此之外,其他内容不能放在 select 后 找错误: 一、非单组函数...子查询可以分为三类 单列子查询:返回结果是一列中的一个内容,出现几率最高 单行子查询:返回多个列,有可能是一条完整的记录 多行子查询:返回多条记录 2.1 单行子查询 -- 查询工资比7654...如果在子查询中存在满足条件的行则条件返回TRUE 如果在子查询中不存在满足条件的行则条件返回FALSE -- 查询所有是部门经理的员工 -- exists 方法 (效率更高) SELECT *...编写复杂的子查询的解决思路是:逐层分解查询。即从最内层的子查询开始分解,将嵌套的SQL语句拆分为一个个独立的SQL语句。...子查询的执行过程遵循“由里及外”原则,即先执行最内层的子查询语句,然后将执行结果与外层的语句进行合并,依次逐层向外扩展并最终形成完整的SQL语句。

    1.2K30

    性能优化-通过explain查询分析SQL的执行计划

    类似,表示这个subquery的查询要受到外部表查询的影响 H:derived:from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select 3)、table 显示的查询表名...,如果查询使用了别名,那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null,如果显示为尖括号括起来的就表示这个是临时表,后边的N就是执行计划中的id,表示结果来自于这个查询产生。...或者多列主键、唯一索引中,使用第一个列之外的列作为等值查找也会出现,总之,返回数据不唯一的等值查找就可能出现。...G:unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值 H:index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值...如果内表的数据量比较大,就可能出现这个 K:loosescan(m…n):5.6.x之后引入的优化子查询的新特性之一,在in()类型的子查询中,子查询返回的可能有重复记录时,就可能出现这个 除了这些之外

    1.4K10

    Java如何定位自己项目中的慢业务

    SQL导致的慢业务 SQL导致的慢业务,这个是七成以上的开发都会遇到的问题。因为有百分之70左右的慢业务都是因为自己的慢SQL引起的。 那么我们该怎么去定位这个慢SQL呢?...:表示慢查询日志存放的位置 explain查看分析SQL执行计划 当我们去定位自己表中增加的索引有没有生效的时候,我们使用的一半都是 explain 关键字,通过关键字给我们返回的内容,我们就能判断我们写的...如果是子查询,id 值会递增,id 值越高,优先级越高 id为NULL最后执行 select_type simple: 简单的select, 查询中不包含子查询或者 union。...derived:在 from 的列表中包含的子查询被标记成 derived(派生表)。...unique_subquery:类似于eq_ref,条件用了in子查询 index_subquery:区别于unique_subquery,用于非唯一索引,可以返回重复值 range:常用于范围查询,

    66820

    SQL命令 WHERE(一)

    描述 可选的WHERE子句可以用于以下目的: 指定限制要返回哪些数据值的谓词。 指定两个表之间的显式连接。 指定基表和另一个表中的字段之间的隐式连接。...WHERE子句最常用于指定一个或多个谓词,这些谓词用于限制SELECT查询或子查询检索到的数据(过滤出行)。...例如,在逻辑模式下,要返回出生日期为2005年的记录,WHERE子句将出现如下:WHERE DOB BETWEEN 59901 AND 60265 当在显示模式下,同样的WHERE子句会出现如下:WHERE...离群值的谓词条件 如果动态SQL查询中的WHERE子句选择了一个非空的离群值,可以通过将离群值文字括在双括号中来显著提高性能。 这些双括号导致动态SQL在优化时使用离群值选择性。...在嵌入式SQL或视图定义中,总是使用离群值选择,不需要特殊编码。 动态SQL查询中的WHERE子句会自动针对空离群值进行优化。

    3K20
    领券