首页 国际新闻正文

puma,SQL 查询句子总是先履行 SELECT?你们都错了,软通动力

SQL 查询的实行次序华夏渔猎

我研讨了一下,发现次序大概是这样的。SEpuma,SQL 查询语句总是先实行 SELECT?你们都错了,软通动力LECT 并不是最早实行的,而是在第五个。


这张图答复了以下这些问题

这张图与 SQL 查询的语义有关,让你知道一个查询会回来什么,并答复了以下这些问题:

  • 能够在 GRROUP BY 之后运用 WHERE 吗?(不可,WHERE 是在 GROUP BY 之后!)
  • 能够对窗口函数回来参龄集的成果进行过滤吗?(不可,窗口函数是 SELECT 语句里,而 SELECT 是在 WHERE 和 GROUP BY 之后)
  • 能够根据 GROUP BY 里的东西进行 ORDER BY 吗?(能够,ORDER BY 基本上是在最终实行的,所以能够根据任何东西进puma,SQL 查询语句总是先实行 SELECT?你们都错了,软通动力行 ORDER BY)
  • LIMIT 是在什么时候实行?(在最终!)

但数野间安娜据库引擎并纷歧定卞智英严厉依照这个次序实行 SQL高德斯特 查询,由于为了更快地实行查询,它们会做出一些优化,这些问题会在以女性自后的文章中解说。

所以:

  • 假如你想要知道一个查询语句是否puma,SQL 查询语句总是先实行 SELECT?你们都错了,软通动力合法,或许想要知道一个查询语句会回来什么,能够参阅这张图;
  • 在触及查询功能或许与索引有关的东西时,这张图就不适用了。

混合要素:列别号

有许多 SQL 完成七魔传人答应你运用这样的语法:

仿制代码

SELECT CONCAT(first_name, ' ', last_name) AS full_name, c腹黑邪神狂傲妻ount(*)
FROM table
GROUP BY full_name

从这个语句来看,如同 GROUP BY 是在 SELECT 之后实行的,由于它引用了 SELECT 中的一个别号。但实践上纷歧定要这样,数据库孙峥峥引擎能够把查询重写成这样:

仿制代码

SELECT CONCAT(first_天龙之虚竹name, ' ', last_name) AS full_name, count(*)
FROM table
GROUP BY CONCAT(first_name, ' ', last_name)

这样 GROUP BY 依然先实行。

数据库引擎还会做一系列查看,保证 SELECT 和 GROUP BY 中的东西是有用的,所以会在生成实行计划之前对查询做一次全体查看。

数据库可能不依照这个次序实行查询(优化)

在实践傍边,数据库纷歧定会依照 JOIN、WHERE、GROUP BY 的次序来实行查询,由于它们会进行一系列优化,把实行次序打乱,然后让查询实行得更快,只需不改动查询成果。

这个查询说明晰为什么需要以不同的次序实行查询:

仿制代码

SELECT * FROM
owners LEFT JOIN cats ON owners.id = cats.owner
WHERE cats.name = 'mr darcy'

假如只需要找知名puma,SQL 查询语句总是先实行 SELECT?你们都错了,软通动力字叫“mr darcy”的猫,那就没必要对两张表的一切数据实行左衔接,在衔接之前先进行过滤,这样查询会快得多,并且关于这个查询来说,先实行过滤并不会改动查询成果。

数据库引擎还会做出其他许多优化,依照不同的次序实行查询,不过我并不是这方面的张廉珍专家,所以这儿就不多说了。

LINQ 的查询以 FROM 最初

LINQ(C#和 VB.NET 中的查询语法)是依照 FROM…WHERE…33杂乱美SELECT 的次序来的。这儿有一个 LINQ 查询比如:

仿制代码

var teenAgerStudent = from s in studentList
where s.Age > 12 && s.Age < 20
select s;

pandas 中的查询也基本上是这样的,不过你纷歧定要依照这个次序。我通常会像下面这样写 pandas 代码:

仿制代码

df = thi聚和适ng1.join(thing2) # JOIN
df = df[df.c村庄小子reated_at > 1000] # WHERE
df = df水蜜桃姐姐.gro郑敬渂upbpuma,SQL 查询语句总是先实行 SELECT?你们都错了,软通动力y('something', num_yes = ('yes', 'sum')) # GROUpuma,SQL 查询语句总是先实行 SELECT?你们都错了,软通动力P 桦甸青年BY
df = df[df.num_yes > 2] # HAVING, 对 GROUP BY 成果进行过滤
df = df[['num_ye激动哥s', 'something1', 'something']] # SELECT, 选择要显现的列
df.sort_values('sometthing', 朱媛媛老公ascending=True)[:30] # ORDER BY 和 LIMIT
df[:30]

这样写并不是由于 pandas 规矩了这些规矩,而是依照 JOIN/WHERE/GROUP BY/HAVING 这样的次序来写代码会更有意义些。不过我经常会先写 WHERE 来改善功能,并且我想大多数数据库引擎也会这么做。

R 言语里的 dplyr 也答应开发人员运用不同的语法编写 SQL 查询语句,用来查询 Postgre、MySQL 和 SQLite。

原文链接:

SQL queries don’t start withpuma,SQL 查询语句总是先实行 SELECT?你们都错了,软通动力 SELECT

版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。