多列子查询

当是单行多列的子查询时,主查询语句的条件语句中引用子查询结果时可用单行比较符号(=, >, <, >=, <=, <>)来进行比较;

当是多行多列子查询时,主查询语句的条件语句中引用子查询结果时必须用多行比较符号(IN,ALL,ANY)来进行比较。

案例

查看哪些国籍的教师年龄等于我司该国籍教师最大年龄

SELECT name, age
FROM teachers
WHERE (name, age)
IN(
    SELECT name,MAX(age)
    FROM teachers
    GROUP BY country
);

执行输出结果

mysql> SELECT name, age
    -> FROM teachers
    -> WHERE (name, age)
    -> IN(
    ->  SELECT name,MAX(age)
    ->     FROM teachers
    ->     GROUP BY country
    -> );
+------------------+-----+
| name             | age |
+------------------+-----+
| Eastern Heretic  |  20 |
| Northern Beggar  |  21 |
| Western Venom    |  28 |
| Southern Emperor |  21 |
+------------------+-----+
4 rows in set (0.01 sec)

练习题

使用课程表courses,查询每个教师授课学生人数最高的课程名称和上课人数

SELECT name,student_count
FROM courses
WHERE (teacher_id,student_count)
IN (
    SELECT teacher_id,MAX(student_count)
    FROM courses
    GROUP BY teacher_id
);

目标输出结果

mysql> SELECT name,student_count
    -> FROM courses
    -> WHERE (teacher_id,student_count)
    -> IN (
    ->  SELECT teacher_id,MAX(student_count)
    ->     FROM courses
    ->     GROUP BY teacher_id
    -> );
+-------------------------+---------------+
| name                    | student_count |
+-------------------------+---------------+
| Advanced Algorithms     |           880 |
| Artificial Intelligence |          1660 |
| Dynamic Programming     |          2000 |
+-------------------------+---------------+
3 rows in set (0.01 sec)

Last updated

Was this helpful?