一、子查询
子查询指在一个查询中嵌套另一个查询,可以多层嵌套。
常出现在两个位置:
1)、from子句后:此用法也被称为行内视图,因为该子查询的实质就是一个临时视图。
2)、where子句后:作为过滤条件的值。
1、from子句后
例:SELECT * FROM (SELECT * FROM student_table) t WHERE t.java_teacher>1;
说明:上面语句中,为子查询起了别名t。
2、where子句后
单列:
例:#与in函数搭配(作用同=any(……))
SELECT * FROM student_table WHERE student_id IN (SELECT teacher_id FROM teacher_table);
#与any函数搭配,比较值
…… >|>=|<|<=|<>|= ANY( SELECT singleColumnName FROM tableName);
说明:>与<分别对应大于括号内最大值与最小值即可。any可换位all,对应比较all函数内的全部值。
多列:
使用括号。
返回两个列语法:
select * from tableName1
where (columnName1,columnName2)
=any(select column_name1,column_name2 from tableName2);
二、集合运算
select语句查询的结果是一个包含多条数据的结果集,类似数学里的集合,可进行交(intersect)、并(union)、差(minus)运算。
注:MySQL并不支持交与差运算,考虑用子查询(差)或多表连接查询(交)代替!
1、intersect(交)
语法:select 语句 intersect select 语句;
结果:为两个select语句结果集的交集(数据列数、对应类型应一致,对应列名可不同,结果中取第一个select的列名)。
2、union(并)
select 语句 union select 语句;
结果:两结果集的并集(同上)。
3、minus(差)
select 语句 minus select 语句;
结果:第一个select语句的结果集减去第二个select的结果集。