安卓课堂知识_第1页
安卓课堂知识_第2页
安卓课堂知识_第3页
安卓课堂知识_第4页
安卓课堂知识_第5页
已阅读5页,还剩54页未读 继续免费阅读

下载本文档

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

文档简介

1、SQL ServerSQL Server实用教程实用教程Page 12021-12-19q6.1 简单简单select查询查询q6.2 select语句的统计功能语句的统计功能q6.3 select语句中的多表连接语句中的多表连接q6.4 子查询子查询SQL ServerSQL Server实用教程实用教程Page 22021-12-19q教学要求:通过本章学习,读者应掌握以下内容:教学要求:通过本章学习,读者应掌握以下内容:v利用利用SELECT语句进行单表查询的方法语句进行单表查询的方法v利用利用SELECT语句进行多表连接查询的方法语句进行多表连接查询的方法v嵌套查询的方法嵌套查询的方法

2、SQL ServerSQL Server实用教程实用教程Page 32021-12-19q 611 SELECT的语法格式的语法格式SELECT 语句的基本语法格式如下:语句的基本语法格式如下:SELECT INTO 新表名新表名 FROM WHERE 条件表达式条件表达式 GROUP BY 列名列表列名列表 HAVING 条件表达式条件表达式 ORDER BY 列名列名1ASC|DESC,列名,列名2ASC|DESC, ,列名,列名nASC|DESC COMPUTE 行聚合函数名(统计表达式)行聚合函数名(统计表达式) ,n BY 分类分类表达式表达式,nSQL ServerSQL Serv

3、er实用教程实用教程Page 42021-12-19q其中各子名说明如下:其中各子名说明如下:q(1)字段列表用于指出要查询的字段,也就是)字段列表用于指出要查询的字段,也就是查询结果中包含的字段的名称。查询结果中包含的字段的名称。q(2)INTO子句用于创建一个新表,并将查询结子句用于创建一个新表,并将查询结果保存到这个新表中。果保存到这个新表中。q(3)FROM子句用于指出所要进行查询的数据子句用于指出所要进行查询的数据来源,即来源于哪些表或视图的名称。来源,即来源于哪些表或视图的名称。q(4)WHERE子句用于指出查询数据时要满足的子句用于指出查询数据时要满足的检索条件。检索条件。q(5

4、)GROUP BY子句用于对查询结果分组。子句用于对查询结果分组。q(6)ORDER BY子句用于对查询结果排序。子句用于对查询结果排序。SQL ServerSQL Server实用教程实用教程Page 52021-12-19qSELECT语句的功能如下:语句的功能如下:q从从FROM列出的数据源表中,找出满足列出的数据源表中,找出满足WHERE检索条件的记录,按检索条件的记录,按SELECT子句的字段列表输子句的字段列表输出查询结果表,在查询结果表中可进行分组与排出查询结果表,在查询结果表中可进行分组与排序。序。q说明:在说明:在SELECT语句中语句中SELECT子句与子句与FROM子子句

