SQL基础-->过滤和排序

系统 1714 0

--=======================================

--SQL 基础 --> 过滤和排序

--=======================================

/*

一、使用 WHERE 字句实现对数据的过滤

    用法: SELECT *|{[DISTINCT] column|expression [alias],...}

          FROM table

          [WHERE condition(s)];

二、多条件连接

    AND    同时满足

    OR       满足其中一个

 

三、比较符

          大于

    >= 大于等于

          小于

    <= 小于等于

    <> 不等于

    =     不等于

    IS NULL 是否为空值

    IS NOT NULL 不为空值

    NOT          条件为 FALSE 时返回 TRUE

 

    BETWEEN x AND y    大于等于 X ,小于等于 Y

    IN (集合)        在这个集合中,或者讲在这个列表中

    NOT IN (集合)   不在这个集合中,或者讲不在这个列表中

 

    LIKE    使用 LIKE 操作符来执行有效搜索字符串数值的通配符搜索

          通配任意字符

    _        能配单个字符

   

四、日期和字符串的处理

    字符串和日期值使用单引号标记嵌入

    字符数值是大小写有关,而日期数值是格式化的。

    ORACLE 默认显示的日期格式为: DD MON RR

    可以用 alter session set nls_date_format='yyyy-mm-dd'; 修改日期格式

    永久性修改可以用:

    alter system set nls_date_format='yyyy-mm-dd' scope=spfile;

 

    日期相加减:

        日期+(-)数字   返回一个往前或往后的天数的日期

               +往后   -往前

 

        日期-日期       得到两个日期之间相差的天数

      

五、 order by 排序

    默认的排序方式:升序

    控制排序方式:    ASC    升序

                   DESC 降序

   

六、演示 */

/* 使用 WHERE 条件查询 */

SQL > select * from scott . emp where sal > 2000

  2   ;

 

     EMPNO ENAME       JOB               MGR HIREDATE          SAL        COMM      DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      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 19 - APR - 87        3000                     20

      7839 KING        PRESIDENT             17 - NOV - 81        5000                     10

      7902 FORD        ANALYST          7566 03 - DEC - 81        3000                     20

 

/* 多条件连接 */

SQL > select * from scott . emp where deptno = 20 and sal > 2000 ;

 

     EMPNO ENAME       JOB               MGR HIREDATE          SAL        COMM      DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      7566 JONES       MANAGER          7839 02 - APR - 81        2975                     20

      7788 SCOTT       ANALYST          7566 19 - APR - 87        3000                     20

      7902 FORD        ANALYST          7566 03 - DEC - 81        3000                     20

 

/* 错误的写法 */

SQL > select * from scott . emp where 1000 <= sal <= 2000 ;

select * from scott . emp where 1000 <= sal <= 2000

                                       *

ERROR at line 1 :

ORA - 00933 : SQL command not properly ended

 

/* 正确的写法 */

SQL > select * from scott . emp where sal >= 1000 and sal <= 2000 ;

 

     EMPNO ENAME       JOB               MGR HIREDATE          SAL        COMM      DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      7499 ALLEN       SALESMAN         7698 20 - FEB - 81         1600         300          30

      7521 WARD        SALESMAN         7698 22 - FEB - 81        1250         500          30

      7654 MARTIN      SALESMAN         7698 28 - SEP - 81        1250        1400          30

      7844 TURNER      SALESMAN         7698 08 - SEP - 81         1500           0          30

      7876 ADAMS       CLERK            7788 23 - MAY - 87        1100                     20

      7934 MILLER      CLERK            7782 23 - JAN - 82        1300                     10

 

/*BETWEEN 的用法 */

SQL > select * from scott . emp where sal between 1000 and 2000 ;

 

     EMPNO ENAME       JOB               MGR HIREDATE          SAL        COMM      DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      7499 ALLEN       SALESMAN         7698 20 - FEB - 81        1600         300          30

      7521 WARD        SALESMAN         7698 22 - FEB - 81        1250         500          30

      7654 MARTIN      SALESMAN         7698 28 - SEP - 81        1250        1400          30

      7844 TURNER      SALESMAN         7698 08 - SEP - 81         1500           0          30

      7876 ADAMS       CLERK            7788 23 - MAY - 87        1100                     20

      7934 MILLER      CLERK            7782 23 - JAN - 82        1300                     10

 

