返回

MySQL50题解惑系列——三、模糊匹配、多排序、多表连接技巧

人工智能

引言

欢迎来到MySQL经典50题解析系列的第三期!在这一系列中,我们将深入探索模糊匹配、多排序、多表连接查询等技巧,并通过具体题目解析帮助您轻松掌握这些实用技能,助您玩转MySQL数据库。

第31题:查询1990年出生的学生

SELECT *
FROM student
WHERE SUBSTR(birthday, 1, 4) = '1990';

解析:

本题考察了模糊匹配的技巧。通过使用SUBSTR函数提取出生日期的前四位,可以查询出所有1990年出生的学生信息。

第32题:同时指定多种排序方式

SELECT *
FROM student
ORDER BY age DESC, name ASC;

解析:

本题考察了同时指定多种排序方式的技巧。通过ORDER BY子句可以同时按照年龄降序和姓名升序对查询结果进行排序。

第33题:多表的连接查询

SELECT s.name, c.course_name
FROM student s
INNER JOIN course c
ON s.course_id = c.course_id;

解析:

本题考察了多表的连接查询技巧。通过INNER JOIN子句可以将学生表和课程表连接起来,并查询出每个学生所选课程的名称。

第34题:查询学生信息及其所选课程的学分

SELECT s.name, c.course_name, c.credit
FROM student s
INNER JOIN course c
ON s.course_id = c.course_id;

解析:

本题考察了多表的连接查询技巧和聚合函数的使用。通过INNER JOIN子句可以将学生表和课程表连接起来,并通过SUM函数计算出每个学生所选课程的总学分。

第35题:查询选修了所有课程的学生

SELECT s.name
FROM student s
WHERE NOT EXISTS (
    SELECT 1
    FROM course c
    WHERE NOT EXISTS (
        SELECT 1
        FROM student_course sc
        WHERE s.student_id = sc.student_id
        AND c.course_id = sc.course_id
    )
);

解析:

本题考察了多表的连接查询技巧和NOT EXISTS子查询的使用。通过NOT EXISTS子查询可以查询出没有选修所有课程的学生,然后通过NOT运算符取反即可查询出选修了所有课程的学生。

结语

以上就是本期MySQL经典50题解析系列的全部内容。希望通过对这些题目的解析,能够帮助您进一步掌握模糊匹配、多排序、多表连接查询等技巧,从而提高您的MySQL数据库操作能力。如果您有任何问题或建议,欢迎在评论区留言。