MYSQL函数大全

检索数据

选择数据库

use 数据库名字

mysql> use one
Database changed

列出所有数据库
show databases;
列出所有表
show tables;

SELECT 语句

select 查询规范
select [查询字段,数学函数] from [表名,子查询语句] 最后面加条件 (并不是所有的检索都要加where关键字,select 和 from 才是查询表中固定所有的参数,大部分select语句都是这样构成的)

查询表中某一列或者多列的数据

select 列名 from 表名;

select pwd from test;
+------+
| pwd  |
+------+
| 1000 |
| 998  |
| 888  |
| 777  |
| 666  |
| gao  |
| 555  |
+------+
7 rows in set (0.01 sec)

多列中间用逗号隔开

select name,pwd from test;
+----------+------+
| name     | pwd  |
+----------+------+
| zhangsan | 1000 |
| lisi     | 998  |
| wangwu   | 888  |
| kuaile   | 777  |
| lei      | 666  |
| gaoxing  | gao  |
| kaixin   | 555  |
+----------+------+
7 rows in set (0.00 sec)

查询所有列
select * from 表名;

select * from test;
+----+----------+------+
| id | name     | pwd  |
+----+----------+------+
|  1 | zhangsan | 1000 |
|  2 | lisi     | 998  |
|  3 | wangwu   | 888  |
|  4 | kuaile   | 777  |
|  5 | lei      | 666  |
|  6 | gaoxing  | gao  |
|  7 | kaixin   | 555  |
+----+----------+------+
7 rows in set (0.01 sec)

去重 distinct

select distinct(需要去重的列) from 表名;
注意:distinct应用的是你查询的所有列。

select distinct pwd from test;
+------+
| pwd  |
+------+
| 1000 |
| 998  |
| 888  |
| 777  |
| 666  |
| 444  |
| 555  |
+------+
7 rows in set (0.00 sec)

限制结果 limit

select 查询列名 from 表名 limit 限制的数据条数;

select name from test limit 3;
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
| wangwu   |
+----------+
3 rows in set (0.00 sec)

限制从第几条开始查询
select 查询列名 from 表名 limit 开始行数,数据条数。如从第二行开始展示3条数据.(limit是从0开始计数的所以第二行在limit中要写成1)

select name from test limit 1,3;
+--------+
| name   |
+--------+
| wangwu |
| kuaile |
| lei    |
+--------+
3 rows in set (0.00 sec)

排序 order by

select 查询的列名 from 表名 order 需要排序的列名

select id from test order by pwd;
+----+
| id |
+----+
|  1 |
|  8 |
|  6 |
|  7 |
|  5 |
|  4 |
|  3 |
|  2 |

如示例所示你不用一定要排序的列查出来。

多个列排序,在排序列之间加上逗号即可(如果两列之间排序出现冲突,Mysql会优先进行写在前面的排序)

select id,pwd from test order by pwd,id;
+----+------+
| id | pwd  |
+----+------+
|  1 | 1000 |
|  8 | 1000 |
|  6 | 444  |
|  7 | 555  |
|  5 | 666  |
|  4 | 777  |
|  3 | 888  |
|  2 | 998  |
+----+------+
8 rows in set (0.00 sec)

升序 在查的列之后加上desc

select id,pwd from test order by pwd desc;
+----+------+
| id | pwd  |
+----+------+
|  2 | 998  |
|  3 | 888  |
|  4 | 777  |
|  5 | 666  |
|  7 | 555  |
|  6 | 444  |
|  1 | 1000 |
|  8 | 1000 |
+----+------+
8 rows in set (0.00 sec)

降序 order by默认就是降序 关键字为asc用法与desc一致(注:如果多列排序,并且之间有排序冲突,无论你使用desc还是asc都是降序排序)

排序与限制数据组合使用

select 查询的列 from 表名 order by 排序的列 limit 限制的条数
(limit必须要在order by 字句之后。这是mysql的执行死规则。)

select name from test order by pwd desc limit 1,3;
+--------+
| name   |
+--------+
| wangwu |
| kuaile |
| lei    |
+--------+
3 rows in set (0.00 sec)

where 条件语句

where 之后的参数有很多,它也是执行条件时优先级比较高的。

 WHERE子句操作符(这些操作符不可以判断null)
