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

来源:互联网 发布:淘宝天猫交易额 编辑:程序博客网 时间:2024/06/06 00:13

2.4 在SQL语句中使用字符串和日期

您的老板考虑目的销售不景气还要持续一段时间,因此不需要那么多的推销员(salesman)。他让您现在打印一份所有的推销员清单,于是您写下了例2-6的查询语句。

例 2-6

SQL> SELECT empno,ename,job  2  FROM emp  3  WHERE JOB ='salename';

例 2-6 结果


可是没有显示出任何结果。您一定对此感到很惊讶,因为在员工(emp)表中缺失存有推销员的数据,这到底是为什么呢?

这是因为WHERE子句中的字符串是区分大小写的。在WHERE子句中字符和日期型数据要用单引号括起来,但数字型不用。日期型数据默认的格式,在Oracle9i之前的版本中为“DD-MON-YY”,在Oracle9i中为“DD-MON-RR".

当您看完以上的解释后,就已经知道了问题的所在,重新输入例2-7的查询语句。

例 2-7

SQL> SELECT empno,ename,job,sal  2  FROM emp  3  WHERE JOB='SALESMAN';

例 2-7 结果


2.5 使用IN比较运算符(operators)

如果您的老板不但不需要那么多的推销员(salesman),而且也不需要那么多的文员和经理。又该如何打印这份员工的清单的?这时可以使用IN操作符来帮助完成何以工作。您可以使用例2-8的查询语句。

例 2-8

SQL> SELECT empno,ename,sal,job  2  FROM emp  3  WHERE job IN ('SALESMAN','CLERK','MANAGER');

例 2-8 结果


IN是SQL中的有一个很有用的比较运算符。IN用来测试某些值是否在列表中出现。在上面的SQL语句中,只要某一记录的JOB列的值等于IN列表中(即括号中)的任何一个,该记录就会显示出来。

还可以在 IN 只ian加上否定词NOT。NOT IN 用来测试某些值是否不再列中出现。在进一步假设您所在的公司一直没能扭转亏损的势头,老板不得不考虑解雇更多的员工,以进一步的节省开销。他认为公司除了分析员(analyst)以外都可以是要解雇的候选人。他要让您按此要求在为他准备一张员工的清单。于是您发出了例2-9的查询语句。

例 2-9

SQL> SELECT empno,ename,sal,job  2  FROM emp  3  WHERE job NOT IN ('ANALYST','PRESIDENT');

例 2-9 结果


这个例子与前面的例子显示的结果完全相同,但使用了不同的条件。WHERE job NOT IN(‘ANALYST’,‘PRESIDENT’)告诉Oracle只显示那些JOB(职位)既不是ANALYST(分析员)也不是PRESIDENT(老总)的记录。因为在em表中只有5中职位,除了ANALYST和PRESIDENT就是SALESMAN、CLERK和MANAGER了。这一例子也告诉我们可以由不同的查询语句来得到相同的结果。

如果仔细回忆一下老板的观点,即他认为公司中除了分析员(ANALYST)意外都可以是候选人,就会发现例2-9好像与他的要求有点出入,因为他并没有说要解雇的候选人中不好汗总裁(PRESIDENT),即老板自己。

2.6 使用LIKE比较运算符(operators)

我们知道人的记忆是比较有趣的。我们想记住的事情很难记得住,但我们想忘记的事却永远也忘不掉。假设老板让您打印一份所有的推销员的清单时,您不记得SALESMAN的准确拼写,但还记得它的钱3个字符SAL,此时该怎么办呢?可以在您的查询语句中使用LIKE运算符。例如可以使用例2-10的SQL语句。

例 2-10

SQL> SELECT empno,ename,sal,job  2  FROM emp  3  WHERE job LIKE 'SAL%';

例 2-10 结果


您可以用LIKE预算符进行通配符查询。通配符的英文原文为widcard,这个词的愿意为扑克牌中的2或者王,因为他们可以代替任何其他牌,所以称为wildcard。

LIKE运算符可以使用以下两个通配符“%”和“_”。其中

■ “%”代表零个或者多个字符。

■ “_”代表一个且只能是一个字符。

如果您只记得SALESMAN的第一个字符为S,第三个字符为L,第五个字符为S,那么应该如何处理呢?您可以使用例2-11的查询语句。

例 2-11

SQL> SELECT empno,ename,sal,job  2  FROM emp  3  WHERE job LIKE 'S_L_S%';

例 2-11 结果


另外,LIke运算符可以帮助您简单简化某些WHERE子句。例如要显示在1981年雇用的所有员工清单,可以使用例2-12的查询语句。

例 2-12

SQL> SELECT empno,ename,sal,hiredate  2  FROM emp  3  WHERE hiredate LIKE '%81';

例 2-12 结果


如果要查询的字符串中含有“_”“%”,又该怎样处理呢?


------分割线-----------

今晚就先学到这了,明天继续。。。^_^

--------------------------------------------

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

下一篇:oracle学习 第二章 限制性查询和数据的排序 ——03

1 0
原创粉丝点击