数据查询与更新课件

上传人:vc****3p 文档编号:240984961 上传时间:2024-05-22 格式:PPT 页数:65 大小:464.14KB
返回 下载 相关 举报
数据查询与更新课件_第1页
第1页 / 共65页
数据查询与更新课件_第2页
第2页 / 共65页
数据查询与更新课件_第3页
第3页 / 共65页
点击查看更多>>
资源描述
11第七章第七章数据查询与更新数据查询与更新谢谢观赏2019-8-281第七章数据查询与更新谢谢观赏2019-8-2822本章内容本章内容n7.1数据查询数据查询n7.2数据更新数据更新谢谢观赏2019-8-282本章内容7.1数据查询谢谢观赏2019-8-28337.1数据查询数据查询查询是对存储在查询是对存储在SQLServer2005中的数据的一种请求。中的数据的一种请求。Transact-SQL命令中的命令中的SELECT命令可以实现从命令可以实现从SQLServer中检索出数据,然后以一个或多个结果集的形式返回给用户。中检索出数据,然后以一个或多个结果集的形式返回给用户。与数据表相同,结果集由行和列组成。与数据表相同,结果集由行和列组成。SELECT语句的基本框架是语句的基本框架是SELECT-FROM-WHERE,它包含输出字段、数据来源和查询条件等基本子句。在这种它包含输出字段、数据来源和查询条件等基本子句。在这种固定格式中,可以不要固定格式中,可以不要WHERE,但是,但是SELECT和和FROM是是必备的。必备的。SELECT语句的子句很多,理解了这条语句各项的语句的子句很多,理解了这条语句各项的含义,就能从数据库中查询出各种数据。含义,就能从数据库中查询出各种数据。谢谢观赏2019-8-2837.1数据查询查询是对存储在SQLServer20447.1数据查询数据查询nTransact-SQL查询语句查询语句语法格式:语法格式:SELECTselect_listINTOnew_table_nameFROMtable_listWHEREsearch_conditionsGROUPBYgroup_by_listHAVINGsearch_conditionsORDERBYorder_listASC|DESC谢谢观赏2019-8-2847.1数据查询Transact-SQL 查询语句谢谢观557.1数据查询数据查询nselect_list:所所要要查查询询的的选选项项的的集集合合,多多个个选选项项之之间间用用逗逗号分开。号分开。nINTOnew_table_name:创创建建一一个个新新表表并并将将结结果果集集写写入入新表新表new_table_name中。中。ntable_list:要检索的数据表。:要检索的数据表。nsearch_conditions:定定义义检检索索条条件件,只只有有符符合合条条件件的的行行才才向结果集提供数据。向结果集提供数据。谢谢观赏2019-8-2857.1数据查询select_list:所要查询的选项的667.1数据查询数据查询ngroup_by_list:GROUPBY子子句句根根据据group_by_list列列中中的值将结果集分成组。的值将结果集分成组。nsearch_conditions:HAVING子子句句通通常常与与GROUPBY子子句句一一起起使使用用,search_conditions是是应应用用于于结结果果集集的的附附加加筛筛选选条条件。件。norder_listASC|DESC:定定义义了了结结果果集集中中行行的的排排序序顺顺序序,关关键键字字ASC和和DESC用用于于指指定定排排序序行行的的排排列列顺顺序序是是升升序序还是降序,若缺省,则默认为升序。还是降序,若缺省,则默认为升序。谢谢观赏2019-8-2867.1数据查询group_by_list:GROUP777.1数据查询数据查询注注:在在SELECT命命令令中中对对数数据据库库对对象象的的每每个个引引用用都都不不得得引起歧义。下列情况可能导致多义性。引起歧义。下列情况可能导致多义性。n在在一一个个系系统统中中可可能能有有多多个个对对象象具具有有相相同同的的名名称称。可可以以使使用架构名称来限定表名称,解决多义性问题。用架构名称来限定表名称,解决多义性问题。例如,例如,Schema1和和Schema2都含有一个名为都含有一个名为TableX的表,的表,可以使用一下语句区分:可以使用一下语句区分:SELECT*FROMSchema1.TableX谢谢观赏2019-8-2877.1数据查询注:在SELECT命令中对数据库对象的每887.1数据查询数据查询n在在执执行行SELECT语语句句时时,对对象象所所驻驻留留的的数数据据库库不不一一定定总总是是当当前前数数据据库库,在在不不考考虑虑当当前前数数据据库库设设置置的的情情况况下下要要确确保保使使用用的的对对象象始始终终是是正正确确的的,则则应应以以数数据据库库和和架架构构来来限限定定对对象象名名称,如:称,如:SELECT*FROMAdventureWorks.Purchasing.ShipMethod谢谢观赏2019-8-2887.1数据查询在执行SELECT语句时,对象所驻留的数997.1数据查询数据查询n在在FROM子子句句中中所所指指定定的的表表和和视视图图可可能能有有相相同同的的列列名名。若若要要解解决决重重复复名名称称之之间间的的多多义义性性问问题题,必必须须使使用用表表或或视视图图名名称来限定列名。如:称来限定列名。如:SELECTDISTINCTSales.Customer.CustomerID,Sales.Store.NameFROMSales.CustomerJOINSales.StoreON(Sales.Customer.CustomerID=Sales.Store.CustomerID)WHERESales.Customer.TerritoryID=1当当表表和和视视图图名名称称都都必必须须完完全全限限定定时时,语语法法将将变变得得复复杂杂。可可以以在在FROM子子句句中中使使用用AS关关键键字字为为表表指指定定一一个个相相关关名名称称(也称为作用域变量或别名也称为作用域变量或别名)来解决此问题。来解决此问题。谢谢观赏2019-8-2897.1数据查询在FROM子句中所指定的表和视图可能有相10107.1数据查询数据查询nSELECT子句子句SELECTselect_listINTOnew_table_name选选择择列列表表用用于于定定义义SELECT语语句句的的结结果果集集中中的的列列,结结果果集中列的排列顺序与选择列表中表达式的排列顺序相同集中列的排列顺序与选择列表中表达式的排列顺序相同。选择列表中的表达式决定了结果集列的特性。选择列表中的表达式决定了结果集列的特性。n结结果果集集列列与与定定义义该该列列的的表表达达式式的的数数据据类类型型、大大小小、精精度度以及小数位数相同。以及小数位数相同。n结结果果集集列列的的名名称称与与定定义义该该列列的的表表达达式式的的名名称称相相关关联联。可可选选的的AS关关键键字字可可用用于于更更改改名名称称,或或者者在在表表达达式式没没有有名名称称时时为为其分配名称。其分配名称。谢谢观赏2019-8-28107.1数据查询SELECT子句谢谢观赏2019-811117.1数据查询数据查询n结结果果集集列列的的数数据据值值通通过过对对结结果果集集的的每每一一行行相相应应的的表表达达式式求值而得出。求值而得出。选择列表中的项目可包括:选择列表中的项目可包括:n简简单单表表达达式式:对对函函数数、局局部部变变量量、常常量量或或者者表表或或视视图图中中的列的引用。的列的引用。n标标量量子子查查询询,它它是是用用于于对对结结果果集集每每一一行行求求得得单单个个值值的的SELECT语句。语句。n通通过过对对一一个个或或多多个个简简单单表表达达式式使使用用运运算算符符创创建建的的复复杂杂表表达式。达式。n*关键字,可指定返回表中的所有列。关键字,可指定返回表中的所有列。谢谢观赏2019-8-28117.1数据查询结果集列的数据值通过对结果集的每一行12127.1数据查询数据查询(1)选择所有列选择所有列星星号号“*”用用于于对对FROM子子句句中中指指定定的的所所有有表表或或视视图图中中的的所有列的引用。所有列的引用。此此时时结结果果集集中中的的列列的的顺顺序序与与CREATETABLE、ALTERTABLE或或CREATEVIEW语句中所指定的顺序相同。语句中所指定的顺序相同。(2)选择特定列选择特定列若若要要选选择择表表中中的的特特定定列列,应应在在SELECT子子句句的的选选择择列列表表中明确地列出每一列。中明确地列出每一列。(3)指定结果集列的名称指定结果集列的名称对对列列的的指指定定还还可可以以使使用用别别名名或或其其他他表表达达式式,AS子子句句可可用用来为结果集列分配不同的名称或别名。来为结果集列分配不同的名称或别名。谢谢观赏2019-8-28127.1数据查询(1)选择所有列谢谢观赏2019-8-13137.1数据查询数据查询使用使用AS子句可以提高可读性,其中子句可以提高可读性,其中AS子句的语法:子句的语法:column_nameAScolumn_alias或或result_column_expressionASderived_column_name例如:指定课程名列显示的别名例如:指定课程名列显示的别名USEteachingGOSELECTCNAMEASCoursenameFROMcourseGO执行结果如图执行结果如图7.4所示所示谢谢观赏2019-8-28137.1数据查询使用AS子句可以提高可读性,其中AS子14147.1数据查询数据查询(4)使用使用DISTINCT消除重复项消除重复项DISTINCT关关键键字字可可从从SELECT命命令令的的结结果果中中消消除除重重复复的的行行。如如果果没没有有指指定定DISTINCT,将将返返回回包包括括重重复复行行的的所所有有行行。注注意意:对对于于DISTINCT关关键键字字来来说说,空空值值将将被被认认为为是是相相互互重重复的内容。复的内容。(5)使用使用TOP和和PERCENT限制结果集限制结果集使用使用TOP子句限制结果集中返回的行数,格式如下子句限制结果集中返回的行数,格式如下:TOP(expression)PERCENTWITHTIESnexpression:指指定定返返回回行行数数的的数数值值表表达达式式,如如果果指指定定了了PERCENT,则则返返回回的的是是结结果果集集行行的的百百分分比比(由由expression指指定定)。如:。如:TOP(15)PERCENT表示返回结果集中前表示返回结果集中前15%的结果行的结果行谢谢观赏2019-8-28147.1数据查询(4)使用DISTINCT消除重复项15157.1数据查询数据查询例如:从例如:从course表中返回表中返回2门学分最多的课程。门学分最多的课程。USEteachingGOSELECTTOP2CNO,CNAME,CREDITFROMcourseORDERBYCREDITDESCGO执行结果如图执行结果如图7.7所示。所示。n如如果果指指定定了了WITHTIES,将将返返回回包包含含ORDERBY子子句句返返回回的的最最后后一一个个值值的的所所有有行行,即即便便超超过过expression指指定定的的数数量量。谢谢观赏2019-8-28157.1数据查询例如:从course表中返回2门学分最16167.1数据查询数据查询(6)选择列表中的计算值选择列表中的计算值在在SELECT子子句句的的选选择择列列表表中中可可包包含含一一个个或或多多个个使使用用运运算算符符生生成成的的表表达达式式。这这使使结结果果集集中中得得以以包包含含基基表表中中不不存存在在但但可可以以根根据据基基表表中中存存储储的的值值计计算算得得到到的的值值。这这些些结结果果集集列列被被称称为派生列。为派生列。在在SELECT子子句句中中可可以以使使用用算算术术运运算算符符或或函函数数进进行行运运算。算。算算术术运运算算符符允允许许对对int、smallint、tinyint、decimal、numeric、float、real、money或或smallmoney数数值值列列或或表表达达式式中中使使用用加加(+)、减减(-)、乘乘(*)、除除(/)以以及及int、smallint或或tinyint列或表达式中使用模列或表达式中使用模(%)运算。运算。谢谢观赏2019-8-28167.1数据查询(6)选择列表中的计算值谢谢观赏2017177.1数据查询数据查询在在SELECT子句中还可以使用聚合函数。子句中还可以使用聚合函数。聚合函数对一组值执行计算并返回单个值聚合函数对一组值执行计算并返回单个值。注:除了注:除了COUNT以外,聚合函数都会忽略空值;以外,聚合函数都会忽略空值;聚聚合合函函数数只只在在SELECT子子句句的的选选择择列列表表(子子查查询询或或外外部部查查询询)、COMPUTE或或COMPUTEBY子子句句、HAVING子子句句这些位置作为表达式使用。这些位置作为表达式使用。聚聚合合函函数数包包括括AVG平平均均函函数数、SUM求求和和函函数数、COUNT求个数函数、求个数函数、MIN最小函数、最小函数、MAX最大函数、最大函数、谢谢观赏2019-8-28177.1数据查询在SELECT子句中还可以使用聚合函18187.1数据查询数据查询nFROM子句子句格式:格式:FROMtable_list在一个要从表或视图中检索数据的在一个要从表或视图中检索数据的SELCET语句,都需语句,都需要使用要使用FROM子句。子句。使用使用FROM子句可以指明如下信息:子句可以指明如下信息:列出列出SELECT子句中的选择列表和子句中的选择列表和WHERE子句中所引子句中所引用的列所在的一个或多个表和视图。可以使用用的列所在的一个或多个表和视图。可以使用AS子句为表和子句为表和视图的名称指定别名。视图的名称指定别名。两个或多个表或视图之间的联接类型。这些类型由两个或多个表或视图之间的联接类型。这些类型由ON子句中指定的联接条件限定。子句中指定的联接条件限定。FROM子句使用逗号分隔表名、子句使用逗号分隔表名、视图名和视图名和JOIN子句的列表。子句的列表。谢谢观赏2019-8-28187.1数据查询FROM子句谢谢观赏2019-8-219197.1数据查询数据查询nWHERE子句和子句和HAVING子句子句格式:格式:WHEREsearch_conditionsHAVINGsearch_conditionsnWHERE和和HAVING是筛选器。这两个子句指定一系列搜是筛选器。这两个子句指定一系列搜索条件,只有那些满足搜索条件的行才用于生成结果集。索条件,只有那些满足搜索条件的行才用于生成结果集。nHAVING子句通常与子句通常与GROUPBY子句一起使用以筛选聚子句一起使用以筛选聚合值结果合值结果。nWHERE搜索条件在进行分组操作之前应用,搜索条件在进行分组操作之前应用,HAVING搜搜索条件在进行分组操作之后应用索条件在进行分组操作之后应用。nHAVING语法与语法与WHERE语法类似,但语法类似,但HAVING可以包含可以包含聚合函数聚合函数谢谢观赏2019-8-28197.1数据查询WHERE子句和HAVING 子句谢谢20207.1数据查询数据查询WHERE和和HAVING子句中的搜索条件或限定条件可包括子句中的搜索条件或限定条件可包括如下条件如下条件:(1)比较搜索条件比较搜索条件MicrosoftSQLServer2005使用表使用表7.1中的中的=、=、=、!、!=80GO执行结果如图执行结果如图7.17所示所示。谢谢观赏2019-8-28217.1数据查询例如:查询s_c表中成绩在80分以上(22227.1数据查询数据查询注:表示所有记录可用注:表示所有记录可用ALL关键字关键字(=ALL、ALL、ALL(SELECTs2.GRADEFROMs_cs2WHEREs2.CNO=C2)GO执行结果如图执行结果如图7.19所示所示谢谢观赏2019-8-28227.1数据查询注:表示所有记录可用ALL关键字(=A23237.1数据查询数据查询(2)范围搜索条件范围搜索条件nBETWEEN关键字指定要检索的包括范围关键字指定要检索的包括范围.nNOTBETWEEN查找指定范围之外的所有行查找指定范围之外的所有行.例如:查询年龄不在例如:查询年龄不在2022之间的学生之间的学生。USEteachingGOSELECTSNO,SNAMEFROMstudentWHEREAGENOTBETWEEN20AND22ORDERBYSNOGO执行结果如图执行结果如图7.21所示。所示。谢谢观赏2019-8-28237.1数据查询(2)范围搜索条件谢谢观赏2019-24247.1数据查询数据查询(3)列表搜索条件列表搜索条件IN关键字可以选择与列表中的任意值匹配的行关键字可以选择与列表中的任意值匹配的行,IN关键关键字之后的各项必须用逗号隔开,并且括在括号中。字之后的各项必须用逗号隔开,并且括在括号中。例如:检索例如:检索student表中姓名为表中姓名为WANG或或LIU的学生的学生。USEteachingGOSELECTSNO,SNAMEFROMstudentWHERESNAMEIN(WANG,LIU)ORDERBYSNOGO执行结果如图执行结果如图7.22所示。所示。谢谢观赏2019-8-28247.1数据查询(3)列表搜索条件谢谢观赏2019-25257.1数据查询数据查询(4)搜索条件中的模式匹配搜索条件中的模式匹配LIKE关键字搜索与指定模式匹配的字符串、日期或时间关键字搜索与指定模式匹配的字符串、日期或时间值值,字符串中可包含如表字符串中可包含如表7.2所示的所示的%、_、四种通配四种通配符的任意组合。符的任意组合。注意:不与注意:不与LIKE一同使用的通配符将解释为常量而非模一同使用的通配符将解释为常量而非模式,换言之,这些通配符仅代表其本身的值式,换言之,这些通配符仅代表其本身的值。有两种方法可指定平常用作通配符的字符:有两种方法可指定平常用作通配符的字符:n使用使用ESCAPE关键字定义转义符。在模式中,当转义符关键字定义转义符。在模式中,当转义符置于通配符之前时,该通配符就解释为普通字符。置于通配符之前时,该通配符就解释为普通字符。n在方括号在方括号()中只包含通配符本身。若要搜索破折号中只包含通配符本身。若要搜索破折号(-)而而不是用它指定搜索范围,可以将破折号指定为方括号内的第不是用它指定搜索范围,可以将破折号指定为方括号内的第一个字符。一个字符。谢谢观赏2019-8-28257.1数据查询(4)搜索条件中的模式匹配谢谢观赏226267.1数据查询数据查询(5)NULL比较搜索条件比较搜索条件NULL值表示列的数据值未知或不可用值表示列的数据值未知或不可用。当搜索的列中包括定义为允许空值的列时,可以通过以当搜索的列中包括定义为允许空值的列时,可以通过以下模式查找数据库中的空值或非空值。下模式查找数据库中的空值或非空值。WHEREcolumn_nameISNOTNULL注意:注意:NULL值与零值与零(数值或二进制值数值或二进制值)、零长度的字符串、零长度的字符串或空白或空白(字符值字符值)的含义不同;指定的含义不同;指定=NULL与指定与指定ISNULL是是不同的不同的。谢谢观赏2019-8-28267.1数据查询(5)NULL比较搜索条件谢谢观赏27277.1数据查询数据查询(6)逻辑运算符逻辑运算符逻辑运算符包括逻辑运算符包括AND、OR和和NOT。AND和和OR用于连接用于连接WHERE子句中的搜索条件。子句中的搜索条件。NOT用于反转搜索条件的结果用于反转搜索条件的结果。nAND连接两个条件,只有当两个条件都符合时才返回连接两个条件,只有当两个条件都符合时才返回TRUE。nOR也用于连接两个条件,但只要有一个条件符合便返回也用于连接两个条件,但只要有一个条件符合便返回TRUE。n可以通过添加括号强制先计算可以通过添加括号强制先计算OR来改变查询的含义来改变查询的含义注意:当一个语句中使用了多个逻辑运算符时,计算顺注意:当一个语句中使用了多个逻辑运算符时,计算顺序依次为序依次为NOT、AND和和OR。算术运算符和位运算符优先于。算术运算符和位运算符优先于逻辑运算符。逻辑运算符。谢谢观赏2019-8-28277.1数据查询(6)逻辑运算符谢谢观赏2019-8-28287.1数据查询数据查询nGROUPBY子句子句格式:格式:GROUPBYgroup_by_listGROUPBY子句用来为结果集中的每一行产生聚合值子句用来为结果集中的每一行产生聚合值。可以在包含可以在包含GROUPBY子句的查询中使用子句的查询中使用WHERE子句。子句。在完成任何分组之前,将消除不符合在完成任何分组之前,将消除不符合WHERE子句中的条件子句中的条件的行的行。谢谢观赏2019-8-28287.1数据查询GROUPBY子句谢谢观赏20129297.1数据查询数据查询注意:注意:nWHERE子句用来筛选子句用来筛选FROM子句中指定操作所产生的子句中指定操作所产生的行。行。nGROUPBY子句用来分组子句用来分组WHERE子句的输出。子句的输出。nHAVING子句用来从分组的结果中筛选行。子句用来从分组的结果中筛选行。nORDERBY子句可用于排序子句可用于排序GROUPBY子句的输出子句的输出。谢谢观赏2019-8-28297.1数据查询注意:谢谢观赏2019-8-2830307.1数据查询数据查询nORDERBY子句子句格式:格式:ORDERBYorder_by_expressionCOLLATEcollation_nameASC|DESC,.n指定在指定在SELECT语句返回的列中所使用的排序顺序。语句返回的列中所使用的排序顺序。谢谢观赏2019-8-28307.1数据查询ORDERBY子句谢谢观赏201931317.1数据查询数据查询norder_by_expression:指定要排序的列:指定要排序的列。可以将排序列指定为一个名称或列别名,也可以指定一可以将排序列指定为一个名称或列别名,也可以指定一个表示该名称或别名在个表示该名称或别名在SELECT子句的选择列表中所处位置子句的选择列表中所处位置的非负整数的顺序号。列名和别名可由表名或视图名加以限的非负整数的顺序号。列名和别名可由表名或视图名加以限定定。nCOLLATEcollation_name:指定根据:指定根据collation_name中中指定的排序规则,而不是表或视图中所定义的列的排序规则。指定的排序规则,而不是表或视图中所定义的列的排序规则。nASC:指定按升序。:指定按升序。nDESC:指定按降序:指定按降序。谢谢观赏2019-8-28317.1数据查询order_by_expressio32327.1数据查询数据查询注意:注意:n列名已在列名已在SELECT子句的选择列表中有了别名,则子句的选择列表中有了别名,则ORDERBY子句中只能使用别名子句中只能使用别名。n表名已在表名已在FROM子句中有了别名,则子句中有了别名,则ORDERBY子句中子句中只能使用别名来限定它们的列。只能使用别名来限定它们的列。nORDERBY子句中指定了多个列,则排序是嵌套的子句中指定了多个列,则排序是嵌套的。nORDERBY子句的准确结果取决于被排序的列的排序规子句的准确结果取决于被排序的列的排序规则。可以指定则。可以指定Windows排序规则名称或排序规则名称或SQL排序规则名称。排序规则名称。n无法对数据类型为无法对数据类型为text、ntext、image或或xml的列使用的列使用ORDERBY。n在在ORDERBY列表中不允许使用子查询、聚合和常量表列表中不允许使用子查询、聚合和常量表达式。达式。谢谢观赏2019-8-28327.1数据查询注意:谢谢观赏2019-8-2833337.1数据查询数据查询n联接查询联接查询联接查询通过联接条件指明了两个或多个表之间的逻辑联接查询通过联接条件指明了两个或多个表之间的逻辑关系来检索数据,指明了应如何使用一个表中的数据来选择关系来检索数据,指明了应如何使用一个表中的数据来选择另一个表中的行另一个表中的行。联接条件可通过以下方式定义两个表在查询中的关联方联接条件可通过以下方式定义两个表在查询中的关联方式:式:n指定每个表中要用于联接的列指定每个表中要用于联接的列(例如外键例如外键)。n指定用于比较各列的值的逻辑运算符指定用于比较各列的值的逻辑运算符(例如例如=或或)。谢谢观赏2019-8-28337.1数据查询联接查询谢谢观赏2019-8-2834347.1数据查询数据查询联接可分为以下几类:联接可分为以下几类:n内部联接内部联接包括同等联接和自然联接包括同等联接和自然联接,使用比较运算符使用比较运算符(=)根据每个表的通用列中根据每个表的通用列中的值匹配两个表中的行。的值匹配两个表中的行。n外部联接外部联接左向外部联接左向外部联接(LEFTJOIN或或LEFTOUTERJOIN)不管第二个表不管第二个表中是否有匹配的数据,结果中都将包括第一个表中的所有行中是否有匹配的数据,结果中都将包括第一个表中的所有行;右向外部联接右向外部联接(RIGHTJOIN或或RIGHTOUTERJOIN)不管第一个不管第一个表中是否有匹配的数据,结果中都将包括第二个表中的所有行。表中是否有匹配的数据,结果中都将包括第二个表中的所有行。;完整外部联接完整外部联接(FULLJOIN或或FULLOUTERJOIN)将包括两个表中将包括两个表中的所有行,不论另一个表中是否有匹配的值。的所有行,不论另一个表中是否有匹配的值。n交叉联接交叉联接左表中的每一行均与右表中的所有行组合。交叉联接也称作笛卡尔左表中的每一行均与右表中的所有行组合。交叉联接也称作笛卡尔积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。积。第一个表的行数乘以第二个表的行数等于笛卡尔积结果集的大小。谢谢观赏2019-8-28347.1数据查询联接可分为以下几类:谢谢观赏2019-35357.1数据查询数据查询n子查询子查询子查询是一个嵌套在子查询是一个嵌套在SELECT、INSERT、UPDATE或或DELETE语句或其他子查询中的查询。语句或其他子查询中的查询。子查询也称为内部查询或内部选择,而包含子查询的语子查询也称为内部查询或内部选择,而包含子查询的语句也称为外部查询或外部选择。句也称为外部查询或外部选择。注意:注意:n许多包含子查询的许多包含子查询的Transact-SQL语句都可以改用联接表语句都可以改用联接表示示,其他问题只能通过子查询提出。,其他问题只能通过子查询提出。n联接总是可以表示为子查询联接总是可以表示为子查询。谢谢观赏2019-8-28357.1数据查询子查询谢谢观赏2019-8-2836367.1数据查询数据查询(1)子查询规则子查询规则n通过比较运算符引入的子查询的选择列表只能包括一个表达式或列通过比较运算符引入的子查询的选择列表只能包括一个表达式或列名称名称(对对SELECT*执行的执行的EXISTS或对列表执行的或对列表执行的IN子查询除外子查询除外)。n如果外部查询的如果外部查询的WHERE子句包括列名称,它必须与子查询选择列表子句包括列名称,它必须与子查询选择列表中的列是联接兼容的。中的列是联接兼容的。nntext、text和和image数据类型不能用在子查询的选择列表中。数据类型不能用在子查询的选择列表中。n由于必须返回单个值,所以由未修改的比较运算符由于必须返回单个值,所以由未修改的比较运算符(即后面未跟关键即后面未跟关键字字ANY或或ALL的运算符的运算符)引入的子查询不能包含引入的子查询不能包含GROUPBY和和HAVING子句。子句。n包含包含GROUPBY的子查询不能使用的子查询不能使用DISTINCT关键字。关键字。n不能指定不能指定COMPUTE和和INTO子句。子句。n只有指定了只有指定了TOP时才能指定时才能指定ORDERBY。n不能更新使用子查询创建的视图。不能更新使用子查询创建的视图。谢谢观赏2019-8-28367.1数据查询(1)子查询规则谢谢观赏2019-8-37377.1数据查询数据查询(2)在子查询中限定列名在子查询中限定列名一般的规则是,语句中的列名通过同级一般的规则是,语句中的列名通过同级FROM子句中引子句中引用的表来隐性限定。如果子查询的用的表来隐性限定。如果子查询的FROM子句中引用的表中子句中引用的表中不存在列,则它是由外部查询的不存在列,则它是由外部查询的FROM子句中引用的表隐性子句中引用的表隐性限定的。限定的。如果子查询的如果子查询的FROM子句中引用的表中不存在子查询中子句中引用的表中不存在子查询中引用的列,而外部查询的引用的列,而外部查询的FROM子句引用的表中存在该列子句引用的表中存在该列。谢谢观赏2019-8-28377.1数据查询(2)在子查询中限定列名谢谢观赏2038387.1数据查询数据查询例如:例如:USEteachingGOSELECTstudent.SNAMEFROMstudentWHEREstudent.SNOIN(SELECTs_c.SNOFROMs_cWHEREs_c.CNO=C2)GO谢谢观赏2019-8-28387.1数据查询例如:谢谢观赏2019-8-2839397.1数据查询数据查询(3)子查询类型子查询类型n使用别名的子查询使用别名的子查询子查询和外部查询引用同一表的子查询和外部查询引用同一表的SELECT语句可称为自语句可称为自联接联接(将某个表与自身联接将某个表与自身联接),由于自联接的表会以两种不同,由于自联接的表会以两种不同的角色出现,因此必须有表别名的角色出现,因此必须有表别名。n使用使用IN和和NOTIN的子查询的子查询通过通过IN或或NOTIN引入的子查询结果是包含零个值或多个引入的子查询结果是包含零个值或多个值的列表。子查询返回结果之后,外部查询将利用这些结果。值的列表。子查询返回结果之后,外部查询将利用这些结果。谢谢观赏2019-8-28397.1数据查询(3)子查询类型谢谢观赏2019-8-40407.1数据查询数据查询例如:下面的查询查找学生例如:下面的查询查找学生S3所选所有课程的名称所选所有课程的名称。USEteachingGOSELECTCNAMEFROMcourseWHERECNOIN(SELECTCNOFROMs_cWHERESNO=S3)GO执行结果如图执行结果如图7.46所示所示。谢谢观赏2019-8-28407.1数据查询例如:下面的查询查找学生S3所选所有41417.1数据查询数据查询n使用比较运算符的子查询使用比较运算符的子查询子查询可以由一个比较运算符子查询可以由一个比较运算符=、=、!或或(SELECTAVG(AGE)FROMstudent)执行结果如图执行结果如图7.50所示所示。谢谢观赏2019-8-28417.1数据查询使用比较运算符的子查询谢谢观赏20142427.1数据查询数据查询(4)用用ANY、SOME或或ALL修改的比较运算符修改的比较运算符可以用可以用ALL或或ANY关键字修改引入子查询的比较运算符关键字修改引入子查询的比较运算符。若要使带有若要使带有ALL的子查询中的行满足外部查询中指定的的子查询中的行满足外部查询中指定的条件,引入子查询的列中的值必须大于子查询返回的值列表条件,引入子查询的列中的值必须大于子查询返回的值列表中的每个值。中的每个值。同样,同样,ANY表示要使某一行满足外部查询中指定的条件,表示要使某一行满足外部查询中指定的条件,引入子查询的列中的值必须至少大于子查询返回的值列表中引入子查询的列中的值必须至少大于子查询返回的值列表中的一个值。的一个值。=ANY运算符与运算符与IN等效,等效,ANY运算符则不同于运算符则不同于NOTIN,ALL与与NOTIN表示的意思相同表示的意思相同。谢谢观赏2019-8-28427.1数据查询(4)用ANY、SOME或ALL修改的43437.1数据查询数据查询(5)使用使用EXISTS和和NOTEXISTS的子查询的子查询使用使用EXISTS关键字引入一个子查询时,相当于进行一次关键字引入一个子查询时,相当于进行一次存在测试。外部查询的存在测试。外部查询的WHERE子句测试子查询返回的行是子句测试子查询返回的行是否存在。子查询实际上不产生任何数据,它只返回否存在。子查询实际上不产生任何数据,它只返回TRUE或或FALSE值值。使用使用EXISTS引入的子查询的语法格式如下。引入的子查询的语法格式如下。WHERENOTEXISTS(subquery)注意:注意:nEXISTS关键字前面没有列名、常量或其他表达式关键字前面没有列名、常量或其他表达式。n由由EXISTS引入的子查询的选择列表通常几乎都是由星号引入的子查询的选择列表通常几乎都是由星号(*)组成组成。谢谢观赏2019-8-28437.1数据查询(5)使用EXISTS和NOTEXI44447.1数据查询数据查询例如:查询选修例如:查询选修C2课程的所有学生的姓名课程的所有学生的姓名USEteachingGOSELECTSNAMEFROMstudentWHEREEXISTS(SELECT*FROMs_cWHERESNO=Student.SNOANDCNO=C2)GO执行结果如图执行结果如图7.54所示所示谢谢观赏2019-8-28447.1数据查询例如:查询选修C2课程的所有学生的姓名45457.2数据更新数据更新若若对对数数据据进进行行更更新新需需要要对对目目标标表表有有相相应应的的INSERT权权限限、UPDATE权限和权限和DELETE权限权限。默默认认情情况况下下,INSERT、UPDATE和和DELETE权权限限被被授授予予sysadmin固固定定服服务务器器角角色色成成员员、db_owner和和db_datawriter固固定定数数据据库库角角色色成成员员以以及及表表的的所所有有者者。sysadmin、db_owner和和db_securityadmin角角色色成成员员和和表表所所有有者者可可以以将将权权限限传传递递给给其他用户。其他用户。谢谢观赏2019-8-28457.2数据更新若对数据进行更新需要对目标表有相应的I46467.2数据更新数据更新注意:注意:n如果如果UPDATE语句包含语句包含WHERE子句,或子句,或SET子句中的子句中的expression使用了表中的某个列,则还要求更新的表具有使用了表中的某个列,则还要求更新的表具有SELECT权限权限。n如果如果DELETE语句包含语句包含WHERE子句,则还必须有子句,则还必须有SELECT权限。权限。谢谢观赏2019-8-28467.2数据更新注意:谢谢观赏2019-8-2847477.2数据更新数据更新nINSERT插入数据插入数据(1)使用使用INSERT命令插入数据命令插入数据INSERT命令的语法格式如下命令的语法格式如下:INSERTINTOtable_or_view(column_list)VALUESdata_valuesncolumn_list是用逗号分隔的一些列名称,可用来指定接收是用逗号分隔的一些列名称,可用来指定接收数据的列数据的列,未列出的所有列中插入默认值未列出的所有列中插入默认值(如果为列定义了默如果为列定义了默认值认值)或或NULL值值。如果未指定。如果未指定column_list,表或视图中的所,表或视图中的所有列都将接收到数据。有列都将接收到数据。nVALUESdata_values子句用于指定插入的一行数据值,子句用于指定插入的一行数据值,所提供的数据值必须与列表中的列匹配所提供的数据值必须与列表中的列匹配。谢谢观赏2019-8-28477.2数据更新INSERT插入数据谢谢观赏201948487.2数据更新数据更新注意:注意:插入的数据值的数目必须与列数相同,每个数据值的数插入的数据值的数目必须与列数相同,每个数据值的数据类型、精度和小数位数也必须与相应的列的这些属性匹配。据类型、精度和小数位数也必须与相应的列的这些属性匹配。如果没有指定如果没有指定column_list,VALUES指定值的顺序必须与指定值的顺序必须与表或视图中的列顺序一致表或视图中的列顺序一致谢谢观赏2019-8-28487.2数据更新注意:谢谢观赏2019-8-2849497.2数据更新数据更新例如:向数据表例如:向数据表student中插入一新学生的信息中插入一新学生的信息USEteachingGOINSERTINTOstudent(SNO,SNAME,SEX,AGE)VALUES(S7,WU,F,22)GOSELECT*FROMstudentGO执行结果如图执行结果如图7.58所示。所示。谢谢观赏2019-8-28497.2数据更新例如:向数据表student中插入一新50507.2数据更新数据更新(2)将查询结果插入数据表将查询结果插入数据表用用SELECT子查询为一行或多行指定数据值。子查询为一行或多行指定数据值。例如:将所有女学生的学号、姓名放入新表例如:将所有女学生的学号、姓名放入新表F_student中中USEteachingGOCREATETABLEF_student(SNOchar(4)PRIMARYKEY,SNAMEchar(10)notNULL)GOINSERTINTOF_student(SNO,SNAME)SELECTSNO,SNAMEFROMstudentWHERESEX=FGOSELECT*FROMF_studentGO执行结果如图执行结果如图7.61所示。所示。谢谢观赏2019-8-28507.2数据更新(2)将查询结果插入数据表谢谢观赏251517.2数据更新数据更新(3)可以通过使用图形工具插入数据可以通过使用图形工具插入数据具体步骤详见教材具体步骤详见教材谢谢观赏2019-8-28517.2数据更新(3)可以通过使用图形工具插入数据谢52527.2数据更新数据更新nUPDATE更新数据更新数据(1)使用使用UPDATE命令更新数据命令更新数据UPDATE命令的语法格式如下:命令的语法格式如下:UPDATETOP(expression)PERCENTSETcolumn_name=expression|DEFAULT|NULL,.nFROM,.nWHERE;谢谢观赏2019-8-28527.2数据更新UPDATE更新数据谢谢观赏201953537.2数据更新数据更新:=server_name.database_name.schema_name.|database_name.schema_name.|schema_name.table_or_view_name谢谢观赏2019-8-28537.2数据更新:=谢谢观赏20154547.2数据更新数据更新nTOP(expression)PERCENT:指定将要更新:指定将要更新的行数或行百分比的行数或行百分比。nserver_name:表或视图所在服务器的名称:表或视图所在服务器的名称(使用使用链接服务器名称链接服务器名称)。ndatabase_name:数据库的名称:数据库的名称。nschema_name:表或视图所属架构的名称。:表或视图所属架构的名称。ntable_or_view_name:需要更新行的表或视图的:需要更新行的表或视图的名称。名称。nSETcolumn_name=expression|DEFAULT|NULL:指定要更新的列或变量名称的列表:指定要更新的列或变量名称的列表。谢谢观赏2019-8-28547.2数据更新TOP(expression)55557.2数据更新数据更新ncolumn_name包含要更改的数据的列包含要更改的数据的列nexpression指返回单个值的变量、文字值、表达指返回单个值的变量、文字值、表达式或嵌套式或嵌套select语句语句(加括号加括号)。nFROM:指定将表、视图或派生表源用:指定将表、视图或派生表源用于为更新操作提供条件。于为更新操作提供条件。nWHERE:指定条件来限定所更新的:指定条件来限定所更新的行。行。谢谢观赏2019-8-28557.2数据更新column_name包含要更改的数56567.2数据更新数据更新例如:使用简单例如:使用简单UPDATE语句对语句对student表中的所有行更表中的所有行更新新AGE列中的值列中的值。USEteachingGOSELECT*FROMstudentGOUPDATEstudentSETAGE=AGE+1GOSELECT*FROMstudentGO执行结果如图执行结果如图7.64所示。所示。谢谢观赏2019-8-28567.2数据更新例如:使用简单UPDATE语句对stu57577.2数据更新数据更新nDELETE删除数据删除数据(1)使用使用DELETE命令删除数据命令删除数据DELETE命令的语法格式如下命令的语法格式如下:DELETETOP(expression)PERCENTFROMtable_alias|FROMtable_source,.nWHERE;谢谢观赏2019-8-28577.2数据更新DELETE删除数据谢谢观赏20158587.2数据更新数据更新:=server_name.database_name.schema_name.|database_name.schema_name.|schema_name.table_or_view_nametable_or_view:指定要从中删除行的表或视图:指定要从中删除行的表或视图。DELETE语句只从表中删除行,要从数据库中删除表,语句只从表中删除行,要从数据库中删除表,可以使用可以使用DROPTABLE语句。语句。谢谢观赏2019-8-28587.2数据更新:=谢谢观赏20159597.2数据更新数据更新例如:从例如:从s_c表中删除所有行,该例未使用表中删除所有行,该例未使用WHERE子句子句限制删除的行数。限制删除的行数。USEteachingGOSELECT*FROMs_cGODELETEFROMs_cGOSELECT*FROMs_cGO谢谢观赏2019-8-28597.2数据更新例如:从s_c表中删除所有行,该例未使60607.2数据更新数据更新(2)使用使用TRUNCATETABLE命令删除所有行命令删除所有行TRUNCATETABLE命令的语法格式如下。命令的语法格式如下。TRUNCATETABLEdatabase_name.schema_name.|schema_name.table_name;TRUNCATETABLE删除表中的所有行,但表结构及其删除表中的所有行,但表结构及其列、约束、索引等保持不变。列、约束、索引等保持不变。TRUNCATETABLE在功能上与没有在功能上与没有WHERE子句的子句的DELETE语句相同,但是语句相同,但是TRUNCATETABLE速度更快,使速度更快,使用的系统资源和事务日志资源更少。用的系统资源和事务日志资源更少。谢谢观赏2019-8-28607.2数据更新(2)使用TRUNCATETABLE61617.2数据更新数据更新例如:删除例如:删除s_c表中的所有选课信息。表中的所有选课信息。USEteachingGOSELECT*FROMs_cGOTRUNCATETABLEs_cGOSELECT*FROMs_cGO谢谢观赏2019-8-28617.2数据更新例如:删除s_c表中的所有选课信息。谢62627.2数据更新数据更新不能对以下表使用不能对以下表使用TRUNCATETABLE。n由由FOREIGNKEY约束引用的表。约束引用的表。n参与索引视图的表。参与索引视图的表。n通过使用事务复制或合并复制发布的表。通过使用事务复制或合并复制发布的表。对于具有以上一个或多个特征的表,可以使用对于具有以上一个或多个特征的表,可以使用DELETE语句语句(3)可是使用图形工具删除数据行可是使用图形工具删除数据行具体步骤详见教材具体步骤详见教材谢谢观赏2019-8-28627.2数据更新不能对以下表使用TRUNCATETA63637.2数据更新数据更新例如:删除例如:删除s_c表中的所有选课信息。表中的所有选课信息。USEteachingGOSELECT*FROMs_cGOTRUNCATETABLEs_cGOSELECT*FROMs_cGO谢谢观赏2019-8-28637.2数据更新例如:删除s_c表中的所有选课信息。谢64647.2数据更新数据更新例如:删除例如:删除s_c表中的所有选课信息。表中的所有选课信息。USEteachingGOSELECT*FROMs_cGOTRUNCATETABLEs_cGOSELECT*FROMs_cGO谢谢观赏2019-8-28647.2数据更新例如:删除s_c表中的所有选课信息。谢6565谢谢观赏2019-8-2865谢谢观赏2019-8-28
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学培训


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!