第三章SQL语言基础_第1页
第三章SQL语言基础_第2页
第三章SQL语言基础_第3页
第三章SQL语言基础_第4页
第三章SQL语言基础_第5页
已阅读5页,还剩67页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQL语言基础语言基础本章学习目标本章学习目标 SQL语言是数据库的标准语言。只有理解了SQL才能真正理解关系数据库。本章将介绍怎样使用“结构化查询语言”(SQL)来操作数据库。第三章第三章第三章第三章第三章第三章 SQLSQLSQL语言基础语言基础语言基础语言基础语言基础语言基础 本章内容安排本章内容安排本章内容安排本章内容安排本章内容安排本章内容安排 3.1 SQL简介 SQL语言是数据库的核心语言。全称是语言是数据库的核心语言。全称是“结构化结构化查询语言(查询语言(Structured Query Language)”,最早的,最早的是是IBM的圣约瑟研究实验室为其关系数据库管理系统的

2、圣约瑟研究实验室为其关系数据库管理系统SYSTEMR开发的一种查询语言,它的前身是开发的一种查询语言,它的前身是SQUARE语言。语言。 包含包含4个部分个部分: 数据查询语言数据查询语言DQL(select) 数据操纵语言数据操纵语言DML(insert,update,delete) 数据定义语言数据定义语言DDL(create,alter,drop) 数据控制语言数据控制语言DCL(commit work,rollback work)1.非过程化语言 SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。SQL允许用户在高层的数据结构上工作,而不对单个记录进行操作,可操作

3、记录集。所有SQL语句接受集合作为输入,返回集合作为输出。SQL的集合特性允许一条SQL语句的结果作为另一条SQL语句的输入。SQL不要求用户指定对数据的存放方法。这种特性使用户更易集中精力于要得到的结果。3.1.2 SQL的优点的优点 3.1.2 SQL的优点的优点2.统一的语言 SQL可用于所有用户的DB活动模型,包括系统管理员、数据库管理员、应用程序员、决策支持系统人员及许多其它类型的终端用户。 SQL为许多任务提供了语句,包括: 查询数据 在表中插入、修改和删除记录 建立、修改和删除数据对象 控制对数据和数据对象的存取 保证数据库一致性和完整性3.1.2 SQL的优点的优点3.是所有关

4、系数据库的公共语言 由于所有主要的关系数据库管理系统都支持SQL语言,用户可将使用SQL的技能从一个RDBMS转到另一个,所有用SQL编写的程序都是可以移植的。 1SQL*PLUS界面:界面:(1)登录)登录输入输入SQLPLUS,再回车;接着输入正确的,再回车;接着输入正确的Oracle用户名用户名并回车;输入用户口令并回车,会显示提示符:并回车;输入用户口令并回车,会显示提示符:SQL。(2)退出)退出输入输入EXIT即可。即可。2语句的编辑与运行语句的编辑与运行语句的编辑与运行可以在语句提示符后输入语句的编辑与运行可以在语句提示符后输入SQL语句并语句并运行。执行单条语句,以分号结束输入

5、;执行程序块以运行。执行单条语句,以分号结束输入;执行程序块以斜杠结束输入,或者以空行结束输入。斜杠结束输入,或者以空行结束输入。也可以利用也可以利用SQL缓冲区进行缓冲区进行PL/SQL块的编辑和运行,或块的编辑和运行,或利用语句文件进行利用语句文件进行PL/SQL块的编辑和运行。块的编辑和运行。3.1.3 操作界面操作界面 3.2 SQL基本语法 通过通过SQL语句,程序员或数据库管理员(语句,程序员或数据库管理员(DBA)可以做如下的)可以做如下的主要工作:主要工作:(1)建立数据库的表格,包括设置表格所可以使用之空间。)建立数据库的表格,包括设置表格所可以使用之空间。(2)改变数据库系

