数据库原理与技术(金仓KingbaseES版)-课件全套 第1-9章 数据库系统概述- 数据库应用开发系统案例分析_第1页
数据库原理与技术(金仓KingbaseES版)-课件全套 第1-9章 数据库系统概述- 数据库应用开发系统案例分析_第2页
数据库原理与技术(金仓KingbaseES版)-课件全套 第1-9章 数据库系统概述- 数据库应用开发系统案例分析_第3页
数据库原理与技术(金仓KingbaseES版)-课件全套 第1-9章 数据库系统概述- 数据库应用开发系统案例分析_第4页
数据库原理与技术(金仓KingbaseES版)-课件全套 第1-9章 数据库系统概述- 数据库应用开发系统案例分析_第5页
已阅读5页,还剩802页未读 继续免费阅读

下载本文档

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

文档简介

第3章

关系数据库标准语言3.1SQL的基本概念与特点3.2人大金仓KingbaseES简介3.3创建和使用数据库3.4创建和使用数据表3.5数据操纵3.6数据查询3.7子查询3.8其他类型查询3.9视图3.10索引3.1SQL的基本概念与特点第3章SQL的发展及标准化3.1.1提出并实现:

1974年由Boyce和Chamberlin提出,并在IBM公司研制的关系数据库管理系统原型SystemR上实现。成为美国标准:

1986年10月ANSI(美国国家标准协会)的数据库委员会用SQL作为关系数据库语言的美国标准。成为国际标准:

