关系数据库SQLServ.ppt
第四章关系数据库标准语SQL,http:/V,VFP课程建设组课程建设组课程建设组,目录,http:/V,VFP课程建设组课程建设组课程建设组,4.1 SQL语言概述,SQL全称是“结构化查询语言(Structured Query Language)”,最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。如今无论是Oracle,Sybase,Informix,SQL server这些大型的数据库管理系统,还是像Visual FoxPro,PowerBuilder这些微机上常用的数据库开发系统,都支持SQL语言作为查询语言。,http:/V,VFP课程建设组课程建设组课程建设组,SQL语言的特点,1综合统一 SQL语言集数据定义语言DDL、数据操纵语言DML、数据控制语言DCL的功能于一体,语言风格统一,可以独立完成数据库生命周期中的全部活动,包括定义关系模式、录入数据以建立数据库、查询、更新、维护、数据库重构、数据库安全性控制等一系列操作要求,这就为数据库应用系统开发提供了良好的环境。,2非过程化语言 SQL是一个非过程化的语言,因为它一次处理一个记录,对数据提供自动导航。,3面向集合的操作方式 SQL语言采用集合操作方式,不仅查找结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。,http:/V,VFP课程建设组课程建设组课程建设组,SQL语言的特点,5语言简捷 SQL语言功能极强,但又十分简洁,只用9个动词即可完成对数据的操纵、数据的定义及数据的控制等功能。(1)数据操纵:SELECT、INSERT、UPDATE、DELETE(2)数据定义:CREATE、DROP、ALTER(3)数据控制:GRANT,REVOKE,4一种语法结构有两种使用方式 SQL语言既是自含式语言,又是嵌入式语言。且在两种不同的使用方式下,SQL语言的语法结构基本上是一致的。,http:/V,VFP课程建设组课程建设组课程建设组,SQL语言的功能,查询是SQL语言的重要组成部分,同时SQL还包括数据定义、数据操纵和数据控制功能等部分。SQL已经成为关系数据库的标准查询语言。1数据查询功能 包括单表查询、多表查询、集合查询等。2数据定义功能 包括定义、删除、修改表等操作。3数据操纵功能 包括数据插入、数据更新、数据删除等操作。4数据控制功能 包括数据保护及事务管理等操作。,http:/V,VFP课程建设组课程建设组课程建设组,4.2查询功能,数据查询是SQL语言的重要部分,通过Select语句来实现,下面首先介绍Select语句的格式,然后通过实例具体说明其使用方法。Select语句的基本格式:Select列名表;From表名;Where条件表达式;Group by;Having;Order by排序项目ASC/DESC,ASC/DESC.;,http:/V,VFP课程建设组课程建设组课程建设组,4.2查询功能,说明:(1)Select子句的列名表:指出要显示的列的字段名,可选一个或多个字段,多个字段间用逗号分开,“*”可以用来表示某一个数据表中的所有字段。(2)From子句的表名:指出在查找过程中所涉及的表,可以是单个表,也可以是多个表,多个表之间应用逗号分开。(3)Where子句的条件表达式:指出所需数据应满足的条件,条件表达式中必须用到比较运算符或逻辑运算符(如:=、!=等)。(4)Group by 子句:说明对数据如何进行分组,其Having则表示分组满足的条件,与Group by一起使用。(5)Order by排序项目:指出查询结构的输出顺序,其中ASC为升序,DESC为降序。,http:/V,VFP课程建设组课程建设组课程建设组,4.2.1 简单查询,简单的SQL查询只包括Select子句、FROM子句。【例4-1】从“学生成绩数据库”中的student表查询所有学生的情况。在“命令”窗口中写下查询语句:Select*From student如图4-2所示,http:/V,VFP课程建设组课程建设组课程建设组,4.2.1 简单查询,【例4-2】从“学生成绩数据库”中的student表查询所有学生的学号、姓名和系科的情况。在“命令”窗口中写下查询语句:Select 学号,姓名,系科 From student,http:/V,VFP课程建设组课程建设组课程建设组,4.2.2 条件查询,WHERE子句设置查询条件,过滤掉不需要的数据行。WHERE子句可包括各种条件运算符:1比较运算符(大小比较):、=、=、!、!=10 AND age=303列表运算符(判断表达式是否为列表中的指定项):IN(项1,项2)NOT IN(项1,项2)。如country IN(Germany,China)4模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE。5空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL。6逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR。,http:/V,VFP课程建设组课程建设组课程建设组,4.2.2 条件查询,【例4-3】从“学生成绩数据库”中的student表查询所有系科为计算机的学生的学号、姓名、性别及系科的情况。在“命令”窗口中写下查询语句:Select 学号,姓名,性别,系科 From student Where 系科=“计算机”,http:/V,VFP课程建设组课程建设组课程建设组,4.2.2 条件查询,【例4-4】从“学生成绩数据库”中的student表查询总分在550至630之间的学生学号、姓名、系科、总分的情况,并按总分的升序排列。在“命令”窗口中写下查询语句:Select 学号,姓名,系科,总分 From student Where 总分Between 550 and 630 Order by 总分,http:/V,VFP课程建设组课程建设组课程建设组,4.2.3 连接查询,通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 数据库管理系统的一个标志。1简单连接查询【例4-5】从“学生成绩数据库”中的student表和assign表查询所有学生的姓名、性别、院系、课程号及成绩。在“命令”窗口中写下查询语句:Select 姓名,性别,系科,课程号,成绩 From student,assign Where student.学号=assign.学号如图4-6所示,http:/V,VFP课程建设组课程建设组课程建设组,4.2.3 连接查询,【例4-6】从“学生成绩数据库”中的student表、assign表及course表查询所有学生的学号、姓名、课程号、课程名和类别的情况。在“命令”窗口中写下查询语句:Select student.学号,姓名,assign.课程号,课程名,类别 From student,assign,course Where student.学号=assign.学号 and assign.课程号=course.课程号如图4-7所示,http:/V,VFP课程建设组课程建设组课程建设组,4.2.3 连接查询,2运用连接运算符进行连接查询连接查询分为:内连接、外连接和交叉连接。(1)内连接(INNER JOIN)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。(2)外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的数据行。(3)交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。,http:/V,VFP课程建设组课程建设组课程建设组,4.2.3 连接查询,【例4-7】从“学生成绩数据库”中的student表和assign表查询所有学生的姓名、性别、系科、课程号及成绩。我们使用连接运算符来实现。在“命令”窗口中写下查询语句:Select 姓名,性别,系科,课程号,成绩 From student inner join assign on student.学号=assign.学号,其效果与如图4-6所示一样。,http:/V,VFP课程建设组课程建设组课程建设组,4.2.4 嵌套查询,在一个Select语句中包含多个Select语句为嵌套查询。下面举例说明:【例4-8】从“学生成绩数据库”查询课程号A001成绩大于85分的学生学号,姓名及系科的情况。在“命令”窗口中写下查询语句:Select学号,姓名,院系 From student Where 学号 In(Select 学号 From assign Where 课程号=“A001”and 成绩85)如图4-8所示,http:/V,VFP课程建设组课程建设组课程建设组,4.2.5 计算与分组查询,1计算查询常用计算查询的函数有Count(计数);Sum(求和);Avg(平均值);Max(最大值);Min(最小值)等。它们可以使用在Select语句中。【例4-9】从“学生成绩数据库”查询数据表Student中“系科”的个数。在“命令”窗口中写下查询语句:Select Count(Distinct 系科)From Student如图4-9所示,http:/V,VFP课程建设组课程建设组课程建设组,4.2.5 计算与分组查询,【例4-10】从“学生成绩数据库”查询数据表Student学生总分的平均值,最大值和最小值。在“命令”窗口中写下查询语句:Select Avg(总分)AS 平均值,Max(总分)AS 最大值,Min(总分)AS 最小值 From Student,如图4-10所示。2分组查询根据关键字的值对数值属性的值进行汇总,使用Group By 字句实现。【例4-11】从“学生成绩数据库”查询数据表Student中男学生和女学生总分平均值的情况。在“命令”窗口中写下查询语句:Select 性别,Avg(总分)AS 平均值From Student Group By 性别,如图4-11所示。,http:/V,VFP课程建设组课程建设组课程建设组,4.2.5 计算与分组查询,【例4-12】从“学生成绩数据库”中查询每位学生课程的平均成绩。在“命令”窗口中写下查询语句:Select 姓名,Avg(成绩)AS 课程平均值From student,assign Where student.学号=assign.学号 Group By 姓名,如图4-12所示。【例4-13】从“学生成绩数据库”中查询每位学生课程的平均成绩且大于80分的情况。在“命令”窗口中写下查询语句:Select 姓名,Avg(成绩)AS 课程平均值From student,assign Where student.学号=assign.学号,Group By 姓名 Having Avg(成绩)80,如图4-13所示。,http:/V,VFP课程建设组课程建设组课程建设组,4.2.6 空值查询,空值不是空格或0,而是表示数据值不可用,用NULL值表示。SQL可以使用空值,利用它进行相应查询。【例4-14】从“学生成绩数据库”查询数据表Student中系科为空的学生情况。在“命令”窗口中写下查询语句:Select*From Student Where 系科 is null,http:/V,VFP课程建设组课程建设组课程建设组,4.3操作功能,SQL的操作功能是对数据进行修改,包括数据的插入、数据的更新及数据的删除等操作。,http:/V,VFP课程建设组课程建设组课程建设组,4.3.1 数据插入,SQL语言中用INSERT语句向表或视图中插入新的数据行。INSERT语句的语法格式为:INSERT INTO table_sourcecolumn_listVALUES(DEFAULT|constant_expression,n)其中,column_list参数为新插入数据行中一列或多列列名列表,它说明INSERT 语句只为指定列插入数据。在给表或视图中部分列插入数据时,必须使用列名列表方式指出这部分列名。,http:/V,VFP课程建设组课程建设组课程建设组,4.3.1 数据插入,【例4-15】在数据表Student中插入一个学生的记录:学号2008021,姓名 郭襄,性别 女,系科 计算机,出生日期 1988年5月1日。在“命令”窗口中可用如下语句:Insert Into student(学号,姓名,性别,出生日期,系科);Values(“2008021”,”郭襄:,“女”,05/01/88,”计算机”),http:/V,VFP课程建设组课程建设组课程建设组,4.3.2 数据更新,UPDATE语句用于修改表中数据,该语句的语法格式为:UPDATE table_nameSET column_name1=variable1,column_name2=variable2WHERE search_conditions其中SET子句指出表中被修改的列或变量,以及它们的新值。column_name为被修改的列名。,http:/V,VFP课程建设组课程建设组课程建设组,4.3.2 数据更新,【例4-16】在数据表Student中为所有学生的总分增加10分。在“命令”窗口中可用如下语句:Update student Set 总分=总分+10【例4-17】在数据表Student中为计算机系的学生其总分增加10分。在“命令”窗口中可用如下语句:Update student Set 总分=总分+10 Where 系科=”计算机”,http:/V,VFP课程建设组课程建设组课程建设组,4.3.3 数据删除,DELETE语句可以删除表中的数据。其DELETE语句的语法格式为:DELETE FROM table_name|view_name WHERE conditionsDELETE语句的结构与UPDATE语句有些类似,其中也包含FROM子句和WHERE子句。WHERE子句为数据删除指定条件。不使用WHERE子句时,DELETE语句将把有或视图中所有的数据删除。,http:/V,VFP课程建设组课程建设组课程建设组,4.3.3 数据删除,【例4-18】永久删除数据表Student学号为2008015的记录。在“命令”窗口中可用如下语句:Delete From student Where 学号=”2008015”Pack Pack对当前表中具有删除标记的所有记录做永久的删除。,http:/V,VFP课程建设组课程建设组课程建设组,4.4定义功能,SQL的定义功能是对表进行修改,包括对表结构进行创建、修改表结构以及删除表等操作。,http:/V,VFP课程建设组课程建设组课程建设组,4.4.1 表的定义,一般格式如下:CreateTable(列级完整性约束条件,列级完整性约束条件.,);其中:是所要定义的基本表的名字,最好能表达表的应用语义 是由一个或多个属性(列)组成。建表的同时通常还可以定义与该表有关的完整性约束条件,这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由DBMS自动检查该操作是否违背这些完整性约束条件。如果完整性约束条件涉及到该表的多个属性列,则必须定义在表级上,否则既可以定义在列级也可以定义在表级。,http:/V,VFP课程建设组课程建设组课程建设组,4.4.1 表的定义,【例4-19】建立一个自由表“学生”,包括:学号、姓名、性别、出生日期、是否党员、籍贯和简历。在“命令”窗口中可用如下语句:Create Table 学生(学号 C(8),姓名 C(8),性别 C(2),出生日期 D,是否党员 L,籍贯 C(8),简历 M)【例4-20】用SQL命令建立Student表。在“命令”窗口中可用如下语句:Open DataBase 学生成绩数据库Create Table student(学号 C(8),姓名 C(8),性别 C(2),出生日期 D,系科 C(20),统招否 L,总分N(6,1),备注 M,照片 G),http:/V,VFP课程建设组课程建设组课程建设组,4.4.2 表结构的修改,一般格式为:AlterTableAlter Add完整性约束 Drop Modify AddPrimaryKey(列名)AddPreignKey(列名)Referneces表名(列名);其中指定需要修改的基本表,Add子句用于增加新列和新的完整性约束条件,Drop子句用于删除指定的完整性约束条件,Modify子句用于修改原有的列定义。,http:/V,VFP课程建设组课程建设组课程建设组,4.4.2 表结构的修改,【例4-21】为Student表增加一个党员否字段。在“命令”窗口中可用如下语句:Alter Table student Add 党员否 L【例4-22】修改Student表的姓名字段,其宽度改为10。在“命令”窗口中可用如下语句:Alter Table student Alter 姓名 C(10)【例4-23】删除Student表的党员否字段。在“命令”窗口中可用如下语句:Alter Table student Drop党员否,http:/V,VFP课程建设组课程建设组课程建设组,4.4.3 表的删除,删除表时会将与表有关的所有对象一起删掉。基本表定义一旦删除,表中的数据、在此表上建立的索引都将自动被删除掉,而建立在此表上的视图虽仍然保留,但已无法引用。因此执行删除操作一定要格外小心。一般格式为:DropTable【例4-24】删除Student表。在“命令”窗口中可用如下语句:Open DataBase 学生成绩数据库Drop Table student,http:/V,VFP课程建设组课程建设组课程建设组,4.5 本章小结,SQL结构化查询语言(Structured Query Language)功能十分强大,其数据查询是SQL的核心。本章主要讲述了Select查询语句的基本使用方法,包括单表查询、多表查询、条件查询、分组查询等操作。另外,本章还讲述了SQL语言的操作功能和定义功能。多种方法的结合灵活操作数据库中的数据表。,本章结束,