第6章,第6章数据类型和运算符◎

文件 4
本章教学微视频:12个28分钟 s学习指引 数据库表由多列字段构成,每一个字段指定了不同的数据类型,不同的数据类型也决定了Oracle在存储时的使用方式,以及在使用时选择什么运算符号进行运算。
本章介绍Oracle的数据类型和运算符,主要内容包括常见数据类型的概念与应用、数据类型的选择方法、常见运算符的应用等。
重点导读 ·熟悉常见数据类型的概念和区别。
·掌握如何选择数据类型。
·熟悉常见运算符的概念和区别。
6.1Oracle数据类型介绍 Oracle支持多种数据类型,按照类型来分,可以分为字符串类型、数字类型、日期类型、LOB类型、LONGRAW&RAW类型、ROWID&UROWID类型。
其中最常用的数据类型包括数值类型、日期与时间类型和字符串类型等。
6.1.1数值类型 数值型数据类型主要用来存储数字,Oracle提供了多种数值数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,其所需要的存储空间也越大。
表6-1为Oracle的常用数值类型。
类型名称NUMBER(
P,S)DECIMAL(
P,S) 表6-1Oracle的常用数值类型描述 数字类型,P为整数位,S为小数位数字类型,P为整数位,S为小数位 第6章数据类型和运算符 续表 类型名称 描述 INTEGERFLOATREAL 整数类型,数值较小的整数浮点数类型,NUMBER(38),双精度实数类型,NUMBER(63),精度更高 Oracle的数值类型主要通过number(m,n)类型来实现,语法格式如下: number(m,n) 其中,m的取值范围为1~38,n的取值范围为-84~127。
number(m,n)是可变长的数值列,允许
0、正值及负值,m是所有有效数字的位数,n是小数点以后的 位数。
例如: number(5,2) 这个字段的最大值是99.999,如果数值超出了位数限制,就会被截取多余的位数。
例如: number(5,2) 但在一行数据中的这个字段输入575.316,则真正保存到字段中的数值是575.32。
例如: number(3,0) 输入575.316,真正保存的数据是575。
对于整数,可以省略后面的
0,直接表示如下: number
(3) 【例6-1】创建表tb_emp1,其中tel字段的数值最大设定为11,在SQLPlus窗口中输入的SQL语句如下: CREATETABLE( idnameageteladdress); tb_emp1 NUMBER(11),VARCHAR2(25),NUMBER
(2),NUMBER(11),VARCHAR2(25) 按Enter键,语句执行结果如图6-1所示,即可完成数据表的创建。
这里可以看到age字段的数据类型为NUMBER
(2),注意到后面的数字
2,这表示的是该数据类型指定 的最大长度,如果插入数值的位数大于
2,则会弹出错误信息。
例如,这里插入一个大于2位的数值来表 示年龄,可以在SQLPlus窗口中输入以下SQL语句: INSERTINTOtb_emp1(age)VALUES(100); 按Enter键,语句执行结果如图6-2所示,可以看到提示的错误信息。
图6-1创建表tb_emp1 图6-2错误信息提示 087 Oracle从入门到项目实践(超值版) 在SQLPlus窗口中修改SQL语句: INSERTINTOtb_emp1(age)VALUES(50); 按Enter键,语句执行结果如图6-3所示,可以看到成功创建行。
在SQLPlus窗口中输入查看表结构的SQL语句: SELECT*FROMtb_emp1; 按Enter键,语句执行结果如图6-4所示,可以看到成功创建行。
图6-3插入一行数据 图6-4查看表结构 【例6-2】创建表tb_emp2,其中字段a、b、c数据类型依次为NUMBER
(2)、NUMBER
(4)、NUMBER
(6),在SQLPlus窗口中输入的SQL语句如下: CREATE( abc); TABLEtb_emp2 NUMBER
(2),NUMBER
(4),NUMBER
(6) 按Enter键,语句执行结果如图6-5所示,可以看到成功创建表。
执行成功之后,便用DESC查看表结构,在SQLPlus窗口中输入的SQL语句如下: SQL>DESCtb_emp2; 按Enter键,语句执行结果如图6-6所示,可以看到表的结构。
图6-5创建表tb_emp2 图6-6查询表结构 【例6-3】创建表tb_emp3,其中字段a、b、c的数据类型依次为NUMBER(8,1)、NUMBER(8,3)和NUMBER(8,2),向表中插入数据8.1、8.15和8.123,在SQLPlus窗口中输入的SQL语句如下: CREATETABLE( aNUMBERbNUMBERcNUMBER tb_emp3 (8,1),(8,3),(8,2) 088 ); 按Enter键,语句执行结果如图6-7所示,可以看到创建的数据表。
向表中插入数据,在SQLPlus窗口中输入的SQL语句如下: SQL>INSERTINTOtb_emp3VALUES(8.12,8.15,8.123); 按Enter键,语句执行结果如图6-8所示,可以看到创建的行。
第6章数据类型和运算符 图6-7创建表tb_emp3 图6-8向表中插入数据 插入数据后,查看输入的数据信息。
在SQLPlus窗口中输入的SQL语句如下: SQL>SELECT*FROMtb_emp3; 按Enter键,语句执行结果如图6-9所示,从结果可以看出,8.12和8.123分别被存储为8.1和8.12。
图6-9查看插入的数据 6.1.2日期与时间类型 Oracle中表示日期的数据类型主要包括DATE和TIMESTAMP,具体含义和区别如表6-2所示。
表6-2Oracle常用日期与时间类型 类型名称DATE TIMESTAMP 描述 日期(日-月-年),DD-MM-YY(HH-MI-SS),用来存储日期和时间,取值范围是公元前4712年到公元9999年12月31 日期(日-月-年),DD-MM-YY(HH-MI-SS:FF3),用来存储日期和时间,与date类型的区别就是显示日期和时间时更精确,date类型的时间精确到秒,而timestamp的数据类型可以精确到小数秒,timestamp存放日期和时间还能显示上午、下午和时区 【例6-4】创建数据表tb_emp4,定义数据类型为date的字段d,向表中插入值'12-4月-2018',在SQLPlus窗口中输入创建表tb_emp4的SQL语句如下: CREATETABLE( idname tb_emp4 NUMBER(10),VARCHAR2(25), 089 Oracle从入门到项目实践(超值版) birthdayteladdress); date,NUMBER(11),VARCHAR2(25) 按Enter键,语句执行结果如图6-10所示,即可看到创建好的表。
在插入数据之前,需要知道数据库默认的时间格式,在SQLPlus窗口中输入查询系统时间格式的SQL 语句如下: SQL>selectsysdatefromdual; 按Enter键,语句执行结果如图6-11所示,可以看到系统默认的时间格式。
图6-10创建表tb_emp4 图6-11查询系统时间格式 向表中插入时间数据,在SQLPlus窗口中输入的SQL语句如下: SQL>INSERTINTOtb_emp4(birthday)values('12-4月-2018'); 按Enter键,语句执行结果如图6-12所示,即可创建1行。
查看输入的时间数据,在SQLPlus窗口中输入的SQL语句如下: SQL>SELECT*FROMtb_emp4; 按Enter键,语句执行结果如图6-13所示,即可看到创建的表内容。
图6-12向表中插入时间数据 图6-13查看输入的时间数据 如果用户想按照指定的格式输入时间,需要修改时间的默认格式。
例如,输入格式为年-月-日,修改的SQL语句如下: SQL>altersessionsetnls_date_format='yyyy-mm-dd'; 按Enter键,语句执行结果如图6-14所示,即可看到会话已更改的信息提示。
然后查看输入的时间数据,可以看到时间格式发生了改变,如图6-15所示。
【例6-5】创建数据表tb_emp5,定义数据类型为DATE的字段d,向表中插入“YYYY-MM-DD”和“YYYYMMDD”字符串格式日期,在SQLPlus窗口中输入的SQL语句如下: CREATETABLEtb_emp5 ( name VARCHAR2(25), 090 birthdaytel); date,NUMBER(11) 按Enter键,语句执行结果如图6-16所示,即可看到成功创建表。
第6章数据类型和运算符 图6-14修改时间格式 修改日期的默认格式,SQL语句如下: SQL>altersessionsetnls_date_format='yyyy-mm-dd'; 按Enter键,语句执行结果如图6-17所示。
图6-15查看输入的时间数据 图6-16创建表tb_emp5 图6-17修改默认的日期格式 向表中插入“YYYY-MM-DD”格式日期: SQL>INSERTINTOtb_emp5(birthday)values('2018-05-08'); 按Enter键,语句执行结果如图6-18所示。
向表中插入“YYYYMMDD”格式日期: SQL>INSERTINTOtb_emp5(birthday)values('20180408'); 按Enter键,语句执行结果如图6-19所示。
图6-18向表中插入时间数据 图6-19再次向表中插入时间数据 查看插入日期数据结果: SQL>SELECT*FROMtb_emp5; 按Enter键,语句执行结果如图6-20所示,从运算结果中可以看出,各个不同类型的日期值都正确地 091 Oracle从入门到项目实践(超值版) 插入到了数据表中。
【例6-6】创建表tb_emp6并向表tb_emp6中插入系统当前日期。
首先创建表,SQL语句如下: CREATETABLEtb_emp6( daydate); 按Enter键,语句执行结果如图6-21所示。
图6-20查看插入的日期数据 向表中插入系统当前日期,SQL语句如下: SQL>INSERTINTOtb_emp6values(SYSDATE); 按Enter键,语句执行结果如图6-22所示。
查看插入结果,SQL语句如下: SQL>SELECT*FROMtb_emp6; 按Enter键,语句执行结果如图6-23所示。
图6-21创建表tb_emp6 图6-22向表中插入系统当前日期 图6-23查询插入的结果 【例6-7】向tb_emp6表中插入系统日期和时间并指定格式,首先删除表中的数据,SQL语句如下: DELETEFROMtb_emp6; 按Enter键,语句执行结果如图6-24所示。
向表中插入系统当前日期,SQL语句如下: SQL>INSERTINTOtb_emp6values(to_date('2018-03-1713:14:20','yyyy-MM-ddHH24:mi:ss')); 按Enter键,语句执行结果如图6-25所示。
查看插入结果,SQL语句如下: SQL>SELECT*FROMtb_emp6; 按Enter键,语句执行结果如图6-26所示,从运算结果中可以看出,只显示日期,时间被省略掉了。
【例6-8】创建数据表tb_emp7,定义数据类型为TIMESTAMP的字段ts,向表中插入值'2018-9-1617:03:00.9999',创建数据表tb_emp7,SQL语句如下: CREATETABLEtb_emp7 092 (ts); TIMESTAMP 按Enter键,语句执行结果如图6-27所示。
第6章数据类型和运算符 图6-24删除表中数据 图6-25向表中插入系统当前日期 图6-26查询插入的日期数据 图6-27创建表tb_emp7 向表中插入数据,SQL语句如下: INSERTINTOtb_emp7values(to_timestamp('2018-9-1617:03:00.9999','yyyy-mm-ddhh24:mi:ss:ff')); 按Enter键,语句执行结果如图6-28所示。
查看插入结果,SQL语句如下: SQL>SELECT*FROMtb_emp7;TS------------------------------16-9月-1805.03.00.999900下午 按Enter键,语句执行结果如图6-29所示。
图6-28向表中插入数据 图6-29查询插入的数据 6.1.3字符串类型 字符串类型用来存储字符串数据,包括CHAR、NCHAR、VARCHAR2、NVARCHAR2和LONG5种,如表6-3所示。
093 Oracle从入门到项目实践(超值版) 表6-3Oracle中字符串数据类型 类型名称 说明 取值范围/B CHAR 固定长度字符串 0~2000 NCHAR 根据字符集而定的固定长度字符串 0~1000 VARCHAR2 可变长度的字符串 0~4000 NVARCHAR2 根据字符集而定的可变长度字符串 0~1000 LONG 超长字符串 0~2G VARCHAR2、NVARCHAR2和LONG类型是变长类型,对于其存储需求取决于列值的实际长度,而不是取决于类型的最大可能尺寸。
例如,一个VARCHAR2(10)列能保存最大长度为10个字符的一个字符串,实际的存储需要是字符串的长度。
【例6-9】创建数据表tb_emp8,定义字段ch和vch的数据类型依次为CHAR
(4)、VARCHAR2
(4),向表中插入数据“ab”,创建表tb_emp8,SQL语句如下: CREATETABLEtb_emp8(chCHAR
(4),vchVARCHAR2
(4) ); 按Enter键,语句执行结果如图6-30所示,即可完成表的创建。
输入表数据,SQL语句如下: INSERTINTOtb_emp8VALUES('ab','ab'); 按Enter键,语句执行结果如图6-31所示,即可完成行的创建。
图6-30创建表tb_emp8 图6-31插入表数据 查询ch字段的存储长度,执行SQL语句如下: SQL>Selectlength(ch)fromtb_emp8; 按Enter键,语句执行结果如图6-32所示,即可查看ch字段的存储长度。
查询vch字段的存储长度,执行SQL语句如下: SQL>Selectlength(vch)fromtb_emp8; 按Enter键,语句执行结果如图6-33所示,即可查看vch字段的存储长度。
提示:从上述两个实例可以看出,固定长度字符串在存储时长度是固定的,而变长字符串的存储长度根据实际插入的数据长度而定。
094 第6章数据类型和运算符 图6-32查询字段ch的存储长度 图6-33查询字段vch的存储长度 6.1.4其他数据类型 除上面介绍的数值类型、日期与时间类型和字符串类型外,Oracle还支持其他数据类型,如表6-4所示。
表6-4Oracle支持的其他数据类型 类型 含义 存储描述 RAWLONGRAWBLOBCLOBNCLOBBFILEROWIDNROWID 固定长度的二进制数据可变长度的二进制数据二进制数据字符数据根据字符集而定的字符数据存放在数据库外的二进制数据数据表中记录的唯一行号二进制数据表中记录的唯一行号 最大长度2000B最大长度2GB最大长度4GB最大长度4GB最大长度4GB最大长度4GB10B最大长度4000B 【例6-10】创建数据表tb_emp9,并插入一个固定长度的二进制数据,创建数据表,SQL语句如下: CREATETABLEtb_emp9(raRAW
(4) ); 按Enter键,语句执行结果如图6-34所示,即可完成表的创建。
输入表数据,SQL语句如下: INSERTINTOtb_emp9VALUES('101010'); 按Enter键,语句执行结果如图6-35所示,即可完成表数据的输入。
图6-34创建表tb_emp9 图6-35向表中插入数据 095 Oracle从入门到项目实践(超值版) 查询ra字段的存储长度,执行SQL语句如下: Selectlength(ra)fromtb_emp9; 按Enter键,语句执行结果如图6-36所示,即可查询ra字段的存储长度。
图6-36查询字段ra字段的存储长度 6.2数据类型的选择 Oracle提供了大量的数据类型,为了优化存储,提高数据库性能,在任何情况下均应使用最精确的类型。
即在所有可以表示该列值的类型中,该类型使用的存储最少。

