数据库中exsits子查询与in. not in与not exsits的对比
EXISTS的子查询
EXISTS后跟完整查询语句返回值为布尔类型,若存在返回1,不存在则返回0
SELECT EXISTS (SELECT student.*
FROM student,sc
WHERE grade>99)
SELECT student.*
FROM student
WHERE EXISTS (SELECT sc.*
FROM sc
WHERE sc.Sno = student.Sno and grade>90 )
SELECT student.*
FROM student
WHERE Sno in(SELECT Sno
FROM sc
WHERE grade>90)
exists与in的比较
in的执行效率比exists高,因为in是直接返回所有结果,在所有结果中筛选符合条件的。而exists是执行一行子查询再返回外部,继续执行下一行子查询。
not exists与not in的比较
not exists执行效率比not in高,not in在一个个的判断结果,并将符合条件筛选出来。而not exists中存在索引,直接寻找并返回结果