Presentation is loading. Please wait.

Presentation is loading. Please wait.

数据库应用技术 SQL Server 2005.

Similar presentations


Presentation on theme: "数据库应用技术 SQL Server 2005."— Presentation transcript:

1 数据库应用技术 SQL Server 2005

2 第6章 SQL Server 2005 T-SQL数据查询
能力目标: SQL数据查询是数据库的重要技术,是数据库的主要应用目的;熟练掌握各种查询为数据库应用系统的开发奠定基础; 能根据项目需求分析对表进行投影查询、连接查询、选择查询、分组统计查询、限定查询、排序查询、保存查询; 培养数据库开发的基本能力和团队沟通能力。 任务设计: 对项目数据库的表进行大量的、全方位的查询操作; 重点进行表的投影查询、连接查询、选择查询、分组统计查询、限定查询、排序查询、保存查询; 阅读数据库开发应用程序中的查询代码。

3 第6章 SQL Server 2005 T-SQL数据查询
知识要求: 查询语法格式和使用; 投影查询、连接查询、选择查询、分组统计查询、限定查询、排序查询和保存查询; 多表复杂连接查询; 子查询。

4 6.1 SQL Server 2005表的基本知识 SELECT查询语句 1 连接查询 2 子查询 3 联合查询 4 1 小结 5

5 SELECT [ALL|DISTINCT] 列表达式 [INTO 新表名] FROM 表名列表 [WHERE 逻辑表达式]
SQL Server 2005 SELECT [ALL|DISTINCT] 列表达式 [INTO 新表名] FROM 表名列表 [WHERE 逻辑表达式] [GROUP BY 列名] [HAVING逻辑表达式] [ORDER BY 列名[ASC|DESC]]

6 6.1.1 SELECT子句说明 SELECT select_list [INTO new_table_name]
SQL Server 2005 指明要查询的列 SELECT select_list [INTO new_table_name] FROM table_list [WHERE search_conditions] [GROUP BY group_by_list] [HAVING search_conditions] [ORDER BY order_list[ASC|DESC]] [COMPUTE compute_condition [BY column]] 查询各列的列表达式 新表的表名 指明用查询的结果集创建一个新表 查询各表或视图的名称以及它们之间的逻辑关系 指明要查询的表或视图 限制返回某些行数据所要满足的条件表达式 指明查询的条件 执行分组的列表达式 指明查询的结果集进行分组汇总 执行汇总结果的聚合表达式 限制返回某些行数据所要满足的条件表达式 指明分组的查询条件 指明查询结果集的行的排列顺序 执行排序的列表达式 指明查询的结果集进行明细汇总

7 简单查询 1 使用SELECT子句选取列 2 使用WHERE子句选取行 3 使用ORDER BY子句排序 4 使用集合函数进行全部数据汇总
6. 1 SQL Server 2005 1 使用SELECT子句选取列 2 使用WHERE子句选取行 3 使用ORDER BY子句排序 4 使用集合函数进行全部数据汇总 5 使用GROUP BY子句进行分组数据汇总 6 使用COMPUTE子句进行明细汇总

8 6.1.1 使用SELECT子句选取列 例1.检索学生表student,查询全体学生的学号和姓名。 查询特定的列
SQL Server 2005 例1.检索学生表student,查询全体学生的学号和姓名。 SELECT sid, sname FROM student

9 使用SELECT子句选取列 查询特定的列 SQL Server 2005 例2.检索学生表student,查询全体学生的姓名、出生年月、专业,并在专业列前增加常量列“专业:”。 SELECT sname, birthday, ‘专业:', specialty FROM student

10 6.1.1 使用SELECT子句选取列 例3.检索学生表student,查询全体学生的详细信息。 查询所有的列
SQL Server 2005 例3.检索学生表student,查询全体学生的详细信息。 SELECT * FROM student

11 6.1.1 使用SELECT子句选取列 (1)列名 AS 别名 (2)列名 别名 方 法 (3)别名 = 列名 指定列的别名
SQL Server 2005 (1)列名 AS 别名 (2)列名 别名 (3)别名 = 列名 方 法

