第二章 约束和排序数据

1. 在 emp 表中选择工资介于 1500 到 2500 的员工的信息;
                注意:使用 between 下边界 and 上边界时,条件包括边界值;

SCOTT@ORCL>select * from emp where sal between 1500 and 2500

2. 在emp表中选择位于20,30 部门的员工的信息;

SCOTT@ORCL>select *from emp where deptno in (20,30);
                
                3. 在emp表中选择位于员工的名字中包含大写字符 ‘A’ 的员工的信息;

SCOTT@ORCL>select * from emp where ename like '%A%';
                
                注意:如果查询的名字中包含%或者_ ,而且查询的时候又要查询这样的信息,需要用到换位码。
                注意:通配符%,表示0或者多个字符一样;通配符_,表示1个字符一样;

3.1 创建与 emp 表结构相同的表;
                        SCOTT@ORCL>create table emp_n                        /* 参照emp表创建新表emp_n */
                                  2  as select * from emp where 1=2;           /* 加where 1=2 一致表结构没有数据 */

SCOTT@ORCL>select * from emp_n;

3.2 添加包含通配符的测试用数据;
                SCOTT@ORCL>insert into emp_n(empno,ename,sal) values(&empno,&ename,&sal);
                Enter value for empno: 1001
                Enter value for ename: 'whwh%gogo'
                Enter value for sal: 1000
                old   1: insert into emp_n(empno,ename,sal) values(&empno,&ename,&sal)
                new   1: insert into emp_n(empno,ename,sal) values(1001,'whwh%gogo',1000)

1 row created.

SCOTT@ORCL>/
                Enter value for empno: 1002
                Enter value for ename: '%whwh'
                Enter value for sal: 2000
                old   1: insert into emp_n(empno,ename,sal) values(&empno,&ename,&sal)
                new   1: insert into emp_n(empno,ename,sal) values(1002,'%whwh',2000)

1 row created.

SCOTT@ORCL>/
                Enter value for empno: 1003
                Enter value for ename: 'whwh_gogo'
                Enter value for sal: 3000
                old   1: insert into emp_n(empno,ename,sal) values(&empno,&ename,&sal)
                new   1: insert into emp_n(empno,ename,sal) values(1003,'whwh_gogo',3000)

1 row created.

SCOTT@ORCL>/
                Enter value for empno: 1004
                Enter value for ename: '_gogo'
                Enter value for sal: 4000
                old   1: insert into emp_n(empno,ename,sal) values(&empno,&ename,&sal)
                new   1: insert into emp_n(empno,ename,sal) values(1004,'_gogo',4000)

1 row created.

SCOTT@ORCL>commit;

Commit complete.

SCOTT@ORCL>select * from emp_n;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            1001 whwh%gogo                                       1000
                            1002 %whwh                                           2000
                            1003 whwh_gogo                                       3000
                            1004 _gogo                                           4000

3.3 换位码的使用方法;(此处以\作为换位码,换位码还可以指定其他字符)
                例:检索包含%的记录信息;
                SCOTT@ORCL>select * from emp_n where ename like '%\%%' escape '\';
                
                         EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            1001 whwh%gogo                                       1000
                            1002 %whwh                                           2000

SCOTT@ORCL>select * from emp_n where ename like '%\%%';

例:检索以%开头的记录信息;
                SCOTT@ORCL>select * from emp_n where ename like '\%%' escape '\';

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            1002 %whwh                                           2000

例:检索包含_的记录信息;
                SCOTT@ORCL>select * from emp_n where ename like '%\_%' escape '\';

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            1003 whwh_gogo                                       3000
                            1004 _gogo                                           4000

例:检索以_开头的记录信息;
                SCOTT@ORCL>select * from emp_n where ename like '\_%' escape '\';

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            1004 _gogo                                           4000

4 复合条件的使用
                        4.1 对于and条件的复合(可以将between...and...进行转换)

例:在emp表中选择工资介于2000到3000的员工的信息;
                SCOTT@ORCL>select * from emp where sal>=2000 and sal<=3000;
 
                SCOTT@ORCL>select * from emp where sal between 2000 and 3000;

4.2 对于or条件复合(可以将in()进行转换)
                例:在emp表中选择10号和20号部门的员工信息;
                SCOTT@ORCL>select * from emp where deptno=10 or deptno=20;
                
                SCOTT@ORCL>select * from emp where deptno in (10,20);

5 对于表中数据的排序
                        5.1 asc  表示按照所给字段进行升序排列(默认升序)
                                desc 表示按照所给字段进行降序排列
                例:将emp表中10号部门的员工信息按照sal列升序排列
                SCOTT@ORCL>select * from emp where deptno=10;

SCOTT@ORCL>select * from emp where deptno=10 order by sal asc;

