sql2000完整教程_第1页
sql2000完整教程_第2页
sql2000完整教程_第3页
sql2000完整教程_第4页
sql2000完整教程_第5页
已阅读5页,还剩109页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、SQL ServerSQL Server数据库数据库 数据库技术研究解决计算机信息处理数据库技术研究解决计算机信息处理过程中大量数据有效地组织和存储的问题,过程中大量数据有效地组织和存储的问题,在数据库系统中减少数据存储冗余,实现在数据库系统中减少数据存储冗余,实现数据共享,保障数据安全以及高效地检索数据共享,保障数据安全以及高效地检索数据和处理数据。数据和处理数据。数据库中的数据不是孤立的,数据与数据之数据库中的数据不是孤立的,数据与数据之间是相互关联的。也就是说,在数据库中不间是相互关联的。也就是说,在数据库中不仅要能够表示数据本身,还要能够表示数据仅要能够表示数据本身,还要能够表示数据与

2、数据之间的联系与数据之间的联系数据库中的数据可以共享数据库中的数据可以共享但是是可控制、受约束的但是是可控制、受约束的教务文件后勤文件学生基本情况冗余!冗余带来什么问题?学生基本情况冗余!冗余带来什么问题?数据库技数据库技术要能够术要能够保证数据保证数据库中的数库中的数据是安全、据是安全、可靠的。可靠的。 有效地防止数有效地防止数据库中的数据被据库中的数据被非法使用或非法非法使用或非法修改修改 数据遭到破坏数据遭到破坏时能立刻将数据时能立刻将数据完全恢复完全恢复保证数据正保证数据正确的特性在确的特性在数据库中称数据库中称之为数据完之为数据完整性。整性。899在多个用户同时使用数据库时,能够保证

3、在多个用户同时使用数据库时,能够保证不产生冲突和矛盾,保证数据的一致性和不产生冲突和矛盾,保证数据的一致性和正确性。正确性。数据库是长期储存在计算机存储设备上、相互关联的、可以被用数据库是长期储存在计算机存储设备上、相互关联的、可以被用户共享的数据集合户共享的数据集合:是相互关联的数据的集合是相互关联的数据的集合 用综合的方法组织数据,保证尽可能高的访问效率用综合的方法组织数据,保证尽可能高的访问效率具有较高的数据独立性具有较高的数据独立性 具有较小的数据冗余,可供多个用户共享具有较小的数据冗余,可供多个用户共享 具有安全控制机制,能够保证数据的安全、可靠具有安全控制机制,能够保证数据的安全、

