21+ORACLE实验指导(5)

2019-08-03 12:10

DEGREE INSTANCES CACHE TABLE_LO SAMPLE_SIZE

LAST_ANAL PAR IOT_TYPE T S NES BUFFER_ ROW_MOVE GLO USE DURATION SKIP COR MON CUSTOMER SYSTEM 1 1

255 121

10240

50

10 40 10240 1

1 YES N

1 1 N ENABLED

NO N N NO DEFAULT DISABLED NO

NO DISABLED NO

2.选择指定的列

我们可以在select关键字后跟一个或多个表列。星号指示Oracle显示表中的所有字段。我们使用同样的select语句,但指定了需要查看的一个表的某些字段:

SQL>select table_name from user_tables TABLE_NAME CUSTOMER STATE 2

rows selected

3.条件查询

到目前为止,我们看到了select命令可用来查看表中所有表列(select *)或部分表列(select column1,column3)。如果只想看特定的数据行,怎么办呢?这就需要用wherer子句来解决了。例如:我们想要查看state_cd值为MA的所有客户,可以用命令: select last_name,state_cd,sales from customer where state_cd = ‘MA’; 结果如下:

LAST_NAME ST SALES Teplow MA 23445.67 1)带and/or的Where子句

where子句指示Oracle查找表中数据,并只返回满足条件的行。在上面的例子中,要求Oracle仅返回state_cd等于MA的数据行。这是通过where state_cd = ‘MA’;来实现的。 有时用户要求返回同时满足多个条件的行。例如:你可能对state_cd为CA且sales超过6000的行感兴趣。语句select * from customer where state_cd = ‘CA’ and sales > 6000;得到下列输出:

LAST_NAME ST SALES

Abbey CA 6969.96 Nicholson CA 6989.99

上面的例子中,我们需要返回满足所有条件的行。如果用户要求检索满足其中两个条件之一的行应该怎么办呢?可用语句select * from customer where state_cd = ‘CA’ or sales>6000;。结果如下:

LAST_NAME ST SALES Teplow MA 23445.67 Abbey CA 6969.96 Nicholson CA 6989.99

第21页

Martin CA 2345.45 Laursen CA 34.34 Bambi CA 1234.55

注意,尽管Telpow的state_cd不等于CA,但由于其sales值超过6000,因此也显示在输出列表中。And 和or是逻辑操作符,决定查询语句中where 条件之间的关系。逻辑条件的概念及其在Oracle产品中的用途及使用方法要用一整本书才可讲清楚。此处精力主要放在实用技术上。表4-1解释了当and和or出现在同一个where子句中时,Oracle是怎样处理的。

应细心分析涉及多个and和or的逻辑(称为复合条件,compound conditions),否则将会引起混乱。例如:检查语句select last_name from customer where state_cd = ’MA’ and state_cd = ‘CA’;。其中两个条件由关键字and连接,只有当两个条件为真(true)时,该复合条件才能为真。

表4-1 逻辑操作符or和and

作用 Or 当所连接的两个条件之一为真时返回TRUE And 当所连接的两个条件都为真时返回TRUE 语句select last_name from customer where state_cd = ’MA’ and state_cd = ‘CA’;中,对state_cd值为MA的数据行,第一个条件为TRUE,而第二个条件为FALSE(因为CA不等于MA)。该逻辑条件说明要显示state_cd既为MA又为CA的数据行,这种情况是不可能出现的,因此,该复合条件永远为假,结果是什么也显示不出来。

2)带NOT的where子句

Oracle支持否定条件的搜索。例如:可能想看看state_cd不为MA的所有客户,语句select * from customer where state_cd != ’MA’;(在SQL*Plus中符号!=的意思是“不等于”),输出结果为:

LAST_NAME ST SALES Abbey CA 6969.96 Nicholson CA 6989.99 Martin CA 2345.45 Laursen CA 34.34

Bambi CA 1234.55 McGraw NJ 123.45 3)带检索范围的where子句