5、是不可少的,其余的是可选的。句是不可少的,其余的是可选的。SQL ServerSQL Server实用教程实用教程Page 62021-12-19q612 基本的基本的SELECT语句语句SELECT语句的基本形式如下:语句的基本形式如下:SELECT FROM WHERE 查询条件查询条件q1选择表中若干列选择表中若干列USE xsglGOSELECT 学号学号,姓名姓名FROM xsSQL ServerSQL Server实用教程实用教程Page 72021-12-192查询表中全部列(查询表中全部列(*)q将表中所有属性都选出来,可以有两种方法。一将表中所有属性都选出来,可以有两种方法。

6、一种方法是在种方法是在SELECT命令后面列出所有列名。如命令后面列出所有列名。如果列的显示顺序与其在基表中的顺序相同,也可果列的显示顺序与其在基表中的顺序相同,也可以简单地将以简单地将简写为简写为“*”。USE xsglGO SELECT *FROM kcGOSQL ServerSQL Server实用教程实用教程Page 82021-12-19q 3设置字段别名设置字段别名q T-SQL提供了在提供了在SELECT语句中操作别名的方法。用户可以语句中操作别名的方法。用户可以根据实际需要对查询数据的列标题进行修改,或者为没有标根据实际需要对查询数据的列标题进行修改,或者为没有标题的列加上临时

7、标题。其语法格式为:题的列加上临时标题。其语法格式为:q 列表达式列表达式 as 别名别名q 或:别名或:别名=列表达式列表达式q 【例【例6.3】查询】查询xsgl数据库的数据库的kc表,列出表中的所有记录,表,列出表中的所有记录,每个记录名称依次为课程编号,课程名称,课程学分及课程每个记录名称依次为课程编号,课程名称,课程学分及课程时数。时数。USE xsglGOSELECT 课程号课程号 AS 课程编号课程编号,课程名课程名 AS 课程名称课程名称,学分学分 AS 课课程学分程学分,学时数学时数 AS 课程时数课程时数FROM kcSQL ServerSQL Server实用教程实用教程

8、Page 92021-12-19q4查询经过计算的值查询经过计算的值qSELECT子句的子句的不仅可以是表中的属性不仅可以是表中的属性列,也可以是表达式,包括字符串常量、函数等。列,也可以是表达式,包括字符串常量、函数等。其语法格式为:其语法格式为:q计算字段名计算字段名=表达式表达式q【例【例6.4】查询所有学生的学号,姓名及年龄。】查询所有学生的学号,姓名及年龄。USE xsglGOSELECT 学号学号,姓名姓名,年龄年龄=DATEDIFF(YY,出生时出生时间间,GETDATE()FROM xsGO SQL ServerSQL Server实用教程实用教程Page 102021-12-

9、19q5返回全部记录(返回全部记录(ALL)q要返回所有记录可在要返回所有记录可在SELECT后使用后使用ALL,ALL是是默认设置,因此也可以省略。默认设置,因此也可以省略。q【例【例6.5】 查询查询XS表中所有学生专业。表中所有学生专业。USE xsglGOSELECT 专业专业FROM xsGOSQL ServerSQL Server实用教程实用教程Page 112021-12-19q 6过滤重复记录(过滤重复记录(DISTINCT)q 在例在例6.5的执行结果集中显示重复行。如果让重复行只显的执行结果集中显示重复行。如果让重复行只显示一次,需在示一次,需在SELECT子句中用子句中用

10、DISTINCT指定在结果集指定在结果集中只能显示唯一行。中只能显示唯一行。q 【例【例6.6】 查询查询xs表中的学生所在专业有哪些。(重复专表中的学生所在专业有哪些。(重复专业只显示一次)。业只显示一次)。USE xsglGOSELECT DISTINCT 专业专业FROM xsGOSQL ServerSQL Server实用教程实用教程Page 122021-12-19q 7仅返回前面若干条记录仅返回前面若干条记录q 其语法格式如下:其语法格式如下:SELECT TOP n TOP n PERCENT 列名列名l ,nFROM 表名表名q 其中:其中:TOP n表示返回最前面的表示返回最

11、前面的n行,行,n表示返回的行数。表示返回的行数。TOP n PERCENT表示返回的最前面的表示返回的最前面的n行。行。q 【例【例6.7】查询】查询xs表中前表中前5条记录条记录USE xsglGO SELECT TOP 5 *FROM xsGOSQL ServerSQL Server实用教程实用教程Page 132021-12-19q【例【例6.8】查询】查询XS表中前面表中前面10行记录行记录USE xsglGO SELECT TOP 10 PERCENT *FROM xsGOSQL ServerSQL Server实用教程实用教程Page 142021-12-19q 613 使用使用

12、INTO子句子句q 使用使用INTO子句允许用户定义一个新表,并且把子句允许用户定义一个新表,并且把SELECT子子句的数据插入到新表中,其语法格式如下。句的数据插入到新表中,其语法格式如下。SELECT INTO 新表名新表名 FROM WHERE 查询条件查询条件q 使用使用INTO子句插入数据时,应注意以下几点:子句插入数据时,应注意以下几点:(1)新表不能存在,否则会产生错误信息。)新表不能存在,否则会产生错误信息。(2)新表中的列和行是基于查询结果集的。)新表中的列和行是基于查询结果集的。(3)使用该子句必须在目的数据库中具有)使用该子句必须在目的数据库中具有CREATE TABLE

13、权权限。限。(4)如果新表名称的开头为)如果新表名称的开头为“#”,则生成的是临时表。,则生成的是临时表。q 注意:使用注意:使用INTO子句,通过在子句,通过在WHERE子句中子句中FALSE条件,条件,可以创建一个和源表结构相同的空表。可以创建一个和源表结构相同的空表。SQL ServerSQL Server实用教程实用教程Page 152021-12-19q【例【例6.9】创建一个和】创建一个和xs表结构相同的表结构相同的xs_new表。表。USE xsglGOSELECT * INTO xs_newFROM xsWHERE 68q设置设置“WHERE 68”这样一个明显为逻辑否的这样一