/*IN 的用法,以下两条语句等同 */

SQL > select * from scott . emp where sal = 3000 or sal = 5000 ;

 

SQL > select * from scott . emp where sal in ( 3000 , 5000 );

 

     EMPNO ENAME       JOB               MGR HIREDATE          SAL        COMM      DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

       7788 SCOTT       ANALYST          7566 19 - APR - 87        3000                     20

      7839 KING        PRESIDENT             17 - NOV - 81        5000                     10

      7902 FORD        ANALYST          7566 03 - DEC - 81        3000                     20

 

SQL > select * from scott . emp where sal = 3000 or sal = 5000 ;

 

     EMPNO ENAME       JOB               MGR HIREDATE          SAL        COMM      DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      7788 SCOTT        ANALYST          7566 19 - APR - 87        3000                     20

      7839 KING        PRESIDENT             17 - NOV - 81        5000                     10

      7902 FORD        ANALYST          7566 03 - DEC - 81        3000                     20

 

--not in 的用法

SQL > select * from scott . emp where sal not in ( 3000 , 5000 );

 

     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

      7844 TURNER      SALESMAN         7698 08 - SEP - 81        1500           0          30

      7876 ADAMS       CLERK            7788 23 - MAY - 87        1100                     20

      7900 JAMES       CLERK            7698 03 - DEC - 81         950                     30

      7934 MILLER      CLERK            7782 23 - JAN - 82        1300                     10

 

/*LIKE % _ 运算符的用法 */

SQL > select * from scott . emp where ename like 'A%' ;

 

     EMPNO ENAME       JOB               MGR HIREDATE          SAL        COMM      DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      7499 ALLEN       SALESMAN         7698 20 - FEB - 81        1600         300          30

      7876 ADAMS       CLERK            7788 23 - MAY - 87        1100                     20

 

SQL > select * from scott . emp where ename like '_L%' ;

 

     EMPNO ENAME       JOB               MGR HIREDATE          SAL        COMM      DEPTNO

---------- ---------- --------- ---------- --------- ---------- ---------- ----------

      7499 ALLEN       SALESMAN         7698 20 - FEB - 81        1600         300          30

      7698 BLAKE       MANAGER          7839 01 - MAY - 81        2850                     30

      7782 CLARK       MANAGER          7839 09 - JUN - 81        2450                     10

 

-- 日期格式:未修改前

SQL > select sysdate from dual ;

 

SYSDATE

---------

28 - MAR - 10

 

/* 日期格式的修改,仅对当前会话有效 */

SQL > alter session set nls_date_format = 'yyyy-mm-dd' ;

 

Session altered .

 

-- 查看修改后的日期格式

SQL > select sysdate from dual ;

 

SYSDATE

----------

2010 - 03 - 28

 

-- 永久性修改,将其修改写到参数文件中。

alter system set   nls_date_format =   'yyyy_mm_dd' scope = spfile ;

 

-- 日期的加减

--      日期+(-)数字   返回往前或往后的天数日期

--      +往前,-往后

--      日期- 日期

 

SQL > select sysdate + 10 from dual ;

 

SYSDATE + 10

----------

2010 - 04 - 07

 

SQL > select sysdate - 10 from dual ;

 

SYSDATE - 10

----------

2010 - 03 - 18

 

-- 日期相减 ( 为相差的天数 )

SQL > select empno , ename , sysdate , sysdate - hiredate from scott . emp ;

 

     EMPNO ENAME       SYSDATE     SYSDATE - HIREDATE