Oracle也支持限定范围的检索。例如:可能需要查找sales值从1到10000之间的所有客户,可执行语句select * from customer where sales between 1 and 10000;。执行结果如下: LAST_NAME ST SALES Abbey CA 6969.96 Nicholson CA 6989.99 Martin CA 2345.45 Laursen CA 34.34 Bambi CA 1234.55 McGraw NJ 123.45 4)带检索表的where子句

Oracle支持在列表内查找项的概念。例如:可用语句select * from customer where state_cd in (‘NJ’,’CA’);检索state_cd为NJ或CA的所有客户,检索结果为: LAST_NAME ST SALES

第22页

操作符 Abbey CA 6969.96 Nicholson CA 6989.99 Martin CA 2345.45 Laursen CA 34.34 Bambi CA 1234.55

McGraw NJ 123.45 5)带匹配检索的where 子句

Oracle支持采用like命令的匹配检索。例如,用户告诉Oracle检索所有以M开头的last_name,显示相应的数据行。可用语句select * from customer where last_name like ‘M%’;输出情况如下:

LAST_NAME ST SALES

Martin CA 2345.45 McGraw NJ 123.45

也可以输入语句select * from customer where last_name like ‘%tin%’;来查找last_name中含有“tin”的行。执行结果如下:

LAST_NAME ST SALES Martin CA 2345.45 6)where子句中的常用操作符

除了上面讲到的这许多例子外,Oracle还提供了许多功能强大的逻辑操作符限制行的检索。表4-2是可在where子句中使用的部分操作符列表。

表4-2 常用比较操作符

操作符 = != ^= <> < > <= >= In not in between A and B not between A and B like ‘%tin%’

4.Order by

我们再来看看customer表。这次,我们希望查询结果以last_name的字母降序排列,命令Select * from customer order by last_name desc;结果如下: LAST_NAME ST SALES Teplow MA 23445.67

样例 Select * from state where state_cd=’MA’; 相等 Select * from state where state_cd!=’MA’; 不相等 Select * from state where state_cd^=’MA’; 同!= Select * from state where state_cd<>’MA’; 同!= Select * from customer where sales<100; 小于 Select * from customer where sales>100; 大于 Select * from customer where sales<=1000; 小于或等于 Select * from customer where sales>=1000; 大于或等于 等于括号内任一成Select * from customer where state_cd in (‘MA’,’NJ’); 员 不等于括号内任一Select * from customer where state_cd not in (‘MA’,’NJ’); 成员 大于等于A与小于等于B 不大于等于A与小于等于B 包括给定子串(即’tin’) Select * from customer where sales between 1 and 50; Select * from customer where sales not between 1 and 50; Select * from customer where last_name like ‘%tin%’ 作用 第23页

Nicholson CA 6989.99 McGraw NJ 123.45 Martin CA 2345.45 Laursen CA 34.34 Bambi CA 1234.55

Abbey CA 6969.96 6 rows selected.

正如我们所见,查询结果按降序排列。若发布命令Select * from customer order by last_name;,查询结果将按升序排列。若发布命令Select * from customer order by state_cd desc,last_name;,则进行多级排序。该命令按state_cd的降序(Vermont 在Mississipi之前)和last_name的升序排列客户。注意,在Order by 子句中未指定升序或降序时,Oracle按升序排列。

5.数据类型及其函数 1)、数值型数据

如果字段只包括数值型数据,select语句对它的数据操作如下表4-3所示:

表4-3算术操作符 运算 样例 Select ytd_sales+current_sales from customer; 加 Select ytd_sales-current_sales from customer where state_cd = ‘NJ’; 减 Select ytd_sales* commission from customer; 乘 Select ytd_sales/12 from customer; 除 正如表4-3所示,我们可以执行所有标准的算术运算:加、减、乘、除。在Oracle中,除了这些标准运算符外,还有许多函数。

函数在SQL语句中用于处理表列内容。在SQL语句中使用函数,函数作用的表列在显示值时将以作用后的值出现。显示数值表列的绝对值是函数的一个很好的样例,值为-321的表列的绝对值为321。在SQL*Plus中,求绝对值的表达式由关键字“abs”、后跟一对括号以及括号中的表列名称三部分组成,如:abs(ytd_sales)。因此SQL语句select abs(ytd_sales) from customer;将显示值321,而不论ytd_sales表列中的数据为-321或是+321。

