简单mysql 查询_MySQL 简单查询

MySQL 简单查询

操作系统:ubuntu 18.04

mysql版本:8.0

创建:2020/6/26

修改:2020/6/26

使用的演示表

828d9ea55acb7dca77188e569545f5f8.png

分页查询

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

-- 限制返回行数

SELECT * FROM `users` LIMIT 2;

-- 指定起始行并限制返回行数

SELECT * FROM `users` LIMIT 2 OFFSET 2;

-- MySQL 的简写形式 逗号后面是OFFSET的值

SELECT * FROM `users` LIMIT 2, 2;

29e1741b4648c29b7908186ac4de3b93.png

上面的结果显示,最多返回了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;

a26fd63624b8a33f00e87b180d7066d0.png

59ca35b4d8766a590ce1d1415db6dc27.png

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

过滤数据

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

Name

Description

>

大于

>=

大于等于

<

小于

<>, !=

不等于

<=

小于等于

=

等于

BETWEEN ... AND ...

匹配介于两值之间

IN()

匹配给定集合内的值

LIKE

使用搜索模式匹配文本类型数据

LIKE

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

777483657dc47a6212281a9ad77329b7.png

88ca9c6bfcbf35b3be9737d6a3635d70.png

通配符使用注意事项:

不要过度使用通配符。如果其他操作符可以达到相同的目的,应该使用其他操作符

除非必要不要将通配符置于搜索模式的开始处,把通配符置于搜索模式开始处搜索起来是最慢的

IN

ae3841367416336ec9872ef51f3367c4.png

BETWEEN

33d188792f4d22b2d6e2ad4fadfaca9b.png

聚集函数

函数

说明

AVG()

返回某列的平均值

COUNT()

返回某列的行数

MAX()

返回某列的最大值

MIN()

返回某列的最小值

SUM()

返回某列值之和

COUNT

COUNT(*) 对结果中行的数目进行统计,不管表列中包含的是空值(NULL)还是非空值。

COUNT(column)对特定列中具有值的行进行计数,忽略NULL值。

9d1c52e02b45a73bc586556703e8b0aa.png

MAX

-- 查询最大的年龄

SELECT MAX(age) AS max_age FROM users;

-- 效果如同查询按年龄降序排序的第一位

SELECT age FROM users ORDER BY age DESC LIMIT 1;

ceb32b37b4f85ca728a3dffb31da8565.png

MIN

-- 查询最小的姓名

SELECT MIN(name) AS min_name FROM users;

-- 效果如同查询按姓名升序排序的第一位

SELECT name FROM users ORDER BY name LIMIT 1;

22a7cf73af57601813ec0bfb9c2cab40.png

SUM

-- 计算所有userId的总和

SELECT SUM(userId) AS sum_id FROM users;

f767bf8295b12225ba5566edd0194b17.png

聚集不同的值

对所有行执行计算,使用ALL或不给参数,ALL是默认值

只包含不同的值,指定DISTINCT参数

由于计算不同的值或计算所有值都不影响MAX和MIN的结果,所以对这两个函数指定DISTINCT没有意义

-- 计算不同地址的数量

SELECT COUNT(DISTINCT address) FROM users;

-- 计算不同年龄的平均值

SELECT AVG(DISTINCT age) FROM users;

-- 计算同年龄的和

SELECT SUM(DISTINCT age) FROM users;

68dd2e819bf5970a06c62edfc5bf0a9c.png

创建分组

使用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;

60b18b5d79e21d01aaebf0dcea6df9be.png

-- 聚集语句使用的字段可以不出现在GROUP BY中

SELECT MAX(age) AS max_age, address

FROM users

GROUP BY address;

9c20555c315ef502fe3de631b9784e94.png

如果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;

b75819df59d9a8cadd317cd85e8f3e4f.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值