1987年ISO通过了这一标准。3.1SQL的基本概念与特点第3章发布年份标准标准页数简要发展1986年ISO/IEC9075:1986,SQL-86-SQL语言首次标准化1989年ISO/IEC9075:1989,SQL-89-增加了完整性约束1992年ISO/IEC9075:1992,SQL-921120引入了标准分级概念1999年ISO/IEC9075:1999,SQL:19992084改变了标准符合程度的定义2003年ISO/IEC9075:2003,SQL:20033606引入了XML、Window函数等2008年ISO/IEC9075:2008,SQL:20083906引入了TRUNCATE等2011年ISO/IEC9075:2011,SQL:20112456引入了时序数据等2016年ISO/IEC9075:2016,SQL:20164348引入了JSON等1986年10月,ANSI(AmericanNationalStandardInstitute,美国国家标准化协会)将SQL作为关系数据库语言的美国标准并颁布了第一个标准SQL-86,并于1987年6月被ISO(InternationalOrganizationforStandardization,国际标准化组织)采纳为国际标准。随后多次对标准进行了修订,增加了许多新的功能。(右图:SQL:2016标准Part1首页)3.1SQL的基本概念与特点第3章SQL的体系结构3.1.2基本表1基本表2基本表3基本表4视图1视图2存储文件1存储文件2SQL内模式模式外模式SQL对三级模式的支持3.1SQL的基本概念与特点第3章外模式:视图从一个或几个基本表导出的表,是虚表;数据库中只存放视图的定义,不存放视图对应的数据。模式:基本表是自身独立存在的表,SQL中一个关系对应一张表;一个或多个基本表对应一个存储文件。内模式:存储文件一个基本表可以带若干个索引;索引也存放在存储文件中。3.1SQL的基本概念与特点第3章SQL的特点3.1.3综合统一:集数据定义语言(DDL),数据操纵语言(DML),数据控制语言(DCL)功能于一体。可以独立完成数据库生命周期中的全部活动:建立数据库,定义和修改、删除关系模式,定义和删除视图,插入数据;对数据库中的数据进行查询和更新;数据库重构和维护数据库安全性、完整性控制,以及事务控制嵌入式SQL和动态SQL定义用户数据库投入运行后,可根据需要随时逐步修改模式,不影响数据库的运行。数据操作符统一3.1SQL的基本概念与特点第3章高度非过程化:非关系数据模型的数据操纵语言“面向过程”,必须指定存取路径。SQL只要提出“做什么”,无须了解存取路径。存取路径的选择以及SQL的操作过程由系统自动完成。面向集合的操作方式:SQL语言采用的集合操作方式,不仅操作对象、查询结果可以是元组的集合,而且一次插入、删除、更新操作的对象也可以是元组的集合。以同一种语法结构提供两种使用方法:SQL语言既是自含式语言,能独立地用于联机交互;又是嵌入式语言,能嵌入到高级语言中进行混合编程。3.1SQL的基本概念与特点第3章语言简洁,易学易用完成核心功能只用9个动词:3.2人大金仓KingbaseES简介第3章KingbaseES的发展和版本3.2.1KingbaseES数据库管理系统(简称KingbaseES)是北京人大金仓信息技术股份有限公司(简称“人大金仓”)经过多年努力自主研发的、具有自主知识产权的商用关系型数据库管理系统(DBMS)。人大金仓成立于1999年,由中国人民大学和一批最早在国内开展数据库教学、研究与开发的专家创立。金仓数据库管理系统KingbaseES广泛用于电子政务、军工、电力、金融、电信、教育及交通等行业,是一个标准化和本土化程度高、兼容性强、完全可用、够用、易用的数据库产品,能够满足绝大多数应用需求。实际应用数量超过35万套,覆盖全国二十多个关键领域和行业,及3650个县市,并连续五年在国产数据库市场占有率中名列第一。3.2人大金仓KingbaseES简介第3章KingbaseESV8R3设计并实现了标准版、企业版、安全版等版本,全部构建于同一数据库引擎内:企业版:KingbaseESV8R3的核心产品,面向企业级的关键业务应用,具有大型通用、运行稳定、“三高”(高可靠、高性能、高安全)和“两易”(易管理、易使用)等特点。标准版:主要支撑互联网以及中小企业业务,拥有较高的性价比。安全版:主要从数据访问、存储、传输等方面整体增强数据库安全特性,已通过公安部四级安全认证。除了上述版本,KingbaseESV8R3还为特殊用户提供了定制版,重点是数据库性能、安全、应用编程接口或客户端工具等方面。3.2人大金仓KingbaseES简介第3章KingbaseES的客户端工具3.2.2数据库对象管理工具:KingbaseESV8R3提供的新的集成环境,是基于Java语言开发的能运行在不同操作系统平台上的图形工具,用于访问、配置、控制和管理KingbaseES数据库服务器。数据库部署工具:用Java语言编写,主要用于集群的部署和状态监控。用户仅需知道所需部署服务器的IP、PORT等信息,在工具的引导下,输入集群脚本的关键参数等,即可部署一套完整的集群服务。部署完成后,用户可实时监控集群状态,修改集群参数等以达到最好的状态,并提供日志用于错误分析等。3.2人大金仓KingbaseES简介第3章逻辑同步(Syslogical)工具:一项扩展功能,使用发布/订阅模型对数据选择性复制,比物理同步更灵活、更高效;利用JDBC连接服务器,与目标操作平台无关,不但可以实现不同服务器的数据同步,而且可以在同一服务器的不同库、模式、表等之间进行同步。控制台工具:为服务器端开发的可视化管理工具,提供物理备份和服务管理等功能。物理备份以图形化的方式进行物理备份和还原,能够比较直观地完成全量、增量备份和备份的恢复等工作;服务管理以图形化的方式管理服务进程,注册服务后即可快速地启动和安全地停止服务器进程。控制台工具可以使服务端的管理更加方便和高效。数据迁移工具:一款跨平台的数据交换和迁移工具,支持X86/X86-64以及国产龙芯、飞腾等平台,支持Windows32、Windows64、Linux以及国产中标麒麟和银河麒麟操作系统。3.2人大金仓KingbaseES简介第3章数据库对象管理工具3.2.3开始→所有程序→KingbaseESV8→数据库对象管理工具,启动“数据库对象管理工具”3.2人大金仓KingbaseES简介第3章右击“KingbaseES”实例→点击“连接”→弹出“注册新实例”对话框3.2人大金仓KingbaseES简介第3章注册新实例成功后,完整的对象导航树包括:数据库服务器,数据库,模式,数据库对象(表、视图等)3.3创建和使用数据库第3章KingbaseES数据库的结构3.3.1底层是存储管理层,主要实现数据存储管理、数据复制、数据完整性保护、封锁、并发控制、事务管理、缓存管理、日志空间管理等;存储层之上是SQL处理层,主要负责SQL接口底层(函数、索引、数据字典、存储过程、触发器)的实现、解析、优化、执行和缓存处理等;SQL处理层之上是传输层,主要实现基于SSL的可信传输;1.总体架构:3.3创建和使用数据库第3章传输层之上为接口层,提供各种常见数据库的访问接口(ODBC/JDBC/ESQL/PERL/PHP/MYBATIS/HIBERNATE/.NET/EF6)及其驱动程序的实现;最上面是工具层,提供给管理员大量便捷高效的数据库管理工具和开发工具。KingbaseES的安全防护手段和策略贯穿以上各层,提供特权分立、访问控制、存储加密等安全组件和功能,为数据库管理系统提供内核级的层层安全防护。3.3创建和使用数据库第3章在数据库术语里,KingbaseES使用客户端/服务器的模型。一次KingbaseES会话由下列相关的进程组成:一个服务器进程,它管理数据库文件、接受来自客户端应用与数据库的联接并且代表客户端在数据库上执行操作。该数据库服务器程序叫做kingbase。那些需要执行数据库操作的用户的客户端(前端)应用。客户端应用可能本身就是多种多样的:可以是一个面向文本的工具,也可以是一个图形界面的应用,或者是一个通过访问数据库来显示网页的网页服务器,或者是一个特制的数据库管理工具。一些客户端应用是和KingbaseES发布一起提供的,但绝大部分是用户开发的。2.架构基础:3.3创建和使用数据库第3章与典型的C/S应用一样,这些客户机和服务器可以在不同的主机上,它们通过TCP/IP网络进行通信。注意,在客户机上可以访问的文件未必能够在数据库服务器机器上访问(或者只能用不同的文件名进行访问)。KingbaseES服务器可以处理来自客户机的多个并发请求,因此为每个连接启动(forks)一个新的进程。从这时开始,客户机和新服务器进程就不再经过最初的Kingbase进程的干涉进行通信。因此,主服务器进程总是在运行并等待着客户机连接,而客户机与相关联的服务器进程则是不断启停。2.架构基础:3.3创建和使用数据库第3章KingbaseES数据库管理系统,由数据库文件和KingbaseES实例组成:数据库文件数据库文件为存储用户数据以及元数据的一组磁盘文件。元数据为描述数据库结构、配置和控制有关的信息。KingbaseES实例包含若干对存储的数据进行操作的数据库服务进程,还包括分配和管理内存,统计各种信息,以及实现各种协调工作的后台进程。一台设备上,可以同时运行多个实例。3.实例架构:3.3创建和使用数据库第3章KingbaseES数据库初始化过程会创建一个数据库实例。KingbaseES创建数据库实例时会自动创建五个数据库:TEMPLATE0、TEMPLATE1、TEMPLATE2、SAMPLES和TEST。其中前三个为系统数据库,不允许用户修改,亦不在数据库对象管理工具客户端中呈现。用户也可以通过“CREATEDATABASE”语句来创建自己的数据库。每个数据库中可以包含多个数据库对象,如表、索引、序列等。KingbaseES数据库实例管理的所有数据在物理上都以操作系统文件的方式存放在磁盘上。4.存储结构:3.3创建和使用数据库第3章KingbaseES的数据存储管理。主要完成数据文件空间分配回收、组织和管理等功能。这些管理,是按页面为单位进行的。在KingbaseES数据库中,数据文件被组织成一个个页面(Page),页面大小为8k。对数据文件的I/O操作都是以页面为单位。4.存储结构:3.3创建和使用数据库第3章逻辑存储表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的是表,所以称作表空间。用户可以通过“CREATETABLESPACE”语句来创建自己的表空间。对已经存在的表空间,用户可以通过“DROPTABLESPACE”语句来将其删除。4.存储结构:3.3创建和使用数据库第3章物理存储在传统上,数据库集簇所使用的配置和数据文件都被一起存储在集簇的数据目录里,一个常用的目录名为data。由不同数据库实例所管理的多个集簇可以在同一台机器上共存。data目录包含几个子目录以及一些控制文件。除了这些必要的东西之外,kingbase.conf、sys_hba.conf和sys_ident.conf通常都存储在data中,不过可以把它们放在别的地方。4.存储结构:3.3创建和使用数据库第3章创建用户数据库3.3.21.通过“数据库对象管理工具”创建数据库①

在数据库对象管理工具界面中,右击“数据库”节点,在弹出的快捷菜单中选择“新建→数据库”命令,即可打开新建数据库窗口。②

在“基本属性”选项卡的“名称”文本框中输入数据库的名称,在“属主”和“编码”下拉框中指定数据库的属主和编码方式。③

