欢迎光临散文网 会员登陆 & 注册

多表查询select语句顺序

2021-09-16 09:08 作者:海鸥之道  | 我要投稿

存取时,为了方便分开存,取得时候需要连起来

连表操作实例:

# 插入数据

查看表:

此时发现,拼表方式不是我们想要的,这个拼表方式称为笛卡尔积形式

正确的拼表语句:

表的三种连接方式:

表连接有特有的语句表达,不要用where语句连表。

1、内连接: 只取两张表的共同部分

语法:

2、左连接, 在内连接的基础上保留左表的记录

3、右连接

4、全外连接

在内连接的基础上,保留没有对应关系的记录。

实例讲解 select操作顺序:

求平均年龄大于30岁的部门名

涉及到:拼接表、分组、聚合、刷选having

完整语法:

执行顺序: (重点)

1、FROM

第一步,执行FRON语句。我们首先需要知道最开始从哪个表开始的,这就是FROW告诉我们的。现在有了<Left_table>和right_table>两个表,我们到底从哪个表开始,还是从两个表进行某种联系以后再开始呢?它们之间如何产生联系呢?——笛卡尔积

2、执行ON过滤

连表依据,执行完笛卡尔积以后,接着就进行条件过滤,根捆指定的条件,去掉那些不符合条件的数据

3、添加外部行

这一步只有在连接类型为OUTER J0IN时才发生,如LEFT OUTER JOIN、RIGHT OUTER J0IN和FULL OUTER J0IN。在大多数的时候,我们都是会省略掉OUTER关键字的,但OUTER表示的就是外部行的概念。

4、执行WHERE过滤

对添加外部行得到的表进行WHERE过滤,只有符合<where_condition>的记录才会输出到新表中。

但是在使用where子句时,需要注意一下两点:

    1)由于数据还没有分组,因此现在还不能在where过滤中使用where_condition=MIN(col)这类对分组统计的过滤;

    2)由于还没有进行列的选取操作,因此在select中使用列的别名也是不被允许的,如:select city as c from t where c='shanghai'是不允许出现的。

5、执行GROUP BY分组

group by子句主要是对使用where子句得到的虚拟表进行分组操作。

6、执行HAVING过滤

HAVING子句主要和GROUP BY子句配合使用,对分组得到的虚拟表进行条件过滤。

7、SELECT列表

现在才回执行到SELECT子句,不要以为SELECT子句被写在第一行,就是第一个被执行的。

8、执行DISTINCT子句

如果在查询中指定DISTINCT子句,则会创建一张内存临时表,如果内存放不下,就需要存放在硬盘了。

9、执行ORDER BY 子句

对虚拟表的内容按照指定的列进行排序,然后返回一个新的虚拟表。

10、执行LIMIT子句

限制输出数据,很多时候,limit会与order by子句一起使用。

多表查询select语句顺序的评论 (共 条)

分享到微博请遵守国家法律