相比较而言,in关键字使用的要更多一点,因为语句更容易理解。
如下:
查询张三老师所教的课程名称
使用in关键字查询
select c_name from course c where c.t_id
in (select t_id from teacher where t_name = ‘张三’)
使用exists关键字查询
select c_name from course c where
EXISTS (select t_id from teacher t where t.t_id=c.t_id and t.t_name=‘张三’)
这一比较就知道in关键字更简单
但是in关键字不走索引,如果子集里的数据量很大的话,不走索引的效率会非常低
in 和exists的区别:
(in 是先查询子集,然后进行全表检索,一行一行的去查询,查询到符合in字句的结果就返回,反之就继续查询下一条,不走索引)
(exists 是先进行一次外部查询,然后开始执行子查询,并且每次子查询都会引用外部查询的结果集,如果子查询根据外部结果查询到了数据,就返回true。使用子查询的结果来确定外部查询的结果集。子查询会用到索引。如果我们有100行数据,那exists会进行101次查询,一次查询外部,100次查询子集)