1.整数和小数数值数据类型只有NUMBER型,但是NUMBER功能不小,它可以存储正数、负数、零、定点数和精度为30位的浮点数。
其格式为number(m,n),其中m为精度,表示数字的总位数,范围为1~38;n为范围,表示小数点右边的数字的位数,范围为-84~127。
如果不需要小数部分,则使用整数来保存数据,可以定义为number(m,0)或者number(m);如果需要表示小数部分,则使用number(m,n)。

2.日期与时间类型如果只需要记录日期,则可以使用DATE类型。
如果需要记录日期和时间,可以使用IMESTAMP类型。
特别是需要显示上午、下午或者时区时,必须使用IMESTAMP类型。

3.字符类型之间选择CHAR是固定长度字符,VARCHAR是可变长度字符;CHAR会自动补齐插入数据的尾部空格,VARCHAR不会补齐尾部空格。
CHAR是固定长度,所以,它的处理速度比VARCHAR2要快,它的缺点是浪费存储空间。
所以,对存储不大,但在速度上有要求的可以使用CHAR类型;反之,可以使用VARCHAR2类型来实现。
6.3常见运算符介绍 运用运算符可以更加灵活地使用表中的数据,常见的运算符类型有算术运算符、比较运算符、逻辑运算符、位运算符等。
096 第6章数据类型和运算符 6.3.1算术运算符 算术运算符是SQL中最基本的运算符,用于各类数值运算,包括加(+)、减(-)、乘(*)、除(/),如表6-5所示。
运算符 表6-5Oracle中的算术运算符 作用 + 加法运算 - 减法运算 * 乘法运算 / 除法运算,返回商 下面分别讨论不同算术运算符的使用方法。
【例6-11】创建表tb_emp10,定义数据类型为NUMBER的字段num,插入值64,对num值进行算术运算。
首先创建表tb_emp10,输入SQL语句如下: CREATETABLEtb_emp10(numNUMBER); 按Enter键,语句执行结果如图6-37所示,即可完成表的创建。
向字段num插入数据50,SQL语句如下: INSERTINTOtb_emp10values(50); 按Enter键,语句执行结果如图6-38所示,即可完成数据的插入。
图6-37创建表tb_emp10 图6-38向表中插入数据 接下来,对num值进行加法和减法运算,SQL语句如下: SQL>SELECTnum,num+10,num-3+5,num+5-3,num+36.5FROMtb_emp10; 按Enter键,语句执行结果如图6-39所示,即可完成数据的加法和减法运算。
由计算结果可以看到,可以对num字段的值进行加法和减法运算,而且由于“+”和“–”的优先级相同,因此,先加后减和先减后加的结果是相同的。
【例6-12】对tb_emp10表中的num进行乘法、除法运算。
SQL>SELECTnum,num*2,num/2,num/3FROMtb_emp10; 按Enter键,语句执行结果如图6-40所示。
从运算结果中可以看出,对num进行除法运算时,由于50 097 Oracle从入门到项目实践(超值版) 无法被3整除,因此,Oracle对num/3求商的结果保存到了小数点后面7位,结果为16.6666667。
图6-39完成数据的加减运算 图6-40对数据进行乘法与除法运算 在数学运算时,除数为0的除法是没有意义的,因此,除法运算中的除数不能为
0,如果被0除,则返回错误提示信息。
【例6-13】用0除num。
SQL>SELECTnum/0FROMtb_emp10; 按Enter键,语句执行结果如图6-41所示。
图6-41用0处于数值的错误提示 6.3.2比较运算符 比较运算符用于比较运算,包括大于(>)、小于(<)、等于(=)、大于或等于(>=)、小于或等于(<=)、不等于(!
=),以及IN、BETWEEN…AND、ISNULL、LIKE等。
比较运算符经常在SELECT的查询条件子句中使用,用来查询满足指定条件的记录。
Oracle中的比较运算符如表6-6所示。
运算符=<=><>(!
=)<=>=>ISNULLISNOTNULLBETWEENAND 表6-
6 Oracle中的比较运算符 作用等于安全的等于不等于小于或等于大于或等于大于判断一个值是否为NULL判断一个值是否不为NULL判断一个值是否落在两个值之间 098 第6章数据类型和运算符 续表 运算符INNOTINLIKE 作用判断一个值是IN列表中的任意一个值判断一个值不是IN列表中的任意一个值通配符匹配 下面分别讨论不同比较运算符的含义。

