第3章关系数据库语言SQL
和TransactSQL3.1SQL概述〖*4/5〗3.1.1SQL标准SQL是Structured Query Language的缩写,即结构化查询语言。作为关系数据库的标准语言,SQL*初是基于IBM的System R研制的,1986年被美国**标准化组织(ANSI)批准为关系数据库的标准语言;1987年,国际标准化组织(ISO)把ANSI SQL作为国际标准,这个标准在1992年进行了修订(SQL92),1999年再次修订(SQL99),2003年、2008年和2011年分别更新了国际标准。作为一种访问关系型数据库的标准语言,SQL问世以来得到了*为广泛的应用,**的商用数据库管理系统产品(如Oracle、IBM DB2、Sybase、INGRES、MS SQL Server)都支持它,当前十分流行的开源数据库产品(如Postgre SQL、MySQL等)也支持它。
一般情况下,提起SQL标准,涉及的内容主要是SQL92里*基本或者*核心的一部分。SQL92本身是分级的,包括入门级、过渡级、中间级和完全级。不过,SQL标准包含的内容实在太多,而且有很多特性对新的SQL产品也越来越不重要。从SQL99之后,标准中符合程度的定义就不再分级,而是改成了核心兼容性和特性兼容性。
各种不同的数据库管理系统产品对SQL的支持往往与标准存在细微的不同,这是因为,有的产品的开发先于标准的公布,另外,各产品开发商为了达到特殊的性能或新的特性,需要对标准进行扩展。
3.1.2SQL的特点
SQL集数据查询(Data Query)、数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能于一体,是一个通用的、功能极强的关系数据库语言,充分体现了关系数据语言的特点和优点。
1. 综合统一
SQL集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括定义数据库、定义关系模式、录入数据以及数据库的查询、更新、维护、数据库重构、数据库**性、完整性控制等一系列操作要求,这就为数据库应用系统开发提供了良好的环境,在数据库系统建成投入运行后,还可根据用户需要随时、逐步地修改模式,并不影响数据库系统的运行,从而使系统具有良好的可扩充性。
2. 高度非过程化
非关系数据模型的数据操纵语言是面向过程的语言,用其完成数据操作请求,必须指定存取路径,对用户极其不便。采用SQL进行数据操作,用户只须提出“做什么”,而不必指明“怎么做”,因此用户无须了解存取路径,存取路径的选择以及SQL语句的操作过程均由数据库管理系统自动完成。这不但大大减轻了用户负担,也有利于提高数据独立性。
3. 面向集合的操作方式
SQL采用集合操作方式,不仅查询结果是元组的集合,数据查询、插入、删除、更新操作的对象也是元组的集合。
而非关系数据模型采用的是面向记录的操作方式,任何一个操作其对象都只能是一条记录。例如,查询所有平均成绩在80分以上的学生姓名,用户必须说明完成该请求的具体处理过程,即如何用循环结构按照某条路径一条一条地把满足条件的学生记录读取出来。
4. 以同一种语法结构提供两种使用方式
SQL有两种使用方式,既是自含式语言,又是嵌入式语言。作为自含式语言,它能够独立地用于联机交互使用方式,用户可以在数据库管理系统的环境中,从终端键盘上直接输入SQL命令语句对数据库进行操作;作为嵌入式语言,SQL语句能够嵌入到**语言(例如C、C 、PB、Java、PHP、Python等)编写的程序中,供程序员在应用程序中访问数据库时使用;且在两种不同的使用方式下,SQL的语法结构基本上是一致的。这种以统一的语法结构提供两种不同使用方式的机制,为用户提供了极大的灵活性与方便性。
5. 语言简洁,易学易用
SQL功能极其强大,但是十分简洁,易学易用,完成数据管理的核心功能只用了10个命令动词,如表31所示,并且SQL的语法类似于英语自然语言,学习和使用均十分简单。表31SQL的命令动词SQL功能命 令 动 词数据定义CREATE、DROP、ALTER数据查询SELECT数据操纵INSERT、UPDATE、DELETE数据控制GRANT、REVOKE、DENY3.1.3TransactSQL
SQL作为关系数据库的标准语言,被关系数据库管理系统产品广泛采用,如Oracle、MS SQL Server、IBM DB2、Informix、MySQL、Sybase 等数据库系统。各种数据库管理系统产品在支持标准SQL的同时,往往又增加一些自己的特定功能,形成各具特色的SQL版本。TransactSQL(TSQL)就是Microsoft公司在其数据库管理系统产品MS SQL Server中对ANSI标准SQL的一个实现。
TransactSQL是结构化查询语言SQL的增强版本,与ANSI SQL标准兼容,而且在标准SQL的基础上还进行了许多扩展,更加方便用户使用。TransactSQL已经成为SQL Server数据库管理系统的核心。
3.1.4SQL规范
为了使读者能够方便地阅读本书中关于SQL的内容,首先简要说明本书中SQL语句的书写格式,在介绍SQL语句的基本语法结构时,语句成分的基本书写格式如表32所示。表32SQL语句格式说明语句成分表 达 格 式说明SQL关键字大写字母如 SELECT、INSERT用户必须提供的参数用“< >”括起来, “<”和“>”不是语句成分SQL语句中用户必须提供的信息,如<表名>、<列名>多选一选项用“|”分隔,“|” 不是语句成分如ASC|DESC可选项用“[]”括起来,“[”和“]”不是语句成分如[TOP 2]重复项[, ...,n],重复多次,用“,”分隔重复项[...n],重复多次,用“ ”空格分隔注释用“”引导或放在“/”与“/”之间注意: 在本书的例题中,为输入方便,SQL语句一般都用大写字母书写,但实际应用中,SQL并不区分大小写,用大写或小写输入都可以。
在数据库管理系统中和在编程语言中输入SQL语句时,多个语句成分之间用一个或多个空格分隔,语句中并列元素之间用逗号分隔,字符串用单引号括起来,切记一定要用英文标点符号!
3.2实例数据库〖*4/5〗3.2.1供应管理数据库本章在介绍SQL的各项功能时,大部分举例都采用一个实例数据库——供应管理数据库SPJ,该数据库是记录一些供应商供应图31供应管理数据库ER图多个工程项目各种零部件数据的,实际应用中,每个供应商可以给多个工程项目供应多种零部件,每个工程项目可以使用多个供应商供应的多种零部件,每种零部件可以由多个供应商供应,被多个工程项目使用,因此供应商、工程项目、零部件三者之间是多对多的联系。供应管理数据库的概念结构ER图如图31所示(实体的属性在图中省略)。
SPJ数据库包括S,P,J,SPJ 四个关系模式。
(1) 供应商表S(SNO,SNAME,STAT,CITY)。
供应商表S 的属性有供应商代码(SNO)、供应商名(SNAME)、供应商资质状态(STAT)、供应商所在城市(CIIY)属性,供应商代码(SNO)是主码。
(2) 零部件表P(PNO,PNAME,COLOR,WT)。
零件表P的属性有零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WT)属性,零件代码(PNO)是主码。
(3) 工程项目表J(JNO,JNAME,CITY)。
工程项目表J的属性有工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)属性,工程项目代码(JNO)是主码。
(4) 供应情况表SPJ(SNO,PNO,JNO,QTY)。
供应情况表SPJ有供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应量(QTY)属性,QTY表示某供应商供应某种零件给某工程项目的数量,供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)三者的组合是主码,供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)三者均是外码,分别参照供应商、零部件、工程项目三个表的主码。
3.2.2供应管理数据库实例数据
为方便举例,本书为SPJ数据库中的基本表设计了一些实例数据,见表33~表36。读者在进行实际操作练习时可以根据需要向表中添加更多的数据。表33供应商表SSNOSNAMESTATCITYS001天津安贝儿B天津S002北京启明星A北京S003北京新天地C北京S004天津丰泰盛B天津S005上海普丰C上海S006合肥四达B合肥表34零部件表PPNOPNAMECOLORWTP001螺母红12P002螺栓绿17P003螺钉旋具蓝14P004螺钉旋具红14P005凸轮蓝40P006齿轮红30表35工程项目表JJNOJNAMECITYJ001北京三建北京J002长春一汽长春J003新安弹簧厂天津J004临江造船厂天津J005唐山机车厂唐山J006新新无线电厂常州J007铭泰半导体厂南京续表表36供应情况表SPJSNOPNOJNOQTYS001P001J001200S001P001J003100S001P001J004700S001P002J002100S002P003J001400S002P003J002200S002P003J004500S002P003J005400S002P005J001400S002P005J002100S003P001J001200S003P003J001200S004P005J001100S004P006J003300S004P006J004200S005P002J004100S005P003J001200S005P006J002200S005P006J0045003.3数据定义功能
SQL的数据定义功能用来定义数据库中各种对象,包括定义数据库、定义基本表、定义索引和定义视图等。