MySQL 简单查询

Posted mywuhao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL 简单查询相关的知识,希望对你有一定的参考价值。

mysql 简单查询

操作系统:ubuntu 18.04
mysql版本:8.0
创建:2020-6-26
修改:2020-6-26

使用的演示表

技术图片

分页查询

使用LIMIT关键字限制返回行数,OFFSET关键字指定起始行,行下标从0开始,查询范围包含指定的起始行

-- 限制返回行数
SELECT * FROM `users` LIMIT 2;

-- 指定起始行并限制返回行数
SELECT * FROM `users` LIMIT 2 OFFSET 2;

-- MySQL 的简写形式 逗号后面是OFFSET的值
SELECT * FROM `users` LIMIT 2, 2;

技术图片

上面的结果显示,最多返回了3行,并且是从第1行(行下标从0开始)开始,边界第1行包含在内

对查询结果排序

使用ORDER BY关键字对结果进行排序

-- 可以用非检索的列排序数据
SELECT userId, name FROM `users` ORDER By age;

-- 按多个列排序,只有在前一列相同时才会比较下一列
SELECT * FROM `users` ORDER BY userId, name;

-- 排序方向降序,默认为升序
SELECT * FROM `users` ORDER BY userId DESC;

-- 对多列指定排序方向,每一列后都要指定,不指定就默认升序
SELECT * FROM `users` ORDER BY userId DESC, name ASC;

技术图片

技术图片

使用ORDER BY和 LIMIT结合使用,可以找出一列中最高或最低的值。ORDER BY 和 LIMIT 一起使用时,ORDER BY 要放在 LIMIT 前面否则会报错。

过滤数据

使用WHERE 子句来过滤数据,下表是一部分条件操作符,更全面的条件操作符和比较函数参考条件操作符和比较函数官方文档

Name Description
> 大于
>= 大于等于
< 小于
<>, != 不等于
<= 小于等于
= 等于
BETWEEN ... AND ... 匹配介于两值之间
IN() 匹配给定集合内的值
LIKE 使用搜索模式匹配文本类型数据

LIKE
使用搜索模式去匹配文本类型数据,%用来匹配任意字符出现了任意次数,包含0次,_用来匹配单个字符,不包含0个。

技术图片
技术图片

通配符使用注意事项:

  • 不要过度使用通配符。如果其他操作符可以达到相同的目的,应该使用其他操作符
  • 除非必要不要将通配符置于搜索模式的开始处,把通配符置于搜索模式开始处搜索起来是最慢的

IN

技术图片

BETWEEN

技术图片

聚集函数

聚集函数官方文档

函数 说明
AVG() 返回某列的平均值
COUNT() 返回某列的行数
MAX() 返回某列的最大值
MIN() 返回某列的最小值
SUM() 返回某列值之和

COUNT

  • COUNT(*) 对结果中行的数目进行统计,不管表列中包含的是空值(NULL)还是非空值。
  • COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。

技术图片

MAX

-- 查询最大的年龄
SELECT MAX(age) AS max_age FROM users;
-- 效果如同查询按年龄降序排序的第一位
SELECT age FROM users ORDER BY age DESC LIMIT 1;

技术图片

MIN

-- 查询最小的姓名
SELECT MIN(name) AS min_name FROM users;
-- 效果如同查询按姓名升序排序的第一位
SELECT name FROM users ORDER BY name LIMIT 1;

技术图片

SUM

-- 计算所有userId的总和
SELECT SUM(userId) AS sum_id FROM users;

技术图片

聚集不同的值

  • 对所有行执行计算,使用ALL或不给参数,ALL是默认值
  • 只包含不同的值,指定DISTINCT参数
  • 由于计算不同的值或计算所有值都不影响MAX和MIN的结果,所以对这两个函数指定DISTINCT没有意义
-- 计算不同地址的数量
SELECT COUNT(DISTINCT address) FROM users;
-- 计算不同年龄的平均值
SELECT AVG(DISTINCT age) FROM users;
-- 计算同年龄的和
SELECT SUM(DISTINCT age) FROM users;

技术图片

创建分组

使用GROUP BY子句创建分组,使用HAVING过滤分组。

  • 除聚集语句外,SELECT语句中的每一列都必须在GROUP BY中给出
  • SELECT 中只能使用和GROUP BY中相同的表达式
  • NULL值会被分为一组
  • GROUP BY中可以使用在SELECT中定义的别名

HAVING用来过滤分组,HAVING支持所有WHERE操作符,WHERE在分组前进行过滤行,HAVING在分组后进行过滤分组

-- 先按WHERE过滤行,再进行分组
-- 再按HAVING过滤分组
SELECT address FROM users
WHERE age > 16
GROUP BY address
HAVING COUNT(*) >= 2
ORDER BY address DESC;

技术图片

-- 聚集语句使用的字段可以不出现在GROUP BY中
SELECT MAX(age) AS max_age, address 
FROM users 
GROUP BY address;

技术图片

如果GROUP BY使用表达式分组,SELECT中可以使用此表达式,但是如果使用原字段则会出错。GROUP BY使用字段进行分组,SELECT中可以对此字段进行计算

-- 这样是正确的
SELECT age * 2
FROM users
GROUP BY age * 2;
-- 这样会报错
SELECT age
FROM users
GROUP BY age * 2;
-- 这样是正确的
SELECT age * 2
FROM users
GROUP BY age;

GROUP BY可以使用多个字段来分组

SELECT age, address
FROM users
GROUP BY age, address;

技术图片






以上是关于MySQL 简单查询的主要内容,如果未能解决你的问题,请参考以下文章

从外部存储中检索 Relay 查询片段的变量

MyBatis查询mysql数据返回null

MySQL基础篇 | 简单的查询条件查询排序查询

部分代码片段

SSM-MyBatis-05:Mybatis中别名,sql片段和模糊查询加getMapper

MySQL数据表简单查询