6、统环境设置。)改变数据库系统环境设置。(3)针对某个数据库或表格,授予用户存取权限。)针对某个数据库或表格,授予用户存取权限。(4)对数据库表格建立索引值。)对数据库表格建立索引值。(5)修改数据库表格结构(新建、删除或是修改表格字段)。)修改数据库表格结构(新建、删除或是修改表格字段)。(6)对数据库进行数据的新建。)对数据库进行数据的新建。(7)对数据库进行数据的删除。)对数据库进行数据的删除。(8)对数据库进行数据的修改。)对数据库进行数据的修改。(9)对数据库进行数据的查询。)对数据库进行数据的查询。3.2.2 SQL语言的语法结构语言的语法结构SQL语句是针对关系型数据库所建立出来的

7、语法叙述,所以SQL在这类数据库中所发挥的功能非常的强,SQL的语句不多,而且其语法也相对较简单。归纳起来,共有六大类:1第一类属性词(Predicates)2第二类声明(Declaration)3第三类条件子句(Clause)4第四类运算符(Operator)与操作数(Operation)5第五类函数(Function)6第六类SQL语句(Statement) 3.3 数据查询语言(DQL) 1DQL的基本结构2SELECT 语句的格式SELECTpredicate*|table.*|table.field,table.field2,. AS alias1 ,alias2,.FROM tab

8、leexpression ,.WHERE. GROUP BY HAVING. .ORDER BY. .WITH OWNERACCESS OPTION3.3.1 基本查询 整个SELECT 语句的含义是:根据WHERE 子句的条件表达式从FROM 子句指定的基本表或视图中找出满足条件的元素组,再按SELECT子句中的目标列表达式选出元素组中的属性值形成结果表。如果有GROUP子句,则将结果按的值进行分组,该属性列值相等的元素组为一个组,每个组产生结果表中的一条记录。如果GROUP子句带有HAVING 短语,则只有满足指定条件的组才予以输出。如果有ORDER子句,则结果表还要按的值升序或降序排序。

9、 3SELECT中的条件语句(1)FROM 条件子句SELECT fieldlistFROM tableexpression 例1、查找整个雇员表(EMP)的内容。 例2、查看雇员名字(名字字段为ENAME)。若查找多列数据,则用逗号将各个列名分隔开。若查找多列数据,则用逗号将各个列名分隔开。 例3、查看雇员编号(EMPNO) 、名字和工种(JOB)。 在显示查询结果时,各列的标题就是基表中的列名,如果希望显示的列标题不同于列名,可在SELECT子句中定义列名的别名别名,方法是在列名后加一个空格,然后写上它的别名。例4、SQLSELECT ENAME EMPLOYEE FROM EMP; 例5

10、、计算奖金占工资的比率。SQLSELECT ENAME,SAL,COMM,COMM/SAL“C/S RATIO” FROM EMP; (2)WHERE 条件子句 :指定查询的条件和限制SELECT fieldlistFROM tableexpressionWHERE criteria例:查找雇员表中在10号(DEPTNO)部门工作的雇员。 注意注意:使用使用WHERE子句时,应注意列值的表示方法,若该列为字子句时,应注意列值的表示方法,若该列为字符型,需使用单引号(符型,需使用单引号()将字符串括起来,如:)将字符串括起来,如:WHERE ENAME=SMITH,而且应注意单引号内的字符串要区

11、分大小写形,而且应注意单引号内的字符串要区分大小写形式。若该列为数字型,则不必使用引号,如式。若该列为数字型,则不必使用引号,如WHERE DEPTNO=20。此外列值还可以取其他列(或其他基表的列)的值,如:此外列值还可以取其他列(或其他基表的列)的值,如:WHERE EMP.DEPTNO=DEPT.DEPTNO,这里列值取另一个基表中的列,这里列值取另一个基表中的列, (3)“*”,DISTINCT属性词用法 SELECT *|DISTINCT FROM table如:查询雇员表中的工作(JOB),要求工作名称不重复.(4)ORDER BY条件子句 通常使用SELECT命令查找数据时,查询

