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

MySQL的高级查询技巧

版权声明

我们都知道,作为一名数据分析师,熟练使用数据库是必备技能之一。

因为它在我们统计数据、提取数据、数据共享等方面有着至关重要的作用。

同时,在我们实际使用中,又有至少90%的SQL语句是属于数据操作语言(Data Manipulation Language)范畴。

而在这90%的语句中,我们在绝大多数情况会用到的,要非语句莫属了。

可能你会说,语句还不简单?我会用。

其实不用你说,我们都知道,一条完整语句非常简单,无非是:

而这条语句执行的逻辑,也无非是:

from -> on -> join -> where -> group by -> having -> select -> order by -> limit

很简单嘛。

是的,一条语句当然简单。但是我们在实际运用中,可不仅仅使用一条语句就足够了。我们通常会嵌套其他子查询或聚合函数等语句一起使用。也就是我们经常说的高级查询了。

如果你能恰当的使用它的话,就可以写出更加灵活的SQL了。

在这之前,我们先来讲一个新的工具——视图

视图

从SQL角度来说,视图和表的意义是相同的。只不过表储存的是实际的数据,而视图中保存的是

语句。即视图本身不存储数据,它保存的仅是语句。

你可以将视图理解成用语句写的一个临时表,只具备读取数据的功能,并不会将结果数据添加到也数据表中。

总体来说,视图有两大优点:

节省存储设备的容量,因为视图无需保存数据。

可以将频繁使用的语句保存成视图,避免每次都重复书写。

而我们创建视图需要使用语句来实现:

在我们创建视图之后,就可以直接通过设置的来调用它,而后直接嵌入一个新的语句中。非常之方便。比如:

但同时,我们也要注意,视图也不是随随便便就能设置的,它也有自己的脾气:

定义视图不能使用语句。

通过语句对原表进行分组统计得到的是同,不能直接进行更新。需要对视图和原表同时进行更新。

要尽可能避免在视图的基础上再次创建视图哟,虽然语法并不会报错

接着,我们删除视图的时候,可以直接用语句:

对了,我们构建了多个视图后可以调用来将含有共同字段的视图联合在一起哟。

好,视图的部分讲完了。接下来,我们来聊聊与视图紧密相关的子查询。

子查询

如果说我们定义了视图之后,在后面的语句中可以直接调用,那么子查询就相当于一次性视图。即它在

语句执行完毕之后就会消失。

但是,子查询仍可直接运用于子句当中,实现与视图相同的效果。(请自行对比上面的视图调用举例哟)

看吧,子查询能实现和视图一样的效果。不同的是,“product_sum”虽然是该子查询的名字(有时,前面的关键字也可省略),但在这条语句执行之后就会消失。

从理论上来讲,子查询的层数是没有限制的。因此,你可以在某子查询的子句中,继续使用子查询,该子查询的子句中还可再次使用子查询……无限循环下去。

值得注意的是,虽然子查询与

语句一样,都是查询语句,但因为前者在

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180914G04ITJ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券