12 6.1.1 使用SELECT子句选取列 例4.检索学生表student,查询全体学生的学号、姓名、性别,并用中文为列指定别名。 指定列的别名
SQL Server 2005 例4.检索学生表student,查询全体学生的学号、姓名、性别,并用中文为列指定别名。 SELECT sid AS 学号, sname 姓名, 性别 = sex FROM student

13 6.1.1 使用SELECT子句选取列 查询导出列 SQL Server 2005 例5.检索学生表student,查询全体学生的姓名、出生日期、年龄,并用st_age为年龄列指定别名。 SELECT sname, birthday, year(getdate())-year(birthday) AS st_age FROM student

14 6.1.1 使用SELECT子句选取列 例6.检索学生表student,通过学号列的值查询出专业Specialty的名称。 删除重复行
SQL Server 2005 例6.检索学生表student,通过学号列的值查询出专业Specialty的名称。 SELECT distinct specialty FROM student

15 6.1.1 使用SELECT子句选取列 例7.检索学生表student,查询前两名学生的学号和姓名。 限制返回行的 数量
SQL Server 2005 例7.检索学生表student,查询前两名学生的学号和姓名。 SELECT TOP 2 sno, sname FROM student

16 6.1.1 使用SELECT子句选取列 例8.检索学生表student,查询前50%名学生的学号和姓名。 限制返回行的 数量
SQL Server 2005 例8.检索学生表student,查询前50%名学生的学号和姓名。 SELECT TOP 50 PERCENT sno, sname FROM student

17 6.1.2 使用WHERE子句选取行 查询条件 运算符 比较
SQL Server 2005 查询条件 运算符 比较 =、>、<、>=、<=、<>、!=、!>、!< 范围 BETWEEN …AND…、NOT BETWEEN …AND… 列表 IN、NOT IN 模式匹配 LIKE、NOT LIKE 空值判断 IS NULL、IS NOT NULL 逻辑运算 AND、OR、NOT

18 6.1.2 使用WHERE子句选取行 比较 例9.检索学生表student,查询女学生的详细信息。
SQL Server 2005 例9.检索学生表student,查询女学生的详细信息。 SELECT * FROM student WHERE sex = '女'

19 6.1.2 使用WHERE子句选取行 范围 例10.检索学生表student,查询1988年出生的学生的详细信息。
SQL Server 2005 例10.检索学生表student,查询1988年出生的学生的详细信息。 SELECT * FROM student WHERE birthday BETWEEN ' ' AND ' ‘

20 6.1.2 使用WHERE子句选取行 列表 例11.检索学生表student,查询电子商务和软件技术专业的学生的学号、姓名
SQL Server 2005 例11.检索学生表student,查询电子商务和软件技术专业的学生的学号、姓名 SELECT sid, sname FROM student WHERE specialty IN(‘电子商务’,‘软件技术')

21 6.1.2 使用WHERE子句选取行 模式匹配 通配符 含义 示例 % 表示任意长度(0个或多个)的字符串
SQL Server 2005 LIKE运算符用于将指定列与字符串进行匹配运算,其语法格式如下: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘<换码字符>’] 通配符 含义 示例 % 表示任意长度(0个或多个)的字符串 a%表示以a开头的任意长度的字符串 _ 表示任意单个字符 a_表示以a开头的长度为2的字符串 [] 表示一定范围内的任意单个字符 [0-9]表示0至9之间的任意单个字符 [^] 表示指定范围外的任意单个字符 [^0-9]表示0至9以外的任意单个字符

22 6.1.2 使用WHERE子句选取行 模式匹配 例12.检索学生表student,查询出姓王的学生的详细信息。
SQL Server 2005 例12.检索学生表student,查询出姓王的学生的详细信息。 SELECT * FROM student WHERE sname LIKE '王% '

23 6.1.2 使用WHERE子句选取行 模式匹配 例13.检索学生表student,查询出2000年至2005年入学的学生的详细信息。
SQL Server 2005 例13.检索学生表student,查询出2000年至2005年入学的学生的详细信息。 SELECT * FROM student WHERE substring(sid, 1, 4) like '200[0-5] '

24 6.1.2 使用WHERE子句选取行 模式匹配 例14.检索学生表student,查询出电子邮箱中含有下划线的学生的学号、姓名、电子邮箱。
SQL Server 2005 例14.检索学生表student,查询出电子邮箱中含有下划线的学生的学号、姓名、电子邮箱。 SELECT sno, sname, FROM student WHERE LIKE '%a_%' ESCAPE 'a'

