zoukankan      html  css  js  c++  java
  • In,内链接和空值

    SQL> select * from emp;
    
         EMPNO ENAME      JOB               MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- ---------- ---------- -------------- ---------- ---------- ----------
          7369 SMITH      CLERK            7902 17-12月-80            800                    20
          7499 ALLEN      SALESMAN         7698 20-2月 -81           1600        300         30
          7521 WARD       SALESMAN         7698 22-2月 -81           1250        500         30
          7566 JONES      MANAGER          7839 02-4月 -81           2975                    20
          7654 MARTIN     SALESMAN         7698 28-9月 -81           1250       1400         30
          7698 BLAKE      MANAGER          7839 01-5月 -81           2850                    30
          7782 CLARK      MANAGER          7839 09-6月 -81           2450                    10
          7788 SCOTT      ANALYST          7566 09-12月-82           3000                    20
          7839 KING       PRESIDENT             17-11月-81           5000                    10
          7844 TURNER     SALESMAN         7698 08-9月 -81           1500          0         30
          7876 ADAMS      CLERK            7788 12-1月 -83           1100                    20
          7900 JAMES      CLERK            7698 03-12月-81            950                    30
          7902 FORD       ANALYST          7566 03-12月-81           3000                    20
          7934 MILLER     CLERK            7782 23-1月 -82           1300                    10
    
    已选择14行。
    
    SQL>  select * from emp2 order by 1;
    
    ENAME      JOB               SAL
    ---------- ---------- ----------
    ADAMS      CLERK            1100
    ADAMS      CLERK            1100
    JAMES      CLERK             950
    JAMES      CLERK             950
    MILLER     CLERK            1300
    MILLER     CLERK            1300
    SMITH      CLERK             800
    SMITH      CLERK             800
    
    已选择8行。
    
    
    SQL> SELECT empno, ename, job, sal, deptno
      2        FROM emp
      3       WHERE (ename, job, sal) IN (SELECT ename, job, sal FROM emp2);
    
         EMPNO ENAME      JOB               SAL     DEPTNO
    ---------- ---------- ---------- ---------- ----------
          7369 SMITH      CLERK             800         20
          7876 ADAMS      CLERK            1100         20
          7900 JAMES      CLERK             950         30
          7934 MILLER     CLERK            1300         10
    
    SQL> SELECT a.empno, a.ename, a.job, a.sal, a.deptno
      2    FROM emp a
      3   INNER JOIN emp2 b ON (b.ename = a.ename AND b.job = a.job AND
      4                        b.sal = a.sal);
    
         EMPNO ENAME      JOB               SAL     DEPTNO
    ---------- ---------- ---------- ---------- ----------
          7369 SMITH      CLERK             800         20
          7369 SMITH      CLERK             800         20
          7876 ADAMS      CLERK            1100         20
          7876 ADAMS      CLERK            1100         20
          7900 JAMES      CLERK             950         30
          7900 JAMES      CLERK             950         30
          7934 MILLER     CLERK            1300         10
          7934 MILLER     CLERK            1300         10
    
    已选择8行。
    
    由于EMP2表有重复数据,导致半连接的写法数据翻倍,得去除重复数据
    
    SQL> SELECT distinct a.empno, a.ename, a.job, a.sal, a.deptno
      2    FROM emp a
      3   INNER JOIN emp2 b ON (b.ename = a.ename AND b.job = a.job AND
      4                        b.sal = a.sal);
    
         EMPNO ENAME      JOB               SAL     DEPTNO
    ---------- ---------- ---------- ---------- ----------
          7900 JAMES      CLERK             950         30
          7876 ADAMS      CLERK            1100         20
          7369 SMITH      CLERK             800         20
          7934 MILLER     CLERK            1300         10
    
    
    IN 有空值的情况呢?
    
    SQL> select * from emp2 order by 6 nulls last;
    
         EMPNO ENAME      JOB               MGR HIREDATE              SAL       COMM     DEPTNO
    ---------- ---------- ---------- ---------- -------------- ---------- ---------- ----------
          7876 ADAMS      CLERK            7788 12-1月 -83           1100                    20
          7521 WARD       SALESMAN         7698 22-2月 -81           1250        500         30
          7654 MARTIN     SALESMAN         7698 28-9月 -81           1250       1400         30
          7934 MILLER     CLERK            7782 23-1月 -82           1300                    10
          7844 TURNER     SALESMAN         7698 08-9月 -81           1500          0         30
          7499 ALLEN      SALESMAN         7698 20-2月 -81           1600        300         30
          7782 CLARK      MANAGER          7839 09-6月 -81           2450                    10
          7698 BLAKE      MANAGER          7839 01-5月 -81           2850                    30
          7566 JONES      MANAGER          7839 02-4月 -81           2975                    20
          7788 SCOTT      ANALYST          7566 09-12月-82           3000                    20
          7902 FORD       ANALYST          7566 03-12月-81           3000                    20
          7839 KING       PRESIDENT             17-11月-81           5000                    10
          7369 SMITH      CLERK            7902 17-12月-80                                   20
          7900 JAMES      CLERK            7698 03-12月-81                                   30
    
    已选择14行。
    
    SQL> select *  from emp3 order by 3 nulls last;
    
    ENAME      JOB               SAL
    ---------- ---------- ----------
    ADAMS      CLERK            1100
    MILLER     CLERK            1300
    JAMES      CLERK
    SMITH      CLERK
    
    
    此时
    SQL>              SELECT empno, ename, job, sal, deptno
      2            FROM emp2
      3           WHERE (ename, job, sal) IN (SELECT ename, job, sal FROM emp3);
    
         EMPNO ENAME      JOB               SAL     DEPTNO
    ---------- ---------- ---------- ---------- ----------
          7876 ADAMS      CLERK            1100         20
          7934 MILLER     CLERK            1300         10
    
    会丢失 SMITH和JAMES 2条记录,改写为:
    
    SQL> SELECT empno, ename, job, sal, deptno
      2    FROM emp2
      3   WHERE (ename || job || sal) IN (SELECT ename || job || sal FROM emp3);
    
         EMPNO ENAME      JOB               SAL     DEPTNO
    ---------- ---------- ---------- ---------- ----------
          7369 SMITH      CLERK                         20
          7876 ADAMS      CLERK            1100         20
          7900 JAMES      CLERK                         30
          7934 MILLER     CLERK            1300         10
    
    
    
    
    
    

  • 相关阅读:
    泛型
    BigInteger和BigDecimal大数相加问题
    集合(Collection,set,list,map)
    [转]如何从MySQL官方Yum仓库安装MySQL5.6
    CentOS Linux使用crontab运行定时任务详解
    [转]Mysql自动备份并保存近15天记录脚本
    centos6.5 mysql安装+远程访问+备份恢复+基本操作+卸载
    vsftpd安装
    [转]CENTOS 6.5 配置YUM安装NGINX+服务器负载均衡
    [转]apache的源码安装详细过程全纪录
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13352254.html
Copyright © 2011-2022 走看看