文档章节

SQL基础-->过滤和排序

彭博
 彭博
发布于 2012/03/09 16:32
字数 1566
阅读 55
收藏 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默认显示的日期格式为: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 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                   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                   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                   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  相关 

      

 

 


原文链接: http://blog.csdn.net/robinson_0612/article/details/5487992

本文转载自:http://blog.csdn.net/robinson_0612/article/details/5487992

共有 人打赏支持
彭博

彭博

粉丝 393
博文 1071
码字总数 6801
作品 2
深圳
程序员
私信 提问
django的各种查询

以一个学生类为例: class Student(models.Model): id= models.FloatField(primarykey=True,relatedname='blog') name= models.CharField(max_length=20, blank=True, null=True) age=models.......

石超123
2018/01/11
1
0
sql和mongodb基本操作对比

基本概念对比 SQL Terms/Concepts MongoDB Terms/Concepts database database table collection row document or BSON document column field index index table joins embedded documents a......

penngo
2014/03/20
0
0
asp.net+ajax+json来实现无刷新分页功能

现在做网站就是尽可能的提高用户体验,用户浏览网站尽可能不要刷新,响应速度尽可能的快,就是加载速度不好,也要告诉用户你已经很努力的在加载了(loading.....),下面来看看如何实现此功能 ...

阿拉赛
2012/06/26
0
0
Oracle优化——单表分页优化

单表分页优化思路: --创建测试表: SQL> create table ttest as select * from dbaobjects; Table created. 如,下面的sql (没有过滤条件,只有排序),要将查询结果分页显示,每页显示10条...

一个笨小孩
2018/08/08
0
0
2秒变90秒?一个拖垮性能的过滤条件引发的SQL优化

作者介绍 在href="http://mp.weixin.qq.com/s?biz=MzI4NTA1MDEwNg==&mid=2650757626&idx=1&sn=7b37b3faf2c7c640df7d1df514d9afa3&chksm=f3f9ec6fc48e657919f6df768c393ddcc71b844819758473e......

黄浩
2017/06/16
0
0

没有更多内容

加载失败,请刷新页面

加载更多

MQ学习-基本概念区分

消息队列 Kafka 涉及的专有名词和术语进行定义和解释,方便您更好地理解相关概念并使用该产品。 Broker: 消息队列 Kafka 集群包含一个或多个消息处理服务器,该服务器被称为 Broker。 Topi...

os1cheng
18分钟前
0
0
腾讯怒怼:靠红包骗用户下载怎么可以叫产品

近日,社交圈出现了大动荡,三款新推出的社交软件全部被微信封杀,对此,腾讯公关总监在回应外界对于1月15日三款社交新产品撼动微信的消息,他呼吁媒体在批评的同时应当尊重事实,“我们尊重...

linux-tao
今天
2
0
面试必考-数据优化

sql语句优化 性能不理想的系统中除了一部分是因为应用程序的负载确实超过了服务器的实际处理能力外,更多的是因为系统存在大量的SQL语句需要优化。 为了获得稳定的执行性能,SQL语句越简单越好...

瑞查德-Jack
今天
4
0
spring aop学习

1.aop和spring aop的关系? aop是一种思想,spring aop是aop的一种实现。 2.Spring aop和AspectJ的关系? 这两种都是实现aop的,spring借助AspectJ的语法实现aop的功能 3.@AspectJ support和...

llsydn
今天
4
0
OSChina 周六乱弹 —— 世界的源代码

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @小鱼丁 :#今日歌曲推荐# 分享Jason Mraz的单曲《Prettiest Friend (Demo)》: 《Prettiest Friend (Demo)》- Jason Mraz 手机党少年们想听歌...

小小编辑
今天
497
12

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部