登陆注册
14082400000006

第6章 Oracle数据库基础——SQL语言(1)

5.1 SQL概述

关系数据库语言SQL对关系模型的发展和商用RDBMS的研制起着很重要的作用,是关系数据库的标准语言,广泛应用于商用系统中。

SQL不仅具有丰富的查询功能,而且具有数据定义和数据控制功能,是集DDL、DML、DCL为一体的标准的关系数据库语言。不同的数据库厂家在自己的数据库产品(包括Oracle)中都实现了标准SQL语句的功能,并且都在标准SQL的基础上进行了扩充。

本章较详细地介绍在Oracle中如何使用数据定义语言DDL实现表、视图、索引三类对象的创建、修改、删除,以及在建立表结构后如何使用数据操作语言DML对表进行查询、插入、更新、删除数据等操作,同时介绍在查询、插入、更新、删除操作时如何使用各种SQL函数。最后介绍如何使用数据控制语言DCL实现权限的授予和回收,以及如何将SQL语句嵌入到宿主语言中使用等内容。

5.1.1 SQL发展历程

SQL语言虽然名为查询语言,但实际上具有定义、查询、更新和控制等多种功能。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。目前,绝大多数流行的关系型数据库管理系统,如Oracle,Sybase,Microsoft SQL Server,Access等都采用了SQL语言标准。虽然很多数据库都对SQL语句进行了再开发和扩展,但是包括SELECT,INSERT,UPDATE,DELETE,CREATE和DROP在内的标准的SQL命令仍然可以用来完成几乎所有的数据库操作。

最早的SQL标准是于1986年10月由ANSI公布的,随后,ISO采纳它为国际标准,1989年4月,ISO提出具有完整性特征的SQL,称为SQL-89。在SQL-89的基础上经过三年的研究和修改,ISO于1992年11月公布了SQL新标准,即SQL-92。SQL标准化工作还在继续,新的标准被命名为SQL3。

5.1.2 SQL特点

(1)SQL是一种一体化的语言

SQL语言集数据定义、数据操纵、数据查询、数据控制功能于一体,可以完成数据库生命周期中的全部工作。

(2)SQL语言是一种高度非过程化的语言

SQL语言是非过程化的语言,它没有必要告诉计算机“如何”去做,而只需要描述用户要“做什么”,SQL语言就可以将要求交给系统,自动完成全部工作。这不但减轻用户的负担,而且提高数据的独立性。

(3)SQL语言非常简洁

虽然SQL语言功能很强,但只有为数不多的几条命令,给出了分类的命令动词。另外SQL的语法非常简单,很接近自然语言,因此容易学习和掌握。

(4)同一种语法结构提供两种使用方式

SQL语言可以直接以命令方式交互使用,也可以嵌入到程序设计语言(如:C,COBOL,FORTRAN等)中以程序方式使用。现在很多数据库应用开发工具,都将SQL语言直接融入到自身的语言中,使用起来更方便。此外,尽管SQL的使用方式不同,但SQL语言的语法基本上是一致的。

(5)面向集合的操作方式

非关系数据模型采用面向记录的操作方式,操作对象是一条记录。而SQL语言采用集合操作方式,不仅操作对象、操作结果都可以是元组的集合(关系),而且一次插入、更新、删除的对象也可以是元组的集合(关系)。

5.2 SQL的数据定义

SQL的数据定义功能包括数据库、基本表、视图、存储过程和索引的建立、修改、删除。但SQL不提倡修改视图和索引的定义,如果想修改视图和索引的定义,只能先将它们删除,然后再重建。有些实际的关系数据库产品(如Oracle)允许修改视图的定义。

5.2.1 基本表的建立、修改、删除

表是关系数据库中最重要的数据库对象,其他的数据库对象的创建及各种操作都是围绕表进行的,可以将表看作含列和行的表单。表是数据库中存储数据的结构。

5.2.1.1 示例数据库表结构