单击“确定”按钮,创建一个新的数据库。3.3创建和使用数据库2.通过SQL语句创建数据库CREATEDATABASEname[[WITH][OWNER[=]user_name][TEMPLATE[=]template][ENCODING[=]encoding][LC_COLLATE[=]lc_collate][LC_CTYPE[=]lc_ctype][TABLESPACE[=]tablespace_name][ALLOW_CONNECTIONS[=]allowconn][CONNECTIONLIMIT[=]connlimit][IS_TEMPLATE[=]istemplate]]name:创建的数据库名。user_name:拥有新数据库的用户的角色名,或者用DEFAULT来使用默认值(执行该命令的用户)。如果需要创建一个被另一个角色拥有的数据库,就必须是该角色的一个直接或间接成员,或者是一个超级用户。template:创建的新数据库的模板名称,或者用DEFAULT来使用默认模板(template1)。encoding:在新数据库中使用的字符集编码,指定一个字符串常量(如'SQL_ASCII'),或者一个整数编码编号,或者通过DEFAULT来使用默认的编码(即模板数据库的编码)。CREATEDATABASEname[[WITH][OWNER[=]user_name][TEMPLATE[=]template][ENCODING[=]encoding][LC_COLLATE[=]lc_collate][LC_CTYPE[=]lc_ctype][TABLESPACE[=]tablespace_name][ALLOW_CONNECTIONS[=]allowconn][CONNECTIONLIMIT[=]connlimit][IS_TEMPLATE[=]istemplate]]3.3创建和使用数据库第3章2.通过SQL语句创建数据库lc_collate:指定新数据库使用的排序规则顺序,主要影响字符串的排序顺序和文本列上索引所使用的顺序,默认是使用模板数据库的排序规则顺序。lc_ctype:指定在新数据库中使用的字符分类,主要影响字符的类别,如小写、大写和数字,默认是使用模板数据库的字符分类。tablespace:与新数据库相关联的表空间名称,或者通过DEFAULT使用模板数据库的表空间。3.3创建和使用数据库第3章2.通过SQL语句创建数据库CREATEDATABASEname[[WITH][OWNER[=]user_name][TEMPLATE[=]template][ENCODING[=]encoding][LC_COLLATE[=]lc_collate][LC_CTYPE[=]lc_ctype][TABLESPACE[=]tablespace_name][ALLOW_CONNECTIONS[=]allowconn][CONNECTIONLIMIT[=]connlimit][IS_TEMPLATE[=]istemplate]]allow_connections:布尔类型,默认为真,表示允许连接(除了被其他机制约束),若为假,则没有用户能连接到这个数据库。connection_limit:新数据库允许的并发连接数,默认值为-1,表示没有限制。is_template:布尔类型,若为真,则任何具有CREATEDB特权的用户都可以从这个数据库克隆;若为假(默认),则只有超级用户或者该数据库的拥有者可以克隆它。可选的参数可以被写成任何顺序,不用按照上面说明的顺序。3.3创建和使用数据库第3章CREATEDATABASETeach;【例3-1】用SQL命令创建一个教学数据库TEACH。CREATEDATABASETEACHENCODING'LATIN1'TEMPLATEtemplate0;【例3-2】创建一个支持ISO-8859-1字符集的数据库TEACHTEMPLATEtemplate0子句只有在template1的编码不是ISO-8859-1时需要。注意,改变编码时,需选择新的LC_COLLATE和LC_CTYPE设置。3.3创建和使用数据库第3章修改用户数据库3.3.31.通过“数据库对象管理工具”修改数据库在数据库对象管理工具界面中,右击要修改的数据库,在弹出的快捷菜单中选择“编辑→数据库”命令,即可打开编辑数据库窗口,对基本属性、权限等进行修改。2.通过SQL语句修改数据库“ALTERDATABASE”语句可以更改数据库的属性3.3创建和使用数据库第3章ALTERDATABASEname[[WITH]option[…]]ALTERDATABASEnameRENAMETOnew_nameALTERDATABASEnameOWNERTO{new_owner|CURRENT_USER|SESSION_USER}ALTERDATABASEnameSETTABLESPACEnew_tablespaceALTERDATABASEnameSETconfiguration_parameter{TO|=}{value|DEFAULT}ALTERDATABASEnameSETconfiguration_parameterFROMCURRENTALTERDATABASEnameRESETconfiguration_parameterALTERDATABASEnameRESETALL对各参数的使用可以参考创建数据库时的说明,新增的value参数用于将数据库指定配置参数的会话默认值设置为给定值。如果value是DEFAULT,或者等效地使用了RESET,那么数据库相关的设置会被移除,因此系统范围的默认设置将在新会话中继承。RESETALL语句可清除所有数据库相关的设置。SETFROMCURRENT会保存该会话的当前参数值作为数据库相关的值。3.3创建和使用数据库第3章删除用户数据库3.3.41.通过“数据库对象管理工具”删除数据库在数据库对象管理工具界面中,右击要删除的数据库,在弹出的快捷菜单中选择“删除”命令,即可删除数据库。2.通过SQL语句修改数据库“DROPDATABASE”语句用于删除数据库,可以一次删除一个或多个数据库,只有数据库拥有者或者超级用户能够使用此命令。注意,DROPDATABASE执行后不能被撤销。请谨慎使用!3.3创建和使用数据库第3章ALTERDATABASETESTSETenable_indexscanTOoff;【例3-3】在数据库TEST中默认禁用索引扫描。DROPDATABASETEACH;【例3-4】删除数据库TEACH。3.4创建和使用数据表第3章数据表是数据库中最重要的对象之一。表是存储数据的场所,是数据的集合,是用来存储数据和操作数据的逻辑结构。设计数据库的步骤:确定数据库所需的表每个表中数据的类型可以访问每个表的用户3.4创建和使用数据表数值类型货币类型第3章数据类型3.4.1字符类型数值类型由2、4或8字节的整数以及4或8字节的浮点数和可选精度小数组成,具体包括整数类型、任意精度数字、浮点类型。货币类型存储固定小数精度的货币数字,小数的精度由数据库的lc_monetary设置决定。money类型可接受的输入格式很多,包括整数和浮点数文字,以及常用的货币格式。SQL定义了两种基本的字符类型charactervarying(n[char|byte])和character(n[char|byte]),都可以存储最多n(正整数)个字符长的串。3.4创建和使用数据表第3章二进制数据类型日期/时间类型布尔类型KingbaseES的二进制数据类型bytea数据类型允许存储二进制串。KingbaseES的日期/时间类型包括:用于描述日期和时间的timestamp,只显示日期不显示时间的date,一天中的时间time,以及时间间隔interval。KingbaseES的布尔类型boolean可以有多个状态:true(真)、false(假)和unknown(未知,用SQL空值表示)。3.4创建和使用数据表第3章数据类型别名描述bigintint8有符号的8字节整数booleanbool逻辑布尔值(真/假)bytea

二进制数据(字节数组)character[(n[char|byte])]char[(n[char|byte])]定长字符串charactervarying[(n[char|byte])]varchar[(n[char|byte])]varchar2[(n[char|byte])]nvarchar[(n[char|byte])]nvarchar2[(n[char|byte])]变长字符串date

