数据基础与应用 9_第1页
数据基础与应用 9_第2页
数据基础与应用 9_第3页
数据基础与应用 9_第4页
数据基础与应用 9_第5页
已阅读5页,还剩298页未读, 继续免费阅读

下载本文档

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

文档简介

SQL数据库语言第6章2026数据库原理与应用教材第104—130页SQL贯穿数据库的“定义—操作—查询”本章导入教材第104页002/303SQL是用于操作和管理关系型数据库的标准语言。本章依次学习数据定义语言(DDL)、数据操纵语言(DML)和数据查询语言(DQL),并始终使用教材外卖点餐系统实例。本章学习目标:先会定义,再会操作本章导入教材第104页003/303使用CREATE、ALTER、DROP完成数据库、表和索引的定义与维护。使用INSERT、DELETE、UPDATE完成数据插入、删除和修改。本章学习目标:从单表走向复杂查询本章导入教材第104页004/303使用SELECT完成投影、选择、排序、分组和条件筛选。掌握连接查询、嵌套查询及COUNT、MAX、MIN、AVG、SUM聚合函数。本章内容地图本章导入教材第104页005/3036.1数据定义语言(DDL)6.2数据操纵语言(DML)6.3数据查询语言(DQL)实验2—46.1数据定义语言(DDL)6.1数据定义语言(DDL)教材第105页006/3036.1数据定义语言(DDL)6.1.1创建与删除数据库6.1.2创建、修改与删除表6.1.3索引的建立与删除6.1.1创建与删除数据库6.1.1创建与删除数据库教材第105—106页007/3036.1.1创建与删除数据库CREATEDATABASE字符集与排序规则教材例6-1DROPDATABASE教材说明6.1.1创建与删除数据库教材第105页008/303数据库的建立是SQL语言学习的基础,也是最重要的一步。SQL用于创建数据库的结构为:CREATE语法6.1.1创建与删除数据库教材第105页009/303教材语句CREATEDATABASE[IFNOTEXISTS]<数据库名>[CHARACTERSET字符集][COLLATE排序规则];教材说明6.1.1创建与删除数据库教材第105页010/303如果数据库已经存在,执行CREATEDATABASE将导致错误。为了避免这种情况,你可以在CREATEDATABASE语句中添加IFNOTEXISTS子句。创建数据库的时候可以指定其字符集。表6-1列出了主要的字符集。表6-1常用字符集6.1.1创建与删除数据库教材第105—106页011/303字符集特点utf8广泛使用,支持大多数语言字符,包括中文、日文、韩文等,最多3字节编码一个字符,能表示基本多语言平面(BMP)中的字符。utf8mb4utf8的超集,支持4字节编码,能存储更多Unicode字符,包括表情符号等。gbk适用于简体中文环境,能表示大多数中文字符,但部分罕见字可能无法支持。latin1也称为ISO-8859-1,单字节字符集,主要用于英文和西欧语言。教材说明6.1.1创建与删除数据库教材第105页012/303创建数据库的同时也可以指定该数据中的排序规则。表6-2列出了主要的排序规则。表6-2常用排序规则(1/3)6.1.1创建与删除数据库教材第105—106页013/303排序规则特点介绍具体应用场景需求utf8_general_ci不区分大小写,对于重音和变音字符的比较不太严格。适用于大多数一般用途的文本比较,但可能不太适合对语言特定规则要求严格的场景。一般的博客网页、小型论坛等对多语言支持要求不高且不太注重大小写区分的网页应用。快速比较,不严格区分大小写。utf8_unicode_ci基于Unicode标准进行比较,对于多种语言的支持更全面和准确,但相对性能可能略低于utf8_general_ci。国际化的电商平台、多语言社交应用等;对多语言支持要求高的网页或应用。对性能要求不高。utf8_bin基于字符的二进制值进行精确比较,区分大小写,适用于需要精确匹配的场景,例如密码或其他需要严格区分大小写和字节值的情况。用户登录系统、安全管理类应用等密码需要严格区分大小写的网页或应用。严格区分大小写和字节值的精确比较。utf8mb4_general_ci类似于utf8_general_ci,但适用于utf8mb4字符集,对4字节字符的处理更完善。不区分大小写,对重音和变音字符比较宽松。使用较多特殊字符的内容管理系统、对4字节字符有一定需求且对大小写不敏感的网页应用。处理4字节字符,不严格区分大小写。utf8mb4_unicode_ci类似于utf8_unicode_ci,适用于utf8mb4字符集,基于更全面的Unicode标准进行比较。大型国际化的新闻媒体平台、对多语言和4字节字符支持要求高的网页或应用。准确的多语言比较,处理4字节字符。表6-2常用排序规则(2/3)6.1.1创建与删除数据库教材第106页014/303排序规则特点介绍具体应用场景需求utf8mb4_bin与utf8_bin类似,适用于utf8mb4字符集,基于二进制值精确比较,区分大小写。对utf8mb4字符集下数据要求精确大小写区分的专业数据库管理应用等。严格区分大小写和字节值,针对utf8mb4字符集。latin1_swedish_ci适用于latin1字符集,是一种常见的不区分大小写的排序规则,遵循瑞典的排序习惯。面向瑞典市场的小型电商网页、瑞典语学习应用等遵循瑞典排序习惯且对大小写不敏感的网页或应用。不严格区分大小写,符合瑞典排序习惯。latin1_german1_ci适用于latin1字符集,按照德国的排序习惯,不区分大小写。针对德国市场的资讯类网页、德国文化交流应用等遵循德国排序习惯且对大小写不敏感的网页或应用。不严格区分大小写,符合德国排序习惯。latin1_bin适用于latin1字符集,基于二进制值精确比较,区分大小写。对latin1字符集下数据要求严格大小写区分的特定行业软件等。严格区分大小写和字节值,针对latin1字符集。gbk_chinese_ci适用于gbk字符集,在中文处理上遵循一定的排序规则,不区分大小写。国内的小型企业官网、中文社区论坛等对中文处理要求不高且不区分大小写的网页应用。中文处理,不严格区分大小写。表6-2常用排序规则(3/3)6.1.1创建与删除数据库教材第106页015/303排序规则特点介绍具体应用场景需求gbk_bin适用于gbk字符集,基于二进制值精确比较,区分大小写。对gbk字符集下数据要求严格大小写区分的特定中文数据库管理应用等。严格区分大小写和字节值,针对gbk字符集。字符集与排序规则6.1.1创建与删除数据库教材第106页016/303(4)字符集与排序规则之间在创建数据库的时候需要考虑兼容问题。表6-3列出了常用的规则。表6-3字符集与排序规则6.1.1创建与删除数据库教材第106页017/303字符集常见排序规则utf8utf8_general_ci、utf8_unicode_ci、utf8_binutf8mb4utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_binlatin1latin1_swedish_ci、latin1_german1_ci、latin1_bingbkgbk_chinese_ci、gbk_bin教材例6-16.1.1创建与删除数据库教材第106页018/303【例6-1】创建一个外卖系统的数据库,数据库名为“takeaway”,字符集为“utf8mb4”,排序规则为“utf8mb4_general_ci”。教材例6-1:SQL6.1.1创建与删除数据库教材第105—106页019/303教材语句CREATEDATABASEtakeawayCHARACTERSET'utf8mb4'COLLATE'utf8mb4_general_ci';教材说明6.1.1创建与删除数据库教材第106页020/303上述SQL语句执行后,将创建一个新的空的外卖系统(“takeaway”)数据库。使用普通用户登录MySQL服务器,可能需要特定的权限来创建或者删除MySQL数据库,所以这边需要使用root用户登录,root用户拥有最高权限。在删除数据库过程中,务必要十分谨慎,因为在执行删除命令后,所有数据将会消失。SQL用于删除数据库的结构为:DROP语法6.1.1创建与删除数据库教材第107页021/303教材语句DROPDATABASE[IFEXISTS]<数据库名>;教材说明6.1.1创建与删除数据库教材第107页022/303说明:IFEXISTS是一个可选的子句,表示如果数据库存在才执行删除操作,避免因为数据库不存在而引发错误。在执行删除数据库操作前,请确保你确实想要删除数据库及其所有数据,因为该操作是不可逆的。为了避免误操作,通常建议在执行删除之前备份数据库。6.1.2创建、修改与删除表6.1.2创建、修改与删除表教材第107页023/3036.1.2创建、修改与删除表CREATETABLE主键/外键/DEFAULT/CHECK参照完整性ALTER/DROPTABLE教材说明6.1.2创建、修改与删除表教材第107页024/303建立数据库最重要的一步就是定义基本表的结构。SQL用于创建基本表的语法结构为:CREATE语法6.1.2创建、修改与删除表教材第107页025/303教材语句CREATETABLE<表名>(<列名><数据类型>[列级完整性约束条件][,<列名><数据类型>[列级完整性约束条件]…][<表级完整性约束条件>]);教材说明6.1.2创建、修改与删除表教材第107页026/303表名是所要定义的基本表的名字,表可以由一个或多个属性(列)组成。(2)定义表的各个列时需要指明其数据类型及长度。表6-4列出了主要数据类型表6-4主要数据类型6.1.2创建、修改与删除表教材第107页027/303类型数据类型举例及缩写说明整数类型INT(integer),如:123存储整数值小数类型DECIMAL(decimal),如:12.34存储定点小数字符串类型VARCHAR(varchar),如:'abc'存储可变长度字符串日期时间类型DATETIME(datetime),如:'2024-09-0210:03:44'存储日期和时间布尔类型BOOLEAN(boolean)存储布尔值(TRUE/FALSE)完整性约束的层次与作用6.1.2创建、修改与删除表教材第107页028/303(3)完整性约束条件。关系完整性约束包括实体完整性、参照完整性和用户定义完整性。这三种完整性约束条件都可以在表的定义中给出。其中,实体完整性定义表的主关键字(PrimaryKey),参照完整性定义外关键字(ForeignKey),用户定义完整性根据具体应用对关系模式提出要求,主要包括对数据类型、数据格式、取值范围、空值约束等的定义。完整性约束的层次与作用6.1.2创建、修改与删除表教材第107页029/303完整性约束,又可分为列完整性、元组完整性和表级完整性三个级别。在关系模式的定义中,最常定义的是列完整性约束和表级完整性约束。用户定义的完整性规则属于列级完整性约束,而实体完整性和参照完整性都属于表级完整性约束。由于完整性约束条件也是关系模式定义的一部分,所以下面给出部分完整性约束条件的定义方法。这些完整性约束条件被存入系统的数据字典中,当用户操作表中数据时由DBMS自动检查该操作是否违背这些完整性约束条件。教材例6-26.1.2创建、修改与删除表教材第108页030/303【例6-2】创建一个“商家”表,它由商家编号、密码、商家名称、商家地址、商家介绍、起送费、配送费7个列组成,其中商家编号不能为空,并且值唯一。教材例6-2:SQL6.1.2创建、修改与删除表教材第108—109页031/303教材语句CREATETABLEbusiness(businessIdINTNOTNULL,passwordVARCHAR(20)NOTNULL,businessNameVARCHAR(40)NOTNULL,businessAddressVARCHAR(50),businessExplainVARCHAR(40),starPriceDECIMAL(5,2)DEFAULT0.00,deliveryPriceDECIMAL(5,2)DEFAULT0.00,UNIQUE(businessId));教材说明6.1.2创建、修改与删除表教材第108页032/303上述SQL语句执行后,将建立一个新的空“商家”表。其中,NOTNULL和UNIQUE分别说明商家编号不能取空值和重复的值,该约束等同于主码的约束。一个关系可能有多个候选关键字,但在定义基本表时只能定义一个主关键字。一个关系的主关键字由一个或几个属性构成,在CREATETABLE中声明主关键字的方法如下。教材说明6.1.2创建、修改与删除表教材第108页033/303(1)在列出关系模式的属性时,在属性及其类型后加上保留字PRIMARYKEY,表示该属性是主关键字。(2)在列出关系模式的所有属性后,再附加一个声明:教材说明6.1.2创建、修改与删除表教材第108页034/303PRIMARYKEY(<属性1>[,<属性2>…])说明:如果关键字由多个属性构成,则必须使用第二种方法。主键定义方法一:SQL6.1.2创建、修改与删除表教材第108—109页035/303教材语句CREATETABLEbusiness(businessIdINTPRIMARYKEYNOTNULL,passwordVARCHAR(20)NOTNULL,businessNameVARCHAR(40)NOTNULL,businessAddressVARCHAR(50),businessExplainVARCHAR(40),starPriceDECIMAL(5,2)DEFAULT0.00,deliveryPriceDECIMAL(5,2)DEFAULT0.00,UNIQUE(businessId));主键定义方法二6.1.2创建、修改与删除表教材第107—109页036/303方法二:在所有属性定义之后,使用PRIMARYKEY(...)声明表级主键。主键定义方法二:SQL6.1.2创建、修改与删除表教材第108—109页037/303教材语句CREATETABLEbusiness(businessIdINTNOTNULL,passwordVARCHAR(20)NOTNULL,businessNameVARCHAR(40)NOTNULL,businessAddressVARCHAR(50),businessExplainVARCHAR(40),starPriceDECIMAL(5,2)DEFAULT0.00,deliveryPriceDECIMAL(5,2)DEFAULT0.00,UNIQUE(businessId),PRIMARYKEY(businessId));教材例6-36.1.2创建、修改与删除表教材第109页038/303【例6-3】创建一个“食品“表,它由食品编号、食品名称、食品介绍、食品价格、食品所属商家编号5个列组成,其中食品编号不能为空,并且值唯一。教材例6-3:SQL6.1.2创建、修改与删除表教材第108—109页039/303教材语句CREATETABLEfood(foodIdINTPRIMARYKEYNOTNULL,foodNameVARCHAR(30)NOTNULL,foodExplainVARCHAR(30),foodPriceDECIMAL(5,2)NOTNULL,businessIdINTNOTNULL,UNIQUE(foodId));教材说明6.1.2创建、修改与删除表教材第109页040/303从例6-3可以看出,虽然非空(NOTNULL)约束和唯一(UNIQUE)约束结合在一起的作用等同于主键(PRIMARYKEY)约束,但是,二者是可以重复定义的。同时,虽然主键的声明是可选的,但为每个关系指定一个主键会更好些。教材说明6.1.2创建、修改与删除表教材第109页041/303外部关键字的定义是建立参照完整性的约束,它是关系模式的另一种重要约束。根据参照完整性的概念,在SQL中,有两种方法用于说明一个外部关键字。如果外部关键字只有一个属性,可以在它的属性名和类型后面直接用“REFERENCES”说明它参照了某个表的某些属性(必须是主关键字)。其语法格式是:教材说明6.1.2创建、修改与删除表教材第109页042/303REFERENCES<表名>(<属性>)在CREATETABLE语句的属性列表后面增加一个或几个外部关键字说明,其格式为:教材说明6.1.2创建、修改与删除表教材第109页043/303FOREIGNKEY(<属性1>)REFERENCES<表名>(<属性2>)其中,“属性1”是外部关键字,“属性2”是被参照的属性。教材例6-46.1.2创建、修改与删除表教材第109页044/303【例6-4】创建一个“食品”表,它由食品编号、食品名称、食品介绍、食品价格、食品所属商家编号5个列组成,其中食品编号不能为空,并且值唯一。其中,食品编号为主关键字,同时,按照例6-2中的字段可知,商家编号也是外关键字,参照了商家表中的商家编号。教材例6-4:SQL6.1.2创建、修改与删除表教材第108—110页045/303教材语句CREATETABLEfood(foodIdINTPRIMARYKEYNOTNULL,foodNameVARCHAR(30)NOTNULL,foodExplainVARCHAR(30),foodPriceDECIMAL(5,2)NOTNULL,businessIdINTNOTNULL,CONSTRAINTfk_businessIdFOREIGNKEY(businessId)REFERENCESbusiness(businessId));教材说明6.1.2创建、修改与删除表教材第109页046/303该例中定义了一个外关键字:食品表中的所属商家编号。根据参照完整性规则,食品表中的所属商家编号要么取空值,要么取商家表中的商家编号值。可以在定义属性时增加保留字DEFAULT为表中某列的取值定义一个默认值例如:DEFAULT默认值示例6.1.2创建、修改与删除表教材第108—109页047/303教材语句starPriceDECIMAL(5,2)DEFAULT0.00;deliveryPriceDECIMAL(5,2)DEFAULT0.00;教材例6-56.1.2创建、修改与删除表教材第110页048/303【例6-5】创建一个“商家”表,它由商家编号、密码、商家名称、商家地址、商家介绍、起送费、配送费、点餐分类8个列组成,其中点餐分类只能取值为:1:美食、2:早餐、3:跑腿代购、4:汉堡披萨、5:甜品饮品、6:速食简餐、7:地方小吃、8:米粉面馆、9:包子粥铺、10:炸鸡炸串。教材例6-5:SQL(1/2)6.1.2创建、修改与删除表教材第107—110页049/303教材语句CREATETABLEbusiness(businessIdINTNOTNULL,passwordVARCHAR(20)NOTNULL,businessNameVARCHAR(40)NOTNULL,businessAddressVARCHAR(50),businessExplainVARCHAR(40),教材例6-5:SQL(2/2)6.1.2创建、修改与删除表教材第107—110页050/303教材语句starPriceDECIMAL(5,2)DEFAULT0.00,deliveryPriceDECIMAL(5,2)DEFAULT0.00,oderTpyeIdINTCHECK(oderTpyeIdIN(1,2,3,4,5,6,7,8,9,10)),/*点餐分类属性只能取值为(1,2,3,4,5,6,7,8,9,10)中的一个*/UNIQUE(businessId),PRIMARYKEY(businessId));教材说明6.1.2创建、修改与删除表教材第110页051/303参照完整性将两个表中的相应元组联系起来了。因此,对被参照表和参照表进行更新(增删、改)操作时有可能破坏参照完整性,必须进行检查以保证这两个表的相容性。例如,对表food和business有4种可能破坏参照完整性的情况及违约处理,如表6-5所示。表6-5参照完整性违约处理6.1.2创建、修改与删除表教材第110页052/303被参照表(如business)参照表(如food)违约处理可能破坏参照完整性插人元组拒绝可能破坏参照完整性修改外码值拒绝删除元组可能破坏参照完整性拒绝/级联删除/设置为空值修改主码值可能破坏参照完整性拒绝/级联修改/设置为空值教材说明6.1.2创建、修改与删除表教材第109—111页053/303(1)food表中增加一个元组,该元组的businessId属性值在表business中找不到一个元组,其businessId属性值与之相等。(2)修改food表中的一个元组,修改后该元组businessId属性值在表business中找不到一个元组,其businessId属性值与之相等。教材说明6.1.2创建、修改与删除表教材第110页054/303(3)从business表中删除一个元组,造成food表中某些元组的businessId属性值在表business中找不到一个元组,其businessId属性值与之相等。(4)修改business表中一个元组的businessId属性,造成food表中某些元组的businessId属性值在表business中找不到一个元组,其businessId属性值与之相等。当上述不一致发生时,系统可以采用以下策略加以处理。参照完整性的违约处理6.1.2创建、修改与删除表教材第111页055/303(1)拒绝执行。不允许该操作执行。该策略一般设置为默认策略。(2)级联操作。当删除或修改被参照表(business)的一个元组导致与参照表(food)的不一致时,删除或修改参照表中所有导致不一致的元组。例如,删除business表中businessId值为“1”的元组,则要从food表中级联删除“food.businessId=1”的所有元组。参照完整性的违约处理6.1.2创建、修改与删除表教材第111页056/303(3)设置为空值。当删除或修改被参照表的一个元组时造成不一致,则将参照表中所有造成不一致的元组的对应属性设置为空值。例如,下面两个关系:商家(编号,名称,地址,介绍,)食品(商家编号,食品编号)参照完整性的违约处理6.1.2创建、修改与删除表教材第111页057/303其中“商家”关系的“编号”是外码,参照“食品”关系的主码“商家编号”。假设“商家”表中“编号”为“1”的元组被删除,按照表6-5的策略,就要把“食品”表中“商家编号='1'”的所有元组的商家编号设置为空值。这样处理的语义可以解释为:某个商家删除了,则属于该商家的食品的所有商家编号就要等待重新设置所属商家。一般地,当对参照表和被参照表的操作违反了参照完整性时,系统选用默认策略,即拒绝执行。如果想让系统采用其他策略,则必须在创建参照表时显式地加以说明。教材例6-66.1.2创建、修改与删除表教材第111页058/303【例6-6】显式说明参照完整性的违约处理示例。教材例6-6:SQL(1/2)6.1.2创建、修改与删除表教材第111页059/303教材语句CREATETABLEfood(foodIdINTPRIMARYKEYNOTNULL,foodNameVARCHAR(30)NOTNULL,foodExplainVARCHAR(30),foodPriceDECIMAL(5,2)NOTNULL,businessIdINTNOTNULL,教材例6-6:SQL(2/2)6.1.2创建、修改与删除表教材第111页060/303教材语句CONSTRAINTfk_businessIdFOREIGNKEY(businessId)REFERENCESbusiness(businessId)/*表级定义参照性*/ONDELETECASCADE/*当删除business表中的元组时,级联删除food表中的businessId与business.id相同的food元组*/ONUPDATECASCADE/*当更新business表中的id时,级联更新food表中相应元组的businessId*/);ALTERTABLE:修改基本表6.1.2创建、修改与删除表教材第111页061/303随着应用环境和应用需求的变化,有时需要修改已经建立好的基本表,如增加列、增加新的完整性约束条件、修改原有的列定义或删除已有的完整性约束条件等,此处仅列出其中的部分语法。语法格式:ALTER语法6.1.2创建、修改与删除表教材第111页062/303教材语句ALTERTABLE<表名>[ADD<新列名><数据类型>[完整性约束]][DROP<完整性约束名>]|[MODIFY<列名><数据类型>]完整性约束的层次与作用6.1.2创建、修改与删除表教材第111页063/303其中,表名是要修改的基本表,ADD子句用于增加新列和新的完整性约束条件,DROP子句用于删除指定的完整性约束条件,MODIFY子句用于修改原有的列定义,包括修改列名和数据类型。教材例6-76.1.2创建、修改与删除表教材第111页064/303【例6-7】在食品表中增加“食材”属性,类型为Varchar。教材例6-7:SQL6.1.2创建、修改与删除表教材第111页065/303教材语句ALTERTABLEfoodADDCOLUMNfoodIngredientsVARCHAR(255);教材例6-86.1.2创建、修改与删除表教材第111页066/303【例6-8】在食品表中删除“食材”属性。教材例6-8:SQL6.1.2创建、修改与删除表教材第111页067/303教材语句ALTERTABLEfoodDROPCOLUMNfoodIngredients;教材例6-96.1.2创建、修改与删除表教材第111—112页068/303【例6-9】食品表中修改“食品名称”属性的长度为40。教材例6-9:SQL6.1.2创建、修改与删除表教材第112页069/303教材语句ALTERTABLEfoodMODIFYfoodNameVARCHAR(40);教材说明6.1.2创建、修改与删除表教材第112页070/303注意:可以增加或减少某一列的长度,但是修改后的长度不能小于该列原有数据的长度;ALTERTABLE:修改基本表6.1.2创建、修改与删除表教材第111—113页071/303对于NULL值约束进行修改的问题。该问题产生于将某列的约束从NULL改变NOTNULL时,要求指定的字段中不能有NULL值。如果包含值为NULL的字段,则必须先删掉所发现的任何NULL值,然后使用ALTERTABLE命令进行修改。DROP语法6.1.2创建、修改与删除表教材第112页072/303教材语句DROPTABLE<表名>[RESTRICT|CASCADE];教材说明6.1.2创建、修改与删除表教材第112页073/303RESTRICT表示如果有视图或约束条件涉及要删除的表时,就禁止DBMS执行该命令;而CASCADE选项则将该表与其涉及的对象一起删除。教材例6-106.1.2创建、修改与删除表教材第112页074/303【例6-10】假设已经存在一个表,表名为“临时表”,现将其删除,并将与该表有关的其他数据库对象一起删除。教材例6-10:SQL6.1.2创建、修改与删除表教材第112页075/303教材语句DROPTABLE临时表CASCADE;6.1.3索引的建立与删除6.1.3索引的建立与删除教材第113页076/3036.1.3索引的建立与删除索引作用CREATEINDEXDROPINDEX索引使用技巧教材说明6.1.3索引的建立与删除教材第112页077/303可以用两种方法从数据库中获得数据。第一种方法常被称为顺序访问方式,它需要SQL检查每一个记录以找到与之相匹配的数据项。这种查找的方法效率很低,但它是使记录准确定位的唯一方法。索引的定义6.1.3索引的建立与删除教材第112页078/303教材定义索引的定义:索引可以理解为根据某些字段的值进行逻辑排序的一组指针。索引说明6.1.3索引的建立与删除教材第112页079/303数据库中的索引可以帮助用户快速获得想要的数据。索引通常根据表中某些字段的值建立树状结构;索引文件存放有序记录号,每个记录号指向一条待处理记录。教材说明6.1.3索引的建立与删除教材第112页080/303目前,很多DBMS直接使用主键的概念建立主索引,方法是建立基本表时直接定义主键,即建立了主索引。一个表只能有一个主索引,同时用户还可以建立其他索引,不同的DBMS略有区别,如MySQL有主索引、候选索引、普通索引和唯一索引4种类型的索引;教材说明6.1.3索引的建立与删除教材第112页081/303Access中有主索引、重复索引和非重复索引;SQLServer中则是聚簇索引、非聚簇索引和唯一索引。SQL支持用户根据应用环境的需要,在基本表上建立一个或多个索引,以提供多种存取路径,加快查找速度。CREATE语法6.1.3索引的建立与删除教材第112页082/303教材语句CREATE[UNIQUE][CLUSTER]INDEX<索引名>ON<表名>(<列名>[<次序>][,<列名>[<次序>]]…);复合索引的定义6.1.3索引的建立与删除教材第112页083/303教材定义复合索引的定义:由两列或多列属性组成的索引,称为复合索引(CompositeIndex)。复合索引说明6.1.3索引的建立与删除教材第112页084/303索引可以建立在表的一列或多列上,各列名之间用逗号分隔。表名是要建立索引的基本表名,索引名由用户为该索引命名。教材说明6.1.3索引的建立与删除教材第112页085/303UNIQUE表明此索引的每个索引值只对应唯一的数据记录。CLUSTER表示要建立的索引是聚簇索引。聚簇索引是指索引项的顺序与表中记录的物理顺序一致的索引组织。教材例6-116.1.3索引的建立与删除教材第113页086/303【例6-11】为商家和食品表创建索引。教材例6-11:SQL6.1.3索引的建立与删除教材第113页087/303教材语句CREATEINDEXidx_business_idONbusiness(businessId);CREATEINDEXidx_food_idONfood(foodId);DROPINDEX语法6.1.3索引的建立与删除教材第113页088/303教材语句DROPINDEX<索引名>on<表名>;DROPINDEX:删除索引6.1.3索引的建立与删除教材第113页089/303DROPINDEX命令可以删除当前数据库内的一个或几个索引。当一个索引被删除后,该索引先前占有的存储空间就会被收回。但是,DROPINDEX不会影响PRIMARYKEY和UNIQUE约束条件,这些约束条件必须用ALTERTABLE…DROP命令来完成。教材例6-126.1.3索引的建立与删除教材第113页090/303【例6-12】删除食品表上的在食品编号上创建的索引。教材例6-12:SQL6.1.3索引的建立与删除教材第113页091/303教材语句DROPINDEXidx_food_idONfood;索引使用技巧6.1.3索引的建立与删除教材第113页092/303虽然采用了索引技术可以提高数据查询的速度,但另一方面,增加了数据插入、删除和修改的复杂性,以及维护索引的时间开销。因此,是否使用索引,对哪些属性建立索引,数据库设计人员必须全面考虑,权衡折中。下面给出几个使用索引的技巧。索引使用技巧6.1.3索引的建立与删除教材第113页093/303(1)对于小表来说,使用索引性能不会有任何提高。(2)索引列中有较多不同的数据时,索引会使性能有极大的提高。教材说明6.1.3索引的建立与删除教材第113页094/303(3)当查询要返回的数据很少时,索引可以优化查询(比较好的情况是少于全部数据的25%),如果要返回的数据很多,索引会加大系统开销。(4)索引可以提高数据的返回速度,但是它使得数据的更新操作变慢。如果要进行大量的更新操作,在执行更新操作时先删除索引,当执行完更新操作后只需要简单地恢复索引即可。索引使用技巧6.1.3索引的建立与删除教材第113页095/303(5)索引会占用数据库的空间。如果数据库管理系统允许管理数据库的磁盘空间,那么在设计数据库的可用空间时要考虑索引所占用的空间。(6)不要对经常需要更新或修改的字段创建索引,更新索引的开销会降低你所期望获得的性能。(7)不要将索引与表存储在同一个驱动器上。分开存储会去掉访问的冲突,从而使结果返回得更快。6.2数据操纵语言(DML)6.2数据操纵语言(DML)教材第113—114页096/3036.2数据操纵语言(DML)INSERTDELETEUPDATEINSERT语法6.2数据操纵语言(DML)教材第113页097/303教材语句INSERTINTO<表名>[(<属性列1>[,<属性列2>…])VALUES(<常量1>[,<常量2>]…);教材说明6.2数据操纵语言(DML)教材第113页098/303如果某些属性列在INTO子句中没有出现,则新记录在这些列上将取空值。但必须注意的是,在表定义时说明了NOTNULL的属性列不能取空值,否则会出错。如果INTO子句中没有指明任何列名,则新插入的记录必须在每个属性列上均有值且新插入记录的属性值与原表属性应一一对应。教材例6-136.2数据操纵语言(DML)教材第114页099/303【例6-13】将一个新的商家记录(商家编号:1;商家名称:张三包子铺;商家密码:001;商家地址:江苏省南京市;商家介绍:主营业务为包子售卖;起送费:20.00;配送费:1.00)插入商家表中。教材例6-13:方法一6.2数据操纵语言(DML)教材第114页100/303教材语句INSERTINTObusiness(businessId,businessName,password,businessAddress,businessExplain,starPrice,deliveryPrice)VALUES('1','张三包子铺','001','江苏省南京市','主营业务为包子售卖',20.00,1.00);教材例6-13:方法二说明6.2数据操纵语言(DML)教材第114页101/303方法二:省略列名列表,按商家表字段顺序提供全部VALUES值。教材例6-13:方法二6.2数据操纵语言(DML)教材第114页102/303教材语句INSERTINTObusinessVALUES('2','张三包子铺','001','江苏省南京市','主营业务为包子售卖',20.00,1.00);教材说明6.2数据操纵语言(DML)教材第114页103/303如果使用方法二插入数据,需要保证values中值的顺序要和商家表中字段顺序一致,否则数据会错位。DELETE语法6.2数据操纵语言(DML)教材第114页104/303教材语句DELETEFROM<表名>[WHERE<条件>];教材说明6.2数据操纵语言(DML)教材第114页105/303删除可以分为如下几种。(1)删除某个(某些)元组的值:WHERE子句中给出删除条件。(2)删除全部元组的值:省略WHERE子句。教材例6-146.2数据操纵语言(DML)教材第114页106/303【例6-14】删除商家编号为1的商家记录。教材例6-14:SQL6.2数据操纵语言(DML)教材第114页107/303教材语句DELETEFROMbusinessWHEREbusinessId=1;UPDATE语法6.2数据操纵语言(DML)教材第114页108/303教材语句UPDATE<表名>SET<列名>=<表达式>[,<列名>=<表达式>]…[WHERE<条件>];教材说明6.2数据操纵语言(DML)教材第114页109/303其功能是修改指定表中满足WHERE子句条件的元组。其中,SET子句用于指定修改方法,即用表达式的值取代相应的属性列值。如果省略WHERE子句,则表示要修改表中的所有元组。教材例6-156.2数据操纵语言(DML)教材第114—115页110/303【例6-15】更新表中的一个元组数据:更新商家表中商家编号为2的商家起送费为30.00元。教材例6-15:SQL6.2数据操纵语言(DML)教材第115页111/303教材语句UPDATEbusinessSETstarPrice=30.00WHEREbusinessId=2;教材例6-166.2数据操纵语言(DML)教材第115页112/303【例6-16】更新表中多个元组数据:更新商家表中商家编号为2的起送费增加1元。教材例6-16:SQL6.2数据操纵语言(DML)教材第115页113/303教材语句UPDATEbusinessSETstarPrice=starPrice+1WHEREbusinessId=2;6.3数据查询语言(DQL)6.3数据查询语言(DQL)教材第115页114/3036.3数据查询语言(DQL)6.3.1单表查询6.3.2连接查询6.3.3嵌套查询6.3.4聚合函数教材说明6.3数据查询语言(DQL)教材第115页115/303建立数据库的目的就是为了对数据库进行操作,以便能够从中提取有用的信息。数据库查询是数据库的核心操作,SQL提供了SELECT语句进行数据库的查询。SQL92标准中SELECT语句的语法格式:SELECT语法6.3数据查询语言(DQL)教材第115页116/303教材语句SELECT[ALL|DISTINCT]<属性列表>FROM<表名或视图名>[,<表名或视图名>]…[WHERE<条件表达式>][GROUPBY列名>][HAVING<条件表达式>][ORDERBY列名>[ASC|DESC]];教材说明6.3数据查询语言(DQL)教材第115页117/303SELECT语句的含义是:根据WHERE子句中的条件表达式,从FROM子句指定的基本表中找出满足条件的元组,并按SELECT子句中指出的属性,选出元组中的分量形成结果表。并不是所有的查询都会用到所有的子句,最小限度情况下,查询只需要一个SELECT和一个FROM子句。SELECT与关系代数投影6.3数据查询语言(DQL)教材第115页118/303实际上,SELECT子句所完成的功能类似于关系代数中的投影运算而WHERE子句的功能类似于关系代数中的选择运算。如果有GROUP子句选项,则将结果按列名的值进行分组,该属性列值相等的元组为一个组,每个组产生结果表中的一条记录,通常会在每组中使用集函数。教材说明6.3数据查询语言(DQL)教材第115页119/303如果GROUP子句带有HAVING短语,则结果只有满足指定条件的组才被选出来。ORDERBY子句是将查询的结果进行排序显示,ASC表示升序,DESC表示降序,默认为升序。可选项[ALL|DISTINCT]的含义是,如果没有指定DISTINCT短语,则默认为ALL即保留结果中取值重复的行。6.3.1单表查询6.3.1单表查询教材第115页120/3036.3.1单表查询投影与别名DISTINCTWHERE条件分组与HAVINGSELECT与关系代数投影6.3.1单表查询教材第115页121/303最简单的SQL查询只涉及一个关系(基本表),下面介绍几种单表查询的操作。选择表中的若干列(关系代数中的投影运算)关系代数中的投影运算,对应于SQL中利用SELECT子句指定属性的功能。教材例6-176.3.1单表查询教材第115—116页122/303【例6-17】在商家表中查询所有的商家名称和商家介绍。教材例6-17:SQL6.3.1单表查询教材第115页123/303教材语句SELECTbusinessName,businessExplainFROMbusiness;教材例6-186.3.1单表查询教材第116页124/303【例6-18】在商家表中找出商家的所有信息。该查询可以在SELECT语句中将所有的属性列出,同时也可以使用通配符“*”简化输入,例如:教材例6-18:SQL6.3.1单表查询教材第116—117页125/303教材语句SELECT*FROMbusiness;教材说明6.3.1单表查询教材第116页126/303在SELECT语句中,返回结果的标题都是对应的列名。对于普通用户而言,这种显示方式不容易被理解。可以在SELECT语句中使用AS关键字设置列的显示标题。教材例6-196.3.1单表查询教材第115—116页127/303【例6-19】查询所有的商家的商家名称和商家介绍,其中“businessName”用“商家名称”,“businessExplain”用“商家介绍”来显示。教材例6-19:SQL6.3.1单表查询教材第115—116页128/303教材语句SELECTbusinessNameas商家名称,businessExplainas商家介绍FROMbusiness;SELECT与关系代数投影6.3.1单表查询教材第116页129/303与关系代数不同,SQL语句的投影运算默认获得投影列上的所有元组(包括所有的重复元组),若希望在重复列上仅取一次数值,则添加关键字DISTINCT。教材例6-206.3.1单表查询教材第116页130/303【例6-20】查询所有的商家地址。教材例6-20:SQL6.3.1单表查询教材第116—117页131/303教材语句SELECTDISTINCTbusinessAddressFROMbusiness;教材说明6.3.1单表查询教材第116页132/303查询满足指定条件的元组可以通过WHERE子句实现。WHERE子句常用的查询条件如表6-6所示。表6-6WHERE常用查询条件(1/2)6.3.1单表查询教材第116页133/303查询条件谓词比较=、>、<、>=、<=、<>算术运算+、-、*、/确定范围BETWEEN…AND…确定集合IN(value1,value2,…)字符匹配LIKE表6-6WHERE常用查询条件(2/2)6.3.1单表查询教材第116页134/303查询条件谓词空值ISNULL、ISNOTNULL多重条件AND、OR教材说明6.3.1单表查询教材第116页135/303下面分别针对以上列出的查询条件,给出查询实例。教材例6-216.3.1单表查询教材第116页136/303【例6-21】查询起送费大于30元的商家名称、商家地址及起送费。教材例6-21:SQL6.3.1单表查询教材第115—117页137/303教材语句SELECTbusinessName,businessAddress,starPriceFROMbusinessWHEREstarPrice>30;教材例6-226.3.1单表查询教材第117页138/303【例6-22】查询起送费大于30,并且商家地址为江苏南京的商家信息。教材例6-22:SQL6.3.1单表查询教材第116—117页139/303教材语句SELECT*FROMbusinessWHEREstarPrice>30ANDbusinessAddress="江苏省南京市";教材例6-236.3.1单表查询教材第117页140/303【例6-23】查询配送费在0-2元之间的商家信息。教材例6-23:BETWEEN写法6.3.1单表查询教材第117页141/303教材语句SELECT*FROMbusinessWHEREdeliveryPriceBETWEEN0AND2;教材例6-23:等价比较写法6.3.1单表查询教材第117—118页142/303教材语句SELECT*FROMbusinessWHEREdeliveryPrice>=0ANDdeliveryPrice<=2;教材例6-246.3.1单表查询教材第117页143/303【例6-24】查询商家地址为江苏省南京市、北京市、山西省太原市的商家信息。教材例6-24:SQL6.3.1单表查询教材第117页144/303教材语句SELECT*FROMbusinessWHEREbusinessAddressIN('江苏省南京市','北京市','山西省太原市');教材说明6.3.1单表查询教材第117页145/303与IN相对的谓词是NOTIN,用于查找属性值不属于指定集合的元组。如查询商家地址不为江苏省南京市、北京市、山西省太原市的商家信息。NOTIN查询示例6.3.1单表查询教材第117页146/303教材语句SELECT*FROMbusinessWHEREbusinessAddressNOTIN('江苏省南京市','北京市','山西省太原市');教材说明6.3.1单表查询教材第117页147/303谓词LIKE可以用来进行字符串的匹配。其一般语法格式如下:[NOT]LIKE'<匹配串>'[ESCAPE'<换码字符>']其含义是查找指定的属性列值与匹配串相匹配的元组。匹配串可以是一个完整的字符串,也可以含有通配符“%”和“_”。%(百分号)代表任意长度(长度可以为0)的字符串,_(下画线)代表任意单个字符。教材例6-256.3.1单表查询教材第117页148/303【例6-25】查询所有商家名称为张开头的商家信息。教材例6-25:SQL6.3.1单表查询教材第117页149/303教材语句SELECT*FROMbusinessWHEREbusinessNameLIKE'张%';教材例6-266.3.1单表查询教材第118页150/303【例6-26】查询所有商家名称中第二个字为“三”的商家信息。教材例6-26:SQL6.3.1单表查询教材第118页151/303教材语句SELECT*FROMbusinessWHEREbusinessNameLIKE'_三%';教材例6-276.3.1单表查询教材第118页152/303【例6-27】查询所有配送地址中只要包含“南京”两个字的配送地址信息。教材例6-27:SQL6.3.1单表查询教材第118页153/303教材语句SELECT*FROMdeliveryaddressWHEREaddressLIKE'%南京%';教材说明6.3.1单表查询教材第118页154/303GROUPBY子句可以将查询结果的各行按一列或多列取值相等的原则进行分组。对查询结果分组的目的是为了细化集函数的作用对象。如果未对查询结果分组,集函数将作用于整个查询结果,即整个查询结果只有一个函数值。否则,集函数将作用于每一个组,即每组都有一个函数值。教材例6-286.3.1单表查询教材第118页155/303【例6-28】查询各个商家的食品数量。教材例6-28:SQL6.3.1单表查询教材第118页156/303教材语句SELECTbusinessId,count(foodId)AS食品数量FROMfoodGROUPBYbusinessId;HAVING与WHERE的区别6.3.1单表查询教材第118页157/303使用HAVING子句可以指定搜索的条件。HAVING通常与GROUPBY子句一起使用。如果不使用GROUPBY子句,HAVING的作用与WHERE子句一样。HAVING与WHERE的区别:WHERE子句搜索条件在进行分组操作之前应用,而HAVING搜索条件在分组操作之后应用;HAVING可以包含聚合函数,而WHERE不可以包含聚合函数。教材例6-296.3.1单表查询教材第118页158/303【例6-29】查询商家编号在1~10至少有3种食品的所有食品信息。教材例6-29:SQL6.3.1单表查询教材第118页159/303教材语句SELECT*FROMfoodWHEREbusinessIdBETWEEN1AND10GROUPBYbusinessIdHAVINGCOUNT(foodId)>=3;6.3.2连接查询6.3.2连接查询教材第120页160/3036.3.2连接查询等值/非等值连接自身连接外连接复合条件连接连接查询的定义6.3.2连接查询教材第118页161/303教材定义连接查询的定义:若一个查询同时涉及两个以上的表,则称之为连接查询。连接查询说明6.3.2连接查询教材第118页162/303一个数据库中的多个表之间通常存在内在联系,它们共同提供有用信息。连接查询可继续分为等值/非等值连接、自身连接、外连接和复合条件连接。连接条件的定义6.3.2连接查询教材第118页163/303教材定义连接条件的定义:用来连接两个表的条件称为连接条件或连接谓词,其一般格式为:连接谓词语法6.3.2连接查询教材第118页164/303教材语句[<表名1>.]<列名1><比较运算符>[<表名2>.]<列名2>教材说明6.3.2连接查询教材第118页165/303其中,比较运算符主要有:=、>、<、>=、<=、!=。此外,连接谓词还可以使用下面的形式。连接谓词语法6.3.2连接查询教材第118页166/303教材语句[<表名1>.]<列名1>BETWEEN[<表名2>.]<列名2>AND[<表名2>.]<列名3>等值连接与非等值连接的定义6.3.2连接查询教材第119页167/303教材定义等值连接与非等值连接的定义:当连接运算符为=时,称为等值连接,使用其他运算符时称为非等值连接。连接字段与类型可比性6.3.2连接查询教材第119页168/303(1)连接谓词中的列名称为连接字段。连接条件中的各连接字段类型必须是可比的,但不必相同。例如,可以都是字符型或日期型;也可以一个是整型,另一个是实型。但字符型与整数型不可比,不允许连接。DBMS执行连接的过程(1/2)6.3.2连接查询教材第119页169/303(2)从概念上讲,DBMS执行连接操作时,首先在表1中找到第一个元组,再从头顺序或按索引扫描表2。在表2中每找到一个满足连接条件的元组,就将它与表1的第一个元组拼接,形成结果表中的一个元组。DBMS执行连接的过程(2/2)6.3.2连接查询教材第119页170/303表2全部扫描完毕后,再到表1中取第二个元组,然后重新从头顺序或按索引扫描表2。每找到一个满足连接条件的元组,就将它与表1的第二个元组拼接,形成结果表中的一个元组。重复上述操作,直到表1的全部元组都处理完毕为止。教材例6-306.3.2连接查询教材第119页171/303【例6-30】查询每个商家的食品信息。教材例6-30:SQL6.3.2连接查询教材第119—120页172/303教材语句SELECTbusiness.*,food.*FROMbusiness,foodWHEREbusiness.businessId=food.businessId;自身连接的定义6.3.2连接查询教材第119页173/303教材定义自身连接的定义:连接操作也允许在一个表与其自身之间进行,这种连接称为表的自身连接。自身连接说明6.3.2连接查询教材第119—120页174/303可以把一个表或视图看成两个副本,并分别加上元组变量(别名)X和Y。SQL中用元组变量限定列名,保留字AS可以省略。教材例6-316.3.2连接查询教材第119页175/303【例6-31】在食品表中,查询商家编号为1和2的菜品信息,要求查询两个商家的统一个菜品信息。教材例6-31:SQL6.3.2连接查询教材第119页176/303教材语句SELECTX.*FROMfoodX,foodYWHEREX.businessId=1ANDY.businessId=2ANDX.foodName=Y.foodName;外连接的定义6.3.2连接查询教材第119页177/303教材定义外连接的定义:外连接首先保证主表中满足条件的记录都在结果中;不满足连接条件时,来自另一表的属性值置为空值。外连接说明6.3.2连接查询教材第119页178/303外连接的两个表有主次之分:主表在左侧称为左连接(LEFTOUTERJOIN),主表在右侧称为右连接(RIGHTOUTERJOIN)。教材例6-326.3.2连接查询教材第119页179/303【例6-32】以商家为主体列出每个商家的信息以及该商家的食品信息。可用下列语句来完成。教材例6-32:SQL6.3.2连接查询教材第118—120页180/303教材语句SELECTbusiness.*FROMbusinessLEFTJOINfoodONbusiness.businessId=food.foodId;教材例6-336.3.2连接查询教材第119页181/303【例6-33】根据订单编号“123456”查询订单信息,并关联查询所属商家信息教材例6-33:SQL6.3.2连接查询教材第119—120页182/303教材语句selecto.*,b.businessId,b.businessName,b.businessAddress,b.businessExplain,b.businessImg,b.starPrice,b.deliveryPrice,FROMordersoleftjoinbusinessbono.businessId=b.businessIdWHEREo.orderId=123456;教材例6-346.3.2连接查询教材第120页183/303【例6-34】根据用户编号“12345671111”、商家编号“10001”查询购物车信息,并关联查询所属商家信息和食品信息。教材例6-34:SQL6.3.2连接查询教材第119—120页184/303教材语句selectc.*,f.foodId,f.foodName,f.foodExplain,f.foodImg,f.foodPrice,f.businessId,b.businessId,b.businessName,b.businessAddress,b.businessExplain,b.businessImg,b.starPrice,b.deliveryPrice,from(cartcleftjoinfoodfonc.foodId=f.foodId)leftjoinbusinessbonc.businessId=b.businessIdWHEREc.userId=12345671111andc.businessId=10001;复合条件连接的定义6.3.2连接查询教材第120页185/303教材定义复合条件连接的定义:WHERE子句通过NOT、AND或OR组成多重查询条件时,这种连接查询称为复合条件连接。复合条件连接说明6.3.2连接查询教材第120页186/303NOT、AND、OR同时出现时,优先级从高到低依次为NOT、AND、OR。可以使用括号改变运算优先级。教材例6-356.3.2连接查询教材第120页187/303【例6-35】查询商家起送费大于30的商家信息以及该商家的食品信息。教材例6-35:SQL6.3.2连接查询教材第119—120页188/303教材语句SELECTbusiness.*,food.*FROMbusiness,foodWHEREbusiness.businessId=food.businessIdANDbusiness.starPrice>=30;教材例6-366.3.2连接查询教材第120页189/303【例6-36】查询指定订单数量大于3的订单明细以及对应的食品信息。教材例6-36:SQL6.3.2连接查询教材第120页190/303教材语句SELECTfood.*,orderdetailet.*FROMfood,orderdetailetWHEREquantity>3ANDfood.foodId=orderdetailet.foodId;6.3.3嵌套查询6.3.3嵌套查询教材第120—121页191/3036.3.3嵌套查询IN比较运算符ANY/ALLEXISTS嵌套查询的定义6.3.3嵌套查询教材第120页192/303教材定义嵌套查询的定义:在SQL语言中,一个SELECT-FROM-WHERE语句称为一个查询块。嵌套查询就是把一个查询块嵌套在另一个查询块的WHERE子句或HAVING短语的条件中,前者称为子查询或内查询,后者称为外查询。嵌套查询的执行顺序6.3.3嵌套查询教材第120页193/303SQL对嵌套查询的处理方法是由内向外地进行求解,即先执行子查询,然后把查询的结果用于其外查询的查询条件中,再层层向外求解,最后得出查询结果。需要说明的是子查询的SELECT语句中不能使用ORDERBY子句,ORDERBY子句只能对最终查询结果排序。嵌套查询可以用一系列简单查询构成复杂的查询,从而明显地增强了SQL的查询能力。以层层嵌套的方式来构造程序正是SQL中“结构化”的含义所在。教材说明6.3.3嵌套查询教材第120页194/303IN表示当且仅当S和关系R中的某个值相等时,SINR为真。带有IN谓词的子查询指在父查询与子查询间用IN进行连接,判断某个属性列的值是否在子查询的结果中。由于在嵌套查询中子查询的结果往往是一个集合,所以谓词IN是嵌套查询中最经常使用的谓词。教材例6-376.3.3嵌套查询教材第120—121页195/303【例6-37】查询与商家编号为1的在同一个地点的商家信息。可用下列语句来完成:教材例6-37:SQL6.3.3嵌套查询教材第120—122页196/303教材语句SELECT*FROMbusinessWHEREbusinessAddressIN(SELECTbusinessAddressFROMbusinessWHEREbusinessId=1);教材说明6.3.3嵌套查询教材第121—122页197/303子查询“SELECTbusinessAddressFROMbusinessWHEREbusinessId=1“只执行一次,其结果用于父查询,子查询的查询条件不依赖于父查询,这类查询是嵌套查询中最简单的一类子查询。比较运算符子查询的定义6.3.3嵌套查询教材第121页198/303教材定义比较运算符子查询的定义:带有比较运算符的子查询是指在父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层查询返回的是单值时,可以用>、<、=、>=、<=、!=或<>等比较运算符

温馨提示

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

评论

0/150

提交评论