EXISTS子查询的逻辑是先查询外层数据再逐行进行EXISTS子查询。外层查询出的每条记录都执行一EXISTS子查询EXISTS子查询为TRUE则保留当前记录为FALSE则不保留。例如需求查询选择了课程号C_id为1的学生学号和姓名。SELECT S_id,S_name from student WHERE EXISTS(select S_id from score where C_id 1);字段解释S_id学号S_name姓名C_id课程号student学生表score成绩表该语句含义1.外层查询student中所有学生的学号和姓名。2.外层查询记录逐行进行一次子查询子查询score中课程号为1的学号。3.如果score中有课程号为1的记录则EXISTS子句返回TRUE。结果假设score中有课程号为1的记录则EXISTS子句永远为TRUE外层查询所有记录都被保存。假设score中没有课程号为1的记录则EXISTS子句永远为FALSE外层查询所有记录都被 去除。如果换成以下语句select S_id,S_name from student where exists(select S_id from score where student.S_idscore.S_id and C_id1);EXISTS子句含义变为查询当前学生课程号是否为1。子查询通过student.S_id score.S_id建立关联仅当当前学生外层记录在score表有C_id1的记录时才返回该学生实现查询选修了1号课程的学生的业务需求结果变为当前学生选择了1号课程C_id 1EXISTS子句返回TRUE当前外层记录被保存。当前学生未选择1号课程C_id ! 1EXISTS子句返回FALSE当前外层记录被去除。