单行子查询
只返回一行结果的子查询,称为单行子查询。对于单行子查询的结果我们可以使用单行操作符来构造外查询条件,如 >、<、= 等等。
废话少说上代码
select * from city
where population >
(select population from city where name='tokyo');
多行子查询
返回多行结果的子查询,称为多行子查询。对于多行子查询的结果我们可以使用多行操作符来进一步构造查询条件,如 in、any、all。
简单说一下这三个多行操作符的含义:
- in:等于多行子查询返回的结果中的任意一个即可;
- any:和多行子查询返回的某一个值进行比较即可;
- all:和多行子查询返回的所有值进行比较;
下面就这三个多行子查询操作运算符进行举例:
- 查询所有和国家 ‘ABW’ 有共同语言的国家
实现的 SQL 语句如下:
SELECT * FROM countrylanguage cou
WHERE cou.`Language` in (
SELECT `Language` FROM countrylanguage cou
WHERE cou.CountryCode='abw')
- 结果解析:子查询首先会查出 ABW 这个国家有 4 个语言,然后利用 in 运算符把使用 4 种语言之一的国家编码显示出来,最后利用
distinct
去掉重复行。 - 结果解析:子查询首先会查出 ABW 这个国家有 4 个语言,然后利用 in 运算符把使用 4 种语言之一的国家编码显示出来,最后利用
distinct
去掉重复行。 - 查询人口数比 TTO 这个国家下任意城市人口数小的城市信息,换句话说,对某一城市 X,只要 TTO 下任一城市人口数比 X 人口数大,那么 X 就进入查询结果。实现的 SQL 语句如下:
select * from city
where population < any (select population from city where countrycode = 'TTO')
and countrycode<> 'TTO';
查询人口数量比 TTO 这个国家所有城市人口数量都小的城市信息,换句话说,人口数小于 TTO 下城市最小人口数的城市会进入查询结果。实现的 SQL 语句如下:
select * from city WHERE Population < ALL (SELECT Population FROM city WHERE CountryCode = 'TTO')
结果解析:使用 all
操作运算符意味着要和子查询所有结果比较(而不是任一),所以结果数据量比使用 any
要少。