1.等于运算符=等号“=”用来判断数字、字符串和表达式是否相等。

2.不等于运算符!
=“!
=”用于判断数字、字符串、表达式不相等的判断。

3.小于或等于运算符<=“<=”用来判断左边的操作数是否小于或者等于右边的操作数。

4.小于运算符<“<”运算符用来判断左边的操作数是否小于右边的操作数。

5.大于或等于运算符>=“>=”运算符用来判断左边的操作数是否大于或者等于右边的操作数。

6.大于运算符>“>”运算符用来判断左边的操作数是否大于右边的操作数。

7.BETWEEN…AND运算符 BETWEEN…AND运算符用于测试是否在指定的范围内,通常和WHERE字句一起使用,BETWEEN…AND条件返回一个介于指定上限和下限之间的范围值。
例如下面的例子,选出出生在1980—1990年的教师姓名: SELECTnameFROMteacherWHEREbirthBETWEEN'1980'AND'1990'; 上述语句包含上限值和下限值,与下面的语句效果一样。
SELECTnameFROMteacherWHEREbirth>='1980'ANDbirth<='1990';
8.IN运算符 IN运算符用来判断操作数是否为IN列表中的其中一个值。
NOTIN运算符用来判断操作数是否不是IN列表中的其中一个值。
例如选出年龄是35岁和45岁的教师: SELECTnameFROMteacherWHEREageIN(35,45);
9.LIKELIKE运算符用来匹配字符串。
在一个学校中,教师有多位,如果想要查找符合某个条件的教师,就可以使用LIKE运算符进行查询。
099 Oracle从入门到项目实践(超值版) LIKE运算符在进行匹配时,可以使用下面两种通配符:
(1)“%”,用来代表有零个或者多个字符组成的任意顺序的字符串。

