第5章 数据查询_第1页
第5章 数据查询_第2页
第5章 数据查询_第3页
第5章 数据查询_第4页
第5章 数据查询_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

第5章数据查询1.SELECT语句2.简单查询3.高级查询本章内容1.SELECT语句数据查询是指数据库管理系统按照用户指定的条件,从数据库相关表中检索满足条件的数据的过程。SELECT语句主要用于数据的查询检索,是SQL语言的核心,也是使用频率最高的一条语句。SELECT语句可以让数据库服务器根据用户的要求,从数据库的表中检索出所需要的数据,并按照用户指定的格式进行整理并返回。1.SELECT语句(1)SELECT语句基本语法SELECT语句的语法格式如下:SELECT[ALL|DISTINCT]*|字段列表FROM表名[WHERE查询条件][GROUPBY分组字段[HAVING分组条件]][ORDERBY排序字段[ASC|DESC]][LIMIT[初始位置,]记录数];1.SELECT语句(2)示例数据库学生表(student)student(id,sNo,sName,sex,birthday,deptName,remark)课程表(course)course(id,cNo,cName,credit,remark)成绩表(score)score(id,sid,cid,grade)2.简单查询(1)选择字段选择所有字段SELECT*FROM表名;选择指定字段SELECT字段名1[,字段名2,…,字段名n]FROM表名;定义字段别名SELECT字段名1[AS]列标题1[,字段名2[AS]列标题2,…]FROM表名;2.简单查询(1)选择字段示例5-1:显示student表中的所有信息。示例5-2:从student表中查询出班级名称(deptName),学号(sNo)、姓名(sName)、和性别(sex)的学生信息。示例5-3:以“学号

姓名

性别

出生日期”作为列标题显示学生信息。2.简单查询(2)WHERE子句在实际工作中,大部分查询并不是针对表中所有数据记录的查询,而是要找出满足某些条件的数据记录。此时我们可以在SELECT语句中使用WHERE子句,其语法格式如下:SELECT*|字段列表FROM表名WHERE查询条件;2.简单查询(2)WHERE子句使用比较运算符2.简单查询(2)WHERE子句使用比较运算符

示例5-4:查询student表中女学生的信息。

示例5-5:查询course表中超过4个学分(credit)的课程信息。2.简单查询(2)WHERE子句使用逻辑运算符2.简单查询(2)WHERE子句使用逻辑运算符

示例5-6:查询student表中1995年出生的学生的相关信息。2.简单查询(2)WHERE子句使用LIKE进行模糊查询

在WHERE子句中,通过LIKE关键字与“%”和“_”两个通配符的使用,可以对数据表中的数据进行模糊查询。这两个通配符的含义如下所示:百分号(%):表示匹配0个或者任意多个字符。下划线(_):表示匹配任意一个字符。2.简单查询(2)WHERE子句使用LIKE进行模糊查询

示例5-7:从student表中检索出所有姓“杨”学生的信息。

示例5-8:从student表中检索出姓名的第二个字是“伟”和“先”的学生的信息。2.简单查询(2)WHERE子句使用BETWEENAND进行范围比较查询

在WHERE子句中,可以使用BETWEENAND关键字对指定字段的某一范围内的数据进行比较查询,其与使用“>=”且“<=”的功能一样。其语法格式如下:

字段名

[NOT]BETWEEN值1AND值22.简单查询(2)WHERE子句使用BETWEENAND进行范围比较查询

示例5-9:使用BETWEENAND关键字实现示例5-6的功能。

示例5-10:从score表中查询出成绩不在60-89分之间的学生的成绩信息。2.简单查询(2)WHERE子句使用IN进行范围比对查询

如果字段的取值范围不是一个连续的区间,而是一些离散的值,可以使用IN关键字对指定字段进行范围比对查询。其语法格式如下:

字段名

[NOT]IN(值1[,值2,值3,…])2.简单查询(2)WHERE子句使用IN进行范围比对查询

示例5-11:查询student表中学号(sNo)为1308013101,1309122503,1312054904的学生的信息。

2.简单查询(2)WHERE子句空值(NULL)的判断

空值(NULL)是一个特殊的值,它仅仅是一个符号,不等于空字符串,也不等于0。空值判断的语法格式如下:

字段名IS[NOT]NULL2.简单查询(2)WHERE子句空值(NULL)的判断

示例5-12:检索course表中备注(remark)为空的课程记录。2.简单查询(3)ORDERBY子句使用ORDERBY子句可以将查询结果进行排序显示。其语法格式如下:SELECT*|字段列表FROM表名[WHERE查询条件]ORDERBY字段名1[ASC|DESC][,字段名2[ASC|DESC]][,…];2.简单查询(3)ORDERBY子句示例5-13:查询student表中的男生信息,按照出生日期(birthday)的降序排列。示例5-14:查询student表中的数据,先按性别(sex)的升序排列,当性别相同时再按照学号(sNo)的降序排列。

