




已阅读5页,还剩26页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQL基础知识版本 修订历史记录日期计划内容计划用时实际用时2008-06-03熟悉SELECT子句2h3:30h2008-06-03熟悉1.1其它子句3h2:10h2008-06-04完成DML 和 DDL5H5h2008-06-05完成3.T-SQL6h6h2008-60-10完成数据存储和触发器6h6.5h目录1.数据操纵语言(DML)41.1SELECT41.1.1SELECT 子句41.1.2FROM 子句51.1.3WHERE 子句51.1.4GROUP BY 子句51.1.5HAVING 子句61.1.6ORDER BY 子句61.1.7其它关键字71.2INSERT81.2.1INSERT语句81.2.2INSERTSELECT 语句81.3UPDATE91.3.1更新基于表的数据91.3.2基于其它表更新数据行91.3.3使用子查询更新指定的行91.4DELETE102.数据定义语言(DDL)102.1CREATE102.2ALTER102.3DROP113.T-SQL113.1系统内建函数113.1.1日期和时间函数113.1.2聚合函数113.1.3字符串函数123.1.4系统统计函数123.2子查询133.2.1使用子查询查询数据133.2.2子查询的限制143.3联合查询143.3.1使用UNION创建联合查询143.3.2联合查询的关键字 ALL153.3.3使用INNER JOIN153.3.4使用LEFT JOIN 和 RIGHT JOIN建立连接163.3.5使用交叉连接163.4其他复杂应用163.4.1使用COMPUTE(BY)子句163.4.2交叉表查询173.5查询语句的性能优化173.5.1通配符的使用173.5.2ORDER BY语句173.5.3其它174.视图及其应用174.1视图简介174.2视图的创建和管理174.2.1定义视图174.2.2修改视图定义184.2.3删除视图184.3利用视图简化查询操作184.3.1查询视图184.3.2使用视图关联多张表194.3.3使用视图提供聚合值194.4更新视图中的数据194.5加密视图205.触发器和存储过程205.1存储过程简介205.1.1存储过程的优点215.1.2使用存储过程管理SQL Server215.1.3使用扩展存储过程215.2存储过程的创建和管理215.2.1定义存储过程215.2.2修改和删除存储过程245.2.3存储过程的加密245.2.4存储过程中的错误处理255.3触发器的创建和管理255.3.1创建触发器265.3.2修改和删除触发器265.3.3用触发器实现强制业务规则275.4使用触发器和存储过程必须注意的地方295.4.1重新编译存储过程和触发器295.4.2使用存储过程的注意事项295.4.3触发器的T-SQL限制30SQL基础知识1. 说明本文针对SqlServer,有一些语法不适用于ORACLE,但应该也有一些借鉴作用。2. 数据操纵语言(DML)2.1 SELECT2.1.1 SELECT 子句Select子句是select语句的开始部分,它限定了查询结果返回的列通常情况下不要使用 * 关键字来返回所有列,除非有明确的需求要查询所有字段,因为 * 关键字会大大降低查询的效率,一般应指名具体的查询列。当输入的字段名包括空格和标点符号时,用方括号把它括起来例如:要查询表Contract中前50条记录,要求返回两列数据:合同名称和合同总金额 select TOP 50 ContractName as 合同名称,ContractVolume as 合同总金额From ContractSELECT子句的语法:SELECT ALL | DISTINCT TOP n PERCENT WITH TIES :=* | table_name | view_name | table_alias .* | column_name | expression | IDENTITYCOL | ROWGUIDCOL AS column_alias | column_alias = expression ,.n 参数: ALL 指定结果集中可以显示重复行。是默认设置DISTINCT 指定在结果集中只能显示唯一行。空值被认为是相等的TOP n PERCENT 指定从结果集中输出前n行。n 是介于 0 和 4294967295 之间的整数。如果还指定了 PERCENT,则只从结果集中输出前百分之 n 行。当指定时带 PERCENT 时,n 必须是介于 0 和 100 之间的整数。如果查询包含 ORDER BY 子句,将输出由 ORDER BY 子句排序的前 n 行(或前百分之 n 行)。如果查询没有 ORDER BY 子句,行的顺序将任意。WITH TIES 指定从基本结果集中返回附加的行,这些行包含与出现在 TOP n (PERCENT) 行最后的 ORDER BY 列中的值相同的值。如果指定了 ORDER BY 子句,则只能指定 TOP .WITH TIES。(*) 为结果集选择的列。 := 选择列表是以逗号分割的一系列表达式。* 指定在FRPM子句中内返回的所有表和视图内的所有列。列按FROM子句所指定的由表或视图返回,并按它们在表或视图内的顺序返回Table_name | view_name | table_alias 将 * 的作用限制为指定的表或视图。Cloumn_name 要返回的列名。要限定列名,以避免二义性引用。参照FROM子句Expression 是列名、常量、函数以及由运算符连接的列名、常量和函数的任意组合,或者是子查询。IDENTITYCOL 返回标识列。如果FROM子句中的多个表内包含标识列,那么就要避免二义性引用来对标识列加以限定。具体方法参照ROWGUIDCOL。ROWGUIDCOL 返回行全局唯一标识列。如果在From子句中多个表包含ROWGUIDCOL属性列,则必须通过特定的表名来限定(例如:T1.ROWGUIDCOL)ROWGUIDCOL。Column_alias 是查询结果集内替换列名的可选名。例如:可以为名为quality指定别名,如Qty。别名还可以为表达式的结果指定名称,例如:USE NorthwindSELECT AVG(UnitPrice) AS Average PriceFROM Order Details备注:column_alias 可用于ORDER BY子句。但是不能用于WHERE、GROUP BY或HAVING子句。如果查询表达式是DECLARE CURSOR语句一部分,则column_alias不能用在FOR UPDATE子句中。(*)2.1.2 FROM 子句From子句跟在SELECT语句后面,指定要从中查询数据的表,可以是一个表,也可以是视图、派生表或是多个表的联合当From子句中的两个表中包含重复名的列时,要对列名加上限定。例如,在表Constract和ContractDetail表内都有名为合同号ContractId列。如果在查询中连接两个表,可以在选择列表中将合同号指定为Contract.ContractId例如:查询每个合同的合同明细金额之和,要求返回合同号与合同明细金额总和,合同表和合同明细表是主子表的关系,合同明细表有3个字段分别是:ContractID, ContractDetailID,Volume。SELECT a.ContractID ,sum(Volume)FROM Contract a LEFT JOIN ContractDetail b ON a.ContractID = b.ContractIDGROUP BY a.ContractID备注:有诸如sum()的聚合函数时候一般要有GROUP BY 2.1.3 WHERE 子句WHERE是可选的,但是在使用时必须放在FROM之后,用来限定查询结果,只有符合条件的记录才会显示出来。WHERE子句可以是单一条件,也可以是组合而成的复杂条件。例如:查询合同表Contract中所有签订日期在2002年1月21号以后的记录SELECT ContractID,ContractName,ContractVolume,SignDate FROM Contract WHERE SignDate 2002-01-21例如:查询总金额小于10万的合同,或者签订日期在2002年4月1号与2008年4月1号之间的合同。因为查询条件限定词AND和OR的执行顺序是按先后顺序执行的,因此需要先执行的部分加括号。SQL语句如下:SELECT ContractID,ContractName,ContractVolume,SignDateFROM ContractWHERE ContractVolume 2002-04-01 AND SignDate 2002-01-012.1.6 ORDER BY 子句如果要将数据以排序时的顺序显示出来,就要用ORDER BY。ORDER BY使用两个保留字:ASC和DESC,前者是按递增的顺序排序,后者是按递减的顺序排序,默认的顺序是按递增的顺序排序。在ORDER BY中不能使用ntext、text和image列。空值被视为最低的可能值。可以指定多个排序列,SQL Sever对ORDER BY子句中的项目数没有限制。然而,对于排序操作所需的中间工作表的大小有8060字节的限制,这限制了ORDER BY子句中指定列的合计的大小。例如:按合同总金额从大到小的顺序,对于所有合同排序输出SELECT *FROM ContractORDER BY ContractVolume DESC例如:查询每个单位每个合同明细金额之和,要求该合同为2002年1月1日之后签名册定的合同,并且按单位名称和签订日期升序排序SELECT ContractName,CompanyName,SUM(Volume)FROM Contract,Company,ContractDetail WHERE Contract. ContractID = ContractDetail.ContractID AND Contract.CompanyID = Company.CompanyIDGROUP BY ContractName,CompanyName,SignDateHAVING SignDate 2002-01-01ORDER BY CompanyName , SignDate 2.1.7 其它关键字 在SELECT语句中,还有其它一些关键字,用来限定查询结果或数据来源,常用的有:NULL , LIKE , CUBE , CASE , IN和OPENROWSET。1、 关键字 NULLNULL值和空值不同,它表示没有输入任何数据,可以在WHERE子句中用IS NULL来判断某一列数否输入了数据,通常在IS NULL来判断为没有数据输入或者用IS NOT NULL来判断已经输入了数据。例如:检查合同表中SignDate为NULL的记录SELECT *FROM ContractWHERE SignDate IS NULL2、 关键字 LIKE使用LIKE关键字可以实现模糊查询的功能。确定给定的字符串是否与指定的模式匹配。模式可以包括常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可以使用字符串的任意片段匹配通配符。3、 关键字 CUBE指定在结果集不仅包含由GROUP BY提供的正常行,还包含汇总行。该关键字与GROUP BY一起使用,对于汇总数据非常有用。例如:查询与个公司签订的所有合同的总金额之和,并且要显示汇总行SELECT CompanyName,SUM(Volume)FROM Contract,CompanyWHERE Contract.CompanyID = Company.CompanyIDGROUP BY CompanyNameWITH CUBE4、 关键字 CASE使用CASE可以计算条件列表并返回多个可能的结果表达式之一。例如:查询所有公司的合同,如果合同总金额之和小于10000元,则显示该公司为“小公司”,如果大于10000则显示为“大公司”,使用CASE关键字SELECT CompanyName,公司规模 = CASEWHEN SUM(ContractVolume) 10000 THEN 大公司WHEN SUM(ContractVolume) 2002-01-012.3 UPDATEUPDATE语句用于更新一个表中选定行的一列或多列的值。要更新的目标表在语句中定义,SET子句则指定要更新那些列并计算它们的值。UPDATE语句总是包含WHERE语句。因为UPDATE语句具有不可逆转性,所以要慎用。2.3.1 更新基于表的数据例如:更新合同表中所有单位代码为“0001”的合同记录,使其单位代码为“0002”UPDATE ContractSET CompanyID = 0002WHERE CompanyID = 00012.3.2 基于其它表更新数据行通过UPDATE语句可以使用来自另一个表的信息,以实现信息的共享处理。该语句在实际应用中也可以起到分解SQL语句的作用。UPDATE ContractSET ContractVolume = Contract. ContractVolume + ContractDetail.VolumeFROM Contract,ContractDetailWHERE Contract.ContractID = ContractDetail.ContractID2.3.3 使用子查询更新指定的行利用WHERE子句,可以使用UPDATE语句更新符合条件的记录,如果该条件来自于其它的表,则可以利用子查询来指定外部条件。例如:更新合同表中总金额字段,条件是如果在合同明细中该合同没有记录,则使其合同总金额为0。UPDATE ContractSET ContractVolume = 0WHERE ContractID NOT IN(SELECT ContractID FROM ContractDetail)2.4 DELETEDELETE用于从表中删除数据,可以与WHERE子句配合使用,用于删除符合条件的记录。当使用DELETE删除记录后,不能取消此操作。如果想要知道哪些记录已被删除,建议首先验证使用相同条件的选定查询的结果。注意:如果要删除表中的所有行,则TRUNCATE TABLE 比DELETE快。DELETE以物理方式一次删除一行,并在事务日志中记录每个删除的行。TRUNCATE TABLE 则释放所有与表关联的页。因此TRUNCATE TABLE比DELETE快且需要的事务日志空间更少。TRUNCATE TABLE在功能上与不带WHERE子句的DELETE相当。例如:用DELETE删除表的所有行。删除明细合同中的所有记录DELETE FROM ContractDetail例如:用DELETE删除表的指定行。删除合同表中所有很认同金额为0并且签订日期在2002年5月1日之前的合同记录DELETE FROM ContractWHERE ContractVolume = 0 AND SignDate 2002-05-013. 数据定义语言(DDL) 数据定义语言(DDL)用来定义数据的结构,如创建、修改或者删除数据库对象。常用的数据定义语言有:CREATE , ALTER , DROP3.1 CREATECREATE TABLE 语句完成数据表的定义。典型语法结构如下:CREATE TABLE table_name (Field_name data_type NOT NULL | NULL, PRIMARY KEY)实例参照1.2.2创建临时表3.2 ALTERALTER TABLE语句可以完成对现有表的修改。可以更改、添加、除去列和约束,或者启用和禁用约束和触发器。典型语法结构如下ALTER TABLE table_nameADD COLUMN field_name datatype通常表的结构可以用Create table一次创建,但是当发现表的定义不符合要求或者要求建立新的约束的时候,可以用ALTER TABLE 来调整表结构。例如:为表Contract增加一个约束,使ContractID字段成为主键ALTER TABLE ContractCONSTRAINT PK_Contract PRIMARY KEY(ContractID) ON PRIMARY例如:为表Contract增加一个新的字段CompanyID,数据类型为数值类型数据(varchar),数据长度为20个字符,允许空值ALTER TABLE ContractADD CompanyID varchar (20) ,NULL例如:改变表Contract中的字段ContractVolume的数据类型,使其数据类型为Money类型ALTER TABLE ContractALTER COLUMN ContractVolume Money3.3 DROPDROP TABLE语句完成从数据库中删除表的操作。同时删除该表的所有数据、索引、触发器、约束和权限规范。典型语法结构如下:DROP TABLE table_nameDROP TABLE语句不能用于除去由FOREIGN KEY约束引用的表。必须先除去引用的FOREIGN KEY约束或引用的表。除去表时,表上的规则或默认值将解除绑定,任何与表关联的约束和触发器将自动除去。如果重新创建表,必须重新绑定适当的规则和默认值,重新创建任何触发器并添加必要的约束。在删除表之前,可以用系统存储过程sp_depends检查依存关系,显示有关数据库对象相关性的信息,格式为:sp_depends tablename在系统表中不能使用DROP TABLE语句例如:从当前数据库中删除Contract表及其数据和索引DROP TABLE Contract4. T-SQL4.1 系统内建函数4.1.1 日期和时间函数SQL Server提供的日期和时间函数有如下几种:DATEADD : 在向指定日期加上一段时间的基础上,返回新的日期值。DATEDIFF : 返回跨两个指定日期的日期和时间边界数。DATENAME : 返回代表指定日期的指定日期部分的字符串。DATEPART : 返回代表指定日期的指定日期部分的整数。DAY : 返回代表指定日期的天的日期部分的整数。GETDATE : 返回当前系统日期和时间。GETUTCDATE : 返回当前UTC时间(世界时间坐标和好、格林尼治标准时间)的值。MONTH : 返回代表指定日期月份的整数。YEAR : 返回代表指定日期中的年份的整数。例如:列出所有合同签订日期,要求在签订日期上加5天显示,列出合同号、签订日期。SELECT ContractID,DATEADD(day,5,SignDate)FROM Contract例如:列出所有合同签订日期与现在日期所差的天数,列出合同号、签订日期。SELECT ContractID,DATEDIFF(day,SignDate,GETDATE()FROM Contract4.1.2 聚合函数聚合函数对一组值执行计算并返回单一的值,经常与SELECT语句的GROUP BY子句一起使用。主要的聚合函数有:AVG : 取平均值MAX : 取最大值MIN : 取最小值SUM : 求和函数COUNT : 返回组中项目的数量例如:列出所有公司的所有合同的合同总金额的平均值,要求列出公司名称,合同平均值。SELECT CompanyName,AVG(ContractVolume) as 合同平均值FROM Contract,CompanyWHERE Contract.CompanyID = Company.CompanyIDGROUP BY CompanyName例如:列出各合同的合同明细数量,即同一个合同有几条合同明细记录,要求显示合同号,明细数量。SELECT ContractID,COUNT(ContractDetailID)FROM ContractDetailGROUP BY ContractID4.1.3 字符串函数字符串函数对字符串输入值执行操作,返回字符串或数字值。常用的有:ASCII : 返回字符表达式最左端字符的ASCII值。CHAR : 将ASCII代码转换为字符的字符串函数。SPACE : 返回由重复的空格组成的字符串REPLACE : 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。STR : 由数字数据转换来的字符数据。LEFT : 返回从字符串左边开始指定个数的字符。SUBSTRING : 返回字符串表达式的一部分。LEN : 返回给定字符串表达式的字符(不是字节)的个数,其中不包括尾随空格。REVERSE : 返回字符串表达式的反转。LOWER : 将大写字符数据转换为小写字符数据后返回字符表达式。RIGHT : 返回字符串中从右边开始指定个数的字符。UPPER : 返回将小写字符数据转换为大写的字符串表达式。LTRIM : 删除起始空格后返回字符串表达式。RTRIM : 截断所有尾随空格后返回一个字符串。例如:用“有限公司”替换公司信息表中公司名称字段中的“公司”。UPDATE CompanySET CompanyName = REPLACE(CompanyName, 公司, 有限公司)例如:返回公司信息表中公司名称的字符长度,要求显示列:公司名称、字符长度。SELECT CompanyName,LEN(CompanyName) as 字符长度FROM Company例如:把合同表中的合同号的小写字母全部变为大写字母显示,要求显示列:合同号,合同名称。SELECT UPPER(ContractID),ContractNameFROM Contract4.1.4 系统统计函数系统统计函数返回系统的统计信息,包括:CONNECTIONS : 返回自上次启动SQL Server以来连接或试图连接的次数。CPU_BUSY : 返回自上次启动SQL Server 以来CPU的工作时间,单位为ms(基于系统计时器的分辨率)。TIMETICKS : 返回一刻度的微秒数。IDLE : 返回SQL Server自上次启动后闲置的时间,单位为ms(基于系统计时器的分辨率)。TOTAL_ERROR : 返回SQL Server自上次启动后,所遇到的磁盘读/写错误数。TOTAL_READ : 返回SQL Server自上次启动后读取磁盘(不是读取高速缓存)的次数。TOTAL_WRITE : 返回SQL Server自上次启动后写入磁盘的次数。例如:显示自SQL Server启动后到当前日期和时间为止的总的磁盘读写次数(不是读取高速缓存)。SELECT TOTAL_READ as reads,TOTAL_WRITE as writes, GETDATE() AS As of例如:显示自SQL Server启动后到当前日期和时间为止SQL Server CPU的工作时间。SELECT CPU_BUSY as CPU ms, GETDATE() AS As of *4.2 子查询 在SQL语言中,当一个查询语句嵌套在另一个查询条件之中时,称为子查询。4.2.1 使用子查询查询数据子查询可以有几种表现形式:使用 IN 关键字;使用比较运算符;使用 ANY或 ALL关键字;使用 EXISTS 关键字。1、带有IN 关键字的子查询:带有IN关键字的子查询是指父查询和子查询之间用IN连接,判断某个属性列值是否在子查询的结果中。由于在子查询中,子查询的结果会是一个集合,所以关键字IN是子查询中最经常用到的关键字。例如:查询所有在合同明细表中,明细金额为20000元的合同,显示列:合同号、合同名称。SELECT ContractID,ContractNameFROM Contract,ContractDetailWHERE ContractID IN(SELECT ContractID FROM ContractDetail WHERE Volume = 20000)2、带有比较运算符的子查询:带有比较运算符的子查询是指父查询与子查询之间用比较运算符进行连接。当用户能确切知道内层查询返回的是单值时,可以用 , = , = ,!= 或等比较运算符。例如:查询所有合同总金额不等于合同明细表中金额之和的合同,显示合同号、合同名称。该查询可以列出所有合同总金额没有实时反应合同明细金额的合同。SELECT ContractID,ContractNameFROM ContractWHERE ContractVolume != (SELECT SUM(Volume) FROM ContractDetail)3、带有ANY或ALL关键字的子查询:子查询单值时可以用比较运算符。而使用ANY 或 ALL关键字时则必须同时使用比较运算符。例如:查询出所有合同总金额大于合同明细表中任何一个明细金额的合同,显示合同号、合同名称。SELECT ContractID,ContractNameFROM ContractWHERE ContractVolume ANY(SELECT VolumeFROM ContractDetail )4、带有EXISTS关键字的子查询:带有EXISTS关键字的子查询不返回任何实际数据,它只产生逻辑真值“TRUE”或逻辑假值“FALSE”。使用EXISTS后,若内层查询结果非空,则外层的WHERE子句返回真值,否则返回假值。例如:查询所有合同明细金额内一条记录是10000元的合同,列出合同号、合同名称。SELECT ContractID,ContractNameFROM ContractWHERE EXISTS ( SELECT Volume FROM ContractDetail WHERE Volume = 10000 AND ContractID = ContractDetail.ContractID)4.2.2 子查询的限制子查询本身收到以下条件的限制:1、通过比较运算符引入的子查询的选择列表只能包括一个表达式或列名称(分别对SELECT * 或列表尽兴EXISTS和IN操作除外)2、如果外部查询的WHERE子句包括某个列名,则该子句必须与子查询的选择列表中的该列在连接上兼容3、子查询的选择列中不允许出现ntext,text,image数据类型4、由于必须返回单个值,所以由无修改的比较运算符(指其后未接关键字ANY或ALL)引入的子查询不能包括GROUP BY 和HAVING子句。5、包括GROUP BY的子查询不能使用DISTINCT关键字6、不能指定COMPUTE和INTO 子句。7、只有同时指定了TOP,才可以指定ORDER BY8、按约定,通过EXISTS引入的子查询的选择列表由(*)组成,而不使用单个列名。由于通过EXISTS引入的子查询进行了存在测试,并返回TRUE或FALSE而非数据,所以这些子查询的规则与标准选择列表的规则完全相同。备注:如果不是特别的需要,尽量不要使用子查询,因为子查询不如用连接执行的效率高,一般的子查询语句都可以用连接代替。4.3 联合查询 查询结果可以来自多个表,使用UNION可以实现查询结果的合并。也可以用连接实现从多个表中返回数据。连接分为内连接,外连接和交叉连接。内连接(INNER JION)使用比较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN 或FULL JOIN)三种。交叉连接(CROSS JOIN)没有WHERE子句,它返回列表中所有数据行的笛卡尔积。4.3.1 使用UNION创建联合查询若要把多个SELECT语句的结果合并为一个结果,可用UNION操作来完成,使用UNION将多个查询结果合并起来,形成一个完整的查询结果时,系统会自动去掉重复的记录。注意:参加UNION操作的各数据项数目必须相同;对应项的数据类型也必须相同。例如:查询在2002年5月1日签订的合同以及在合同总金额大于10000元的合同SELECT *FROM ContractWHERE SignDate = 2002-05-01UNIONSELECT *FROM ContractWHERE ContractVolume 10000例如:查询在与“南京比邻软件”签订的合同以及在合同明细金额中有一条记录是10000元的合同,显示公司名称,合同号。SELECT CompanyNameFROM Contract,CompanyWHERE Contract.CompanyID = Company.CompanyID AND CompanyName = 南京比邻软件UNION SELECT ContractID ,CompanyName*FROM ContractDetail, Contract,CompanyWHERE Contract.ContractID = ContractDetail.ContractID AND Contract.CompanyID = Company.CompanyID AND *ContractDetail.Volume = 100004.3.2 联合查询的关键字 ALLALL关键字与UNION一起使用,作为它的一个可选参数,使用了ALL关键字以后,在查询结果中将包含所有的行(包括重复行),默认的情况是不用ALL,删除重复行例如:查询在2002年5月1日签订的合同以及在合同总金额大于10000元的合同。如果使用了ALL关键字SELECT *FROM ContractWHERE SignDate = 2002-05-01UNION ALLSELECT *FROM ContractWHERE ContractVolume 10000可能产生重复记录,如果又2002年5月1日签订的合同的金额大于10000元,则在两个子结果集中都会出现,因此SQL Server将会返回重复记录。4.3.3 使用INNER JOIN内连接INNER JOIN 是SQL Server 中默认的连接类型,返回两个表中相匹配的记录,而相连接的两个表中不匹配的记录则不显示。在一个JOIN语句中可以链接多个ON子句。链接的过程是先从相连接的表中生成笛卡尔积,然后根据指定的条件进行筛选。注意:在一个INNER JOIN之中,可以嵌套LEFT JOIN 或RIGHT JOIN,但是在LEFT JOIN 或RIGHT JOIN中不能选择嵌套INNER JOIN。例如:查询在合同表中存在公司的基本信息,为此需要建立合同表与公司信息表的连接SELECT Company.CompanyID, Company.CompanyNameFROM Company INNER JOIN ContractON Company.CompanyID = Contract.CompanyID4.3.4 使用LEFT JOIN 和 RIGHT JOIN建立连接相当于内连接,LEFT JOIN 和 RIGHT JOIN都属于外连接,使用LEFT JOIN来创建一个左边外部外连接。左边外部连接将包含了第一个(左边)开始的两个表中的全部记录,即使在第二个表中并没有相符值的记录。使用RIGHT JOIN来创建一个右边外部外连接。右边外部连接将包含了第二个(右边)开始的两个表中的全部记录,即使在第一个(左边)表中并没有相符值的记录。例如:查询各公司的付款总额,没有付款的公司也要显示。SELECT CompanyName, SUM(ContractPayment.Volume)FROM Company LEFT JOIN ContractON Company.CompanyID = Contract.Compan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国有企业财务管理信息化建设中的业财融合应用研究
- 2025年中国雪茄市场供需现状及投资战略研究报告
- 拼多多用户行为分析与市场研究
- 提高患者对医学教育的接受度的途径与方法研究
- 人工智能在中小客户营销体系中的应用探索
- 中国火麻茶市场深度调研分析及投资前景研究预测报告
- 广告中的情感元素运用
- 成功文创品牌背后的营销策略
- 探索产品设计中的人文关怀与智能体验
- 摄影后期处理技术及在视觉传达中的应用探讨的案例分享
- 县级妇幼保健院发展的问题与策略
- 河南省平顶山市2024-2025学年高一语文下学期期末考试试题1
- 云南省昆明市2024-2025学年高一地理下学期期末考试试题含解析
- 短视频技术与应用智慧树知到期末考试答案章节答案2024年济南大学
- 2024年广东省中考地理试卷(含答案)
- 安徽省合肥一中、六中、八中2025届高一下数学期末复习检测模拟试题含解析
- TRIZ-阿奇舒勒矛盾矩阵表格
- 水产品腌制过程中的质量变化
- 国家开放大学《心理学》形考任务1-4参考答案
- 安徽省砀山县联考2024届物理八年级下册期末考试试题含解析
- TFDSA 0049 2024 人源间充质干细胞外泌体制备与检验规范
评论
0/150
提交评论