子查询指的是一条查询语句嵌套在另一条查询语句内部,即在一条select语句的from或where子句中包含另一条select语句。在查询语句中,外层select语句称为主查询,from或where子句中包含的select语句称为子查询,也称嵌套查询。理论上子查询可以出现在select语句的任何位置,但实际开发中,子查询经常出现在from和where子句中。本节将介绍SQL子查询方法,其中包括:from型子查询和where型子查询。
3.3.1 from型子查询
from型子查询也称为表子查询,子查询语句位置在from后,用来返回多行多列的数据记录,返回的数据记录可以当作一张临时表。MySQL中from型子查询基本语法形式为:
select column_name from (select column_name from table_name) as table_name_new;
小贴士:使用from型子查询必须给内层select语句所生成的临时表提供一个新表名!
本节将使用样例表player和penalty,数据表结构、创建及插入数据语句如下:
表 player球员信息表
字段名称
数据类型
约束
备注
id
int(10)
主键约束
球员编号
name
varchar(20)
/
球员姓名
birthday
datetime(6)
/
出生日期
sex
varchar(20)
/
球员性别
town
varchar(20)
/
居住城市
player表数据如下:
id
name
birthday
sex
town
1
Dempsey
1982-9-1
M
Stratford
2
Aldrich
1981-6-25
M
Stratford
7
Alex
1983-5-11
M
Stratford
8
Nic
1986-11-1
F
Inglewood
27
Devin
1982-12-28
F
Eltham
28
Dick
1981-