MySQL学习日记—节选SQLZOO习题(2)

这篇博客详细解析了SQLZOO中关于子查询的习题,涵盖子查询概念、位置、相关子查询等内容。通过实例展示了如何利用子查询解决如找出人口高于俄罗斯的国家、比较GDP和人口等问题,帮助读者掌握子查询在WHERE、SELECT和FROM后的应用及与运算符如IN、BETWEEN、ALL的结合使用。
摘要由CSDN通过智能技术生成

前言

上一期节选了SQLZOO网站前三章节的习题进行解析,这一期带来的是第4章的精选习题解析。主要涉及到子查询的知识点。

这一章的主题叫做:SELECT within SELECT

从题目也可以看出,两个SELECT,在这一章题目中全都是关于子查询的,考察子查询的运用

子查询概念

有时候单独的一句查询并不能满足要求,我们可能需要先查询到一部分数据,再用这一部分数据进一步执行新的查询。那么要完成上面的操作我们可能需要执行多条SQL语句,而且往往需要输入在后面的查询中输入中间结果作为条件,比较麻烦。

如果我们能够将多条有关联的SQL语句整合成一条SQL语句,让这条语句自己去解析先查询的数据,这其实就是子查询。

直接用一道题目来解释也许比上面大段的文字描述更加清晰。

题1.列出每個國家的名字 name,當中人口 population 是高於俄羅斯’Russia’的人口。

对这道题,一般来讲应该是要分两步的:

  1. 查询出俄罗斯的人口;
  2. 查询出高于俄罗斯人口的国家。

首先第一步:

SELECT population FROM world 
WHERE name='Russia';

查询出来的结果是:

population
19942642

接着第二步,将上面查询的结果作为筛选条件:

SELECT name FROM world
WHERE population > 19942642;

而如果我们用子查询的话,直接用第一步的查询语句直接替换掉第二步中的数字条件:

SELECT name FROM world
WHERE population > (SELECT population 
					FROM world
     				WHERE name='Romania');

这就是子查询,一个SELECT语句的查询结果能够作为另一个语句的输入值
在SELECT语句中,子查询是从内向外处理的。在处理上面的SELECT语句时,首先执行的是括号里面的语句,这个查询返回了一个值,外部查询就变成了第二步中的语句了。

子查询位置

子查询多放在WHERE后面用作条件筛选,但也可以用在SELECT和FROM后面。SELECT后面用的较少,而且要求子查询的结果只能是单行单列的一个值;而FROM后面的子查询结果则需要是一张新的表(多行多列)

在WHERE后可使用运算符如 =、<、>、>=、<=、IN、ALL、BETWEEN 等与子查询进行运算,前面五个运算子只能和单值进行运算,有时候子查询得到的结果可能不只是一个值,而可能是多个值(多行一列),这个时候就只能用IN、ALL或ANY操作符了。

IN在上一期提到了,也就是用来处理要和多个数据中的一个相等的操作符。

题3.在阿根廷Argentina 及 澳大利亞 Australia所在的洲份中,列出當中的國家名字 name 及洲分 continent 。按國字名字順序排序。

这里子查询得到的洲份不只一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值