【技术专题】Mysql8 数据库 - Mysql8 查询数据

大家好,我是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 表名;

  • 实例:查询所有图书信息

    sql 复制代码
    SELECT * FROM t_book;
1.2 查询指定字段
  • SELECT 字段1, 字段2, 字段3... FROM 表名;

  • 实例:查询所有图书的书名和作者

    sql 复制代码
    SELECT bookName, author FROM t_book;
1.3 Where 条件查询
  • SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 条件表达式;

  • 实例:查询价格大于50元的图书

    sql 复制代码
    SELECT * FROM t_book WHERE price > 50;
1.4 带 IN 关键字查询
  • SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 字段 [NOT] IN (元素1, 元素2, 元素3);

  • 实例:查询类别为1或2的图书

    sql 复制代码
    SELECT * 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元之间的图书

    sql 复制代码
    SELECT * FROM t_book WHERE price BETWEEN 40 AND 80;
1.6 带 LIKE 的模糊查询
  • SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 字段 [NOT] LIKE '字符串';

  • % 代表任意字符;_ 代表单个字符;

  • 实例:查询书名中包含"Java"的图书

    sql 复制代码
    SELECT * FROM t_book WHERE bookName LIKE '%Java%';
1.7 空值查询
  • SELECT 字段1, 字段2, 字段3... FROM 表名 WHERE 字段 IS [NOT] NULL;

  • 实例:查询没有填写描述信息的图书类别

    sql 复制代码
    SELECT * FROM t_bookType WHERE bookTypeDesc IS NULL;
1.8 带 AND 的多条件查询
  • SELECT 字段1, 字段2... FROM 表名 WHERE 条件表达式1 AND 条件表达式2 [...AND 条件表达式n]

  • 实例:查询类别为1且价格大于50元的图书

    sql 复制代码
    SELECT * FROM t_book WHERE bookTypeId = 1 AND price > 50;
1.9 带 OR 的多条件查询
  • SELECT 字段1, 字段2... FROM 表名 WHERE 条件表达式1 OR 条件表达式2 [...OR 条件表达式n]

  • 实例:查询类别为1或者价格低于40元的图书

    sql 复制代码
    SELECT * FROM t_book WHERE bookTypeId = 1 OR price < 40;
1.10 DISTINCT 去重复查询
  • SELECT DISTINCT 字段名 FROM 表名;

  • 实例:查询当前图书涉及了哪些不同的类别ID

    sql 复制代码
    SELECT DISTINCT bookTypeId FROM t_book;
1.11 对查询结果排序
  • SELECT 字段1, 字段2... FROM 表名 ORDER BY 属性名 [ASC|DESC]

  • 实例:按价格降序排列图书信息

    sql 复制代码
    SELECT * FROM t_book ORDER BY price DESC;
1.12 GROUP BY 分组查询
  • 基本语法:GROUP BY 属性名 [HAVING 条件表达式][WITH ROLLUP]

  • 使用场景说明:

    1. 单独使用(毫无意义);
    2. 与 GROUP_CONCAT() 函数一起使用;
    3. 与聚合函数一起使用;
    4. 与 HAVING 一起使用(限制输出的结果);
    5. 与 WITH ROLLUP 一起使用(最后加入一个总和行);
  • 实例:统计每个类别的图书数量

    sql 复制代码
    SELECT bookTypeId, COUNT(*) AS bookCount FROM t_book GROUP BY bookTypeId;
1.13 LIMIT 分页查询
  • SELECT 字段1, 字段2... FROM 表名 LIMIT 初始位置, 记录数;

  • 实例:查询前3条图书数据(从第0条开始,查3条)

    sql 复制代码
    SELECT * FROM t_book LIMIT 0, 3;

2,使用聚合函数查询

2.1 COUNT() 函数
  • 用来统计记录的条数,通常与 GROUP BY 一起使用。

  • 实例:统计图书总数

    sql 复制代码
    SELECT COUNT(*) FROM t_book;
2.2 SUM() 函数
  • 求和函数,与 GROUP BY 一起使用。

  • 实例:统计所有图书的总价格

    sql 复制代码
    SELECT SUM(price) FROM t_book;
2.3 AVG() 函数
  • 求平均值的函数,与 GROUP BY 一起使用。

  • 实例:求所有图书的平均价格

    sql 复制代码
    SELECT AVG(price) FROM t_book;
2.4 MAX() 函数
  • 求最大值的函数,与 GROUP BY 一起使用。

  • 实例:查询最贵的图书价格

    sql 复制代码
    SELECT MAX(price) FROM t_book;
2.5 MIN() 函数
  • 求最小值的函数,与 GROUP BY 一起使用。

  • 实例:查询最便宜的图书价格

    sql 复制代码
    SELECT MIN(price) FROM t_book;

3,连接查询

连接查询是将两个或两个以上的表按照某个条件连接起来,从中选取需要的数据。

