如果没有任何WHEN表达式结果为TRUE,CASE表达式则返回ELSE子句中出现的值。...当需要定义可重用的表表达式时,可以使用视图或内联表值函数。如果不需要支持输入,则使用视图;反之,则使用内联表值函数。 四、集合运算 4.1 UNION 并集运算 ? 在T-SQL中。...UNION集合运算可以将两个输入查询的结果组合成一个结果集。需要注意的是:如果一个行在任何一个输入集合众出现,它也会在UNION运算的结果中出现。...它对两个输入查询的结果集进行操作,反会出现在第一个结果集中,但不出现在第二个结果集中的所有行。 ...EXCEPT结合运算在逻辑上首先删除两个输入集中的重复行,然后返回只在第一个集合中出现,在第二个结果集中不出现的所有行。
2、select_type:查询类型 SIMPLE 简单SELECT(不使用UNION或子查询) PRIMARY 最外层的SELECT UNION UNION中第二个或之后的SELECT语句 DEPENDENT...UNION UNION中第二个或之后的SELECT语句取决于外面的查询 UNION RESULT UNION的结果 SUBQUERY 子查询中的第一个SELECT DEPENDENT SUBQUERY...子查询中的第一个SELECT, 取决于外面的查询 DERIVED 衍生表(FROM子句中的子查询) MATERIALIZED 物化子查询 UNCACHEABLE SUBQUERY 结果集无法缓存的子查询...这个值非常直观显示 SQL 的效率好坏, 原则上 rows 越少越好. 11、filtered:这个字段表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例,注意是百分比,不是具体记录数...在使用分页查询LIMIT M(起始位置),N(偏移量)的时候,虽然我们只需要N条数据,但数据库至少会扫描M+N条数据,如果M足够大,将会产生效率问题,比如这个例子: select * from
▲union:在union中的第二个和随后的select语句。▲union result:从union临时表中查询结果的select语句。...(6) possible_keys:可以使用的索引,如果没有索引可用返回Null;也可能显示多个索引可以使用的索引,如果没有索引可用返回Null;也可能显示多个索引。...(8) key_len:被选择的key索引的长度,如果没有使用索引,返回null表示索引使用的字节数,一般情况下,索引长度越长精度越高,但效率偏低;长度越短,精度越低,但效率高。...注意:如果where后条件是组合索引,但没有按照组合索引顺序使用,则ref为null。...▲Using temporary表示由于排序没有走索引、使用union、子查询连接查询、使用某些视图等,一般出现在多张表的数据需要排序的情况下。
但是当数据规模增大,如千万、亿的时候,我们运 行同样的sql语句时却发现迟迟没有结果,这个时候才知道数据规模已经限制了我们查询的速度。所以,查询优化和索引也就显得很重要了。...这里的索引名字是创建索引时指定的索引昵称;如果索引没有昵称,则默认显示的是索引中第一个列的名字。...UNION:子查询中的UNION,且为UNION 中从第二个SELECT 开始的后面所有SELECT,同样依赖于外部查询的结果集;PRIMARY:子查询中的最外层查询,注意并不是主键查询;SIMPLE...:除子查询或者UNION 之外的其他查询; SUBQUERY:子查询内层查询的第一个SELECT,结果不依赖于外部查询结果集; UNCACHEABLE SUBQUERY:结果集无法缓存的子查询;UNION...:UNION 语句中第二个SELECT 开始的后面所有SELECT,第一个SELECT 为PRIMARYUNION RESULT:UNION 中的合并结果; 8、Extra 关于MYSQL如何解析查询的额外信息
前言 只有光头才能变强 刷面试题的时候,不知道你们有没有见过MySQL这两个命令:explain和profile(反正我就见过了).. 之前虽然知道这两个命令大概什么意思,但一直没有去做笔记。...PRIMARY:如果查询包含UNION 或子查询,则最外层的查询被标识为PRIMARY UNION:表示此查询是 UNION 中的第二个或者随后的查询 DEPENDENT:UNION 满足 UNION...中的第二个或者随后的查询,其次取决于外面的查询 UNION RESULT:UNION 的结果 SUBQUERY:子查询中的第一个select语句(该子查询不在from子句中) DEPENDENT SUBQUERY...,同时意味着 select 中的某些特性阻止结果被缓存于一个 Item_cache 中 UNCACHEABLE UNION:满足此查询是 UNION 中的第二个或者随后的查询,同时意味着 select...1.3.5possible_keys 这一列显示查询可能使用哪些索引来查找 1.3.6key 这一列显示MySQL实际决定使用的索引。如果没有选择索引,键是NULL。
1、union和union all的区别? 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字。...外连接: 左连接(左外连接Left Join):以左表作为基准进行查询,左表数据会全部显示出来,右表如果和左表匹配的数据则显示相应字段的数据,如果不匹配则显示为 null。...右连接(右外连接 Right Join):以右表作为基准进行查询,右表数据会全部显示出来,左表如果和右表匹配的数据则显示相应字段的数据,如果不匹配则显示为 null。...这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只有最后一步生成的表才会会给调用者。如果没有在查询中指定某一个子句,将跳过相应的步骤。 4、常用的SQL 聚合函数?...: 1)查询表中的前n条记录: select * from Table where rownum <= n 2)查询第 n 到第 m 条记录: select * from (select 表名.*,
增加一行:query_cache_type=0 /1 / 2 如果设置1,将会缓存所有的查询结果,除非你select语句使用SQL_NO_CACHE禁用了查询缓存 如果设置2,则只缓存在select语句中通过...:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询, 把结果放在临时表里 UNION:若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION...如果为NULL,则没有使用索引; 查询中若使用了覆盖索引,则该索引仅出现在key列表中:select 查询的字段个数、顺序和复合索引的字段的个数、顺序一一符合 ?...第一行(执行顺序4):id列为1,表示是union里的第一个select,select_type列的primary表 示该查询为外层查询,table列被标记为,表示查询结果来自一个衍生表,其中derived3...t2】 第五行(执行顺序5):代表从union的临时表中读取行的阶段,table列的表示用第一个和第四个select的结果进行union操作。
如果指定,则返回重复的数据值。 如果省略,重复的数据值将被抑制。 %PARALLEL - 可选—%PARALLEL关键字。 如果指定,则union的每一边都作为单独的进程并行运行。...结果列名取自联合的第一个分支中的列(或列别名)的名称。 在两个分支中对应的列没有相同名称的情况下,在所有分支中使用相同的列别名来标识结果列可能会很有用。...如果任何UNION分支中的任何列是空的,则结果列元数据报告为空的。 UNION结果中的字符串字段具有相应SELECT字段的排序规则类型,但如果字段排序规则不匹配,则分配精确排序规则。...TOP...ORDER BY应用于UNION结果:如果UNION位于FROM子句的子查询中,则TOP和ORDER BY将应用于UNION的结果。...如果其中一个FROM %PARALLEL查询生成的查询计划没有显示并行化,那么UNION查询将不支持%PARALLEL。
语句,如果返回正常那么就说明网站所使用的数据库是Mssql数据库,因为Mssql数据库默认有一个sysobjects的表明。...我们再来看看第四个(其实有两个显示位就足够了): ? 猜测第四个的时候页面没有什么反应,说明它只存在‘2’、‘3’两个显示位!...这边查询出来第一个表示 manage,然后我们再去查第二个(到了这里我的靶机重启了一下,所以端口变了): http://219.153.49.228:43946/new_list.asp?...查询出来第二个表名是 announcement,如果想继续查的话继续用 not in 这条判断查询就行了!...这边查询出来第一个列名是 id,我们继续查第二个列名只需要把数字1修改为2就行了 col_name(object_id('manage'),2 http://219.153.49.228:43946/
用法简介 EXPLAIN 的用法很简单,只需要在你的 SQL 前面加上 EXPLAIN 即可。...> 格式,表示该行为 id 为 m 和 n 联合的结果 id 顺序的规则:如果 id 相同,执行顺序由上到下;如果不同,执行顺序由大到小。...,则最外层的查询被标识为 PRIMARYUNION/UNION 中的第二个或更后面的 SELECT 语句DEPENDENT UNIONdependent (true)UNION 中的第二个或更后面的 SELECT...语句,依赖于外部查询UNION RESULTunion_resultUNION 的结果SUBQUERY/子查询中的第一个 SELECT 语句DEPENDENT SUBQUERYdependent (true...,如:id = 1,值为 const;如果是联合查询或者子查询则为关联的字段;如果使用了函数,则为 func。
通过它可以知道自己写的 sql 语句是否足够高效以及还有哪些可以优化的地方。...union:表示此查询是 UNION 中的第二个或随后的查询 union result:从 union 临时表检索结果的 select 举个栗子,帮助你们分清楚区别: explain select 1...dependent union:此查询是 UNION 中的第二个或随后的查询,其次取决于外面的查询 uncacheable union:此查询是 UNION 中的第二个或随后的查询,同时意味着 select...第一个 select,同时意味着 select 中的某些特性阻止结果被缓存于一个 Item_cache 中 PS:只需要弄懂前四个即可,其他的知道就好。...3.6 key 列 表示 MySQL 执行查询实际使用那些索引来查找,如果为 null,则证明没有使用索引。
因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select...交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。...,返回到结果集合中的数 据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。...交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。...,返回到结果集合中的数 据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
ID列 ID列中的如果数据为一组数字,表示执行SELECT语句的顺序;如果为NULL,则说明这一行数据是由另外两个SQL语句进行 UNION操作后产生的结果集 ID值相同时,说明SQL执行顺序是按照显示的从上至下执行的...列表中的子查询 DEPENDENT SUBQUERY 依赖外部结果的子查询 UNION Union操作的第二个或是之后的查询的值为union DEPENDENT UNION 当UNION作为子查询时,...第二或是第二个后的查询的select_type值 UNION RESULT UNION产生的结果集 DERIVED 出现在FROM子句中的子查询 3....TABLE列 包含以下几种结果: 输出去数据行所在表的名称,如果表取了别名,则显示的是别名 : 由ID为M,N查询union产生的结果集 /<subquery...KEY列 查询优化器优化查询实际所使用的索引 如果表中没有可用的索引,则显示为NULL 如果查询使用了覆盖索引,则该索引仅出现在Key列中 9.
因为这样可以避免 top的字段如果是逻辑索引的,查询的结果后实际表中的不一致(逻辑索引中的数据有可能和数据表中的不一致,而查询时如果处在索引则首先查询索引) 14、说明:前10条记录 select top...交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。...,返回到结果集合中的数 据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。...交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。...,返回到结果集合中的数 据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。
,并且前者比后者更重要,因此会产生以下三种结果,其中收益逐个递减 保命,且尽可能多地获得金币 保命,但没金币 没命 原问题假定所有的海盗都足够理智、足够聪明,言下之意是海盗们会权衡:当且仅当,同意当前方案带来的收益...利益虽然小,但两个党派成员都清楚,若非本党派人士担任总统,会连这一点小利益都没有,因此都会支持自己党派的成员,以获得这看似不大的最高收益。...海盗的信息可以用一个长度为2的整型数组来保存,其中第 一项保存海盗的编号,第二项保存海盗的收益,如果海盗"没命"则金额`null`。...在"数据结构"一节中已经提过,策略的数据结构是二维整数数组,前文为了排序,已将数组转成行记录,先需要使用 PostgreSQL 的窗口函数 `array_agg` 再将行记录转成数组,同时使用 `array_cat...union all select n + 3 from foo where n < 5 ) select * from foo; 这段递归查询代码功能等价于以下迭代的 Python 代码: (queue
如果该行指的是 union 结果则可以是 null。SQL 中有几个 select 就会有几个不同的ID(关联查询 ID 是一样的),具体还得看优化器优化后的 SQL 去判断。...如果是使用子查询没有被优化器优化成多表连接的话最外层的查询就是 PRIMARY。如果是使用 union 或者 union all,最左边的就是 PRIMARY。...UNIONUNION 中第二或者之后的查询。使用 union 后,第一个是 PRIMARY,第二个之后就是 union 了(除了最后一个)。...使用 union 后,一般最后就是 union 去重后的结果了,也就是 UNION RESULT。SUBQUERY子查询中第一个查询。...ref(JSON-[ref])当使用索引时,等值比较的比较对象。如果值为func,则使用的值是某个函数的结果。rows(JSON-[rows])这个表示优化器认为当前查询必须要扫描的行数才能拿到结果。
2.UNION ALL集合运算 (1)假设Query1返回m行,Query2返回n行,则Query1 UNION ALL Query2返回(m+n)行; (2)UNION ALL 不会删除重复行,所以它的结果就是多集...(4)不能显示指定DISTINCT字句,如果不指定ALL,则默认使用DISTINCT。 (5)当Query1与Query2比较某行记录是否相等时,会认为取值为NULL的列是相等的列。...(5)不能显示指定DISTINCT字句,如果不指定ALL,则默认使用DISTINCT。 (6)当Query1与Query2比较某行记录是否相等时,会认为取值为NULL的列是相等的列。...(6)不能显示指定DISTINCT字句,如果不指定ALL,则默认使用DISTINCT。 (7)当Query1与Query2比较某行记录是否相等时,会认为取值为NULL的列是相等的列。...如定义一个基于该TOP查询的表表达式,然后通过一个使用这个表表达式的外部查询参与集合运算。 七、练习题 1.写一个查询,返回在2008年1月有订单活动,而在2008年2月没有订单活动的客户和雇员。
且只有一个 union:union连接的两个select查询,第一个查询是dervied派生表,除了第一个表外,第二个以后的表 select_type都是union dependent union:与union...那么这里显示的是别名,如果不涉及对数据表的操作,那么这显示为null,如果显示为尖括号括起来的就表示这个是临时表,后边的N就是执行计划 中的id,表示结果来自于这个查询产生。...如果是尖括号括起来,与类似, 也是一个临时表,表示这个结果来自于union查询的id为M,N的结果集 Type列 :表示访问类型,性能从低到高依次是:ALL...,则该索引将被列出,但不一定被查询使用 Key列: 表示MySQL在查询中实际使用的索引,若没有使用索引,显示为NULL key_len列: 表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度...数据插入回去 测试单表在没有索引下全表扫描和走索引情况下的性能对比: select 查询加上sql_no_cache 查询的时候不使用缓存 ,突出我的实验结果 上面图片很明显是 走索引情况查询速度更快
列表中包含了子查询 DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中 UNION 若第二个SELECT出现在UNION...之后,则被标记为UNION:若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED UNION RESULT 从UNION表获取结果的SELECT 2.3 table...查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。 key 实际使用的索引,如果为NULL,则没有使用索引。...(可能原因包括没有建立索引或索引失效) 查询中若使用了覆盖索引(select 后要查询的字段刚好和创建的索引字段完全相同),则该索引仅出现在key列表中 2.6 key_len 表示索引中使用的字节数...,为整个查询中的第二个select【select id from t3】 执行顺序4:id列为1,表示是UNION里的第一个select,select_type列的primary表示该查询为外层查询,table
领取专属 10元无门槛券
手把手带您无忧上云