4、可靠 最大限度地保证数据的正确性最大限度地保证数据的正确性 允许并发地使用,能有效、及时地处理数据,并能保证数据的一允许并发地使用,能有效、及时地处理数据,并能保证数据的一致性和完整性致性和完整性 数据管理是指对数据的组织、存储、数据管理是指对数据的组织、存储、维护和使用等。维护和使用等。 数据管理的方法分为三个阶段:人工数据管理的方法分为三个阶段:人工管理阶段、文件管理阶段和数据库系统阶管理阶段、文件管理阶段和数据库系统阶段。段。 一个数据库系统(一个数据库系统(Database System)一般是由数据库(一般是由数据库(Database)、数据库管)、数据库管理系统(理系统(Datab

5、ase Management System,DBMS)以及数据库用户组成。广义地说,)以及数据库用户组成。广义地说,数据库系统是由计算机硬件、操作系统、数据库系统是由计算机硬件、操作系统、数据库管理系统以及在它支持下建立起来数据库管理系统以及在它支持下建立起来的数据库、数据库应用程序、用户和维护的数据库、数据库应用程序、用户和维护人员组成的一个整体。人员组成的一个整体。1数据库的基本概念数据库的基本概念 数据库是存储在计算机系统内的有结数据库是存储在计算机系统内的有结构的数据的集合。构的数据的集合。 这些数据是被数据库管理系统按一定这些数据是被数据库管理系统按一定的组织形式存放在各个数据库文件

6、中的。的组织形式存放在各个数据库文件中的。 数据库是由很多数据库文件以及若干数据库是由很多数据库文件以及若干辅助操作文件组成的。辅助操作文件组成的。 基本的数据库模型有三种:网状数据基本的数据库模型有三种:网状数据库模型、层次数据库模型和关系型数据库库模型、层次数据库模型和关系型数据库模型。模型。 关系型数据库模型是以二维矩阵来存关系型数据库模型是以二维矩阵来存储数据的,行和列形成一个关联的数储数据的,行和列形成一个关联的数 据据表。表。 数据库管理系统是指在操作系统的支数据库管理系统是指在操作系统的支持下帮助用户建立、使用和管理数据库的持下帮助用户建立、使用和管理数据库的软件系统。通常包含数

7、据描述语言、数据软件系统。通常包含数据描述语言、数据操作语言以及管理和控制程序三个组成部操作语言以及管理和控制程序三个组成部分。分。 用来描述数据库的结构,供用户建立用来描述数据库的结构,供用户建立数据库。数据库。 供用户对数据库进行数据的查询(数供用户对数据库进行数据的查询(数据的检索和统计等)和处理(数据的增加、据的检索和统计等)和处理(数据的增加、删除和修改等)等操作。删除和修改等)等操作。 包括安全、通信控制和工作日志等。包括安全、通信控制和工作日志等。1系统程序员系统程序员2数据库管理员数据库管理员3应用程序员应用程序员4操作员操作员1Main Frame大型数据库大型数据库2本地小

8、型数据库本地小型数据库3分布式数据库分布式数据库4客户机客户机/服务器数据库服务器数据库 发送命令处理命令后请求数据返回数据处理数据后返回结果ClientApplicationServerDatabaseServer表示服务的最小商业逻辑商业逻辑数据访问和管理 关系型数据库是指一些相关的表和其关系型数据库是指一些相关的表和其他数据库对象的集合。在关系型数据库中,他数据库对象的集合。在关系型数据库中,信息存放在二维表格结构的表中,一个关信息存放在二维表格结构的表中,一个关系型数据库包含多个数据表,每一个表包系型数据库包含多个数据表,每一个表包含行(记录)和列(字段)。含行(记录)和列(字段)。

9、关系型数据库都有多个表。关系型数关系型数据库都有多个表。关系型数据库所包含的表之间是有关联的,关联性据库所包含的表之间是有关联的,关联性由主键、外键所体现的参照关系实现。关由主键、外键所体现的参照关系实现。关系型数据库不仅包含表,还包含其他数据系型数据库不仅包含表,还包含其他数据库对象,例如关系图、视图、存储过程和库对象,例如关系图、视图、存储过程和索引等。索引等。1、表、表 表是存放数据对象的二维表格,按列和行存储数据。数据库的大部分工作室处理表,表是存放数据对象的二维表格,按列和行存储数据。数据库的大部分工作室处理表,每个表支持每个表支持4中操作:查询、插入、更新、删除。中操作:查询、插入

10、、更新、删除。2、视图、视图 视图是浏览数据的方式,并不表明数据的存储。视图和表很相似,可以用来检索视图是浏览数据的方式,并不表明数据的存储。视图和表很相似,可以用来检索特定的数据,但是不存储数据,只是存放特定的数据,但是不存储数据,只是存放SQL命令,记录如何检索表中的数据,打开命令,记录如何检索表中的数据,打开视图时,视图时,SQL执行执行这些这些命令,形成虚拟表。虚拟表只在使用时存在,使用完毕后撤命令,形成虚拟表。虚拟表只在使用时存在,使用完毕后撤销。销。3、存储过程、存储过程 存储过程和视图很相似,也是存放存储过程和视图很相似,也是存放SQL命令。但存储过程的主要目的不是为了浏命令。但

11、存储过程的主要目的不是为了浏览数据,而是对数据进行处理。如果经常要对表中的数据做相同的处理,并且处理过览数据,而是对数据进行处理。如果经常要对表中的数据做相同的处理,并且处理过程比较复杂,则可以考虑将处理数据的命令组织成存储过程,以后每次只需要执行存程比较复杂,则可以考虑将处理数据的命令组织成存储过程,以后每次只需要执行存储过程即可。(存储过程的命令,系统会经过编译,提高执行效率。)储过程即可。(存储过程的命令,系统会经过编译,提高执行效率。)4、触发器、触发器 触发器是一种特殊的存储过程。触发器可以自动响应用户的操作,也可以强制复触发器是一种特殊的存储过程。触发器可以自动响应用户的操作,也可

12、以强制复杂的业务规则或要求。杂的业务规则或要求。UPDATE、INSERT和和DELETE等操作可以触发触发器。等操作可以触发触发器。 关系型数据库是由多个表和其他数据关系型数据库是由多个表和其他数据库对象组成的。表是一种最基本的数据库库对象组成的。表是一种最基本的数据库对象,是由行和列组成的,表中的每一行对象,是由行和列组成的,表中的每一行通常称为一条记录,表中的每一列称为一通常称为一条记录,表中的每一列称为一个字段,表头的各列给出了各个字段的名个字段,表头的各列给出了各个字段的名称。称。 横的 一行 称为 一个 记录 纵的一列称为一个字段 表头 给出 字段 名 图图1-1 1-1 学生信息

13、表学生信息表在在SQL Server 中,根据数据完整措施所作中,根据数据完整措施所作用的数据库对象和范围不同,可以将数据用的数据库对象和范围不同,可以将数据完整性分为以下几种:完整性分为以下几种:1、实体完整性(主键、唯一性约束)、实体完整性(主键、唯一性约束)2、参照完整性(外键约束)、参照完整性(外键约束)3、域完整性(、域完整性(check、默认值约束)、默认值约束)4、用户定义的完整性、用户定义的完整性 主键约束使用数据表中的一列数据或者多列数据来唯一的主键约束使用数据表中的一列数据或者多列数据来唯一的标识一行数据。也就是说,在数据表中不能存在主键相同的两标识一行数据。也就是说,在数

14、据表中不能存在主键相同的两行数据,而且主键约束下的列不能为空(行数据,而且主键约束下的列不能为空(NULL),在创建表时,),在创建表时,最好每个数据表都拥有自己唯一的主键,主键也可以由几个列最好每个数据表都拥有自己唯一的主键,主键也可以由几个列组合成。每个表只能有一个主键。组合成。每个表只能有一个主键。 不能定义不能定义TEXT或或IMAGE数据类型的字段列为主键。数据类型的字段列为主键。 在创建表结构的时候,在创建表结构的时候,选定列名或列名组合选定列名或列名组合(shift键)键),在所选列上在所选列上右击弹出相应菜单,如右击弹出相应菜单,如右图所示。右图所示。 单击有钥匙图标的菜单击有