25 6.1.2 使用WHERE子句选取行 空值判断 例15.检索学生表student,查询出电子邮箱不为空的学生的学号、姓名、电子邮箱。
SQL Server 2005 例15.检索学生表student,查询出电子邮箱不为空的学生的学号、姓名、电子邮箱。 SELECT sid, sname, FROM student WHERE IS NOT NULL

26 6.1.2 使用WHERE子句选取行 逻辑判断 AND OR NOT SELECT * FROM student WHERE
SQL Server 2005 SELECT * FROM student WHERE birthday BETWEEN ' ' AND ' ' AND SELECT * FROM student WHERE birthday >= ' ' AND birthday <=' ' OR SELECT sid, sname, specialty FROM student WHERE specialty IN(‘电子商务’,‘软件技术') SELECT sid, sname, specialty FROM student WHERE specialty =‘电子商务’ OR specialty =‘软件技术' NOT

27 回顾 SELECT [ALL|DISTINCT] 列表达式 FROM 表名列表 [WHERE 逻辑表达式]
SQL Server 2005 SELECT [ALL|DISTINCT] 列表达式 FROM 表名列表 [WHERE 逻辑表达式] 指定列的别名: (1)列名 AS 别名 (2)列名 别名 (3)别名 = 列名 掌握比较运算符的使用 掌握 LIKE运算符用于将指定列与字符串进行匹配运算,其语法格式如下: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘<换码字符>’]

28 6.1.3 使用ORDER BY子句排序 例16.检索学生表student,查询出学生的详细信息,并且按照专业 、学号升序排序。
SQL Server 2005 例16.检索学生表student,查询出学生的详细信息,并且按照专业 、学号升序排序。 SELECT * FROM student ORDER BY specialty ASC, sid ASC

29 6.1.3 使用ORDER BY子句排序 SQL Server 2005 例17.检索成绩表score,查询选修了课程号为c01001的学生的学号及成绩,并且按照成绩降序排序显示前3名学生的学号及成绩。 SELECT TOP 3 cid, grade FROM sc WHERE cid = 'c01001' ORDER BY grade DESC

30 6.1.4 使用集合函数进行全部数据汇总 集合函数 功能描述 COUNT([DISTINCT|ALL] 列名|*)
SQL Server 2005 集合函数 功能描述 COUNT([DISTINCT|ALL] 列名|*) 计算一列中值的个数;COUNT(*)计算选定行的行数 SUM([DISTINCT|ALL] 列名) 计算一列值的总和(此列为数值型) AVG([DISTINCT|ALL] 列名) 计算一列值的平均值(此列为数值型) MAX([DISTINCT|ALL] 列名) 计算一列值的最大值 MIN([DISTINCT|ALL] 列名) 计算一列值的最小值

31 6.1.4 使用集合函数进行全部数据汇总 例18.检索学生表student,查询软件技术专业的学生人数。
SQL Server 2005 例18.检索学生表student,查询软件技术专业的学生人数。 SELECT COUNT(*) AS 学生人数 FROM student WHERE specialty= ‘软件技术'

32 6.1.4 使用集合函数进行全部数据汇总 SQL Server 2005 例19.检索成绩表sc,查询选修了课程号为c01001的学生人数、总成绩、平均成绩、最高成绩、最低成绩。 SELECT COUNT(sno) AS 学生人数, SUM(grade) AS 总成绩, AVG(grade) AS 平均成绩, MAX(grade) AS 最高成绩, MIN(grade) AS 最低成绩 FROM sc Where cid=‘c01001’

33 6.1.4 使用集合函数进行全部数据汇总 例20.检索成绩表sc,查询选修了课程的学生人数。
SQL Server 2005 例20.检索成绩表sc,查询选修了课程的学生人数。 SELECT COUNT(DISTINCT sno) AS 学生人数 FROM sc

34 6.1.5 使用GROUP BY子句进行分组数据汇总 例21.检索成绩表sc,查询各门课程的课程号、平均成绩。
SQL Server 2005 例21.检索成绩表sc,查询各门课程的课程号、平均成绩。 SELECT cid, AVG(grade) AS sc_avggrade FROM sc GROUP BY cid 注意:select子句中的列必须满足下列两个条件之一:一是使用了集合函数,二是未使用集合函数的列必须应用于group by子句中.