---------- ---------- ---------- ----------------

      7369 SMITH       2010 - 03 - 28        10693.4346

      7499 ALLEN       2010 - 03 - 28        10628.4346

      7521 WARD        2010 - 03 - 28        10626.4346

      7566 JONES        2010 - 03 - 28        10587.4346

      7654 MARTIN      2010 - 03 - 28        10408.4346

      7698 BLAKE       2010 - 03 - 28        10558.4346

      7782 CLARK       2010 - 03 - 28        10519.4346

      7788 SCOTT       2010 - 03 - 28        8379.43456

      7839 KING        2010 - 03 - 28        10358.4346

      7844 TURNER      2010 - 03 - 28        10428.4346

      7876 ADAMS       2010 - 03 - 28        8345.43456

 

-- 使用 null 值过滤   

SQL > select * from scott . emp where comm is null;

 

     EMPNO ENAME       JOB               MGR HIREDATE           SAL         COMM      DEPTNO

---------- ---------- --------- ---------- ---------- ---------- ---------- ----------

      7369 SMITH       CLERK            7902 1980 - 12 - 17         800                     20

      7566 JONES       MANAGER          7839 1981 - 04 - 02        2975                     20

      7698 BLAKE       MANAGER          7839 1981 - 05 - 01        2850                     30

      7782 CLARK       MANAGER          7839 1981 - 06 - 09        2450                     10

      7788 SCOTT       ANALYST          7566 1987 - 04 - 19         3000                     20

      7839 KING        PRESIDENT             1981 - 11 - 17        5000                     10

      7876 ADAMS       CLERK            7788 1987 - 05 - 23        1100                     20

      7900 JAMES       CLERK            7698 1981 - 12 - 03         950                     30

      7902 FORD        ANALYST          7566 1981 - 12 - 03        3000                     20

      7934 MILLER      CLERK            7782 1982 - 01 - 23        1300                     10

 

/*ORDER BY 排序(默认为升序) */

SQL > select * from scott . emp where sal > 2000 order by sal ;

 

     EMPNO ENAME       JOB               MGR HIREDATE           SAL        COMM      DEPTNO

---------- ---------- --------- ---------- ---------- ---------- ---------- ----------

      7782 CLARK       MANAGER          7839 1981 - 06 - 09        2450                     10

      7698 BLAKE       MANAGER          7839 1981 - 05 - 01        2850                     30

      7566 JONES       MANAGER          7839 1981 - 04 - 02        2975                     20

       7902 FORD        ANALYST          7566 1981 - 12 - 03        3000                     20

      7788 SCOTT       ANALYST          7566 1987 - 04 - 19        3000                     20

      7839 KING        PRESIDENT             1981 - 11 - 17        5000                     10

 

-- 多字段排序  

SQL > select * from scott . emp where sal > 2000 order by sal desc , ename asc ;

 

     EMPNO ENAME       JOB               MGR HIREDATE           SAL        COMM      DEPTNO

---------- ---------- --------- ---------- ---------- ---------- ---------- ----------

      7839 KING        PRESIDENT             1981 - 11 - 17        5000                     10

      7902 FORD        ANALYST          7566 1981 - 12 - 03        3000                     20

      7788 SCOTT       ANALYST          7566 1987 - 04 - 19        3000                      20

      7566 JONES       MANAGER          7839 1981 - 04 - 02        2975                     20

      7698 BLAKE       MANAGER          7839 1981 - 05 - 01        2850                     30

      7782 CLARK       MANAGER          7839 1981 - 06 - 09        2450                     10

 

-- 按第个字段降序排列, order by 4 desc   

SQL > select empno , ename , job , sal from scott . emp where sal > 2000 order by 4 desc ;

 

     EMPNO ENAME       JOB               SAL

---------- ---------- --------- ----------

      7839 KING         PRESIDENT        5000

      7902 FORD        ANALYST          3000

      7788 SCOTT       ANALYST          3000

      7566 JONES       MANAGER          2975

      7698 BLAKE       MANAGER          2850

      7782 CLARK       MANAGER          2450

 

七、更多

    SQL 基础 -->SELECT 查询

    Sqlplus 常用命令

    Oralce   相关  

      

 

 

SQL基础-->过滤和排序


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论