SQL第22课~子查询+关键字+连接

所有内容收录在合集~SQL入门到熟练。欢迎点赞关注我哦~

Complex Queries终于可以写复杂一点的查询了。

之前的所有内容都是基础,就像你语文课学会了简单的句子一样,接着就开始复杂的句子学习,也就是让句子有更好的表达,方便交流和执行。

主要运用的是之前学过的查询,子查询是另一个查询中的选择语句

第一步,写一段子查询,需要用到的是内查询和外查询

1 子查询 Subqueries

比如我想找到所有比payment_id3支付金额高的订单

就像写嵌套函数先写里面的,再一层一层括起来一样,先写这些。

select amount

from sakila.payment

where payment_id=3

然后括号括起来,再前面进行添加,

select *

from sakila.payment

where amount >

然后执行,得到的就是大于id3的支付结果。

同样的逻辑,看其他人写的表达,也可以get到具体的意思。

比如下面这个,就是运用avg函数和子查询,得出了一个高于平均值的数据。

2 IN运算符

其实IN 和NOT IN 一样的逻辑。

比如上面那个表不要看到没有数据的值,也是直接写。

3 子查询VS连接 Subqueries VS Joins

前面说过连接有内连接和外连接,外连接有左连接和右连接,其中主要运用左连接。

对于SQL来说,表现和可读性,决定怎么写查询执行会更快。

子查询的一些内容和结果和连接非常相似,

假设两种查询执行时间一样,肯定选更容易读的查询。

容易读的查询就是和你目标更一定的,一眼可以看出的,比如上面的找出没有数据的值,上面的写法一眼就可以看出在做什么。

所以需要自己花时间,研究和对比,哪些代码更容易运用,也就是可读性和执行更好。

举个例子,一个大神写的代码,对比的是连接和子查询,先看子查询,这个看起来有点麻烦,各种列选择了好几个,然后连接2个表格进行了对比,最终执行。

然后对比连接的,连接的更清晰易读,很清晰的可以看出在不同的两个表里,要寻找什么,信息也非常清楚。

4 The ALL Keyword

假设我是一个拼多多的店主,有一天我对第一个顾客很感兴趣,于是我打开电脑,找出了他支付的最大金额,好吧,是9.99元。

现在我可以用这段查询作为一个子查询,寻找所有的金额大于9.99的订单。

所以我还是直接添加括号,然后老样子,

select *

from sakila.payment

where amount>

然后执行得出结果。

这个是刚才一直在用的方法,那么这个小标题是ALL,所以接下来用ALL来解决这个问题。

还是先写一个准备的值。

这次不用MAX函数,特别注意括号里面select后面紧跟的,一定是一列,不然就会报错。

select *

from sakila.payment

where amount>(select amount

from sakila.payment

where customer_id=1)

运行得到顾客1所有的订单。

Error Code: 1242. Subquery returns more than 1 row

因为 顾客1有很多的订单,所以报错了,MYSQL无法对比这些值。

这个时候前面加一个ALL,就会得到所有大于顾客1所有订单金额的订单。

如果不想用表格里面的数字,也可以自行设置数字。

比如:>ALL(10,20,30,...) 然后执行操作的时候,每行会自动按照顺序进行比较,如果金额大于所有的这些值,那么这行就会反应在最终的结果集。

子查询有时候会返回单一值,有时候会返回一列值,有时候会返回一张表。

5 ANY关键字 The ANY Key

学了ALL,还有ANY和SOME,这是一样的。

使用这2个关键词,可以得到任意的大于一定金额的行。

先找出按照顾客id的购买记录。

假设我只想要一个购买记录大于40的客户,我可以写,然后得到大于40的记录,一共有五个。

然后我想看到这些客户的全部信息,那么我在前面进行添加,注意要删掉第一个count(*),不然无法运行。

同样的,解决问题的方法不知有一种,所以还可以用=运算符,然后添加any,意思就是查询返回其中的任何一个,就会返回最终结果。


总结:

1 子查询的特点就是在后面的部分加了一个括号。

2 MAX函数和ALL关键字可以互换,注意一些细节的调整。

3 IN和=ANY也可以直接互换。

完结~

展开阅读全文

页面更新:2024-04-30

标签:可读性   括号   句子   函数   表格   金额   逻辑   顾客   订单   关键字   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top