视频课程:李兴华 Oracle从入门到精通视频课程

学习者:阳光罗诺

视频来源:51CTO学院

知识点

  1. SQL语句的执行顺序
  2. 限定符号的使用。

 

具体内容:

如果想要对所选择的数据进行控制,就可以使用WHERE子句来完成,此时的语法结构为:

选出所需要的数据列】SELECT [DISTINCT] *  列[别名],列[别名],列[别名]······

确定数据来源】FROM 表名称 [别名]

筛选数据行】[WHERE 限定条件]  此时的条件可以是多个语法结构。

语法结构的执行顺序都是先执行FROM,其次就是WHERE,最后才是SELECT。SELECT子句在整个语法结构中是最后才会被执行到的子句。但是如果要进行数据的筛选,必须使用若干个条件判断符

    关系运算:>、=、<、>=、<=、!=(<>)

    范围运算:BETWEEN······AND

    空判断:IS NULL、IS NOTNULL

    IN判断:IN、NOT IN、exists()【复杂查询】

    模糊查询:LIKE、NOT LIKE

 

这对于以上的限定符都只能够判断一次,如果现在有若干个限定符,就需要进行若干个限定符的连接,可以使用逻辑运算符。

逻辑运算符:

AND(与):与操作表示的所有的判断条件都满足时才返回真(true)

OR(或):或操作表示的若干个判断条件只要有一个满足就返回真(true)

NOT(非):表示两者都是FALSE,所以返回的时候,就是true。

以上的这些判断符号,都是SQL中的标准支持。其他的不同的数据库可能有自己的数据库扩充的内容。

关系运算符

关系运算符主要时进行大小的判断。

范例:查询工资低于1200的雇员(不包含1200)。

语法格式:

 SELECT *
FROM emp
WHERE sal<;

此时的结果如下:

此时的数据行中的内容是有所减少。

范例:查询工资是3000的雇员

语法格式:

 SELECT *
FROM emp
WHERE sal=;

查询结果如下:

但是对于等号“=”而言,有一点需要注意,除了可以在数字上使用之外。在字符串的使用也是可以的。

范例:查询smith的雇员信息

语法格式:

SELECT * FROM emp WHERE ename=‘smith’;

查询结果如下:

此时一定要注意的内容就是我画红线的部分的内容,在Oracle数据库中,数据都是区分大小写的。数据库不会自动转化大小写。

对于不等于的判断有两个符号:!=、<>。

范例:查询职位不是办事员的雇员(职位是JOB字段、办事员的职位名称CLERK)

语法格式:

SELECT * FROM emp WHERE JOB<>’CLERK’;

SELECT * FROM emp WHERE JOB!=’CLERK’;

逻辑运算

逻辑运算可以保证连接多个条件,如果要连接主要使用的是AND和OR两种来完成。

范例:要求查询出不是办事员,但是工资低于3000的雇员信息。

分析:第一个条件是:不是办事员,JOB<>’CLERK’

第二个条件是:工资低于3000,sal<3000

语法格式:

 SELECT * FROM emp WHERE job<>’CLERK’ AND sal<;

查询结果如下:

范例:查询出职位不是办事员也不是销售的雇员信息。

分析:要同时两个结果都要满足,所以就使用AND来连接。

第一个条件:job<>‘CLERK’

第二个条件:job<>’SALESMAN’

语法格式:

         SELECT * FROM emp WHERE job<>’CLERK’ AND job<>’SALESMAN’;

查询结果如下:

范例:查询出职位是办事员或者是工资低于1200的所有雇员。

 

分析:由于要满足其中之一,所以就只能使用OR来连接。

第一个条件:job=’CLERK’

第二个条件:sal<1200

语法格式:

 SELECT * FROM emp WHERE job=’CLERK’ OR sal<;

查询结果如下所示:

执行条件越多,那么速度就会越慢,数据优化就成为了公司必备的内容。

除了AND和OR之外,我们还可以使用NOT来进行求反。即:TRUE变为FALSE、FALSE变为TRUE

范例:观察NOT的变化

语法格式:

   SELECT * FROM emp WHERE NOT sal>;

查询结果如图:

范围运算:BETWEEN···AND···

 BETWEEN···AND···主要是进行范围的查询。

语法格式:

WHERE 字段|数值 BETWEEN 最小值 AND 最大值

范例: 查询出工资在1500~3000之间的所有雇员。

第一种实现方式:使用关系运算和逻辑运算一起来实现

 SELECT *

 FROM emp

 WHERE sal>= AND sal<=;

第二种实现方式:使用BETWEEN···AND···查询

 SELECT *

 FROM emp

 WHERE sal BETWEEN  AND ;

使用BETWEEN···AND···是一个运算符,而且使用关系和逻辑的组合是属于两个运算符,自然效率会更好、更高。【性能优化】

在Oracle中你的所有运算符都是不受数据类型的控制,在之前使用的是数字进行了判断,那么除了数字之外,可以使用字符串或者是日期进行判断。字符串的意义不大,重点看日期的判断。

范例:查询出所有在1981年雇佣的雇员信息。

· 范围:1981-01-01~1981-12-31

语法格式:

 SELECT *

 FROM emp

 WHERE hiredate BETWEEN '01-1月-81' AND '31-12月-1981';

查询结果如下:

范例:查询字符串的范围

 SELECT * FROM emp WHERE ename BETWEEN 'ALAN' AND 'CLARK';

查询结果如下:

空判断

Null从数据库定义上来讲属于一个未知的数据,在任何情况下,如果一个数字与null进行计算,那么结果依然是未知Null。

语法格式:

  SELECT NULL+ FROM emp;

结果如下:

查询结果全是空的。

在某些数据列上是允许存在有null值得存在,但是对于null不能使用关系运算符判断。

关系判断的是数据,null值不是空的字符串也不是数字0,所以在SQL、之中能够通过IS NULL 来判断为空,以及IS NOT NULL(NOT字段 IS NULL)判断不为空。

范例:查询出所有领取佣金的雇员信息。(comm字段表示的是佣金,如果领取,则comm的内容不是null)

 

语法格式:

 SELECT * FROM emp WHERE comm IS NOT NULL;

查询结果:

IN操作符(谓词IN)

IN指的是根据一个指定的的范围进行数据的查询。

范例:查询出雇员编号是7369、7566、7788、9999的雇员信息。

  1. 利用关系运算符进行操作:

语法格式:

 SELECT * FROM emp WHERE empno= OR empno= OR empno= OR empno=;

查询结果如下:

此时并没有雇员9999,所以最终的内容只返回了3行数据。此种方式的代码执行了四次,这种方式在很多性能优化是很差的。所以在对指定数据范围的时候就可以使用IN操作符。

范例:利用IN操作符

语法格式:

 SELECT * FROM emp WHERE empno IN (,,,);

查询结果上是没有差别的,只是在执行的问题上作了相应的优化处理。在代码上不仅很短,但是性能方面也很好。

注意点:在使用IN操作符的时候,也可以使用NOT IN,那么就表示不在这个范围之内的。

例如:

  SELECT * FROM emp WHERE empno NOT IN (,,,);

数据内容显示较多,就不一一地进行截图。

问题就从NOT IN开始,在使用NOT IN地时候,如果查找地数据范围之中包含有NULL值,那么就不会有任何的查询结果返回。IN操作符无此限制。

范例:观察IN操作符中出现NULL

语法格式:

 SELECT * FROM emp WHERE empno IN (,,,NULL);

查询结果如下:

数据结果和之前9999不存在的结果是一样的。

范例:观察NOT IN 中出现NULL。

语法格式:

 SELECT * FROM emp WHERE empno NOT IN (,,,NULL);

查询结果:无任何的数据返回。

模糊查询:LIKE(核心)

Like可以实现数据的模糊查询操作,如果要想使用LIKE则必须使用如下的两个匹配符号:

1.“_”:匹配任意的一位符号

2.“%”:匹配任意的符号(包含匹配1位,1位,多位)

范例:查询所有雇员中姓名以A字母开头的雇员信息。

分析:第一个字母A是固定的,后面的内容是随意。

语法格式:

 SELECT * FROM emp WHERE ename LIKE ‘A%’;

