zoukankan      html  css  js  c++  java
  • ||拼接列关联和直接关联区别

    SQL> select * from emp;
    
         EMPNO ENAME      JOB		MGR HIREDATE	     SAL       COMM	DEPTNO
    ---------- ---------- ---------- ---------- --------- ---------- ---------- ----------
          7369 SMITH      CLERK	       7902 17-DEC-80	     800		    20
          7499 ALLEN      SALESMAN	       7698 20-FEB-81	    1600	300	    30
          7521 WARD       SALESMAN	       7698 22-FEB-81	    1250	500	    30
          7566 JONES      MANAGER	       7839 02-APR-81	    2975		    20
          7654 MARTIN     SALESMAN	       7698 28-SEP-81	    1250       1400	    30
          7698 BLAKE      MANAGER	       7839 01-MAY-81	    2850		    30
          7782 CLARK      MANAGER	       7839 09-JUN-81	    2450		    10
          7788 SCOTT      ANALYST	       7566 09-DEC-82	    3000		    20
          7839 KING       PRESIDENT 	    17-NOV-81	    5000		    10
          7844 TURNER     SALESMAN	       7698 08-SEP-81	    1500	  0	    30
          7876 ADAMS      CLERK	       7788 12-JAN-83	    1100		    20
          7900 JAMES      CLERK	       7698 03-DEC-81	     950		    30
          7902 FORD       ANALYST	       7566 03-DEC-81	    3000		    20
          7934 MILLER     CLERK	       7782 23-JAN-82	    1300		    10
          9999
    
    15 rows selected.
    
    SQL> select * from emp3;
    
    ENAME	   JOB		    COMM
    ---------- ---------- ----------
    SMITH	   CLERK
    ADAMS	   CLERK
    JAMES	   CLERK
    MILLER	   CLERK
    
    SQL> select * from emp where COMM is null;
    
         EMPNO ENAME      JOB		MGR HIREDATE	     SAL       COMM	DEPTNO
    ---------- ---------- ---------- ---------- --------- ---------- ---------- ----------
          7369 SMITH      CLERK	       7902 17-DEC-80	     800		    20
          7566 JONES      MANAGER	       7839 02-APR-81	    2975		    20
          7698 BLAKE      MANAGER	       7839 01-MAY-81	    2850		    30
          7782 CLARK      MANAGER	       7839 09-JUN-81	    2450		    10
          7788 SCOTT      ANALYST	       7566 09-DEC-82	    3000		    20
          7839 KING       PRESIDENT 	    17-NOV-81	    5000		    10
          7876 ADAMS      CLERK	       7788 12-JAN-83	    1100		    20
          7900 JAMES      CLERK	       7698 03-DEC-81	     950		    30
          7902 FORD       ANALYST	       7566 03-DEC-81	    3000		    20
          7934 MILLER     CLERK	       7782 23-JAN-82	    1300		    10
          9999
    
    11 rows selected.
    
    
    SQL> SELECT empno, ename, job, comm, deptno
      FROM emp
     WHERE (ename , job , comm) IN (SELECT ename, job , comm FROM emp3);   2    3  
    
    no rows selected
    
    为什么会返回空行呢?
    
    因为COMM列有空值
    SQL> SELECT empno, ename, job, comm, deptno
      FROM emp
     WHERE ename || job || comm IN (SELECT ename || job || comm FROM emp3);
      2    3  
         EMPNO ENAME      JOB	       COMM	DEPTNO
    ---------- ---------- ---------- ---------- ----------
          7369 SMITH      CLERK			    20
          7876 ADAMS      CLERK			    20
          7900 JAMES      CLERK			    30
          7934 MILLER     CLERK			    10
    利用||拼接符号有空值会继续返回值
    
    SQL> select ename || job || comm from emp where comm is null;
    
    ENAME||JOB||COMM
    ------------------------------------------------------------
    SMITHCLERK
    JONESMANAGER
    BLAKEMANAGER
    CLARKMANAGER
    SCOTTANALYST
    KINGPRESIDENT
    ADAMSCLERK
    JAMESCLERK
    FORDANALYST
    MILLERCLERK
    
    
    11 rows selected.
    
    继续测试:
    
     SQL> create table c1(id char(10));
    
    Table created.
    
    SQL> create table c2(id char(10));
    
    Table created.
    
    SQL> insert into c1 values(null);
    
    1 row created.
    
    SQL>  insert into c2 values(null);
    
    1 row created.
    
    SQL> commit;
    
    Commit complete.
    
    SQL> select * from c1;
    
    ID
    ----------
    
    
    SQL> select * from c2;
    
    ID
    ----------
    
    
    SQL> select c1.* from c1 where c1.id in (select c2.id from c2);
    
    no rows selected
    
    SQL> select c1.* from c1 where c1.id||'a' in (select c2.id||'a' from c2);
    
    ID
    ----------
    
    
    SQL> 
    
    
    
    
    
    
    
    
    
  • 相关阅读:
    算法(Algorithms)第4版 练习 1.3.4
    算法(Algorithms)第4版 练习 1.3.5
    算法(Algorithms)第4版 练习 1.3.6
    微服务迁移步骤建议
    xxxx interview问题解读与总结
    乐观锁与悲观锁——解决并发问题
    编码解码--三种常见字符编码简介:ASCII、Unicode和UTF-8
    编码解码--url编码解码
    分页缓存预加载算法
    Could not initialize class sun.awt.X11FontManager 异常问题
  • 原文地址:https://www.cnblogs.com/zhaoyangjian724/p/3798063.html
Copyright © 2011-2022 走看看