Oracle实用教程_03章_数据库查询基础

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1工作室www.v512.com第三章数据库查询基础3.1SQL概述3.1.1什么是SQL?关系型数据库采用结构化查询语言(StructuredQueryLanguage,SQL)作为客户端程序与数据库服务器间沟通的标准接口——客户端发送SQL指令到服务器端,服务器端执行相关的指令并返回其查询的结果结果。在数据库服务器端执行的SQL指令可以实现各种数据库操作和管理功能,比如:数据的查询和更新(包括添加、修改和删除数据)操作;创建、修改和删除各种数据库对象(如数据表、视图、索引等);数据库用户账户管理、权限管理等。SQL标准最早是在1986年由美国国家标准学会(AmericanNationalStandardsInstitute,ANSI)制订,后为国际标准化组织(InternationalStandardsOrganization,ISO)和国际电工委员会(InternationalElectrotechnicalCommission,IEC)采用成为国际标准,并分别在1989、1992、1999和2003年发布了扩展和修订版,此间各大数据库厂商均参与其中。目前主流的数据库产品均支持SQL-99标准。各主流数据库厂商在标准SQL的基础上,又各自有所扩充,以提供增强的功能,比如均提供多种系统函数及更丰富的数据类型。提示:SQL一般读作['si:kju:]或ess-que-el,即字母S、Q、L的发音。3.1.2SQL语句分类按其功能的不同,Oracle支持的SQL指令可分为数据操作语言语句、数据定义语言语句、事务控制语句、会话控制语句等几种类型,下面分别作简单介绍。数据操作语言语句数据操作语言语句(Datamanipulationlanguage,DML)用于进行数据的检索和更新操作。数据检索是数据库应用中使用频率最高的操作类型,因此数据检索的效率对数据库的整体性能影响显著。数据更新包括数据的插入、修改和删除等操作,数据更新操作具有一定的风险性,在其执行过程中DBMS必须保证数据的一致性,以确保数据有效。DML语句具体组成如表3-1所示。表3-1DML语句语句名称功能/含义2工作室www.v512.comSELECT检索数据INSERT向表或视图中插入记录DELETE从表或视图中删除记录UPDATE修改表或视图中已有记录的字段值MERGE数据合并——根据判断条件对表/视图进行INSERT或UPDATE操作数据定义语言语句数据定义语言语句(Datadefinitionlanguage,DDL)用于定义数据的格式和形态,比如定义数据表、视图和索引等数据库对象。在建立数据库时用户首先要使用的就是DDL语句。DDL语句主要组成如表3-2所示。表3-2DDL语句语句名称功能/含义CREATE创建方案对象(如表、视图、索引、触发器等)及其他数据库结构(包括数据库自身及数据库用户)ALTER修改方案对象及其他数据库结构DROP删除方案对象及其他数据库结构RENAME修改方案对象名称TRUNCATE删除方案对象的所有数据,但不移除对象结构数据控制语言语句数据控制语言(DataControlLanguage,DCL)用于对用户授权或撤销其权限,也可使用角色实现对用户的批量授权或撤销权限,在应用开发层面较少用到,具体如表3-3所示。表3-3DCL语句语句名称功能/含义GRANT授予权限及角色3工作室www.v512.comREVOKE收回权限及角色事务控制语句事务控制语句(TransactionControlStatement)用于实现数据库事务管理,其组成如表3-4所示。表3-4事务控制语句语句名称功能/含义COMMIT将事务对数据的修改永久地保存到数据库ROLLBACK还原事务对数据的修改,可还原到事务开始处或任意保存点SAVEPOINT设置保存点以标识回滚位置会话控制语句会话控制语句(SessionControlStatement)用于动态修改当前用户会话的属性,在应用开发层面极少用到,具体如表3-5所示。表3-5会话控制语句语句名称功能/含义ALTERSESSION改变当前会话设置SETROLE启用或禁用角色3.1.3SQL语法特点命名规则SQL语言规范中对数据库对象及其属性的命名(如表名、字段名等)没有做严格规定,不同类型数据库的命名规则存在细微差异。在Oracle数据库中,命名规则可分为标准命名方式和非标准命名方式两种。‹标准命名方式标准命名方式需满足如下命名约定:-以字符(A-Z,a-z,0-9,_,$,#)开头,后面可跟字符和数字-长度不超过30个字符(数据库名长度为不超过8个字符)4工作室www.v512.com-同一用户/方案下的对象、或同一数据表中的字段不允许重名-不能使用Oracle服务器的保留字按照标准命名方式,一个数据表就不能命名为“a+b”、“ab”或“table”,因为其中包含了加号、空格或Oralce保留字等。例如,下述语句就是非法的:CREATETABLEa+b(nameVARCHAR2(20));//非法,表名不能为a+b相关具体语法后文中会陆续做详细讲解,本小节中均只是简单提及,读者不必深究。保留字(ReservedWord)也称关键字(KeyWord),是指那些被系统保留(赋予特定含义、用作专门用途)的字符或字符序列,例如上面中语句中的CREATE、TABLE等。SQL语言规范对于保留字也未做统一规定,对于Oracle数据库,以特权用户sys或system登录后,执行如下命令:SELECTKEYWORDFROMv$reserved_words;即可以查看到Oracle数据库的所有保留字,在Oracle9i_9.2版本中共有809个。‹非标准命名方式在非标准命名方式中,可以使用任何字符/字符序列,包括空格、运算符、数字、中文以及所有的Oracle保留字作为对象名或表中字段名,但是需要将其用英文双引号引起来。例如,下述语句:CREATETABLEtable(nameVARCHAR2(20));CREATETABLEa+b(nameVARCHAR2(20));CREATETABLE34(nameVARCHAR2(20));CREATETABLE+(nameVARCHAR2(20));在语法上均是合法的,但以后每次使用这写对象或字段时都必须将其名字用双引号引起来否则无法使用。很显然,这种做法很容易导致混乱、因而不值得提倡。语句结构及运行方式每条SQL语句均由一个保留字开头,这个保留字字描述了这条语句要实现的操作,如SELECT、CREATE、INSERT、UPDATE等。每个保留字后都跟了一个子句,子句用于指定语句执行时要操作的数据,也可以提供执行操作的限定条件或其它更详细设置。子句可以包含表名、字段名或复合表达式等。例如,如下语句:SELECT*FROMempWHEREsal2500;实现了查询emp中数据的功能,其中where字句用于指定查询条件——所有符合条件(sal字段值大于2500)的记录,均作为查询结果返回。通常,SQL语句(指令)是由客户端程序发送到数据库服务器、并在服务器端执行的,每次只能发送一条语句。对于常用的复杂处理逻辑,也可以在服务器端定义若干个程序单元(函数、存储过程、触发器等),再由客户端调用这些程序单元,以减少交互次数,提高运行效率。SQL语句支持对数据的批量处理,比如可以使用一条SQL语句更新或删除多条记录,或查询得到多条符合条件的结果。SQL语句既可以采用交互方式运行,比如在SQLPlus中直接运行,也可以将SQL语句嵌入到其它高级语言(如Java、C++、C#)编写的应用程序中运行,以实现在应用程序中对数据库的连接操作。5工作室www.v512.com编码惯例在应用开发中,遵从统一的命名和编码规范,可以使我们的代码风格标准化,以便于代码的阅读、理解和维护升级。在SQL语言规范中,保留字和表名、字段名等并不区分大小写。一般来说,SQL语句中的关键字(如SELECT、FROM等)使用大写字母;表名的第一个字母采用大写、其他字母都采用小写,或者全部采用小写;表中字段名称则均采用小写。表名及其它对象名、字段名等应体现其体现其内容含义。例如,学生信息表可命名Student,表中学生姓名字段可命名为name、sname或student_name。编码时适当使用空格、和缩进,以增强其可读性,例如:CREATETABLEstudent(sidVARCHAR2(20)primarykey,nameVARCHAR2(20)NOTNULL,birthDATE);SELECT*FROMEMPWHERESAL2500;SELECTdeptno,job,avg(sal)FROMEMPGROUPBYdeptno,jobORDERBYavg(sal);具体来说,语句中出现运算符时,在运算符左右两侧留空格;当语句中出现括号时,括号的两边不留空格;定义表结构时,每行定义一个字段或表级约束条件,且表内成分缩进一个制表位或四个空格符。3.2简单的数据表操作为了给接下来要讲解的数据查询操作准备必要的素材(样本表及样本数据),这里先简单介绍一下对数据表的几种基本操作,相关具体语法本书后续章节会陆续做更深入的讲解。创建表在SQLplus中执行如下SQL指令,即可创建一个简单的Oracle数据表:--创建一个简单的表CREATETABLEstudent(nameVARCHAR2(20),ageNUMBER(3));其中,CREATE和TABLE是SQL语言关键字,用于指明要创建一个新的数据表,student是新建表的名字,成对小括号中的内容用于指定表的结构,此新建表中包含了两个字段(数据列),name和age为字段名,VARCHAR2(20)和NUMBER(3)分别为相应的字段类型。SQL语言规6工作室www.v512.com范中,关键字、表名及字段名等的拼写大小写不敏感。字段间使用英文的逗号,隔开,也可以不换行。为增强代码的可读性,本书中出现的SQL/Oracle关键字采用大写形式,而表名、字段名名等标识符则采用小写形式,以便于区分。插入新记录在SQLPlus中执行如下代码,即可向前面刚创建的student表中插入一行新的记录:INSERTINTOstudentVALUES('Tom',18);其中,student用于指定要操作的数据表名称,VALUES后的小括号中则依次给出了新插入记录行各字段的值,多个数值之间需使用英文,隔开,其类型和顺序必须与目标表结构相匹配,相当于方法调用的实参。删除表中数据使用DELET指令,可删除数据表中已有的数据,例如:DELETEstudent;或:DELETEFROMstudent;这是DELETE指令的最基本形式,此操作会删除student表中的所有数据,但表的结构仍存在,即此后还可以对该表进行插入数据操作。查看表结构使用DESC或DESCRIBE指令可以查看指定表的结构,包括表中各字段的名称、数据类型、及是否允许为空值等。例如:DESCstudent;DESCRIBEstudent;删除表使用DROP指令删除已有的数据表,包括表中数据和表的结构,例如:DROPTABLEstudent;删除后student表不再可用。3.3基本查询SELECT语句用于查询数据,是数据库应用开发中使用频率最高的SQL语句,其语法格式相对复杂,可实现非常复杂的查询功能,如数据统计、复合条件查询、多表联合查询、分组查询、查询结果排序等。这里先介绍SELECT基本语法,后续章节再逐步深入讲解。3.3.1SELECT基本语法SELECT语句的基本语法格式如下:工作室www.v512.comSELECT*|{字段名,...}FROM表名;其中,FROM关键字用于指定要查询的表,SELECT关键字用于指定要查询的内容,*代表查询所有的字段,如果是要查询特定字段的值,则在SELECT后指定要查询的字段名,多个字段名之间用英文(半角)逗号隔开。提示:|代表或的关系,它所隔开的多种成分只能出现其中

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功