12、结果按各行在表中的顺序显示,当需要按照某种特定的顺序显示时,可以通过ORDER BY子句来改变查询结果的显示顺序。 SELECT fieldlist FROM tableWHERE selectcriteriaORDER BY fieldASC|DESC,field2ASC|DESC,.在ORDER BY子句中,指出查询结果数据按该列排序,选项ASC/DESC表示按升序还是降序排列,选择ASC为升序显示,选择DESC为降序显示,该项缺省为升序形式。例、按字母顺序显示雇员的名字。例、按部门号降序显示。如果按多列进行排序时,应分别指出它们相应的列名及有关的递增或递减方式。选择按多列排序,首先由第一

13、个列名确定顺序,若第一排序列值相同,再按第二个列名排序,第二排序列值相同,再按第三列排序,依此类推。例、查找工资高于$2000的雇员信息,按部门号和雇员名字排序。(5)GROUP BY 条件子句 如果 SELECT 语句中使用GROUP BY子句,则 ORACLE把查询到的基表或视图中的行划分成多个组,并为每组返回一个结果。SELECT fieldlistFROM tableWHERE criteriaGROUP BY groupfieldlist例 计算第个部门的平均工资和工资总和。 SQL SELECT DEPTNO,SUM(SAL),AVG(SAL) FROM EMP GROUP BY

14、DEPTNO; 例、查询每个部门的每个工种的雇员数。SQLSELECT DEPTNO,JOB,COUNT(*) FROM EMP GROUP BY DEPTNO,JOB; 应当注意,在包含GROUP BY 子句的查询中,SELECT子句的列表中的个体值必须是GROUP BY子句中的表达式或者常量,否则出错。例如: SQLSELECT ENAME,DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO; SELECT ENAME,DEPTNO,SUM(SAL) * ERROR at line 1; ORA00979:not a GROUP BY expression 在

15、SELECT子句中有ENAME和DEPTNO两个个体值列,而在GROUP BY子句中只有一个DEPTNO。当按部门分组后每组产生一条记录,但每个部门却还有多个雇员的ENAME,所以该命令的执行必定是错误的,应该保证SELECT子句给出的所有列名或表达式在每一个分组中必须具有唯一性。 (6)HAVING 条件子句 如果需要对各个组返回的结果进行筛选,查询满足一定条件的分组值,可以使用HAVING子句。HAVING子句的作用与WHERE子句相似,都是给出查询条件。所不同的是,WHERE是检查每条记录是否满足条件,而HAVING子句是检查分组后,各组是否满足条件。从这里可以看出,WHERE子句的条件

16、是针对SELECT子句的,而HAVING子句的条件是针对GROUP BY子句的,没有GROUP BY子句就不能使用HAVING子句。SELECT fieldlistFROM tableWHERE selectcriteriaGROUP BY groupfieldlistHAVING groupcriteria 例、哪些部门的工资总和超过了$9000? SQLSELECT DEPTNO,SUM(SAL) FROM EMP GROUP BY DEPTNO HAVING SUM(SAL)9000; 执行时,先按DEPTNO分组,分组后并不是每一组都是所需的信息,还需要进一步检查每一组的工资总和是否大

17、于$900。如果大于$900,则是所需的信息,否则不是所需的信息,在这里检查每组是否满足条件使用的就是HAVING子句。 (7)BETWEEN.AND 运算符 在查找中,如果要求某列的数值在某个区间范围内,则可以使用BETWEENAND。 exprNotBETWEEN value1 AND value2例、查找哪些雇员的工资在$2000到$3000之间?SQLSELECT ENAME,JOB,SAL FROM EMP WHERE SAL BETWEEN 2000 AND 3000;与此相反,NOT BETWEENAND则选择列值不在该范围内的信息。例、SQLSELECT ENAME,JOB,S