14、个明显为逻辑否的条件的目的是为了只保留条件的目的是为了只保留xs表的结构,而不返回表的结构,而不返回任何记录。任何记录。SQL ServerSQL Server实用教程实用教程Page 162021-12-19q【例【例6.10】 查询所有女生的信息并将结果保存查询所有女生的信息并将结果保存在名为在名为“女生表女生表”的数据表中。的数据表中。USE xsglGO SELECT * INTO 女生表女生表FROM xsWHERE 性别性别=女女SQL ServerSQL Server实用教程实用教程Page 172021-12-19q【例【例6.11】 查询所有男生的信息并将结果存入查询所有男生

15、的信息并将结果存入临时表中。临时表中。USE xsglSELECT *INTO #TEMPDBFROM xsWHERE 性别性别=男男q要查看临时表的内容可用下面的语句:要查看临时表的内容可用下面的语句:SELECT * FROM #TEMPDBSQL ServerSQL Server实用教程实用教程Page 182021-12-19q614 使用使用WHERE子句子句q其语法格式如下:其语法格式如下:SELECT 列名列名1,列名列名nFROM 表名表名WHERE 条件表达式条件表达式q使用使用WHERE子句可以限制查询的记录范围。在子句可以限制查询的记录范围。在使用时,使用时,WHERE子

16、句必须紧跟在子句必须紧跟在FROM子句后子句后面。面。WHERE子句中的条件是子句中的条件是个逻辑表达式,个逻辑表达式,其中可以包含的运算符见表其中可以包含的运算符见表6-1。SQL ServerSQL Server实用教程实用教程Page 192021-12-19SQL ServerSQL Server实用教程实用教程Page 202021-12-19q1比较表达式作查询条件比较表达式作查询条件q比较表达式是逻辑表达式的一种,使用比较表达比较表达式是逻辑表达式的一种,使用比较表达式作为查询条件的一般表达形式是:式作为查询条件的一般表达形式是:q表达式表达式 比较运算符比较运算符 表达式表达式

