Есть несколько способов сделать это.
Вы можете использовать NOT EXISTS
или GROUP BY ... HAVING
следующим образом:
-- 1
SELECT * FROM STUDENTS S
INNER JOIN GRADES G1 ON S.ID = G1.STUDENTID
WHERE G1.COURSEID = 'Math'
AND NOT EXISTS (
SELECT 1 FROM GRADES G2
WHERE G2.STUDENTID = G1.STUDENTID
AND G2.COURSEID IN ('Eng','Heb')
);
-- 2
SELECT S.ID, S.FIRSTNAME, S.LASTNAME FROM STUDENTS S
INNER JOIN GRADES G1 ON S.ID = G1.STUDENTID
WHERE COURSEID IN ('Math','Eng','Heb')
GROUP BY S.ID, S.FIRSTNAME, S.LASTNAME
HAVING SUM(CASE WHEN COURSEID IN ('Eng','Heb') THEN 1 END) = 0
AND SUM(CASE WHEN COURSEID = 'Math' THEN 1 END) <> 0
Приветствия !!