日历日期(年、月、日)doubleprecisionfloat8,double双精度浮点数(8字节)integerint,int4有符号4字节整数interval[fields][(p)]

时间段money

货币数量numeric[(p,s)]decimal[(p,s)]

number[(p,s)]可选择精度的精确数字

realfloat4单精度浮点数(4字节)smallintint2有符号2字节整数text

变长字符串time[(p)][withouttimezone]

一天中的时间(无时区)time[(p)]withtimezonetimetz一天中的时间,包括时区timestamp[(p)][withouttimezone]

日期和时间(无时区)timestamp[(p)]withtimezonetimestamptz日期和时间,包括时区KingbaseES提供了很多系统内置数据类型,每种数据类型都有一个由其输入和输出函数决定的外部表现形式,如表所示,其中“别名”列出的可选名字大部分是因历史原因被KingbaseES在内部使用过的名字,还有一些内部使用的或者废弃的类型,但并未在此处列出。3.4创建和使用数据表第3章1.通过SQL语句创建数据表CREATETABLEtable_name([{column_namedata_type[column_constraint[…]]|table_constraint}])table_name:被创建表的名称。column_name:被创建列的名称。data_type:该列的数据类型;column_constraint:该列受到的约束(在下一节详细介绍)。table_constraint:表受到的约束。创建数据表3.4.2第3章2.通过“数据库对象管理工具”创建数据表①

打开KingbaseESV8R3的数据库对象管理工具,选择所需创建表的数据库(如TEACH),展开数据库,在其“PUBLIC”下的“表”结点处右击选择“新建表”命令,即可打开新建表对话框。②在“基础属性”下的“名称”处输入表名,如S。在“字段”下选择“新增”功能即可添加表的不同列。③

单击“确定”按钮,出现“生成表成功”的提示表明创建成功。3.4创建和使用数据表3.4创建和使用数据表第3章CREATETABLES(Sno CHAR(7),Sn VARCHAR(18),Sg CHAR(3),Sb DATE,Dp CHAR(9));【例3-5】用SQL语句在数据库teach中建立一个学生表S。右击代码,在弹出的快捷菜单中选择“执行→执行SQL”,即可创建学生表S。该表包括5个字段:Sno、Sn、Sg、Sb和Dp,其数据类型和精度分别为CHAR(7)、VARCHAR(18)、CHAR(3)、DATE和CHAR(9)。3.4创建和使用数据表第3章定义数据表的约束3.4.3约束是KingbaseES提供的自动保持数据库完整性的一种方法,它通过限制字段中数据、记录中数据和表之间的数据来保证数据的完整性。在KingbaseES中,对于基本表的约束分为列约束和表约束。列约束是对某一个特定列的约束,包含在列定义中,直接跟在该列的其他定义后,用空格分隔,不必指定列名;表约束用于对多个列的约束定义,定义表约束时必须指出要约束的那些列的名称。列约束也可以被写成表约束,列约束只是一种当约束只影响一列时的方便书定义方法。3.4创建和使用数据表第3章完整性约束的基本语法格式约束名:约束不指定名称时,系统会给定一个名称。约束类型:在定义完整性约束时必须指定完整性约束的类型。

[CONSTRAINT<约束名>]<约束类型>NULL/NOTNULLUNIQUEPRIMARYKEYFOREIGNKEY

CHECK3.4创建和使用数据表第3章1.检查约束(CHECK)

一个表中可以定义多个CHECK约束。每个字段只能定义一个CHECK约束。在多个字段上定义的CHECK约束必须为表约束。当执行INSERT、UNDATE语句时,CHECK约束将验证数据。[CONSTRAINT<约束名>]CHECK(<条件>)CHECK约束用来检查字段值所允许的范围在建立CHECK约束时,需要考虑以下几个因素:3.4创建和使用数据表第3章CREATETABLEE(

SnoCHAR(7),

CnoCHAR(3),

GrNUMERIC(4,1)CONSTRAINTGr_ChkCHECK(Gr>=0ANDGr<=100));【例3-6】建立一个选修表E,约束成绩的取值范围为0~100之间。建立E表后,当执行INSERT插入、UNDATE更新操作时,CHECK约束将自动验证数据的正确性,若不满足约束条件,系统则会给出错误信息。3.4创建和使用数据表第3章CREATETABLES(SnoCHAR(7), SnVARCHAR(18), SgCHAR(3), SbDATE, DpCHAR(9),

CONSTRAINTSg_ChkCHECK(Sg=’男’ORSg=’女’));【例3-7】建立一个学生表S,定义表约束Sg_Chk,约束学生的性别只能是男或者女。3.4创建和使用数据表第3章2.非空约束(NOTNULL)[CONSTRAINT<约束名>][NULL|NOTNULL]NULL表示“不知道”、“不确定”或“没有数据”的意思一个非空约束总是被写成一个列约束,指定一个列中不允许有空值3.4创建和使用数据表第3章CREATETABLEC(CnoCHAR(3)CONSTRAINTC_CONSNOTNULL, CnVARCHAR(21), CrNUMERIC(3,1), CpCHAR(3));【例3-8】建立一个课程表C,对课程号进行NOTNULL约束。其中,C_CONS为用户指定的约束名称。在NOTNULL的约束下,针对C表执行插入(INSERT)、更新(UNDATE)操作时,如果Cno为空,系统会自动提出错误信息。对于无NOTNULL约束的其他属性列,如果字段值为空,默认为NULL。代码中也可以不加约束名称C_CONS,直接写约束类型。在这种情况下,系统会随机分配一个约束标志名。3.4创建和使用数据表第3章3.唯一约束(UNIQUE)使用UNIQUE约束的字段允许为NULL值。一个表中可以允许有多个UNIQUE约束。可以把UNIQUE约束定义在多个字段上。UNIQUE约束用于强制在指定字段上创建一个UNIQUE索引,缺省为非聚集索引。指明基本表在某一列或多个列的组合上的取值必须唯一在建立UNIQUE约束时,需要考虑以下几个因素:3.4创建和使用数据表第3章[CONSTRAINT<约束名>]UNIQUE[CONSTRAINT<约束名>]UNIQUE(<列名>[{,<列名>}])UNIQUE用于定义表约束UNIQUE用于定义列约束3.4创建和使用数据表第3章CREATETABLES( SnoCHAR(7), SnVARCHAR(18), SgCHAR(3), SbDATE, DpCHAR(9),

CONSTRAINTS_UNIQUNIQUE(Sn,Sg));【例3-9】建立一个学生表S,定义表约束S_UNIQ,设置Sn+Sg为唯一键,约束同一性别的学生没有重名。3.4创建和使用数据表第3章4.主键约束(PRIMARYKEY)主键约束用于表示表中一个列或者一组列具有唯一标识符且非空。增加一个主键将自动在主键中列出的列或列组上创建一个唯一索引。PRIMARYKEY与UNIQUE约束类似,但它们之间存在着很大的差别:一个表最多只能有一个PRIMARYKEY约束,但可以有任意数量的UNIQUE约束。对于指定为PRIMARYKEY的一个列或多个列的组合,其中任何一个列都不能出现NULL值,而对于UNIQUE所约束的唯一键,则允许为NULL。不能为同一个列或一组列,既定义UNIQUE约束,又定义PRIMARYKEY约束。3.4创建和使用数据表第3章CONSTRAINT<约束名>PRIMARYKEY[CONSTRAINT<约束名>]PRIMARYKEY(<列名>[{,<列名>}])用于表约束的语法格式如下:PRIMARYKEY既可用于列约束,也可用于表约束。用于列约束的语法格式如下:3.4创建和使用数据表第3章CREATETABLEC(CnoCHAR(3)CONSTRAINTC_PrimPRIMARYKEY, CnVARCHAR(21), CrNUMERIC(3,1), CpCHAR(3));【例3-10】建立一个课程表C,定义课程号为C的主键,建立另外一个教师表T,定义工号为T的主键。CREATETABLET(TnoCHAR(5)CONSTRAINTT_PrimPRIMARYKEY, TnVARCHAR(18), TgCHAR(3), TpVARCHAR(15), TsMONEY, TbDATE, DpCHAR(9));3.4创建和使用数据表第3章CREATETABLEE(SnoCHAR(7),CnoCHAR(3),GrNUMERIC(4,1),CONSTRAINTE_PrimPRIMARYKEY(Sno,Cno));【例3-11】建立一个选修表E,定义Sno+Cno为E的主键。3.4创建和使用数据表第3章5.外键约束(FOREIGNKEY)[CONSTRAINT<约束名>]FOREIGNKEYREFERENCES<主表名>(<列名>[{,<列名>}])外部键从表主键

