MySQL 查询命令(一)

📚查询

这篇文章主要是记录数据库查询命令,以前用 Python 操作数据库都是直接将所有数据读取出来,然后再在对应的表类的函数里面来进行处理,因此用到的 SQL 都是比较简单,着实没有想到 SQL 怎么方便。

像数据分组、排序、分页等功能,我老早都是通过将所有数据取出来,然后再将数据放到相应函数里面进行数据分组、排序、分页等功能,显然这样效率低还浪费资源。

下面我将会记录如何使用这些命令,来做一些简单的应用巩固自己的基础。

mysql> select * from java.person;
+-----------+------+------+
| name      | age  | sex  |
+-----------+------+------+
| hjhcos.cn |   12 ||
| hjhcos.cn |   12 ||
| hjhcos    |   15 ||
| hjh       |   13 | NULL |
| cos       |    2 ||
| cn        |    2 ||
+-----------+------+------+

📕条件表达式

条件表达含义
between … and …某一区间的值
in (set)符合 set 条件的值
like模糊查询 % _
is null判断是否为空
  • %:表示 0 个或多个任意字符
  • _:表示占位符,即任意一个字符

查询 age 字段在 13 ~ 15 的数据

mysql> select * from java.person where `age` between 13 and 15;
+--------+------+------+
| name   | age  | sex  |
+--------+------+------+
| hjhcos |   15 ||
| hjh    |   13 | NULL |
+--------+------+------+
mysql> select * from java.person where `age` in (13, 14, 15);
+--------+------+------+
| name   | age  | sex  |
+--------+------+------+
| hjhcos |   15 ||
| hjh    |   13 | NULL |
+--------+------+------+

查询 name 后缀为 .cn 的数据

mysql> select * from java.person where `name` like '%.cn';
+-----------+------+------+
| name      | age  | sex  |
+-----------+------+------+
| hjhcos.cn |   12 ||
| hjhcos.cn |   12 ||
+-----------+------+------+

查询 sex 字段为空的数据

mysql> select * from java.person where `sex` is null;
+------+------+------+
| name | age  | sex  |
+------+------+------+
| hjh  |   13 | NULL |
+------+------+------+

📕功能函数

功能含义
distinct数据去重
limit start, rows分页查询
order by数据排序,默认 asc 升序,desc 降序
group by根据某一个或多个字段的不同数据进行分组
having对分组进行过滤
count统计 dataRow
  • order by 位于 select 语句句尾
  • count 不会将空的数据放到里面进行统计
  • group by 接受聚合查询
    例如 select * from java.person group by age ;这条命令是无法通过,如果使用 count() 这种 aggregated 包住 * 即可通过

查询 name 后缀为 .cn 的数据并去重

mysql> select distinct * from java.person where `name` like '%.cn';
+-----------+------+------+
| name      | age  | sex  |
+-----------+------+------+
| hjhcos.cn |   12 ||
+-----------+------+------+

显示前三行数据

mysql> select * from java.person limit 0, 3;
+-----------+------+------+
| name      | age  | sex  |
+-----------+------+------+
| hjhcos.cn |   12 ||
| hjhcos.cn |   12 ||
| hjhcos    |   15 ||
+-----------+------+------+

按 age 从大到小对数据进行排序

mysql> select * from java.person order by `age` desc;
+-----------+------+------+
| name      | age  | sex  |
+-----------+------+------+
| hjhcos    |   15 ||
| hjh       |   13 | NULL |
| hjhcos.cn |   12 ||
| hjhcos.cn |   12 ||
| cos       |    2 ||
| cn        |    2 ||
+-----------+------+------+

根据 age 对数据进行分组

mysql> select `age` from java.person group by `age` ;
+------+
| age  |
+------+
|    2 |
|   12 |
|   13 |
|   15 |
+------+

根据 age 为 12 以上的进行分组

mysql> select `age` from java.person group by `age` having `age` > 12;
+------+
| age  |
+------+
|   13 |
|   15 |
+------+

统计有多少个 age 为 12 以上的数据

mysql> select count(*) from java.person where `age` > 12;
+----------+
| count(*) |
+----------+
|        2 |
+----------+

📕数学函数

数学含义
sum合计字段的所有数据
avg字段的所有数据的平均数
max字段的所有数据里面最大的数
min字段的所有数据里面最小的数
abs(number)绝对值
bin(number)十进制转二进制
conv(number, 10, 2)进制转换
hex(number)十进制转十六进制
ceiling(number)向上取整
floor(number)向下取整
format(number, decimal_places)保留小数,四舍五入
least(number1, …, numberN)求最小值
mod(number, denominator)求余
rand()随机数
  • rand 范围为 0~1 ,如果小括号有值,随机数不会变化

计算字段 age 所有数据的总和

mysql> select sum(age) from java.person;
+----------+
| sum(age) |
+----------+
|       56 |
+----------+

计算字段 age 所有数据的平均数

mysql> select avg(age) from java.person;
+----------+
| avg(age) |
+----------+
|   9.3333 |
+----------+

计算字段 age 所有数据的最大值

mysql> select max(age) from java.person;
+----------+
| max(age) |
+----------+
|       15 |
+----------+

计算字段 age 所有数据的最小值

mysql> select min(age) from java.person;
+----------+
| min(age) |
+----------+
|        2 |
+----------+

将 10 转化为二进制

mysql> select bin(10) from dual;
+---------+
| bin(10) |
+---------+
| 1010    |
+---------+

