1. 内联视图子查询
内联视图子查询实际上就是将查询的结果集作为一个查询表,继续进行查询操作。
查询国籍为美国(USA),且年龄最大的教师,请使用内联视图子查询实现
select*
from(select* from teachers where country='USA') teachers
where age=(select max(age)from teachers);
使用内联视图,连接 teachers
表和 courses
表,并将查询的课程名称(起别名为 course_name
)、学生总数、讲师姓名(起别名为 teacher_name
)信息作为查询表,并从该查询表中选出学生总数最多的信息
select courses.name as course_name,student_count,teachers.name as teacher_name
from courses
right join teachers on courses.teacher_id=teachers.id
where student_count=(select max(student_count)from courses);
2. IN 操作符的多行子查询
使用 IN 操作符进行子查询,其实是将子查询返回的集合和外层查询得到的集合进行交集运算,这个结果可以是零个值,也可以是多个值。由此,最后可以查询出与列表中任意一个值匹配的行
SELECT `column_name`
FROM `table_name`
WHERE `column_name` IN(
SELECT `column_name`
FROM `table_name`
WHERE `column_name` = VALUE
);
需要查询国籍为美国(USA)的教师所开的所有课程,请使用 IN 操作符进行多行子查询。
SELECT name
FROM courses
WHERE teacher_id IN (SELECT id FROM teachers where country='USA')
需要查询年龄不大于20岁的教师所教的所有课程的课程名称,请使用 NOT IN 操作符进行多行子查询。
SELECT name