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

SQL语句中 where 和 on 的区别

最近面试时候碰到一道题,关于数据库左连接和内连接中and和where的区别,网上看了看资料,加深一下印象,大家也可以看看。...先说结论: 在使用left join左连接时,on and和on where条件的区别如下: 1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。...这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉,on后的条件用来生成左右表关联的临时表,where后的条件对临时表中的记录进行过滤。...在使用inner join内连接时,不管是对左表还是右表进行筛选,on and和on where都会对生成的临时表进行过滤。...where的过滤作用就出来了,右连接的原理是一样的。到这里就真相大白了:inner join中on和where没区别,右连接和左连接就不一样了。 本文转载自: SQL语句中where和 on的区别?

3.2K20

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

in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选。所以相对内表比较小的时候,in的速度较快。...最后,得到符合条件的数据。 EXISTS语句:执行student.length次 指定一个子查询,检测行的存在。遍历循环外表,然后看外表中的记录有没有和内表的数据一样的。...但是,不一样的是它们的执行流程完全不一样:   使用exists关键字进行查询的时候,首先,我们先查询的不是子查询的内容,而是查我们的主查询的表,也就是说,我们先执行的sql语句是: select *...EXISTS用于检查子查询是否至少会返回一行数据,该子查询实际上并不返回任何数据,而是返回值True或False EXISTS 指定一个子查询,检测 行 的存在。...11、用exists替换distinct: 当提交一个包含一对多表信息的查询时,避免在select子句中使用distinct.