15、钥匙图标的菜单项。单项。创建成功后该列名前创建成功后该列名前出现一个小钥匙形状的出现一个小钥匙形状的图标如右图所示。图标如右图所示。 外键约束定义了表之间的关系,主要用来维护两个表之间的一致性。出于某种关联的需要,当一个表需要引用另一个表的主键主键作为自己的一个字段时,我们称这个引用来的字段为外键外键。 这样,当主键更新或删除时,其它所有表中与这个主键关联的外键关联的外键也将被相应的更新或删除。当向外键所在的表插入或更新数据(外键字段)时,如果与外键表相关联的主键表的主键主键中无与插入或更新的外外键键有相同的值时,系统会报错并拒绝插入或更新数据。 不能定义TEXT或IMAGE数据类型的列为外键

16、。例如,例如,“班级班级”表中的列表中的列“班号班号”是是“班级班级”表的主键,表的主键,而而“学生学生”表中的表中的“班号班号”是是“学生学生”表的外键,学生必表的外键,学生必须属于一个特定的班级,一旦在设计数据库表时,确定了须属于一个特定的班级,一旦在设计数据库表时,确定了“班级班级”表和表和“学生学生”表的主键与外键的这种关系,在给表的主键与外键的这种关系,在给 “学生学生”表输入数据时,学生所在的表输入数据时,学生所在的“班号班号”必须存在于必须存在于“班级班级”表中,否则,该学生的数据无法输入到系统中,表中,否则,该学生的数据无法输入到系统中,这有效地避免了无意间数据录入的错误,保证

17、了数据库中这有效地避免了无意间数据录入的错误,保证了数据库中数据的完整性。数据的完整性。 学号姓名性别籍贯出生日期班号学生表学生表1. 1. 用用Enterprise ManagerEnterprise Manager建表的步骤如下:建表的步骤如下: 创建了创建了“班级班级”表和表和“学生学生”表之间的一个关系。保存表之间的一个关系。保存建立表之间的引用关系:建立表之间的引用关系: 建立表之间关系图步骤如下:建立表之间关系图步骤如下: 1 1)启动启动“企业管理器企业管理器”,展开,展开“数据库数据库”文件夹,选中要为其创文件夹,选中要为其创建表之间关系的数据库,并将该数据库展开,用鼠标右键单

18、击建表之间关系的数据库,并将该数据库展开,用鼠标右键单击“关系图关系图”“新建数据库关系图新建数据库关系图” 。单击单击“下一步下一步”。建立表之间关系图步骤如下:建立表之间关系图步骤如下: 2 2)选择要添加的表,选择要添加的表,单击单击“下一步下一步”。单击。单击“完成完成”。建立表之间关系图步骤如下:建立表之间关系图步骤如下: 3 3)整理,保存)整理,保存,完成完成“教学管理教学管理”表之间的关系图。表之间的关系图。可以使用可以使用 UNIQUE 约束确保在非主键列中不输入重约束确保在非主键列中不输入重复的值。尽管复的值。尽管 UNIQUE 约束和约束和 PRIMARY KEY 约约束

19、都强制唯一性,但想要强制一列或多列组合(不束都强制唯一性,但想要强制一列或多列组合(不是主键)的唯一性时应使用是主键)的唯一性时应使用 UNIQUE 约束而不是约束而不是 PRIMARY KEY 约束。约束。 可以对一个表定义多个可以对一个表定义多个 UNIQUE 约束,但只能定义约束,但只能定义一个一个 PRIMARY KEY 约束。约束。而且,而且,UNIQUE 约束允许约束允许 NULL 值,这一点与值,这一点与 PRIMARY KEY 约束不同。不过,当与参与约束不同。不过,当与参与 UNIQUE 约束的任何值一起使用时,每列只允许一约束的任何值一起使用时,每列只允许一个空值。个空值。

20、 FOREIGN KEY 约束可以引用约束可以引用 UNIQUE 约束。约束。右击表名称,选择快捷菜单中的,选择快捷菜单中的“设计”,进入表结构修改,进入表结构修改状态。单击状态。单击工具栏处“管理索引和键”按钮,进入惟一约束,进入惟一约束设置界面,单击添加按钮,定义类型为设置界面,单击添加按钮,定义类型为“唯一键唯一键”选定惟一选定惟一约束的列,为惟一约束定义标识名,完成后关闭窗体。约束的列,为惟一约束定义标识名,完成后关闭窗体。 如果插入行时没有为列指定值,默认值则指定列中如果插入行时没有为列指定值,默认值则指定列中使用什么值。默认值可以是计算结果为常量的任何使用什么值。默认值可以是计算结

21、果为常量的任何值,例如常量、内置函数或数学表达式。值,例如常量、内置函数或数学表达式。若要应用默认值,可以通过在若要应用默认值,可以通过在 CREATE TABLE 中中使用使用 DEFAULT 关键字来创建默认值定义。这将为关键字来创建默认值定义。这将为每一列分配一个常量表达式作为默认值。每一列分配一个常量表达式作为默认值。默认值必须与要应用默认值必须与要应用 DEFAULT 定义的列的数据类定义的列的数据类型相配。例如,型相配。例如,int 列的默认值必须是整数,而不能列的默认值必须是整数,而不能是字符串。是字符串。 后续版本的后续版本的 Microsoft SQL Server 将删除该

22、功能。将删除该功能。请避免在新的开发工作中使用该功能,并应着手修请避免在新的开发工作中使用该功能,并应着手修改当前还在使用该功能的应用程序。改当前还在使用该功能的应用程序。 通过限制列可接受的值,通过限制列可接受的值,CHECK 约束可以强制域的完整性。约束可以强制域的完整性。此类约束类似于此类约束类似于 FOREIGN KEY 约束,因为可以控制放入约束,因为可以控制放入列中的值。但是,它们在确定有效值的方式上有所不同:列中的值。但是,它们在确定有效值的方式上有所不同:FOREIGN KEY 约束从其他表获得有效值列表,而约束从其他表获得有效值列表,而 CHECK 约束通过不基于其他列中的数

23、据的逻辑表达式确定有效值。约束通过不基于其他列中的数据的逻辑表达式确定有效值。例如,可以通过创建例如,可以通过创建 CHECK 约束将约束将 成绩列中值的范围限成绩列中值的范围限制为从制为从 0 到到 100 之间的数据。这将防止输入的成绩值超出正之间的数据。这将防止输入的成绩值超出正常的成绩范围。常的成绩范围。可以通过任何基于逻辑运算符返回可以通过任何基于逻辑运算符返回 TRUE 或或 FALSE 的逻辑的逻辑(布尔)表达式创建(布尔)表达式创建 CHECK 约束。对于上面的示例,逻辑约束。对于上面的示例,逻辑表达式为:表达式为:grade= 0 AND grade = 100。 可以将多个

24、可以将多个 CHECK 约束应用于单个列。还可以通过在表级约束应用于单个列。还可以通过在表级创建创建 CHECK 约束,将一个约束,将一个 CHECK 约束应用于多个列。约束应用于多个列。 1、在对象资源管理器中,右键单击具有、在对象资源管理器中,右键单击具有 CHECK 约束的表,再单击约束的表,再单击“修改修改”。此时,将在表设。此时,将在表设计器中打开该表。计器中打开该表。2、在、在“表设计器”菜单中,单击中,单击“CHECK 约束约束”。3、在、在“CHECK 约束约束”对话框中,从对话框中,从“选定的选定的 CHECK 约束约束”列表中选择约束。列表中选择约束。4、单击、单击“删除删

25、除”按钮。按钮。 限制输入到一列或多列中的可能值限制输入到一列或多列中的可能值,只有符合条件与只有符合条件与格式的数据才能存放字段,通过检查输入表列的数格式的数据才能存放字段,通过检查输入表列的数据的值来维护值域的完整性。检查约束通过对一个据的值来维护值域的完整性。检查约束通过对一个逻辑表达式的结果进行判断来对数据进行检查,对逻辑表达式的结果进行判断来对数据进行检查,对于单独一列可使用多个于单独一列可使用多个CHECK约束,按约束创建约束,按约束创建的顺序对其检查。的顺序对其检查。 一个表可以定义多个检查约束,但每个一个表可以定义多个检查约束,但每个CREATE TABLE语句只能为每列定义一

26、个检查约束;在每次语句只能为每列定义一个检查约束;在每次插入记录或修改记录时,检查约束会做相应检查;插入记录或修改记录时,检查约束会做相应检查;自动编号字段不能应用检查约束。自动编号字段不能应用检查约束。 表之间的关联方式分为以下表之间的关联方式分为以下3种类型。种类型。1一对一关联(一对一关联(one-to-one) 设在一个数据库中有设在一个数据库中有A、B两个表,对两个表,对于表于表A中的任何一条记录,表中的任何一条记录,表B中只能有一中只能有一条记录与之对应;反过来,对于表条记录与之对应;反过来,对于表B中的中的任何一条记录,表任何一条记录,表A中也只能有一条记录中也只能有一条记录与之

27、对应,则称这两个表是一对一关联的。与之对应,则称这两个表是一对一关联的。 设在一个关系型数据库中有设在一个关系型数据库中有A、B两个两个表,对于表表,对于表A中的任何一条记录,表中的任何一条记录,表B中可中可能有多条记录与之对应;反过来,对于表能有多条记录与之对应;反过来,对于表B中的任何一条记录,表中的任何一条记录,表A中却只能有一条中却只能有一条记录与之对应,则称这两个表是一对多的记录与之对应,则称这两个表是一对多的关联。关联。 (a a)学生表一)学生表一(b b)学生表二)学生表二(c c)成绩表)成绩表(d d)课程表)课程表图图1-3 1-3 关系型数据库表的关联关系型数据库表的关

28、联 设一个关系型数据库中有设一个关系型数据库中有A、B两个表,两个表,对于表对于表A中的任何一条记录,表中的任何一条记录,表B中可能有中可能有多条记录与之对应;反过来,对于表多条记录与之对应;反过来,对于表B中中的任何一条记录,表的任何一条记录,表A中也有多条记录与中也有多条记录与之对应,则称这两个表是多对多关联的。之对应,则称这两个表是多对多关联的。 CREATE TABLE ( , , ););:所要定义的基本表的名字:所要定义的基本表的名字:组成该表的各个属性(列):组成该表的各个属性(列):涉及相应属性列的完:涉及相应属性列的完整性约束条件整性约束条件:涉及一个或多个属性:涉及一个或多

29、个属性列的完整性约束条件列的完整性约束条件 例例1 建立一个建立一个“学生学生”表表Student,它由学号,它由学号Sno、姓名、姓名Sname、性别、性别Ssex、年龄、年龄Sage、所在系、所在系Sdept五个属性组五个属性组成。其中学号不能为空,值是唯一的,并且姓名取值也成。其中学号不能为空,值是唯一的,并且姓名取值也唯一。唯一。 CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(1) , Sage INT, Sdept CHAR(15); SnoSnameSsexSa

30、geSdept 字字符符型型 字字符符型型 字字符符型型 整整数数 字字符符型型 长长度度为为5 5 长长度度为为2 20 0 长长度度为为1 1 长长度度为为1 15 5 不不能能为为空空值值常用完整性约束常用完整性约束主码约束:主码约束: PRIMARY KEY唯一性约束:唯一性约束:UNIQUE非空值约束:非空值约束:NOT NULL参照完整性约束参照完整性约束例例2 建立一个建立一个“学生选课学生选课”表表SC,它由学号,它由学号Sno、课程、课程号号Cno,修课成绩,修课成绩Grade组成,其中组成,其中(Sno, Cno)为主码。为主码。CREATE TABLE SC( Sno C

31、HAR(5) , Cno CHAR(3) , Grade int, Primary key (Sno, Cno);ALTER TABLE ADD 完整性约束完整性约束 DROP MODIFY ;:要修改的基本表:要修改的基本表ADD子句子句:增加新列和新的完整性约束条件:增加新列和新的完整性约束条件DROP子句子句:删除指定的完整性约束条件:删除指定的完整性约束条件MODIFY子句子句:用于修改列名和数据类型:用于修改列名和数据类型例例 向向Student表增加表增加“入学时间入学时间”列,其数据列,其数据类型为日期时间型。类型为日期时间型。 ALTER TABLE Student ADD S

32、come DATETIME;不论基本表中原来是否已有数据,新增加的列不论基本表中原来是否已有数据,新增加的列一律为空值。一律为空值。 删除属性列删除属性列 直接直接/间接删除间接删除把表中要保留的列及其内容复制到一个新表中把表中要保留的列及其内容复制到一个新表中删除原表删除原表再将新表重命名为原表名再将新表重命名为原表名直接删除属性列直接删除属性列:例:例:ALTER TABLE Student Drop Scome;例例3 将年龄的数据类型改为半字长整数。将年龄的数据类型改为半字长整数。 ALTER TABLE Student MODIFY Sage SMALLINT;注:修改原有的列定义有

33、可能会破坏注:修改原有的列定义有可能会破坏已有数据已有数据例例4 删除学生姓名必须取唯一值的约束。删除学生姓名必须取唯一值的约束。ALTER TABLE Student DROP UNIQUE(Sname); DROP TABLE ; 基本表删除基本表删除 数据、表上的索引都删除数据、表上的索引都删除表上的视图往往仍然保留,但无法引用表上的视图往往仍然保留,但无法引用删除基本表时,系统会从数据字典中删去有关该删除基本表时,系统会从数据字典中删去有关该基本表及其索引的描述基本表及其索引的描述 例例5 删除删除Student表表 DROP TABLE Student ;建立索引是加快查询速度的有效

34、手段建立索引是加快查询速度的有效手段建立索引建立索引DBA或表的属主(即建立表的人)根据需要建或表的属主(即建立表的人)根据需要建立立有些有些DBMS自动建立以下列上的索引自动建立以下列上的索引 PRIMARY KEY UNIQUE维护索引维护索引 DBMS自动完成自动完成 使用索引使用索引 DBMS自动选择是否使用索引以及使用哪些索自动选择是否使用索引以及使用哪些索引引语句格式语句格式CREATE UNIQUE CLUSTER INDEX ON (, );用用指定要建索引的基本表名字指定要建索引的基本表名字索引可以建立在该表的一索引可以建立在该表的一列列或多列上,各列名之间用逗或多列上,各列

35、名之间用逗号分隔号分隔用用指定索引值的排列次序,升序:指定索引值的排列次序,升序:ASC,降序:,降序:DESC。缺省值:。缺省值:ASCUNIQUE表明此索引的每一个索引值只对应唯一的数据表明此索引的每一个索引值只对应唯一的数据记录记录CLUSTER表示要建立的索引是聚簇索引表示要建立的索引是聚簇索引 例例6 为学生为学生-课程数据库中的课程数据库中的Student,Course,SC三个表建立索引。其中三个表建立索引。其中Student表按学号升序表按学号升序建唯一索引,建唯一索引,Course表按课程号升序建唯一索引,表按课程号升序建唯一索引,SC表按学号升序和课程号降序建唯一索引。表按

36、学号升序和课程号降序建唯一索引。CREATE UNIQUE INDEX Stusno ON Student(Sno);CREATE UNIQUE INDEX Coucno ON Course(Cno);CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC); 2.3.1 概述概述2.3.2 单表查询单表查询2.3.3 连接查询连接查询2.3.4 嵌套查询嵌套查询2.3.5 集合查询集合查询语句格式语句格式SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC ; SELE

37、CT子句子句:指定要显示的属性列:指定要显示的属性列FROM子句子句:指定查询对象:指定查询对象(基本表或视图基本表或视图)WHERE子句子句:指定查询条件:指定查询条件 GROUP BY子句子句:对查询结果按指定列的值分:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会组,该属性列值相等的元组为一个组。通常会在每组中作用集函数。在每组中作用集函数。HAVING短语短语:筛选出只有满足指定条件的组:筛选出只有满足指定条件的组ORDER BY子句子句:对查询结果表按指定列值的:对查询结果表按指定列值的升序或降序排序升序或降序排序 学生学生-课程数据库课程数据库学生表:学生表:St

