第一个语句:由于你的exists返回的是true,所以返回全部值,之所以返回全部值是因为你的主查询并没有和exists的子查询关联。第二个语句:你必须搞清楚的是子查询中的empno是主查询的empno,此时子查询和主查询进行了关联。只要当主查询empno=7499时,子查询才为ture,所以只要这条记录返回

解决方案 »

  1.   


    我还看到另一个案例,
    SELECT * FROM EMP  WHERE  EXISTS (SELECT * FROM DEPT WHERE DEPT.DEPTNO = EMP.DEPTNO AND LOC = 'DALLAS');
    这段代码返回值是 LOC = 'DALLAS'的雇员信息,也是子查询和主查询自动关联了吗?我还是搞不懂主查询和子查询什么时候会进行自动关联哦
      

  2.   

    告诉你一个简单的方法
    你的子查询的where条件中如果包含了子查询表的字段也包含了外层表的字段
    基本上可以确定进行了关联
      

  3.   

    第一个语句,要么返回所有行,要么返回 0 行,你可以把 7499 改成其他的值试试,123456780 这样的值 。第二个语句, where empno=a ,这里的 empno ,是最外层的 emp 的列。