操作符通用示例
select 查询的列名 from 表名 where 条件;
比如查询pwd大于五百的人名字
select name from test where pwd >500;
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
| wangwu   |
| kuaile   |
| lei      |
| kaixin   |
| xin      |
+----------+
7 rows in set (0.00 sec)
操 作 符 说 明
= 等于
<> 不等于
!= 不等于
< 小于
<= 小于等于
> 大于
>= 大于等于

范围查询 between and

select 查询的列名 from 表名 where 取范围的列名 between 最小值 and 最大值;(最小值必须在and前面不可以颠倒顺序)

select name from test where pwd between 100 and 500;
+---------+
| name    |
+---------+
| gaoxing |
+---------+
1 row in set (0.00 sec)

and、or、in、not操作符

and 意思就是和,就是所有列出的条件都要符合才行

select 查找的列名 from 表名 where 筛选条件列1 and 筛选条件列2;
select name from test where id >1 and pwd <800;
+---------+
| name    |
+---------+
| kuaile  |
| lei     |
| gaoxing |
| kaixin  |
+---------+
4 rows in set (0.00 sec)

or 就是或者的意思,就是查询出的数据只要符合列出条件其中的一个就可以了。

select 查找的列名 from 表名 where 筛选条件列1 and 筛选条件列2;
select name from test where id = 8 or pwd > 800;
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
| wangwu   |
| xin      |
+----------+
4 rows in set (0.00 sec)

and和or的优先级。如果你查询语句中既有and还有or,Mysql会优先进行and条件的满足。所以这时我们就需要将or的条件用()扩起来就可以了。

in 的意思就是“是”的意思。多个条件在()里按逗号隔开。

select * from 表名 where 选择的列名 in (条件)

select * from test where id in(1,2,3,4,5,6);
+----+----------+------+
| id | name     | pwd  |
+----+----------+------+
|  1 | zhangsan | 1000 |
|  2 | lisi     | 998  |
|  3 | wangwu   | 888  |
|  4 | kuaile   | 777  |
|  5 | lei      | 666  |
|  6 | gaoxing  | 444  |
+----+----------+------+
6 rows in set (0.00 sec)

not 的意思就是不的意思(一般和in一起使用)

select 查询的列名 from 表名 where 判断的列名 not in (判断的列名);
select * from test where pwd not in (1000);
+----+---------+------+
| id | name    | pwd  |
+----+---------+------+
|  2 | lisi    | 998  |
|  3 | wangwu  | 888  |
|  4 | kuaile  | 777  |
|  5 | lei     | 666  |
|  6 | gaoxing | 444  |
|  7 | kaixin  | 555  |
+----+---------+------+
6 rows in set (0.01 sec)

like模糊查询

其中%表示零个或多个字符,_表示一个字符。查询时要用单引号括起来。

slect 查询的列名 from 表名 where 条件列名 like ’条件‘
select * from test where name like 'l%';
+----+------+------+
| id | name | pwd  |
+----+------+------+
|  2 | lisi | 998  |
|  5 | lei  | 666  |
+----+------+------+
2 rows in set (0.01 sec)

_线示例
select * from test where name like 'l__';
+----+------+------+
| id | name | pwd  |
+----+------+------+
|  5 | lei  | 666  |
+----+------+------+
1 row in set (0.00 sec)

正则表达式 关键字:regexp

正则表达式的作用是匹配文本,将一个模式(正则表达式)与一个文本串进行比较。MySQL WHERE子句对正则表达式提供了初步的支持,允许你指定正则表达式,过滤SELECT检索出的数据。

比如你要查询nam中带有l字母的字段

select * from test where name regexp 'l';

正则表达式中的or
也可以匹配两个以上的or条件,只需要一直加 | 号就行了。

select * from test where id regexp '2|15';
+----+------+------+
| id | name | pwd  |
+----+------+------+
|  2 | lisi | 998  |
+----+------+------+
1 row in set (0.00 sec)

正则表达式遍历数组开头查询

可以看出regexp可以用[]号在里面写一个数组,用来进行第一个字段的检索
select * from test where pwd regexp '[12]000' ;
+----+----------+------+
| id | name     | pwd  |
+----+----------+------+
|  1 | zhangsan | 1000 |
|  8 | xin      | 1000 |
+----+----------+------+
2 rows in set (0.00 sec)