(2)“_”,只能匹配一个字符。
例如选出张姓的所有教师: SELECTnameFROMteacher WHEREnameLIKE'张%'; 6.3.3逻辑运算符 在Oracle中逻辑运算符的求值所得结果均为1(TRUE)、0(FALSE),这类运算符有逻辑非(NOT或者!
)、逻辑与(AND或者&&)、逻辑或(OR或者||)、逻辑异或(XOR),如表6-7所示。
表6-7Oracle中的逻辑运算符 运算符NOTANDOR 作用逻辑非逻辑与逻辑或 这3个运算符的作用如下。

(1)NOT运算符:又称取反运算符,NOT通常是单目运算符,即NOT右侧才能包含表达式,是对结果取反,如果表达式结果为True,那么NOT的结果就为False;否则,如果表达式的结果为False,那么NOT的结果就为True。
NOT运算符后面常常和IN、LIKE、BETWEEN…AND和NULL等关键字一起使用。
例如,选择学生年龄不是25或者26的学生姓名: SELECTnameFROMstudentWHEREageIN(25,26);
(2)AND运算符:对于AND运算符来说,要求两边的表达式结果都为True,因此,通常称为全运算符,如果任何一方的返回结果为NULL或False,那么逻辑运算的结果就为False,也就是说记录不匹配WHERE子句的要求。
例如,选择学生年龄是25而且是姓张的学生姓名: SELECTnameFROMstudentWHEREage=25ANDnameLIKE'张%';
(3)OR运算符:OR运算符又称或运算符,也就是说,只要左右两侧的布尔表达式任何一方为True,结果就为True。
例如,选择学生年龄是25或者姓张的学生姓名: SELECTnameFROMstudentWHEREage=25ORnameLIKE'张%'; 这样,无论年龄为25的学生还是姓张的学生,都会被选择出来。
6.3.4位运算符 位操作运算符是参与运算的操作数,按二进制位进行运算,包括位与(&)、位或(|)、位非(~)、位异或(^)、左移(<<)、右移(>>)6种,如表6-8所示。
100 第6章数据类型和运算符 运算符位与(&)位或(|)位非(~)位异或(^)左移(<<)右移(>>) 表6-8Oracle中的位运算符 作用位于运算位或运算位非运算位异或运行左移运算右移运算 6.3.5运算符的优先级 运算符的优先级决定了不同的运算符在表达式中计算的先后顺序,表6-9列出了Oracle中的各类运算符及其优先级。
表6-9运算符按优先级由低到高排列 优先级 运算符 最低 =(赋值运算),:= ORANDNOT=(比较运算),<=>,>=,>,<=,<,<>,!
=,IS,LIKE,REGEXP,IN & <<,>> -,+ *,/ -(负号) 最高 !
可以看到,不同运算符的优先级是不同的。
一般情况下,级别高的运算符先进行计算,如果级别相同,Oracle按表达式的顺序从左到右依次计算。
当然,在无法确定优先级的情况下,可以使用圆括号()来改变优先级,并且这样会使计算过程更加清晰。
6.4就业面试技巧与解析 6.4.1面试技巧与解析(一) 面试官:何时可以到职?应聘者:如果被录用的话,随时都可以任职。
101 Oracle从入门到项目实践(超值版) 6.4.2面试技巧与解析(二) 面试官:如何适应办公室工作的新环境?应聘者:我想我应该从以下三个方面来适应办公室新环境:首先办公室里每个人有各自的岗位与职责,不得擅离岗位;其次,根据领导指示和工作安排,制订工作计划,提前预备,并按计划完成;再次,多请示并及时汇报,遇到不明白的要虚心请教;最后,抓间隙时间,多学习,努力提高自己的政治素质和业务水平。
102

标签: #苹果 #怎么改 #优盘 #画质 #垃圾文件 #美工 #文件 #怎么弄