exists 和not exists用法
exists表示()内子查询语句返回结果不为空说明where条件成立就会执行主sql语句,如果为空就表示where条件不成立,sql语句就不会执行。
not exists和exists相反,子查询语句结果为空,则表示where条件成立,执行sql语句。
USE myschools ;
SELECT studentNo,studentName
FROM stuinfo stu
WHERE EXISTS
(SELECT gradeId
FROM stuinfo s
WHERE gradeId = 2
AND s.`gradeId` = stu.`gradeId`) ;
SELECT studentNo,studentResult
FROM result res
WHERE EXISTS
(SELECT *
FROM result re
WHERE studentResult >= 80
AND res.`studentResult` = re.`studentResult`)
ORDER BY studentResult DESC
LIMIT 5 ;
SELECT r.`studentNo`, r.`subjectno`, r.`studentResult`, r.`examDate`
FROM result r
WHERE EXISTS
(SELECT * FROM stuinfo
WHERE gradeId =
(SELECT gradeId FROM grade
WHERE gradeName = '一年级')
AND studentNo = r.`resultNo`) ;
子查询注意事项
- 子查询语句可以嵌套在 SQL 语句中任何表达式出现的位置
- 只出现在子查询中而没有出现在父查询中的表不能包含在输出列中