将 10 转化为十六进制

mysql> select hex(10) from dual;
+---------+
| hex(10) |
+---------+
| A       |
+---------+

将 9 转化为八进制

mysql> select conv(9, 10, 8) from dual;
+----------------+
| conv(9, 10, 8) |
+----------------+
| 11             |
+----------------+

将 5.5 和 -5.5 向上取整

mysql> select ceiling(5.5), ceiling(-5.5) from dual;
+--------------+---------------+
| ceiling(5.5) | ceiling(-5.5) |
+--------------+---------------+
|            6 |            -5 |
+--------------+---------------+
1 row in set (0.00 sec)

将 5.5 和 -5.5 向下取整

mysql> select floor(5.5), floor(-5.5) from dual;
+------------+-------------+
| floor(5.5) | floor(-5.5) |
+------------+-------------+
|          5 |          -6 |
+------------+-------------+

将 5.555 保留小数点后 2 位

mysql> select format(5.555, 2) from dual;
+------------------+
| format(5.555, 2) |
+------------------+
| 5.56             |
+------------------+

求集合 {12, 13, 2} 中的最小值

mysql> select least(12, 13, 2) from dual;
+------------------+
| least(12, 13, 2) |
+------------------+
|                2 |
+------------------+

求 12 / 5 的余数

mysql> select mod(12, 5) from dual;
+------------+
| mod(12, 5) |
+------------+
|          2 |
+------------+

随机生成一个 100 以内的整数

mysql> select format(rand()*100, 0) from dual;
+-----------------------+
| format(rand()*100, 0) |
+-----------------------+
| 72                    |
+-----------------------+

📕时间函数

时间函数含义
current_date()当前日期
current_time()当前时间
current_timestamp()当前时间戳
now()当前时间
date(datetime)返回datetime的日期部分
date_add(date, interval d_value d_type)在date中加上日期或时间
date_sub(date, interval d_value d_type)在date中减去一个时间
datediff(date1, date2)两个日期差(天)
unix_timestamp()时间戳
from_unixtime(timestamp, ‘%Y-%M-%D’)将时间戳转换为日期
  • d_type:year、day、minute、second 等等

获取当前日期和时间

mysql> select current_date(), current_time() from dual;
+----------------+----------------+
| current_date() | current_time() |
+----------------+----------------+
| 2022-03-05     | 11:44:25       |
+----------------+----------------+
mysql> select now() from dual;
+---------------------+
| now()               |
+---------------------+
| 2022-03-05 11:45:11 |
+---------------------+
mysql> select current_timestamp() from dual;
+---------------------+
| current_timestamp() |
+---------------------+
| 2022-03-05 11:49:21 |
+---------------------+
mysql> select from_unixtime(unix_timestamp(), '%Y-%m-%d %H:%m:%s') from dual;
+------------------------------------------------------+
| from_unixtime(unix_timestamp(), '%Y-%m-%d %H:%m:%s') |
+------------------------------------------------------+
| 2022-03-05 12:03:01                                  |
+------------------------------------------------------+

获取 2022-03-05 22:07:43 的年月日部分

mysql> select date('2022-03-05 22:07:43') from dual;
+-----------------------------+
| date('2022-03-05 22:07:43') |
+-----------------------------+
| 2022-03-05                  |
+-----------------------------+

获取前一天时间

mysql> select date_sub(current_date(), interval 1 day) from dual;
+------------------------------------------+
| date_sub(current_date(), interval 1 day) |
+------------------------------------------+
| 2022-03-04                               |
+------------------------------------------+

获取后一天时间

mysql> select date_add(current_date(), interval 1 day) from dual;
+------------------------------------------+
| date_add(current_date(), interval 1 day) |
+------------------------------------------+
| 2022-03-06                               |
+------------------------------------------+

比较两个日期的差值

mysql> select datediff(current_date(), '2021-03-05') from dual;
+----------------------------------------+
| datediff(current_date(), '2021-03-05') |
+----------------------------------------+
|                                    365 |
+----------------------------------------+

📕加密和系统函数

加密和系统函数含义
user()查询使用数据库的用户
database()查询当前使用的数据库
md5(str)使用32位字符加密数据
password(str)加密数据

当前使用数据库管理器的用户

mysql> select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

当前用户使用的数据库

mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+

毕竟我没有使用 use 命令来指定使用数据库,命令都是靠 数据库名.表名 的方式。

使用 md5 加密 hjhcos 数据

mysql> select md5('hjhcos') from dual;
+----------------------------------+
| md5('hjhcos')                    |
+----------------------------------+
| 8cbeac8c470f183bfa8e4cc836d15521 |
+----------------------------------+

使用 password 加密 hjhcos 数据

mysql> select password('hjhcos') from dual;
+-------------------------------------------+
| password('hjhcos')                        |
+-------------------------------------------+
| *4579A208EFCFAAC9F82C74DDD0CBD1A7AD89D614 |
+-------------------------------------------+



如果你是无意刷到这篇文章并看到这里,希望你给我的文章来一个赞赞👍👍。如果你不同意其中的内容或有什么问题都可以在下方评论区留下你的想法或疑惑,谢谢你的支持!!😀😀

参考资料

  1. 【零基础 快速学Java】韩顺平 零基础30天学会Java
  2. MySQL :: MySQL 5.7 Reference Manual :: 13.2.9 SELECT Statement
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hjhcos

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值