表4-4列出了一些常见的处理数值型表列的函数,SQL*Plus示例以及显示的值。select语句在表4-4中使用了一个名为dual的表,dual表的拥有者为SYS,在句法正确(即:必须包含from子句),而数据库中又没有其他表可用于该语句时,可使用表dual。

表4-4 数值型常用函数 函数 Ceil(n) Floor(n) Mod(m,n) 返回值 样例 显示 select ceil(10.6) from dual 11 大于等于数值n的最小整数 select floor(10.6) from dual 10 小于等于数值n的最大整数 2 M除以n的余数,若n=0,则select mod(7,5) from dual 返回m Power(m,n) M的n次方 select power(3,2) from dual 9 Round(n,m) 将n四舍五入,保留小数点后select round(1234.5678,2) from 1234.57 dual m位 Sign(n) 1 若n=0,返回0;否则n>0,select sign(12) from dual 返回1;n<0,返回-1 Sqrt(n) select sqrt(25) from dual 5 N的平方根 表4-4给出了部分可用于数值型数据的函数,要得到所有函数表及相应的示例和说明,可在SQL*Plus中键入命令help functions。

第24页

操作符 + - * / 如果我们将数值型函数用于非数值型数据,将出现Oracle错误。如语句select floor(‘ABC’) from dual ;中,因为ABC不是数值,将引起下列的错误:

ERROR: at line 1: ORA-01722:invalid numer 2)、字符型数据

字符型数据是create table语句中定义为char 、varchar或varchar2的域存放的数据。字符型数据可以表示所有的字符、数字或可以从键盘输入的特殊字符。有一系列的用于处理字符型数据的函数。

表4-5列出了最常用的字符型函数。 表4-5常用字符函数

函数 返回值 样例 Initcap(char) initcap(‘mr.teplow’) 把每个字符串的第一Select from dual; 个字符换成大写 Lower(char) lower(‘Mr.Frank 整个字符串换成小写 Select Townson’) from dual; Replace(char,str1,str2) 字符串中所有str1换Select replace(‘Scott’,’S’,’Boy’) from 成str2 dual; Soundex(char) last_name from 字符串的语音表示,Select where 常用于名字的模糊查employee 询,可查找发音相似soundex(last_name)=soundex(‘SMYTHE’) 拼写不同的字符串 Substr(char,m,n) 取出从m字符开始的Select substr(‘ABCDEF’,2,1) from dual; n个字符的子串 Length(char) 求字符串的长度 显示 Mr.Teplow mr.frank townson Boycott SMITH B Select length(‘Anderson’) from 8 dual; 在介绍日期型数据前,我们着重介绍并置运算符,并联结两个字符域时,它非常有用。虽然我们将其列为函数,但它实际是个运算符。用两竖线“||”表示并置运算符。执行语句select ‘ABC’||’DEF’ from dual;,返回文本”ABCDEF”。若某行的last_name值为John,执行语句select ‘Dear’||last_name||’:’ from customer;将返回文本“DearJohn:”。

3)日期型数据

日期型数据是Oracle数据库中第三种常见的数据类型。在建立customer表时,可以很容易字增加一个名为sale_date的日期域,如下所示:

SQL>create table customer

2 3 4

(last_name varchar2(30) not null, state_cd varchar2(2), sales number,

5 sale_date date); Table created.

Oracle中,日期型数据实际含有两个值:日期和时间。由于Oracle总是将日期和时间存放在一起,因此在比较两个日期时要加以注意。Oracle中日期的缺省格式为:DD-MON-YY,DD代表日,MON代表月,YY代表以两位数字表示的年。注意,为保证进入21世纪不出问题,请尽可能的使用四位数字的年份DD-MON-YYYY。

4)日期型函数

Oracle为用户处理日期型数据提供了大量的函数。例如,如果我们要在月末向一位顾客发催款单,在打印催款单时可用函数last_day将正确的日期输出到催款单的抬头。表4-6给

第25页


21+ORACLE实验指导(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:《国际结算》期末试卷及参考答案

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: