版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQLServer2012数据库管理教程第1章第1章数据库系统基础数据库系统概述关系数据库1.1数据库系统概述数据不能长期保存。没有专门的软件对数据进行管理。数据与程序不具有独立性。1.1.1数据管理的发展1.程序管理方式阶段2.文件系统阶段数据缺乏独立性。数据冗余度大。数据无集中管理。3.数据库系统阶段实现数据共享,减小数据冗余。采用特定的数据模型。数据具有较高的独立性。有统一的数据控制功能。1.1.2数据库系统的组成1.数据库2.数据库管理系统3.硬件及软件环境4.数据库管理员5.用户1.1.3数据库管理系统的功能1.数据定义功能数据库管理系统提供数据定义语言(DDL)。用户可以定义数据库的各类对象,如表、视图、存储过程等。2.数据操纵功能数据库管理系统提供数据操纵语言(DML)。用户可以对数据库中的数据进行操纵,如查询、插入数据、更新数据、删除数据。3.数据库运行控制功能数据库管理系统提供数据库运行的控制功能,主要包括以下几方面。完整性控制并发控制安全控制数据库恢复功能数据字典1.1.4数据模型数据库结构的基础是数据模型。数据模型是一个描述数据、数据联系、数据语义以及一致性约束的概念工具的集合。数据模型通常由数据结构、数据操作和完整性约束三要素组成。下图所示是数据模型的分类。1.实体联系模型实体联系图中包括三个主要的要素。一对一联系(1:1)一对多联系(1∶n)多对多联系(m∶n)3)属性。2)实体之间的联系。1)实体型。我们把客观存在并可相互区别的事物称为实体,同一类实体的集合称为实体集,在实体联系模型中,用矩形框表示实体,框内注明实体的名称。属性用来描述实体或联系的特性。在实体联系模型中,用椭圆形表示属性,并用连线与实体连接起来。如果属性较多,为使图形更加简明,有时也将实体与其相应的属性单独用列表表示。下图是一个关于图书出版情况的实体联系模型。2.层次模型用倒立的树形结构表示实体及实体之间联系的模型称为层次模型,其特点如下。有且仅有一个结点无父结点,该结点称为根结点。除根结点以外的其他结点有且仅有一个父结点。层次模型可以方便地表示实体之间一对多的联系,但无法表示实体之间多对多的联系。下图所示为图书出版的层次模型。3.网状模型在网状模型中,可以有多个结点无父结点;允许结点有多于一个的父结点。网状模型可以表示实体之间多对多的联系。下图是图书出版的网状模型。图书出版的网状模型4.关系模型关系模型使用二维表格的形式来表示实体之间联系的数据模型。图书出版的关系模型可以表示为以下四个二维表格的集合。图书关系表格
出版社关系表格作者关系表格
编写关系表格1.2关系数据库1.2.1关系模型1.关系术语1)关系(Relations)2)属性(Attributes)3)域(Domains)4)元组(Tuples)5)主关键字(PrimaryKeys)6)候选关键字(CandidateKeys)7)外关键字(ForeignKeys)8)关系模式(RelationSchemas)图书出版系统可以使用以下的关系模式来描述。图书(图书编号,书名,定价,出版社编号[FK])出版社(出版社编号,出版社名)作者(作者编号,作者姓名,电话)编写(图书编号[FK1],作者编号[FK2],署名次序)2.关系模型的特点(1)关系必须规范化(2)模型概念单一(3)集合操作1.2.2关系数据库的完整性1.空空(NULL)表示某个属性对当前元组的取值未知或不可用。空不同于0或空字符串,0或空字符串都是值,而空是一种状态。2.实体完整性实体完整性(EntityIntegrity)要求基本关系中组成主键的属性不可以为空。主键的取值对于任意元组来说都是唯一的,主键可以起到标识一个关系中每一个元组的作用。3.域完整性域完整性(DomainIntegrity)要求关系属性的取值应该在正确的范围内。例如,在定义作者关系的作者编号属性时,定义的形式为
作者编号
char(3)NOTNULL表示作者编号属性的取值是长度最多为3个字符的字符串,该属性的取值不可以超出这个范围,而且该属性的取值也不可以为空(NOTNULL)。在有些情况下,通过定义属性的类型无法准确定义该属性的域,这时就需要使用约束、规则等方法来实施域完整性控制。4.参照完整性参照完整性(ReferentialIntegrity)要求,如果一个关系中存在外键,那么这个外键的值应该与其所对应的父关系中的主键或候选键的某个值匹配,或者这个外键的值为空。5.用户自定义的完整性为了体现企业实际运行业务的规则或者为了保护数据的安全等,用户可以使用约束、规则、触发器等在数据库中添加其他一些规则,我们将其称为用户自定义的完整性。1.2.3关系数据库的规范化1.操作异常问题(1)插入异常
(2)更新异常(3)删除异常2.函数依赖假设X和Y是关系R中的两个不同的属性或属性组,如果对于X中的每一个具体值,Y中都有唯一的具体值与之对应,则称Y函数依赖于X,或X函数决定Y,记作X→Y,其中X称为决定因素。(1)函数依赖的概念假设X→Y是关系R中的一个函数依赖,如果存在X的真子集X′,使得X′→Y成立,则称Y部分函数依赖于X,简称部分依赖;否则,称Y完全函数依赖于X,简称完全依赖。(2)部分函数依赖与完全函数依赖在关系R中,如果存在函数依赖X→Y,Y→Z,则称Z传递函数依赖于X,简称传递依赖。有了函数依赖的概念以后,可以重新定义候选键和主键。可以将主键定义为关系中的一个属性或最小属性组,这个属性或最小属性组可以函数决定关系中的其他属性。(3)传递函数依赖3.关系范式关系范式的基本思想是消除关系中的数据冗余,消除数据依赖中不合适的部分,以解决数据插入、更新、删除操作中的异常问题。如果关系R的所有属性都是简单属性,即每个属性都是不可再分的,则称R属于第一范式(简称1NF),记作R∈1NF。在任何一个关系数据库系统中,第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。(1)第一范式下面的二维表就不满足第一范式,因为作者编号、作者姓名和电话三个属性不是不可再分的。图书出版关系对该二维表格进行规范化处理,可以得到满足第一范式的关系。图书出版关系(规划化处理后)如果关系R属于1NF,并且每个不包含在主键中的属性都完全依赖于R的主键,那么称R属于第二范式(简称2NF),记作R∈2NF。图书出版关系不属于第二范式,经调整为如下后,满足第二范式。(2)第二范式图书(图书编号,书名,定价,出版社编号,出版社名)作者(作者编号,作者姓名,电话)编写(图书编号[FK1],作者编号[FK2],署名次序)分解后的关系仍然存在数据冗余,例如,在图书关系中,一个出版社可以出版多本图书,所以出版社的信息会被重复存储。如果关系R属于1NF,并且每个不包含在主键中的属性都不传递依赖于R的主键,那么称R属于第三范式(简称3NF)记作R∈3NF。图书(图书编号,书名,定价,出版社编号[FK])出版社(出版社编号,出版社名)作者(作者编号,作者姓名,电话)编写(图书编号[FK1],作者编号[FK2],署名次序)(3)第三范式在满足第二范式的图书关系中,出版社名对主键图书编号的函数依赖是传递依赖。这个关系不满足3NF,规范化后的满足3NF的图书出版关系包括:前面对2NF和3NF的定义只考虑到非主键属性对主键不存在部分依赖和传递依赖的情况,没有考虑到关系可能存在的其他候选键。因此,对2NF和3NF更普遍的定义如下。2NF:如果关系R属于1NF,并且每个不包含在候选键中的属性都完全依赖于R的任意一个候选键,那么称R属于第二范式。3NF:如果关系R属于1NF,并且每个不包含在候选键中的属性都都不传递依赖于R的任意一个候选键,那么称R属于第三范式。使用2NF和3NF的更广泛的定义形式会增加问题分析的复杂性,但同时也会让我们有机会发现那些隐藏着的数据冗余。在一个关系中,如果所有的决定因素都是关系的候选键,则该关系属于BC范式(简称BCNF)记作R∈BCNF。【例1-1】关系模式SJP(S,J,P)中,S表示学生,J表示课程,P表示名次。每个学生选修每门课程的成绩有一定的名次,每门课程中每一名次只有一个学生(即没有并列名次)。由语义可得到下面的函数依赖:(S,J)→P;(J,P)→S所以(S,J)与(J,P)都可以作为候选键。这两个键各由两个属性组成,而且它们是相交的。这个关系模式中显然没有属性对键传递依赖或部分依赖,所以SJP∈3NF。而且除(S,J)与(J,P)外没有其他决定因素,所以SJP∈BCNF。(4)BC范式在关系中,除了函数依赖之外还有多值依赖、连接依赖的概念,从而相应地提出了第四范式4NF和第五范式5NF。满足4NF和5NF的关系相对较少,这里不再进行深入的讨论。前面提到的六种关系范式存在着以下的联系:满足5NF的关系一定满足4NF;满足4NF的关系一定满足BCNF;满足BCNF的关系一定满足3NF;满足3NF的关系一定满足2NF;满足2NF的关系一定满足1NF。另外,并不是规范化程度越高的关系模式就越好。当对数据库的操作主要是查询,而更新较少时,为了提高效率,宁可保留适当的数据冗余而不必将关系分解得太小;否则,为了查询数据,常常要做大量的连接运算,反而会花费大量的时间,降低查询的效率。(5)其他关系范式SQLServer2012数据库管理教程第2章第2章SQLServer2012概述SQLServer2012简介SQLServer2012的安装和配置SQLServer2012工具和实用程序熟悉示例数据库jw2.1SQLServer2012简介2.1.1SQLServer的发展简史SQLServer数据库经历了长期的发展,现已成为商业应用中最重要的组成部分。该数据库产品的发展过程如下:1988年,Microsoft公司和Sybase公司合作开发了SQLServer的一个版本,该版本运行于OS/2平台。1993年,SQLServer4.2诞生。1995年,Microsoft公司重写了SQLServer数据库系统,发布了SQLServer6.0。1998年,Microsoft公司在SQLServer7.0中做了巨大的改动,从而确定了SQLServer在数据库管理工具中的主导地位。2000年,SQLServer2000正式面世。2005年,Microsoft公司发布了SQLServer2005。2008年,Microsoft公司推出了SQLServer2008。2012年,SQLServer推出了最新版本SQLServer2012,它增加了一些新特性,如借助AlwaysOn群集和可用性组实现的高可用性及灾难恢复解决方案、xVelocity存储方式使查询速度飞速提升、借助AnalysisServices中的PowerView和表格建模实现的快速数据浏览和可缩放业务,以及DataQualityServices带来的全新数据管理能力等。2.1.2SQLServer2012的应用(1)数据管理SQLServer2012能实现数据的创建、存储、修改,并保证数据访问的性能和安全性,提供数据备份、恢复、性能监视等管理功能,实现企业级的数据应用。(2)数据库开发可以在此平台上开发各种应用系统。与MicrosoftVisualStudio,MicrosoftOfficeSystem以及新的开发工具包紧密集成,使得开发更加方便。(3)商业智能结合了分析、报表、集成和通知功能。企业可以使用这些工具对数据进行挖掘,从而发现潜在的趋势和关键的业务信息。2.1.3SQLServer2012的体系结构SQLServer的体系结构是指对SQLServer的组成部分和这些组成部分之间关系的描述。SQLServer2012系统由四个部分组成,即数据库引擎、AnalysisServices(分析服务)、ReportingServices(报表服务)和IntegrationServices(集成服务)。这四种服务之间的关系如下图所示。数据库引擎是SQLServer2012系统的核心服务。数据库引擎是一个复杂的系统,它本身包含了很多功能组件,如复制、全文搜索、ServiceBroker等。分析服务的主要作用是提供联机分析处理(OLAP,On-lineAnalyticalProcessing)和数据挖掘功能。报表服务为用户提供了支持Web方式的企业级报表功能。集成服务是一个数据集成平台,负责完成与数据有关的提取、转换和加载等操作。2.1.4SQLServer2012数据库和数据库对象1.数据库SQLServer2012提供两种类型的数据库,即系统数据库和用户数据库,如下图所示。当SQLServer2012安装成功后,系统将自动创建5个系统数据库,如下表所示。用户数据库包括示例数据库和用户自定义数据库。用户自定义数据库就是用户根据自身需求建立的数据库。示例数据库向用户提供学习SQLServer2012的实例,如下表所示。2.数据库对象在SQLServer2012数据库系统中,主要的数据库对象包括数据库关系图、表、视图、同义词、存储过程、触发器、函数、类型、规则、默认值等。可以说,设计和实现数据库的过程实际上就是设计和实现数据库对象的过程。在“对象资源管理器”窗格中展开SQLServer2012的示例数据库AdventureWorks2012,可以看到该数据库中包含的数据库对象,如右图所示。2.2SQLServer2012的安装和配置2.2.1SQLServer2012的版本SQLServer2012提供了多种版本供用户选择使用,如下表所示。2.2.2SQLServer2012的系统需求1.硬件要求下表列出了SQLServer2012系统对操作系统的要求。SQLServer2012软件的32位适用于下列操作系统的32位(如果有的话)和64位,SQLServer2012软件的64位只适用于下列操作系统的64位。2.2.3SQLServer2012的安装SQLServer2012安装向导提供了一个功能树,用来安装所有SQLServer组件,其中包括计划、安装、维护、工具、资源、高级、选项等功能。具体的安装过程如下:启动SQLServer2012安装盘上的setup.exe文件,SQLServer2012的安装向导会帮助用户一步步地进行安装。下面我们给出各个步骤的截图。2.3SQLServer2012工具和实用程序2.3.1MicrosoftSQLServerManagementStudioSQLServerManagementStudio是一个集成环境,用于访问、配置和管理所有SQLServer组件。启动SQLServerManagementStudio的步骤如下:1)在“开始”菜单中,依次选择“程序”→“MicrosoftSQLServer2012”→“SQLServerManagementStudio”命令。2)在“连接到服务器”对话框中,输入服务器名称,选择身份验证方式,再单击“连接”按钮,打开“MicrosoftSQLServerManagementStudio”窗口,如下图所示。1.SQLServerManagementStudio窗口及工具SQLServerManagementStudio中默认显示“资源管理器”窗格,如右图所示,显示了服务器中所有数据库对象的树视图。单击各项目前的“+”号、“-”号可展开或收起项目列表。ManagementStudio还提供了“模板资源管理器”、“解决方案资源管理器”等组件窗格,如下图所示。如果要显示这些窗格,可以打开“视图”菜单,选择相应的菜单命令即可。在“对象资源管理器”窗格中展开“数据库”节点,再依次展开“系统数据库”→
“Master”→“表”→“系统表”,在“文档”窗格的摘要页中将列出系统表中包含的表,如右图所示。2.使用SQLServerManagementStudio查看数据库对象在摘要页中右击某个表,从弹出的快捷菜单中选择“编辑前200行”命令,在文档窗格中将新展开一页,显示表中的数据,如下图所示。在“对象资源管理器”窗格中右击某个表,从弹出的快捷菜单中选择“设计”命令将显示所选表的列的定义信息。在左窗格中右击数据库,从弹出的快捷菜单中选择“新建数据库”或“附加”,可在当前服务器中新建数据库,或者将现有数据库添加到服务器中。其中,新建数据库时,文件将被存储在C:\ProgramFiles\MicrosftSQLServer\MSSQL10.MSSQLSERVER\MSSQL\DATA文件夹中。选择“附加”时,系统将打开“附加数据库”窗口。单击右上窗格下方的“添加”按钮,可选择要添加的数据库,所选数据库将出现在“要附加的数据库”列表中。单击“确定”按钮,新附加的数据库将出现在左侧窗格的“数据库”列表中。3.使用SQLServerManagementStudio编写Transact-SQL命令在“标准”工具栏中单击“新建查询”按钮,打开查询编辑器,系统将自动生成一个脚本的名称。如果当前窗口中没有显示“标准”工具栏,可以选择“视图”→“工具栏”→“标准”命令,调出“标准”工具栏。在查询编辑器中输入以下Transact-SQL语句:USEjwGOSELECT*FROMdbo.Class输入完成后,单击工具栏中的“执行”按钮,可以执行该SQL语句,在右下方将显示结果集。也可以打开“查询”菜单,选择“执行”命令,或者直接按【F5】键来执行Transact-SQL命令。2.3.2SQLServer配置管理器SQLServer配置管理器是一个Microsoft管理控制台应用程序,允许配置SQLServer2012已安装的服务、网络配置以及客户端配置;可以执行的任务包括启动、暂停、恢复和停止服务以及相关协议。1.打开SQLServer配置管理器在Windows中,打开“开始”菜单,选择“程序”→“MicrosoftSQLServer2012”→“配置工具”→“SQLServer配置管理器”命令,可启动SQLServer配置管理器。2.SQLServer配置管理器的功能(1)管理服务在配置管理器中,用户可以启动、暂停、恢复或停止服务,还可以查看或更改服务属性。方法是在左侧的树状目录中单击“SQLServer服务”节点,在右侧窗格中将显示当前安装的所有服务名称。通过右击某一服务,从弹出的快捷菜单中选择相应的命令可对该服务进行暂停、停止、启动等操作,也可以查看该服务的属性。(2)更改服务使用的账户使用SQLServer配置管理器可以更改SQLServer或SQLServer代理服务所使用的账户,或更改账户密码,还可以执行其他配置。使用SQLServer配置管理器更改的密码无需重新启动服务便可立即生效。(3)管理服务器和客户端网络协议在左侧的树状目录中展开“SQLServer网络配置”节点,单击某个“SQLServer实例名称+的协议”(如“MSSQLSERVER的协议”),在右侧的窗格中将显示该实例所使用的网络协议名称及状态。右击某一协议,从弹出的快捷菜单中选择相应命令可以启用或禁用该协议。2.3.3命令提示实用工具SQLCmdSQLCmd实用工具可以在命令提示符处输入Transact-SQL语句、系统过程和脚本文件,其使用OLEDB执行Transact-SQL批处理。1.连接到默认SQLServer实例并交互式执行Transact-SQL语句在Windows中,打开“开始”菜单,选择“运行”命令,在弹出的“运行”对话框中输入“cmd”命令,如右图所示。单击“确定”按钮,将进入Windows命令提示窗口。在Windows的命令提示状态下输入SQLCmd(不区分大小写),按【Enter】键,此时出现“1>”提示符,表明已经连接到了SQLServer的默认实例。如果想要连接到一个命名实例,应该在SQLCmd命令中使用“-S”输入参数,并指定实例名,格式如下:SQLCmd-S服务器名\实例名连接到SQLServer以后,可以交互式执行Transact-SQL命令。在提示符下输入以下代码,每行代码以【Enter】键结束。USEjwGOSELECTTOP3*FROMdbo.ClassGO运行结果如下图所示。2.运行Transact-SQL脚本文件打开记事本并输入下列Transact-SQL语句:USEjwGOSELECTTOP3*FROMdbo.ClassGO将记事本中的脚本保存在D盘根目录下,并命名为“sample.sql”。在Windows中,打开“开始”菜单,选择“运行”命令;在弹出的“运行”对话框中输入“cmd”命令并单击“确定”按钮,进入Windows命令提示窗口;在Windows命令提示符下输入下列命令:SQLCmd-iD:\sample.sql-oD:\sample.txt打开sample.txt文件,其内容如下图所示。2.4熟悉示例数据库jw本书例题中所使用的示例均来自jw数据库(教务系统数据库)。jw数据库包含5个用户表:Department表(系部表)、Class表(班级表)、Student表(学生表)、Course表(课程表)和Score表(成绩表)。2.4.1了解jw数据库的用户表Department表(系部表)有2列:DepartNo(系部编号)、DepartName(系部名称)。Department表中数据Class表(班级表)有3列:ClassNo(班级编号)、DepartNo(系部编号)、ClassName(班级名称)。表中数据如下图所示。Class表中数据Student表(学生表)有3列:StuNo(学号)、ClassNo(班级编号)、StuName(学生姓名)。表中数据如下图所示。Student表中数据Course表(课程表)有6列:CouNo(课程编号)、CouName(课程名称)、Credit(课程学分)、Teacher(任课老师)、DepartNo(系部编号)、Examkind(课程类型)。表中数据如下图所示。Course表中数据Score表(成绩表)有4列:StuNo(学号)、CouNo(课程编号)、Score(成绩)、Category(考试类型)。表中数据如下图所示。Score表中数据2.4.2jw数据库用户表之间关系jw数据库中各用户表之间的关系如下图所示。从该图中可以看到:系部表Department和班级表Class之间通过DepartNo(系部编号)进行连接,表示班级的系部编号来源于系部表。学生表Student和班级表Class之间通过ClassNo(班级编号)进行连接,表示学生的班级编号来源于班级表。课程表Course和系部表Department之间通过DepartNo(系部编号)进行连接,表示课程的系部编号来源于系部表。成绩表Score和学生表Student通过StuNo(学号)进行连接,成绩表Score和课程表Course通过CouNo(课程编号)进行连接,分别表示成绩表中的学号来源于学生表,课程编号来源于课程表。SQLServer2012数据库管理教程第3章第3章Transact-SQL语言基本语言要素数据操纵语言数据控制语言3.1基本语言要素3.1.1注释注释是程序代码中不执行的文本字符串。使用注释对代码进行说明,不仅可使程序易于读懂,而且有助于日后的管理和维护。在SQLServer2012中,可以使用以下两种类型的注释方式:1)ANSI标准的注释符“--”,用于单行注释。2)与C语言相同风格的注释符号,即“/*”“*/”,其中“/*”用于注释的开头,“*/”用于注释的结尾。该方式可以标识多行程序为注释。当然,该注释方式也适用于单行程序。【例3-1】两种注释方式举例。注释方式一:USEjw--注释语句第一行--注释语句第二行SELECT*FROMdbo.ClassUSEjw/*注释语句第一行注释语句第二行*/SELECT*FROMdbo.Class注释方式二:3.1.2变量1.局部变量局部变量是一个能够指定特定数据类型的对象,它的作用范围仅限于程序内部。局部变量可以作为计数器来计算循环执行的次数,或者控制循环执行的次数。另外,利用局部变量还可以保存数据值。在Transact-SQL语言中,使用DECLARE语句创建局部变量,其语法结构如下:DECLARE{@local_variable[AS]data_type|@cursor_variable_nameCURSOR}[,…n]要给声明的局部变量赋值,可以使用SET语句或者SELECT语句,语法格式如下:SET@local_variable=expressionSELECT@local_variable=expression[,…n]其中,语句第一行中参数@local_variable用于指定局部变量的名称,参数data_type用于设置局部变量的数据类型。第二行声明的是游标变量,cursor_variable_name是游标变量名。第三行中[,…n]表示在一个DECLARE语句中可以声明多个变量,变量与变量之间应用逗号隔开。【例3-2】局部变量的使用。1)声明一个浮点型的局部变量Score:DECLARE@ScoredecimalSET@Score=85.0SELECT@Score=85.0USEjwSELECT*FROMdbo.ScoreWHEREScore=@Score2)给声明的局部变量Score赋值:或者3)使用局部变量Score:结果如下图所示。2.全局变量除了局部变量,SQLServer系统本身还提供了一些全局变量。全局变量是SQLServer系统内部使用的变量,其作用范围不仅局限于某个程序,而且可以被任何程序随时使用。全局变量通常存储一些SQLServer的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或执行Transact-SQL命令后的状态值。【例3-3】全局变量的使用。使用全局变量@@VERSION来查看当前使用的SQLServer的版本信息,语句如下:SELECT@@VERSION结果如下图所示。3.1.3运算符1.算术运算符算术运算符可以执行数学运算,主要包括加法(+)、减法(-)、乘法(*)、除法(/)和取模运算(%)。【例3-4】算术运算符的使用。SELECT2.5+3.5'加'SELECT2.5-3.5'减'SELECT2.5*3.5'浮点型乘'SELECT2.5/3.5'浮点型除'SELECT2/3'整数除'SELECT2%3'取模'2.赋值运算符Transact-SQL语言中赋值运算符为“=”,其主要有两个用途:一是给变量赋值,二是在WHERE子句中提供查询条件。1)给变量赋值DECLARE@namevarchar(20)SET@name='张三'USEjwSELECT*FROMStudentWHEREStuName='李坚'2)在WHERE子句中提供查询条件3.位运算符位运算符用于在二进制数据间执行位操作。Transact-SQL语言中位运算符如下表所示。【例3-6】使用位运算符。SELECT1&0SELECT1&1SELECT1|1SELECT1^0SELECT1^1运行结果如右图所示。4.比较运算符比较运算符又叫关系运算符,可以用来测试两个表达式是否相同。Transact-SQL语言提供的比较运算符包括以下几种:等于(=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(!=或<>)、不小于(!<)和不大于(!>)。5.逻辑运算符逻辑运算符会测试是否符合某些情况。像“比较运算符”一样,逻辑运算符会返回TRUE,FALSE的布尔数据类型。常见的逻辑运算符如下表所示。【例3-7】使用逻辑运算符。查询学生表中姓王或者姓刘的学生信息,语句如下:USEjwSELECT*FROMStudentWHEREStuNameLIKE'王%'ORStuNameLIKE'刘%'运行结果如左图所示。6.字符串连接运算符加号(+)除了是算术运算符,也是连接字符串的“字符串连接运算符”。使用字符串连接运算符可以将多个字符串连接起来,形成新的字符串。【例3-8】使用字符串连接运算符。通过字符串连接运算符描述学生的具体信息,语句如下:USEjwSELECT'学号:'+StuNo+'学生姓名:'+StuNameAS'描述信息'FROMStudent运行结果如下图所示。Transact-SQL中运算符的优先级由高到低排列的顺序如下表所示。当一个表达式中出现多种运算符时,系统就会按照各运算符的优先级顺序决定所执行操作的先后顺序。如果运算符的级别相同,那么系统就会自左向右依次执行。如果用户需要改变执行顺序,可以使用括号将需要先执行的运算表达式括起来,这样系统会先执行括号内的表达式。3.1.4函数SQLServer2012提供了许多内置函数,同时也允许创建用户自定义函数。本节将简单介绍SQLServer2012内置函数。如下表所示,SQLServer2012提供了四类函数。其中,标量函数又分为配置函数、游标函数、日期和时间函数等,如下表所示。【例3-9】日期函数的使用。日期函数GETDATE()返回当前日期,而YEAR(日期)、MONTH(日期)、DAY(日期)函数分别返回指定日期的年、月及日。SELECTGETDATE()AS当前日期,YEAR(GETDATE())AS年,MONTH(GETDATE())AS月,DAY(GETDATE())AS日运行结果如左图所示。Trasaction-SQL提供的常用聚合函数包括AVG(求平均值)、MIN(求最小值)、MAX(求最大值)、SUM(求和)等。【例3-10】聚合函数的使用。求Score表中学生分数的平均值,语句如下:USEjwSELECTAVG(Score)AS'平均分'FROMScoreUSEjwSELECTMIN(Score)AS'最低分'FROMScore求Score表中学生分数的最小值,语句如下:运行结果如下图所示。【例3-11】排名函数的使用。通过排名函数ROW_NUMBER()统计Score表中学生成绩的排名情况,语句如下:USEjwSELECTStuNo,CouNo,Score,ROW_NUMBER()OVER(ORDERBYScoreDESC)AS'排名'FROMScore运行结果如右图所示。【例3-12】标量函数的使用。通过字符串函数LTRIM()删除字符串变量中的起始空格,语句如下:DECLARE@string_to_ltrimvarchar(30)SET@string_to_ltrim='HelloWorld'SELECT@string_to_ltrimAS'原始字符串'SELECTLTRIM(@string_to_ltrim)AS'去掉起始空格'运行结果如图右所示。3.1.5流程控制语句1.IF…ELSE语句IF…ELSE语句用于指定Transact-SQL语句的执行条件。如果满足IF条件(逻辑表达式结果为TRUE),则执行IF关键字及其条件之后的Transact-SQL语句。可选的ELSE关键字引入另一个Transact-SQL语句,当不满足IF条件时就执行该语句。其语法格式如下:IFBoolean_expression/*条件表达式*/{sql_statement|statement_block}/*条件表达式为TRUE时执行*/[ELSE{sql_statement|statement_block}]/*条件表达式为FALSE时执行*/【例3-13】IF…ELSE语句示例。DECLARE@xint,@yint,@zintSELECT@x=1,@y=2,@z=3IF@x>@yPRINT'x>y'--打印字符串'x>y'ELSEIF@y>@zPRINT'y>z'--打印字符串'y>z'ELSEPRINT'z>y'--打印字符串'z>y'2.BEGIN…END语句BEGIN…END语句用于将多个Transact-SQL语句组合为一个逻辑块。在控制流语句必须执行包含两条或多条Transact-SQL语句的语句块的任何地方,都可以使用BEGIN…END语句。其语法格式如下:BEGIN{sql_statement|statement_block}ENDBEGIN…END语句用于下列情况:1)WHILE循环需要包含语句块。2)CASE语句需要包含语句块。3)IF或ELSE子句需要包含语句块。若是第一条GO语句,则是从特殊会话或脚本的开始处到这条GO命令之间的所有语句。需要注意的是:GO命令和Transact-SQL语句不能在同一行。【例3-14】GO语句示例。3.GO语句USEjwGODECLARE@MyMsgVarchar(50)SELECT@MyMsg='Helloworld'GO--@MyMsg在Go语句后失效
CASE语句可以计算多个条件表达式,并将其中一个符合条件的结果表达式返回。CASE语句按照使用形式的不同,可以分为简单CASE语句和搜索CASE语句。简单CASE语句的语法格式如下:4.CASE语句CASEinput_expressionWHENwhen_expressionTHENresult_expression[…n][ELSEelse_result_expression]ENDCASEWHENBoolean_expressionTHENresult_expression[…][ELSEelse_result_expression]END搜索CASE语句的语法格式如下:【例3-15】使用CASE语句显示学生成绩的等级。USEjwSELECTStuNo,CouNo,level=CASEWHENScore>=90THEN'A'WHENScore<90ANDScore>=75THEN'B'WHENScore<75ANDScore>=60THEN'C'ELSE'D'ENDFROMScore运行结果如下图所示。5.WHILE…CONTINUE…BREAK语句WHILE…CONTINUE…BREAK语句用于设置重复执行SQL语句或语句块的条件。只要指定的条件为真,就重复执行语句。并且可以使用BREAK和CONTINUE关键字在循环内部控制
WHILE循环中语句的执行。其语法格式如下:WHILEBoolean_expression{sql_statement|statement_block}[BREAK]/*终止整个语句的执行*/{sql_statement|statement_block}[CONTINUE]/*结束一次循环体的执行*/{sql_statement|statement_block}【例3-16】WHILE…CONTINUE…BREAK语句示例。DECLARE@xint,@yint,@cintSELECT@x=1,@y=1WHILE@x<3BEGINPRINT@x--打印变量x的值WHILE@y<3BEGINSELECT@c=100*@x+@yPRINT@c--打印变量c的值SELECT@y=@y+1ENDSELECT@x=@x+1SELECT@y=1END运行结果如下图所示。6.GOTO语句GOTO语句将执行语句无条件跳转到标签处,并从标签位置继续处理。GOTO语句和标签可在过程、批处理或语句块中的任何位置使用。其语法格式如下:【例3-17】分别打印字符“1”,“2”,“3”,“4”,“5”。GOTOlabelDECLARE@xintSELECT@x=1label_1:PRINT@xSELECT@x=@x+1WHILE@x<6GOTOlabel_1运行结果如下图所示。7.WAITFOR语句WAITFOR语句,称为延迟语句,用于设定在达到指定时间或时间间隔之前,或者指定语句至少修改或返回一行之前,阻止执行批处理、存储过程或事务。其语法格式如下:WAITFOR{DELAY'time_to_pass'/*设定等待时间*/|TIME'time_to_execute'/*设定等待某一时刻*/}【例3-18】WAITFOR语句示例。等待1小时2分3秒后才执行SELECT语句:WAITFORDELAY'01:02:03'SELECT*FROMStudentWAITFORTIME'23:08:00'SELECT*FROMStudent等到23点8分后才执行SELECT语句:8.RETURN语句RETURN语句用于从查询或过程中无条件退出。RETURN的执行是即时且完全的,可在任何时候用于从过程、批处理或语句块中退出。RETURN之后的语句是不执行的。需要注意的是,如果用于存储过程,RETURN不能返回空值。如果某个过程试图返回空值,则将生成警告消息并返回0。其语法格式如下:RETURN[integer_expression]【例3-19】查询0463502101号学生001号课程的得分,若大于60分则返回1,否则返回0。USEjwGOCREATEPROCEDUREcheckscoreASIF(SELECTScoreFROMScoreWHEREStuNo=0463502101ANDCouNo=001)>60RETURN1ELSERETURN03.2数据操纵语言3.2.1SELECT语句SELECT语句的主要功能是数据库查询,其语法格式如下:SELECT[ALL|DISTINCT]select_list[INTOnew_table]FROMtable_list[WHEREsearch_conditions][GROUPBYgroup_by_list][HAVINGsearch_conditions][ORDERBYorder_list[ASC|DESC]]1.基本查询(1)使用SELECT语句获取表中所有信息SELECT语句可以返回表中所有的内容,并按照表中的顺序与格式进行排列。其语法格式如下:其中,“*”表示返回表中所有的信息,table_list表示需要检索的表的名称。SELECT*FROMtable_list(2)使用SELECT语句获取表中若干列使用SELECT语句可以获取表中指定的一列或几列数据,其中返回结果中列的排列顺序为用户查询语句中指定的顺序。其语法格式如下:其中,column表示表中某一列。如果要查询多列,各列之间应用逗号分隔。SELECTcolumn1,column2,…FROMtable_list(3)使用SELECT语句避免重复行在数据库中难免会出现重复行,可以使用DISTINCT关键字删除重复行。【例3-22】使用DISTINCT关键字删除重复行。从成绩表Score中查询该学期开设的课程,可以通过如下语句完成:USEjwSELECTDISTINCTCouNoFROMScore(4)通过SELECT语句返回若干行前面介绍的方法可以获得表的全部信息或单独获取若干列的信息,使用SELECT语句还可以指定表中的行数。其语法格式如下:其中,TOPn用于指定查询结果返回的行数。其特点是,其返回结果一定是返回表中自上向下的n行信息。SELECT[TOPn][*|column]FROMtable2.条件查询使用SELECT子句时,除了需要指定从哪一个表查询及需要查询的列名称之外,通常会利用WHERE子句做进一步的条件限制。WHERE子句用于选取需要检索的数据行;灵活地运用该子句还能够指定许多不同的查询条件,以实现更精确的查询。在SELECT查询语句中使用WHERE子句的一般语法格式如下:查询结果返回表中searchcondition条件为TRUE的所有行,而对于searchcondition条件为FALSE或未知的行则不返回。SELECTconditionFROMtableWHEREsearchconditionWHERE子句使用灵活,searchcondition条件有多种使用方式,下面将详细介绍。(1)使用比较运算符WHERE子句的比较运算符包括:等于(=)、大于(>)、小于(<)、大于等于(>=)、小于等于(<=)、不等于(!=或<>)、不小于(!<)和不大于(!>)。下面将通过几个示例详细介绍这些比较运算符的使用方法。【例3-24】使用等于运算符。查询学号为“0463501101”的学生姓名,语句如下:USEjwSELECTStuNameFROMStudentWHEREStuNo='0463501101'【例3-25】使用小于运算符。从成绩表中查询成绩超过90分的学号,语句如下:USEjwSELECT*FROMScoreWHEREScore>90(2)使用逻辑运算符WHERE子句中可用的逻辑运算符包括AND,OR和NOT,这些逻辑运算符可以混合使用。本节将通过几个示例详细介绍这些逻辑运算符的使用方法。【例3-26】使用AND运算符。从成绩表中查询成绩在80分和90分之间的学号,语句如下:USEjwSELECT*FROMScoreWHEREScore<90ANDScore>80【例3-27】使用OR运算符。从课程表中查询教授Java程序设计或网络数据库技术的教师姓名,语句如下:USEjwSELECTTeacherFROMCourseWHERECouName='程序设计'ORCouName='Java网络数据库技术'【例3-28】使用NOT运算符。从成绩表中查询考试不及格的学号信息,语句如下:USEjwSELECTStuNoFROMScoreWHERENOTScore>=60(3)使用IN条件查询时经常需要查询某表达式的取值是否属于某一取值集合,虽然可以综合使用比较运算符和逻辑运算符来完成查询任务,但是直观性较差。使用IN或NOTIN关键字限定查询条件,能更直观地查询表达式取值是否在值列表中。其基本语法格式如下:【例3-29】使用IN条件。查询成绩表中选修课程编号为“001”和“002”的学生成绩,语句如下:WHEREexpression[NOT]INvalue_listSELECT*FROMScoreWHERECouNoIN('001','002')(4)使用BETWEEN条件在WHERE子句中使用BETWEEN条件,可以为用户查询限定范围,其中BETWEEN表示返回在某一范围内的数据,而NOTBETWEEN表示返回不在某一范围内的数据。使用该条件时的一般语法格式如下:其中,begin_expression表示范围的下限,而end_expression表示范围的上限。注意begin_expression必须不大于end_expression。使用BETWEEN的效果与下面使用逻辑运算符的语句效果相同:WHEREtest_expression[NOT]BETWEENbegin_expressionANDend_expressionWHEREtest_expression>=begin_expressionANDtest_expression<=end_expression【例3-30】使用BETWEEN条件。从成绩表中查询成绩在80分和90分之间的学号,语句如下:USEjwSELECT*FROMScoreWHEREScoreBETWEEN80AND90(5)使用LIKE匹配在WHERE子句中将LIKE与通配符搭配使用,可以实现模糊查询。其语法格式如下:其中,NOT为可选项;PATTERN是模式字符串,由通配符组成。下表列出了常用的通配符及其含义。WHEREexpression[NOT]LIKE'PATTERN'【例3-31】使用“%”通配符。查找姓张的老师教授的所有课程信息,可以通过如下查询语句完成:【例3-32】使用“_”通配符。查询课程编号以“00”开头的所有课程信息,可以通过如下查询语句完成:USEjwSELECT*FROMCourseWHERETeacherLIKE'张%'USEjwSELECT*FROMCourseWHERECouNoLIKE'00_'【例3-33】使用“[]”通配符。查询课程编号以“0”开头或者以“1”开头的所有课程信息,可以通过如下查询语句完成:USEjwSELECT*FROMCourseWHERECouNoLIKE'[01]%'(6)使用IS[NOT]NULL条件在WHERE子句中使用ISNULL或ISNOTNULL条件可以查询某一数据值是否为NULL的数据信息。其语法格式如下:【例3-34】使用ISNOTNULL条件。查询班级表中班级名称不为NULL的班级信息,可以通过如下查询语句完成:WHEREcolumnIS[NOT]NULLUSEjwSELECT*FROMClassWHEREClassNameISNOTNULL3.聚合和汇总SQLServer提供了许多专用的数值统计函数,称为聚合函数(AggregateFunction)。(1)GROUPBY子句数据库具有基于表的特定列对数据进行分析的能力。运用GROUPBY子句可以对某一列数据的值进行分组,从而使同组的元组集中在一起,并使数据能够实现分组统计。其语法格式如下:其中,关键字ALL表示是否使用所有信息,一般与WHERE子句的条件一起使用;column_name表示列名。GROUPBY[ALL]<column_name>[,<column_name>…]GROUPBY子句通常与聚合函数联合使用,如SUM,AVG和MAX等。下表列出了几个常用的聚合函数。【例3-35】使用GROUPBY子句。要查询成绩表获得每门课程的平均成绩,可以通过如下查询语句完成:USEjwSELECTCouNo,AVG(Score)AS'平均成绩'FROMScoreGROUPBYCouNo运行结果如右图所示。(2)WHERE子句与GROUPBY子句结合使用GROUPBY子句同样可以与WHERE子句结合使用。【例3-36】使用GROUPBY子句和WHERE子句。要查询成绩表001号课程的最高分,可以通过如下查询语句完成:USEjwSELECTCouNo,MAX(Score)AS'最高分'FROMScoreWHERECouNoLIKE'001'GROUPBYCouNo运行结果如下图所示。使用HAVING子句的一般语法格式如下:SELECTconditionFROMtablenameWHEREsearch_condition1GROUPBYcolumn_nameHAVINGsearch_condition2【例3-37】使用HAVING子句。要查询成绩表获得平均成绩超过80分的课程信息,可以通过如下查询语句完成:USEjwSELECTCouNo,AVG(Score)AS'平均成绩'FROMScoreGROUPBYCouNoHAVINGAVG(Score)>80运行结果如右图所示。(4)ORDERBY子句ORDERBY子句一般位于SELECT语句的最后,它的功能是对查询返回的数据进行重新排序。使用ORDERBY子句时,一般遵循如下的语法结构:当排序要求为ASC时,结果集的元组按排序列值的升序排列;当排序要求为DESC时,结果集的元组按排序列值的降序进行排列。如果用户没有指定排序顺序,则默认为ASC。SELECTselect_listFROMtable_sourceWHEREsearch_condition1GROUPBYcolumn_nameHAVINGsearch_condition2ORDERBYorder_expression[ASC|DESC]【例3-38】使用ORDERBY子句。通过查询成绩表获得每门课程的平均成绩,并按照降序排列,可以通过如下查询语句完成:运行结果如右图所示。USEjwSELECTCouNo,AVG(Score)AS'平均成绩'FROMScoreGROUPBYCouNoORDERBYAVG(Score)DESC4.多表查询多表查询实际上是通过各个表之间共同列的相关性来查询数据的,是数据库的主要特征。进行多表查询的第一步是在这些表之间建立连接。下面通过多表查询操作来介绍如何连接多个表进行查询操作。(1)基本连接基本连接是最简单的连接方式。用SQL语句实现基本连接时,不同的表之间使用逗号分隔。如果仅通过FROM子句建立连接,而没有使用WHERE子句限定连接条件,那么查询结果将会生成一个笛卡尔乘积表。笛卡尔乘积表是由连接中一个基表的每一行与另一基表的每一行连接在一起所生成的表,该表的行数是两个连接基表行数的乘积。由于这种结果数据的信息非常大,因此该表没有多大实际用处。【例3-39】笛卡尔乘积。上述查询返回一个5列56行的表格,如下图所示。USEjwSELECT*FROMDepartment,Class为了避免产生笛卡尔乘积表,并且得到所需要的检索结果,必须使用WHERE子句,给出连接条件。一般来说,N个表有N-1个连接条件。如希望查询出每个班级所在系名,则需要涉及Department表和Class表,而这两个表之间可以通过DepartNo列进行连接,DepartNo列称为连接列。Department表中的DepartNo列一定与Class表中的DepartNo列相等,可将连接条件写为“Department.DepartNo=Class.DepartNo”。此处需大家理解连接条件的含义,连接条件的使用会在下面各节中进行介绍。(2)内连接内连接是较常用的一种连接方式。它使用比较运算符对多个基表数据进行比较操作,并列出这些基表中与连接条件匹配的数据行。在SQLServer中,内连接可以使用两种连接语法形式。一种是SQLServer连接语法形式,此时连接用在WHERE子句中。该种语句的语法遵循以下原则。在SELECT子句列表中,列出需要查询的列名。需要注意的是,若某列在两个基表中都存在,则需要在列名前注明基表的名称。FROM子句应包括所有使用的基表。WHERE子句应定义一个同等连接。【例3-40】查询学号为“0463501101”的同学的姓名、班级编号、班级名称及系名。查询语句如下:USEjwSELECTStuName,Student.ClassNo,DepartNameFROMStudent,Department,ClassWHEREStudent.ClassNo=Class.ClassNoANDClass.DepartNo=Department.DepartNoANDStuNo='0463501101'运行结果如下图所示。另一种连接语法形式是使用ANSI连接语法形式,此时使用INNERJOIN关键字进行连接查询(在内连接中,INNER可以省略),在ON子句中给出连接条件。其语法格式如下:SELECTselect_listFROMtable1INNERJOINtable2[ONjoin_conditions][WHEREsearch_conditions]【例3-41】查询学号为“0463501101”的同学的姓名、班级编号及班级名称。USEjwSELECTStuName,Student.ClassNo,ClassNameFROMStudentINNERJOINClassONStudent.ClassNo=Class.ClassNoWHEREStuNo='0463501101'运行结果如右图所示。内连接又可以进一步分为等值连接、自然连接和非等值连接三种。1)等值连接。等值连接就是在连接条件中使用等于(=)比较运算符来比较连接列的列值,在查询结果中列出被连接表中的所有列,并且包括重复列。2)自然连接。自然连接与等值连接相同,都是在连接条件中使用等于(=)比较运算符。使用自然连接查询时,它会自动为具有相同名称的列进行记录匹配,并在返回的数据中删除连接表中的重复列。3)非等值连接。非等值连接就是在连接条件中使用了除等号之外的比较运算符以比较连接列的列值,这些比较运算符有>、<、>=、<=、<>。除此之外,也可以使用范围运算符,如BETWEEN。(3)外连接为避免内连接可能造成的信息丢失,用户可以使用外连接。外连接与内连接不同,在查询时所用的基表有主、从表之分。使用外连接时,以主表每行的数据去匹配从表中的数据行:如果符合连接条件,则返回结果集中;如果没有找到匹配行,则主表的行仍然保留,并返回结果集中,相应的从表中的数据行被赋予NULL值后也返回结果集中。根据返回行的主、从表形式不同,外连接可分为三种类型:左外连接、右外连接和全外连接。1)左外连接。左外连接是指返回所有的匹配行,并从JOIN关键字左边的表中返回所有不匹配行。由此可知,即使不匹配,JOIN关键字左边的表中数据也将被保留,所以在左外连接中,JOIN关键字左边的表为主表,右边的表为从表。使用左外连接的一般语法格式如下:其中,OUTERJOIN表示外连接(OUTER可以省略);LEFT表示左外连接的关键字,因此table1为主表,table2为从表。SELECTselect_listFROMtable1LEFTOUTERJOINtable2[ONjoin_conditions][WHEREsearch_conditions]2)右外连接。与左外连接相反,右外连接返回所有的匹配行并从JOIN关键字右边的表中返回所有不匹配的行。因此,在右外连接中,JOIN关键字右边的表为主表,左边的表为从表,右外连接返回结果与左外连接相同,即不满足匹配的结果集在相应的列中添入NULL值。使用右外连接的一般语法格式如下:其中,OUTERJOIN表示外连接,RIGHT表示右外连接的关键字。SELECTselect_listFROMtable1RIGHTOUTERJOINtable2[ONjoin_conditions][WHEREsearch_conditions]3)全外连接。全外连接又称完全外连接,该连接查询方式返回连接表中所有行的数据,完成左外连接和右外连接的操作,包括了左表和右表中所有不满足条件的行。使用全外连接的一般语法格式如下:其中,OUTERJOIN表示外连接,FULL是全外连接的关键字。SELECTselect_listFROMtable1FULLOUTERJOINtable2[ONjoin_conditions][WHEREsearch_conditions](4)交叉连接如果交叉连接不带WHERE子句,则返回的结果是被连接的两个表的笛卡尔乘积;如果交叉连接带WHERE子句,则返回结果为两个表的笛卡尔乘积减去WHERE子句所限定而省略的行数。使用交叉连接的一般语法格式如下:其中,CROSS为交叉连接的关键字。SELECTselect_listFROMtable1CROSSJOINtable2[WHEREsearch_conditions](5)自连接前面介绍了多种方式实现两个或多个表之间的连接查询,对同一个表同样可以进行连接查询,这种连接查询方式就称为自连接。对一个表使用自连接方式时,需要为该表定义一个别名,其他内容与两个表的连接操作相似。【例3-50】检索课程名相同但任课教师不同的课程信息(课程编号、课程名称、任课教师)。USEjwSELECTt1.CouNo,t1.CouName,t1.TeacherFROMCourset1,Courset2WHEREt1.CouName=t2.CouNameANDt1.Teacher<>t2.Teacher(6)联合查询使用联合查询可以将两个或更多的结果集组合到一个结果集中,而新结果集则包含了所有查询结果集中的数据。使用联合查询的一般语法格式如下:联合查询(大括号中)通过
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 齐齐哈尔市梅里斯达斡尔族区2025年数学三年级第二学期期中达标测试试题(含答案)
- 黔南布依族苗族自治州福泉市2025届三下数学期末检测试题含答案解析
- 《华龙证券企业微信管理细则》测试卷及答案
- 黑龙江省黑河市嫩江市墨尔根小学2025届数学四下期末质量检测模拟试题含解析
- 2025广东江门农商行校园招聘笔试历年典型考题及考点剖析附带答案详解
- 2025广东佛山市顺北集团有限公司规划岗招聘1人笔试历年备考题库附带答案详解
- 2025年陕西渭南市合阳县惠民村镇银行招聘(8人)笔试历年典型考题及考点剖析附带答案详解
- 2025年视立美视光科技集团(西安)有限公司招聘笔试历年难易错考点试卷带答案解析
- 黑龙江省黑河市2025-2026学年四下数学期中达标检测试题(含答案解析)
- 2026电梯考试题目及答案模板
- 2026年浙江中考(语文)真题带答案
- 2026年医师定期考核考试题库及答案
- 2026年重庆市渝中区中考二模语文试卷
- 2026-2030轨道钢产业市场深度调研及发展趋势与投资前景研究报告
- 跨部门协作会议纪要模板及行动计划
- 儿童绘本故事《谁偷了我的饼》教学设计
- 安全生产资金保障制度范本
- 上海核工程研究设计院股份有限公司招聘笔试题库2026
- 家庭触电事故案例分析
- 社区食堂规范运营制度范本
- 造价咨询风险防范控制制度及措施
评论
0/150
提交评论