




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章查询语句的使用
SELECT在任何一种SQL语言中,都是使用频率最高的语句。完全可以说SELECT语句是SQL语言的灵魂。SELECT语句的作用是让数据库服务器根据客户端的要求搜寻出用户所需要的信息资料,并按用户规定的格式进行整理后,再返回给客户端。用户使用Transact-SQL的SELECT语句除可以查看普通数据库中的表格和视图的信息外,还可以查看SQLServer的系统信息。4.1简单SELECT查询语句
查询是指对SQL-Server发出一个数据请求,从数据库中检索所需要的数据,通过创建SELECT语句实现。4.1.1案例实现过程
查询数据的方法有以下两种,使用SQLServer管理平台创建查询,和SQL的SELECT语句进行查询。在该案例中使用第一种方法,在后面的知识点中将阐述第二种方法。
(1)在SQLServer管理平台中,单击工具栏上的“新建查询(N)”按钮,如同4.1所示,或右击“教学管理系统”的数据库图标,在出现弹出式的快捷菜单中选择“新建查询(Q)”,如图4.2所示。
图4.1工具栏上“新建查询”按钮
图4.2新建数据库的快捷菜单
(2)出现如图4.3所示的查询编辑器。如果对SELECT语句比较熟悉,可以在编辑器中直接输入所要执行的SQL代码,既可以转到第(6)步。图4.3查询编辑器窗口(3)如果对SELECT语句不熟悉时,可以借助于“查询设计器”来完成。
在“SQL编辑器”工具栏中,如图4.4所示,(如果该工具栏没有出现,选择菜单【视图】|【工具栏】|【SQL编辑器】执行,即可出现该工具栏),单击“查询设计器”,即图标为的图标。图4.4“SQL编辑器”工具栏中“查询设计器”按钮图4.4更改数据文件的自动增长对话框(4)在出现如图4.5所示的“查询设计器”的“添加表”对话框中,添加所需要的数据表,在这里只添加“成绩表”就可以了,然后单击关闭按钮。这里,图形查询设计器会显示三个区域,或三个窗格,分别为关系图、网格和SQL区域。每个窗格的功能如表4.1所示。表4.1图形查询设计器各窗格的功能窗格功能关系图显示查询中表的图形表示形式。使用此窗格可以选择字段并定义表之间的关系。网格显示查询返回的字段列表。使用此窗格可以定义别名、排序顺序、筛选器、组和参数。SQL显示关系图窗格和网格窗格表示的Transact-SQL查询。使用此窗格可以用Transact-SQL编写或更新查询。图4.5查询设计器的“添加表”对话框(5)在查询设计器的“关系图”区域中,选择所要操作的字段,这里选择“成绩表”的“学号”、“课程编号”和“成绩”字段,这时这几个字段就在网格区域显示出来,并且相应行的输出选项被勾选,在筛选器列中“课程编号”字段行输入“=701”,在“成绩”字段行输入“>80and<90”,然后再分别设置排序类型和排序顺序,如图4.6所示,在这些操作中,每个操作都会在SQL区域中显示相应的SQL代码。图4.6查询设计器的设计界面(6)单击“确定”按钮后,退出查询设计器,进入到查询编辑器,可以看到刚才查询设计器中SQL区域的代码,已经在查询编辑中自动生成,如图4.7所示。图4.7查询设计器中的SQL代码图4.8查询的执行结果网格(7)单击工具栏上的按钮,查询结果就会在查询设计器中以结果网格的形式显示出来,如图所示4.8所示。4.1.2相关知识及注意事项1.查询数据1)使用SSMS查询数据【例1】查询“学生表”中前5行数据。(1)确保SMSS正在运行。导航到“教学管理系统”数据库,单击“表”节点,将在右边窗格中列出所有的表。找到“学生表”,右键单击该表,在打开弹出菜单中选择“打开表”。这样会立即打开一个新的查询编辑器窗格,窗格中显示了“学生表”表中所有的行,如图4.9所示。图4.9从查询表中查询数据(2)在工具栏有一个按钮
,当按下这个按钮时,将创建该查询的SQL代码。单击该按钮,窗口将改变为如图4.10所示的样子。这是由SMSS产生的SQL代码,用于提供请求的信息。图4.10通过SQL窗口显示的输出(3)在右边会看到一个名为“属性”的窗口,如图4.11所示,如果看不到该窗口,则可以通过按下F4键或单击“视图”菜单的“属性窗口”项来显示该窗口。图4.11属性窗口(4)将如图4.11所示“属性窗口”中的“Top规范”/“(最前面)”设置为“是”,“属性窗口”将变成图4.12所示的样子。
图4.11选择Top规范
图4.12需要的Top规范(5)在“表达式”框中输入5,表示只要前5条记录,这时,注意在结果窗格的左上角有一个图标
。该图标表明查询的属性已经更改,需要进行刷新。(6)在结果网格的空白区域上右键单击,将打开如图4.13所示的弹出菜单,单击“执行SQL”以改变结果网格,使得之返回5个数据行。
图4.13结果网格弹出菜单
图4.14返回5行(7)再次通过单击工具栏上的“显示SQL窗格”按钮来查看SQL代码。注意这次看到的代码与前面代码的区别在于,SELECT语句后面放置了TOP(5)代码。SELECTTOP(5)*FROM学生表2)使用T-SQL命令查询数据2.SELECT语句的基本语法格式
从数据库中检索行,并允许从一个或多个表中选择一个或多个行或列。虽然SELECT语句的完整语法较复杂,但其主要子句可归纳如下:SELECT[ALL|DISTINCT]<目标表达式>[<目标表达式>][INTO新表名]FROM<表或视图名>[<表或视图名>][WHERE<条件表达式>][GROUPBY<列名1>][HAVING<条件表达式>][ORDERBY<列名2>[ASC|DESC]]整个SELECT语句的含义为:根据WHERE子句的条件表达式,从FROM子句指定的基本表或视图中找出满足条件的元素组,再按SELECT子句中的目标列表达式选出元素组的属性形成结果表。3.使用SELECT子句选取字段和记录1)查询表中所有字段【例2】查询“学生表”中全部数据。打开查询编辑器,在查询编辑器窗格中,输入下面的SQL代码:USE教学管理系统GOSELECT*FROM学生表GO单击工具栏上的“执行查询”按钮或按快捷键“F5”执行查询即可。查询结果如图4.16所示。图4.16查询学生表全部数据2)
选取部分字段
使用SELECT语句选择表中的某些字段时,各字段名之间用逗号分隔。
【例3】在学生表中查询学生的姓名和性别打开查询编辑器,在查询编辑器窗格中,输入下面的SQL代码:USE教学管理系统GOSELECT姓名,性别FROM学生表GO单击工具栏上的“执行查询”按钮或按快捷键“F5”执行查询即可。3)设置字段别名
显示查询结果时,通常第一行显示各个输出字段的名称。为了阅读方便,用户可以用更容易理解的字段名称来取代原有字段。
【例4】在数据库“图书管理系统”中,显示book表中的“bookName”和“publisherName”字段的信息,并为“bookName”设置别名“书名”,“publisherName”设置别名“出版社名称”。
对应的查询语句为
USE图书管理系统
GO
SELECTbookNameAS书名,publisherNameAS出版社名称
FROMbook
GO
执行结果如图所示图4.17显示别名4)
使用计算字段
计算字段并不是数据库表中的真实字段,而是数据库表中的一些字段经过运算而生成的表达式
【例5】在数据库“图书管理系统”中,将图书的定价打八折。
对应的查询语句为
USE图书管理系统
SELECTbookName,price,price*0.8
FROMbook
查询结果如图4.18所示。图4.18使用计算字段的查询结果5)使用ALL返回全部记录
【例6】查询学生表中的全部记录
完成上述功能的查询语句为
SELECTALL*FROM学生信息注意:省略ALL也可以。6)使用DISTINCT消除结果集中重复的记录
【例7】查询“book”表中出版社名称的信息。
所使用的查询语句为
SELECTDISTINCTpublisherNameAS出版社名称FROMbook
结果中不会出现“出版社名称”相同的记录。7)使用TOP显示前面有限条记录
【例8】查询“book”表中的前5条记录。
所使用的查询语句为
SELECTTOP5*FROMbook
结果显示前5条记录,若第一行加上PERCENT,显示占查询结果总数的5%条记录。4.选择查询
查询条件为选择查询结果的条件,在WHERE子句中指定,是用运算符连接字段名、常量、变量、函数等而得到的表达式,其值为TRUE或FALSE。满足条件的结果为TRUE,不满足条件的结果为FALSE。满足条件的记录都会包含在查询所返回的结果集中,不满足条件的记录则不会出现在这个结果集中。
1)基于比较条件的选择查询
【例9】在“学生表”中查询“专业”为“计算机应用技术”的记录。所使用的查询语句为
SELECT*FROM学生表WHERE专业='计算机应用技术'
2)基于范围条件选择查询
【例10】在“成绩表”中查询“成绩”在80-90之间的学生的学号。所使用的查询语句为
SELECT学号,成绩FROM成绩表WHERE成绩BETWEEN80AND903)基于列表条件选择查询
【例11】在“学生表”中查询“专业”为计算机应用技术,计算机网络工程的学生姓名和专业。所使用的查询语句为
SELECT姓名,专业FROM学生表WHERE专业IN('计算机应用技术','计算机网络工程')当使用NOTIN时,运算结果正好与IN相反。
4)基于字符串匹配条件的选择查询5)基于NULL值的选择查询
【例16】查询“教师表”中没有部门的教工信息。所使用的查询语句为
SELECT*FROM教师表WHERE所在部门ISNULL6)基于多个条件的选择查询
【例17】在“成绩表”中查询成绩在60与85之间学生的学号。所使用的查询语句为
SELECT*FROM成绩表WHERE成绩>60AND成绩<855.记录排序
默认情况下,在查询结果集中行的顺序就是它们在表中的顺序,但有时用户希望查出的结果按某种顺序显示。通过ORDERBY子句,可以改变查询结果的显示顺序。1)ORDERBY子句语法格式
【例18】对“教师表”先按“所在部门”,再按“出生日期”排列,输出有关字段。所使用的查询语句为
SELECT*FROM教师表ORDERBY所在部门,出生日期2)TOP或TOP…WITHTIES子句与ORDERBY子句
【例19】从“成绩表”中查询成绩最高的4条记录,若第4条记录后面有多个记录与第4条记录成绩相同,一并显示出来。所使用的查询语句为
SELECTTOP4WITHTIES学号FROM成绩表ORDERBY成绩6.将查询结果保存到表中
【例20】从“学生表”,“课程表”,“成绩表”中查询选修“数据结构”课程的所有学生的姓名,课程名及成绩。所使用的查询语句为
SELECT姓名,课程名,成绩
INTO数据结构成绩
FROM学生表,课程表,成绩表
ON学生表.学号=成绩表.学号AND成绩表.课程编号=课程表.课程编号
4.2SQL中统计函数的使用
统计函数也称为字段函数或集合函数。统计函数的作用是在查询结果集中产生和(SUM)、平均值(AVG)、最大值(MAX)、最小值(MIN)及记录数目(COUNT)等等。统计函数主要用在SELECT字句、ORDERBY子句及HAVING子句中。4.2.1案例实现过程【技术要点】
该案例要求查询平均分、最高分、最低分,所以要使用统计函数AVG函数、MAX函数、MIN函数,由要求查询的是每门课程的统计值,所以要使用分组函数GROUPBY函数。
该案例所使用的查询语句为
SELECT课程编号,AVG(成绩)AS平均分,MAX(成绩)AS最高分,MIN(成绩)AS最低分
FROM成绩表
GROUPBY课程编号4.2.2相关知识及注意事项1.计算字段的和(SUM)
SUM函数用于统计数值型字段的总和。
【例21】在“课程表”中查询所有课程的学分总和。所使用的查询语句为
SELECTSUM(学分)AS学分总和FROM课程表2.计算字段的平均值(AVG)
AVG函数用于计算一个数值型字段的平均值,该字段中的NULL值在计算过程中将被忽略。
【例22】在“成绩表”中,统计课程编号为“701”的平均成绩。所使用的查询语句为
SELECTAVG(成绩)FROM成绩表WHERE课程编号='701'3.计算字段的最大值(MAX)
MAX函数用于返回表达式中的最大值,在计算过程中NULL值忽略。
【例23】在“成绩表”中,查询课程编号为“701”的最高成绩。所使用的查询语句为
SELECTMAX(成绩)FROM成绩表WHERE成绩='701'
4.计算字段的最小值(MIN)
MIN函数用于返回表达式中的最小值,在计算过程中NULL值被省略。
【例24】在“成绩表”中,查询课程编号为“701”的最低成绩。所使用的查询语句为
SELECTMIN(成绩)FROM成绩表WHERE成绩='701'5.统计记录数目(COUNT)
【例25】查询选修课程编号为“701”的学生人数。所使用的查询语句为
SELECTCOUNT(*)FROM成绩表WHERE课程编号='701'6.数据分组
数据分组是指通过GROUPBY子句按一定的条件对查询到的结果进行分组,再对每一组数据统计计算。
1)GROUPBY子句
【例26】查询选修每一门课程的学生人数。所使用的查询语句为
SELECT课程编号,COUNT(*)AS人数
FROM成绩表
GROUPBY课程编号
2)Having子句
【例27】在“成绩表”中,找出所有平均分高于85分的所有课程。所使用的查询语句为
SELECT课程编号,AVG(成绩)AS平均分
FROM成绩表
GROUPBY课程编号
HAVINGAVG(成绩)>857.用COMPUTE汇总数据
使用COMPUTE子句,允许同时浏览查询所得到的各字段数据的细节以及统计各字段数据所产生的总和。它级可以计算数据分类后的和,又可以计算所有数据的总和。
1)使用COMPUTE子句
【例28】在“成绩表”中,找出课程编号为“701”的这门课程的所有学生的分数以及最高分、最低分和平均分。所使用的查询语句为
SELECT*FROM成绩表
WHERE课程编号='701'
COMPUTEMAX(成绩),MIN(成绩),AVG(成绩)
2)使用COMPUTEBY子句
【例29】从“成绩表”中检索数据,列出每门课程每个学生的成绩以及每门课程的平均成绩、最低分、最高分。所使用的查询语句为
SELECT*FROM成绩表
ORDERBY课程编号
COMPUTEAVG(成绩),MAX(成绩),MIN(成绩)
BY课程编号4.3多表查询功能4.3.1案例实现过程【案例】
在英才职业技术学院的“教学管理系统”数据库上,在“成绩表”、“学生表”和“课程表”中,查询“课程编号”为“701”的课程成绩在[90,100]之间的学生姓名、课程名称和成绩。
要查询数据的“姓名”字段在“学生表”内,“课程名称”字段在“课程表”内,“成绩”字段在“成绩表”字段内,所以该案例所要执行的查询操作是同时从这三个表内联合进行数据查询的,这就必须知道这三个表之间的联系,根据第二章建立数据库时的各表之间的依赖关系知,“学生表”与“成绩表”是依赖“学号”字段建立联系的,“成绩表”与“课程表”是依赖“课程编号”建立联系的。该案例所要执行的查询操作为:
USE教学管理系统
GO
SELECT姓名,课程名,成绩
FROM成绩表ASa
JOIN课程表AScONa.课程编号=c.课程编号
JOIN学生表ASbONa.学号=b.学号
WHERE(a.课程编号='701')AND(成绩>=90AND成绩<=100)
GO执行结果如图4.19所示图4.19案例执行结果4.3.2相关知识及注意事项
表与表之间的联接类型有4种,分别是内联接、外联接、交叉联接和自联接。1.内联接
【例30】根据“教师表”和“授课表”查询带过课程编号为“701”课程的教师姓名及所在部门。所使用的查询语句为
SELECT姓名,所在部门
FROM教师表ASAINNERJOIN授课表ASB
ONA.教工编号=B.教工编号
或SELECT姓名,所在部门
FROM教师表ASAINNERJOIN授课表ASB
WHEREA.教工编号=B.教工编号2.外联接
【例31】查询所有学生的成绩情况所使用的查询语句为
SELECT*
FROM学生表ASALEFTJOIN成绩表ASB
ONA.学号=B.学号【例32】查询所有课程的选修情况所使用的查询语句为
SELECT学号,课程名,成绩
FROM成绩表ASARIGHTJOIN课程表ASB
ONA.课程编号=B.课程编号3.交叉联接
交叉联接也称笛卡尔积,其结果集为两个来源表交叉匹配的结果,即查询结果中包含两个来源表中记录行数的乘积。4.自联接
联接操作不仅可以在不同的表上进行,而且在同一张表内也可以进行自身联接,即将同一个表的不同行联接起来。【例33】用自联接的方法显示“学生表”中所有名字相同的所有学生的有关信息。所使用的查询语句为
SELECTDISTINCTA.学号,A.姓名,A.性别,A.专业
FROM学生表ASAJOIN学生表ASB
ONA.姓名=B.姓名
WHEREA.学号<>B.学号
ORDERBYA.姓名
4.4子查询操作4.4.1案例实现过程【案例】
在英才职业技术学院的“教学管理系统”数据库上,在“成绩表”、“学生表”和“课程表”中,查询“课程编号”为“701”的课程成绩高于平均分的所有学生的学号、姓名、课程名和成绩的信息。
该案例在基于上节多表查询的基础上,查询某门课常高于平均分的学生信息,在一条查询语句中,要首先查询出该门课程的平均分,然后再通过每个学生的该门课程的成绩与平均分进行比较。
该案例的具体查询语句为
USE教学管理系统
GO
SELECTa.学号,姓名,课程名,成绩
FROM成绩表ASa
JOIN课程表AScONa.课程编号=c.课程编号
JOIN学生表ASbONa.学号=b.学号
WHERE(a.课程编号='701')AND成绩>
(SELECTAVG(成绩)FROM成绩表WHERE课程编号='701')
GO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 山东外国语职业技术大学《智能计算机图形学实验》2023-2024学年第二学期期末试卷
- 辽宁轨道交通职业学院《有限单元法》2023-2024学年第二学期期末试卷
- 浙江省诸暨市诸暨中学2025届高三下学期第一次调研考试语文试题试卷含解析
- 天津职业技术师范大学《阅读(二)》2023-2024学年第二学期期末试卷
- 上海思博职业技术学院《新能源发电技术理论》2023-2024学年第二学期期末试卷
- 外科破伤风病人的护理
- 人际沟通与护理
- 护肤行业定价策略
- 成都市金牛区2023年七年级《语文》下册期中试卷与参考答案
- 美业光电仪器培训
- GB/T 33744-2017地震应急避难场所运行管理指南
- 2022初三体育中考仿真模拟测试实施方案
- c语言程序设计第7章数组课件
- 储能热管理行业专题报告
- “科学与文化论著研习”学习任务群的课程论分析
- 租车费结算单
- 陕北民歌之简介课件
- 近视眼的防控课件
- 食品添加剂 亚硫酸钠标准文本(食品安全国家标准)
- 抖音直播运营团队薪酬绩效考核管理方案(直播带货团队薪酬绩效提成方案)
- 风生水起的投资年报
评论
0/150
提交评论