《关系数据库语言SQL.ppt》由会员分享,可在线阅读,更多相关《关系数据库语言SQL.ppt(77页珍藏版)》请在三一办公上搜索。
1、第四章 关系数据库语言SQL,第四章 关系数据库语言SQL,4.1SQL简介4.2查询语句4.3数据更新4.4数据定义小结,4.1 SQL简介,SQL是结构化查询语言(Structured Query Language)的缩写,是一种面向关系数据库的国际标准语言,在当前数据库领域中应用最为广泛和成功,美国国家标准局ANSI在1986年将SQL作为关系数据库系统的标准语言,后被国际标准化组织(ISO)采纳为国际标准。现在很多大型数据库都实现了SQL语言。,4.1.1 SQL语言的发展,SQL的发展历程主要有以下几个阶段:(1)1974年由Boyce和Chamberlin提出,当时称为SEQUEL
2、(Structured English Query Language)。(2)19751979年IBM公司对SEQUEL进行了修改,并由San Jose Research Laboratory研制了著名的关系数据库管理系统原型System R,实现了这种语言。(3)1981年IBM推出了商用关系数据库SQL/DS,并将其改名为SQL,由于它功能丰富,语言简洁,因此倍受用户及计算机工业界欢迎,被众多计算机公司和软件公司所采用。(4)目前SQL语言不仅用于小型数据库如Foxpro、Access,而且更广泛用于各种大型数据库,如Sysbase、SQL Server、Oracle、Informix、D
3、B2、Ingres等。,SQL在发展中经历了一系列标准化过程:(1)1982年美国国家标准局(American National Standard Institute,简称ANSI)开始制订SQL标准。(2)1986年10月ANSI的数据库委员会X3H2批准了SQL作为关系数据库语言的美国标准;同年ANSI公布SQL语言的第一个标准SQL-86,并于次年由国际标准化组织(International Standardization Organization,简称ISO)通过SQL-86标准。(3)1989年ISO对SQL-86进行补充,推出SQL-89标准,也称SQL1。(4)1992年ISO又
4、推出SQL-92标准,亦称SQL2。(5)1999年起ANSI陆续公布增加了面向对象功能的新标准SQL-99(亦称SQL3)的12个标准文本。,4.1.2 SQL语言的特点,(1)非过程化:SQL语言是非过程化语言,在SQL语言中,只要求用户提出“做什么”,而无需指出“怎样做”。SQL语句操作的过程由系统自动完成。(2)一体化:SQL可以操作于不同层次模式,集数据定义语言(DDL)、数据操纵语言(DML)、数据控制语言(DCL)为一体。用SQL语言可实现DB生命周期的全部活动,其中包括建立数据库、建立用户账号、定义关系模式、查询及数据维护、数据库安全控制等。(3)两种使用方式,统一的语法结构:
5、两种使用方式:自含式语言与嵌入式语言自含式方式就是联机交互使用方式;嵌入式方式是指SQL语句嵌入某种高级程序设计语言的程序中,以实现数据库操作。尽管这两种使用方式不同,但SQL语言的语法结构基本是一致的。,4.1.3 SQL语言的书写准则,遵从某种准则可以提高语句的可读性,通常遵循的准则主要有:SQL语句对大小写不敏感,但关键字常用大写SQL语句可写在一行上,但为便于理解,增强条理性,常习惯于每个字句占用一行关键字不能在行与行之间分开,很少采用缩写形式SQL中的数据项需同时列出时,分隔符用“,”;字符或字符串常量的定界符用单引号“”表示,4.2 查询语句,4.2.1 基本查询4.2.2 使用列
6、表达式4.2.3 WHERE从句的进一步使用4.2.4 数据汇总4.2.5 连接查询4.2.6 嵌套查询4.2.7 联合查询4.2.8 使用系统内置函数的查询,SQL的核心是数据查询。对于数据库的查询操作是通过 SELECT 查询命令实现的,它的基本形式由 SELECTFROMWHERE 查询块组成,多个查询块可以嵌套执行。,总述,SQL查询语句的完整语法描述如下:,SELECT ALL|DISTINCT,FROM,WHERE GROUP BY HAVING ORDER BY ASC|DESC;,指定要显示的属性列,指定查询对象,指定查询条件,查询结果按指定列的值分组,筛选出只有满足指定条件的
7、组,对查询结果表按指列值的升序或降序排序,4.2.1 基本查询,最基本的查询就是从指定的表中找出符合条件的记录。这样的查询由 SELECT和 FROM 短语构成无条件查询,或由 SELECT、FROM 和 WHERE 或其他短语构成条件查询。,(1)简单的无条件查询设某个数据库中有表stu_info,请把该表中的所有记录的所有属性查询出来:,SELECT*/*表示所有字段,是通配符 FROM stu_info/选定数据库中的表,(2)简单的条件查询请查找stu_info表中所有的女生的信息。,SELECT*FROM stu_info WHERE xbm=女/设定条件,在SELECT子句中可以决
8、定哪些列出现在结果关系中,这相当于关系代数中的投影运算。具体办法:在SELECT子句之后不是写“*”,而是根据需要列出在FROM子句中声明的诸关系的属性。例:SELECT xh,xm/选定字段FROM stu_info/选定数据库中的表WHERE xbm=女/设定条件,(3)查询语句中的投影操作,使用 SQL 的SELECT 可以将查询结果排序,排序的短语是 ORDER BY,具体格式如下:SELECT 列名1,列名2,FROM 表名 WHERE 条件表达式 ORDER BY 列名1 ASC|DESC,列名2ASC|DESC按升序(ASC)或降序(DESC)排序,允许按一列或多列排序。,(4)
9、设定排序条件,下面是使查询结果排序的例子:SELECT*/“*”表示所有字段 FROM stu_info/选定数据库中的表 WHERE xbm=女/设定条件 ORDER BY xh/设定排序字段,在查询过程中经常会出现一些重复记录,例如“SELECT bh FROM stu_info”。其查询结果将会有多个重复的班级名,显然这种结果不能令人满意。因此需要去掉重复值,此时需要指定 DISTINCT 短语:SELECT DISTINCT bh FROM stu_info 这里短语DISTINCT 的作用是去掉查询结果中的重复值。执行结果中班级名都不重复。,(5)限定重复记录,4.2.2 使用列表达
10、式,在 SQL中,指定列的方法我们学习了以下两种:(1)指定列(2)使用通配符*第(3)种是:可用列表达式,来获取经过计算的查询结果。列表达式不仅可以是算术表达式,还可以是字符串常量、函数等。,(6)计算列值,SELECT 学号,xh,年龄,YEAR(GETDATE()-YEAR(CSRQ),bhFROM stu_info,(7)修改查询结果的列标题,(1)SELECT YEAR(GETDATE()-YEAR(CSRQ)AS 年龄,nl FROM stu_info(2)SELECT 学号=xh,nl FROM stu_info(3)SELECT xh 学号,nl FROM stu_info,查
11、询工作的关键就在通过分析怎样把实际问题中的自然语言描述转化为1)从哪个表中查询。即:from子句2)要查询哪些列。即:select子句3)要查询的条件。即:where子句,完成查询工作的三个关键步骤,其中第3步最复杂,4.1.3 WHERE从句的进一步使用,常用的查询条件,(8)表达式比较如:SELECT*FROM stu_info WHERE nl20,(9)确定范围between and和 not between and如:查询考试成绩在60-70之间的学号、课程号、考试成绩:SELECT xh,kch,kscjFROM xkWHERE kscj BETWEEN 60 AND 70,(10
12、)确定集合,IN 和 NOT IN例:查询复材0108、复材0109班的学生的信息SELECT xh,xm,xbm,bhFROM stu_infoWHERE bh IN(复材0108,复材0109),(11)字符匹配,NOT LIKE 和 LIKE 与%和 _ 搭配。,%代表任意长度的字符串.如 a%b:acb,addgb 等都满足匹配_(下横线)代表任意单个字符。,例:查询班级名中第1个字为“计”字的学生信息:SELECT*FROM stu_info WHERE bh like 计%例:查询名字中第2个字为“宁”字的学生信息:SELECT*FROM stu_info WHERE xm lik
13、e _宁%,例:查询DB_Design课程的课程号和学分。SELECT ckh,kcxf FROM GCourse WHERE km LIKE DB_Design ESCAPE 例:查询以DB_开头,且倒数第3个字符为 i的课程的详细情况。SELECT*FROM GCourse WHERE km LIKE DB_%i_ _ ESCAPE,当用户要查询的字符串本身就含有%或 _ 时,要使用 ESCAPE 换码字符 短语对通配符进行转义。,(12)涉及空值的查询,SELECT*FROM stu_info WHERE bh IS NULL,(13)多重条件查询,用逻辑运算符and和or连接,and的
14、优先级高于or。如:查询应什么班,姓刘的学生。SELECT*FROM stu_info WHERE bh like 应%and 姓名 like 刘%,4.2.4 数据汇总,(14)聚合函数,聚合函数一览表,例:查询学生总数SELECT count(*)FROM stu_info,例:已知数据库表XK中高等数学课程的代码为090101,查询学生选修高等数学的平均成绩:SELECT avg(KSCJ)AS 高等数学 FROM XK WHERE KCH=090101,(15)GROUP BY子句,Group by 子句将查询结果表按某一列或多列值分组,值相等的分为一组。如:在表xk中查询各课程编号及
15、相应的选课人数,注:GROUP BY子句中不能使用聚合函数,并且必须在GROUP BY子句中列出SELECT列表中所有的非聚合项。,例:在表stu_info中查询每个专业的男生、女生人数,在group by子句后面加WITH ROLLUP或WITH CUBE,如果还要显示每个专业的总人数及全体学生总人数,如何实现?,SELECT kch,count(xh)FROM xk GROUP BY kch,SELECT zyh,xbm,count(*)as 人数 FROM stu_info GROUP BY zyh,xbm,例:查询选修了3门以上课程的学生及选课数:SELECT XH,COUNT(*)F
16、ROM XKGROUP BY XHHAVING(COUNT(*)3),HAVING短语指定分组或聚合的条件。只有满足条件的分组才被选出来,HAVING一般与GROUP BY子句一起使用。,(16)HAVING 短语,SELECT XH,COUNT(*)FROM XKWHERE(XH LIKE 2001%)GROUP BY XHHAVING(COUNT(*)3),例:查询学号前四位是2001的学生的学号及选课数:,having 短语指定选择组的条件,只有满足条件的组才被选出来。一般和group by子句一起使用,where子句从基本表中选择满足条件的元组,而不是指定满足条件的分组,这是二者的根本
17、区别。,若一个查询同时涉及两个以上的表,称为连接查询。连接查询是关系数据库中最主要的查询,按连接类型可分为:内连接、外连接和交叉连接。其中内连接又分:等值连接、非等值连接和自然连接;外连接又分:左外连接、右外连接和全外连接等。,4.2.5 连 接 查 询,连接查询中用来连接两个关系的条件称为连接条件或连接谓词,格式:表名1.列名 比较运算符 表名2.列名其中比较运算符主要有:=、=、=、!=当连接运算符为=时,叫等值连接。使用其它运算符称为非等值连接。连接谓词中的列名称为连接字段。,例:查询每个学生及其选课情况,SELECT*FROM stu_info,xkWHERE stu_info.xh=
18、xk.xh,例:查询应化041班每个学生及其选修课程的情况,SELECT stu_info.xh,stu_info.xm,stu_info.bh,stu_info.xbm,xk.kch,xk.kscjFROM stu_info,xkWHERE stu_info.xh=xk.xh and stu_info.bh=应化041/复合条件连接,多表查询:涉及两个表以上的查询,SELECT xm FROM stu_info,xk,gcourseWHERE gcourse.km=数据库原理 and gcourse.kch=xk.kch and xk.xh=stu_info.xh,为了简化,表名可以取别名,
19、且别名只在本次查询有效,增加表别名后的结果:SELECT xm FROM stu_info a,xk b,gcourse cWHERE c.km=数据库原理 and c.kch=b.kch and b.xh=a.xh,例如:查询选修了有机化学这门课程的学生的姓名,下面讨论另一类基于多个关系的查询,这类查询所要求的结果出自一个关系,但相关的条件却涉及多个关系。在前面的例子中,WHERE 之后是一个相对独立的条件,这个条件或者为真、或者为假。但是,有时需要用另外的方式来表达检索要求。比如,当检索关系X中的记录时,它的条件依赖于相关的关系Y中的记录属性值,这时使用SQL的嵌套查询功能将非常方便。,4
20、.2.6 嵌 套 查 询,在SQL语言中,一个select-from-where语句称为一个查询块,将一个查询块嵌套在另一个查询块的where子句或having短语的条件中的查询称为嵌套查询。,等价形式:SELECT xm FROM stu_info,xk WHERE stu_info.xh=xk.xh and kch=05,SELECT xmFROM stu_info,例:在stu_info表中查询选修了05号课程的学生姓名,WHERE xh IN(SELECT xh FROM xk WHERE kch=05),例:查询与刘玉涛在同一个班学习的学生的学号、姓名、班级。,SELECT xh,x
21、m,bhFROM stu_infoWHERE bh IN,(17)带有in谓词的子查询,(18)带有比较运算符的子查询,例:查询与学号是20029001的学生在同一个班学习的学生,按学号排序。,SELECT xh,xm,bhFROM stu_infoWHERE bh ORDER BY xh,(SELECT bh FROM stu_info WHERE xm=刘玉涛),=(SELECT bh FROM stu_info WHERE xh=20029001),(19)带有any或all谓词的子查询,比较子查询通常用到操作符ALL、ANY。其通用格式为:ALL|ANY,例:查询其他班级中比应化041
22、班某个学生年龄小的那些学生的姓名和年龄。,SELECT xm,nl FROM stu_info WHERE bh应化041 and nl,any(select nl from stu_info where bh=应化041),(20)带有exists谓词的子查询,EXISTS是测试子查询是否有数据行返回,有则返回TRUE,否则返回FALSE。,例:查询选修了高等数学(090101)的学生姓名、性别和班级。SELECT xm,xbm,bh FROM stu_infoWHERE exists(select*from xk where xh=stu_info.xh and kch=090101),例
23、:查询没有选修高等数学(090101)的学生姓名、性别和班级。SELECT xm,xbm,bh FROM stu_infoWHERE not exists(select*from xk where xh=stu_info.xh and kch=090101),4.2.7 联合(集合)查询,select语句的查询结果是元组的集合,所以多个select语句的结果可进行集合操作。集合操作主要包括:并操作UNION、交操作INTERSECT、差操作MINUS标准SQL只提供UNION,其语法格式如下:SELECT_1 UNION ALL SELECT_2,如果要将查询的结果保存在当前数据库新建的表NE
24、WSTU中,可以使用INTO子句:SELECT*INTO NEWSTU FROM aUNION ALLSELECT*FROM b,例:查询编号为01的学院的学生及所有学院的本科生SELECT*FROM stu_info WHERE xsh=01 UNIONSELECT*FROM stu_info WHERE pyccm=本科,4.2.8 使用系统内置函数的查询,(21)数学函数 ABS(数字型表达式)、RAND(整型表达式)(22)字符串处理函数 ASCII(字符型):返回表达式最左端字符的ASCII值 CHAR(0-255之间的整数):将ASCII转换为字符 LEFT(字符型,整型):返回从
25、字符串左边开始指定个数的字符 LTRIM(字符型):删除字符串最左边的空格,并返回字符串 REPLACE(字符型1,字符型2,字符型3):用3替换1中包含的2,并返回替换后的表达式 SUBSTRING(express,start,length):返回express中指定的部分数据 STR(float_exp,length,decimal):将数字数据转换为字符数据,(23)系统函数getdate():返回当前的系统日期和时间year()、month()、day():分别返回指定日期的年、月、日 cast(表达式 AS 数据类型):将表达式的值转换为数据类型参数所指定的类型。case函数:一种是
26、简单的CASE函数,另一种是搜索型的CASE函数。,简单CASE语法格式:CASE 输入表达式 WHEN 比较表达式 THEN 结果表达式 ELSE 表达式END,搜索CASE语法格式:CASE WHEN 条件1 THEN 表达式1 WHEN 条件2 THEN 表达式2 ELSE 表达式END,例:在STU_INFO中查询03学院学生的学号、姓名、性别,并将性别分别转换成“男生”、“女生”。SELECT XH,XM,XBM,XBM=CASE 男 WHEN XBM THEN 男生 ELSE 女生 ENDFROM STU_INFOWHERE XSH=03例:查询成绩表CS中选修了“数据库技术及应用
27、”课程的学生的学号、姓名、5分制成绩SELECT 学号,姓名,5分制成绩=CASE WHEN 成绩=60 AND成绩=70 AND成绩=80 AND成绩=90 THEN 优秀 ENDFROM CS,4.3 数据更新,4.3.1 插入数据4.3.2 修改数据4.3.3 删除数据,4.2.1 插入数据,语句格式INSERTINTO(,)VALUES(,)功能 将新元组插入指定表中。,(1)插入单个元组,例:INSERT INTO stu_info(xh,xm,xbm)VALUES(2005090209,王东方,男),如果基本表只有上述三个属性,则该句等价于:INSERT INTO stu_info
28、 VALUES(2005090209,王东方,男),(2)插入子查询结果,例:在STU_INFO表中查询出应化041班的学生情况并存放在YINGHUA表中。INSERT INTO yinghua SELECT xh,xm,xbm,csrq FROM stu_info WHERE bh=应化041,语句格式 INSERT INTO(,)子查询功能:将子查询结果插入指定表中,用以插入批量记录,4.3.2 修改数据,语句格式UPDATE SET=,=,WHERE 功能修改指定表中满足WHERE子句条件的元组,(3)修改一个元组的值 UPDATE stu_info SET bh=材0169 WHERE
29、 xh=2005090209,注意:对批量数据的修改,一定把将要修改的记录先查询出来,确认无误后再修改。,(4)修改多个元组的值 UPDATE gcourse SET kcxf=2,(5)带子查询的修改语句 将选修了高数的学生的成绩加10分 UPDATE xk SET kscj=kscj+10 WHERE kch=(select kch from gcourse where km=高等数学),4.3.3 删除数据,语法格式 DELETE FROM WHERE 功能删除指定表中满足WHERE子句条件的元组WHERE子句指定要删除的元组缺省表示要删除表中的所有元组,(6)删除一个元组的值 DELE
30、TE FROM stu_info WHERE xh=2006050010,(7)删除多个元组的值 DELETE FROM stu_info WHERE bh=应0203 删除表中所有数据 DELETE FROM stu_info,(8)带子查询的删除语句 将信息学院学生的成绩全部删除DELETE FROM xk WHERE 12=(SELECT xsh FROM stu_info WHERE stu_info.xh=xk.xh),注意:在日常工作中,操作删除语句,一定要先查询要删除的数据,确认无误后再删除。SELECT*FROM xk WHERE 12=(select xsh from stu
31、_info where stu_info.xh=xk.xh),4.4 数据定义,4.4.1 定义基本表4.4.2 修改基本表4.4.3 删除基本表4.4.4 视图4.4.5 索引,4.4 数据定义,4.4.1 定义基本表,语句格式:CREATE TABLE(,):所要定义的基本表的名字:组成该表的各个属性(列):涉及相应属性列的完整性约束条件:涉及一个或多个属性列的完整性约束条件,例:建立一个学生表Student,它由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。CREATE TABLE Student(
32、Sno VARCHAR(5)NOT NULL UNIQUE,Sname VARCHAR(20)UNIQUE,Ssex VARCHAR(1),Sage INT,Sdept VARCHAR(15),字符型长度为5不能为空值取值唯一,字符型长度为20,字符型长度为1,整数,字符型长度为15,常用完整性约束主码约束:PRIMARY KEY唯一性约束:UNIQUE非空值约束:NOT NULL默认值约束:DEFAULT检查约束:CHECK参照完整性约束:FOREIGN KEYREFERENCE,例:建立一个“学生选课”表SC,它由学号Sno、课程号Cno,修课成绩Grade组成,其中(Sno,Cno)为主
33、码。CREATE TABLE SC(Sno VARCHAR(5),Cno VARCHAR(3),Grade int,Primary key(Sno,Cno),例:创建表n_jobsCREATE TABLE n_jobs(job_id smallint IDENTITY(1,1)PRIMARY KEY CLUSTERED,job_desc varchar(50)NOT NULL DEFAULT(新部门),min_lvl tinyint NOT NULL CHECK(min_lvl=12),max_lvl tinyint NOT NULL CHECK(max_lvl=250),例:使用表达式(最低
34、分+最高分)/2)生成中等分计算列。CREATE TABLE 得分(最低分 int,最高分 int,中等分 AS(最低分+最高分)/2),4.4.2 修改基本表,语法格式:ALTER TABLE ALTER COLUMN ADD 完整性约束 DROP:要修改的基本表ALTER COLUMN 子句:要更改的列,要更改的列不能是数据类型为text,image,ntext或timestamp等列ADD子句:增加新列和新的完整性约束条件DROP子句:删除指定的完整性约束条件或列名,1、添加列例:向学生表中添加入学时间列,其数据类型为日期型 ALTER TABLE stu_info ADD rxsj D
35、ATETIME,可能破坏已有数据,2、修改列例:将教师表的xb列改为smallint数据类型 ALTER TABLE gtech ALTER COLUMN xb smallint,3、删除列或约束例:将数据库表gtech中的xb列删除 ALTER TABLE gtech DROP COLUMN xb例:删除学生姓名必须取唯一值的约束 ALTER TABLE stu_info DROP UNIQUE(xm),4.4.3 删除基本表,语法格式:DROP TABLE 基本表定义一旦删除,表中的数据、表上的索引和视图都将自动被删除删除基本表时,系统会从数据字典中删去有关该基本表及其索引的描述。,例:删
36、除EDU_D库中的表stu_info DROP TABLEstu_info,4.4.4 视图,视图是关系数据库系统提供给用户以多种角度观察数据库中数据的重要机制。视图是从一个或多个基本表(或视图)导出的表,是个虚表。数据库只存放视图的定义,不存放视图对应的数据,这些数据仍存放在原来的基本表中。所以,视图的数据跟随基本表的数据而变化。视图一旦被定义,就可以被查询、删除,修改及再定义一个新的视图等。视图包含一系列带有名称的列和行数据。这些数据来自定义视图的查询所引用的基表中,并且在引用视图时动态生成。,1、定义视图(1)用企业管理器建立视图 请同学们上机自己学习建立视图的方法。(2)用SQL语句建
37、立视图 CREATE VIEW 视图名 AS WITH CHECK OPTION其中WITH CHECK OPTION表示对视图进行UPDATE、INSERT和DELETE操作时要保证更新、插入或删除的行满足视图定义中的条件表达式,A、选择列定义视图 可定义一个视图,该视图由表的部分列组成。下例中,视图MyView1包含了employees表中的三个列。CREATE VIEW MyView1 AS SELECT lname,fname FROM employee定义了视图后,可以和表一样,使用SELECT语句访问它。例如:SELECT*FROM MyView1,B、基于列的表达式定义视图 在定
38、义视图时,除了使用基础表的列外,还可使用基本表的列的表达式,生成自己的列。下例中,视图MyView2的第四列即由表达式计算而来。CREATE VIEW MyView2(xh,xm,xbm,nl)AS SELECT xh,xm,xbm,year(getdate()-year(csrq)FROM stu_info,C、选择行定义视图 可定义一个视图,该视图由表的部分行组成。下例中,视图MyView3只包含employee表中姓名包含sh的行。CREATE VIEW MyView3 AS SELECT*FROM employee WHERE fname LIKE%sh%,D、选择行和列 可定义一个视
39、图,该视图由表的部分行和列联合组成。下例中,视图MyView4只包括三列 CREATE VIEW MyView4 AS SELECT lname,fname,pub_id FROM employee WHERE fname LIKE%sh%,E、基于多个表定义视图 CREAT VIEW 查询学生选课情况 AS SELECT stu_info.xh,stu_info.xm,gcourse.km FROM stu_info,gcourse,xk WHERE stu_info.xh=xk.xh and xk.kch=gcourse.kch,2、更新视图 更新视图是指通过视图来插入(INSERT)、删
40、除(DELETE)、修改(UPDATE)数据。由于视图是不实际存储数据的虚表,因此,对视图的更新最终要转换为对基本表的更新。,例、在stu_info表创建信息学院学生的视图:CREATE VIEW is_stu AS SELECT*FROM stu_info WHERE xsh=03,例:现将视图is_stu中学号为1998031001的学生的学院代号改为“12”:UPDATE is_stu SET xsh=12 WHERE xh=1998031001,WITH CHECK OPTION,会使记录从视图中消失,要注意这种问题,例:将is_stu中学号为1998031001的学生姓名改为“陈明亮
41、”:UPDATE is_stu SET xm=陈明亮 WHERE xh=1998031001,AND xsh=03,3、管理和删除视图(1)用企业管理器管理、删除视图。上机实验。(2)用SQL语言删除视图 DROP VIEW 例:删除上例中建立的视图is_stu DROP VIEW is_stu,4、视图的作用实现集中多表查询条件提供了一个简单有效的安全机制,便于数据安全保护便于用户重新组织数据便于数据的交换操作,4.4.5 索引,索引是数据库中的一个列表,该列表包含了某个数据表中的一列或几列值的集合,以及这些值的记录在数据表中存储位置的物理地址。索引类似于目录,通过使用索引,在数据库中获取数
42、据的时候,就可以不用扫描数据库中的所有数据记录,这样能够提高系统获取数据的性能。建立索引是加快查询速度的有效手段但索引的建立要占用额外的存储空间,也要更新,建立索引的一般准则:(1)经常被查询的列。例如经常在WHERE子句中出现的列。(2)ORDER BY子句中使用的列。(3)作为主键或外键的列。(4)列的值是惟一的列。(5)两个或多个列经常同时出现在WHERE子句或连接条件中。下列情况一般不适合建立索引:在查询中很少被引用的列。包含太多重复值的列。例如stu_info表中的XB列,只有“男”、“女”两个值,在此建立索引显然是无意义的。,1、建立索引自动创建在创建表时,如果创建了主键(Prim
43、ary Key)或唯一约束(UNIQUE),系统会自动创建一个唯一索引。(2)用企业管理器创建上机练习。(3)用SQL语句创建,语句格式CREATE UNIQUE CLUSTER INDEX ON(,);用指定要建索引的基本表名字 索引可以建立在该表的一列或多列上,各列名之间用逗号分隔 用指定索引值的排列次序,升序:ASC,降序:DESC。缺省值:ASC UNIQUE表明此索引的每一个索引值只对应唯一的数据记录 CLUSTER表示要建立的索引是聚簇索引,例:为学生-课程数据库中的Student,Course,SC三个表建立索引。其中Student表按学号升序建唯一索引,Course表按课程号升
44、序建唯一索引,SC表按学号升序和课程号降序建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);,唯一值索引 对于已含重复值的属性列不能建UNIQUE索引 对某个列建立UNIQUE索引后,插入新记录时DBMS会自动检查新记录在该列上是否取了重复值。这相当于增加了一个UNIQUE约束聚簇索引 建立聚簇索引后,基表中数据也需要按指定的聚簇属性值的升序或降序存放。也即聚簇索引的索引项顺序与表中记录的物理顺序一致例:CREATE CLUSTER INDEX Stu_sname ON Student(Sname);在Student表的Sname列上建立一个聚簇索引,而且Student表中的记录将按照Sname值的升序存放,2、修改和删除索引(1)使用企业管理器上机练习。(2)使用SQL语句删除索引 DROP INDEX|删除索引时,系统会从数据字典中删去有关该索引的描述。例:删除Student表的Stu_sname索引。DROP INDEX Student.Stu_sname,小结,SQL查询语句是本章学习的重点和基础要能够熟练掌握并运用SQL语句,