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

SQL嵌套查询_sql嵌套查询返回多个字段

说到嵌套查询,首先得理解嵌套查询是什么意思,简单来说就是,一个查询语句可以嵌套在另外一个查询语句的where子句中。外层的查询称为父查询(主查询),内层的查询称为子查询(从查询)。...嵌套查询的工作方式是由内向外的,即先进行内层查询,外层查询则利用内层查询的结果集作为条件进行查询。...当然,嵌套查询不仅仅是select语句的专属,它还可以用在update、insert、delete语句中。...如(update tablea A set A.userid = (select id from tableb where id = A.userid)),废话不多说,下面介绍记账常用的子查询。...IN ( SELECT city_id FROM city WHERE city_name = ‘广州’ ), in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。

2.8K20

SQL 查询尽量避免使用 IN 和 NOT IN

在编写 SQL 语句的时候大部分开发人员都会用到 IN 和 NOT IN 来辅助查询多个内容,例如查询 包含在 b 表中的 a 表数据,通常会这么来编写语句: select * from a where...效率低下 这里以 NOT IN 为例子,有这样一个要求,存在两个表 a 和 b 这两个表的数据都在 10 万条以上,需要查出来身份证号只存在于 a 表但不存在于 b 表的数据。...根据经验,大部分开发人员会这么写: select * from a where IDCar not in (select IDCar from b) 语句看着很简单对吧,但是执行这个语句后就会发现运行的时间很长...这是因为 NOT IN 并不会命中索引,那么解决这个问题的好办法就是使用 NOT EXISTS ,改进后的 SQL 语句如下: select * from a where not exits (select...在 b 表中存在一个 bid 为 null 的情况,那么当我们受用 NOT IN 来查询的时候,有可能得到的结果没有任何内容。这时因为 null 不等于任何非空值。

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

sql嵌套查询效率_sql嵌套查询返回多个字段

条件表达式计算完成后,会有一个返回值,即非0或0,非0即为真(true),0即为假(false)。同理WHERE后面的条件也有一个返回值,真或假,来确定接下来执不执行SELECT。...这是执行一条sql语句发生的状况,那么如果进入嵌套查询 SELECT * FROM STUDENT WHERE stu_id IN (SELECT * FROM SC WHERE sc_id IN (SELECT...太可怕了,前面的sql查询一小步,仅仅移动一个指针指向后面的下一条数据,就是后面所有查询条件的一大步 (外面的那个SELECT)到WHERE关键字的时候,又进入了另一个SQL语句中, 分析器先找到表...然后进入WHERE里分析里面的SQL语句,再把SC表装入内存,另一个指针(例如p2)指向SC表中的第一条记录,分析WHERE后面的条件表达式,依次进行分析,最后分析出一个虚表2。...) 这里虽然嵌套的SQL语句分析完了,但主SQL语句只执行了一遍,也就是说p1指向Student的第一条记录,p1还要再指向Student表的下一条记录并分析,这样又进入了嵌套中的SQL语句,同上面说的一样分析

2.7K20

SQL查询执行顺序解析

介绍 分享这篇文章是因为在SQL JOIN,你想知道的应该都有这篇文章中有个小伙伴问我,ON和WEHRE执行的顺序是怎样的,并且SQL执行顺序在面试中也经常被问,所以把姜承尧大佬《MySQL技术内幕...SQL编程》中关于SQL执行顺序的部分简单概述了一下,并配上例子,有想深入了解的可以去看书 SQL语言不同于其他编程语言(如C++,Java),最明显的不同体现在处理代码的顺序上。...但在SQL语言中,第一个被处理的子句总数FROM子句,下面显示了逻辑查询处理的顺序以及步骤的序号 (8)SELECT (9)DISTINCT (1)FROM <left_table...2 应用ON过滤器 SELECT查询一共有3个过滤过程,分别是ON,WHERE,HAVING。ON是最先执行的过滤过程。...这张内存临时表的表结构和上一步产生的虚拟表一样,不同的是对进行DISTINCT操作的列增加了一个唯一索引,以此来去除重复数据。 由于在这个SQL查询中未指定DISTINCT,因此跳过本步骤。

1.4K32

Mysql资料 查询SQL执行顺序

具体顺序 1.FROM 执行笛卡尔积 FROM 才是 SQL 语句执行的第一步,并非 SELECT 。对FROM子句中的前两个表执行笛卡尔积(交叉联接),生成虚拟表VT1,获取不同数据源的数据集。...FROM子句执行顺序为从后往前、从右到左,FROM 子句中写在最后的表(基础表 driving table)将被最先处理,即最后的表为驱动表,当FROM 子句中包含多个表的情况下,我们需要选择数据最少的表作为基础表...如果FROM子句包含两个以上的表,则对上一个联接生成的结果表和下一个表重复执行步骤1~3,直到处理完所有的表为止。 4.WHERE 应用WEHRE过滤器 对虚拟表 VT3应用WHERE筛选器。...SQL Aggregate 函数计算从列中取得的值,返回一个单一的值。...因此使用 ORDER BY 子句查询不能应用于表达式。同时,ORDER BY子句的执行顺序为从左到右排序,是非常消耗资源的。

3.3K00

SQL逻辑查询语句执行顺序

在这些SQL语句的执行过程中,都会产生一个虚拟表,用来保存SQL语句的执行结果(这是重点),我现在就来跟踪这个虚拟表的变化,得到最终的查询结果的过程,来分析整个SQL逻辑查询执行顺序和过程。...它们之间如何产生联系呢?——笛卡尔积 关于什么是笛卡尔积,请自行Google补脑。...SELECT列表 现在才会执行到SELECT子句,不要以为SELECT子句被写在第一行,就是第一个执行的。...由于我的测试SQL语句中并没有使用DISTINCT,所以,在该查询中,这一步不会生成一个虚拟表。...执行ORDER BY子句 对虚拟表中的内容按照指定的列进行排序,然后返回一个新的虚拟表,我们执行测试SQL语句中的ORDER BY total_orders DESC,就会得到以下内容: +------

4.1K50

如何编写SQL查询

本文将分解 SQL 查询语言的结构,而本系列的第二部分将描述 DML。 定义 SQL 查询 SQL 查询可能是 SQL 中最常用的操作,因为它们允许用户从一个多个表中检索和分析数据。...,这些组件按照它们在查询中出现的顺序执行。...这通常是指一个表,但也可以包括一个查询(另一个 SELECT 查询,充当当前查询的输入源)。 JOIN: 指定连接多个表的规则。...可以指定多个 JOIN 子句以将多个表连接到数据集中。因为 JOIN 子句是 FROM 子句的一部分,所以不能在查询中指定它而没有前面的 FROM 语句。 WHERE: 过滤查询返回的行。...要执行此操作,请根据所有行的唯一第一个字母值创建与组一样多的组,方法是使用 SUBSTR() 函数,然后计算属于该组或类别中的行: SQL> SELECT SUBSTR(name,1,1), COUNT

10210

理解PG如何执行一个查询-1

理解PG如何执行一个查询 PG服务器收到客户端发来的查询后,查询的文本交给解析器。解析器扫描查询并检查它的语法。若语法正确,解析器会将查询文本转换成解析树。...计划器负责遍历分析树,并找到所有可能执行查询的计划。如果定义了一个有用的索引,该计划可能包括对整个表的顺序扫描和索引扫描。如果查询涉及两个或多个表,则规划器可推荐许多不同方法来连接这些表。...执行计划是根据查询算子制定的。每个算子将一个多个输入集转换成中间结果集。例如SeqScan算子将输入集(物理表)转换为结果集,过滤掉任何不符合查询约束的行。...Sort算子通过一个多个排序键对输入集重新排序来生成结果集。稍后更加详细描述每个查询算子。下面是一个简单执行计划示例: 可以看到复杂的查询分解为简单步骤。树底部的查询算子输入集是物理表。...EXPLAIN EXPLAIN语句让您深入了解 PostgreSQL 查询计划器/优化器如何决定执行查询

2K20

一条SQL查询语句是如何执行的?

1.3 查看MySQL连接 每当一个客户端连接到服务端时,服务端进程都会创建一个单独的线程来处理当前客户端的交互操作。 那么如何查看MySQL当前所有的连接?...MySQL作者担心我们写的SQL太垃圾,所以有设计出一个叫做查询优化器的东东,辅助我们提高查询效率。 2.3.1 什么是查询优化器? 一条 SQL语句是不是只有一种执行方式?...举两个简单的例子∶ 当我们对多张表进行关联查询的时候,以哪个表的数据作为基准表。 有多个索引可以使用的时候,选择哪个索引。...因此大家在编写SQL语句的时候还是要有意识地进行优化。 2.3.3 执行计划 优化完之后,得到一个什么东西呢?优化器最终会把解析树变成一个查询执行计划。...查询执行计划展示了接下来执行查询的具体方式,比如多张表关联查询,先查询哪张表,在执行查询的时候有多个索引可以使用,实际上该使用哪些索引。 MySQL提供了一个查看执行计划的工具。

1.4K30

一条 SQL 查询语句是如何执行的?

一条 SQL 查询语句是如何执行的?...比如,你有个最简单的表,表里只有一个ID字段,在执行下面这个查询语句时 mysql> select from T where ID=10; 我们只看到一个输入语句,返回一个结果,却不知道这个 SQL 语句在...数据库里面,长连接时值连接成功后,如果客户端持续有请求,则使用同一个连接,短连接时每次执行很少的几次查询就断开连接,下次查询再重新建立一个。...使用一段时间,或者程序里面判断执行一个占用内存的大查询后,断开连接,之后要查询再重连。...你输入的是由多个字符串和空格组成的一条SQL语句,MySQL需要识别出里面的字符串分别是什么,代表什么,MySQL从你输入的" select"这个关键字识别出来,这是一个查询语句。

77210

如何使用慢查询快速定位执行慢的 SQL

查询可以帮我们找到执行慢的 SQL,在使用前,我们需要先看下慢查询是否已经开启,使用下面这条命令即可: mysql > show variables like '%slow_query_log';...,以及慢查询日志文件的位置: 你能看到这时慢查询分析已经开启,同时文件保存在 DESKTOP-4BK02RP-slow 文件中。...分别是 c(访问次数)、t(查询时间)、l(锁定时间)、r(返回记录)、ac(平均查询次数)、al(平均锁定时间)、ar(平均返回记录数)和 at(平均查询时间)。其中 at 为默认排序方式。...比如我们想要按照查询时间排序,查看前两条 SQL 语句,这样写即可: 你能看到开启了慢查询日志,并设置了相应的慢查询时间阈值之后,只要查询时间大于这个阈值的 SQL 语句都会保存在慢查询日志中,然后我们就可以通过...mysqldumpslow 工具提取想要查找的 SQL 语句了。

2.6K10

理解PG如何执行一个查询-2

如果一个查询中包含limit或offset或者2者,那么计划器/优化器会使用一个limit算子。如果查询中仅包含limit,limit算子在处理整个集合前会先返回第一行记录。...该算子将有2个或多个输入集。Append返回第一个输入集中的所有行,然后返回第2个输入集的所有行,以此类推,直到所有输入集中的所有行都处理。...3)如果查询计划种顶部节点是Append算子,则计划器/优化器还会生成一个Reuslt算子。这是一个相当模糊的规则,对性能没有影响;它恰好使得PG开发任意维护查询计划器和执行器更简单些。...为了执行这个执行计划,nested loop算子将读取rentals表中每一行,对于每个rentals 行,该算子使用一个索引customer_id读取customers种对应的行。...-> Seq Scan on customers -> Subquery Scan *SELECT* 2 -> Seq Scan on customers 查询执行器首先执行两个子查询

1.7K20

一条sql查询语句是如何执行

好了现在我们大致了解了mysql的零件,那么现在我们将通过一条查询sql,从连接器到执行器来讲清楚每层作用。...数据库里面,长连接是指连接成功后,如果客户端持续有请求,则一直使用同一个连接。 短连接则是指每次执行完很少的几次查询就断开连接,下次查询再重新建立一个。...而对于你确定要使用查询缓存的语句,可以用SQL_CACHE显式指定,像下面这个语句一样 select SQL_CACHE * from T where ID=10; 分析器 如果没有命中查询缓存,就要开始真正执行语句了...首先,MySQL需要知道你要做什么,因此需要对SQL语句做解析。 MySQL从你输入的"select"这个关键字识别出来,这是一个查询语句。...在开始执行之前,还要先经过优化器的处理。 优化器是在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。

1.1K20
领券