SCOTT@ORCL>select * from emp where deptno=10 order by sal;

例:将emp表中20号部门的员工信息按照sal列降序排列
                SCOTT@ORCL>select * from emp where deptno=20 order by sal desc;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
                            7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
                            7566 JONES      MANAGER         7839 02-APR-81       2975                    20
                            7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
                            7369 SMITH      CLERK           7902 17-DEC-80        800                    20

5.2 如果order by 后面跟多个字段,则将结果集先按照第1个字段进行排序【条件1】,
                                再按第2个字段进行排序【条件2】;
                        注意:【条件1】如果按照第1个字段分不开先后顺序的时候,才会按照第2个字段排序;
                                     asc 或者desc 影响的字段,仅仅是它紧挨着的那个字段;
                例:将emp表中10号部门的员工信息按sal降序排列,empno升序排列;
                SCOTT@ORCL>select * from emp where deptno=10 order by sal desc,empno asc;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            7839 KING       PRESIDENT            17-NOV-81       5000                    10
                            7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
                            7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

例:将emp表中20号部门的员工信息按照empno 降序排列,sal升序排列;
                SCOTT@ORCL>select * from emp where deptno=20 order by empno desc,sal asc;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
                            7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
                            7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
                            7566 JONES      MANAGER         7839 02-APR-81       2975                    20
                            7369 SMITH      CLERK           7902 17-DEC-80        800                    20

5.3 除了可以使用字段排序,还可以使用字段所在的先后位置排序;
                确定字段在表中的先后顺序;
                SCOTT@ORCL>set lines 100
                SCOTT@ORCL>desc emp;

例:将emp表中10号部门的员工信息按sal降序排列,empno升序排列;
                 SCOTT@ORCL>select * from emp where deptno=10 order by 6 desc,1 asc;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            7839 KING       PRESIDENT            17-NOV-81       5000                    10
                            7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
                            7934 MILLER     CLERK           7782 23-JAN-82       1300                    10

例:将emp表中20号部门的员工信息按照empno 降序排列,sal升序排列;
                SCOTT@ORCL>select * from emp where deptno=20  order by 1 desc,6 asc;

EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
                ---------- ---------- --------- ---------- --------- ---------- ---------- ----------
                            7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
                            7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
                            7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
                            7566 JONES      MANAGER         7839 02-APR-81       2975                    20
                            7369 SMITH      CLERK           7902 17-DEC-80        800                    20

5.4 除了可以使用number 类型的字段进行排序外,还可以使用字符串或者时间类型的字段进行排序;
                         注意:字符串排序:按照字符对应的ASCII码的先后进行排序;
                                     日期排序:按照日期的先后进行排序,时间越往后越大;
                例:将emp表中员工按照job升序、ename降序进行排列;(先按Job排序,同样的job按ename降序)
                SCOTT@ORCL>select * from emp  order by job asc,ename desc;

例:将emp表中员工按照 HIREDATE 升序,sal降序排列(如果HIREDATE相同,按照sal降序)
                先将HIREDATE显示格式设定
                SCOTT@ORCL>alter session set nls_date_format='yyyy-mm-dd';

Session altered.

SCOTT@ORCL>select * from emp order by hiredate asc,sal desc;
                    
                        6. 使用结果集中的别名进行排序;
                例:按照emp表中员工对于的年薪(sal*12)进行排序;
                SCOTT@ORCL>select empno,ename,hiredate,sal*12 year_sal from emp order by year_sal desc;

注意:当然也可以按照字符串、日期对应的别名进行排序;

7. 如果排序的字段中包含null值,结果会怎么样?
                        注意:在字段进行比较大小的时候,null 值比任何值都大;
                例:emp表中员工的信息按照comm降序排列;
                SCOTT@ORCL>select * from emp order by comm desc;
                    
                注意:null 值之间的排序不考虑(因为Null 和 null 之间无法比较大小)

如果我想将comm有值的部分换到上面,该怎么办?
                SCOTT@ORCL>select * from emp order by comm desc nulls last;

同理:自己验证 升序 排列
                SCOTT@ORCL>select * from emp
                    2  order by comm asc nulls first;

