SELECT E.NAME , D.NAME , C.NAME
FROM CAT C , DPT D , EMP E,DUAL X
WHERE NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))
AND NVL(‘X’,X.DUMMY) = NVL(‘X’,D.ROWID(+))
AND NVL(‘X’,X.DUMMY) = NVL(‘X’,C.ROWID(+))
AND E.EMP_NO(+) = 1234
AND D.DEPT_NO(+) = 10
AND C.CAT_TYPE(+) = ‘RD’;上面的sql中,NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))这句是什么意思?
还有就是为什么在E.ROWID后加上(+),这又是什么意思?
请各位高手帮帮忙,解释一下,先谢谢啦!
FROM CAT C , DPT D , EMP E,DUAL X
WHERE NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))
AND NVL(‘X’,X.DUMMY) = NVL(‘X’,D.ROWID(+))
AND NVL(‘X’,X.DUMMY) = NVL(‘X’,C.ROWID(+))
AND E.EMP_NO(+) = 1234
AND D.DEPT_NO(+) = 10
AND C.CAT_TYPE(+) = ‘RD’;上面的sql中,NVL(‘X’,X.DUMMY) = NVL(‘X’,E.ROWID(+))这句是什么意思?
还有就是为什么在E.ROWID后加上(+),这又是什么意思?
请各位高手帮帮忙,解释一下,先谢谢啦!
/*
nvl(arg1,arg2):如果arg1为空,那么返回arg2的值,否则返回arg1
nvl2(x,arg1,arg2):如果x为空,返回arg1的值,否则返回arg2的值
*/
这段sql是在某资料上看到的,是关于sql优化的问题,原文的意思是如果有几个简单的数据库查询语句,你可以把它们整合到一个查询中(即使它们之间没有关系),然后就给出如下例子:
SELECT NAME
FROM EMP
WHERE EMP_NO = 1234;
SELECT NAME
FROM DPT
WHERE DPT_NO = 10 ;
SELECT NAME
FROM CAT
WHERE CAT_TYPE = ‘RD’;
把上诉三段select语句合并成提问中的sql,资料中说这样的sql比分开三段查询高效。再请教各位一个问题,为什么合并成一个sql查询会高效呢?