主表

引用

3.4创建和使用数据表第3章CREATETABLEL(CnoCHAR(3),TnoCHAR(5),CONSTRAINTL_PrimPRIMARYKEY(Cno,Tno),CONSTRAINTC_ForeFOREIGNKEY(Cno)REFERENCESC(Cno),CONSTRAINTT_ForeFOREIGNKEY(Tno)REFERENCEST(Tno));【例3-12】建立一个授课表L。3.4创建和使用数据表第3章CREATETABLES_6( SnoCHAR(7)PRIMARYKEY, SnVARCHAR(18)NOTNULL, SgCHAR(3)DEFAULT‘男’, SbDATECHECK(EXTRACT(MONTHFROMSb)=6), DpCHAR(9)NOTNULL,CONSTRAINTS_UNIQUNIQUE(Sn,Sg));【例3-13】创建一个包含完整性定义的学生表S_6。3.4创建和使用数据表第3章修改数据表3.4.41.通过SQL语句修改数据表ALTERTABLE<表名>ADD

<列定义>|<完整性约束定义>ALTERTABLE<表名>ALTERCOLUMN<列名><数据类型>[NULL|NOTNULL]ALTERTABLE<表名>DROPCONSTRAINT<约束名>3.4创建和使用数据表第3章ALTERTABLE<表名>RENAMETO<新表名>重命名属性列:ALTERTABLE<表名>RENAMECOLUMN<列名>TO<新列名>重命名约束:ALTERTABLE<表名>RENAMECONSTRAINT<约束名>TO<新约束名>重命名基本表:3.4创建和使用数据表第3章ALTERTABLETADDAddressVARCHAR(30)【例3-14】在教师表T中增加一个住址列。ALTERTABLETADDCONSTRAINTTb_ChkCHECK(EXTRACT(YEARFROMCURRENT_DATE)-(EXTRACT(YEARFROMTb))BETWEEN25AND65)【例3-15】在教师表T中增加完整性约束定义,指定教师年龄在25~65之间。3.4创建和使用数据表第3章ALTERTABLESALTERCOLUMNSgSETDEFAULT‘女’,【例3-16】把学生表S中的Sg列的默认值改为“女”。ALTERTABLESDROPCONSTRAINTC_Fore【例3-17】删除授课表L中的外键约束C_Fore。ALTERTABLETDROPCOLUMNDp【例3-18】删除教师表T中的所在系一列。3.4创建和使用数据表第3章ALTERTABLECRENAMETOC_1;ALTERTABLEC_1RENAMECOLUMNCrTOCr_1;ALTERTABLEC_1RENAMECONSTRAINTC_PrimTOC_1_Prim【例3-19】将课程表C重命名为C_1,将其中学分列重命名为Cr_1,将其中主键约束C_Prim重命名为C_1_Prim。第3章2.通过“数据库对象管理工具”修改数据表的结构(1)在数据库管理工具中的“数据库导航”栏下展开“数据库”节点,选择所需修改表所在的数据库。(2)依次点击模式→PUBLIC→要修改的数据表,右击数据表,从快捷菜单中选择“编辑表”命令,则会弹出图3-7所示的编辑表对话框,可以在对话框中修改列的名称、数据类型等属性,新增或删除列,也可以指定表的主关键字约束。(3)修改完毕,单击确定按钮,存盘退出。3.4创建和使用数据表3.4创建和使用数据表第3章查看数据表3.4.5查看数据表中的数据

右击要操作的表,从快捷菜单中选择“查看表数据”,则会显示表中的所有数据。查看数据表的属性

在KingbaseESV8R3中,没有提供专门查看数据表属性功能,可借助“编辑表”命令完成,即在“数据库对象管理工具”中,右击要查看的表,从快捷菜单中选择“编辑表”命令,在弹出的对话框中依次点击“基本属性”、“约束”、“外键”、“索引”、“触发器”、“权限”等选项卡实现查看。3.4创建和使用数据库第3章删除数据表3.4.61.通过SQL语句删除数据表2.通过“数据库对象管理工具”删除数据表在数据库对象管理工具中,右击要删除的表,从快捷菜单中选择“删除”命令,在弹出的“删除对象”对话框中点击“是”按钮实现删除。DROPTABLE<表名>3.4创建和使用数据表第3章DROPTABLES【例3-20】删除学生表S。注意:只能删除自己建立的表,不能删除其他用户所建的表。3.5数据操纵第3章添加数据3.5.11.通过“数据库对象管理工具”添加数据在数据库对象管理工具中,可实现少量数据的添加。右击需要添加数据的表,在弹出的快捷菜单中选择“查看表数据”。打开“数据”窗格,在下面的工具栏中,单击“”后会自动在选中行上出现空白行,用户即可在其中输入一条记录。添加完毕后,需要单击“保存”按钮即可。第3章3.5数据操纵2.用SQL命令添加数据INSERTINTO<表名>[(<列名1>[,<列名2>…])]VALUES(<常量1>[,<常量2>…])添加单个元组。