后面的例子中要用到“学生——课程”数据库中的表,在此先介绍“学生——课程”数据库中“学生”表、“课程”表和“学生选课”表这三个表的结构。

“学生”表student由学号(sno)、姓名(sname)、性别(ssex)、年龄(sage)、所在系(sdept)五个属性组成,可记为:student(sno,sname,ssex,sage,sdept),其中主键为sno。

“课程”表course由课程号(cno)、课程名(cname)、教师名tname(cpno)、学分(ccredit)四个属性组成,可记为:course(cno,cname,tname,ccredit),其中主键为cno。

“学生选课”表sc由学号(sno)、课程号(cno)、成绩(grade)三个属性组成,可记为:sc(sno,cno,grade),其中主键为(sno,cno),sno 和cno是该表的外键,分别参考student和course表的sno和cno列。

另外,介绍部门和雇员数据库中用到的“部门”信息表,“雇员”信息表和“工资等级”表的结构。

“部门”信息表dept由部门号(deptno)、部门名称(dname)、部门地点(loc)3个属性组成,可记为:DEPT(deptno,dname,loc),其中主键为deptno。

“雇员”信息表emp由雇员编号(empno)、雇员姓名(ename)、工作(job)、经理编号(mgr)、工资(sal)、部门号(deptno)6个属性组成,可记为:emp(empno,ename,job,mgr,sal,deptno),其中主键为empno。deptno是该表的外键,参考DEPT表的deptno列。

“工资等级”表SALGRADE由等级号(grade)、最低工资(lowsal)、最高工资(highsal)3个属性组成,可记为SALGRADE(grade,lowsal,highsal),其中主键为grade。

5.2.1.2 创建基本表

1.创建基本表的语法

一个用户中表名要唯一,一个表中列名要唯一。

数据类型是Oracle所提供的基本数据类型。

建表的同时可以定义与该表有关的完整性约束条件保证数据的正确和有效,这些完整性约束条件被存入到系统的数据字典中。如果约束条件涉及表中的多列时,必须定义在表级,否则既可以定义在表级,也可以定义在列级。

通过使用DEFAULT 选项可以给列设定一个默认值。此选项可以避免在插入数据时没有指定列的值时往该列中插入NULL值。默认值可以是一个常量、表达式、SQL函数,比如:SYSDATE、USER等,默认值必须与列的数据类型匹配。例如:

SQL>CREATE TABLE AUDIT1(USERNAME VARCHAR2(12)DEFAULT USER,

TIMES DATE DEFAULT SYSDATE);

表名和列名取名时第一个字符必须是A~Z或a~z(存储时全为大写),第一个字母之后的字符可以任意,包括数字或$、#和(不能是逗号)。取名最长不得超过30个字符。

2.Oracle提供的基本数据类型

当建立一张表时,必须指定表中所有列的数据类型。Oracle有许多数据类型可以满足用户的需求。数据类型总的可以划分成字符型、数字型、日期型、LOB类型等。

(1)字符类型

字符数据类型用于存储字符数据。当定义字符数据时,必须指定列的长度。有下列两种字符数据类型。

CHAR(<SIZE>):存储固定长度的字符串,最大长度由SIZE确定。CHAR列中存储的数据如果不到SIZE的长度,补充空格达到SIZE的长度。SIZE的值从1到2000。

VARCHAR2(<SIZE>):是一个可变长度的字符串,最大长度由SIZE确定,最多可存储4000字节。VARCHAR2变量存储多少数据,就只需要多少空间。

(2)数字类型

数字类型用于存储正负整数、浮点数,值的范围从-1×10-130到9.999……99×10125,精度可达38位。超出范围将引起错误。有一种数字类型NUMBER[<P>,<S>],可以存储总的长度是P位,小数点后是S位。不一定非要定义总长度与小数点后的长度。

(3)日期类型

日期类型DATE用于存储日期和时间信息。每一个日期类型中包含下列信息:世纪(CENTURY)、年(YEAR)、月(MONTH)、日(DAY)、小时(HOUR)、分(MINUTE)、秒(SECOND)。