18、AL FROM EMP WHERE SAL NOT BETWEEN 2000 AND 3000; (8)LIKE 操作数 expression LIKE pattern expression在查找中,有时需要对字符串进行比较。在比较中,有的要求两个字符串完全相同,有的要求部分字符相同,而其余的字符可以任意。LIKE就可以用来搜索所有的数据,来查找与你描述的模式相匹配的行。LIKE提供两种字符串匹配方式:一种用下划线(_)表示,称为定位标志;另一种用百分号(%)表示,称为通配符。在检测一个字符串时,如果有一个字符可以任意,则在该字符串位置上用下划线表示。例、选择名字以W开头,后面仅有三个字母的雇

19、员信息。显然,在查找中,要求名字的第一个字母是W,后面仅有三个字母,可以是任意字母,因此后面三位可以用三个下划线来表示:SQLSELECT ENAME,DEPTNO FROM EMP WHERE ENAME LIKEW_ _ _;若在查找时只需包含某个字符串,其他字符任意的情况下,可用通配符%来表示。例、SQLSELECT ENAME,DEPTNO FROM EMP WHERE ENAME LIKES%;通配符%还可以与下划线一起使用。 例、查找名字以字母M开头,以R结尾,并且第三个字母为L的雇员名字、工种和所在部门号。那么,在查找中,名字的第一个字母是M,第三个字母是L,第二个字母可以是任意

20、的,该位置可用一个下划线表示。最后一个字母是R,而第三个字母和最后一个字母之间可以是任意长度的字符串,所以在字母L和R之间使用通配符%,其命令语句如下:SQLSELECT ENAME,JOB FROM EMP WHERE ENAME LIKEM_L%R;此外我们还可以使用此外我们还可以使用NOT LIKE选择列值不匹配的行。选择列值不匹配的行。例、查找哪些雇员的工种名不以SALES开头。SQLSELECT ENAME,JOB FROM EMP WHERE JOB NOT IN LIKESALES%WHERE JOB NOT IN LIKESALES%; 4注意事项(1)字段名之间可以进行算术运

21、算,例如:(字段名1*字段名2)/3(2)查询语句可以嵌套,例如:SELECTFROM 表名1 WHERE 字段1 in (SELECTFROM表名1,表名2, WHERE条件1 WHERE条件2);(3)查询结果集的排序操作,默认的排序是升序ASC,降序是DESC。(4)每个表都有一个隐含的字段ROWID,它标记着记录的唯一性。1连接查询 连接可以在SELECT 语句的FROM子句或WHERE子句中建立,在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 (1)内连接 内连接查询操作列出与连接条件匹配的数据行,

22、它使用比较运算符比较被连接列的列值。内连接分三种:等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接表中的所有列,包括其中的重复列。等值连接要求参与联接运算的两个表在公共列上具有相同的值。SELECT语句可以将两个表进行连接操作。连接时,将两个表中的所有记录在有关列上进行比较,检查它们是否满足条件。其命令如下: SELECT FROM 表名1,表名2 WHERE 表名1.列名2=表名2.列名2; 其中:给列名加前缀表名,是为了避免被连接表中各个被连接列同名时产生二义性。 3.3.2 复合查询两个基表进行等值连接的过程是:首先从第一个表中取出第一条记录,然后从

23、头到尾扫描另一个表的全部记录,分别检查每条记录是否在连接属性上与第一个表的第一条记录相等。如果相等,则将这两个记录连接,生成新表的一条记录。当处理完第一个表的第一条记录后,再取第二条记录,扫描另一个表的全部记录。如此重复直至处理完第一个表的全部记录。如果连接时还有其他限制条件,则将满足条件的记录进行上述操作。例、查看工资高于$2500的雇员及所在部门的情况。SQLSELECT ENAME ,SAL,EMP.DEPTNO,LOC,DNAME FROM EMP,DEPT WHERE EMP.DEPTNO=DEPT.DEPTNO AND SAL2500; 注意注意: :在连接条件中使用的列是几个被连

