大概两个学生都在enrollment_info。如果是这样,您可以使用:
SELECT e.student_id, NVL(g.numeric_grade, 0) AS numeric_grade, e.enrollment_date
FROM enrollment_info e LEFT JOIN
grade_info g
ON e.student_id = g.student_id
WHERE e.student_id IN (102, 301);
注意LEFT JOIN 的使用。首先要保留所有行的表。您可以在WHERE 子句中过滤此表。虽然不是这个问题的一部分,但后续表上的过滤器(使用 LEFT JOIN 时)应该在 ON 子句中。
还要注意使用有意义的表别名而不是任意字母。任意字母会使查询更难理解——并且容易出错。
如果两个学生都不在注册信息中,那么您需要使用某种派生表从他们开始。看起来像:
SELECT s.student_id, COALESCE(g.numeric_grade, 0) AS numeric_grade, e.enrollment_date
FROM (SELECT 102 as student_id FROM DUAL UNION ALL
SELECT 301 as student_id FROM DUAL
) s LEFT JOIN
enrollment_info e
ON e.student_id = s.student_id LEFT JOIN
grade_info g
ON g.student_id = s.student_id;
这也使用COALESCE() 而不是NVL(),因为COALESCE() 是用于替换NULL 值的标准SQL 函数。