1、2024-9-612024-9-62主要内容(一)主要内容(一)v3.1 SQL简介简介SQL的特点SQL语言的分类vSQL数据定义功能vSQL数据查询功能vSQL数据修改功能vSQL数据控制功能v3.2 基本的数据定义基本的数据定义定义、删除与修改基本表索引的创建和删除v3.3 基本的数据操作基本的数据操作插入、修改、删除数据2024-9-6 3v历史SQL:Structured Query Language1974年,由Boyce和Chamber提出1975-1979年,在System R上实现,由IBM的San Jose研究室研制,称为Sequel1986年 ANSI公布第一个SQL标准
2、;1987、1989、1992.不断扩充;目前有标准:SQL86、SQL92、SQL99、SQL2003、SQL2006、SQL2008v本章主要讲述SQL92语言的用法。v要求能熟练使用SQL语句在不同的RDBMS中完成数据库的基本操作。2024-9-6 4v标准化标准化有关组织有关组织vANSI(American Natural Standard Institute)vISO(International Organization for Standardization)有关标准有关标准vSQL-86“数据库语言数据库语言SQL”vSQL-89“具有完整性增强的数据库语言具有完整性增强的数据
3、库语言SQL”,增加了对完整性约束的支持,增加了对完整性约束的支持vSQL-92“数据库语言数据库语言SQL”,是,是SQL-89的超集,增加了许多新特性,如新的数据类型,更丰富的的超集,增加了许多新特性,如新的数据类型,更丰富的数据操作,更强的完整性、安全性支持等。数据操作,更强的完整性、安全性支持等。vSQL-3增加对面向对象模型的支持增加对面向对象模型的支持vSQL2003支持支持 XML,支持,支持 Window 函数、函数、Merge 语句等语句等vSQL2006继续增强继续增强 XML方面的特性方面的特性vSQL20082024-9-6 5v特点特点一体化一体化v集集DDL,DML
4、,DCL于一体于一体v单一的结构单一的结构-关系,带来了数据操作符的统一关系,带来了数据操作符的统一面向集合的操作方式面向集合的操作方式v一次一集合一次一集合高度非过程化高度非过程化v用户只需提出用户只需提出“做什么做什么”,无须告诉,无须告诉“怎么做怎么做”,不必了解存,不必了解存取路径取路径两种使用方式,统一的语法结构两种使用方式,统一的语法结构vSQL既是自含式语言(用户使用),又是嵌入式语言(程序员既是自含式语言(用户使用),又是嵌入式语言(程序员使用)使用)语言简洁,易学易用语言简洁,易学易用2024-9-6 6v请比较:请比较:SQL支持的数据库三级模式支持的数据库三级模式 见图见
5、图ANSI SPARC报告中的数据库三级模式报告中的数据库三级模式 不同点不同点 v视图(视图(View)视图从若干个视图从若干个Table或其他视图上生成或其他视图上生成视图是一张虚表视图是一张虚表视图属于外模式(子模式)视图属于外模式(子模式)Database中只有视图的定义,而无实际存储的数据中只有视图的定义,而无实际存储的数据v基本表(基本表(Table)v存储文件(存储文件(File)*.dbf *.mdb *.mdf 、*.ndf2024-9-6 7vSQL对三级模式的对应支持对三级模式的对应支持用户用户1视图视图基本表基本表1基本表基本表2用户用户2存储文件存储文件外模式外模式模
6、模 式式内模式内模式用户用户外模式外模式模式模式内模式内模式DB内模式的基本单内模式的基本单位,存储基本表位,存储基本表外模式的基本单外模式的基本单位,与基本表有位,与基本表有本质区别本质区别返回2024-9-6 8v不同之处:不同之处:三级模式中,一个应用程序只能开启一个外模式,三级模式中,一个应用程序只能开启一个外模式,SQL中则不然中则不然三级模式中,应用程序只能访问外模式,三级模式中,应用程序只能访问外模式,SQL中可以是外模式和中可以是外模式和模式模式模式模式内内模式映像模式映像外模式外模式模式映像模式映像应用应用1应用应用2应用应用3外模式外模式A外模式外模式B模模 式式内内 模模
7、 式式OSDBMS数据库数据库SQL用户用户SQL用户用户视图视图1视图视图2基本表基本表1基本表基本表2基本表基本表3存储文件存储文件1存储文件存储文件2存储文件存储文件3外模外模式式模模 式式内模内模式式图图2 SQL2 SQL支持的数据库模式支持的数据库模式 图图1 SPARCSPARC三级模式结构三级模式结构 返回2024-9-6 9用户用户1 1用户用户2 2用户用户4 4视图视图V1V1视图视图V1V1用户用户3 3基本表基本表B1B1基本表基本表B2B2基本表基本表B4B4基本表基本表B3B3存储文件存储文件S1S1存储文件存储文件S2S2存储文件存储文件S4S4存储文件存储文件
8、S3S3SQLSQL用户用户VIEWVIEWTableTableStored fileStored file图图3 SQL数据库体系结构数据库体系结构2024-9-6 10v数据定义语言数据定义语言 DDL(Data Definition Language)用于创建、更改或删除数据库对象,如表、视图、索引及其它对象。语句包括:CREATE、ALTER、DROPv数据操纵语言数据操纵语言DML(Data Manipulation Language)用于操纵数据库对象(如表)。语句包括:SELECT、INSERT、UPDATE、DELETEv数据控制语言数据控制语言DCL (Data Contro
9、l Language)用于定义控制访问对象(如表)。语句包括:GRANT、REVOKE2024-9-6 11SQL功能功能操作符操作符数据查询数据查询SELECT数据定义数据定义CREATE,ALTER,DROP数据操纵数据操纵INSERT,UPDATE,DELETE数据控制数据控制GRANT,REVOKEvSQL语句的语句的9个核心动词个核心动词2024-9-6 12实验环境实验环境v安装SQL Server 2000/8v配置SQL Server 2000/8vSQL Server 2000/8的管理工具和实用程序2024-9-6 13v保证计算机的软硬件环境能满足保证计算机的软硬件环境能
10、满足SQL Server 的需要的需要v根据所期望的用途和计算机的软硬件环境选根据所期望的用途和计算机的软硬件环境选择合适的版本和部件择合适的版本和部件v创建创建SQL Server 使用的账号使用的账号2024-9-6 14v启动和停止启动和停止SQL Server 服务服务v注册服务器和创建服务器组注册服务器和创建服务器组2024-9-6 15v服务管理器(服务管理器(Service Manager)v客户机网络连接工具(客户机网络连接工具(SQL Server Client Network Utility)v服务器网络连接工具(服务器网络连接工具(SQL Server Server Ne
11、twork Utility)v企业管理器(企业管理器(SQL Server Enterprise Manager)v查询分析器(查询分析器(SQL Server Query Analyzer)v在线手册(在线手册(Books online)2024-9-6 16v表表TABLE创建基本表创建基本表表结构的修改表结构的修改删除基本表删除基本表2024-9-6 17vSQL的数据定义语句(的数据定义语句(DDL)包括以下语句:)包括以下语句:创建创建删除删除修改修改表表CTEATE TABLEDROP TABLEALTER TABLE视图视图CTEATE VIEWDROP VIEWALTER VI
12、EW索引索引CTEATE INDEXDROP INDEXn注意:索引无修改语句!注意:索引无修改语句!2024-9-6 18v建立一个新数据库建立一个新数据库 数据库名数据库名v撤消一个数据库撤消一个数据库 数据库名数据库名v指定当前数据库指定当前数据库 数据库名数据库名2024-9-6 19v创建创建grademanager数据库数据库CREATE DATABASE grademanagerON-数据文件数据文件(NAME=grademanager_data,-文件逻辑名称 FILENAME=C:MSSQL7datagrademanager_Data.MDF,-文件物理名称(物理地址)SIZ
13、E=10,-文件初始大小 FILEGROWTH=10%)-文件增长幅度LOG ON-日志文件日志文件(NAME=grademanager_log,FILENAME=C:MSSQL7datagrademanager_log.LDF,SIZE=5,FILEGROWTH=10%)2024-9-6 20v字符型字符型Char(n):固定长度的字符串:固定长度的字符串Varchar(n):可变长字符串:可变长字符串v数值型数值型整数型整数型vbigint:8字节、字节、int:4字节、字节、smallint:2字节、字节、tinyint:1字节字节小数型小数型vnumeric(p,s):定点数,整数位和
14、小数位共:定点数,整数位和小数位共p位,小数位位,小数位s位,位,0=s=p=38 vdecimal,用法同,用法同numeric货币型货币型vmoney、smallmoneyv日期型日期型datetime:精确度精确度1/300秒,秒,8字节字节Smalldatetime:范围缩小,精确度:范围缩小,精确度1秒,秒,4字节字节v文本型文本型 textv逻辑型逻辑型 bit2024-9-6 21v语法语法1:CREATE TABLE(NULL|NOT NULL,PRIMARY KEY,FOREIGN KEY REFERENCES,CHECK,);v例1.建立student关系CREATE TA
15、BLE student(sno NUMERIC(6,0)NOT NULL,sname CHAR(8)NOT NULL,age NUMERIC(3,0),sex CHAR(2),bplace CHAR(20);2024-9-6 22创建表(续)创建表(续)v例2.创建职工表:CREATE TABLE Employee(Eno CHAR(4)NOT NULL UNIQUE,/*Eno取唯一值*/Ename CHAR(8)NOT NULL,Sex CHAR(2)NOT NULL default(男),/*Sex的默认值为“男”*/Age INT NULL,Is_Marry CHAR(1)NULL,T
16、itle CHAR(6)NULL,Dno CHAR(2)NULL);2024-9-6 23v其中,自定义的表名或者列名若是由包含多个单词的词组所其中,自定义的表名或者列名若是由包含多个单词的词组所构成,则必须选择使用中括号(构成,则必须选择使用中括号()或者双引号()或者双引号(“”)将此)将此表名或列名括起在内表名或列名括起在内v例3.创建职工表2,其中表名或者列名包含多个单词构成:CREATE TABLE Employee2 (Employee no CHAR(4)NOT NULL UNIQUE,Employee name CHAR(8)NOT NULL,Sex CHAR(2)NOT NU
17、LL,Age INT NULL,Is_Marry CHAR(1)NULL,Title CHAR(6)NULL,Dno CHAR(2)NULL);2024-9-6 24v语法语法2:CREATE TABLE AS(NOT NULL,)CLUSTER (,);v例4.创建女学生girl_student关系 CREATE TABLE girl_student AS SELECT sno,sname,age FROM student WHERE sex=女;在查询结果基础上在查询结果基础上创建新表创建新表MSSQL SERVER中实现:中实现:SELECT sno,sname,ageINTO girl
18、_studentFROM studentWHERE sex=女;2024-9-6 25v语法语法DROP TABLE,v说明说明此语句一执行,指定的表即从数据库中删除(表被删除,表在数据字典中的定义也被删除)此表上建立的索引和视图也被自动删除此表上建立的索引和视图也被自动删除 DROP TABLE语句一次可以删除多个表,多表间用逗号逗开。语句一次可以删除多个表,多表间用逗号逗开。vDROP与与DELETE区别:区别:DELETE清空表中所有数据行清空表中所有数据行v例5.删除表DROP TABLE student;2024-9-6 26v语句语句 ALTER TABLE ADD 列的完整性约束
19、|ADD ALTER COLUMN DROP COLUMN DROP CONSTRAINT;v说明说明ADD:为表增加一新列或者表级完整性约束,具体规定与CREATE TABLE的相当,但新列必须允许为空(除非有默认值);DROP COLUMN:在表中删除一个原有的列;ALTER COLUMN:修改表中原有列的数据类型;通常,当该列上有约束定义时,不能修改数据类型。DROP CONSTRAINT:删除原有的表级约束。2024-9-6 27v对表增加列对表增加列语法:语法:ALTER语句的形式:语句的形式:ALTER TABLE ADD NULL|NOT NULL,;例6.在student表中增
20、加一列addressALTER TABLE student ADD address CHAR(50);例7.在Employee表中增加一列负责人Emgr ALTER TABLE Employee ADD Emgr CHAR(4)NULL;如果原表中已存在数据,则新定义的列必须设置为如果原表中已存在数据,则新定义的列必须设置为NULL(除非有默认值)(除非有默认值);修改表结构(续)修改表结构(续)2024-9-6 28v对表删除列对表删除列语法:语法:ALTER语句的形式:语句的形式:ALTER TABLE DROP COLUMN ,;例8.删除新添列addressALTER TABLE st
21、udent DROP COLUMN address;修改表结构(续)修改表结构(续)2024-9-6 29v增大某个列增大某个列语法:语法:ALTER TABLE ALTER COLUMN NULL|NOT NULL,;例9.修改student表的列bplace的数据类型。ALTER TABLE studentALTER COLUMN bplace CHAR(30);(条件:列为空。改变数据类型和缩短长度)例10.修改列Emgr的数据类型为CHAR(10)。ALTER TABLE Employee ALTER COLUMN Emgr CHAR(10);/*只修改数据类型,不可修改列名*/如果列
22、中已存在数据,则不能改变数据类型,如果列中已存在数据,则不能改变数据类型,且不能缩短列的宽度,但可以增大列宽且不能缩短列的宽度,但可以增大列宽修改表结构(续)修改表结构(续)2024-9-6 30v添加约束添加约束语法:vALTER TABLE ADD CONSTRAINT ,;例11.新增唯一性约束ALTER TABLE student ADD CONSTRAINT uq_bplace UNIQUE(bplace);v删除约束删除约束语法:语法:vALTER TABLE DROP CONSTRAINT ,;例12.删除新增的唯一性约束ALTER TABLE student DROP CONS
23、TRAINT uq_bplace;2024-9-6 31v查看表的定义查看表的定义sp_helpsp_help显示:表的基本定义、表中的每个列的定义和表中标识列的定义v查看表间的依赖关系查看表间的依赖关系sp_dependssp_depends显示:所有依赖于所查表的对象和所有所查表依 赖的对象v查看表上的约束查看表上的约束sp_helpconstraintsp_helpconstraintv查看表中的数据查看表中的数据2024-9-6 32vATLER TABLE语句不支持列名的修改,如若需要重命名列名,语句不支持列名的修改,如若需要重命名列名,则可以使用则可以使用系统存储过程系统存储过程s
24、p_rename来完成。来完成。v例13.将表Emoployee2重命名为Emp。EXEC sp_rename Employee2,Emp;v系统存储过程sp_rename也可将表名进行重命名。v例14.将Emp表中的列Employee name重命名为Ename。EXEC sp_rename Emp.Employee name,Ename,column;2024-9-6 33v数据的更新操作:数据的更新操作:表中增加元组表中增加元组 INSERT修改表中数据修改表中数据 UPDATE删除元组删除元组 DELETE含有子查询的数据更新(含有子查询的数据更新(3.5)通过视图修改数据(通过视图修
25、改数据(3.6.4)2024-9-6 34v基本语法:INSERT INTO table_or_view (column_list)data_values|select_statement v有两种方式:使用使用VALUES关键字直接给各列赋值关键字直接给各列赋值使用使用SELECT子句,把从其他表或视图中选取的数据插入。子句,把从其他表或视图中选取的数据插入。v必须注意:必须注意:输入项的顺序和数据类型必须与表中列的顺序和数据类型相一致。可以不给全部列赋值,但没有赋值的列必须是可以空的列、有默认值的列、IDENTITY列等。字符型和日期型值插入时要用单引号括起来。2024-9-6 35v语句
26、基本格式语句基本格式 INSERT INTO()VALUES();v说明说明若有若有,则中各常量为新记录中这些属性的对应值(根据语句中的位置一一对应)。但该表定义时,说明为NOT NULL,且无默认值的列必须出现在中,否则将出错。若无若无,则必须按照表中属性的顺序,为每个属性列赋值(每个属性列上都应有值)。中,字符串常量和日期型常量要用单引号(英文符号)括起来。在指定表中插入一行数据在指定表中插入一行数据2024-9-6 36v例1.在Employee表中插入一职工记录。INSERT INTO Employee VALUES(2002,胡一兵胡一兵,男男,38,1,工程师工程师,01);v例2
27、.在Employee表中插入一新职工:宋文彬,编号为2003,男。INSERT INTO Employee(Eno,Ename,Sex)VALUES(2003,宋文彬宋文彬,男男);在指定表中插入一行数据(续)在指定表中插入一行数据(续)2024-9-6 37使用使用INSERT.SELECT语句插入多行语句插入多行(详见(详见3.5)v可以将从一个或多个表或视图中选择来的数据添加到表中去。v可将数据添加到一行的部分或全部列中。v被插入数据的标语SELECT子句的结果集必须兼容,即列数、列序、数据类型都兼容。2024-9-6 38v语句格式语句格式UPDATE SET =,=nWHERE;v说
28、明说明本语句可修改符合本语句可修改符合记录中一个或多个列的值。记录中一个或多个列的值。可使用SET子句指定要被修改的列及修改后的数据。当没有WHERE子句指定修改条件时,表中所有行的指定列将被修改为SET子句给出的新数据。新数据可以是指定的常量或表达式,或是来自于其他表的数据(通过SELECT子句)。2024-9-6 39UPDATE修改数据(续)修改数据(续)v例3.在工资表中,将所有职工的基本工资都增加50。UPDATE Salary SET Basepay=Basepay+50;/*修改多个元组的值*/v例4.将职工“胡一兵”修改为“胡一民”。UPDATE Employee SET En
29、ame=胡一民 WHERE Ename=胡一兵;/*修改某个元组的值*/2024-9-6 40v语句格式语句格式 DELETE FROM WHEREv说明说明 若有指定WHERE项时,则从表中删除满足WHERE子句条件的所有元组。若无WHERE项时,将删除中的所有记录。但是,该表的结构还在(包括属性、约束等),只是没有了记录,是个空表而已。v例5.从职工表中删除Eno(职工号)为1003的记录。DELETE FROM Employee WHERE Eno=1003;/*删除某个元组的值*/v例6.删除Employee中的所有记录。DELETE FROM Employee;/*删除多个元组的值*
30、/v*使用使用TRUNCATE TABLETRUNCATE TABLE语句语句2024-9-6 41v索引索引 INDEX创建索引创建索引删除索引删除索引2024-9-6 42v索引的概念和作用索引的概念和作用v索引的类型索引的类型v如何使用企业管理器创建和管理索引如何使用企业管理器创建和管理索引v如何使用如何使用T-SQL语句创建和管理索引语句创建和管理索引2024-9-6 43索引索引v是否有效地设计了索引是否有效地设计了索引(index),是影响,是影响SQL Server性能的因素之一。性能的因素之一。v一个设计良好的索引可以显著地提高一个设计良好的索引可以显著地提高SQL Serve
31、r的性能。的性能。2024-9-6 44v在建立了索引的列作为查询条件时,索引能大大地提高在建立了索引的列作为查询条件时,索引能大大地提高SQL语句的执行速度。语句的执行速度。如果把一个基本库表比作一本书,索引就好像书的目录,通过查询目录,如果把一个基本库表比作一本书,索引就好像书的目录,通过查询目录,可找到相关章节的页号,从而可迅速地找到那一节内容。不同的是,基本可找到相关章节的页号,从而可迅速地找到那一节内容。不同的是,基本表可建立不止一个索引,它可按不同的属性或表达式建立多个索引。表可建立不止一个索引,它可按不同的属性或表达式建立多个索引。v索引还有能够加速索引还有能够加速ORDER B
32、Y和和GROUP BY语句的执行、语句的执行、强制行的唯一性等优点。强制行的唯一性等优点。2024-9-6 45索引的使用示例索引的使用示例用全表扫描方法检查主码唯一性用全表扫描方法检查主码唯一性 全表扫描缺点:十分耗时全表扫描缺点:十分耗时为避免对基本表进行全表扫描,为避免对基本表进行全表扫描,RDBMS核心一般都在主码核心一般都在主码上自动建立一个上自动建立一个索引索引2024-9-6 46索引的使用示例索引的使用示例通过通过B+树索引查找基本表中是否已经存在新的主码值,树索引查找基本表中是否已经存在新的主码值,可以提高效率可以提高效率n 如果新插入记录的主如果新插入记录的主码值是码值是2
33、5 通过主码索引,从通过主码索引,从B+树的根结点开始树的根结点开始查找查找 读取读取3个结点:个结点:根结点(根结点(51)中间结点(中间结点(12 30)叶结点(叶结点(15 20 25)该主码值已经存在,该主码值已经存在,不能插入这条记录不能插入这条记录使用索引检查主码唯一使用索引检查主码唯一 2024-9-6 47索引的概念索引的概念vSQL Server的索引是一种物理结构,它能的索引是一种物理结构,它能够提供一种以一列或多列的值为基础迅速查够提供一种以一列或多列的值为基础迅速查找表中行的能力。找表中行的能力。v索引可在定义表时创建,也可在定义表之后索引可在定义表时创建,也可在定义表
34、之后的任何时候创建。的任何时候创建。v索引可创建在一列或多列的组合上,也可在索引可创建在一列或多列的组合上,也可在数据库表的多个列上建立不同的索引。数据库表的多个列上建立不同的索引。2024-9-6 48v索引虽重要,也不是越多越好,因为:索引虽重要,也不是越多越好,因为:创建索引要花费时间和占用存储空间。创建索引要花费时间和占用存储空间。索引虽加快了检索速度,却减慢了数据修改的速度。索引虽加快了检索速度,却减慢了数据修改的速度。v可以不考虑建立索引的场所:可以不考虑建立索引的场所:很少或从来不作为查询条件的列。很少或从来不作为查询条件的列。在小表中通过索引查找行可能会比简单的进行全表扫描在小
35、表中通过索引查找行可能会比简单的进行全表扫描还慢。还慢。只从很小的范围内取值的列。只从很小的范围内取值的列。索引使用的场所索引使用的场所2024-9-6 49索引使用的场所索引使用的场所v在考虑是否在列上创建索引时,应考虑该列在考虑是否在列上创建索引时,应考虑该列在查询中起到什么样的作用,以下情况适合在查询中起到什么样的作用,以下情况适合创建索引:创建索引:用作查询条件的列,比如主键。用作查询条件的列,比如主键。频繁按范围搜索的列,比如频繁按范围搜索的列,比如WHERE quantity=5 and quantity=20。连接中频繁使用的列。连接中频繁使用的列。2024-9-6 50v按照索
36、引的结构划分:按照索引的结构划分:聚簇索引聚簇索引非聚簇索引非聚簇索引v按照索引实现的功能划分:按照索引实现的功能划分:唯一性索引唯一性索引非唯一性索引非唯一性索引2024-9-6 51v聚簇索引聚簇索引行的物理存储顺序与索引顺序完全相同,即索引行的物理存储顺序与索引顺序完全相同,即索引的顺序决定了表中行的存储顺序。的顺序决定了表中行的存储顺序。每个表只能有一个聚簇索引。每个表只能有一个聚簇索引。聚簇索引有利于范围搜索。聚簇索引有利于范围搜索。如表中没有创建其他的聚簇索引,则在表的主键如表中没有创建其他的聚簇索引,则在表的主键列上自动创建聚簇索引。列上自动创建聚簇索引。索引的类型索引的类型20
37、24-9-6 52v非聚簇索引非聚簇索引索引的逻辑顺序并不等同于表中行的存储顺序。索引的逻辑顺序并不等同于表中行的存储顺序。索引仅仅记录指向表中行的位置的指针。索引仅仅记录指向表中行的位置的指针。非聚簇索引作为与表分离的对象存在,可为表非聚簇索引作为与表分离的对象存在,可为表中每一个常用于查询的列定义非聚簇索引。中每一个常用于查询的列定义非聚簇索引。很适合于那种直接匹配单个条件的查询,不太很适合于那种直接匹配单个条件的查询,不太适合于返回大量结果的查询。适合于返回大量结果的查询。为一个表建立索引默认都是非聚簇索引,在一为一个表建立索引默认都是非聚簇索引,在一列上设置唯一性约束也自动在该列上创建
38、非聚列上设置唯一性约束也自动在该列上创建非聚簇索引。簇索引。索引的类型索引的类型2024-9-6 53cno cnamecredit1database 42os33c4cnocnamecredit1database 32os33c44mis2未建立聚簇索引,未建立聚簇索引,往表中添加一条记录:往表中添加一条记录:4mis22024-9-6 54在在cname列上列上建立聚簇索引建立聚簇索引cnamecdatabaseos建立聚集索引后,建立聚集索引后,往表中添加一条记录后形成的新表:往表中添加一条记录后形成的新表:cnocnamecredit3c41database 34mis22os3mis
39、4mis22024-9-6 55v唯一性索引唯一性索引一个唯一性索引能够保证在创建索引的列或多列的组合上不包括重复的数据。聚簇索引和非聚簇索引都可以是唯一性索引。在创建主键约束和唯一性约束的列上会自动创建唯一性索引。索引的类型索引的类型2024-9-6 56在在cname列上列上建立唯一性索引建立唯一性索引cnamedatabaseosc建立唯一性索引后,建立唯一性索引后,往表中添加一条记录后形成的新表:往表中添加一条记录后形成的新表:cnocnamecredit1database 32os 33c44os5os4os52024-9-6 57v语句格式:CREATE UNIQUE CLUSTE
40、RED|NONCLUSTERED INDEX ON (,);v说明:ASC升序,DESC降序,缺省为ASC。CLUSTERED为聚簇索引,一个表只有一个。NONCLUSTERED非聚簇索引。UNIQUE表示唯一索引。v例1.按课程表的课程名建立索引。CREATE UNIQUE INDEX course_name ON course(cname);v例2.为职工表建立一索引,首先以部门值排序,部门相同时,再以职工号降序排序。CREATE INDEX IX_Emp ON Employee(Dno,Eno DESC);2024-9-6 58v语句格式语句格式 DROP INDEX,v说明说明本语句将
41、删除规定的索引。该索引在数据字典中的描述也将被删除。:规定使用“表名|视图名.索引名”的格式。v例3.删除IX_Emp索引。DROP INDEX Employee.IX_Emp;2024-9-6 59vEnterprise ManagervT-SQL的系统存储过程系统存储过程sp_helpindex,结果返回该表上所有索引的名称、类型和建索引的列。v例4.查看Employee表上所有索引的相关信息exec sp_helpindex Employee2024-9-6 60vSQL语言DDL用于创建、更改或删除数据库对象vCREATE、ALTER、DROP索引的概念聚集索引和非聚集索引DML用于操
42、纵数据库对象(如表)vSELECT,INSERT,UPDATE,DELETE2024-9-6 61作业作业v第一次上机实验内容第一次上机实验内容详见附录详见附录A:v“上机实验一上机实验一 安装和了解安装和了解SQL SERVER 2000”v“上机实验二上机实验二 创建创建SQL Server数据库和表数据库和表”v“上机实验三上机实验三 基本表的建立和修改基本表的建立和修改”在在Microsoft SQL Server环境中,上机实现书本环境中,上机实现书本第第3.2、3.3节中的各例题节中的各例题2024-9-6 62SQLSQL语言初步语言初步(四)四)数据查询数据查询(3.4节节)2
43、024-9-6 63查询数据查询数据v“查询”的含义:从数据库中获取数据v最基本方式:使用SELECT语句v大多数SELECT都需要包括以下几个成分来描述返回什么样的结果集:结果集中包含哪些列,即要从表中取哪些列的数据以何种条件从表中取数据,即表中的行被包含在结果集中的条件要查询的哪些表,以及表之间的逻辑关系结果集中的行的排列顺序2024-9-6 64SELECT语句语句v最基本的SELECT语句形式:SELECT select_list FROM table_sourceselect_listselect_list指定了结果集中要包含的列的名称,多列间用逗号隔开指定了结果集中要包含的列的名称
44、,多列间用逗号隔开table_sourcetable_source要查询的表名要查询的表名2024-9-6 65SELECT语句的完整语法语句的完整语法SELECT DISTINCT|ALL select_listFROM table_source WHERE search_condition GROUP BY group_by_expression HAVING search_condition ORDER BY order_expression ASC|DESC 2024-9-6 66检索数据参数参数描述描述ALL表示表中所有行都将被返回,包括重复的行(它是缺省的,不用显式写出)DISTI
45、NCT只有不重复的行被返回。这个子句在每个SELECT子句中只可使用一次FROM给出SELECT 语句中指定的域是从哪个表中获取的 WHERE给出从表中选取记录的条件GROUP BY查询返回的行将按照某一个列或某几个列的值分组HAVING给出结果集中每个组必须满足的条件。该子句只和GROUP BY 子句联合使用O R D E R BY将查询结果根据某个域或某几个域的值按照升序(ASC)或者降序(DESC)排列2024-9-6 67查询表中列查询表中列v查询关系中所有信息查询关系中所有信息v例1.查询职工表的所有信息。SELECT Eno,Ename,Sex,Age,Is_Marry,Title
46、FROM Employeev该语句可以用以下语句代替:SELECT*-“*”代替表中的所有列 FROM Employeev指定要查询的列指定要查询的列v例2.查询职工的职称。SELECT Title FROM Employee;2024-9-6 68消除结果集中重复行消除结果集中重复行v使用使用DISTINCT关键字可去掉结果集中的重复行。关键字可去掉结果集中的重复行。v例3.消除结果集中重复行 SELECT Title FROM Employee;SELECT DISTINCT TitleFROM Employee;SELECT ALL TitleFROM Employee;2024-9-6
47、 69在结果集中使用常量和计算值在结果集中使用常量和计算值v例4.在结果集中使用常量 SELECT 职工序号:,Eno,职称:,Title FROM Employee;v例5.查询职工的姓名、出生年份、职称 SELECT Ename,2010-Age,TitleFROM Employee;-改进 SELECT Ename,2010-Age AS Year of Birth,Title FROM Employee;-等价于 SELECT Ename,Year of Birth=2010-Age,Title FROM Employee;无列名2024-9-6 70给结果集中的列指定别名给结果集中的
48、列指定别名v例6.给结果集中的列指定别名 SELECT Eno as 职工序号,Title as 职称 FROM Employee;-等价于 SELECT 职工序号=Eno,职称=Title FROM Employee;2024-9-6 71条件选择查询条件选择查询v基本语法:SELECT select_listFROM table_sourceWHERE search_condition (选择查询结果的条件)vSQL Server 支持比较、范围、列表、字符串匹配等选择方法。2024-9-6 72基于比较条件选择查询结果基于比较条件选择查询结果vWHERE子句的查询条件可以是子句的查询条件
49、可以是比较布尔表达式比较布尔表达式。v例7.查询所有工程师的姓名、年龄。SELECT Ename,Age FROM Employee WHERE Title=工程师;v例8.查询所有在2009年底前结束的项目情况。SELECT*FROM ItemWHERE End_date1/1/2010;2024-9-6 带限制条件的检索带限制条件的检索v除了比较符,可以在WHERE子句中使用下列关键字关键字关键字含义含义IN判断值是否在所给的范围内NOT IN判断值是否不在所给的范围内LIKE判断值是否与一个给定的值相似NOT LIKE判断值是否与一个给定的值不相似IS NULL 判断值是否为空IS NO
50、T NULL判断值是否不为空AND判断是否满足AND两边所给的条件OR判断是否满足OR 两边所给的条件中的一个BETWEENAND判断值是否在所给的值之间NOT ETWEENAND判断值是否不在所给的值之间2024-9-6 74基于范围条件选择查询结果基于范围条件选择查询结果v使用BETWEENAND关键字关键字v例9.查询所有在2008-2009年间启动的项目情况。SELECT*FROM ItemWHERE Start_date between 1/1/2008 and 12/31/2009;v例10.从Salary表中查找Basepay(基本工资)不在500和700间的元组,显示符合条件元