SELECT number FROM student_info WHERE name = '狗哥';
SELECT * from student_score WHERE number = 20210101;
标量子查询
SELECT * FROM student_score WHERE number = (SELECT number FROM student_info WHERE name = '狗哥');
SELECT (SELECT number FROM student_info WHERE name = '狗哥') AS 学号;
SELECT * FROM student_score WHERE number > (SELECT number FROM student_info WHERE name = '狗哥');
SELECT * FROM student_score WHERE (number, subject) IN
-> (SELECT number, 'MySQL是怎样运行的' FROM student_info WHERE major = '计算机科学与工程');
子查询的结果包含多行多列,称为表子查询。
EXISTS 和 NOT EXISTS 子查询
SELECT * FROM student_score WHERE EXISTS(SELECT * FROM student_info WHERE number = 20210108);
只关心只查询的结果是否存在,而不关心具体的值,用作条件判断。
不相关子查询和相关子查询
SELECT * FROM student_score WHERE number = (SELECT number FROM student_info WHERE name = '狗哥');
子查询可以单独运行并生产结果,称为不相关子查询。
如果在子查询中引用外层查询的结果,则称为相关查询,比如下面的查询:
SELECT number, name, id_number, major FROM student_info
-> WHERE EXISTS (SELECT * FROM student_score WHERE student_score.number = student_info.number);