38、udent(Sno,Sname,Ssex,Sage,Sdept)课程表:课程表:Course(Cno,Cname,Cpno,Ccredit) 学生选课表:学生选课表:SC(Sno,Cno,Grade) 查询仅涉及一个表,是一种最简单的查询操作查询仅涉及一个表,是一种最简单的查询操作一、选择表中的若干列一、选择表中的若干列二、选择表中的若干元组二、选择表中的若干元组三、对查询结果排序三、对查询结果排序四、使用集函数四、使用集函数五、对查询结果分组五、对查询结果分组 例例1 查询全体学生的学号与姓名。查询全体学生的学号与姓名。SELECT Sno,SnameFROM Student; 例例2 查询

39、全体学生的姓名、学号、所在系。查询全体学生的姓名、学号、所在系。SELECT Sname,Sno,SdeptFROM Student;例例3 查询全体学生的详细记录。查询全体学生的详细记录。SELECT Sno , Sname , Ssex , Sage , Sdept FROM Student; 或或SELECT *FROM Student; SELECT子句的子句的为表达式为表达式算术表达式算术表达式字符串常量字符串常量函数函数列别名列别名等等 例例4 查全体学生的姓名及其出生年份。查全体学生的姓名及其出生年份。SELECT Sname , 2006-SageFROM Student; 输

40、出结果:输出结果: Sname 2006-Sage - - 李勇李勇 1976 刘晨刘晨 1977 王名王名 1978 张立张立 1978 例例5 查询全体学生的姓名、出生年份和所有系,查询全体学生的姓名、出生年份和所有系,要求用小写字母表示所有系名。要求用小写字母表示所有系名。SELECT Sname , Year of Birth: , 2000-Sage , ISLOWER(Sdept)FROM Student; 输出结果:输出结果: Sname Year of Birth: 2000-Sage ISLOWER(Sdept) - - - - 李勇李勇 Year of Birth: 197

41、6 cs 刘晨刘晨 Year of Birth: 1977 is 王名王名 Year of Birth: 1978 ma 张立张立 Year of Birth: 1977 is 消除取值重复的行消除取值重复的行查询满足条件的元组查询满足条件的元组 在在SELECT子句中使用子句中使用DISTINCT短语短语假设假设SC表中有下列数据表中有下列数据 Sno Cno Grade - - - 95001 1 92 95001 2 85 95001 3 88 95002 2 90 95002 3 80例例6 查询选修了课程的学生学号。查询选修了课程的学生学号。(1) SELECT Sno FROM S

42、C;或或(默认默认 ALL) SELECT ALL Sno FROM SC; 结果:结果: Sno - 95001 95001 95001 95002 95002 (2) SELECT DISTINCT Sno FROM SC; 结果:结果: Sno - 95001 95002 注意注意 DISTINCT短语的作用范围是所有目标列短语的作用范围是所有目标列例:查询选修课程的各种成绩例:查询选修课程的各种成绩错误的写法错误的写法SELECT DISTINCT Cno,DISTINCT GradeFROM SC;正确的写法正确的写法 SELECT DISTINCT Cno,Grade FROM S

43、C; 表表3.3 常常 用用 的的 查查 询询 条条 件件查查 询询 条条 件件谓谓 词词比比 较较=, ,= , = , != , , ! , ! ;N OT + 上上 述述 比比 较较 运运 算算 符符确确 定定 范范 围围BETW E EN A N D ,N O T BETW EEN A N D确确 定定 集集 合合IN ,N OT IN字字 符符 匹匹 配配LIKE ,N OT LIKE空空 值值IS N U LL , IS N O T N U LL多多 重重 条条 件件A N D ,ORWHERE子句常用的查询条件子句常用的查询条件在在WHERE子句的子句的中使用比较运算符中使用比较

44、运算符=,=,=,!= 或或 ,!,!, 逻辑运算符逻辑运算符NOT + 比较运算符比较运算符例例8 查询所有年龄在查询所有年龄在20岁以下的学生姓名及其年龄。岁以下的学生姓名及其年龄。 SELECT Sname,Sage FROM Student WHERE Sage = 20; 使用谓词使用谓词 BETWEEN AND NOT BETWEEN AND 例例10 查询年龄在查询年龄在2023岁(包括岁(包括20岁和岁和23岁)之间的学岁)之间的学生的姓名、系别和年龄。生的姓名、系别和年龄。 SELECT Sname,Sdept,SageFROM StudentWHERE Sage BETWE