第二章 约束和排序数据(SQL基础)的更多相关文章

  1. sql系列(基础)-第二章 限制和排序数据

    更好的看↑代码点击VIEW PLAN 第二章 约束和排序数据 1. 在 emp 表中选择工资介于 1500 到 2500 的员工的信息: 注意:使用 between 下边界 and 上边界时.条件包括 ...

  2. oracle学习 第二章 限制性查询和数据的排序 ——03

    这里.我们接着上一小节2.6留下的问题:假设要查询的字符串中含有"_"或"%".又该如何处理呢? 開始今天的学习. 2.7  怎样使用转义(escape)操作符 ...

  3. 《SQL CookBook 》笔记-第二章-查询结果排序

    目录 第二章 查询结果排序 2.1 以指定顺序返回查询结果 2.2 依据子串排序 2.3 排序时对 Null 值的处理 2.4 依据条件逻辑动态调整排序项 第二章 shanzm 第二章 查询结果排序 ...

  4. 第二章 表与指针Pro SQL Server Internal (Dmitri Korotkev)

    聚集索引 聚集索引就是表中数据的物理顺序,它是按照聚集索引分类的.表只能定义一个聚集索引. 如果你要在一个有数据的堆表中创建一个聚集索引,如2-5所示,第一步要做的就是SQL服务器创建另一个根据聚集索 ...

  5. 第二章 单表查询 T-SQL语言基础(1)

    单表查询(1) 本章:逻辑查询处理,特定的SELECT查询生成正确的结果集而要经历的一系列逻辑阶段;单表查询的其他方面,包括:运算符,空值(NULL),字符的处理和临时数据,分级(ranking),C ...

  6. 第二章 单表查询 T-SQL语言基础(3)

    单表查询(3) 2.6 处理字符数据 字符数据的查询处理,内容包括:类型,排序规则,运算符和函数,以及模式匹配. 2.6.1 数据类型 SQL Server支持两种字符数据类型----普通字符和Uni ...

  7. 第二章 单表查询 T-SQL语言基础(2)

    单表查询(2) 2.2 谓词和运算符 T-SQL有几种不同的语言元素可以指定逻辑表达式,例如,查询过滤器(WHERE和HAVING),CHECK约束,等等. 在逻辑表达式中可以使用各种谓词(取值为TR ...

  8. 第二章(1.5)Python基础知识(数据类型)

    一.list(列表) list是一种有序的集合,可以随时添加和删除其中的元素 用len()函数可以获得list元素的个数 列表操作包含以下函数: cmp(list1, list2):比较两个列表的元素 ...

  9. 第二章(1.3)Python基础知识(输入输出)

    一.?输出 用print加上字符串,就可以向屏幕上输出指定的文字 print?'hello, world' print也可以打印整数. >>> print?300 二.?输入 Pyt ...

随机推荐

  1. [置顶] 《MFC游戏开发》笔记一 系列简介

    本系列文章由七十一雾央编写,转载请注明出处.  http://blog.csdn.net/u011371356/article/details/9299121 作者:七十一雾央 新浪微博:http:/ ...

  2. 高效Count

    SQL Server快速查询某张表的当前行数   传统做法可能是select count(1) 但是往往会比较慢.推荐如下做法: SELECT ISNULL(MAX(rowcnt), 0) Curre ...

  3. [改善Java代码]让工具类不可实例化

    建议42: 让工具类不可实例化 Java项目中使用的工具类非常多,比如JDK自己的工具类java.lang.Math.java.util.Collections等都是我们经常用到的.工具类的方法和属性 ...

  4. hdu 3093 动态规划

    思路:直接引用论文的话. 暂时先不考虑“使剩下的物品都放不下”的条件,那就是求 0-1 背包的所有可行方案. 用 Fi[j]表示前 i 件物品中选若干件总体积为 j 的方案数,初始为 F0[0]=1, ...

  5. Tomcat - 持久化 Session

    Session 是保存在内存中的,如果服务器重启.宕机的话,Session 就会丢失.有时候,我们需要对 Session 持久化以应对意外的情况发生.例如,客户端与服务器在交互过程中,可能因为 Ses ...

  6. ActiveMQ(5.10.0) - Configuring the Simple Authentication Plug-in

    The easiest way to secure the broker is through the use of authentication credentials placed directl ...

  7. JS调用iframe方式实现Web区域打印页面内容

    1.程序说明 1) 此程序可以实现选择页面中的区域进行打印,以iframe方式进行打印: 2) 与原生态的print() 区别在于,取消打印页面后可以完整保留当前访问页面的内容. 2.代码部分 1) ...

  8. Swift字典类

    在Foundation框架中提供一种字典集合,它是由“键-值”对构成的集合.键集合不能重复,值集合没有特殊要求.键和值集合中的元素可以是任何对象,但是不能是nil.Foundation框架字典类也分为 ...

  9. jQuery实现图片轮播

    之前有碰到过jQuery实现列表自动滚动,这次的图片轮播在原理上与之相同,只有一些细微的差别,就是需要在图片的右下角显示当前图片的序号,效果如下: 先看一看html代码,以及对应的css代码: < ...

  10. IPoint从自定义的投影坐标系转换到自定义的地理坐标系

    IPoint pointStart = new PointClass(); pointStart = xyPolyline.FromPoint; ISpatialReferenceFactory pS ...