一个SQL语句包含多个子查询时,要应用以下规则:
1.子查询是完全关联或完全不关联时,就要按照最受限的放在最前面的顺序来编写,因为它们会按其编写的顺序进行处理。
2.如果一个SQL语句同时包含关联和非关联子查询,不论查询中的实际顺序是怎样的,总是先执行非关联子查询。
3.开发人员可以选择编写相同类型的子查询,并按他们选择的顺序排列谓词表,有时这会在运行时有不同的表现。与常规谓词相比,在SQL语句中从最受限到最不受限的顺序编写子查询对性能会有更大的影响,这在调优技巧#15中也有说明。
下面是非关联子查询的一个例子:
SELECT E. EMPNO, E.LASTNAME
FROM EMP E
WHERE E.EMPNO IN
(SELECT D.MGRNO
FROM DEPT D
WHERE D.DEPTNO LIKE'D%')
以下是关联子查询的一个例子:
SELECT E.EMPNO, E.LASTNAME
FROM EMP E
WHERE EXISTS
(SELECT 1
FROM DEPT D
WHERE D.MGRNO=E.EMPNO
AND D.DEPTNO LIKE'D%')