17、q其中:其中:q表达式为:常量、变量和列表达式的任意有效组表达式为:常量、变量和列表达式的任意有效组合。合。q比较运算符包括:比较运算符包括:=(等于)、(等于)、(大于)、(大于)、(不等于)、(不等于)、!(不大于)、(不大于)、!=(大于等于)、(大于等于)、=(小于等(小于等于)、于)、!=(不等于)。(不等于)。SQL ServerSQL Server实用教程实用教程Page 212021-12-19q【例【例6.12】 查询年龄在查询年龄在23岁以下的学生。岁以下的学生。USE xsglGOSELECT 姓名姓名,性别性别,年龄年龄=DATEDIFF(YEAR,出生出生时间时间,G

18、ETDATE()FROM xsWHERE DATEDIFF(YEAR,出生时出生时间间,GETDATE()=23GOSQL ServerSQL Server实用教程实用教程Page 222021-12-19q2逻辑表达式作查询条件逻辑表达式作查询条件q使用逻辑表达式作为查询条件的一般表达形式是:使用逻辑表达式作为查询条件的一般表达形式是:q表达式表达式1 AND|OR表达式表达式2, 或或NOT 表达式表达式q【例【例6.13】 查询年龄为查询年龄为23岁且性别为岁且性别为“女女”的学的学生。生。USE xsglGOSELECT 姓名姓名,性别性别,年龄年龄=DATEDIFF(YEAR,出生时

19、出生时间间,GETDATE()FROM xsWHERE DATEDIFF(YEAR,出生时出生时间间,GETDATE()=23 AND 性别性别=女女SQL ServerSQL Server实用教程实用教程Page 232021-12-19q 3使用(使用(NOT)BETWEENAND关键字关键字q 其语法格式为:其语法格式为:q 表达式表达式 NOT BETWEEN 表达式表达式l AND 表达式表达式2q 谓词可以用来查找属性值在(或不在)指定范围内的元组,谓词可以用来查找属性值在(或不在)指定范围内的元组,其中其中BETWEEN后是范围的下限(即低值),后是范围的下限(即低值),AND后

20、是范围后是范围的上限(即高值)。使用的上限(即高值)。使用BETWEEN限制查询数据范围时同限制查询数据范围时同时包括了边界值,而使用时包括了边界值,而使用NOT BETWEEN进行查询时没有进行查询时没有包括边界值。包括边界值。q 【例【例6.14】 查询年龄在查询年龄在20到到22之间的女学生的学号,姓名,之间的女学生的学号,姓名,年龄。年龄。USE xsglGOSELECT 姓名姓名,性别性别,年龄年龄=DATEDIFF(YEAR,出生时出生时间间,GETDATE()FROM xsWHERE DATEDIFF(YEAR,出生时出生时间间,GETDATE()BETWEEN 20 AND 2

21、2 AND 性别性别=女女SQL ServerSQL Server实用教程实用教程Page 242021-12-19q 4使用使用IN关键字关键字q 同同BETWEEN关键字一样,关键字一样,IN的引入也是为了更方便地限制的引入也是为了更方便地限制检索数据的范围,灵活使用检索数据的范围,灵活使用IN关键字,可以用简洁的语句实关键字,可以用简洁的语句实现结构复杂的查询。现结构复杂的查询。q 语法格式为:语法格式为:q 表达式表达式 NOT IN (表达式(表达式1,表达式表达式2,表达式表达式n)q 如果如果“表达式表达式”的值是谓词的值是谓词IN后面括号中列出的表达式后面括号中列出的表达式1,

22、表达式表达式2,表达式表达式n的值之一,则条件为真。的值之一,则条件为真。q 【例【例6.15】查询选修了】查询选修了“a003”和和“j003”的学生的学号。的学生的学号。USE xsglGOSELECT DISTINCT 学号学号FROM cjWHERE 课程号课程号 IN (a003, j003)GOSQL ServerSQL Server实用教程实用教程Page 252021-12-19q5使用使用LIKE关键字关键字q语法格式:语法格式:q表达式表达式 NOT LIKE q其含义是查找指定的属性列值与其含义是查找指定的属性列值与相匹配相匹配的元组。的元组。可以是一个完整的字符串,也可

23、以是一个完整的字符串,也可以含有通配符。可以含有通配符。SQL Server提供了以下提供了以下4种通配种通配符供用户灵活实现复杂的查询条件。符供用户灵活实现复杂的查询条件。v(百分号):表示从(百分号):表示从0到到n个任意字符。个任意字符。v_(下划线):表示单个的任意字符。(下划线):表示单个的任意字符。v(封闭方括号):表示方括号里列出的任意一个字符。(封闭方括号):表示方括号里列出的任意一个字符。v:任意一个没有在方括号里列出的字符。:任意一个没有在方括号里列出的字符。q需要注意的是,以上所有通配符都只有在需要注意的是,以上所有通配符都只有在LIKE子句子句中才有意义,否则通配符会被

24、当作普通字符处理。中才有意义,否则通配符会被当作普通字符处理。SQL ServerSQL Server实用教程实用教程Page 262021-12-19q【例【例6.16】查询姓】查询姓“张张”学生的学号及姓名学生的学号及姓名USE xsglGOSELECT 学号学号,姓名姓名FROM xsWHERE 姓名姓名 LIKE 张张%GO注意:通配符和字符串必须括在单引号中。要查找注意:通配符和字符串必须括在单引号中。要查找通配符本身时,需将它们用方括号括起来。例如:通配符本身时,需将它们用方括号括起来。例如:LIKE 表示要匹配表示要匹配“”。SQL ServerSQL Server实用教程实用教

25、程Page 272021-12-19q 6涉及空值的查询涉及空值的查询q 对于空值(对于空值(NULL)要用)要用IS 进行连接,不能用进行连接,不能用“=”代替。代替。q 【例【例6.17】查询选修了课程却没有成绩的学生的学号。】查询选修了课程却没有成绩的学生的学号。USE xsGOSELECT 学号学号FROM cjWHERE 成绩成绩 IS NULLGOSQL ServerSQL Server实用教程实用教程Page 282021-12-19q615 使用使用ORDER BY子句子句q对查询的结果进行排序,通过使用对查询的结果进行排序,通过使用ORDER BY子句子句实现。实现。q语法格

26、式如下:语法格式如下:qORDER BY表达式表达式1 ASCDESC,nq其中,表达式给出排序依据,即按照表达式的值升其中,表达式给出排序依据,即按照表达式的值升序(序(ASC)或降序()或降序(DESC)排列查询结果。在默认)排列查询结果。在默认的情况下,的情况下,ORDER BY按升序进行排列,即默认使按升序进行排列,即默认使用的是用的是ASC关键字。关键字。q不能按不能按ntext、text或或image类型的列排序,因此类型的列排序,因此ntext、text或或image类型的列不允许出现在类型的列不允许出现在ORDER BY子句中。子句中。SQL ServerSQL Server实

27、用教程实用教程Page 292021-12-19q 【例【例6.18】 按年龄从小到大的顺序显示女学生按年龄从小到大的顺序显示女学生的姓名,性别及出生时间。的姓名,性别及出生时间。USE xsglGOSELECT 姓名姓名,性别性别,出生时间出生时间FROM xsWHERE 性别性别=女女ORDER BY 出生时间出生时间 DESCGOSQL ServerSQL Server实用教程实用教程Page 302021-12-19q为了进一步方便用户,增强检索功能,为了进一步方便用户,增强检索功能,SELECT语句中的统计功能可以对查询结果集进行求和、语句中的统计功能可以对查询结果集进行求和、求平均

28、值、求最大最小值等操作。统计的方法是求平均值、求最大最小值等操作。统计的方法是通过集合函数和通过集合函数和GROUP BY子句、子句、COMPUTE子子句进行组合来实现。句进行组合来实现。q621 使用集合函数使用集合函数q汇总查询是把存储在数据库中的数据作为一个整汇总查询是把存储在数据库中的数据作为一个整体,对查询结果得到的数据集合进行汇总或求平体,对查询结果得到的数据集合进行汇总或求平均值等各种运算。均值等各种运算。SQL Server提供了一系列统提供了一系列统计函数,用于实现汇总查询。常用的统计函数见计函数,用于实现汇总查询。常用的统计函数见表表6-2。SQL ServerSQL Se

29、rver实用教程实用教程Page 312021-12-19SQL ServerSQL Server实用教程实用教程Page 322021-12-19q【例【例6.19】查询学生总人数】查询学生总人数USE xsglGOSELECT 学生总人数学生总人数=COUNT(*)FROM xsGOq查询结果如图查询结果如图6.17所示所示SQL ServerSQL Server实用教程实用教程Page 332021-12-19q 如果指定如果指定DISTINCT短语,则表示在计算时要取消指定列短语,则表示在计算时要取消指定列中的重复值。如果不指定中的重复值。如果不指定DISTINCT短语或指定短语或指定

30、ALL短语短语(ALL为缺省值),则表示不取消重复值。为缺省值),则表示不取消重复值。q 【例【例6.20】查询选修了】查询选修了“a003”课程的学生人数。课程的学生人数。USE xsglGOSELECT 选课人数选课人数=COUNT(DISTINCT 学号学号)FROM cjWHERE 课程号课程号=a003GOSQL ServerSQL Server实用教程实用教程Page 342021-12-19q【例【例6.21】 查询选修了查询选修了“a001”号课程的学生号课程的学生最高分数。最高分数。USE xsglGOSELECT a001课程最高分课程最高分=MAX(成绩成绩)FROM c

31、jWHERE 课程号课程号=a001GOSQL ServerSQL Server实用教程实用教程Page 352021-12-19q622 使用使用GROUP BY子句子句q其语法格式如下。其语法格式如下。qGROUP BY 列名列名qHAVING 条件表达式条件表达式qHAVING 条件表达式选项是对生成的组进行筛选。条件表达式选项是对生成的组进行筛选。SQL ServerSQL Server实用教程实用教程Page 362021-12-19q 【例【例6.22】 在在xs表中分专业统计出男生和女生的平均年表中分专业统计出男生和女生的平均年龄及人数,结果按性别排序。龄及人数,结果按性别排序。

32、USE xsglGOSELECT 专业专业,性别性别, AVG(DATEDIFF(YEAR,出生时间出生时间,GETDATE() AS平均平均年龄年龄, COUNT(*) AS 人数人数FROM xsGROUP BY 专业专业,性别性别ORDER BY 性别性别GOSQL ServerSQL Server实用教程实用教程Page 372021-12-19q【例【例6.23】查询】查询cj表中平均成绩大于表中平均成绩大于80分的学生分的学生的学号、平均分,并按分数由高到低排序。的学号、平均分,并按分数由高到低排序。USE xsglGOSELECT 学号学号, AVG(成绩成绩) AS平均成绩平均

33、成绩FROM cjGROUP BY 学号学号HAVING AVG(成绩成绩)=80 ORDER BY AVG(成绩成绩) DESCGOSQL ServerSQL Server实用教程实用教程Page 382021-12-19注意:注意:WHERE子句是对表中的记录进行筛选,而子句是对表中的记录进行筛选,而HAVING子句是对组内的记录进行筛选,在子句是对组内的记录进行筛选,在HAVING子句中可以使用集合函数,并且其统计子句中可以使用集合函数,并且其统计运算的集合是组内的所有列值,而运算的集合是组内的所有列值,而WHERE子句子句中不能使用集合函数。中不能使用集合函数。SQL ServerSQ

34、L Server实用教程实用教程Page 392021-12-19q 623 使用使用COMPUTE子句子句q 使用使用COMPUTE BY子句,它对子句,它对BY后面给出的列进行分组显示,并计算该后面给出的列进行分组显示,并计算该列的分组小计。其语法格式如下:列的分组小计。其语法格式如下:q COMPUTE 集合函数集合函数 BY 分类表达式分类表达式q 注意:注意:q (1)COMPUTE或或COMPUTE BY子句中的表达式,必须出现在选择列子句中的表达式,必须出现在选择列表中,并且必须将其指定为与选择列表中的某个表达式完全一样,不能使表中,并且必须将其指定为与选择列表中的某个表达式完全

35、一样,不能使用在选择列表中指定的列的别名。用在选择列表中指定的列的别名。q (2)在)在COMPUTE或或COMPUTE BY子句中,不能指定为子句中,不能指定为ntext、text和和image数据类型。数据类型。q (3)如果使用)如果使用COMPUTE BY,则必须也使用,则必须也使用ORDER BY子句。表达式子句。表达式必须与在必须与在ORDER BY后列出的子句相同或是其子集,并且必须按相同的后列出的子句相同或是其子集,并且必须按相同的序列。例如,如果序列。例如,如果ORDER BY子句是:子句是:ORDER BY a,b,c 则则COMPUTE子句可以是下面的任意一个(或全部),

36、即:子句可以是下面的任意一个(或全部),即:q COMPUTE BY a,b,cq COMPUTE BY a,bq COMPUTE BY aq (4)在)在SELECT INTO语句中不能使用语句中不能使用COMPUTE。因此,任何由。因此,任何由COMPUTE生成的计算结果不出现在用生成的计算结果不出现在用SELECT INTO语句创建的新表内。语句创建的新表内。SQL ServerSQL Server实用教程实用教程Page 402021-12-19q【例【例6.24】在】在cj表中求每门课程成绩大于表中求每门课程成绩大于90分的分的人数,并显示统计的明细。人数,并显示统计的明细。USE

37、xsglGOSELECT *FROM cjWHERE 成绩成绩=90ORDER BY 课程号课程号COMPUTE COUNT(课程号课程号) BY 课程号课程号GOSQL ServerSQL Server实用教程实用教程Page 412021-12-19q 在实际工作中,我们所查询的内容往往是涉及在实际工作中,我们所查询的内容往往是涉及多张表中的内容。连接查询的目的是通过加载连多张表中的内容。连接查询的目的是通过加载连接字段条件将多个表连接起来,以便从多个表中接字段条件将多个表连接起来,以便从多个表中检索用户所需要的数据。在检索用户所需要的数据。在SQL Server中连接中连接查询类型分为交

38、叉连接、内连接、外连接、自连查询类型分为交叉连接、内连接、外连接、自连接。连接查询就是关系运算的连接运算,它是从接。连接查询就是关系运算的连接运算,它是从多个数据源间(多个数据源间(FORM)查询满足)查询满足定条件的记定条件的记录。录。 SQL ServerSQL Server实用教程实用教程Page 422021-12-19q 交叉连接也叫非限制连接,它是将两个表不加任何约束地交叉连接也叫非限制连接,它是将两个表不加任何约束地组合起来。也就是将第一个表的所有行分别与第二个表的组合起来。也就是将第一个表的所有行分别与第二个表的每行形成一条新的记录,连接后该结果集的行数等于两个每行形成一条新的

39、记录,连接后该结果集的行数等于两个表的行数积,列数等于两个表的列数和。在数学上,就是表的行数积,列数等于两个表的列数和。在数学上,就是两个表的笛卡尔积,在实际应用中一般是没有意义的,但两个表的笛卡尔积,在实际应用中一般是没有意义的,但在数据库的数学模式上有重要的作用。在数据库的数学模式上有重要的作用。q 其语法结构如下:其语法结构如下:SELECT 列名列表列名列表 FROM 表名表名1 CROSS JOIN 表名表名2或者或者 SELECT 列名列表列名列表 FROM 表名表名1, 表名表名2SQL ServerSQL Server实用教程实用教程Page 432021-12-19q内连接也

40、叫自然连接,它是组合两个表的常用方内连接也叫自然连接,它是组合两个表的常用方法。内连接就是只包含满足连接条件的数据行,法。内连接就是只包含满足连接条件的数据行,是将交叉连接结果集按照连接条件进行过滤的结是将交叉连接结果集按照连接条件进行过滤的结果。连接条件通常采用果。连接条件通常采用“主键主键= 外键外键”的形式。的形式。内连接有以下两种语法格式。内连接有以下两种语法格式。 q其语法结构如下:其语法结构如下:SELECT 列名列表列名列表 FROM 表名表名1 INNER JOIN 表名表名2 ON 表名表名1.列名列名=表名表名2.列名列名 或或SELECT 列名列表列名列表 FROM 表名

41、表名1, 表名表名2 WHERE 表名表名1.列名列名=表名表名2.列名列名SQL ServerSQL Server实用教程实用教程Page 442021-12-19q在自然连接中,只有在两个表中匹配的才能在结在自然连接中,只有在两个表中匹配的才能在结果集中出现。而在外连接中可以只限制一个表,果集中出现。而在外连接中可以只限制一个表,而对另外一个表不加限制(即另外一个表中的所而对另外一个表不加限制(即另外一个表中的所有行都出现在结果集中)。有行都出现在结果集中)。q外连接分为左外连接、右外连接和全外连接。左外连接分为左外连接、右外连接和全外连接。左外连接是对连接条件中左边的表不加限制;右外外连

42、接是对连接条件中左边的表不加限制;右外连接是对右边的表不加限制;全外连接对两个表连接是对右边的表不加限制;全外连接对两个表都不加限制,所有两个表中的行都会包括在结果都不加限制,所有两个表中的行都会包括在结果集中。集中。SQL ServerSQL Server实用教程实用教程Page 452021-12-19q1左外连接左外连接SELECT 列名列表列名列表 FROM 表名表名1 AS A LEFT OUTER JOIN 表名表名2 AS B ON A. 列名列名=B. 列名列名 q2右外连接右外连接q其语法格式如下:其语法格式如下:SELECT 列名列表列名列表 FROM 表名表名1 AS A

43、 RIGHT OUTER JOIN 表名表名2 AS B ON A. 列名列名=B. 列列名名 SQL ServerSQL Server实用教程实用教程Page 462021-12-19q3全外连接全外连接q其语法格式如下:其语法格式如下: SELECT 列名列表列名列表 FROM 表名表名1 AS A FULL OUTER JOIN 表名表名2 AS B ON A. 列名列名=B. 列名列名SQL ServerSQL Server实用教程实用教程Page 472021-12-19q连接操作不仅可以在不同的表上进行,也可以在连接操作不仅可以在不同的表上进行,也可以在同一张表内进行自身连接,即将

44、同一个表的不同同一张表内进行自身连接,即将同一个表的不同行连接起来。自连接可以看作一张表的两个副本行连接起来。自连接可以看作一张表的两个副本之间的连接。表名在之间的连接。表名在FROM 子句中出现两次,必子句中出现两次,必须对表指定不同的别名,在须对表指定不同的别名,在SELECT 子句中引用子句中引用的列名也要使用表的别名进行限定,使之在逻辑的列名也要使用表的别名进行限定,使之在逻辑上成为两张表。上成为两张表。SQL ServerSQL Server实用教程实用教程Page 482021-12-19q 合并查询也称联合查询是将两个或两个以上的查询结果合并,形成一合并查询也称联合查询是将两个或

45、两个以上的查询结果合并,形成一个具有综合信息的查询结果。使用个具有综合信息的查询结果。使用UNION语句可以把两个或两个以语句可以把两个或两个以上的查询结果集合并为一个结果集。上的查询结果集合并为一个结果集。q 其语法格式如下:其语法格式如下:q 查询语句查询语句q UNION ALLq 查询语句查询语句q 注意注意:q (1)联合查询是将两个表(结果集)顺序连接。)联合查询是将两个表(结果集)顺序连接。q (2)UNION中的每一个查询所涉及到的列必须具有相同的列数、中的每一个查询所涉及到的列必须具有相同的列数、相同位置的列的数据类型要相同。若长度不同,以最长的字段作为输相同位置的列的数据类

46、型要相同。若长度不同,以最长的字段作为输出字段的长度。出字段的长度。q (3)最后结果集中的列名来自第一个)最后结果集中的列名来自第一个SELECT语句。语句。q (4)最后一个)最后一个SELECT查询可以带查询可以带ORDER BY子句,对整个子句,对整个UNION操作操作q 结果集起作用。且只能用第一个结果集起作用。且只能用第一个SELECT查询中的字段作排序列。查询中的字段作排序列。q (5)系统自动删除结果集中重复的记录,除非使用)系统自动删除结果集中重复的记录,除非使用ALL关键字。关键字。SQL ServerSQL Server实用教程实用教程Page 492021-12-19q

47、在在SQL语言中,一个语言中,一个SELECT-FROM-WHERE语语句称为一个查询块。将一个查询块嵌套在另一个句称为一个查询块。将一个查询块嵌套在另一个查询块的查询块的WHERE子句或子句或HAVING短语的条件中短语的条件中的查询称为子查询。子查询总是写在圆括号中,的查询称为子查询。子查询总是写在圆括号中,可以用在使用表达式的任何地方。上层的查询块可以用在使用表达式的任何地方。上层的查询块称为外层查询或父查询,下层查询块称为内查询称为外层查询或父查询,下层查询块称为内查询或子查询。或子查询。SQL语言允许多层嵌套查询。即一个语言允许多层嵌套查询。即一个子查询中还可以嵌套其他子查询。子查询

48、中还可以嵌套其他子查询。q注意:子查询的注意:子查询的SELECT语句中不能使用语句中不能使用ORDER BY子句,子句,ORDER BY子句只能对最终查询结果子句只能对最终查询结果排序。排序。SQL ServerSQL Server实用教程实用教程Page 502021-12-19q嵌套子查询的执行不依赖于外部嵌套。其一般的嵌套子查询的执行不依赖于外部嵌套。其一般的求解方法是由里向外处理。即每个子查询在上一求解方法是由里向外处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。父查询的查找条件。q1比较测试中的子查询比较

49、测试中的子查询q比较测试中的子查询是指父查询与子查询之间用比较测试中的子查询是指父查询与子查询之间用比较运算符进行连接。但是用户必须确切地知道比较运算符进行连接。但是用户必须确切地知道子查询返回的是一个单值,否则数据库服务器将子查询返回的是一个单值,否则数据库服务器将报错。返回的单个值被外部查询的比较操作(如:报错。返回的单个值被外部查询的比较操作(如:=、!=、=)使用,该值可以是)使用,该值可以是子查询中使用集合函数得到的值。子查询中使用集合函数得到的值。SQL ServerSQL Server实用教程实用教程Page 512021-12-19q 【例【例6.33】求选修了哲学课程的学生的

50、学号及姓名。】求选修了哲学课程的学生的学号及姓名。USE xsglGOSELECT xs.学号学号,姓名姓名,专业专业FROM xs,cjWHERE xs.学号学号=cj.学号学号 AND cj.课程号课程号=(SELECT 课程号课程号FROM kcWHERE 课程名课程名=哲学哲学)GOSQL ServerSQL Server实用教程实用教程Page 522021-12-19q 【例【例6.34】在】在xs表中查询和表中查询和“程明程明”在同一专业的所有在同一专业的所有男同学信息。男同学信息。USE xsglGOSELECT *FROM xsWHERE 性别性别=男男 AND 专业专业=(

51、SELECT 专业专业 FROM xs WHERE 姓名姓名=程明程明)AND 姓名姓名程明程明GOSQL ServerSQL Server实用教程实用教程Page 532021-12-19q 集合成员测试中的子查询是指父查询与子查询之间用集合成员测试中的子查询是指父查询与子查询之间用IN或或NOT IN进行连接,判断某个属性列值是否在子查询的进行连接,判断某个属性列值是否在子查询的结果中,通常子查询的结果是一个集合。结果中,通常子查询的结果是一个集合。IN表示属于,表示属于,即外部查询中用于判断的表达式的值与子查询返回的值列即外部查询中用于判断的表达式的值与子查询返回的值列表中的一个值相等;表中的一个值相等;NOT IN表示不属于。表示不属于。q 【例【例6.35】 求选修了学分为求选修了学分为5分的课程的学生的学号及分的课程的学生的学号及姓名。姓名。USE xsglGOSELECT DISTINCT xs.学号学号,姓名姓名,专业专业FROM xs,cjWHERE xs.学号学号=cj.学号学号 AND cj.课程号课程号 IN(SELECT 课程号课程号 FROM

温馨提示

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

评论

0/150

提交评论