第7章 数据查询(课件)-《MySQL数据库原理与应用》同步教学(清华大学出版)

2024-09-18
| 44页
| 204人阅读
| 39人下载
普通

内容正文:

《MySQL数据库原理与应用》 (清华大学出版) 同步教学 1 第7章 数据查询 2 本章概述 数据查询是数据库操作中最常用也是最重要的操作,是指从数据库中获取所需要的数据。在MySQL中使用SELECT语句来查询数据。通过SELECT语句查询数据,有不同的查询方式。不同的查询方式可以获得不同的数据,开发人员可以根据需求选择不同的查询方式。 3 本章学习目标 掌握SELECT查询的语法结构,通过SELECT语句查询所有字段、指定字段和指定数据的操作; 掌握按条件查询数据的方法; 掌握常用的高级查询方式,例如,对查询结果排序、分组查询、使用LIMIT限制查询; 掌握在查询过程中使用聚合函数进一步对查询结果进行加工; 了解连接查询、子查询的操作,以及合并查询结果; 掌握在查询过程中定义表和字段的别名; 掌握常用的正则表达式在查询中的应用。 4 目录 01 02 03 04 高级查询 按条件查询 聚合函数查询 基本查询语句 05 连接查询 06 子查询 07 合并查询结果 定义表和字段的表明 08 使用正则表达式查询 09 5 基本查询语句 7.1.1 SELECT语句 SELECT语句是最常用的查询语句,它的使用方式有简单的,也有复杂的。SELECT语句的基本语法如下。 SELECT selection list //要查询的内容,选择哪些列 FROM 数据表名 //指定数据表 WHERE primary_constraint //查询时需要满足的条件,行必须满足的条件 GROUP BY grouping_columns //如何对结果进行分组 ORDER BY sortingcloumns //如何对结果进行排序 HAVING secondary_constraint //查询时满足的第二条件 LIMIT count //限定输出的查询结果 6 基本查询语句 7.1.1 SELECT语句-使用SELECT语句查询单个数据表 使用SELECT语句从某个数据表查询数据时,首先要确定要查询的列。“*”代表所有的列。例如,查询db_library数据库的tb_admin表中的所有数据,代码如下。 USE db_library; SELECT * FROM tb_admin; 查询结果如图所示。 7 基本查询语句 7.1.1 SELECT语句-查询数据表中的指定列 查询数据表中的多列,只要在SELECT后面指定要查询的列名即可,多列之间用“,”分隔。例如,查询tb_admin表中的admin_id和username列数据: SELECT admin_id,username FROM tb_admin; 查询结果如图所示。 8 基本查询语句 7.1.1 SELECT语句-从一个或多个表中获取数据 确定所要查询的数据在哪个表中,在对多个表进行查询时,同样使用“,”对多个表进行分隔。例如,从tb_book表和tb_category表中查询出tb_book.book_id、tb_book.bookname、tb_category.cat_name和tb_book.price字段的值: SELECT tb_book.book_id,tb_book.bookname,tb_category.cat_name,tb_book.price from tb_category,tb_book WHERE tb_book.cat_id=tb_category.cat_id; 查询结果如图所示。 9 基本查询语句 7.1.2 查询所有字段 确定所要查询的数据在哪个表中,在对多个表进行查询时,同样使用“,”对多个表进行分隔。例如,从tb_book表和tb_category表中查询出tb_book.book_id、tb_book.bookname、tb_category.cat_name和tb_book.price字段的值: SELECT tb_book.book_id,tb_book.bookname,tb_category.cat_name,tb_book.price from tb_category,tb_book WHERE tb_book.cat_id=tb_category.cat_id; 查询结果如图所示。 10 基本查询语句 7.1.3 查询指定字段 查询指定字段的数据可以使用下面的语法格式: SELECT 字段名 FROM 表名; 如果查询多个字段,可以使用“,”对字段进行分隔。 例如,查询图书信息表tb_book中图书的名称、作者、价格、图书唯一识别码: SELECT bookname,author,price,ISBN FROM tb_book; 11 基本查询语句 7.1.4 查询指定数据 如果要从很多记录中查询出指定的记录,则需要设定查询的条件。设定查询条件应用的是WHERE子句,该子句可以实现很多复杂的条件查询。例如,查询名称为Romero的管理员: SELECT * FROM tb_admin WHERE username='Romero'; 12 按条件查询 7.2.1 带关系运算符的查询 带关系运算符的查询,也就是将MySQL支持的关系运算符引入数据库查询中。例如,从图书管理数据库db_library的图书信息表tb_book中,查询定价price大于40元的图书。语句如下: SELECT bookname,author,price FROM tb_book WHERE price>40; 13 按条件查询 7.2.2 带IN关键字的查询 关键字IN可以判断某个字段的值是否在指定的集合中。如果字段的值在集合中,则满足查询条件,返回该字段所属记录;如果不在集合中,则不满足查询条件,不返回该记录。 语法格式如下。 SELECT * FROM 表名 WHERE 条件 [NOT] IN(元素1,元素2,…,元素n); 例如: SELECT book_id,bookname,author FROM tb_book WHERE author IN('明日科技', '刘丹冰'); 14 按条件查询 7.2.3 带BETWEEN AND关键字的查询 关键字BETWEEN AND可以判断某个字段的值是否在指定的范围内。如果字段的值在指定范围内,则满足查询条件,该记录将被查询出来;如果不在指定范围内,则不满足查询条件。其语法如下。 SELECT * FROM 表名 WHERE 条件 [NOT] BETWEEN 取值1 AND 取值2; 例如: SELECT bookname,author,price FROM tb_book WHERE price BETWEEN 30 AND 40; 15 按条件查询 7.2.4 空值查询 IS NULL关键字可以用来判断字段的值是否为空值(NULL)。例如,为图书信息表tb_book添加test字段,然后插入若干数据值,语句如下: ALTER TABLE tb_book ADD test VARCHAR(50) NULL; 16 按条件查询 7.2.5 用关键字DISTINCT去除结果中的重复行 使用DISTINCT关键字可以去除查询结果中的重复记录,语法格式如下。 SELECT DISTINCT 字段名 FROM 表名; 例如,要查看tb_book表中有哪些书架上有书,语句如下: SELECT DISTINCT bookcase FROM tb_book; 17 按条件查询 7.2.6 带LIKE关键字的查询 LIKE属于较常用的比较运算符,可用于实现模糊查询。它有两种通配符:“%”和下画线“_”。 “%”可以匹配一个或多个字符,可以代表任意长度的字符串,长度可以为0。例如,“明%技”表示以“明”开头、以“技”结尾的任意长度的字符串。该字符串可以代表明日科技、明日编程科技、明日图书科技等字符串。 “_”只匹配一个字符。例如,m_n表示以m开头、以n结尾的3个字符。中间的“_”可以是任意一个字符。 18 按条件查询 7.2.7 带AND关键字的多条件查询 AND关键字可以用来联合多个条件进行查询。使用AND关键字时,只有同时满足所有查询条件的记录才会被查询出来;如果不满足查询条件中的一个,那么这样的记录将被排除。AND关键字的语法格式如下。 SELECT * FROM 数据表名 WHERE 条件1 AND 条件2 […AND 条件表达式n]; 判断输入的管理员账号和密码是否存在: SELECT book_id,bookname,author FROM tb_book WHERE bookname LIKE '%GO%' AND author='刘丹冰'; 19 按条件查询 7.2.8 带OR关键字的多条件查询 使用OR关键字时,只要满足查询条件中的一个,那么此记录就会被查询出来。例如,根据作者查询图书信息: SELECT book_id,bookname,author FROM tb_book WHERE author='明日科技' OR author='刘丹冰'; 20 7.3 高级查询 使用ORDER BY关键字可以对查询的结果进行升序(ASC)或降序(DESC)排列。 ORDER BY 字段名 [ASC|DESC]; ASC表示按升序排列,DESC表示按降序排列。例如: SELECT book_id,bookname,price FROM tb_book ORDER BY price DESC; 7.3.1 对查询结果排序 21 7.3 高级查询 GROUP BY子句可以将数据划分到不同的组中,实现对记录进行分组查询。例如:使用GROUP BY关键字对tb_book表中bookcase字段进行分组查询,语句如下。 SELECT bookcase,COUNT(*) FROM tb_book GROUP BY bookcase; 此外,还可以按多个字段进行分组。 7.3.2 分组查询 22 7.3 高级查询 LIMIT子句可以对查询结果的记录条数进行限定,控制输出的行数。例如: SELECT book_id,bookname,price FROM tb_book ORDER BY price DESC LIMIT 3; 7.3.3 使用LIMIT限制查询结果数量 23 聚合函数查询 返回选择集合中所有行的数目,包含NULL值的行: SELECT COUNT(*) FROM tb_book; COUNT函数 24 聚合函数查询 SUM()函数可以求出表中某个数值类型字段取值的总和。例如:使用SUM()函数统计tb_book表中总金额字段(total)的总和,语句如下。 SELECT SUM(total) FROM tb_book; SUM函数 25 聚合函数查询 AVG()函数可以求出表中某个数值类型字段取值的平均值。例如: 使用AVG()函数求tb_book表中图书价格(price)字段值的平均值,语句如下。 SELECT AVG(price) FROM tb_book; AVG函数 26 聚合函数查询 MAX()函数可以求出表中某个数值类型字段取值的最大值。例如,使用MAX()函数查询tb_book表中price字段值的最大值,语句如下。 SELECT MAX(price) FROM tb_book; MAX函数 27 聚合函数查询 使用MIN()函数查询tb_book表中price字段值的最小值。查询语句如下。 SELECT MIN(price) FROM tb_book; MIN函数 28 连接查询 内连接(INNER JOIN)是SQL中的一种连接类型,用于将两个或多个表中的记录根据某个条件进行匹配,并返回匹配的记录。 内连接可以分为几种类型: 等值连接。在连接条件中使用等于号(=)运算符比较被连接列的列值。 非等值连接。在连接条件中使用除等于运算符以外的其他比较运算符,如大于、小于等。 自连接。将一张表看作两张表,通过别名区分,然后进行连接查询。 内连接查询 29 连接查询 【例7-22】使用内连接查询图书的借阅信息。代码如下。 SELECT tb_borrow.book_id,tb_book.bookname,tb_borrow.borrowTime,tb_borrow.backTime,tb_borrow.ifback FROM tb_book,tb_borrow WHERE tb_borrow.book_id=tb_book.book_id; 内连接查询 30 连接查询 外连接(Outer Join)是一种SQL JOIN操作,它允许从一个表中选择所有的记录,而无论在另一个表中是否有匹配的记录。如果记录在另一个表中没有匹配,那么结果集中的值为NULL。 在左外连接查询时,查询左表所有数据,以及两张表交集部分的数据。语法格式如下: SELECT 字段列表 FROM 表1 LEFT OUTER JOIN 表2 ON 条件…; 右外连接(RIGHT JOIN)和左外连接恰好相反。右外连接包括右边的所有数据,以及两张表交集部分数据。表中不符合条件的数据,在相应列中填充NULL值。 外连接查询 31 子查询 IN运算符可以检测结果集中是否存在某个特定的值,如果检测成功,则执行外部的查询。 SELECT book_id,bookname,author FROM tb_book WHERE book_id IN(SELECT book_id FROM tb_borrow); 带IN关键字的子查询 32 子查询 从归还表tb_back中查询图书编号book_id等于1002的管理员(operator),然后查询tb_admin表中姓名username为该管理员的信息,代码如下。 SELECT * FROM tb_admin WHERE username = ( SELECT operator FROM tb_back WHERE book_id=1002); 带比较运算符的子查询 33 子查询 应用带EXISTS关键字的子查询实现查询已经被借阅的图书的信息,代码如下。 SELECT book_id,bookname,author FROM tb_book WHERE EXISTS (SELECT * FROM tb_borrow WHERE tb_borrow.book_id=tb_book.book_id); 带EXISTS关键字的子查询 34 子查询 使用ANY关键字时,只要满足内层查询语句返回的结果中的任意一个,就可以通过该条件来执行外层查询语句。语法格式如下。 列名 比较运算符 ANY(子查询) 例如,从图书信息表tb_book中查询出非最低价格的全部图书信息,主要是通过带ANY关键字的子查询实现查询非最低图书价格的图书信息,示例代码如下。 SELECT book_id,bookname,author,price FROM tb_book WHERE price > ANY(SELECT Min(price) FROM tb_book); 带ANY关键字的子查询 35 子查询 使用ALL关键字时,只有满足内层查询语句返回的所有结果,才可以执行外层查询语句。语法格式如下。 列名 比较运算符 ALL(子查询) 例如,查询比图书编号1001价格高的全部图书信息,主要是通过带ALL关键字的子查询实现,示例代码如下。 SELECT book_id,bookname,author,price FROM tb_book WHERE price > ALL(SELECT price FROM tb_book WHERE book_id=1001); 带ALL关键字的子查询 36 合并查询结果 使用UNION关键字可以将多个结果集合并到一起,并且会去除相同记录。假设有一个与归还表tb_back结构相同的数据表tb_back_copy1,查询结果如图所示。 7.7.1 使用UNION关键字 37 合并查询结果 下面使用UNION关键字合并两个表的查询结果,语句如下。 SELECT * FROM tb_back UNION SELECT * FROM tb_back_copy1; 查询结果如图所示。结果显示,所有结果被合并,重复值被去除。 7.7.1 使用UNION关键字 38 合并查询结果 UNION ALL关键字的使用方法类似于UNION关键字,也是将多个结果集合并到一起,但是该关键字不会去除相同记录。下面使用UNION ALL关键字合并查询结果,但是不去除重复值,代码如下。 SELECT * FROM tb_back UNION ALL SELECT * FROM tb_back_copy1; 7.7.2 使用UNION ALL关键字 39 定义表和字段的别名 使用左连接查询实现查询图书的完整信息,并为图书信息表tb_book指定别名为book,为图书类别表tb_category指定别名为category。 具体代码如下。 SELECT book.bookname,book.author,category.cat_name FROM tb_book AS book LEFT JOIN tb_category AS category ON book.cat_id= category.cat_id; 7.8.1 为表取别名 40 定义表和字段的别名 MySQL中为字段取别名的基本形式如下。 字段名 [AS] 别名 实现统计每本图书的借阅次数,并取别名为degree。在COUNT(*)后面接上AS关键字和别名degree即可,修改后的代码如下。 SELECT book_id,COUNT(*) AS borrow_numbers FROM tb_borrow GROUP BY book_id; 7.8.2 为字段取别名 41 使用正则表达式查询 在MySQL中,使用关键字REGEXP来匹配查询正则表达式,其基本形式如下。 字段名 REGEXP '匹配方式' 例如,从tb_admin表username字段中查询包含a、e、i、o和u这5个字母的任意一个的记录,代码如下。 SELECT admin_id,username FROM tb_admin WHERE username REGEXP '[aeiou]'; 42 本章小结 本章对MySQL数据库常见的查询方法进行了详细讲解,并通过大量的举例说明,帮助读者更好地理解所学知识的用法。在阅读本章时,读者应该重点掌握单表查询、连接查询、子查询和合并查询结果。本章学习的难点是使用正则表达式来查询。正则表达式的功能很强大,使用起来很灵活。希望读者能够查阅正则表达式的相关资料,以更加透彻地理解正则表达式。 43 谢谢观看 汇报人:秒出PPT 44 $$

资源预览图

第7章 数据查询(课件)-《MySQL数据库原理与应用》同步教学(清华大学出版)
1
第7章 数据查询(课件)-《MySQL数据库原理与应用》同步教学(清华大学出版)
2
第7章 数据查询(课件)-《MySQL数据库原理与应用》同步教学(清华大学出版)
3
第7章 数据查询(课件)-《MySQL数据库原理与应用》同步教学(清华大学出版)
4
第7章 数据查询(课件)-《MySQL数据库原理与应用》同步教学(清华大学出版)
5
第7章 数据查询(课件)-《MySQL数据库原理与应用》同步教学(清华大学出版)
6
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。