
MySQL数据库管理与应用任务式教程(微课版)单元5 查询数据.pptx
51页单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2024/6/3,#,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,2024/6/3,#,单元,5,查询数据,MySQL,数据库管理与应用任务式教程(慕课版),学习内容,任务,1,实现学生成绩管理数据库的单表查询,2,任务,2,实现学生成绩管理数据库的连接查询,数据库系统的组成,任务,3,实现学生成绩管理数据库的子查询,任务,4,卸载,MySQL,任务,1,实现学生成绩管理数据库的单表查询,使用,SELECT,语句既可以完成简单的单表查询,也可以完成复杂的连接查询和子,查询SELECT,语句的,基本,语法格式如下,SELECT,ALL|DISTINCT|DISTINCTROW,select_expr,select_expr.,FROM table_references,PARTITION partition_list,WHERE where_condition,GROUP BY col_name|expr|positionASC|DESC,WITH ROLLUP,HAVING where_condition,ORDER BY col_name|expr|positionASC|DESC,LIMIT offset,row_count|row_count OFFSET offset,单表查询是指仅涉及一个表的查询。
5.1.1 选择列,最基本的SELECT语句仅有要返回的列和这些列的来源表,,这种不使用WHERE子句的查询称为无条件查询,,也称作投影查询,1查询表中所有的列,使用 SELECT 语句查询表中所有的列时,不必逐一列出列名,可用“*”通配符代替所有列名,但此时只能按照数据表中列的原有顺序进行排列任务,1,实现学生成绩管理数据库的单表查询,【例题 5.1】在学生成绩管理数据库 cjgl 中,查询学生表 xs 中每位学生的信息打开,MySQL Workbench,,在代码编辑区输入如下语句USE cjgl;,SELECT*FROM xs;,任务,1,实现学生成绩管理数据库的单表查询,2查询表中指定的列,许多情况下,用户只对表中的部分列感兴趣,可以使用 SELECT 语句查询表中指定的列,各列名之间要以英文逗号分隔,列的显示顺序可以改变当列名很长或者涉及计算列时,为了方便阅读,可以在列名之后使用 AS 子句来自定义,列标题(别名)以取代原来的列名AS 关键字可以省略,省略后列名和别名用空格隔开,例题,5.2】,在学生成绩管理数据库,cjgl,中,查询学生表,xs,中每位同学的姓名、学号和专业名。
可以通过,MySQL,命令行客户端执行如下语句来实现查询,结果如图,5-2,所示mysqlUSE cjgl;,mysqlSELECT,姓名,学号,专业名,AS,专业,FROM xs;,可以用同样的方式为数据表指定别名表别名只在执行查询时使用,并不在返回结果中显示例如下面的语句SELECT,姓名,学号,专业名,专 业,FROM,xs AS a,;,任务,1,实现学生成绩管理数据库的单表查询,3查询经过计算的列,SELECT子句中的列名列表可以是表达式,,,如例题5.3中用到了日期函数,year(),用于输出对列值计算后的值例题 5.3】在学生成绩管理数据库 cjgl 中,查询学生表 xs 中每位同学的学号、姓名和年龄,执行如下语句,,结果如图 5-3 所示,USE,cjgl;,SELECT,学号,姓名,year(now()-year(出生时间)AS 年龄 FROM xs;,任务,1,实现学生成绩管理数据库的单表查询,4消除重复行,关键字DISTINCT可用于消除查询结果中以某列为依据的重复行,,以保证行的唯一性DISTINCT 关键字必须放在列名列表的前面,如果涉及多个列,则会对多个列进行组合去重。
例题 5.4】在学生成绩管理数据库 cjgl 中,查询选修了课程的学生的学号,执行如下语句,,结果如图 5-4 所示USE cjgl;,SELECT DISTINCT 学号 FROM cj;,成绩表中相同学号的记录可能有多行,要查询选修了课程的学生的,学号,只需要保留一条选课记录任务,1,实现学生成绩管理数据库的单表查询,5限制返回的行数,当数据表中有很多行数据时,一次性查询出表中的全部数据会降低数据返回的速度可以用 LIMIT 子句来限制查询结果返回的行数LIMIT 子句可用于指定查询结果从哪条记录开始显示多少条记录,其基本语法格式如下LIMIT offset,row_count|row_count OFFSET offset,row_count:表示显示的记录条数OFFSET:表示偏移量;偏移量为 0 表示从第 1 条记录开始显示,偏移,量为 1 表示从第 2 条记录开始显示,以此类推任务,1,实现学生成绩管理数据库的单表查询,【例题 5.5】在学生成绩管理数据库 cjgl 中,查询选修了课程的前 6 位学生的学号,返回从第 3 条记录开始的 4 条记录执行如下语句,结果如图 5-5 所示。
USE cjgl;,SELECT 学号 FROM cj LIMIT 6;,SELECT 学号 FROM cj LIMIT 2,4;,或,SELECT 学号 FROM cj LIMIT 4 OFFSET 2;,5.1.2 选择行,当要在表中查找出满足某些条件的行时,,,需要使用WHERE子句指定查询条件,,这种查询称为选择查询,其语法格式如下WHERE,其中,查询条件可以是表达式比较、范围比较、确定集合、模糊查询、空值判断和子查询等表达式,其结果为 TRUE、FALSE 或 UNKNOWN1,表达式比较,比较运算符用于比较两个表达式的值比较运算的语法格式如下expression=|=|expression,其中,expression 是除 TEXT、NTEXT 和 IMAGE 类型外的表达式,当需要通过,WHERE,子句指定一个以上的查询条件时,则需要使用逻辑运算符,AND,、,OR,、,XOR,和,NOT,将其连成复合的逻辑表达式AND,表示记录满足所有查询条件时,才会被查询出来OR,表示记录满足任意一个查询条件时,就会被查询出来XOR,表示记录满足其中一个条件,并且不满足另一个条件时,才会被查询出来。
NOT,表示记录不满足查询条件时,才会被查询出来任务,1,实现学生成绩管理数据库的单表查询,【,例题 5.6】在学生成绩管理数据库 cjgl 中,查询软件技术专业的学生的信息,执行如下语句,,结果如图 5-6 所示SELECT,*FROM xs,WHERE,专业名=软件技术;,任务,1,实现学生成绩管理数据库的单表查询,【例题 5.7】在学生成绩管理数据库 cjgl 中,查询软件技术专业的男同学的信息,执行如下语句,,结果如图 5-7 所示USE cjgl;,SELECT*FROM xs WHERE 专业名=软件技术 AND 性别=男;,任务,1,实现学生成绩管理数据库的单表查询,2,范围比较,当,要查询的条件是某个值的范围时,可以使用关键字,BETWEEN,BETWEEN,用于,检查某个,值是否在两个值之间,其语法格式如下expression,NOT BETWEEN expression1 AND expression2,注意:,expression1,的值不能大于,expression2,的值,例题,5.8】,在学生成绩管理数据库,cjgl,中,查询,2000,年出生的学生的信息执行如下语句,结果如图,5-8,所示。
USE cjgl;,SELECT*FROM xs,WHERE,出生时间,BETWEEN 2000-1-1 AND 2000-12-31;,或,SELECT*FROM xs WHERE year(,出生时间,)=2000;,任务,1,实现学生成绩管理数据库的单表查询,3确定集合,IN运算符用来查询属性值属于指定集合的元组,,主要用于表达子查询,其语法格式如下expression NOT IN(subquery|expression,n),使用IN运算符时不允许值列表中出现空值,例题 5.9】,在学生成绩管理数据库cjgl中,,查找选修了课程号为“101”或“102”,的同学的信息执行如下语句,,结果如图 5-9 所示USE cjgl;,SELECT 学号,课程号 FROM cj WHERE 课程号 IN(101,102);,或,SELECT 学号,课程号 FROM cj WHERE 课程号=101 OR 课程号,=102,;,由此可以看出,IN 运算符实际上是多个 OR 运算符的缩写任务,1,实现学生成绩管理数据库的单表查询,4模糊查询,当不知道精确的值时,可以使用 LIKE 关键字进行部分匹配查询,也称模糊查询。
LIKE 关键字用于判断一个字符串是否与指定的字符串匹配,,其运算对象可以是CHAR、VARCHAR、TEXT、NTEXT、DATETIME,和 SMALLDATETIME 类型的数据,返回逻辑值 True 或 False模糊查询的一般语法格式如下string_expression NOT LIKE string_expression ESCAPE,escape_character,字符串常量可以包含表,5-1 所示的 MySQL 通配符通配符不能用于匹配,NULL若要匹配用作通配符的字符,,可用关键字ESCAPE,ESCAPE,escape_character 表示将字符,escape_character 作为实际的字符对待任务,1,实现学生成绩管理数据库的单表查询,【例题 5.10】,在学生成绩管理数据库cjgl中,,查找所有王姓同学的学号和姓名;,查询姓名中第2,个汉字是“长”的同学的学号和姓名,执行如下语句,,结果如图 5-10 所示USE cjgl;,SELECT 学号,姓名 FROM xs WHERE 姓名 LIKE 王%;,SELECT 学号,姓名 FROM xs WHERE 姓名 LIKE _长%;,任务,1,实现学生成绩管理数据库的单表查询,5空值判断,当需要判定一个表达式的值是否为空值时,可使用 IS NULL 关键字,其语法格式如下。
expression IS NOT NULL,【例题 5.11】在学生成绩管理数据库 cjgl 中,查询没有考试成绩的学生的学号和相应的课程号,在查询窗口中输入如下,SQL 语句并执行USE cjgl;,SELECT 学号,课程号 FROM cj WHERE 成绩 IS NULL;,这里的空值条件不能写成,“成绩=NULL”任务,1,实现学生成绩管理数据库的单表查询,5.1.3 对查询结果进行排序,使用,ORDER BY 子句可以对查询结果进行排序,其语法格式如下ORDER BY col_name|expr|position ASC|DESC,.n,其中,,列名、表达式和位置值用于指定排序关键字位置值表示排序列在选择列表中所处位置的序号多个列名间以英文逗号分隔,查询结果先按指定的第一列进行排序,然后按指定的下一列进行排序排序方式可以指定为降序(DESC)或升序(ASC),默认为升序ORDER,BY 子句必须出现在其他子句之后任务,1,实现学生成绩管理数据库的单表查询,【例题 5.12】在学生成绩管理数据库 cjgl 中,将软件技术专业的学生按出生时间降序排列执行如下语句,结果如图 5-11 所示。
USE cjgl;,SELECT*FROM xs,WHERE 专业名=软件技术,ORDER BY 出生时间,姓名 DESC;,任务,1,实现学生成绩管理数据库的单表查询,5.。












