数据库查询语句(IN子查询,NOT IN子查询;EXISTS子查询,NOT EXISTS子查询)

#IN 子查询
#采用IN 子查询获得参加考试的在读学生名单
SELECT student_no,student_name FROM student WHERE student_no
IN(
SELECT student_no FROM result
WHERE subject_no=(
#获得参加Logic Java课程最近一次考试的学生学号
SELECT subject_no FROM `subject`
WHERE subject_name=`Logic Java`
)AND exam_date=(
#获得Logic Java课程最近一次的考试日期
SELECT MAX(exam_date)FROM result
WHERE subject_no=(
#获得Logic Java 课程的课程编号
SELECT subject_no FROM `subject`
WHERE subject_name=`Logic Java`
)
)
);



#NOT IN子查询
#采用NOT IN子查询,查看未参加考试的在读学生名单
SELECT sutdent_no,student_name,FROM student WHERE student_no
NOT IN(
SELECT subject_no FROM `subject` WHERE `subject_no`=(
#获得参加Logic Java课程最近一次考试的学生学号
SELECT subject_no FROM `subject`
WHERE subject_name=`Logic Java`
)AND exam_date=(
#获得Logic Java课程最近一次的考试日期
SELECT MAX(exam_date)FROM result
WHERE subject_no=(
#获得Logic Java课程的课程编号
SELECT subject_no FROM `subject`
WHERE `subject_name`=`Logic Java`
)
)
);



#EXISTS子查询
#EXISTS子查询用来确认后边的查询是否继续进行,返回值是true或false。例如,如果存在数据表temp,则先删除它,然后重新创建。语法格式如下:
DROP TABLE IF EXISTS temp;
#除以上用法外,EXISTS也可以作为WHERE语句的子查询,其基本语法格式如下:
SELECT 字段名 FROM 表名 WHERE EXISTS(子查询);
#EXISTS关键字后面的参数是一个任意的子查询,如果该子查询有返回行,则EXISTS子查询的结果为true,此时再执行外层的查询语句。如果子查询没有返回行,
#则EXISTS子查询的返回值为false,此时不再执行外层查询语句。
#示例
SELECT student_no AS 学号,student_result AS 成绩 FROM result WHERE EXISTS(
#查询Logic Java 最后一次考试成绩大于80的记录
SELECT*FROM result WHERE subject_no=(
SELECT subject_no FROM `subject` WHERE subject_name=Logic Java
)AND exam_date=(
SELECT MAX(exam_date)FROM result WHERE subject_no=(
SELECT subject_no FROM `subject`
WHERE subject_name=Logic Java)
)AND student_result>80)
AND subject_no=(SELECT subject_no FROM `subject` WHERE subject_name=`Logic Java`)

ORDER BY student_result DESC LIMIT 5;#按成绩降序排序,显示前5名


#NOT EXISTS子查询
#EXISTS和IN一样,同样循序添加NOT关键字实现取反操作,NOT EXISTS表示不存在对应查询条件的记录。

你可能感兴趣的:(数据库查询语句(IN子查询,NOT IN子查询;EXISTS子查询,NOT EXISTS子查询))