24、接表的公共列,它们不要求在连接条件中使用的列是几个被连接表的公共列,它们不要求具有相同的名字。但因为要进行比较操作,所以两个列必须具有相同具有相同的名字。但因为要进行比较操作,所以两个列必须具有相同的定义域,即数据类型和宽度相同,这是作为连接条件所必须具备的的定义域,即数据类型和宽度相同,这是作为连接条件所必须具备的。不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些运算符包括、=、=、!和。例、下面给出一张新的基表:SALGRADE,存放着工资等级的信息。SALGRADE TableGRADE LOSAL HISAL 1 700 1200 2 1201 14

25、00 3 1401 2000 4 2001 3000 5 3001 9999请根据该表查找哪些雇员的工资属于第三级别? SQLSELECT ENAME,SAL FROM EMP,SALGRADE WHERE GRADE=3 AND SAL BETWEEN LOSAL AND HISAL;自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询结果集合中所包括的列,并删除连接表中的重复列。自连接可以把一个表看成有两个副本,即两个相同的表,然后再对这两个表在相关列上进行连接,其连接过程与多表连接完全相同。表自连接时,需要不同的表别名来对同一个表的两个副本加以区分。表自

26、连接的一般命令格式如下: SELECT FROM 表名 表别名1,表名 表别名2 WHERE 表别名1.列名1=表别名2.列名2;其中:列名1和列名2标识自连接表中的两个不同列,这两列要求有相同的数据类型和宽度。 例、指出每个雇员的经理的名字。 SQLSELECT WORDER.ENAME,MANAGER.ENAME MANAGER FROM EMP WORKER,EMP MANAGER WHERE WORDER.MGR=MANAGER.EMPNO; (2)外连接 外连接分为左外连接、右外连接和全外连接三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表