范例:查询所有雇员姓名中第二个字母是A的所有雇员

分析:第一位可以是任意的字符,但是必须指出占一位,所以就使用“_”;后面的位置随意。

语法格式:

 SELECT * FROM emp WHERE ename LIKE ‘_A%’;

结果如图所示:

范例:查询雇员姓名中任意位置上存在有字母A的雇员信息

分析:开头、结尾、中间都可以。其他的位置随意。则使用“%A%”。

语法格式:

 SELECT * FROM emp WHERE ename LIKE ‘%A%’;

查询结果如下:

关于LIKE的两点说明:

  1.如果在使用LIKE进行限定查询的时候,没有设置任何的关键字,那么就表示查询全部内容。

例如:

 SELECT * FROM emp WHERE ename LIKE '%%';

  2.LIKE可以在任意的数据类型上使用(原生支持)

语法格式:

 SELECT * FROM emp WHERE ename LIKE '%A%' OR sal LIKE '%1%' OR hiredate LIKE '%81%';

例如:

虽然所有的数据类型都是支持LIKE,但是往往会在字符串上使用。目前所可以见到的大部分的系统搜索引擎功能,都是通过此语句实现。但是不包含搜索引擎的实现。

查询排序 ORDER BY子句(重点部分)

所有的自然排序都是不可控的,所以往往都是用户自己来进行排序操作,那么这个时候就可以使用ORDER BY

语法格式:

选出所需要的数据列】SELECT [DISTINCT] *  列[别名],列[别名],列[别名]······

确定数据来源】FROM 表名称 [别名]

筛选数据行】[WHERE 限定条件]  此时的条件可以是多个语法结构。

数据排序】[ORDER BY 排序字段 [ASC|DESC] 可以设置多个]

既然ORDER BY 是在SELECT子句之后执行的,那么就意味着ORDER BY可以使用SELECT子句定义的别名。

对于字段的排序有两种形式:

   升序:ASC,默认不写排序也是升序

  降序:DESC,由高到低进行排序。

范例:按照工资由高到低排序。此时应该使用的是降序排序。

语法格式:

 SELECT * FROM emp ORDER BY sal DESC;

查询结果:

排序可以在任意数据类型上执行,包括字符串、日期都可以。

范例:按照雇佣日期由早到晚排序。

语法格式:

 SELECT * FROM emp ORDER BY  hiredate ASC;

查询结果:

除了可以进行单一字符的排序,也可以进行字段的混合排序操作。指的是可以进行若干个字段的排序。

范例:按照工资由高到低排序,如果工资相同,则按照雇佣日期由早到晚排序。

语法格式:

 SELECT * FROM emp ORDER BY  sal DESC,hiredate ASC;

查询结果:

所有的排序操作都是在WHERE筛选之后进行的。

范例:查询出所有办事员的编号,职位,年薪,按照年薪由高到低排序。

语法格式:

 SELECT empno,job,sal* income FROM emp WHERE job='CLERK'  ORDER BY income ASC;

查询结果:

总结:

  1. 1.      SELECT子句确定数据列
  2. 2.      WHERE子句控制数据行
  3. 3.      ORDER BY子句永远摆在最后去执行。