94530
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    SQL 通配符:用于模糊搜索和匹配的 SQL 关键技巧

    SQL通配符字符 通配符字符用于替代字符串中的一个或多个字符。通配符字符与LIKE运算符一起使用。LIKE运算符用于在WHERE子句中搜索列中的指定模式。...任何通配符,如 % 和 _,都可以与其他通配符一起使用。...数据库有一些其他的通配符: 符号 描述 示例 * 表示零个或多个字符 bl* 可以找到 bl、black、blue 和 blob ?...t 可以找到 hot、hat 和 hit [] 表示括号内的任何单个字符 hoat 可以找到 hot 和 hat,但不会找到 hit ! 表示括号内不在括号内的任何字符 h!...oat 可以找到 hit,但不会找到 hot 和 hat - 表示指定范围内的任何单个字符 ca-bt 可以找到 cat 和 cbt 表示一个单个数字符号 2#5 可以找到 205、215、225、235

    32710

    如何用外部程序优化SQL语句中的IN和EXISTS

    数据结构 IN 和 EXISTS 是 SQL 中常见的复杂条件,在将 SQL(存储过程)转换成库外计算获取高性能时也会面对这些问题。...TPC-H 模型定义了 8 张表,表结构和表关系如下图: IN 常数集合 SQL 示例(1): select P_SIZE, P_TYPE, P_BRAND, count(1) as P_COUNT...集算器实现: 如果 A1 的元素数量特别多,则可以使用哈希连接的方法来过滤,把第 3 行代码替换如下: IN子查询 子查询选出字段是主键 SQL 示例(2): select PS_SUPPKEY...集算器实现(1): 集算器实现(2): EXISTS 等值条件 此章节的优化思路和 IN 子查询的优化思路是相同的,事实上这种 EXISTS 也都可以用 IN 写出来(或者倒过来,把 IN 用...子查询关联字段是主键 SQL 示例(4): select PS_SUPPKEY, count(1) as S_COUNT from PARTSUPP where exists ( select *

    1K10

    SQL中的行转列和列转行

    导读 SQL是IT行业很多岗位都要求具备的一项能力,对于数据岗位而言更是如此,甚至说扎实的SQL基础也往往是入职这些岗位的必备技能。...而在SQL面试中,一道出镜频率很高的题目就是行转列和列转行的问题,可以说这也是一道经典的SQL题目,本文就这一问题做以介绍分享。 ? 给定如下模拟数据集,这也是SQL领域经典的学生成绩表问题。...01 行转列:sum+if 在行转列中,经典的解决方案是条件聚合,即sum+if组合。...02 列转行:union 列转行是上述过程的逆过程,所以其思路也比较直观: 行记录由一行变为多行,列字段由多列变为单列; 一行变多行需要复制,列字段由多列变单列相当于是堆积的过程,其实也可以看做是复制;...一行变多行,那么复制的最直观实现当然是使用union,即分别针对每门课程提取一张衍生表,最后将所有课程的衍生表union到一起即可,其中需要注意字段的对齐 按照这一思路,给出SQL实现如下: SELECT

    7.2K30

    SQL 中的行转列和列转行

    行转列,列转行是我们在开发过程中经常碰到的问题。行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER 的运算符PIVOT来实现。用传统的方法,比较好理解。...但是PIVOT 、UNPIVOT提供的语法比一系列复杂的SELECT…CASE 语句中所指定的语法更简单、更具可读性。下面我们通过几个简单的例子来介绍一下列转行、行转列问题。...这也是一个典型的行转列的例子。...上面两个列子基本上就是行转列的类型了。但是有个问题来了,上面是我为了说明弄的一个简单列子。...这个是因为:对升级到 SQL Server 2005 或更高版本的数据库使用 PIVOT 和 UNPIVOT 时,必须将数据库的兼容级别设置为 90 或更高。

    5.5K20

    SQL基础查询方法

    客户端或基于中间层的应用程序(如 Microsoft Visual Basic 应用程序)可将 SQL Server 表中的数据映射到绑定控件(如网格)。...SELECT 语句从 SQL Server 中检索出数据,然后以一个或多个结果集的形式将其返回给用户。结果集是对来自 SELECT 语句的数据的表格排列。与 SQL 表相同,结果集由行和列组成。...WHERE 子句还用在 DELETE 和 UPDATE 语句中以定义目标表中要修改的行。...4.4 FROM子句 在每一个要从表或视图中检索数据的 SELCET 语句中,都需要使用 FROM 子句。使用 FROM 子句可以: 列出选择列表和 WHERE 子句中所引用的列所在的表和视图。...筛选结果 SELECT 语句中的 WHERE 和 HAVING 子句可以控制用于生成结果集的源表中的行。

    4.3K10

    Oracle Sql优化

    尽量避免连接,可以分开连接或者使用不作用在列上的函数替代。 8.如果索引不是基于函数的,那么当在Where子句中对索引列使用函数时,索引不再起作用。...16.当在Sql语句中连接多个表时,使用表的别名,并将之作为每列的前缀。这样可以减少解析时间。...Oracle的优化器有两种优化方式:基于规则的(RBO)和基于代价的(CBO)。 2.RBO:优化器遵循Oracle内部预定的规则。 3.CBO:依据语句执行的代价,主要指对CPU和内存的占用。...不同的是如果表有统计信息,它将以最快的方式返回查询的前几行,以获得最佳响应时间。 4.All rows:即完全基于Cost的模式。当一个表有统计信息时,以最快方式返回表所有行,以获得最大吞吐量。...对列和索引更新统计信息的SQL: SQL> ANALYZE TABLE table_name COMPUTE STATISTICS; SQL> ANALYZE INDEX index_name ESTIMATE

    1.4K30

    MySQL 查询专题

    SQL(像多数语言一样)在处理OR操作符前,优先处理AND操作符。 在WHERE子句中使用圆括号 任何时候使用具有 AND 和 OR 操作符的WHERE子句,都应该使用圆括号明确地分组操作符。...这可能会改变计算值,从而影响 HAVING 子句中基于这些值过滤掉的分组。...❑ 性能——通配符和正则表达式匹配通常要求 MySQL 尝试匹配表中所有行(而且这些搜索极少使用表索引)。因此,由于被搜索行数不断增加,这些搜索可能非常耗时。...❑ 明确控制——使用通配符和正则表达式匹配,很难(而且并不总是能)明确地控制匹配什么和不匹配什么。...❑ 智能化的结果——虽然基于通配符和正则表达式的搜索提供了非常灵活的搜索,但它们都不能提供一种智能化的选择结果的方法。

    5K30

    《SQL必知必会》万字精华-第1到13章

    ] 一、了解SQL 本章中主要是介绍了数据库和SQL相关的基本知识和术语。...AND和OR联用 在WHERE子句中同时使用AND和OR操作符: ⚠️:AND操作符的优先级是高于OR操作符 ⚠️:AND操作符的优先级是高于OR操作符 ⚠️:AND操作符的优先级是高于OR操作符 SELECT...笔记:由字面值、通配符或者两者组合构成的搜索条件。 为了在搜索子句中使用通配符,必须使用LIKE操作符 ⚠️通配符搜索只能用于文本字段(字符串),对于非文本数据类型不能使用通配符搜索。...除了聚集函数外,SELECT语句中的每列都必须在GROUP BY子句中列出 如果分组中包含具有NULL的行,则NULL将作为一个分组返回;如果列中出现多个NULL,它们将分成一个组 GROUP BY子句必须在...WHERE子句之后,ORDER BY子句之前 GROUP BY子句中可以使用相对位置:GROUP BY 2, 1 表示先根据第二个列分组,再根据第一个列分组 过滤分组 在WHERE子句中指定过滤的是行而不是分组

    7.1K00

    MySQL 系列教程之(七)DQL:从 select 开始丨【绽放吧!数据库】

    只要返回相同数目的行,就是正常的 检索多个列 select id,name,age,sex from user 在选择多个列时,一定要在列名之间加上逗号,但最后一个列名后不加。...虽然使用通配符可能会使你自己省事,不用明确列出所需列,但检索不需要的列通常会降低检索和应用程序的性能。 使用通配符有一个大优点。由于不明确指定列名(因为星号检索每个列),所以能检索出名字未知的列。...,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义 通常,ORDER BY子句中使用的列将是为显示所选择的列。...用简单的比较操作符肯定不行,必须使用通配符。 为在搜索子句中使用通配符,必须使用LIKE操作符。 LIKE指示MySQL,后跟的搜索模式利用通配符匹配而不是直接相等匹配进行比较。...是 FROM 从中检索数据的表 仅在从表选择数据时使用 WHERE 行级过滤 否 GROUP BY 分组说明 仅在按组计算聚集时使用 HAVING

    3.6K43

    「SAP ABAP」OPEN SQL(八)【WHERE语句大全】

    使用"_"通配符 子查询语句 写在最后的话 ---- 前言   在本节内容中,我们将继续学习ABAP OPEN SQL的知识,今天带来的内容是子查询在OPEN SQL中的应用。...---- BETWEEN 运算符   BETWEEN 运算符用于检索介于两个值之间的数据。BETWEEN 运算符需要指定一个起始值和一个结束值,它将匹配这两个值之间(包括这两个值)的所有行。   ...SQL中IN子句的应用,仅供参考: PS:为了简便,下面的语法都基于OPEN SQL的新语法,关于新语法的讲解将在本系列最后章节进行详细地讲解。...---- LIKE 子句   LIKE 子句用于基于模式的比较,它可以用来匹配一个特定的模式。LIKE 子句可以使用通配符来代替某些字符。...---- 子查询语句   子查询是一个 SELECT 语句,它嵌套在另一个 SELECT 语句中作为一个条件。子查询的结果可以是一个单一的值、一个列表或一个表。

    1.6K20

    【说站】css后代选择器和子元素选择器的区别

    css后代选择器和子元素选择器的区别 说明 1、后代选择器使用空格作为连接符号,子元素选择器使用>作为连接符号。 2、后代选择器选中所有的特定后代标签,子元素选择器选中所有的特定的直接标签。...后代选择器会选中指定标签中, 所有的特定后代标签, 也就是会选中儿子/孙子..., 只要是被放到指定标 签中的特 定标签都会被选中 子元素选择器只会选中指定标签中, 所有的特定的直接标签, 也就是只会选中特定的儿子标签...实例 比如说只要选择class为box的li标签而不选到最内层的li标签该如何做? 单纯用后代选择器很难做到吧!...可以这样写:   div li{}     再比如说,同理只想选择最内层的li标签该怎么做?...li>                                                      以上就是css后代选择器和子元素选择器的区别

    2K30

    MySQL(二)数据的检索和过滤

    使用频率最高的SQL语句应该就是select语句了,它的用途就是从一个或多个表中检索信息,使用select检索表数据必须给出至少两条信息:想选择什么,以及从什么地方选择 一、检索数据 1、检索单个列 select...) 6、使用完全限定的表名 select table.column from database.table; 该SQL语句中检索的表名以及列名是完全限定的 二、排序检索数据 子句(clause):SQL...如果使用limit,它必须位于order by 之后) select column from table order by column; 该列指示MySQL对column进行排列(通常order by子句中使用的列将是为显示所选择的列...column=X和Y的column2的行(in操作符用来指定匹配值的清单的关键字,功能和or相当) 圆括号在where子句中还有另一种用法,in操作符用来指定条件范围,范围中的每个条件都可以进行匹配;in...通配符(wildcard):用来匹配值的一部分的特殊字符,利用通配符可以创建比较特定数据的搜索模式(实际上是SQL的where子句中带有特殊含义的字符) 搜索模式(search pattern):由字面值

    4.1K30

    SQL优化快速入门

    这儿将基于黄德承大神的Oracle SQL语句优化一书,选取其中比较实用和通用的部分进行介绍。 ?...NOT和,会造成不走索引,应该选择使用where price 100。...IN和EXISTS,IN操作符的子查询都可以使用EXISTS代替,效率会高很多,where column in/exists (select 'X' from … where …),需要好好考虑。...选择最优效率的表名顺序(Oracle解析器按照从右到左的顺序处理FROM子句中的表名),比如select count(*) from tab1 inner join tab2,这是优先检索表2,并将表2...在SQL SERVER中,查看执行计划,发现并没有区别 减少查询的次数(包括对表查询),将多个分离的查询合并 能够在WHERE字句中使用的条件,尽量避免放在HAVING字句中 用

    1.4K90

    编写高性能SQL

    对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可达到上百倍,可见对于一个系统不是简单的能实现其功能就可以了,而是要写出高质量的SQL语句,提高系统的可用性。 ...下面是一个采用联接查询的SQL语句, 上面这条语句完全可以查询出是否有Bill Cliton这个员工,但是这里需要注意,系统优化器对基于last_name创建的索引没有使用。   ...当采用下面这种SQL语句来编写,Oracle系统就可以采用基于last_name创建的索引。    遇到下面这种情况又如何处理呢?...可以采用如下的查询SQL语句:    这里由于通配符(%)在搜寻词首出现,所以Oracle系统不使用last_name的索引。...IN和EXISTS    有时候会将一列和一系列值相比较。最简单的办法就是在where子句中使用子查询。在where子句中可以使用两种格式的子查询。

    2.3K20

    PureDNS –具有精确通配符过滤功能的快速域解析器和子域暴力破解

    puredns是一种快速的域解析器和子域暴力破解工具,可以准确地过滤出通配符子域和DNS中毒条目。 它使用功能强大的存根DNS解析器massdns来执行批量查找。...错误的DNS答案和来自通配符子域的误报通常会污染结果。 puredns通过其通配符检测算法解决了这一问题。它可以根据从一组可信解析器获得的DNS答案过滤出通配符。...特征 使用massdns和公共DNS解析器列表每秒解析数千个DNS查询 使用单词列表和根域的Bruteforce子域 使用最少的查询清理通配符并检测通配符的根,以确保获得精确的结果 通配符检测期间规避DNS...作为其工作流程的一部分,puredns自动执行三个步骤: 使用公共DNS服务器进行批量解析 通配符检测 验证 1.使用公共DNS服务器进行批量解析 使用massdns,puredns将对所有域和子域执行批量解析...此步骤的执行速度较慢,以避免对受信任的解析器造成任何速率限制。 您可以使用该--skip-validation标志跳过此步骤。 此时,生成的文件应清除通配符子域和DNS中毒的答案。

    3K30
    领券