45、EN 20 AND 23; 例例11 查询年龄不在查询年龄不在2023岁之间的学生姓名、系别和年岁之间的学生姓名、系别和年龄。龄。SELECT Sname,Sdept,SageFROM StudentWHERE Sage NOT BETWEEN 20 AND 23; 使用谓词使用谓词 IN , NOT IN :用逗号分隔的一组取值:用逗号分隔的一组取值例例12查询信息系(查询信息系(IS)、数学系()、数学系(MA)和计)和计 算机科学系(算机科学系(CS)学生的姓名和性别。)学生的姓名和性别。SELECT Sname,SsexFROM StudentWHERE Sdept IN ( IS,M

46、A,CS );例例13查询既不是信息系、数学系,也不是计算查询既不是信息系、数学系,也不是计算 机科学系的学生的姓名和性别。机科学系的学生的姓名和性别。SELECT Sname,SsexFROM Student WHERE Sdept NOT IN ( IS,MA,CS ); NOT LIKE ESCAPE :指定匹配模板:指定匹配模板 匹配模板:固定字符串或含通配符的字符串匹配模板:固定字符串或含通配符的字符串 当匹配模板为固定字符串时,当匹配模板为固定字符串时, 可以用可以用 = 运算符取代运算符取代 LIKE 谓词谓词 用用 != 或或 运算符取代运算符取代 NOT LIKE 谓词谓词%

47、 (百分号百分号) 代表任意长度(长度可以为代表任意长度(长度可以为0)的字符串)的字符串例:例:a%b表示以表示以a开头,以开头,以b结尾的任意长度的字符串。结尾的任意长度的字符串。如如acb,addgb,ab 等都满足该匹配串等都满足该匹配串_ (下横线下横线) 代表任意单个字符代表任意单个字符例:例:a_b表示以表示以a开头,以开头,以b结尾的长度为结尾的长度为3的任意字符串。的任意字符串。如如acb,afb等都满足该匹配串等都满足该匹配串当用户要查询的字符串本身就当用户要查询的字符串本身就含有含有 % 或或 _ 时,要使用时,要使用ESCAPE 短语对短语对通配符进行转义。通配符进行转

48、义。1) 匹配模板为固定字符串匹配模板为固定字符串 例例14 查询学号为查询学号为95001的学生的详细情况。的学生的详细情况。 SELECT * FROM Student WHERE Sno LIKE 95001;等价于:等价于: SELECT * FROM Student WHERE Sno = 95001;2) 匹配模板为含通配符的字符串匹配模板为含通配符的字符串例例15 查询所有姓刘学生的姓名、学号和性别。查询所有姓刘学生的姓名、学号和性别。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname LIKE 刘刘%;匹配模板为含通配符的字符串(续)

49、匹配模板为含通配符的字符串(续)例例16 查询姓查询姓欧阳欧阳且全名为三个汉字的学生且全名为三个汉字的学生的姓名。的姓名。 SELECT Sname FROM Student WHERE Sname LIKE 欧阳欧阳_;匹配模板为含通配符的字符串(续)匹配模板为含通配符的字符串(续)例例17 查询名字中第查询名字中第2个字为个字为阳阳字的学生的姓字的学生的姓名和学号。名和学号。 SELECT Sname,Sno FROM Student WHERE Sname LIKE _阳阳%;匹配模板为含通配符的字符串(续)匹配模板为含通配符的字符串(续)例例18 查询所有不姓刘的学生姓名。查询所有不姓

50、刘的学生姓名。 SELECT Sname,Sno,Ssex FROM Student WHERE Sname NOT LIKE 刘刘%; 使用谓词使用谓词 IS NULL 或或 IS NOT NULL “IS NULL” 不能用不能用 “= NULL” 代替代替例例21 某些学生选修课程后没有参加考试,所以有选课某些学生选修课程后没有参加考试,所以有选课记录,但没有考试成绩。查询缺少成绩的学生的学号和记录,但没有考试成绩。查询缺少成绩的学生的学号和相应的课程号。相应的课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL; 例例22 查所有有成绩的学生学

51、号和课程号。查所有有成绩的学生学号和课程号。 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL;用逻辑运算符用逻辑运算符AND和和 OR来联结多个查询条件来联结多个查询条件 AND的优先级高于的优先级高于OR 可以用括号改变优先级可以用括号改变优先级可用来实现多种其他谓词可用来实现多种其他谓词 NOT IN NOT BETWEEN AND 例例23 查询计算机系年龄在查询计算机系年龄在20岁以下的学生姓名。岁以下的学生姓名。 SELECT Sname FROM Student WHERE Sdept= CS AND Sage=20 AND Sage=23;使用使用ORDER BY子句子句 可以按一个或多个属性列排序可以按一个或多个属性列排序 升序:升序:ASC;降序:;降序:DESC;缺省值为升序;缺省值为升序当排序列含空值时当排序列含空值时ASC:排序列为空值的元组最后显示:排序列为空值的元组最后显示DESC:排序列为空值的元组最先显示:排序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论