子查询和特殊查询(union和limit)
总结了MySQL中的子查询和特殊查询的语法
子查询
子查询分为 where语句中的子查询、from语句中的子查询、select语句中的子查询
因为select语句中的子查询不怎么使用,所以下面只对应where语句中的子查询和from语句中的子查询进行测试
- where语句中的子查询
where 语句中的子查询就是指将一个 sql 查询语句查出来的数据作为一个条件值放在 where 中进行条件判断
基本语法
select 字段,字段,字段,...
from 表名
where 字段 = (sql查询语句); //括号里的sql查询语句就是子查询语句
测试
查询班级里身高比张三高的同学的姓名和身高
select name,height
from student
where height > (select height from student where name = '张三');
- from语句中的子查询
from语句中的子查询是指将一个查询语句查询出来的语句作为一张表来进行其它的查询
基本语法
select 字段,字段,字段,...
from (sql查询语句) //括号里的sql查询语句就是子查询语句 能作为主表也能作为要连接的表
where 条件
测试
因为没有具体的样例,所有这里就简单的查询多个数据做为另一张表,然后查询数据
将身高和年龄都大于张三的同学的姓名,身高,年龄查询出来
select s.name,s.height,s.age
from student s
join (select height,age from student where name = '张三') ns
on s.height > ns.height and s.age > ns.age
union查询
union查询指的是:将两个查询合并起来查询,而不是通过连接,这样查询比两张表连接查询效率要高。但是要注意的是这两个查询要查询的数目得相同,可以一张表合并也可以多张表合并
基本语法
select 字段,字段
from 表
where 条件
union
select 字段,字段 //注意,在合并查询的时候,两次查询的字段数要相等
from 表
where 条件;
测试
查询名字为张三和名字为李四两个同学的所以信息
select *
from student
where name = '张三'
union
select *
from student
where name = '李四'
- limit查询
limit 查询指的是:可以规定在哪一条数据开始查查多少条,常用来做分页查询
基本语法
select 字段,字段
from 表
where 条件
limit 数字a 数字b //数字啊代表从哪个数据开始读,数字b代表读几个数据
测试
将班级表中的第3到6个人的所有信息查询出来
select *
from student
limit 2 4