3.1 内连接查询
  • 内连接查询是一种最常用的连接查询,可以查询两个或者两个以上的表。

  • 实例:查询图书名称及其对应的类别名称

    sql 复制代码
    SELECT 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有误查不到类别)

    sql 复制代码
    SELECT b.bookName, t.bookTypeName 
    FROM t_book b 
    LEFT JOIN t_bookType t ON b.bookTypeId = t.id;
3.2.2 右连接查询
  • 可以查询出"表名2"的所有记录,而"表名1"中,只能查询出匹配的记录。

  • 实例:以类别表为主,显示所有类别及类别下的图书(即使某些类别下没有图书)

    sql 复制代码
    SELECT b.bookName, t.bookTypeName 
    FROM t_book b 
    RIGHT JOIN t_bookType t ON b.bookTypeId = t.id;
3.3 多条件连接查询
  • 根据多个条件连接查询表数据。

  • 实例:查询"计算机"类别下价格大于60的图书

    sql 复制代码
    SELECT 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 语句的查询结果中。

  • 实例:查询"计算机"类别的所有图书(不借助连接查询)

    sql 复制代码
    SELECT * FROM t_book 
    WHERE bookTypeId IN (SELECT id FROM t_bookType WHERE bookTypeName = '计算机');
4.2 带比较运算符的子查询
  • 子查询可以使用比较运算符。

  • 实例:查询价格高于平均价格的图书

    sql 复制代码
    SELECT * FROM t_book 
    WHERE price > (SELECT AVG(price) FROM t_book);
4.3 带 Exists 关键字的子查询
  • 假如子查询查询到记录,则进行外层查询,否则,不执行外层查询。

  • 实例:查询有图书的类别信息

    sql 复制代码
    SELECT * FROM t_bookType t 
    WHERE EXISTS (SELECT 1 FROM t_book b WHERE b.bookTypeId = t.id);
4.4 带 Any 关键字的子查询
  • ANY 关键字表示满足其中任一条件。

  • 实例:查询价格大于任意一本"文学"类图书价格的书籍(比最便宜的文学书贵即可)

    sql 复制代码
    SELECT * FROM t_book 
    WHERE price > ANY (SELECT price FROM t_book WHERE bookTypeId = 2);
4.5 带 All 关键字的子查询
  • ALL 关键字表示满足所有条件。

  • 实例:查询价格大于所有"文学"类图书价格的书籍(比最贵的文学书还要贵)

    sql 复制代码
    SELECT * FROM t_book 
    WHERE price > ALL (SELECT price FROM t_book WHERE bookTypeId = 2);

5,合并查询结果

5.1 UNION
  • 使用 UNION 关键字时,数据库系统会将所有的查询结果合并到一起,然后去掉相同的记录。

  • 实例:查询价格大于80或类别为2的图书(去重)

    sql 复制代码
    SELECT * FROM t_book WHERE price > 80
    UNION
    SELECT * FROM t_book WHERE bookTypeId = 2;
5.2 UNION ALL
  • 使用 UNION ALL,不会去掉相同的记录。

  • 实例:合并查询,保留重复记录

    sql 复制代码
    SELECT * FROM t_book WHERE price > 80
    UNION ALL
    SELECT * FROM t_book WHERE bookTypeId = 2;

6,为表和字段取别名

6.1 为表取别名
  • 格式:表名 表的别名

  • 实例 :赋予 t_book 别名为 b,t_bookType 别名为 t

    sql 复制代码
    SELECT b.bookName, t.bookTypeName 
    FROM t_book b, t_bookType t 
    WHERE b.bookTypeId = t.id;
6.2 为字段取别名
  • 格式:属性名 [AS] 别名

  • 实例:在查询结果中规范化列名

    sql 复制代码
    SELECT bookName AS '书名', author AS '作者', price AS '价格' FROM t_book;
相关推荐
ToddyBear2 小时前
云厂商技术支持部门的原话:元数据库删了,我们也恢复不了[特殊字符]
数据库·产品运营
IanSkunk3 小时前
从检查设备到训练方案:眼科与视光中心设备联动的数据通路、字段口径与校验规则
服务器·数据库·负载均衡
ShineWinsu3 小时前
对于Redis:事务的解析
数据库·redis·mysql·缓存·面试·事务·acid
ao-weilai5 小时前
MySQL数据库:内置函数
android·数据库·mysql
LaughingZhu5 小时前
Product Hunt 每日热榜 | 2026-10-02
数据库·人工智能·深度学习·神经网络·搜索引擎
天疆说5 小时前
腾讯会议 Linux 版在 NVIDIA 显卡上看不到画面:EGL 像素配置与窗口视觉不匹配的排查与修复
linux·数据库·腾讯会议
2603_969579286 小时前
中小团队数据库选型:MySQL vs PostgreSQL,业务场景怎么选
数据库·mysql·postgresql
IT大白鼠6 小时前
图数据库系列 · 第 06 篇——避坑汇总:经典生产问题
数据库·nosql·图库数据库