35 6.1.5 使用GROUP BY子句进行分组数据汇总 SQL Server 2005 例22.检索成绩表sc,查询平均成绩大于75分的各门课程的课程号、平均成绩,查询结果按照平均成绩升序排序。 SELECT cid, AVG(grade) AS sc_avggrade FROM sc GROUP BY cid HAVING AVG(grade)> 75 ORDER BY sc_avggrade

36 6.1.5 使用GROUP BY子句进行分组数据汇总 HAVING WHERE 区别 SQL Server 2005 (1)WHERE子句设置的查询条件在GROUP BY子句之前发生作用,并且查询条件中不能包含集合函数。 (2)HAVING子句设置的查询条件在GROUP BY子句之后发生作用,并且查询条件中允许使用集合函数。

37 6.1.6 使用COMPUTE子句进行明细汇总 例23.检索成绩表sc,查询课程号、学号、成绩的明细行并汇总总成绩。
SQL Server 2005 例23.检索成绩表sc,查询课程号、学号、成绩的明细行并汇总总成绩。 SELECT cid, sno, grade FROM sc COMPUTE SUM(grade)

38 6.1.6 使用COMPUTE子句进行明细汇总 SQL Server 2005 例24.检索成绩表sc,按照课程号分组,查询课程号、学号、成绩的明细行并汇总该门课程的总成绩。 SELECT cid, sno, grade FROM sc ORDER BY cid COMPUTE SUM(grade) BY cid

39 6.1.6 使用COMPUTE子句进行明细汇总 注 意 !!! (1)集合函数中不能使用DISTINCT关键字;
注 意 !!! SQL Server 2005 (1)集合函数中不能使用DISTINCT关键字; (2)COMPUTE子句中指定的属性列必须存在于SELECT子句中; (3)COMPUTE…BY…子句必须与ORDER BY子句一起使用,并且BY关键字后指定的列必须与ORDER BY子句中指定的列相同,或为其子集,且列的顺序也必须一致。

40 6.1.4 FROM子句连接查询 例1:从教务管理数据库EDUC中查询出学生选课的成绩信息 USE EDUC GO
SQL Server 2005 例1:从教务管理数据库EDUC中查询出学生选课的成绩信息 USE EDUC GO SELECT Sname,Cname, Grade FROM Student, SC ,Course Where Student.SID=SC.Sno AND SC.CID=Course.CID 查询结果如右图所示:

41 6.1.4 FROM子句连接查询 例2:从教务管理数据库EDUC中查询出选了两门课程的学生的学号 USE EDUC GO
SQL Server 2005 例2:从教务管理数据库EDUC中查询出选了两门课程的学生的学号 USE EDUC GO SELECT DISTINCT X. Sno FROM SC X,SC Y WHERE X.Sno=Y.Sno and X.CID=Y.CID 查询结果如右图所示:

42 回顾 SELECT [ALL|DISTINCT] 列表达式 FROM 表名列表 [WHERE 逻辑表达式]
SQL Server 2005 SELECT [ALL|DISTINCT] 列表达式 FROM 表名列表 [WHERE 逻辑表达式] [GROUP BY group_by_list] [HAVING search_conditions] [ORDER BY order_list[ASC|DESC]] [COMPUTE compute_condition [BY column]] 指定列的别名: (1)列名 AS 别名 (2)列名 别名 (3)别名 = 列名 掌握比较运算符的使用

43 LIKE运算符用于将指定列与字符串进行匹配运算,其语法格式如下:
回顾 SQL Server 2005 掌握 LIKE运算符用于将指定列与字符串进行匹配运算,其语法格式如下: [NOT] LIKE ‘<匹配串>’ [ESCAPE ‘<换码字符>’] 掌握集合函数(COUNT( ) sum( ) avg( ) max( ) min( ) ) 掌握多表查询 用于FROM子句的ANSI连接语法形式 用于WHERE子句的SQL Server连接语法形式