Oracle从入门到精通 限定查询和排序查询的问题的更多相关文章

  1. Oracle从入门到精通----学习笔记

    书名:<Oracle从入门到精通:视频实战版>秦靖.刘存勇等编著 第4章 SQL基础 1.SQL语言分类 数据定义语言 --- DDL,Data Definition Language 数 ...

  2. 《Oracle 11g 入门到精通.明日科技.pdf》学习笔记

    本博文整理者:刘军 本博文出自于: <Oracle 11g 入门到精通>一书 声明:1:转载请标注出处.本文不得作为商业活动.本人不负法律责任.违法者自负一切法律责任. ————————— ...

  3. 学习Oracle数据库入门到精通教程资料合集

    任何大型信息系统,都需要有数据库管理系统作为支撑.其中,Oracle以其卓越的性能获得了广泛的应用.本合集汇总了学习Oracle数据库从入门到精通的30份教程资料. 资料名称 下载地址 超详细Orac ...

  4. 干货分享!Oracle 的入门到精通 ~

    Oracle Database,又名Oracle RDBMS,或简称Oracle.是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上 ...

  5. MySQL的ALTER变更、正则查询、分组查询、排序查询以及事务查询的概

    MySQL的表和字段信息的变更 ALTER TABLE table-name DROP column-name; #删除某个字段 ALTER TABLE table-name ADD column-n ...

  6. 10. MySQL基础-02条件查询、排序查询

    2. 条件查询 语法 ​ select 查询列表 from 表名 where 筛选条件: 分类 按条件表达式筛选 简单的条件运算符:> < = != <> >= ⇐ 按逻 ...

  7. es的查询、排序查询、分页查询、布尔查询、查询结果过滤、高亮查询、聚合函数、python操作es

    今日内容概要 es的查询 Elasticsearch之排序查询 Elasticsearch之分页查询 Elasticsearch之布尔查询 Elasticsearch之查询结果过滤 Elasticse ...

  8. oracle从入门到精通复习笔记

    为方便大家跟着我的笔记练习,为此提供数据库表文件给大家下载:点我下载 描述一个表用 desc employees过滤重复的部门 select distinct department_id from e ...

  9. Oracle从入门到精通(笔记)

    一.Oracle11g概述 1.6 启动与关闭数据库实例 1.6.1 启动数据库实例 Oracle数据库实例启动分3个步骤:启动实例,加载数据库,打开数据库: 命令格式:startup [nomoun ...

随机推荐

  1. Kubernetes Running Locally

    1. Requirements 1) Linux Not running Linux? Consider running Minikube, or on a cloud provider like G ...

  2. Oracle Net Configuration(监听程序和网络服务配置)

    1.在Oracle服务端和客户端都安装完之后,就需要配置监听程序和本地网络服务,以便外部程序和工具的访问,所以Oracle提供了两款自带的工具来配置它们分别是 Net Configuration.Ne ...

  3. XAMPP中Apache和Mysql启动失败问题总结

    一.Apache启动失败 xampp启动时显示的错误为: 9:52:41  [Apache]  Attempting to start Apache app... 9:52:41  [Apache]  ...

  4. Rails 中 mattr_accessor 一处文档错误

    http://xiewenwei.github.io/blog/2015/01/11/mattr-accessor-in-ruby-on-rails-activesupport/ module Hai ...

  5. 通过Jscript中@cc_on 语句识别IE浏览器及版本的代码

    激活条件编译支持. @cc_on 备注 @cc_on 语句激活脚本引擎中的条件编译. 强烈推荐在注释中使用 @cc_on 语句,以使不支持条件编译的浏览器将您的脚本视为有效语法而接受它: /*@cc_ ...

  6. 8、在Shell脚本中使用函数

    学习目标Shell的函数 Shell程序也支持函数.函数能完成一特定的功能,可以重复调用这个函数.函数格式如下: 函数名() {     函数体 }   函数调用方式: 函数名 参数列表   实例:编 ...

  7. php的stristr()函数,查找字符

    1.用法,要传2个参数 stristr(string,search):查找并返还匹配后,剩下的部分字符串 查找过程不区分大小写,要区分大小写用 strstr(string,search)少一个字母i ...

  8. RabbitMQ小节

    一.RabbitMQ简介 RabbitQM是一款应用程序对应用程序的通讯方法,基于AMQP协议,用Erlang语言开发,因而安装环境配置之前需要首先安装Erlang语言环境.通过客户端发送消息到队列消 ...

  9. [转]Asp.Net Web API 2第十七课——Creating an OData Endpoint in ASP.NET Web API 2(OData终结点)

    本文转自:http://www.cnblogs.com/aehyok/p/3545824.html 前言 很久没更新博客了,加上刚过年,现在准备重新开战,继续自己的学习之路.本文已同步到Web API ...

  10. Centos 从零开始 (二)

    因为我是搞 nodejs的 所以以后会安装一些依赖于node的 比如mongodb数据库等. 6:安装nodejs 安装的时候遇到个小问题.yum install nodejs 报错 说没有这个包.然 ...