当前位置:首页 > 第2章 sql查询、sql函数与数据库对象
第二章 sql查询、sql函数与数据库对象
目标:
1、了解oracle的数据类型。
2、了解数据定义语言和数据操纵语言。 3、了解事务控制语言和数据控制语言。 4、掌握sql操作符和sql函数的用法。 5、了解理解和使用同义词。 6、理解和使用序列。
一、oracle 的数据类型。 1、字符型。 (1)char类型
是一种固定长度的数据类型,长度可以为1-2000字节。在为字段定义该数据类型时,可以不指定字段长度,那么默认长度就是1个字节。假设用户给某个字段定义成char类型,长度50字节。如果用户输入该类型字段的值时,其长度小于2000字节,则用空格填充至固定长度50字节。如果大于指定长度,就出错。 (2)varchar2类型。
varchar2类型。是可变长度的字符串,该类型的长度可以为1-4000个字节范围。在定义该数据类型时,必须指定其大小。如果某字段定义成varchar2类型,长度50字节,即使将来实际输入字段的值只有3个字节,也不用空格填充,与char相比,节省存储空间。 (3)long数据类型。
可变长度数据类型。最多能存储2G字节。一般不使用,如果要使用,请注意:一个表中只有一个字段可以为long数据类型;long字段不能定义为唯一约束或主键约束;long列上不能建索引。
2、数字型。 number类型。
这种类型看上去只有一种,但使用非常灵活,所以能表达正数、负数、零、小数等。使用格式为number(p,s),其中p表示数字的总位数,小数点也占一位,s表示数字的小数位数。说明: number(10,2) //表示整个数字长度为10位(含小数点),小数部分占2位。
number(10) //表示整个数字长度为10位,且是一个整数。
number(10,-1) //表示整个数字长度为10位,等价于number(10)。
number(10,-2) //表示整个数字长度为10位,精确到百分位。
比如:
如果某个字段定义成number(10,2),该字段取值如下。 12345678.90 保存在该字段中的值为12345678.9 1234.567890 保存在该字段中的值为1234.57 如果某个字段定义成number(10),该字段取值如下。 1234567890 保存在该字段中的值为1234567890 1234.567890 保存在该字段中的值为1235
如果某个字段定义成number(10,-2),该字段取值如下。 1234567890 保存在该字段中的值为1234567900
1234567846 保存在该字段中的值为1234567800 1234.567890 保存在该字段中的值为1200
3、日期型。
日期数据类型用于存储日期值和时间值。 (1)date数据类型。
用于存储表中的日期和时间数据。Oracle使用自己的格式存储日期,使用7个字节固定长度,每个字节分别存储世纪、年、月、日、小时、分钟、秒。建表时定义字段的日期类型,只有date类型可选。
(2)timestamp数据类型。
该数据类型用于存储日期的年、月、日、小时、分、秒,其中秒值精确到小数点后6位,该数据类型同时包含时区信息。使用systimestamp函数可以获取系统当前日期、时间和时区。
4、二进制类型。
raw和long raw数据类型用于存储二进制数据。
5、LOB数据类型。
该类型用于存储多达4G的非结构化信息,比如声音剪辑、视频剪辑等。其中,CLOB用于存储大量的字符数据,BLOB用于存储较大的二进制对象,如图形、声音、视频等。
二、oracle中的伪列与伪表。
伪列就像oracle中某个表中的某个字段,但该列实际上并未存储在表中。伪列可以从表中查询,但不能插入、更新或删除它们的值。 (1)rowid伪列。
数据库中的每一行都有一个行地址,rowid伪列就保存了该行地址信息。可以使用rowid值来定位表中的一行。通常,rowid的值可以唯一的标识表中的一行。伪列的作用是使系统能以最快的方式访问表中的某一行。 对比如下两条语句。 SQL>select empno,ename from scott.emp; SQL>select rowid,empno,ename from scott.emp; (2)rownum伪列。
对于查询返回的每一行,rownum伪列返回一个数值代表行的次序,返回的第一行的rownum值为1,第二行的rownum的值为2,依此类推。通过rownum伪列,用户可以限制查询返回的行数。(sql server中限制返回行数是用top n来表示,还记得么?)比如。 SQL>select * from scott.emp where rownum<=5 //查找前5条。
(3)dual伪表。
这是一个系统中不存在的表,按语法格式要求表,但又不需要具体表名的地方使用。
三、基本的sql语句。
1、创建表命令(create table)
格式:create table [schema.]table (column datatype,column datatype, ?? ); 如: SQL>create table itjob.examp (a varchar2(10) primary key, b varchar2(10) not null, c date default systimestamp, d number(10) check (d>10 and d<100 ) ) 2、修改表命令(alter table)
更改某个字段的定义,格式如下。
Alter table 表名 modify (字段 类型); 向表中添加新的字段,格式如下。 Alter table 表名 add (字段 类型); 删除表中现有字段,格式如下。 Alter table 表名 drop column 字段;
3、删除表命令(drop table) 格式如下。 Drop table 表名;
4、select命令。
Select语句及其包含的子句如order by等的用法,与sql server完全一致。
5、根据现有表创建新表。 Create table 新表名 as select * from 现有表。
6、通过as使用别名。
比如:下面两句都对。你看出它们的区别了么?第二句别名可以使用特殊字符如空格等。 Select empno,ename as 姓名 from scott.emp; Select empno,ename as “姓 名” from scott.emp;
7、insert 命令。
格式与sql server完全一致。注意的是,插入记录中日期的值,要通过单引号将其引起
来。如日期为2005年12月6日,就要写成‘06-12月-05’,比如:
SQL>create table order_master (os char(1),del_date date); //创建一个带日期字段的表 SQL>insert into order_master values ('1','25-6月-05'); //插入正确 SQL>insert into order_master values('2',to_date('2005-07-31','yyyy-mm-dd')); //插入正确 也可以插入来自其它表的记录。Insert命令可以用来复制其它表中的记录。格式如下。 SQL>insert into 表名1 select * from 表名2; //从表2中复制记录到表1中,与sql server完全一样。
8、update命令。
与sql server完全一样。
9、delete命令。
与sql server完全一样。
四、事务控制语句。 1、commit命令。
事务提交命令。格式:commit;
2、savepoint命令。
用于设置保存点的命令。格式如下。 Savepoint savepoint_1; //savepoint_1是指保存点名字,可任意命名。
3、rollback命令。格式:rollback;
比如: SQL>update order_master set del_date=?30-6月-05? where orderno=?1?; SQL>savepoint mark1; SQL>delete from order_master where orderno=?1?; SQL>savepoint mark2; SQL>rollback to savepoint mark1; SQL>commit; 要理解上述过程,请分别在上述每条语句后加一条查询该表的语句来看看结果的变化。
四、数据控制语句。 1、grant命令。
如果用户创建了某个数据库对象,比如表、视图、序列、同义词等,该用户就具有对这些对象的所有权限。当该用户需要将操纵这些对象的权限授予其它用户时,就需要使用grant命令授权。
比如,将order表的查询和更新权限授予martin用户,如下。
共分享92篇相关文档