大家好,我是Java1234_小锋老师,最近更新 《一天学会 Mysql8 视频教程(无废话版) 》专辑,感谢大家支持。

本课程主要介绍和讲解 Mysql8简介,安装以及配置,客户端sqlyog 安装以及配置,数据库 基本操作,数据库表基本操作,查询数据,添加,修改,删除数据,索引,视图,触发器 ,常用函数,存储过程和函数。
视频教程+课件+源码 打包下载:
链接:https://pan.baidu.com/s/1o-zRfndo1HHrS_uFroOiCw?pwd=1234
提取码:1234
Mysql8(在第一阶段目录里)
Mysql8 查询数据
首先初始化下数据:
sql
-- 插入图书类别
INSERT INTO t_booktype (id, bookTypeName, bookTypeDesc) VALUES
(1, '软件工程类', '涵盖软件开发、项目管理、软件测试等'),
(2, '计算机网络类', '涵盖网络协议、网络安全、网络架构等'),
(3, '计算机人工智能', '涵盖机器学习、深度学习、自然语言处理等');
-- 插入图书数据
INSERT INTO t_book (id, bookName, author, price, bookTypeId) VALUES
(1, '代码大全', '史蒂夫·迈克康奈尔', 128.00, 1),
(2, '人月神话', '弗雷德里克·布鲁克斯', 59.00, 1),
(3, '计算机网络:自顶向下方法', '詹姆斯·库罗斯', 89.00, 2),
(4, 'TCP/IP详解', 'W.理查德·史蒂文斯', 108.00, 2),
(5, '人工智能:一种现代的方法', '斯图尔特·罗素', 168.00, 3),
(6, '机器学习', '周志华', 88.00, 3);
1, 单表查询
1.1 查询所有字段
-
SELECT 字段1, 字段2, 字段3... FROM 表名; -
SELECT * FROM 表名; -
实例:查询所有图书信息
sqlSELECT * FROM t_book;
1.2 查询指定字段
-
SELECT 字段1, 字段2, 字段3... FROM 表名; -
实例:查询所有图书的书名和作者
sqlSELECT bookName, author FROM t_book;
1.3 Where 条件查询
-
SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 条件表达式; -
实例:查询价格大于50元的图书
sqlSELECT * FROM t_book WHERE price > 50;
1.4 带 IN 关键字查询
-
SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 字段 [NOT] IN (元素1, 元素2, 元素3); -
实例:查询类别为1或2的图书
sqlSELECT * FROM t_book WHERE bookTypeId IN (1, 2);
1.5 带 BETWEEN AND 的范围查询
-
SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 字段 [NOT] BETWEEN 取值1 AND 取值2; -
实例:查询价格在40到80元之间的图书
sqlSELECT * FROM t_book WHERE price BETWEEN 40 AND 80;
1.6 带 LIKE 的模糊查询
-
SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 字段 [NOT] LIKE '字符串'; -
%代表任意字符;_代表单个字符; -
实例:查询书名中包含"Java"的图书
sqlSELECT * FROM t_book WHERE bookName LIKE '%Java%';
1.7 空值查询
-
SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 字段 IS [NOT] NULL; -
实例:查询没有填写描述信息的图书类别
sqlSELECT * FROM t_bookType WHERE bookTypeDesc IS NULL;
1.8 带 AND 的多条件查询
-
SELECT 字段1, 字段2... FROM 表名 WHERE 条件表达式1 AND 条件表达式2 [...AND 条件表达式n] -
实例:查询类别为1且价格大于50元的图书
sqlSELECT * FROM t_book WHERE bookTypeId = 1 AND price > 50;
1.9 带 OR 的多条件查询
-
SELECT 字段1, 字段2... FROM 表名 WHERE 条件表达式1 OR 条件表达式2 [...OR 条件表达式n] -
实例:查询类别为1或者价格低于40元的图书
sqlSELECT * FROM t_book WHERE bookTypeId = 1 OR price < 40;
1.10 DISTINCT 去重复查询
-
SELECT DISTINCT 字段名 FROM 表名; -
实例:查询当前图书涉及了哪些不同的类别ID
sqlSELECT DISTINCT bookTypeId FROM t_book;
1.11 对查询结果排序
-
SELECT 字段1, 字段2... FROM 表名 ORDER BY 属性名 [ASC|DESC] -
实例:按价格降序排列图书信息
sqlSELECT * FROM t_book ORDER BY price DESC;
1.12 GROUP BY 分组查询
-
基本语法:
GROUP BY 属性名 [HAVING 条件表达式][WITH ROLLUP] -
使用场景说明:
- 单独使用(毫无意义);
- 与
GROUP_CONCAT()函数一起使用; - 与聚合函数一起使用;
- 与
HAVING一起使用(限制输出的结果); - 与
WITH ROLLUP一起使用(最后加入一个总和行);
-
实例:统计每个类别的图书数量
sqlSELECT bookTypeId, COUNT(*) AS bookCount FROM t_book GROUP BY bookTypeId;
1.13 LIMIT 分页查询
-
SELECT 字段1, 字段2... FROM 表名 LIMIT 初始位置, 记录数; -
实例:查询前3条图书数据(从第0条开始,查3条)
sqlSELECT * FROM t_book LIMIT 0, 3;
2,使用聚合函数查询
2.1 COUNT() 函数
-
用来统计记录的条数,通常与
GROUP BY一起使用。 -
实例:统计图书总数
sqlSELECT COUNT(*) FROM t_book;
2.2 SUM() 函数
-
求和函数,与
GROUP BY一起使用。 -
实例:统计所有图书的总价格
sqlSELECT SUM(price) FROM t_book;
2.3 AVG() 函数
-
求平均值的函数,与
GROUP BY一起使用。 -
实例:求所有图书的平均价格
sqlSELECT AVG(price) FROM t_book;
2.4 MAX() 函数
-
求最大值的函数,与
GROUP BY一起使用。 -
实例:查询最贵的图书价格
sqlSELECT MAX(price) FROM t_book;
2.5 MIN() 函数
-
求最小值的函数,与
GROUP BY一起使用。 -
实例:查询最便宜的图书价格
sqlSELECT MIN(price) FROM t_book;
3,连接查询
连接查询是将两个或两个以上的表按照某个条件连接起来,从中选取需要的数据。
3.1 内连接查询
-
内连接查询是一种最常用的连接查询,可以查询两个或者两个以上的表。
-
实例:查询图书名称及其对应的类别名称
sqlSELECT b.bookName, t.bookTypeName FROM t_book b INNER JOIN t_bookType t ON b.bookTypeId = t.id;
3.2 外连接查询
- 外连接可以查出某一张表的所有信息。
- 基本语法:
SELECT 属性名列表 FROM 表名1 LEFT|RIGHT JOIN 表名2 ON 表名1.属性名1=表名2.属性名2;
3.2.1 左连接查询
-
可以查询出"表名1"的所有记录,而"表名2"中,只能查询出匹配的记录。
-
实例:以图书表为主,显示所有图书及其类别(即使某些图书类别ID有误查不到类别)
sqlSELECT b.bookName, t.bookTypeName FROM t_book b LEFT JOIN t_bookType t ON b.bookTypeId = t.id;
3.2.2 右连接查询
-
可以查询出"表名2"的所有记录,而"表名1"中,只能查询出匹配的记录。
-
实例:以类别表为主,显示所有类别及类别下的图书(即使某些类别下没有图书)
sqlSELECT b.bookName, t.bookTypeName FROM t_book b RIGHT JOIN t_bookType t ON b.bookTypeId = t.id;
3.3 多条件连接查询
-
根据多个条件连接查询表数据。
-
实例:查询"计算机"类别下价格大于60的图书
sqlSELECT b.bookName, t.bookTypeName, b.price FROM t_book b JOIN t_bookType t ON b.bookTypeId = t.id WHERE t.bookTypeName = '计算机' AND b.price > 60;
4,子查询
4.1 带 In 关键字的子查询
-
一个查询语句的条件可能落在另一个
SELECT语句的查询结果中。 -
实例:查询"计算机"类别的所有图书(不借助连接查询)
sqlSELECT * FROM t_book WHERE bookTypeId IN (SELECT id FROM t_bookType WHERE bookTypeName = '计算机');
4.2 带比较运算符的子查询
-
子查询可以使用比较运算符。
-
实例:查询价格高于平均价格的图书
sqlSELECT * FROM t_book WHERE price > (SELECT AVG(price) FROM t_book);
4.3 带 Exists 关键字的子查询
-
假如子查询查询到记录,则进行外层查询,否则,不执行外层查询。
-
实例:查询有图书的类别信息
sqlSELECT * FROM t_bookType t WHERE EXISTS (SELECT 1 FROM t_book b WHERE b.bookTypeId = t.id);
4.4 带 Any 关键字的子查询
-
ANY关键字表示满足其中任一条件。 -
实例:查询价格大于任意一本"文学"类图书价格的书籍(比最便宜的文学书贵即可)
sqlSELECT * FROM t_book WHERE price > ANY (SELECT price FROM t_book WHERE bookTypeId = 2);
4.5 带 All 关键字的子查询
-
ALL关键字表示满足所有条件。 -
实例:查询价格大于所有"文学"类图书价格的书籍(比最贵的文学书还要贵)
sqlSELECT * FROM t_book WHERE price > ALL (SELECT price FROM t_book WHERE bookTypeId = 2);
5,合并查询结果
5.1 UNION
-
使用
UNION关键字时,数据库系统会将所有的查询结果合并到一起,然后去掉相同的记录。 -
实例:查询价格大于80或类别为2的图书(去重)
sqlSELECT * FROM t_book WHERE price > 80 UNION SELECT * FROM t_book WHERE bookTypeId = 2;
5.2 UNION ALL
-
使用
UNION ALL,不会去掉相同的记录。 -
实例:合并查询,保留重复记录
sqlSELECT * FROM t_book WHERE price > 80 UNION ALL SELECT * FROM t_book WHERE bookTypeId = 2;
6,为表和字段取别名
6.1 为表取别名
-
格式:
表名 表的别名 -
实例 :赋予
t_book别名为b,t_bookType别名为tsqlSELECT b.bookName, t.bookTypeName FROM t_book b, t_bookType t WHERE b.bookTypeId = t.id;
6.2 为字段取别名
-
格式:
属性名 [AS] 别名 -
实例:在查询结果中规范化列名
sqlSELECT bookName AS '书名', author AS '作者', price AS '价格' FROM t_book;