当然一个一个写数的话很麻烦,正则表达式提供了另一种解决方式用-代表范围
由此可见在最大数最小数之间加一个 - 符号就可以划定一个范围查询

select * from test where pwd regexp '[1-5]000' ;
+----+----------+------+
| id | name     | pwd  |
+----+----------+------+
|  1 | zhangsan | 1000 |
|  8 | xin      | 1000 |
|  9 | lei      | 2000 |
+----+----------+------+
3 rows in set (0.00 sec)

拼接字符串concat

拼接串,即把多个串连接起来形成一个较长的串。需要一个或多个指定的串,各个串之间用逗号分隔。不是表中字段的用‘’扩起来。
示例

#select concat(需要拼接的字段1,需要拼接的字段2) from 表名;
select concat(id,'(',name,')') from test;
+-------------------------+
| concat(id,'(',name,')') |
+-------------------------+
| 1(zhangsan)             |
| 2(lisi)                 |
| 3(wangwu)               |
| 4(kuaile)               |
| 5(lei)                  |
| 6(gaoxing)              |
| 7(kaixin)               |
| 8(xin)                  |
| 9(lei)                  |
+-------------------------+

LTrim()祛除查询出来字段左边的空格

示例

select * from test where id in(9,10);
+----+------+---------+
| id | name | pwd     |
+----+------+---------+
|  9 | lei  | 2000    |
| 10 |  qu  | 1232422 |
+----+------+---------+
2 rows in set (0.00 sec)

可以看出我第二条数据name字段前面有一个空格
加上LTrim之后空格就消失了,消除右边空格的是RTrim().

select LTrim(name) from test;
+-------------+
| LTrim(name) |
+-------------+
| zhangsan    |
| lisi        |
| wangwu      |
| kuaile      |
| lei         |
| gaoxing     |
| kaixin      |
| xin         |
| lei         |
| qu          |
+-------------+
10 rows in set (0.00 sec)

拼接和祛除空格组合使用

select concat(id,' name 是(',LTrim(name),')') from test;
+-----------------------------------------+
| concat(id,' name 是(',LTrim(name),')')  |
+-----------------------------------------+
| 1 name 是(zhangsan)                     |
| 2 name 是(lisi)                         |
| 3 name 是(wangwu)                       |
| 4 name 是(kuaile)                       |
| 5 name 是(lei)                          |
| 6 name 是(gaoxing)                      |
| 7 name 是(kaixin)                       |
| 8 name 是(xin)                          |
| 9 name 是(lei)                          |
| 10 name 是(qu)                          |
+-----------------------------------------+
10 rows in set (0.00 sec)

字段之间的计算

例子
操作符 : + 加 - 减 * 乘 / 除

#select 计算字段1 算数操作符 计算字段2 from 表名;
select gongzi*yuefen as zonggongzi from gongzi;
+------------+
| zonggongzi |
+------------+
|      84000 |
|      80000 |
|      67500 |
|      25800 |
|      54000 |
|      65100 |
+------------+
6 rows in set (0.00 sec)

文本处理函数

示例表数据

 select * from gongzi;
+----+------+--------+--------+
| id | name | gongzi | yuefen |
+----+------+--------+--------+
|  1 | zhao |   7000 |     12 |
|  2 | qian |  10000 |      8 |
|  3 | sun  |   7500 |      9 |
|  4 | li   |   8600 |      3 |
|  5 | zhou |   9000 |      6 |
|  6 | wu   |   9300 |      7 |
+----+------+--------+--------+
6 rows in set (0.00 sec)
left 返回字符串左边的字符

示例

#select left(截取的字段名,截取的长度) from 表名;
select left(name,1) from gongzi;
+--------------+
| left(name,1) |
+--------------+
| z            |
| q            |
| s            |
| l            |
| z            |
| w            |
+--------------+
6 rows in set (0.00 sec)
length返回字符串长度

示例

#select length(求长度的字段名) from 表名;
select length(name) from gongzi;
+--------------+
| length(name) |
+--------------+
|            4 |
|            4 |
|            3 |
|            2 |
|            4 |
|            2 |
+--------------+
6 rows in set (0.00 sec)
locate() 找出字符串的一个子串

