SQL查询时出现了子查询返回多条记录是什么意思啊

写SQL查询的时候,要是子查询返回了多条记录,那说明符合子查询条件的记录确实不止一个。
在SQL里,咱们把一个SELECT-FROM-WHERE的语句叫作查询块。
有时候,要得到一个查询的结果,得分成好几步走,第一步往往是得做个查询,找出那些用户不知道但数据库里存在的值。
然后呢,就把一个查询块塞到另一个查询块的WHERE或者HAVING后面当条件,这就叫子查询,也叫内层查询。
子查询能返回的东西还挺多样的,可以是一个单独的值(单行子查询),可以是几行值(多行子查询),也可以是多列数据(多列子查询)。
补充一点:子查询的SELECT语句是不能出现在ORDERBY子句里的。
因为ORDERBY子句的功能就是给最终查询结果排序,要是想按特定顺序显示结果,那ORDERBY子句就得放在外部查询的最后面。
而且,子查询“必须”用括号括起来,这样才好跟外部查询分得清清楚楚。
要是子查询在外部查询的WHERE或HAVING子句里,那这个子查询就只能放在比较运算符的“右边”。

数据分析人必掌握的数据库语言-SQL指南第五期

嘿,小伙伴们,今天咱们继续深入探讨SQL的奥秘,这次咱们聊聊子查询的用法。
子查询这玩意儿,就像是SQL世界里的嵌套汉堡,听起来复杂,但吃上去味道好极了!
先来个实际点的例子,咱们想象一下,有个订单表和客户表,订单里包含订单号、客户ID和日期,而客户信息得去另一个客户表里找。
现在,咱们得找出买了RGAN01 产品的所有顾客,这该怎么玩呢?
第一步,找出卖RGAN01 的所有订单号。
第二步,找到这些订单号的顾客ID。
第三步,再找到这些顾客的具体信息。
这三个步骤其实可以各自独立成查询,但更酷的方式是,我们用子查询将它们巧妙地合并成一个查询。

比如说,第一个查询就是找prod_id为RGAN01 的所有订单号。
这告诉我们哪些订单卖了这个产品。
第二个查询,我们可以用IN子句来关联第一步的结果,这样就找到了相关顾客的ID。
接下来,我们可以把第一步的结果变成子查询,这样外部查询和内部查询就能互相借力,达到最终的目的。

别忘了,子查询处理起来是有点像剥洋葱,先从最里面开始。
比如,DBMS会先执行最里面的子查询,然后得到的结果会传递给外面的查询。
这样,咱们就能写出强大的SQL语句,而且子查询嵌套的层数其实理论上是没有上限的,但为了性能考虑,嵌套太深可不是什么好事。

还有一点要注意,子查询的SELECT语句只能查一个列,如果你要查多个列,那可就闹笑话了。
还有,用子查询的时候,有时候得用完全限定列名,就是表名加上列名,这样就不会跟其他表的列名搞混了。

好啦,今天咱们就说到这儿。
下回,咱们来聊聊连接和高级连接,敬请期待哦!咱们下期见!