SQL基础2——过滤和排序

原文转自一沙弥的世界的博客:

一、使用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
 ——薪水大于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;——部门2中薪水大于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;
——薪水在1000到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 in (3000,5000); ——薪水值为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);
——薪水不值为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%';
——员工名字首字母为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%'; ——员工名字第二个字母为A的员工信息。

 

     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;——查询工资高于2000的员工信息,默认升序排列。

 

     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;——先按照sal排序,sal相同的再按照ename
字母顺序排序。

 

     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

 

--按第4个字段降序排列,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

时间: 2024-09-30 01:37:42

SQL基础2——过滤和排序的相关文章

SQL基础--&amp;gt;过滤和排序

--======================================= --SQL基础-->过滤和排序 --======================================= /* 一.使用WHERE字句实现对数据的过滤     用法:SELECT *|{[DISTINCT] column|expression [alias],...}           FROM table           [WHERE condition(s)]; 二.多条件连接     AND

sql基础知识:分页+排序

Oracle的分页还真是挺恶心地,不像mysql直接Limit就搞定 select name from student limit 0,20; Oracle需要借助rownum实现: select * from ( select s.*, rownum as rn from student s where rownum <= 10 ) m where m.rn > 0 如果要增加排序,可以引入order by select * from ( select c.*, rownum as rn f

SQL 基础--&amp;gt;常用函数

--================================== --SQL 基础-->常用函数 --================================== /* 一.函数的分类     SQL函数一般分为两种     单行函数 基于单行的处理,一行产生一个结果     多行函数 基于多行的处理,对多行进行汇总,多行产生结果   二.函数形式     function_name [(arg1, arg2,...)]   三.常用的单行函数:  1. 字符函数:     lo

《MySQL DBA修炼之道》——3.3 SQL基础

3.3 SQL基础 SQL是一种高级查询语言,它是声明式的,也就是说,只需要描述希望怎么获取数据,而不用考虑具体的算法实现.3.3.1 变量 MySQL里的变量可分为用户变量和系统变量.1.用户变量 用户变量与连接有关.也就是说,一个客户端定义的变量不能被其他客户端看到或使用.当客户端退出时,该客户端连接的所有变量将自动释放.这点不同于在函数或存储过程中通过DECLARE语句声明的局部变量,局部变量的生存周期在它被声明的"BEGIN-END"块内.对于用户变量的值,可以先保存在用户变量

SQL基础--&amp;gt;多表查询

--========================== --SQL基础-->多表查询 --========================== /* 一.多表查询     简言之,根据特定的连接条件从不同的表中获取所需的数据       笛卡尔集的产生条件:        省略连接条件        连接条件无效        第一个表中的所有行与第二个表中的所有行相连接             二.多表查询语法:*/     SELECT table1.column, table2.colu

SQL 基础--&amp;gt; 子查询

--========================= --SQL 基础--> 子查询 --=========================     /* 一.子查询     子查询就是位于SELECT.UPDATE.或DELETE语句中内部的查询     二.子查询的分类     单行子查询         返回零行或一行     多行子查询         返回一行或多行     多列子查询         返回多列     相关子查询         引用外部SQL语句中的一列或多列  

SQL基础--&amp;gt;层次化查询(START BY ... CONNECT BY PRIOR)

--====================================================== --SQL基础-->层次化查询(START BY ... CONNECT BY PRIOR) --======================================================       层次化查询,即树型结构查询,是SQL中经常用到的功能之一,通常由根节点,父节点,子节点,叶节点组成,其语法如下:        SELECT [LEVEL] ,col

SQL基础--&amp;gt;分组与分组函数

--================================= --SQL基础-->分组与分组函数 --================================= /* 一.分组:     分组函数可以对行集进行操作,并且为每组给出一个结果.    使用group by column1,column2,..按columm1,column2进行分组,即column1,column2组合相同的值为一个组   二.常用分组函数: */     AVG([DISTINCT|ALL]n)

SQL 基础--&amp;gt; 集合运算(UNION 与UNION ALL)

--============================================= -- SQL 基础--> 集合运算(UNION 与UNION ALL) --=============================================       集合运算操作符可以将两个或多个查询返回的行组合起来,即集合属于纵向连接运算   一.常用的集合运算符     UNION ALL 返回各个查询检索出的所有的行,不过滤掉重复记录     UNION     返回各个查询检索出