本篇文章主讲mysql相关的查询函数以及正则表达式,如果需要看其他的数据库相关请查看我往期帖子

只用数据库对数据库(mysql)以及表进行操作https://mp.csdn.net/mp_blog/creation/editor/154543591

数据库基础之深入SQL查询语句(一)

https://mp.csdn.net/mp_blog/creation/editor/154543591

1.带你们从头开始演示一遍

连接一下数据库

mysql -u root -p

接着输入密码

查询当前有哪些数据库

show databases;

我这边有一个users数据库,直接进入就可以,不知道如何创建数据库等操作的请看文章开头连接,移至往期文章。

进入users数据库

use users;

这样表示进入成功了

然后查询一下这个数据库有哪些表

SHOW TABLES;

我这里只有一个students表,查看一下表的内容看看

SELECT * FROM students;

再查看一下表的结构

DESCRIBE students;

ok,接下来就可以进行函数查询的操作了

2.集合函数

        包括COUNT()、SUM()、AVG()、MAX()和MIN()。当需要对表中的记录求和、求平均值、查询最大值和查询最小值等操作时,可以使用集合函数。GROUP BY关键字通常需要与集合函数起使用。

COUNT()用来统计记录的条数;
SUM()用来计算字段的值的总和;
AVG()用来计算字段的值的平均值:
MAX() 用来查询字段的最大值;
MIN()用来查询字段的最小值。

2.1.COUNT()

用来统计记录的条数;

查询所有数据条数

select count(*) from students;

联合group by进行分组统计

select age,count(*) from students group by age;

2.2.SUM()

用来计算字段的值的总和;

例如对age进行分组,然后对studenyt_id进行求和

select age,sum(student_id) from students group by age;

2.3AVG()

用来计算字段的值的平均值:

例如计算age的平均值是多少

select avg(age) from students;

例如group by对age进行分组,然后计算每个年龄段的人的student_id的平均值

select age,avg(student_id) from students group by age;

2.4.MAX()

用来查询字段的最大值

例如查询最大的年龄age的值

select max(age) from students;

联合group by 使用,对年龄age进行分组,然后计算每个年龄段student_id的最大值

select age,max(student_id) from students group by age;

2.5.MIN()

用来查询字段的最小值。

例如查询年龄age的最小值

select min(age) from students;

结合group by对age进行分组,查询每个年龄段最小的student_id值

select age,min(student_id) from students group by age;

3.正则表达式

3.1 “.”和“_”的区别

两个都可以代替任意一个字符进行查询。
“.”只能用于regexp关键字进行匹配

所以‘.’只能用于regexp

'_'也无法用于regexp

3.2‘[]’

[..]字符集合。匹配所包含的任意一个字符。

select * from students where phone regexp '[8-9]';

[]可以指定集合的区间。
如:[a-z],[1-9]

3.3.“[^字符集合]”

匹配指定字符以外的字符

select * from students where phone regexp '[^0-9]';
select * from students where phone regexp '[^1-9]';

3.4 ‘|’匹配指定字符串

        正则表达式可以匹配字符串。当表中的记录包含这个字符串时,就可以将该记录查询出来。如果指定多个字符串时,需要用符号“|”隔开。只要匹配这些字符串中的任意一个即可

例如查询name中带有“张”或者带有“十”的名字

select * from students where name regexp '张|十';

3.4 “*”和“+”

匹配多个字符,*和+都可以匹配多个该符号之前的字符。
“+”:至少表示一个字符
“*”:可以表示0个字符

比如‘a*b’就可以匹配

"b"

"ab"

"aab"

"aaab"等

“a+b”就只能匹配

“ab”

"aab"

"aaab"等

如果是“a*”就匹配

“ ”

“a”

"aa"

“aaa”

等

如果是“a+”就匹配

“a”

“aa”等

也就是说,"*"前面的字母数量可以从0个一直到无数个,都可以进行匹配

而“+”前面的字母数量可以从1个一直到无数个,不能为0个。

还是举个例子

select * from students where phone regexp '3*7'

“3*7”可以匹配“7”  “37”  “337” “3337等”  

select * from students where phone regexp '3+7';

“3+7”可以匹配 “37”   “337”   “3337”等

3.4 {m}’或者’{m,n}’来指定字符串连续出现的次数

{m}:m是一个非负整数。匹配确定的 m 次。
{m,n}:m 和 n 均为非负整数,其中m <= n。

例如查找0连续出现一次的,两个0挨在一起也符合0连续出现1次的条件

select * from students where phone regexp '0{1}';

看一下0连续出现两次

select * from students where phone regexp '0{2}';

就只有一个符合条件了,但是如果有3个0,四个0等等同时连续出现的话,也是符合条件的,是包含关系

‘0{2,5}’表示0连续出现2次或者5次的。但是由于连续出现3次,4次都符合连续出现2次的条件,所以,可以理解为0连续出现2-5次

select * from students where phone regexp '0{2,5}';

4.联合查询 : UNION

并操作 union、交操作 intersect、差操作 except
UNION用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内容

select * from venus1
union
select * from venus2

union查询默认不返回重复记录
union查询的表的字段必须一样
unio n查询的数据类型必须能兼容
#union查询结果只增加了行数而列数不变

数据字段不一样的情况

select 1 union select 2;
select 1,2 union select 2;

第二个由于字段数不一样,所以会报错

举个详细的例子吧

select * from students union select 1,2,3,4,5,6,7;

如果我只写6个数字或者8个数捏

很显然,列的数量不一样肯定会报错

5.数据库相关信息查询

5.1 当前用户名

select current_user();

5.2 连接数据库用户名

select session_user();

5.3 数据库名

select database();

5.4 数据库版本

select version();

5.5 数据库读取路径

show variables like '%basedir%';

5.6 MYSQL安装路径

show variables like"%char%";

5.6 查看当前系统版本

select @@version_compile_os;

更多推荐