SYSDATE系统函数返回的是正在联结的数据库服务器的系统日期和时间。如果在日期中没有指定时间TIME,默认时间为半夜零点零分零秒(00:00:00)。

(4)LOB数据类型

LOB(Large Object,大对象)数据类型存储非结构化的数据,比如一个二进制文件、一幅图片或一个外部文件。有三种LOB类型,这些LOB类型的目的和存储位置是有区别的。

一个LOB列可以存储高达4 GB的数据,数据存储在数据库中。对LOB数据的操作需要使用DBMSLOB包。在表的LOB列中存储了LOB的定位符(LOCATOR)。

BFILE数据存储在服务器的操作系统文件中。BFILE列可以访问Oracle数据库外的二进制文件,表的BFILE类型的列中存储的是BFILE指针,用来指向服务器文件系统中的一个二进制文件。Oracle提供APIs对文件中的数据进行访问。用来对文件中的数据进行访问的主要接口是DBMSLOB包和OCI。

3.完整性约束

为了保证数据的完整性和一致性,以及多张表之间的参考完整性,在建表时或修改表时可以指定一些约束条件,限制表中列的取值。约束是一些规则,约束在数据库中不占存储空间。相反,约束只存储在数据字典中,并且只有生效的约束在SQL及PL/SQL的执行时才起作用。有时候,为了改善大批数据装入的操作性能,可以用ALTER TABLE语句使约束失效,失效的约束不起作用。

例5-2 将emp表的PK1主键约束失效。

ALTER TABLE emp DISABLE CONSTRAINT pk1

此时emp表的主键约束不起作用。

例5-3 将emp表的PK1主键约束生效。

ALTER TABLE emp ENABLE CONSTRAINT pk1

此时emp表的主键约束起作用。

表的完整性约束可定义为两级:表级约束和列级约束。

表级约束定义的完整性约束可以约束表中的任意一列或多列。可以定义除了NOT NULL以外的任何约束。如果要为表中多列的组合定义一个约束(例如,包含多列的主键),则必须通过表级约束来定义。语法如下:

column datatype,[CONSTRAINT constraint name]constraint type(column……)

列级约束只能约束其所在的某一列。可以定义任何约束。语法如下:

column datatype[CONSTRAINT constraint name]constraint type

从语法上可以看到,CONSTRAINT关键字和constraint name(约束名)是可选的。如果没有指定CONSTRAINT关键字和constraint name(约束名),Oracle将自动生成以SYS开头的唯一的约束名字。

Oracle提供了五种约束条件保证数据的完整性和参考完整性,包括:非空约束(NOT NULL)、唯一约束(UNIQUE)、主键约束(PRIMARY KEY)、检查约束(CHECK)和外键约束(FOREIGN KEY)。

(1)NOT NULL约束(非空约束)

用于指定某列不能为空。只能是列级约束,作用于单列。例如:

ename char(10)CONSTRAINT e2 NOT NULL

其中:CONSTRAINT是一个关键字,e2是约束名。说明ename列不能为空,必须输入数据。默认情况,Oracle允许任何列上有空值。

(2)UNIQUE约束(唯一约束)

用于将一列或多列的组合作为唯一键,确保被作用的列中没有两行包含重复值。可以是表级或列级约束。如果要为表中两列或多列定义一个唯一完整性约束,则必须通过表级约束来定义。唯一约束允许有NULL值。当建立唯一约束时Oracle系统自动建立一个B树的UNIQUE索引。

(3)CHECK约束(检查约束)

用来定义一个条件,使表中的每条记录必须符合该条件。CHECK约束可以参考同一行中其他的列,但不能参考其他行或其他表中的列。在定义CHECK条件时,可以调用如SYSDATE、USER等系统函数。CHECK约束不能作用于数据类型是LOB的列中。一个列上可以有多个CHECK约束条件。一个CHECK约束可以作用于一列或多列中。如果CHECK约束要作用于多列时,必须通过表级约束来定义。例如:

