1.mysql 查询语句内部嵌套查询语句
mytable
CREATE TABLE `mytable` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`age` tinyint(3) DEFAULT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
select age, name from mytable where age = (select max(age) from mytable);
where 后面的条件是一个select 语句
2.子查询的分类
1)子查询出现的位置
出现的位置
1)where后
2)from 后
2)exits 内
2)子查询的返回值
返回值的种类
1)返回一个单一值,标量子查询。可以用关系运算符进行判断。把这个返回值当作一个值来使用就可以
查询表中年龄最大的人的姓名和年龄
select age, name from mytable where age = (select max(age) from mytable);
2)一列,获取多行的一列值 使用in,not in,all,any,some等集合类型的关键字(some 和any是一回事)
查询年龄为60的人的信息
select id,name,age from mytable where name in (select name from mytable where age=60);
一般情况下in的功能等同于 =any
3)一行
这个需要在select 字句前用()构建一行,构建的这一行的字段要与 select 子句的字段一致
select id,age,name from mytable where (id,age,name) = (select * from mytable where id=2);
这个需要限制一行,可以用distinct 或者limit 1
4)表
与查询单行的一样,只不过不用限制,关系运算符改为in