2.简单查询(4)LIMIT子句使用LIMIT子句,可以限制SELECT语句返回的记录数。LIMIT子句通常位于SELECT语句的最后面,其语法格式如下:SELECT*|字段列表FROM表名[WHERE查询条件][ORDERBY排序字段[ASC|DESC]][LIMIT[初始位置,]记录数];2.简单查询(4)LIMIT子句示例5-15:返回年龄最小的5位同学的信息。示例5-16:返回课程ID(cId)为“1”课程的第2~4名学生的成绩。2.简单查询(5)DISTINCT关键字在对数据进行查询时,如果返回的查询结果中包含重复的记录,可以使用DISTINCT关键字取消重复的数据,只返回其中的一条。其语法格式如下:SELECTDISTINCT字段列表FROM表名;2.简单查询(5)DISTINCT关键字示例5-17:查询score表,显示选修了课程的学生ID,如果有多个相同的学生ID,只需显示一个即可。3.高级查询(1)多表查询关系数据库在进行数据表设计时,为了减少冗余,确保数据一致性、完整性,要求数据表的设计符合规范(比如3NF),为了遵循这些规范,往往需要将数据分离到多张表中。在实际应用中,又往往需要将多张表的相关数据提取,聚合后一起提供给用户,即需要多表查询。多表查询的本质是多张表通过关联的列的连接,所以多表查询也称为连接查询。3.高级查询(1)多表查询多表(连接)查询的语法格式有如下两种:SELECT*|字段列表FROM表名1[连接类型]JOIN表名2ON连接条件[[连接类型]JOIN表名3ON连接条件][…]WHERE查询条件;SELECT*|字段列表FROM表名1,表名2[,表名3,…表名n]WHERE连接条件AND查询条件;3.高级查询(1)多表查询内连接

内连接(INNERJOIN)是指多个表通过连接条件中共享列的值进行的比较连接,INNER关键字可以省略,当未指明连接类型时,默认为内连接。3.高级查询(1)多表查询内连接

示例5-18:查询所有女生的学号、姓名、性别、课程ID和成绩。

示例5-19:查询学号(sNo)为“1308013101”学生的学号、姓名、性别、班级、课程名称和成绩。3.高级查询(1)多表查询外连接

外连接显示包含来自一个表中所有行和来自另一个表中匹配行的结果集,外连接主要又分为左外连接和右外连接。3.高级查询(1)多表查询外连接

示例5-20:显示“网络131”班学生的学号、姓名、性别、班级、课程ID和成绩。3.高级查询(2)统计函数MySQL不仅可以查询返回满足条件的记录,还可以对数据进行统计汇总。3.高级查询(2)统计函数示例5-21:统计student表中的男生人数。示例5-22:统计学号(sNo)为“1308013101”的学生选修课程的最高分、最低分、平均分和总分。示例5-23:统计已选修课程的学生人数。3.高级查询(3)GROUPBY子句使用GROUPBY子句,可以显示分组的汇总数据。其语法格式为:SELECT字段名1[,字段名2,…],统计函数FROM表名[WHERE查询条件]GROUPBY字段名1[,字段名2,…][HAVING分组条件];3.高级查询(3)GROUPBY子句示例5-24:分组统计男、女学生的人数。示例5-25:分组统计被选修过1次以上的课程名称、选修次数和平均分。示例5-26:分组统计选修超过2门课程、且平均成绩高于80分的学生学号、姓名、选修门数和平均分。3.高级查询(4)嵌套查询嵌套查询是指一个SELECT语句的WHERE子句中还包含另外一个SELECT语句,外层的SELECT语句称为外部查询或父查询,内层的SELECT语句称为内部查询或子查询,子查询需要使用圆括号“()”括起来。SQL语言允许多层嵌套查询,即一个子查询中还可以有其他子查询。3.高级查询(4)嵌套查询子查询的返回值为单列单值

如果子查询的返回值为单列单值,可以通过使用“=”、“!=”、“>”、“<”等比较运算符直接与父查询的字段值进行比较。3.高级查询(4)嵌套查询子查询的返回值为单列单值

示例5-27:查询与学号(sNo)为“1308013101”的同学在同一个班级的学生名单。

示例5-28:查询选修课程编号(cNo)为“01001”的课程、且成绩超过该课程平均分的学生的学号、姓名、班级、课程名称和成绩。3.高级查询(4)嵌套查询子查询的返回值为单列多值

如果子查询的返回值为单列多值,可以使用IN或NOTIN关键字,即表示在或者不在子查询的结果集中。3.高级查询(4)嵌套查询子查询的返回值为单列多值

示例5-29:查询选修课程编号(cNo)为“01001”的课程的学生名单。

示例5-30:查询学号为“1308013101”的学生选修的课程信息。

示例5-31:查询没有选修课程的女生名单。3.高级查询(4)嵌套查询子查询的返回值为多列数据

如果子查询的返回值为多列数据,可以使用EXISTS或NOTEXISTS关键字。3.高级查询(4)嵌套查询子查询的返回值为多列数据

示例5-32:查询选修课程的女生名单,使用关键字EXISTS。3.高级查询(5)带子查询的数据更新带子查询的数据更新主要包括:向表中插入子查询结果集、带子查询的修改语句、带子查询的删除语句,使用的SQL语句同样还是INSERT、UPDAE、DELETE。其中,向表中添加子查询结果集的语法格式如下:INSERTINTO表名[(字段名1,字段名2,...,字段名n)]SELECT

温馨提示

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

评论

0/150

提交评论