44 6.2 连接查询 连接方法和种类 1 内连接 2 左连接 3 右连接 4 1 外连接 5 自连接 6 外连接 7 自连接 8
SQL Server 2005 1 连接方法和种类 2 内连接 3 左连接 4 右连接 1 5 外连接 6 自连接 外连接 7 8 自连接

45 6.2.1 连接方法和种类 SQL Server提供了不同的语法格式支持不同的连接方式 用于FROM子句的ANSI连接语法形式
SELECT 列名列表 FROM {表名1[连接类型] JOIN 表名2 ON 连接条件} WHERE 逻辑表达式 用于WHERE子句的SQL Server连接语法形式 FROM 表名列表 WHERE {表名.列名 JOIN_OPERATOR 表名.列名}[…n] ON 逻辑表达式 连接种类 内连接inner join ; 交叉连接cross join ; 外连接out join ( 左外连接left out join, 右外连接right out join, 全连接 full out join) ;

46 6.2.2 内连接 (1) 等值连接 (2) 自然连接 (1)等值连接
SQL Server 2005 格式:from 表名1 inner join 表名2 on 连接表达式 (1) 等值连接 (2) 自然连接 (1)等值连接 例1:查询每个读者的详细信息包括读者信息以及借阅图书信息,允许有重复列。 USE Library GO SELECT Reader.*,Borrow.* FROM Reader INNER JOIN Borrow ON Reader.RID=Borrow.RID