示例
返回1代表有,0代表没有

#select locate(name,'查找的字符串') from 表名
select locate(name,'zhao') from gongzi;
+---------------------+
| locate(name,'zhao') |
+---------------------+
|                   1 |
|                   0 |
|                   0 |
|                   0 |
|                   0 |
|                   0 |
+---------------------+
6 rows in set (0.00 sec)
lower将字符串转换为小写

示例

#select lower(转换的字段名) from 表名;
select lower(name) from gongzi;
+-------------+
| lower(name) |
+-------------+
| zhao        |
| qian        |
| sun         |
| li          |
| zhou        |
| wu          |
| zheng       |
+-------------+
7 rows in set (0.00 sec)

Upper 将字符串转换成大写

示例

select upper(name) from gongzi;
+-------------+
| upper(name) |
+-------------+
| ZHAO        |
| QIAN        |
| SUN         |
| LI          |
| ZHOU        |
| WU          |
| ZHENG       |
+-------------+
7 rows in set (0.00 sec)

数值处理函数

abs()返回一个数的绝对值

示例

#select abs(数值或字段名) from 表名;
select abs(-3);
+---------+
| abs(-3) |
+---------+
|       3 |
+---------+
1 row in set (0.00 sec)
cos()返回一个角度的余弦

示例

select cos(yuefen) from gongzi;
+----------------------+
| cos(yuefen)          |
+----------------------+
|   0.8438539587324921 |
| -0.14550003380861354 |
|  -0.9111302618846769 |
|  -0.9899924966004454 |
|    0.960170286650366 |
|   0.7539022543433046 |
|  0.28366218546322625 |
+----------------------+
7 rows in set (0.00 sec)

数值函数使用方法大致相同我就不一一举例了,下面是数值函数大全

Abs() 返回一个数的绝对值
Cos() 返回一个角度的余弦
Exp() 返回一个数的指数值
Mod() 返回除操作的余数
Pi() 返回圆周率
Rand() 返回一个随机数
Sin() 返回一个角度的正弦
Sqrt() 返回一个数的平方根
Tan() 返回一个角度的正切

汇总函数

示例表

 select * from gongzi;
+----+-------+--------+--------+
| id | name  | gongzi | yuefen |
+----+-------+--------+--------+
|  1 | zhao  |   7000 |     12 |
|  2 | qian  |  10000 |      8 |
|  3 | sun   |   7500 |      9 |
|  4 | li    |   8600 |      3 |
|  5 | zhou  |   9000 |      6 |
|  6 | wu    |   9300 |      7 |
|  7 | ZHENG |   6000 |      5 |
+----+-------+--------+--------+
7 rows in set (0.00 sec)
avg()平均数

示例

select avg(gongzi) from gongzi;
+-------------+
| avg(gongzi) |
+-------------+
|   8200.0000 |
+-------------+
1 row in set (0.00 sec)
count() 返回行数

示例

select count(name) from gongzi;
+-------------+
| count(name) |
+-------------+
|           7 |
+-------------+
1 row in set (0.00 sec)

count()括号中可以加放字段,可以放星号,也可以放1.其中放1和星号进去计算的是全部行数,不会忽略null值,放字段进去计算的是这个字段有多少行,会忽略null值。

max()最大值

示例

select max(gongzi) from gongzi;
+-------------+
| max(gongzi) |
+-------------+
|       10000 |
+-------------+
1 row in set (0.00 sec)
min()最小值

示例

select min(gongzi) from gongzi;
+-------------+
| min(gongzi) |
+-------------+
|        6000 |
+-------------+
1 row in set (0.00 sec)
sum()求和

示例

select sum(gongzi) from gongzi;
+-------------+
| sum(gongzi) |
+-------------+
|       57400 |
+-------------+
1 row in set (0.00 sec)

分组和排序group by

group by用法

#select 查询的字段 from 表名 group by 需要进行分组的字段 having 分组之后的条件

select 字句顺序

字句          说明           是否必须使用
select    要返回的列或者表达式    是
from      从行中检索数据的表      仅在从表选择数据时使用
where     行级过滤              否
group by  分组说明             仅在分组时使用
having    组级过滤              否
order by  输出排序顺序           否
limit     要检索的行数           否
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值