SQL基础-->过滤和排序

–=======================================

–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默认显示的日期格式为:DDMONRR

    可以用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 02APR81       2975                    20

      7698 BLAKE      MANAGER         7839 01MAY81       2850                    30

      7782 CLARK      MANAGER         7839 09JUN81       2450                    10

      7788 SCOTT      ANALYST         7566 19APR87       3000                    20

      7839 KING       PRESIDENT            17NOV81       5000                    10

      7902 FORD       ANALYST         7566 03DEC81       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 02APR81       2975                    20

      7788 SCOTT      ANALYST         7566 19APR87       3000                    20

      7902 FORD       ANALYST         7566 03DEC81       3000                    20

 

/*错误的写法*/

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

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

                                       *

ERROR at line 1:

ORA00933: 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 20FEB81       1600        300         30

      7521 WARD       SALESMAN        7698 22FEB81       1250        500         30

      7654 MARTIN     SALESMAN        7698 28SEP81       1250       1400         30

      7844 TURNER     SALESMAN        7698 08SEP81       1500          0         30

      7876 ADAMS      CLERK           7788 23MAY87       1100                    20

      7934 MILLER     CLERK           7782 23JAN82       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 20FEB81       1600        300         30

      7521 WARD       SALESMAN        7698 22FEB81       1250        500         30

      7654 MARTIN     SALESMAN        7698 28SEP81       1250       1400         30

      7844 TURNER     SALESMAN        7698 08SEP81       1500          0         30

      7876 ADAMS      CLERK           7788 23MAY87       1100                    20

      7934 MILLER     CLERK           7782 23JAN82       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 19APR87       3000                    20

      7839 KING       PRESIDENT            17NOV81       5000                    10

      7902 FORD       ANALYST         7566 03DEC81       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 19APR87       3000                    20

      7839 KING       PRESIDENT            17NOV81       5000                    10

      7902 FORD       ANALYST         7566 03DEC81       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 17DEC80        800                    20

      7499 ALLEN      SALESMAN        7698 20FEB81       1600        300         30

      7521 WARD       SALESMAN        7698 22FEB81       1250        500         30

      7566 JONES      MANAGER         7839 02APR81       2975                    20

      7654 MARTIN     SALESMAN        7698 28SEP81       1250       1400         30

      7698 BLAKE      MANAGER         7839 01MAY81       2850                    30

      7782 CLARK      MANAGER         7839 09JUN81       2450                    10

      7844 TURNER     SALESMAN        7698 08SEP81       1500          0         30

      7876 ADAMS      CLERK           7788 23MAY87       1100                    20

      7900 JAMES      CLERK           7698 03DEC81        950                    30

      7934 MILLER     CLERK           7782 23JAN82       1300                    10

 

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

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

 

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

———- ———- ——— ———- ——— ———- ———- ———-

      7499 ALLEN      SALESMAN        7698 20FEB81       1600        300         30

      7876 ADAMS      CLERK           7788 23MAY87       1100                    20

 

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

 

     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO

———- ———- ——— ———- ——— ———- ———- ———-

      7499 ALLEN      SALESMAN        7698 20FEB81       1600        300         30

      7698 BLAKE      MANAGER         7839 01MAY81       2850                    30

      7782 CLARK      MANAGER         7839 09JUN81       2450                    10

 

日期格式:未修改前

SQL> select sysdate from dual;

 

SYSDATE

———

28MAR10

 

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

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

 

Session altered.

 

查看修改后的日期格式

SQL> select sysdate from dual;

 

SYSDATE

———-

20100328

 

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

alter system set  nls_date_format =  ‘yyyy_mm_dd’ scope = spfile;

 

日期的加减

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

     +往前,-往后

     日期- 日期

 

SQL> select sysdate + 10 from dual;

 

SYSDATE+10

———-

20100407

 

SQL> select sysdate 10 from dual;

 

SYSDATE10

———-

20100318

 

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

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

 

     EMPNO ENAME      SYSDATE    SYSDATEHIREDATE

———- ———- ———- —————-

      7369 SMITH      20100328       10693.4346

      7499 ALLEN      20100328       10628.4346

      7521 WARD       20100328       10626.4346

      7566 JONES      20100328       10587.4346

      7654 MARTIN     20100328       10408.4346

      7698 BLAKE      20100328       10558.4346

      7782 CLARK      20100328       10519.4346

      7788 SCOTT      20100328       8379.43456

      7839 KING       20100328       10358.4346

      7844 TURNER     20100328       10428.4346

      7876 ADAMS      20100328       8345.43456

 

使用null值过滤  

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

 

     EMPNO ENAME      JOB              MGR HIREDATE          SAL       COMM     DEPTNO

———- ———- ——— ———- ———- ———- ———- ———-

      7369 SMITH      CLERK           7902 19801217        800                    20

      7566 JONES      MANAGER         7839 19810402       2975                    20

      7698 BLAKE      MANAGER         7839 19810501       2850                    30

      7782 CLARK      MANAGER         7839 19810609       2450                    10

      7788 SCOTT      ANALYST         7566 19870419       3000                    20

      7839 KING       PRESIDENT            19811117       5000                    10

      7876 ADAMS      CLERK           7788 19870523       1100                    20

      7900 JAMES      CLERK           7698 19811203        950                    30

      7902 FORD       ANALYST         7566 19811203       3000                    20

      7934 MILLER     CLERK           7782 19820123       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 19810609       2450                    10

      7698 BLAKE      MANAGER         7839 19810501       2850                    30

      7566 JONES      MANAGER         7839 19810402       2975                    20

      7902 FORD       ANALYST         7566 19811203       3000                    20

      7788 SCOTT      ANALYST         7566 19870419       3000                    20

      7839 KING       PRESIDENT            19811117       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            19811117       5000                    10

      7902 FORD       ANALYST         7566 19811203       3000                    20

      7788 SCOTT      ANALYST         7566 19870419       3000                    20

      7566 JONES      MANAGER         7839 19810402       2975                    20

      7698 BLAKE      MANAGER         7839 19810501       2850                    30

      7782 CLARK      MANAGER         7839 19810609       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
    原文地址: https://blog.csdn.net/leshami/article/details/5487992
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