sal number(7,2)CONSTRAINT e3

check(sal between 1000 and 8000)/*列级约束*/

其中:CONSTRAINT是一个关键字,e3是约束名,check是关键字,sal between 1000 and 8000是一个布尔条件,用括号将条件括起来说明sal列的值必须在1000到8000范围内。

CONSTRAINT e3 CHECK(sal between 1000 and 8000

OR sex in(′m′,′f′))/*表级约束*/

说明sal列的值必须在1000到8000范围内,sex列的取值必须是“男”或“女”。

同类推荐
  • 现代企业财务软件应用教程

    现代企业财务软件应用教程

    本书内容包括财务软件概论、系统管理、企业应用平台、总账管理、报表管理、薪资管理、固定资产管理、应收款管理、应付款管理等。
  • 三维动画审美谈

    三维动画审美谈

    数字时代,美的标准充满更多的不确定性。而三维动画以数字图像形式成为这个图时代的代表。三维动画及三维图像不仅仅是由于应用了仿真数字图像技术而带来的虚拟空间,还有更多的是由三维图像技术所引发或引导的被扩展的图像技术,这些技术无不应用在现代视觉设计领域的各个方面,并且,由此引起社会的追热,引起审美观念的改变。这些改变是在进行中的,变化中的,也是在发展中的。对于未知的美,我们做的只是追寻和记录,我们不知道以后的美将会是什么样,尽管我们苦苦追寻,孜孜探讨,同时也在默默审视。我们在追寻中享受美,在探讨中认知美,在审视中体验美……
  • 小型局域网组建与维护

    小型局域网组建与维护

    本书以组建和维护小型局域网为主线,面向实际工程应用,按照项目化课程模式的要求组织编排。全书共分8个项目,主要包括认识计算机网络一概述、绘制小型网络拓扑图、连接网络一传输介质、连接网络一联网设备、认识计算机网络一网络协议、连接网络一网络寻址、组建小型交换网络——配置交换机、连接互联网——配置宽带路由器。每个项目都有明确的工作目标、工作任务、实现过程和知识点分析,力求集教、学、做于一体,从而更好地激发学生的学习兴趣,培养学生的动手能力。
  • 悟道:一位IT高管20年的职场心经

    悟道:一位IT高管20年的职场心经

    本书是一位有20多年职场经验的IT企业高管撰写的一系列有关职场悟道的短文集成,讲述的是在企业里如何修炼自己,如何摆平自己的心态,怎样做到“世事洞明”和“人情练达”,如何“搞定老板”,怎样做到工作和生活平衡等诸多话题,涉及到跳槽、转行、升迁、环境、沟通、老板、下属、老外等等。每一篇都以作者的亲身经历或者身边的故事说明道理,语言简洁流畅,妙趣横生,更有不少经典片段和发人深省的职场警句,读起来就像是一个睿智幽默的老朋友坐在你面前娓娓道来。
