SQL中 in和exists的区别

exists用法

SELECT
	t2.*
FROM
	NCAQ.T_SECURITY_FILE t2
WHERE
	EXISTS (
	SELECT
		t.FILE_ID
	FROM
		NCAQ.T_READ_CASE t
	WHERE
		t2.IID = t.FILE_ID
		AND t.NAME = '胡忆思' )
	AND t2.REC_STATUS = '0'

exists的用法与in作用相同但是用法稍微有些区别:

1、exists是紧跟着外部表where的,外部表与内部表相连结的条件写在内部表的where中;
2、in是在where后面直接加上值的范围的,例如:

SELECT
	t2.*
FROM
	NCAQ.T_SECURITY_FILE t2
WHERE  t2.id in  (...)

,并且in后面跟着取值的范围条件;

3、当子查询(内部表)数据量比外部表大时,exists的效率要优于in;

4、select * from A where id in(select id from B)
结论:in()适合B表比A表数据小的情况

5、select a.* from A a where exists(select 1 from B b where a.id=b.id)
结论:exists()适合B表比A表数据大的情况

你可能感兴趣的:(mysql,sql)