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

在第一章中所有的查询解雇都是显示整个表中所有的记录。但如果你操作的表很大,例如表中包含了一百多万行的数据,从这样的查询结果中很难找到所需要的信息。这可能就是引入限制性查询和排序的原因。

2.1 如何限制所选的数据行

设想一下,公司因收到互联网泡沫破裂和9.11恐怖袭击的双重打击,已经连续几个季度亏损,老板不得不进行优化组合(解雇一批员工),以节省开销。老板当然想从高收入者开刀,他让您打印一份工资在1500元(包括1500员)或高于1500元的员工的清单,以决定那些“无用之人“应该炒鱿鱼。您可以使用里2-1的查询语句来完成老板的重托。

例 2-1 

SQL> SELECT empno,ename,sal
  2  FROM emp
  3  WHERE sal>=1500;

例 2-1 结果


例2-1显示的结果给出了工资为1500或以上的所有员工的工号(empno)、名字(ename)和工资(sal)。这张清单上列出了所有可能被解雇员工的候选人。

在例2-1的查询语句中,使用了WHERE子句来限制哪些行(记录)要显示,这在关系数据库中被称为选择(selection)操作。WHERE子句跟在FROM子句之后。

WHERE是关键字,其后跟限制条件。

条件是由列名、字符串、算术表达式、通常和比较运算符组成。

2.2 比较运算符

您可以使用比较运算符(operators)来构造条件。

条件格式为:

> (大于)

>= (大于等于)

< (小于)

<= (小于等于)

= (等于)

<>或!= (不等于)

除了以上的比较运算符外,Oracle还提供了一下三个比较运算符(operators)

BETWEEN   AND

IN

LIKE

在一下的几节中,通过一些例子来解释这些比较运算符(operators)的用法。

2.3 如何使用BETWEEN AND 比较运算符(operators)

假设您的公司规定工资在2900元或者以上的员工的平庸和解雇需要由董事会来决定。因此老板不希望给他的清单中包含工资在2900元或以上的员工。于是您补不补改写例2-2的查询语句。

例 2-2

SQL> SELECT empno,ename,sal
  2  FROM emp
  3  WHERE sal BETWEEN 1500 AND 2900;

例 2-2 结果

oracle学习 第二章 限制性查询和数据的排序 ——01_第1张图片

例2-2 显示的结果就只包括了老板想要的员工清单。

BETWEEN 运算符用于测试某些值是否在指定的数值范围内。在BETWEEN和AND之间的值叫下限,AND之后的值叫上限。显示的结果包含下限和上限的值。该运算符不但可以用于数字型数据而且还可以用于字符行和日期型数据,但这两种类型的数据必须用单引号括起来。

例如,老板想知道是在1981年1月1和1982年5月31日之间加入该公司的,可以使用里2-3的查询语句来得到他所需要的信息。

例 2-3

SQL> SELECT empno,ename,hiredate
  2  FROM emp
  3  WHERE hiredate BETWEEN '01-JAN-81' AND '31-MAY-82';

例 2-3 结果


该查询语句显示了从1981年1月到1982年5月所聘用的员工清单。

如果HIREDATE一列显示的为乱码,运行的时候提示月份无效,您可能需要使用例2-4的命令。


例 2-4

SQL> alter session set NLS_DATE_LANGUAGE = AMERICAN;

例 2-4 结果


您还记得上面的语句是干什么的吗?如果不记得了,请复习一下第一章 1.7 有关该SQL语句的说明。

可以在BETWEEN之前加上NOT,用于测试某些值是否在BETWEEN和AND指定的数值范围之内。当看了例2-3之后,您的老板突然想到:如果有一张不是在1981年1月1日到1982年5月31日加入该公司的员工的清单的话,就可以帮助他们更加容易的做决策。因为这段时间刚刚起步,在这段时间加入公司的员工多数持有公司股份。于是他又把这一想法告诉您。您使用了例2-5的查询语句以得到咯啊版所需的信息。

例 2-5

SQL> SELECT empno,ename,sal,hiredate
  2  FROM emp
  3  WHERE hiredate NOT BETWEEN '01-JAN-81'AND '31-MAY-82';

例 2-5 结果


这一SQL语句得到的结果为一张除了从1981年1月1日到1982年5月31日所聘用的员工以外的所有员工的清单。对于这张清单上的决策,你的老板就没有什么顾忌了。


今天的学习就到这里,在今天的学习中,我在发现一个奇怪的现象,就是在例2-3和例2-5中都带有日期。每次我执行的时候都要先执行一次例2-4的语句,感觉有点麻烦,不知道哪位博友,能给点建议一次解决呢?

你可能感兴趣的:(oracle,oracle,sql,数据库,优化,11g)