27、(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。 在ORACLE中,外连接可以通过在WHERE子句中:(+)的使用来使用,例如:表A与表B的左连接A.FIELD1(+)=B.FIELD1,右连接A.FIELD1=B.FIELD1(+)。其命令格式如下:SELECTFROM 表名1,表名2WHERE 表名1.列名1=表名2.列名2(+) | (+)表名1.列名1=表名2.列名2; (3)交叉连接 交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。2联合查询 U

28、NION运算符可以将两个或两个以上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联合查询。UNION的语法格式为:select_statementUNION ALL selectstatementUNION ALL selectstatementnUNION操作是将属于一个查询结果的行或者属于另一个查询结果的行组合起来,构成UNION操作的结果。如果有一个行既属于一个查询结果,又属于另一个查询结果,则只取出其中一行。如图所示。 例 下面有三个以EMP为基表的视图 ACCOUNT ViewENAME SAL JOBCLARK 2450 MANAGERKING 5000 PRESID

29、ENT MILLER 1300 CLERKEAME SAL JOBALLEN 2450 MANAGERWARD 5000 PRESIDENTMARTIN 1300 CLERKBLAKE 1650 MANAGERTURNER 1500 SALESMANJAMES 950 CLERKSALES View RESEARCH ViewENAME SAL JOBSMITH 800 CLERKJONES 2975 MANAGERSCOTT 3000 ANALYSTADAMS 1100 CLERKFORD 3000 ANALYST 根据给出的三个视图,查询所有部门中有哪些雇员的工资超过$ 2000?SQLS

30、ELECT ENAME,SALFROM ACCOUNTWHERE SAL2000UNIONSELECT ENAME,SALFROM RESEARCHWHERE SAL2000UNIONSELECT ENAME,SALFROM SALESWHERE SAL2000; 1统计字段值的数目函数COUNT()用来统计一个表中有多少条记录。注意:函数COUNT()没有指定任何字段。这个语句计算表中所有记录所数目,包括有空值的记录。因此,不需要指定要被计算的特定字段。2计算字段的平均值函数AVG()可以返回一个字段中所有值的平均值。注意:函数AVG()只能对数值型字段使用。这个函数在计算平均值时也忽略空值

31、。3.3.3集合函数3计算字段值的和计算字段值的和使用函数SUM()。注意:函数SUM()的返回值代表字段purchase_amount中所有值的总和。4返回最大值或最小值函数MAX()和函数MIN()分别用于返回最大值和最小值。注意:函数MIN()返回一个字段的所有值中的最小值。如果字段是空的,函数MIN()返回空值。 例例: :在职工表中在职工表中, ,找出职工表中工作的数目。找出职工表中工作的数目。 SELECT COUNT (DISTINCT job) FROM SELECT COUNT (DISTINCT job) FROM employeeemployee 结果为结果为6 6。 说

32、明,除非对关系中的元组个数进行计数,一说明,除非对关系中的元组个数进行计数,一般应用般应用COUNTCOUNT函数应该使用函数应该使用DISTINCTDISTINCT。例如:。例如: SELECT COUNT(job) FROM employeeSELECT COUNT(job) FROM employee 则结果为则结果为1515。 例例: :在职工表中在职工表中, ,求支付的工资总数。求支付的工资总数。 SELECT SUM(salSELECT SUM(sal) FROM employee) FROM employee 结果是:结果是:3002530025。这个结果是职工关系中的工。这个结

33、果是职工关系中的工资值的总和,它并不管是否有重复值。这时若资值的总和,它并不管是否有重复值。这时若使用命令:使用命令: SELECT SUM(DISTINCTSELECT SUM(DISTINCT工资工资) FROM ) FROM 职工职工 将得出错误的结果将得出错误的结果2577525775。原因是。原因是DISTINCTDISTINCT命命令去掉重复值。令去掉重复值。 例例: :在职工表中在职工表中, ,求工作为职员的职工的最高工求工作为职员的职工的最高工资值。资值。 SELECT MAX(SELECT MAX(工资工资) FROM ) FROM 职工职工 WHERE WHERE 工工作作

34、=CLERKCLERK 结果是:结果是:13001300 与与MAXMAX函数相对应的是函数相对应的是MINMIN函数函数( (求最小值求最小值) )。比。比如,求最低工资值可以有如下命令:如,求最低工资值可以有如下命令: SELECT MIN(SELECT MIN(工资工资) FROM ) FROM 职工职工 WHERE WHERE 工工作作=CLERKCLERK3.4.2 DELETE语句语句 3.4 数据操纵语言(DML)3.4.3 UPDATE语句语句1INSERT语句格式INSERT语句用于往数据表里插入记录。(1)同时插入多条记录的语句格式为:INSERT INTO (target

35、.field1,target.field2,)SELECT (source.field1,source.field2,)FROM tableexpression(2)插入单条记录的语句格式为:INSERT INTO (target.field1,target.field2,.)VALUES(value1,value2,.)3.4.1 INSERT语句2注意事项(1)字符串类型的字段值必须用单引号括起来,例如:GOODDAY。(2)如果字段值里包含单引号需要进行字符串转换,把它替换成两个单引号 。(3)字符串类型的字段值超过定义的长度会出错,最好在插入前进行长度校验。(4)日期字段的字段值可以用

36、当前数据库的系统时间SYSDATE,精确到秒。(5)INSERT时如果要用到从1开始自动增长的序列号,应该先建立一个序列号。1DELETE语句格式DELETE语句删除数据表里的记录。用DELETE语句删除的记录,无法再复原,所以条件设置一定要正确。DELETE语句格式为:DELETE table.*FROM tableexpressionWHERE criteria3.4.2 DELETE语句2注意事项(1)删除记录并不能释放Oracle里被占用的数据块表空间。它只把那些被删除的数据块标成unused。(2)如果确实要删除一个大表里的全部记录,可以用TRUNCATE语句,它可以释放占用的数据块

37、表空间,其语句格式为:TRUNCATE TABLE 表名;(3)此操作不可回退。 UPDATE 语句通过条件的限制来修改特定的数据。 UPDATE语句格式为: UPDATE table SET newvalue WHERE criteria; DML 语句对表都加上了行级锁,确认完成后,必须加上事物处理结束的语句COMMIT才能正式生效,否则改变不一定写入数据库里。如果想撤回这些操作,可以用语句ROLLBACK复原。3.4.3 UPDATE语句3.5.2 ALTER语句语句 3.5.1 CREATE语句语句3.5 数据定义语言(DDL)3.5.3 DROP语句语句 3.5.4 TRUNCATE

38、语句语句1表的建立 表是存储用户数据的基本结构。 建立表主要指定义下列信息: 列定义 完整性约束 表所在表空间 存储特性 可选择的聚集3.5.1 CREATE语句(1)建立一个新表的语句格式可以利用CREATE TABLE语句,来建立一个全新的表,但前提是:数据库必须已经存在。语句格式为:CREATE TABLE table(field1 type(size)index1,field2 type(size)index2,.,nultifieldindex,.)(2)注意事项创建表时要把较小的不为空的字段放在前面,可能为空的字段放在后面。创建表时可以用中文的字段名,但最好还是用英文的字段名。创建

39、表时可以给字段加上默认值,例如DEFAULT SYSDATE。这样每次插入和修改时,不用程序操作这个字段都能得到动作的时间。创建表时可以给字段加上约束条件。例如不允许重复UNIQUE,关键字PRIMARY KEY。2表索引的建立 索引是一种数据库对象。对于在表或聚集的索引列上的每一值将包含一项,为行提供直接的快速存取。在下列情况下,Oracle可利用索引改进性能:按指定的索引列的值查找行。按索引列的顺序存取表。表索引的建立主要采用的是CREATE INDEX语句。这个命令是对一个已存在的表建立索引,语句格式为:CREATEUNIQUEINDEX index ON table(field1ASC

40、|DESC,field2ASC|DESC,.)WITH PRIMARY|DISALLOWNULL|IGNORENULLCONSTRAINT条件子句的功能也是类似索引(INDEX)的,虽然CONSTRAINT 也可以建立表之间的关联性。如:(1)单一字段索引语句格式: CONSTRAINT namePRIMARY KEY|UNIQUE|REFERENCES foreigntable(foreignfield1,foreignfield2)(2)多字段索引语句格式: CONSTRAINT name PRIMARY KEY(primary1,primary2,.) |UNIQUE(unique1,u

41、nique2,.) |FOREIGN KEY (ref1,ref2,.) |REFERENCES foreigntable(foreignfield1, foreignfield2,.)3视图的建立视图是一个逻辑表,它允许操作者从其它表或视图存取数据,视图本身不包含数据。视图所基于的表称为基表。引入视图有下列作用:提供附加的表安全级,限制存取基表的行或/和列集合。隐藏数据复杂性。为数据提供另一种观点。促使Oracle的某些操作在包含视图的数据库上执行,而不在另一个数据库上执行。建立视图的语句格式为:CREATE VIEW view AS SELECT table1.field1,table2.

42、field1FROM table1,table2.;4同义词的建立 同义词为表、视图、序列、存储函数、包、快照或其它同义词的另一个名字。使用同义词为了安全和方便。对某一对象建立同义词可有下列好处:引用对象不需指出对象的持有者。引用对象不需指出它所位于的数据库。为对象提供另一个名字。建立同义词使用的语句格式为:CREATE SYNONYM symnon_name FOR username.tablename;5用户的建立 建立用户使用的语句格式为: CREATE USER username IDENTIFIED BY password;1ALTER语句格式用ALTER语句,可以修改表、索引,或对视图的字段重新设计。语句格式为:ALTER TABLE tableADD COLUMN field type(size)CONSTRAINT index|CONSTRAINT multifiedindex|DROP COLUMN field|CONSTRAINT indexname3.5.2 ALT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论