热门推荐
  • 锦帝

    锦帝

    风雨夜里,稷山山下,一介布衣童子,身影飘摇······大厦将倾,万宗诸国,群起乱世硝烟,一身戎戟······“皇室负我,我不虞;苍生负我,我不弃。苍天茫茫,八荒汤汤,我只求无愧于心。”一代锦帝的崛起史,一首伟业的颂扬歌!(新作上路,不求鸡鸭鱼肉,但求有个汤喝喝。谢谢点击+收藏+推荐)
  • 男人真难

    男人真难

    两次的高考落榜,让唐正放弃了求学之路,为了不在走上父母的务农之路,他选择了来到上海这个辉煌都市,那么会有如何的爱恨情仇等待着他呢?一起看看草根少年凭借着自己所辉煌的时刻!
  • 至尊叶少

    至尊叶少

    叶晨是异界帝国的最强太子。一次意外,穿越而来。既然回不去了,叶晨就要做这都市的太子。喝最烈的酒,开最快的车,抱最美的妞。什么豪门?我自己就是豪门!我是都市至尊太子——叶晨!
  • 多想抱紧你

    多想抱紧你

    离开一座城,到达另一座城,是为了终再相见。离开一个人,遇见另一个人,是不是爱的考验?一路走来迷迷茫茫,慌慌张张。以为得到的就是想要的,以为拥有了就会满足了。谁曾想,无谓的消磨了多少时光,才发现,我要的,所谓的“理想”,已不在人群中央。
  • 德玛西亚异界游

    德玛西亚异界游

    这不是网游!只不过会出现一些网游中的XX——他是英雄城盖伦之子!——他继承了德玛西亚之力!意外穿越到了另一个陌生的大陆。这里没有牛x的斗气骑士,却有另一种职业,武者!这个大陆叫——武魂大陆!等级设定,有毫类似《斗x大陆》的魂环设定,1~99级,每十级需获取魂环!ps:十年的魂环,白色;百年魂环,黄色;千年魂环,绿色;万年魂环,蓝色;十万年魂环,紫色。ps:本书里还会出现诸如赵信....一些和德玛息息相关之人,不喜勿喷,谢谢合作!
  • 总裁独爱不敢承受

    总裁独爱不敢承受

    她叫他的爱所包围,可是突然有一天,她发现他微博关注了一个女人,连自己老婆都没关注竟然去关注一个女人?!她大体知道老公出轨了,因为总裁出轨是经常的,没想到这才结婚一点半,老公就厌恶自己了……谎言,背叛,小三竟然是自己的在外多年的亲姐姐,让她接受不了!最后的最后,她和他离婚了,结束了这场错误的婚姻!
  • 你美好如初,我爱你如初

    你美好如初,我爱你如初

    六年前,她16岁,他,20岁,一个是刚刚上高一的艺校学生,一个是读军校的兵哥哥。教官,我喜欢你,很喜欢很喜欢,我想要和你在一起”,女孩儿的声音很清脆,像百灵鸟儿一样,因为刚刚表白的缘故,脸上还有一抹红晕。可是他却说她小,不该去思考这些事情,而且,有太多的原因不能在一起。于是,她追了他六年,变成了他希望的样子,去有他的城市读大学,跟他呼吸同一个城市的空气一起走过的木栈道,沙滩,一起坐过的旋转木马,一起吃过的大排档,烧烤摊,黎嫒跟邵旭安两个人一辈子就真的没有未来吗?
  • 城惑

    城惑

    城乡壁垒,一家三代人悲欢离合;父子难认,亲情却卷入豪门恩怨;草根逆袭,农民工赢取官二代芳心;中外混血,怎奈幼年流落农家;青梅竹马,却难抵城乡差别下几万聘礼;破烂为王,终成就有房有车梦想;乡情难忘,回归乡土建起度假村;再起冲突,同父异母兄弟操戈;真假兄妹,牵出深藏半世家族隐密;血浓于水,新城与乡村重建并驾齐驱;拆迁暴富,村民进城后的困惑与抉择;得道多助,非法集资骗局被揭穿;正道沧桑,爱与事业均修成正果。
  • tfboys之恋上洛,晓,晞

    tfboys之恋上洛,晓,晞

    这是我的处女作,希望大家多多支持。这是关于tfboys的爱恋(不是真的)
  • 福妻驾到

    福妻驾到

    现代饭店彪悍老板娘魂穿古代。不分是非的极品婆婆?三年未归生死不明的丈夫?心狠手辣的阴毒亲戚?贪婪而好色的地主老财?吃上顿没下顿的贫困宭境?不怕不怕,神仙相助,一技在手,天下我有!且看现代张悦娘,如何身带福气玩转古代,开面馆、收小弟、左纳财富,右傍美男,共绘幸福生活大好蓝图!!!!快本新书《天媒地聘》已经上架开始销售,只要3.99元即可将整本书抱回家,你还等什么哪,赶紧点击下面的直通车,享受乐乐精心为您准备的美食盛宴吧!)