第5章 SQL查询语句基础.ppt
《第5章 SQL查询语句基础.ppt》由会员分享,可在线阅读,更多相关《第5章 SQL查询语句基础.ppt(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础第 5_2 章 SQL查询语句基础5.1SELECT条件列表条件列表5.2FROM子句子句5.3WHERE子句子句5.4统计统计5.5利用查询结果创建新表利用查询结果创建新表5.6使用使用UNION运算符实现多查询联合运算符实现多查询联合5.7连接连接5.8子查询子查询 本章要点:本章要点:本章要点:本章要点:掌握简单的Transact-SQL查询语句。学会对查询结果进行分组统计、合计和排序等复杂的SELECT语句操作。SQL Server 2000 SQL Server 200
2、0 网络数据库教程网络数据库教程第5章SQL查询语句基础5.1SELECT条件列表一、基本结构uSELECT记录显示范围字段列表uINTO新表名uFROM表名或表名列表及其连接方式uWHERE条件表达式uGROUPBY分组字段名列表HAVING分组条件表达式uORDERBY排序字段名列表ASC|DESCuCOMPUTE集合函数(列名1)BY列名2n说明:uSELECT语句中各子句的顺序:uSELECT记录范围字段列表INTOFROMWHEREGROUPBYHAVINGORDERBYCOMPUTEulFROM用于指定数据来源:u单表查询简单格式:FROM表名u多表查询时的格式:FROM表名列表及
3、其连接方式ulCOMPUTE子句不能与INTO子句或GROUPBY子句同时使用。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础SELECT条件列表条件列表(1)SELECT子子句句:指指明明目目标标列列(字字段段、表表达达式式、函函数数表表达达式式、常常量量)。基本表中相同的列名表示为:表名。基本表中相同的列名表示为:表名.列名列名(2)FROM子子句句:指指明明数数据据源源。表表间间用用“,”分分割割。数数据据源源不不在在当当前前数数据据库库中中,使使用用“数数据据库库名名.表表名名”表表示示。一一表表多多用用,用别名标识
4、。定义表别名:表名别名用别名标识。定义表别名:表名别名(3)WHERE子句:子句:元组选择条件。元组选择条件。(4)GROUPBY子子句句:结结果果集集分分组组。当当目目标标列列中中有有统统计计函函数数,则则统统计计为为分分组组统统计计,否否则则为为对对整整个个结结果果集集统统计计。子子句句后后带带上上HAVING子子句表达组选择条件(带函数的表达式)。句表达组选择条件(带函数的表达式)。(5)ORDERBY子子句句:排排序序。当当排排序序要要求求为为ASC时时升升序序排排序序;排排序序要要求为求为DESC时降序排列。时降序排列。SQL Server 2000 SQL Server 2000
5、网络数据库教程网络数据库教程第5章SQL查询语句基础2.SELECT语句的操作符语句的操作符(1)(1)算术操作符算术操作符+(加号)、(减号)、(加号)、(减号)、*(乘号)和(乘号)和/(除号)。(除号)。(2)(2)比较操作符比较操作符=(等于)、(等于)、(大于)、(大于)、(小于)、(小于)、=(大于等于)、(大于等于)、!=!=(不等于)、(不等于)、(小于大于)、(小于大于)、!(不大于)(不大于)和和!、=、90;SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础自连接自内连接简称自连接,是一张表自己对自己的内连
6、接,即在一张表的两个副本之间进行内连接。用自连接可以将同一个表的不同行连接起来。使用自连接时,必须为两个副本指定别名,使之在逻辑上成为两个表。语法格式:SELECT列名列表FROM表名AS别名1join表名.别名2ON别名1.列名=别名2.列名SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础查询每一门课的间接先行课。例如,课程表中的先行课是在上学期应开设的,先行课的先行课,即间接先行课应提前一学年开设。如果求查询某门课的间接先行课或全部课程的间接先行课,就需要对课程表进行自身连接。SELECTA.课程号,A.课程名,B.先行课
7、FROM课程SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础例子课程号课程号课程名课程名先行课先行课C1计算机引论计算机引论C2PASCAL语言语言C1C3数据结构数据结构C2C4数据库数据库C3C5软件工程软件工程C4课程的先行关系链为:课程的先行关系链为:C5C4C3C2C1,课程的间接关系链为:课程的间接关系链为:C5C3C1。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础课程号课程号课程名课程名先行课先行课课程号课程号课程名课程名先行课先行课C1计算
8、机引论计算机引论C1计算机引论计算机引论C2Pascal语言语言C1C2Pascal语言语言C1C3数据结构数据结构C2C3数据结构数据结构C2C4数据库数据库C3C4数据库数据库C3C5软件工程软件工程C4C5软件工程软件工程C4A.课程号课程号A.课程名课程名B.先行课先行课C2Pascal语言语言C3数据结构数据结构C1C4数据库数据库C2C5软件工程软件工程C3AB结果【例【例【例【例5-185-185-185-18】SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础自连接虽然使用一个表但有两个拷贝,在逻辑上是两个表而且
9、字段完全相同,因此字段列表中字段名必须加上其中一个表的别名做前缀。使用自连接会产生许多重复行,一般加关键字DISTINCT过滤掉重复行。自连接默认按ON使用的连接字段排序(供货商ID,货号),为了按厂家顺序再按进货日期排序,本例使用了ORDERBY指定排序。由于使用了DISTINCT,所以不允许使用字段列表没有指定的“g1.进货日期”排序,也不允许使用别名“供货日期”进行排序,本例使用了字段列表中的表达式。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础(3)外部连接左外部连接操作是在结果集中保留连接表达式左表中的非匹配记录;
10、右外部连接操作是在结果集中保留连接表达式右表中的非匹配记录。外部连接符号为“*=”,右外部连接符号为“=*”。外部连接中不匹配的分量用NULL表示。职工职工号号姓名姓名性别性别年龄年龄所在部所在部门门部门部门号号部门名部门名称称电话电话1010李勇李勇男男201111生产科生产科5661011刘晨刘晨女女1912计划科计划科5781012王敏王敏女女221213一车间一车间4671014张立张立男男211314科研所科研所职工表职工表 部门表部门表 SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础连接的结果集连接的结果集连接的
11、结果集连接的结果集 职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间一车间467职工号职工号姓名姓名性别性别年龄年龄所在部门所在部门部门名称部门名称电话电话1010李勇李勇男男2011生产科生产科5661011刘晨刘晨女女191012王敏王敏女女2212计划科计划科5781014张立张立男男2113一车间一车间467内连接的结果集 左外部连接的结果集SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第
12、5章SQL查询语句基础【例5-19】内连接:SELECT职工.*,部门名称,FROM职工,部门WHERE职工.所在部门=部门.部门号;左外部连接:SELECT职工.*,部门名称,FROM职工,部门WHERE职工.所在部门*=部门.部门号;右外部连接:SELECT职工.*,部门名称,FROM职工,部门WHERE职工.所在部门=*部门.部门号;用用用用SQLSQLSQLSQL表达职工和部门之间的内连接、左外部连接和右外部连接的语句表达职工和部门之间的内连接、左外部连接和右外部连接的语句表达职工和部门之间的内连接、左外部连接和右外部连接的语句表达职工和部门之间的内连接、左外部连接和右外部连接的语句S
13、QL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础5.8子查询(嵌套查询)子查询是嵌套在另一查询中的Select-From-Where表达式(Where/Having)SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为父查询的查找条件可以用多个简单查询来构成复杂查询,以增强SQL的查询能力子查询中不使用OrderBy子句,OrderBy子句只能对最终查询结果进行排序SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础子查询(嵌套查询)我们可能会提出这样的问题,在
14、雇员中谁的工资最高,或者谁的工资比赵军的高。通过把一个查询的结果作为另一个查询的一部分,可以实现这样的查询功能。具体的讲:要查询工资高于赵军的雇员的名字和工资,必须通过2个步骤来完成,第一步查询雇员赵军的工资,第二步查询工资高于赵军的雇员。第一个查询可以作为第二个查询的一部分出现在第二个查询的条件中,这就是子查询。出现在其他查询中的查询称为子查询,包含其他查询的查询称为主查询。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础子查询(嵌套查询)子查询一般出现在SELECT语句的WHERE子句中。子查询比主查询先执行,结果作为主查
15、询的条件。在书写上要用圆括号扩起来,并放在比较运算符的右侧。子查询可以嵌套使用,最里层的查询最先执行。子查询可以在SELECT、INSERT、UPDATE、DELETE等语句中使用。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础查找年龄比李明大的同学SELECT姓名,年龄FROM学生WHERE年龄(SELECT年龄FROM学生WHERE姓名=李明);执行过程分两步:1、SELECT年龄FROM学生WHERE姓名=李明);得出年龄=212、SELECT姓名,年龄FROM学生WHERE年龄21SQL Server 2000 SQ
16、L Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础使用IN操作符的嵌套查询【例5-20】求选修了高等数学的学生学号和姓名。SELECT学号,姓名FROM学生WHERE学号IN(SELECT学号FROM选课WHERE课程号IN(SELECT课程号FROM课程WHERE课程名=高等数学);该题也可以使用下面的连接查询表达。SELECT学生.学号,姓名FROM学生,课程,选课WHERE学生.学号=课程.学号AND课程.课程号=选课.课程号AND课程.课程名=高等数学;SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL
17、查询语句基础(2)使用比较符的嵌套查询【例5-21】求C1课程的成绩高于张三的学生学号和成绩。SELECT学号,成绩FROM选课WHERE课程号=C1AND成绩(SELECt成绩FROM选课WHERE课程号=C1AND学号=(SELECT学号FROM学生WHERE姓名=张三);SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础(3)使用使用ANY或或ALL操作符的嵌套查询操作符的嵌套查询格式为:字段比较符格式为:字段比较符ANY|ALLANY|ALL子查询子查询操作符操作符语意语意ANY大于子查询结果中的大于子查询结果中的某个值
18、某个值,即表示大于查询结果中,即表示大于查询结果中最小值最小值ALL大于子查询结果中的大于子查询结果中的所有值所有值,即表示大于查询结果中,即表示大于查询结果中最大值最大值ANY小于子查询结果中的小于子查询结果中的某个值某个值,即表示小于查询结果中,即表示小于查询结果中最大值最大值=ANY大于等于子查询结果中的大于等于子查询结果中的某个值某个值,即表示大于等于结果集中,即表示大于等于结果集中最小值最小值=ALL大于等于子查询结果中的大于等于子查询结果中的所有值所有值,即表示大于等于结果集中,即表示大于等于结果集中最大值最大值=ANY小于等于子查询结果中的小于等于子查询结果中的某个值某个值,即表
19、示小于等于结果集中,即表示小于等于结果集中最大值最大值=ALL小于等于子查询结果中的小于等于子查询结果中的所有值所有值,即表示小于等于结果集中,即表示小于等于结果集中最小值最小值=ANY等于子查询结果中的等于子查询结果中的某个值某个值,即相当于,即相当于IN=ALL等于子查询结果中的等于子查询结果中的所有值所有值(通常没有实际意义通常没有实际意义)!=(或或)ANY不等于子查询结果中的不等于子查询结果中的某个值某个值,!=(或或)ALL不等于子查询结果中的不等于子查询结果中的任何一个值任何一个值,即相当于,即相当于NOT INSQL Server 2000 SQL Server 2000 网络
20、数据库教程网络数据库教程第5章SQL查询语句基础例子例子【例【例5-225-22】求其他系中比计算机系某一学生年龄小的学生。】求其他系中比计算机系某一学生年龄小的学生。SELECT*FROM学生学生WHERE年龄年龄ANY(SELECT年龄年龄FROM学生学生WHERE所在系所在系=计算机系计算机系)AND所在系所在系计算机系计算机系;【例【例5-235-23】求其他系中比计算机系学生年龄都小的学生】求其他系中比计算机系学生年龄都小的学生SELECT*FROM学生学生WHERE年龄年龄ALL(SELECT年龄年龄FROM学生学生WHERE所在系所在系=计算机计算机)AND所在系所在系计算机计算
21、机;SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础嵌套查询分类不相关子查询子查询的查询条件不依赖于父查询相关子查询子查询的查询条件依赖于父查询SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础嵌套查询求解方法不相关子查询是由里向外逐层处理。即每个子查询在上一级查询处理之前求解,子查询的结果用于建立其父查询的查找条件。相关子查询首先取外层查询中表的第一个元组,根据它与内层查询相关的属性值处理内层查询,若WHERE子句返回值为真,则取此元组放入结果表;然后再取外层
22、表的下一个元组;重复这一过程,直至外层表全部检查完为止SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础引出子查询的谓词带有IN谓词的子查询带有比较运算符的子查询带有ANY或ALL谓词的子查询带有EXISTS谓词的子查询SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础一、带有IN谓词的子查询【例5-20】求选修了高等数学的学生学号和姓名。SELECT学号,姓名FROM学生WHERE学号IN(SELECT学号FROM选课WHERE课程号IN(SELECT课程号FR
23、OM课程WHERE课程名=高等数学);不相关子查询SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础四、带有EXISTS谓词的子查询1.EXISTS谓词存在量词带有EXISTS谓词的子查询不返回任何数据,只产生逻辑真值“true”或逻辑假值“false”。若内层查询结果非空,则返回真值若内层查询结果为空,则返回假值由EXISTS引出的子查询,其目标列表达式通常都用*,因为带EXISTS的子查询只返回真值或假值,给出列名无实际意义2.NOTEXISTS谓词SQL Server 2000 SQL Server 2000 网络数据库教
24、程网络数据库教程第5章SQL查询语句基础(4)使用EXISTS操作符的嵌套查询【例5-24】求选修了C2课程的学生姓名。SELECT姓名FROM学生WHEREEXISTS(SELECT*FROM选课WHERE学生.学号=学号AND课程号=C2)思路分析:本查询涉及学生和选课关系。在学生中依次取每个元组的学号的值,用此值去检查选课关系。若选课中存在这样的元组,其学号的值等于此学生.学号值,并且其课程号=C2,则取此学生.姓名送入结果关系。SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础【例【例5-255-25】求没有选修】求没有
25、选修C2C2课程的学生姓名。课程的学生姓名。SELECT姓名姓名FROM学生学生WHERENOTEXISTS(SELECT*FROM选课选课WHERE=学号学号AND课程号课程号=C2);SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础用等值连接实现SELECT姓名FROM学生WHEREEXISTS(SELECT*FROM选课WHERE学生.学号=学号AND课程号=C2);SQL Server 2000 SQL Server 2000 网络数据库教程网络数据库教程第5章SQL查询语句基础3.不同形式的查询间的替换一些带EXIS
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第5章 SQL查询语句基础 SQL 查询 语句 基础
限制150内