47 6.2.2 内连接 (2)自然连接 例2:查询每个读者的详细信息(包括读者、读者类型以及借阅图书信息,不允许有重复列。
SQL Server 2005 (2)自然连接 例2:查询每个读者的详细信息(包括读者、读者类型以及借阅图书信息,不允许有重复列。 USE Library GO SELECT Reader.RID,Reader.Rname,Readertype.TypeID,BID,LendDate,ReturnDate FROM Reader INNER JOIN Borrow ON Reader.RID=Borrow.RID INNER JOIN Readertype ON Reader.TypeID=Readertype.TypeID

48 6.2.5 外连接 SQL Server 2005 (1)左外连接 (2)右外连接 (3)全外连接

49 6.2.5 外连接 从表“Reader”和表“Borrow”中查询出读者的借阅情况,包括没有借书的读者情况。 例子: USE Library
SQL Server 2005 (1)左外连接 格式:from 表名1 left outer join 表名2 on 连接表达式 从表“Reader”和表“Borrow”中查询出读者的借阅情况,包括没有借书的读者情况。 例子: USE Library GO SELECT Reader.*,borrow.RID,BID FROM Reader LEFT OUTER JOIN Borrow ON Reader.RID=Borrow.RID

50 6.2.5 外连接 从表“Borrow”和表“Book”中查询出图书被借阅的情况,包括没有被借的图书情况。 例子: USE Library
SQL Server 2005 (2)右外连接 格式:from 表名1 right outer join 表名2 on 连接表达式 从表“Borrow”和表“Book”中查询出图书被借阅的情况,包括没有被借的图书情况。 例子: USE Library GO SELECT Reader.*,borrow.RID,BID FROM Reader RIGHT OUTER JOIN Borrow ON Reader.RID=Borrow.RID

51 6.2.5 外连接 借阅和读者全外连接。 例子: USE Library GO SELECT Reader.*,borrow.RID,BID
SQL Server 2005 (3)全外连接 格式:from 表名1 full outer join 表名2 on 连接表达式 借阅和读者全外连接。 例子: USE Library GO SELECT Reader.*,borrow.RID,BID FROM Borrow FULL OUTER JOIN Reader ON Reader.RID=Borrow.RID

52 6.2.6 自连接 例子: USE Library GO SELECT a.BID,a.Bname,a.Author
SQL Server 2005 格式:from表名1 a join 表名1 b on 连接表达式 从图书管理数据库Library中查询出同名且由不同作者编著的图书。 例子: USE Library GO SELECT a.BID,a.Bname,a.Author FROM book a JOIN book b on a.Bname=b.Bname WHERE a.BID<>b.BID

53 6.2.7 交叉连接 读者表“Reader”和借阅表“Borrow”交叉连接,显示查询结果集的前5行。 例子: USE Library GO
SQL Server 2005 格式:from 表名1 cross join 表名2 说明:两个表做笛卡尔积 读者表“Reader”和借阅表“Borrow”交叉连接,显示查询结果集的前5行。 例子: USE Library GO SELECT top 5 Reader.*,Borrow.RID,BID FROM Reader CROSS JOIN Borrow

54 6.2.7 多表连接 对读者表“Reader”、借阅表“Borrow”、图书表“Book”三个表进行等值连接。
SQL Server 2005 格式:from 表名1 join 表名2 on 连接表达式 说明:最多连接64个表,通常8~10个 对读者表“Reader”、借阅表“Borrow”、图书表“Book”三个表进行等值连接。 例子: USE Library GO SELECT t1.RID,Rname,Bname,LendDate FROM Reader t1 JOIN Borrow t2 ON t1.RID=t2.RID JOIN book t3 ON t2.BID=t3.BID

55 6.3 子查询 [NOT]IN子查询 1 比较子查询 2 [NOT]EXISTS子查询 3 在其他语句中使用 4
SQL Server 2005 1 [NOT]IN子查询 2 比较子查询 3 [NOT]EXISTS子查询 4 在其他语句中使用

56 6.3.1 [NOT] IN 子查询 列名 [not] in (常量表)|(子查询) 说明:列值被包含或不(not)被包含在集合中
SQL Server 2005 列名 [not] in (常量表)|(子查询) 说明:列值被包含或不(not)被包含在集合中 等价:列名=any(子查询) 例子:查询没有借过书的读者的信息 USE Library GO SELECT * FROM Reader WHERE RID NOT IN (SELECT DISTINCT RID FROM Borrow)

57 6.3.1 [NOT] IN 子查询 SQL Server 2005 例子:从图书管理数据库”Library”中查询出借阅过”高等教育出版社”出版的图书的读者编号(不包含重复的行) Use library Go Select distinct rid From borrow Where bid in (select bid from book Where pubcomp=‘高等教育出版社’)

58 6.3.2 比较子查询 例子:查询读者编号RID最大的读者的借书情况 USE Library GO SELECT * FROM Borrow
SQL Server 2005 (1)列名 比较符 all (子查询) 说明:子查询中的每个值都满足比较条件 例子:查询读者编号RID最大的读者的借书情况 USE Library GO SELECT * FROM Borrow WHERE RID>=ALL (SELECT RID FROM Reader)

59 FROM student AS x INNER JOIN sc AS y ON x.sid=y.sno
6.3.2 比较子查询 SQL Server 2005 (2)列名比较符 any|some (子查询) 说明:子查询中的任一个值满足比较条件 例子:查询选修C语言程序设计课程的学生 SELECT sname,grade FROM student AS x INNER JOIN sc AS y ON x.sid=y.sno WHERE cid=any (select cid from course where cname=‘C语言程序设计’)

60 6.3.3 [NOT] EXISTS子查询 功能:用集合运算实现元组与(子查询) 说明:子查询中空或非空
SQL Server 2005 功能:用集合运算实现元组与(子查询) 说明:子查询中空或非空 例子:查询借阅了人民邮电出版社的图书的读者的编号 USE Library GO SELECT DISTINCT RID FROM Borrow WHERE EXISTS (SELECT * FROM book WHERE Borrow. BID= book. BID AND PubComp=’人民邮电出版社’)

61 6.3.4在其他语句中使用子查询 例子:计算读者中的已借数量的值 USE Library GO UPDATE Reader
SQL Server 2005 例子:计算读者中的已借数量的值 USE Library GO UPDATE Reader SET Lendnum =( SELECT COUNT(*) FROM dbo.Borrow WHERE ReturnDate IS NULL and Reader. RID =Borrow. RID)

62 6.4 联合查询 UNION操作符 1 联合查询结果排序 2 对单张表使用UNION操作符 3 交操作和叉操作 4 1 5
SQL Server 2005 1 UNION操作符 2 联合查询结果排序 3 对单张表使用UNION操作符 4 交操作和叉操作 1 5 UNION操作符和JOIN操作符区别与联系 6 连接查询和子查询的比较

63 6.4.1 UNION操作符 格式:SELECT_1 UNION [ALL] SELECT_2 { UNION [ALL] SELECT_n
SQL Server 2005 格式:SELECT_1 UNION [ALL] SELECT_2 { UNION [ALL] SELECT_n 例1:查询出“人民邮电出版社”出版的图书的编号和被借阅过的图书的编号,不包括重复的列 USE Library GO SELECT BID FROM book WHERE PubComp=’人民邮电出版社’ UNION SELECT BID FROM Borrow

64 6.4.1 UNION操作符 例2:查询出“人民邮电出版社”出版的图书的编号和被借阅过的图书的编号,可以包括重复的列 USE Library
SQL Server 2005 例2:查询出“人民邮电出版社”出版的图书的编号和被借阅过的图书的编号,可以包括重复的列 USE Library GO SELECT BID FROM book WHERE PubComp=’人民邮电出版社’ UNION ALL SELECT BID FROM Borrow

65 6.4.2 联合查询结果排序 例子:查询出“人民邮电出版社”出版的图书和被借阅过的图书的编号,不包括重复的列并将查询结果进行排序
SQL Server 2005 例子:查询出“人民邮电出版社”出版的图书和被借阅过的图书的编号,不包括重复的列并将查询结果进行排序 USE Library GO SELECT BID FROM book WHERE PubComp=’人民邮电出版社’ UNION FROM Borrow ORDER BY bid

66 6.4.3 对单张表使用UNION操作符 例子:查询“人民邮电出版社”和“清华大学出版社”出版的图书的书名和作者 USE Library
SQL Server 2005 例子:查询“人民邮电出版社”和“清华大学出版社”出版的图书的书名和作者 USE Library GO SELECT Bname,Author FROM book WHERE PubComp='人民邮电出版社' UNION WHERE PubComp='清华大学出版社‘

67 6.4.4 交操作和差操作 例1:查询被借阅过的“人民邮电出版社”出版的图书的图书编号 USE Library GO SELECT BID
SQL Server 2005 例1:查询被借阅过的“人民邮电出版社”出版的图书的图书编号 USE Library GO SELECT BID FROM book WHERE PubComp='人民邮电出版社' AND EXISTS (SELECT * FROM Borrow WHERE Borrow. BID= book. BID)

68 6.4.4 交操作和差操作 例2:查询没被借阅过的“人民邮电出版社”出版的图书的图书编号 USE Library GO SELECT BID
SQL Server 2005 例2:查询没被借阅过的“人民邮电出版社”出版的图书的图书编号 USE Library GO SELECT BID FROM book WHERE PubComp=’人民邮电出版社’ AND NOT EXISTS (SELECT * FROM Borrow WHERE Borrow. BID= book. BID)

69 6.4.5 UNION操作符和JOIN操作符区别与联系
SQL Server 2005 UNION是将相同字段的若干条记录进行合并,而JOIN是将两个或多个表的若干个字段进行连接; 二者均是进行连接操作; 但是一个是对行(记录)进行操作,一个是对列(字段)进行操作;

70 6.4.6 连接查询和子查询的比较 例1(子查询):查询book中价格最低的图书编号和书名 USE Library GO
SQL Server 2005 例1(子查询):查询book中价格最低的图书编号和书名 USE Library GO SELECT BID,Bname FROM book WHERE Price=(SELECT min(Price) FROM book) GO 例2(连接查询): 查询读者编号、读者姓名、所借图书名和借阅时间 USE Library GO SELECT Reader.RID,Reader.Rname,book.Bname,Borrow.LendDate FROM Reader,book,Borrow WHERE Reader.RID=Borrow. RID AND book.BID= Borrow.BID GO

71 6.5 小结 SQL Server 2005 本章重点讲解了SELECT查询语句(包括SELECT语句的语法格式和执行方式),介绍了投影查询、连接查询、选择查询、分组统计查询、限定查询、排序查询、保存查询,每种查询均通过“格式+实例”的方式加以说明;由于连接查询和子查询的难度和复杂性,于是将连接查询(左连接、中间连接、右连接、自然连接、交叉连接和多表连接)和子查询(包括IN子查询、比较子查询和EXISTS子查询)各作为一节的内容加以介绍。希望同学们通过实例和作业加深理解,提高自己的数据查询能力。

72 Thank You !


Download ppt "数据库应用技术 SQL Server 2005."

Similar presentations


Ads by Google