为什么结果显示某些等级值为空

why result shows some grade value as null

SELECT
    `job_id`,
    CASE `job_id`
    WHEN  'AD_PRES' THEN 'A'
    WHEN 'ST_MAN' THEN 'B'
    WHEN 'IT_PROG' THEN 'C'
    END AS 'grade'
FROM
    `employees`
WHERE
    'grade' IS NOT NULL;

MySQL 中的单引号表示字符串文字。对于数据库标识符,例如列名或 table 名称,请使用双引号、反引号,或者如果不需要,则什么都不用。在这里你不需要转义别名。此外,您通常不能在 WHERE 子句中引用别名。但是,MySQL 已重载其 HAVING 运算符以允许它引用别名。把这些放在一起,我们可以使用这个版本:

SELECT job_id,
       CASE job_id WHEN 'AD_PRES' THEN 'A'
                   WHEN 'ST_MAN'  THEN 'B'
                   WHEN 'IT_PROG' THEN 'C'
       END AS grade
FROM employees
HAVING grade IS NOT NULL;

请注意,您也可以将其表述为:

SELECT job_id,
       CASE job_id WHEN 'AD_PRES' THEN 'A'
                   WHEN 'ST_MAN'  THEN 'B'
                   WHEN 'IT_PROG' THEN 'C'
       END AS grade
FROM employees
WHERE job_id IN ('AD_PRES', 'ST_MAN', 'IT_PROG');

这也有效,因为如果 job_id 是这三个值之一,则 grade 只会是非 NULL