两个sql的不同之处?解决方案
两个sql的不同之处?SELECT e1.ename, e2.ename mgr_nameFROM (SELECT ename, empnoFROM emp) e2, emp e1 W
两个sql的不同之处?
SELECT e1.ename, e2.ename mgr_name
FROM (SELECT ename, empno
FROM emp) e2, emp e1
WHERE e2.empno = e1.mgr
ORDER BY e1.ename;
SELECT e1.ename,
(SELECT ename mgr_name
FROM emp
WHERE empno = e1.mgr)
FROM emp e1
ORDER BY e1.ename;
初入门oracle,要求查询出emp表中的雇员名和其直属上司的名字,现在有个疑问:
第一个sql查出13条数据,就是说没有查出没有上司的那个人,而第二条语句查出14条,找出了那个没有上司的人,那么小弟想问的是这两条语句的不同点是什么,为啥会出现这样的情况?谢谢各位的简单指点。。。 SQL Oracle
[解决办法]SELECT e1.ename, e2.ename mgr_name
FROM (SELECT ename, empno
FROM emp) e2, emp e1
WHERE e2.empno = e1.mgr
ORDER BY e1.ename;
--这个语句是把SELECT ename, empno FROM emp作为一个查询结果表和emp进行自然连接,连接条件是找e2.empno = e1.mgr,如果有一个EMPNO没有MGR的话,这个关联条件不满足,所以不能查询出没有上司的那个人
SELECT e1.ename,
(SELECT ename mgr_name
FROM emp
WHERE empno = e1.mgr)
FROM emp e1
ORDER BY e1.ename;
--这个语句是扫描EMP中的每一行,对于每一行都去EMP表里面找到满足条件(SELECT ename mgr_name
FROM emp
WHERE empno = e1.mgr)的ENAME,如果找不到,返回的是NULL,所以第二条语句查出14条,找出了那个没有上司的人
两个语句的不同点在于两表关联查询和子查询的区别!