添加一行新记录的语法格式为:<表名>指要添加新元组的表,<列名>是可选项,指定待添加数据的列,VALUES子句指定添加到属性列上的具体值,将常量1、常量2等为属性列1、属性列2等赋值。第3章3.5数据操纵INSERTINTOS(Sno,Sn,Sg,Sb,Dp)VALUES('2501101','李建军','男','2000-10-20','计算机')【例3-21】在S表中添加一条学生记录(学号:2501101、姓名:李建军、性别:男、出生日期:2000-10-20、所在系:计算机)。注意:必须用逗号将各数据分开,字符型数据要用单引号括起来。INSERTINTOSVALUES('2501101','李建军','男','2000-10-20','计算机')如果INTO子句中没有指定列名,那么新添加的记录必须在每个属性列上均有值,且VALUES子句中值的排列顺序要和表中各属性列的排列顺序一致。第3章3.5数据操纵INSERTINTOE(Cno,Cn,Cr)VALUES('101','高等数学','5')【例3-22】在C表中添加一条课程记录('101','高等数学','5')对一条记录的部分数据赋值时,将按照INTO子句中指定列名的顺序添加到表中,对于未赋值的记录,这些值将赋NULL值,如本例的Cp即赋NULL值。但在表定义时有NOTNULL约束的属性列不能取NULL值,插入时必须给其赋值。INSERTINTOEVALUES('2501101','302','78'),('2501101','605','82'),('2501101','912'),【例3-23】向E表中同时添加三条选课记录。注意:必须用逗号将各添加元组分开。本例中每个元组中值的排列顺序要和表中各属性列的排列顺序一致,最后一个元组的Gr列未赋值,则会插入NULL值。3.5数据操纵第3章修改数据3.5.21.通过“数据库对象管理工具”修改数据在数据库对象管理工具中,可实现少量数据的添加。打开“查看表数据”选项,双击要修改的记录,向其中输入新数据即可,这样原数据就能被新数据覆盖。修改完毕后,需要单击“保存”按钮并在该表处右击选择“刷新”功能。2.用SQL命令修改数据修改数据使用UPDATE命令对表中的一行或多行记录的某些列值进行修改,其语法格式为:UPDATE<表名>SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>]第3章3.5数据操纵UPDATESSETDp='电子'WHERETn='王丽丽'【例3-24】在学生表中把王丽丽同学转到电子系。UPDATETSETTs=Ts+500【例3-25】将所有教师的工资增加500。UPDATETSETTs=1.2*TsWHERE(Tp='讲师')AND(Ts<=3500)【例3-26】把教师表中工资小于或等于3500元的讲师工资提高20%。3.5数据操纵第3章删除数据3.5.31.通过“数据库对象管理工具”删除数据打开待删除记录的数据表,单击鼠标右键选择“查看表数据”,在弹出的表数据窗格中,选中一条或多条记录,在下面的工具栏中,点击“”,单击“保存”按钮即可。2.用SQL命令删除数据使用SQL的DELETE命令可以删除表中的一行或多行记录,其语法格式为:DELETE FROM<表名> [WHERE<条件>]第3章3.5数据操纵DELETEFROMTWHERETn='赵芳芳'【例3-27】删除赵芳芳老师的记录。第3章3.5数据操纵DELETEFROMTWHERETn='赵芳芳'【例3-27】删除赵芳芳老师的记录。DELETEFROML【例3-28】删除所有教师的授课记录。该语句执行后,会删除L表中的所有数据,但是表定义仍存在数据字典中。3.6数据查询第3章SELECT命令的格式与基本使用3.6.1SELECT[ALL|DISTINCT]〈列名〉[AS别名1][{,〈列名〉[AS别名2]}]FROM〈表名〉[[AS]表别名][WHERE〈检索条件〉][GROUP

BY<列名1>[HAVING<条件表达式>]][ORDERBY<列名2>[ASC|DESC]]投影选取第3章3.6数据查询SELECT子句:指定要显示的属性列FROM子句:指定查询对象(基本表或视图)WHERE子句:指定查询条件GROUPBY子句:对查询结果按指定列的值分组,该属性列值相等的元组为一个组。通常会在每组中作用聚集函数。HAVING短语:只有满足指定条件的组才予以输出ORDERBY子句:对查询结果表按指定列值的升序或降序排序第3章3.6数据查询在SELECT查询语句中,各子句之间的顺序非常重要。虽然有些可选子句可以省略,但一旦使用这些子句就必须按照适当的顺序来安排它们的前后。如果在同一个SELECT查询语句中用到了多个子句,则正确的子句排列顺序应如下表所示,按序号由低到高进行编写。序号子句关键词子句功能1SELECT从指定表中取出指定列的数据2INTO将查询结果存储到新表中3FROM指定要查询操作的表或视图4WHERE用来限定选择查询的条件5GROUPBY对结果集进行分组,常与聚合函数一起使用6HAVING用来限定分组的查询条件7ORDERBY用来对结果集进行排序第3章3.6数据查询第一步,首先执行FROM子句。第二步,如果有WHERE子句,实现基于指定的条件对记录行进行筛选。第三步,如果有GROUPBY子句,它将把数据划为多个分组。第四步,如果有HAVING子句,它将筛选分组。第五步,将SELECT子句作用于结果表。第六步,如果有ORDERBY子句,则按指定的排序规则对结果进行排序。第七步,如果有INTO子句,则将查询结果存储到用户指定的新表中。3.6数据查询第3章投影查询3.6.2投影查询是指只包含“SELECT…FROM”的查询,使用SELECT子句指定表中的某些列,各列名之间要以逗号分隔开。SELECTSno,Sn,SbFROMS;【例3-29】查询全体学生的学号、姓名和出生日期。在KingbaseES的数据库对象管理工具菜单栏下方的快捷工具中,单击“新建查询”,会弹出新建查询语句的编辑窗口。在窗口中输入上述查询语句,单击“◥”执行第3章3.6数据查询SELECT*FROMC;【例3-30】查询全部的课程信息。用“*”表示表中的所有列,按照用户创建表时声明列的顺序来显示所有的列。SELECTDISTINCTDpFROMS;【例3-31】查询学生表的所在系名称,滤掉重复行。DISTINCT的作用是使查询结果中重复的行被去掉。第3章3.6数据查询SELECTTnoAS工号,TnAS姓名,TpAS职称FROMT;【例3-32】查询教师表中所有教师的工号、姓名和职称,结果中各列的标题分别指定为汉字的工号、姓名和职称。SELECTTno工号,Tn姓名,Tp职称FROMT;或注意:列标题别名只在定义的语句中有效,即只是显示标题,对原表中列名没有任何影响,并且别名不能被用在该查询的剩余部分。3.6数据查询第3章条件查询3.6.3如果想要查询表中满足某些条件的行时,则需要使用WHERE子句指定查询条件。WHERE子句中的条件通常由下面三部分来描述:列名、比较运算符或逻辑运算符列名、常数查询条件谓词比较大小=,>,<,>=,<=,!=,<>,!<,!>确定范围BETWEENAND,NOTBETWEENAND确定集合IN,NOTIN字符匹配LIKE(%,_),NOTLIKE(%,_)空值ISNULL,ISNOTNULL多重条件AND,OR,NOT常用的比较运算符第3章3.6数据查询SELECTSno,Cno,GrFROMEWHEREGr>80;【例3-33】查询选修表中课程成绩高于80分的学生的学号、课程号和成绩。SELECT*FROMSWHERE(Sg='女')AND(Dp='计算机');【例3-34】查询学生表中所有计算机系的女生的信息。查询结果与关系代数中的选取操作σGr>80(E)的结果相同。(1)比较大小(2)多重条件查询在WHERE子句中可以使用AND、OR和NOT运算符把若干个搜索条件合并起来,组成复杂的复合搜索条件,其优先级由高到低为:NOT、AND、OR,用户可以使用括号改变优先级。第3章3.6数据查询SELECT*FROMEWHEREGrBETWEEN80AND90;【例3-35】查询选修表中成绩在80~90之间的学生的学号、课程号和成绩。SELECT*FROMEWHEREGr>=80ANDGr<=90;等价于:(3)确定范围使用BETWEEN关键字可以更方便地限制查询数据的范围。第3章3.6数据查询SELECT*FROMSWHEREEXTRACT(MONTHFROMSb)IN(6,7);【例3-37】查询在6、7月份出生的学生信息。SELECT*FROMTWHERETpNOTIN('教授','副教授');【例3-38】查询职称不是教授、副教授的教师信息。(4)确定集合同BETWEEN关键字一样,IN的引入也是为了更方便地限制检索数据的范围第3章3.6数据查询在一些情况下,用户不知道完全精确的值,这时可以使用LIKE或NOTLIKE进行部分匹配查询。LIKE关键字搜索与指定字符串进行匹配。(5)模糊查询通配符含义示例%代表0个或多个字符'ab%',返回以'ab'开始的任意字符串_(下划线)代表一个字符'a_b',返回'a'与'b'之间有一个任意字符的字符串第3章3.6数据查询SELECTSno,SnFROMSWHERESnLIKE'_建%';【例3-39】查询姓名中第二个汉字是“建”的学号和姓名。SELECTSno,SnFROMSWHERESnNOTLIKE'赵%';【例3-40】查询所有不姓赵的学号和姓名。第3章3.6数据查询查询空值是指查询那些没有输入任何值的字段。空值不同于零和空格,因此成绩为空值和成绩是0分完全不同。在WHERE子句中不能使用比较运算符对空值进行判断,只能用空值表达式来判断某个列值是否为空值。(5)空值查询SELECTSno,CnoFROMEWHEREGrISNULL;【例3-41】查询没有考试成绩的学生的学号和相应的课程号。3.6数据查询第3章常用库函数及统计汇总查询3.6.4为了进一步方便用户,KingbaseES还提供了一系列统计函数用对查询得到的数据集合进行汇总或求平均值等各种运算,常用的库函数及其功能如下表:函数名称功能AVG([DISTINCT|ALL]<列名>)计算某列值的平均值(此列必须是数值型)SUM([DISTINCT|ALL]<列名>)计算某列值的总和(此列必须是数值型)MAX([DISTINCT|ALL]<列名>)求某列值中的最大值MIN([DISTINCT|ALL]<列名>)求某列值中的最小值COUNT([DISTINCT|ALL]<列名>)计算某列值个数COUNT(*)计算记录个数其中,ALL为默认值,表示不取消重复值,如果指定DISTINCT短语,则表示在计算时要取消指定列中的重复值。第3章3.6数据查询SELECTSUM(Gr)ASSumScore,AVG(Gr)ASAvgScoreFROMEWHERE(Cno='302’);【例3-42】求选修302号课程的最高分和平均分。上述查询语句中AS后面的SumScore和AvgScore是别名,别名会显示在查询结果中,以便使用者能清楚地知道查询内容所表示的含义。第3章3.6数据查询SELECTCOUNT(Tno)FROMTWHEREDp='计算机';【例3-43】求计算机系教师的总数。SELECTCOUNT(*)FROMTWHEREDp='计算机’;或本例中COUNT(*)用来统计元组的个数,不消除重复行。第3章3.6数据查询SELECTCOUNT(DISTINCTDp)ASTotalDeptFROMT;【例3-44】求学校中共有多少个系。SELECTCOUNT(Gr)FROME;【例3-45】统计有成绩同学的人数本例中COUNT函数不计算没有成绩(空值)的学生,但会计算成绩是0的学生。本例中DISTINCT关键字消去“Dept”的重复行,从而计算出学校的系总数。3.6数据查询第3章分组查询3.6.5GROUPBY子句可以实现分组查询,它将查询结果按某一列或多列的值分组,值相等的为一组。使用GROUPBY的目的是细化统计函数的作用对象,如果未对查询结果分组,统计函数将作用于整个查询结果。第3章3.6数据查询SELECTSgAS性别,COUNT(*)AS人数FROMSGROUPBYSg;【例3-46】查询学生表中男生和女生的人数。本例中,GROUPBY子句按Sg的值分组,所有具有相同Sg的元组为一组,之后对每一组使用函数COUNT进行计算,统计出不同性别的学生人数。当完成数据结果的查询和统计后,可以使用HAVING关键字来对查询和统计结果进行进一步的筛选。(1)简单分组第3章3.6数据查询SELECTTnoAS工号,COUNT(*)AS门数FROMLGROUPBYTnoHAVING(COUNT(*)>=2);【例3-47】查询教授两门以上(含两门)课程的教师的工号和授课门数。本例中,GROUPBY子句分组后又由HAVING子句指定了筛选条件,最后只输出满足COUNT(*)>=2的组。第3章3.6数据查询当在一个SQL查询中同时使用WHERE子句,GROUPBY

子句和HAVING子句时,其顺序是WHERE-GROUPBY-HAVING。WHERE与HAVING子句的根本区别在于作用对象不同。WHERE子句作用于基本表或视图,从中选择满足条件的元组;HAVING子句作用于组,选择满足条件的组,必须用于GROUPBY子句之后,但GROUPBY子句可以没有HAVING子句。注意:GROUPBY子句的作用对象是查询的中间结果表分组方法:按指定的一列或多列值分组,值相等的为一组使用GROUPBY子句后,SELECT子句的列名列表中只能出现分组属性和聚合函数。第3章3.6数据查询SELECTDpAS系别,SgAS性别,COUNT(*)AS人数FROMSGROUPBYCUBE(Dp,Sg);【例3-48】查询学生表中,各专业男生人数、女生人数,各个专业的学生人数,以及所有学生总人数。SELECTDpAS系别,SgAS性别,COUNT(*)AS人数FROMSGROUPBYROLLUP(Dp,Sg);或:(2)分组集分组在GROUPBY子句中,可通过使用CUBE或者ROLLUP定义分组集。3.6数据查询第3章查询结果的排序3.6.6ORDERBY子句用于对查询结果进行排序,ORDERBY子句必须出现在其他子句之后。排序方式可以指定,DESC为降序,ASC为升序,缺省时为升序。在KingbaseES中,当排序列含空值时,ASC使排序列为空值的元组最后显示,DESC使排序列为空值的元组最先显示。SELECTSno,GrFROMEWHERE(Cno='302’)ORDERBYGrDESC;【例3-49】查询选修302的学生学号和成绩,并按成绩降序排列。第3章3.6数据查询SELECTSno,Cno,GrFROMEWHERECnoIN('302','605','810','912')ORDERBYSno,GrDESC;【例3-50】查询选修302,605,810或912课程的学号、课程号和成绩,查询结果按学号升序排列,学号相同再按成绩降序排列。3.6数据查询第3章数据表连接及连接查询3.6.7当用户需要组合、提炼多个表中的数据为自己所用时,还需要使用连接查询。连接查询同时涉及两个以上的表,是关系数据库中最主要的查询,包括:内连接查询外连接查询交叉连接自连接查询。第3章3.6数据查询内连接是一种常用的连接方式,是把两个表中的数据连接生成第三个表,第三个表中仅包含那些满足连接条件的数据行。内连接的语法格式如下:(1)内连接查询SELECT<列名1>[,列名2,…]FROM表名1INNERJOIN表名2ON连接条件SELECT<列名1>[,列名2,…]FROM表名1,表名2WHERE连接条件连接条件语法格式如下:[<表名1.>]<列名1><比较运算符>[<表名2.>]<列名2>其中比较运算符主要有=、>、<、>=、<=、!=(或<>)等。当比较运算符为“=”时,称为等值连接,使用其他运算符称为非等值连接。第3章3.6数据查询SELECTSn,Cno,GrFROMS,EWHERES.Sno=E.Sno;【例3-51】查询所有选课学生的姓名、课程号及成绩。SELECTSn,Cno,GrFROMSINNERJOINEONS.Sno=E.Sno;或S.Sno=E.Sno为连接条件,Sno称为连接字段。通过将S表中的Sno和E表中的Sno相等的行进行连接,接着在Sn、Cno、Gr列上进行投影。第3章3.6数据查询SELECTC.Cno,Cn,AVG(Gr)FROMC,EWHEREC.Cno=E.CnoGROUPBYC.CNo【例3-52】查询每门课程的课程号、课程名和平均分。SELECTC.Cno,Cn,AVG(Gr)FROMCINNERJOINEONC.Cno=E.CnoINNERJOINSONE.Sno=S.SnoANDDP=’计算机’GROUPBYC.CNo【例3-53】查询计算机系学生选修每门课程的课程号、课程名和平均分。本例涉及三个表,WHERE子句有两个连接条件中,除了连接条件外,WHERE子句中还有一个查询条件“DP=’计算机’”,选取“计算机”系学生的行。在本例的SELECT子句和WHERE子句中,属性名前都加上了表名前缀。这是因为两个表中存在列名相同的属性列,必须用表名前缀来确切说明所指列属于哪个表,以避免混淆。第3章3.6数据查询在上面的连接操作中,不满足连接条件的元组不能作为查询结果输出。而在外连接中可以只限制一个表,而对另外一个表不加限制(即所有的行都出现在结果集中)。(2)外连接查询

符合连接条件的数据将直接返回到结果集中,对那些不符合连接条件的列,将被填上NULL值后再返回到结果集中。外部连接分为左外部连接和右外部连接两种。以主表所在的方向区分外部连接,主表在左边,则称为左外部连接;主表在右边,则称为右外部连接。第3章3.6数据查询SELECTSn,Cno,GrFROMSLEFTOUTERJOINEONS.SNo=E.SNo;【例3-54】查询所有学生的姓名、选课号及成绩(没有选课的同学的选课信息显示为空)。查询结果如图所示,没有选课的李建军同学也显示在结果集中,但该同学的选课信息记录显示为NULL第3章3.6数据查询SELECTS.Sno,Sn,Cno,CnFROMSCROSSJOINC;【例3-55】查询所有学生可能的选课情况。(3)交叉查询交叉连接即进行笛卡尔乘积,用于将一个表的每一个记录和另一表的每个记录匹配成新的数据行,返回两个表的成绩。在检索结果集中,包含所连接的两个表中所有行的全部组合。第3章3.6数据查询SELECTX.Cno,X.CpAS直接先修课,Y.CpAS间接先修课FROMCASX,CASYWHEREX.Cp=Y.Cno;【例3-56】查询每一门课的直接先修课和间接先修课(即先修课的先修课)。(3)自连接查询连接操作不仅可以在不同的表上进行,而且可以在同一张表内进行自身连接。自连接可以看作一张表的两个副本之间的连接。在自连接中,必须为表指定两个别名,使其在逻辑上成为两张表。SELECTX.Cno,X.CpAS直接先修课,Y.CpAS间接先修课FROMCASXINNERJOINCASYONX.Cp=Y.Cno;或:第3章3.6数据查询SELECTX.Cno,X.CpAS直接先修课,Y.CpAS间接先修课FROMCASXLEFTOUTERJOINCASYONX.Cp=Y.Cno;上面的写法中,由于只有’605’、’708’、’810’这三门课程是有直接先修课的,所以在连接结果中有这三门课程的信息,而另外两门课程由于没有直接先修课,所以无法完成自连接。如果使用如下的查询语句,可显示完整的课程信息,包括没有先修课的课程信息。第3章3.7子查询不相关子查询3.7.1子查询的查询条件不依赖于父查询

查询过程:由里向外逐层处理每个子查询在上一级查询处理之前先求解;子查询的结果用于建立父查询的查找条件。在使用子查询时,子查

温馨提示

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

评论

0/150

提交评论