




免费预览已结束,剩余37页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
SQLServer数据库程序设计 授课教师 姜姗 第七章数据查询 熟练掌握SELECT数据查询语句的语法 熟练掌握SELECT语句相关子句的使用 熟练利用SELECT语句进行简单查询 连接查询和嵌套查询 数据查询是数据库系统最重要的功能 无论是创建数据库 还是创建数据表等 最终的目的都是为了利用数据 而利用数据的前提是需要从数据库中查询出所需要的数据 所谓查询就是根据客户端的要求 数据库服务器搜寻出用户所需要的信息资料 并按用户规定的格式进行整理后返回给客户端 7 1查询语句 SQLServer提供了基于 select from where 语句的数据查询功能 在数据库应用中 SELECT语句提供了丰富的查询能力 可以查询一个表或多个表 对查询列进行筛选 计算 对查询进行分组 排序 甚至可以在一个SELECT语句中嵌套另一个SELECT语句 主要分为 对列的查询 对行的查询 对查询结果排序 使用聚合函数 对查询结果分组 Having字句 分组后按条件筛选 虽然SELECT语句的完整语法非常复杂 但其主要子句可归纳如下 SELECTselect list INTOnew table FROMtable source WHEREsearch condition GROUPBYgroup by expression HAVINGsearch condition ORDERBYorder expression ASC DESC 查询的列名 将查询结果存储到新表中 Select查询语句语法结构 GROUPBY子句 指定用来放置输出行的组 并且如果SELECT子句select list中包含聚合函数 则计算每组的汇总值 HAVING子句 指定组或聚合函数的搜索条件 HAVING通常与GROUPBY子句一起使用 ORDERBY子句 指定结果集的排序方式 ASC关键字表示升序排列结果 DESC关键字表示降序排列结果 如果没有指定任何一个关键字 那么ASC就是默认的关键字 如果没有ORDERBY子句 DBMS将根据输入表中数据的存放位置来显示数据 参数说明 在SELECT查询语句中 各子句之间的顺序非常重要 虽然有些可选子句可以省略 但一旦使用这些子句就必须按照适当的顺序来安排它们的前后 如果在同一个SELECT查询语句中用到了多个子句 则正确的子句排列顺序应如下表所示 按序号由低到高进行编写 SELECT各子句的顺序及功能 SELECT查询语句各子句的编写顺序 第一步 首先执行FROM子句 第二步 如果有WHERE子句 实现基于指定的条件对记录行进行筛选 第三步 如果有GROUPBY子句 它将把数据划为多个分组 第四步 如果有HAVING子句 它将筛选分组 第五步 将SELECT子句作用于结果表 第六步 如果有ORDERBY子句 则按指定的排序规则对结果进行排序 第七步 如果有INTO子句 则将查询结果存储到用户指定的新表中 SELECT查询语句各子句的执行顺序 1 查询列基本格式为 SELECTcolumn name column name FROMtable nameWHERESearch condition 简单查询 1 查询指定列数据表中有很多列 通常情况下并不需要查看全部的列 因为不同的用户所关注的内容不同 例7 1 查询所有同学学号 姓名和成绩信息 SELECTstu id name gradeFROMstu info在指定列查询中 列的显示顺序由SELECT子句指定 与数据在表中的存储顺序无关 同时 在查询多列时 用 将各字段隔开 2 查询所有列 例7 2 查询所有同学的所有信息 SELECT FROMstu info使用 通配符时要慎重 在不需要查询所有列时 尽量采用前面介绍的指定列查询 以免占用过多的资源 3 使用运算列在数据查询时 经常需要对表中的列进行计算 才能获得所需要的结果 在SELECT子句中可以使用各种运算符和函数对指定列进行运算 例7 3 查询所有同学的年龄信息 SELECTstu id name YEAR GETDATE YEAR birthday FROMstu info在这里 YEAR为系统函数 获取指定日期的年份 GETDATE 为系统函数 获取当前日期和时间 4 改变列标题显示SELECTcolumn nameasnew name n FROMtable name 例7 4 查询所有同学的年龄信息 SELECTnameAS 姓名 YEAR GETDATE YEAR birthday AS 年龄 FROMstu info 例1 查询数据表Student中所有学生的学号及年龄 结果中各列的标题分别指定为学号 年龄 SELECTSnoas学号 Sageas年龄FROMStudent或者SELECTSno学号 Sage年龄FROMStudent或者SELECT学号 Sno 年龄 SageFROMStudent注意 当自定义的标题中含有空格时 必须用引号将标题括起来 例2 查询数据表Student中所有学生的学号及年龄 结果中各列的标题分别指定为学号 年龄 SELECTSnoas 学号 Sageas 年龄 FROMStudent 5 去除结果的重复信息使用DISTINCT关键字就能够从返回的结果数据集合中删除重复的行 使返回的结果更简洁 查询所有的院系信息 SELECTDISTINCTsdeptFROMstudent 6 返回查询的前一部分数据 例7 6 查询前5位同学的学号 姓名和成绩信息 SELECTTOP5stu id name gradeFROMstu info 例7 7 查询前50 同学的学号 姓名和成绩信息 SELECTTOP50PERCENTstu id name gradeFROMstu info 7 替换查询结果中的数据在对表进行查询时 有时对所查询的某些列希望得到的是其他概念 如当性别用0 1存储时希望查询结果显示为 男女 或者当成绩小于60时查询结果显示为不及格 其他为及格或优秀 要替换查询结果中的数据 则要用到CASE表达式 21 可编辑 基本格式 CASEWHEN条件1THEN表达式1WHEN条件2THEN表达式2 ELSE表达式END 例1 查询数据表SC的学生的学号 课程号及成绩 对于成绩按以下规定显示 成绩在60分以下显示为不及格 60 79之间显示为良好 80以上显示为优秀 SELECTSno Cno Grade casewhenGrade 60andGrade 80then 优秀 endFROMSC 例2 查询数据表Student的学生的所有记录 对于性别按以下规定显示 性别为0则显示为男 性别为1则显示为女 SELECTSno Sname Ssex casewhenSsex 0then 男 whenSsex 1then 女 end Sage SdeptFROMStudent 例3 查询数据表Student的学生的所有记录 结果按 学号 姓名 性别 年龄 院系 显示 对于性别按以下规定显示 性别为0则显示为男 性别为1则显示为女 SELECTSno学号 Sname姓名 性别 casewhenSsex 0then 男 whenSsex 1then 女 end Sage年龄 Sdept院系FROMStudent 1 使用比较表达式 例7 8 查询所有的男同学学号 姓名 生日和性别信息 SELECTstu id name birthday sexFROMstu infoWHEREsex 男 例7 9 查询所有总分大于550分的同学学号 姓名 生日和性别信息 SELECTstu id name birthday sexFROMstu infoWHEREmark 550 选择行 WHERE子句中比较表达式允许使用的比较操作符包括 等于 大于 不等于 不大于 大于等于 小于等于 不等于 2 使用逻辑比较表达式 例7 12 查询所有信息学院和会计学院并且总分大于550分的同学信息 SELECT FROMstu infoWHERE sdept 信息学院 ORsdept 会计学院 ANDmark 550 注意 AND OR NOT三个运算符中优先级的顺序为 NOT AND OR 3 空值 NULL 的判断所谓NULL 就是空 在数据库中 其长度为0 它与0 空字符串 空格都不同 等价于没有任何值 是未知数 在WHERE子句中 利用IS NOT NULL判别式来判断一个值是否为NULL Select FromcourseWherecpnoisNULL 4 限定数据范围 between和notbetween 例7 14 查询总分在530 560分之间的同学信息 SELECT FROMstu infoWHEREmarkBETWEEN530AND560 BETWEEN可以用含有 和 和 的逻辑表达式来代替 5 限制检索数据的范围对于列值不在一个连续的取值区间 而是一些离散的值时可以用到关键字IN与NOTIN IN是确定给的值是否与子查询或列表中的值相匹配 IN关键字可以指定一个值表集合 值表中列出所有可能的值 当表达式与值表中任一个匹配时 即返回TRUE 否则返回False 例1 查询院系为CS或IS的学生的记录SELECT FROMStudentWHERESdeptin CS IS 例2 查询年龄为18 19或20的学生记录SELECT FROMStudentWHERESagein 18 19 20 例3 查询院系为CS或IS的男学生的记录 当然是用OR运算符也也可以做到同样效果 但不如in简洁 SELECT FROMStudentWHERESdeptin CS IS andSsex 男 6 模糊查询在实际的应用中 用户不会总是能够给出精确的查询条件 因此 经常需要根据一些并不确切的线索来搜索信息 SQLServer提供了LIKE子句来进行这类模糊搜索 LIKE子句在大多数情况下会与通配符配合使用 SQLServer提供了4种通配符供用户灵活实现复杂的模糊查询条件 例1 查找学号以2002开头的所有学生记录SELECT FROMStudentWHERESnolike 2002 例2 查找学号中第5个字符为5的所有学生记录SELECT FROMStudentWHERESnolike 5 例3 查找学号中第5个字符不是5的所有学生记录SELECT FROMStudentWHERESnolike 5 ESCAPE定义转义符在使用LIKE进行模糊查询时 当 和 符号单独出现时 都会被作为通配符进行处理 但有时可能需要搜索的字符串包含一个或多个特殊通配符 若要搜索作为字符而不是通配符的百分号 必须提供ESCAPE关键字和转义符 如 like b escape b b 就作为了转义字符 用来将第二个 转普通 例4 查询DB Design课程的课程号和学分 SELECTCno CcreditFROMCourseWHERECnamelike DB Design ESCAPE 注 定义了一个转义字符 第一个 前面有转义字符 所以它被转义为普通的 字符 在应用中经常要对查询的结果排序输出 例如按学号对学生排序 按成绩对学生排序等等 SELECT语句中的ORDERBY子句可用于对查询结果按照一个或多个字段的值进行升序 ASC 或降序 DESC 排序 默认值为升序 其语法为 ORDERBY 排序项 ASC DESC n 查询结果的排序 例1 查询选修课程号为1的学生的成绩情况 并按照分数降序排列 Select fromSCwhereCno 1 orderbyGradeDesc例2 查询所有学生的成绩情况
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- aed投放管理办法
- 人民币开户管理办法
- 乡镇国土所管理办法
- 生产概预算管理办法
- 深圳隔断间管理办法
- 瑜伽训练室管理办法
- 上海土方车管理办法
- 相关方消防管理办法
- 从化区路政管理办法
- 省培训工作管理办法
- 2025年保密知识在线学习测考试试题及答案指导
- 农村家庭农场蔬菜种植合同
- 导游技能高考题目及答案
- 2025年浙江省金华市金华十校物理高一第二学期期末学业质量监测试题含解析
- 2025年高中教师(数学学科)招聘考试测试卷及答案(共三套)
- 烤烟栽培技术课件
- 2025至2030中国一次性拖鞋行业市场深度研究及发展前景投资可行性分析报告
- (高清版)DB32∕T 5133-2025 电动工具安全风险评估规范
- 新动物防疫法执法培训课件
- 2025年乌鲁木齐市中考物理试卷真题(含答案解析 )
- 企业残疾职工管理制度
评论
0/150
提交评论