帮助中心/最新通知

质量为本、客户为根、勇于拼搏、务实创新

< 返回文章列表

【服务器相关】SQL开发知识:MySQL高级进阶sql语句总结大全

发表时间:2025-06-16 03:46:00 小编:主机乐-Yutio

以下两个表格做讲解

SELECT

DISTINCT

WHERE

AND OR

BETWEEN

通配符

% ;百分号表示零个,一个或多个字符
_ :下划线表示单个字符

'A_Z':所有以‘A'起头,另一个任何值的字符,且以‘Z为结尾的字符串。如,'ABZ’和'A2Z′都符合这一个模式,而'AKKZ'并不符合(因为在A和Z之间有两个字符,而不是一个字符)。

'ABC%':所有以 'ABC’起头的字符串。例如,'ABCD’和'ABCABC’都符合这个模式。
'%XYZ':所有以'XYZ’结尾的字符串。例如,'WXYZ’和‘ZZXYZ’都符合这个模式。
'%AN%':所有含有 'AN'这个模式的字符串。例如,'LOS ANGELES’和 'SAN FRANCISCo’都符合这个模式。
'_AN%':所有第二个字母为'A′和第三个字母为'N’的字符串。例如,'SAN FRANCIScO’符合这个模式,而'LoS ANGELES'则不符合这个模式。

LIke

ORDER BY

函数

数学函数;

city表格

如果sql_mode开启了PIPES_AS_CONCAT,’||’ 视为字符串的连接操作符而非或运算符,和字符串的拼接函数Concat相类似,这和Oracle相类似,这和Oracle数据库使用方法一样

substr

trim

region

replace

group by

having

用来过来由group by 语句返回的记录集,通常与group by 语句联合使用
having 语句的存在弥补了where关键字不能与聚合函数联合使用的不足,如果被select的只有函数栏,那就不需要group by子句

别名

子查询

exists

表链接

以下两表做实验

inner join(内连接): 只返回两个表中联结字段相等的行
left join(左连接):返回包括左表中的所有记录和右表中联结字段相等的记录
right join (右连接):返回包括右表中的所有记录和左表中联结字段相等的记录

使用子查询实现多表查询

create view

视图,可以当作是虚拟表或存储查询
视图跟表格的不同是,表格中有实际储存数据记录,而视图是建立在表格之上的一个架构,它本身并不实际储存数据记录。临时表在用户退出或同数据库的连接断开后就自动消失了,而视图不会消失。
视图不含有数据,只存储它的定义,它的用途一般可以简化复杂的查询。比如你要对几个表进行连接查询,而且还要进行统计排序等操作,写SQL语句会很麻烦的,用视图将几个表联结起来,然后对这个视图进行查询操作,就和对一个表查询一样,很方便。
视图表不会像临时表一样,断开连接后自动消失
视图表保存的是select 语句查询的结果,它本身不存储数据
当视图表的结构跟存储数据的原始表结构相同则可以修改或插入数据,如果不一样则不能修改或插入数据(比如多表连接查询的结果)

union

union:生成结果的数据记录值将没有重复,且按照字段的顺序进行排序
语法:[select 语句1] union [select 语句2];

union all:将生成结果的数据记录值都列出来,无论有多少重复
语法:[select 语句1] union all [select 语句2];

交集值

两表其中的一个表没有指定的行,而另一个表这个行有重复不适用,要求两个表确实有交集的行的时候用

取两个SQL语句结果的交集,且没有重复

无交集值

显示第一个SQL语句的结果,且与第二个SQL语句没有交集的结果,且没有重复

case

空值(null) 和无值(’ ') 的区别

1.无值的长度为0,不占用空间的;而 NULL值的长度是NULL,是占用空间的。
2.IS NULL或者 IS NoT NULL,是用来判断字段是不是为NULL或者不是 NULL,
                                            不能查出是不是无值的。
3.无值的判断使用=''或者<>''来处理。<>代表不等于。
4.在通过 count()指定字段统计有多少行数时,如果遇到NULL值会自动忽略掉,遇到无值会加入到记录中进行计算。

正则表达式 

匹配模式描述实例
^匹配文本的开始字符‘^bd’ 匹配以bd开头的字符串
$匹配文本的结束字符‘qn$’ 匹配以qn结尾的字符串
.匹配任何单个字符's.t’匹配任何s和t之间有一个字符的字符串
*匹配零个或多个在它前面的字符‘fo*t’ 匹配t前面有任意个o
+匹配前面的字符1次或多次‘hom+’ 匹配ho开头,后面至少一个m的字符串
字符串匹配包含指定的字符串‘clo’ 匹配含有clo的字符串
p1|p2匹配p1或p2‘bg | fg’ 匹配bg或fg
[…]匹配字符集合中的任意一个字符‘[abc]’ 匹配a或b或c
[^…]匹配不在括号中的任何字符‘[ ^ ab]’ 匹配不含a或b的字符串
{n}匹配前面的字符串n次‘g{2}’ 匹配含有2个g的字符串
{n,m}匹配前面的字符串至少n次,至多m次‘f{1,3}’ 匹配f最少1次 最多3次

语法:select "字段" from "表名" where "字段" regexp {模式};

存储过程

存储过程是一组为了完成特定功能的SQL语句集合。
存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

存储过程的优点:
1、执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
2、SQL语句加上控制语句的集合,灵活性高
3、在服务器端存储,客户端调用时,降低网络负载
4、可多次重复被调用,可随时修改,不影响客户端调用
5、可完成所有的数据库操作,也可控制数据库的信息访问权限

创建存储过程

存储过程的参数

in 输入参数:表示调用折向过程传入值(传入值可以是字面量或变量)
out 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
inout 输入输出参数:即表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

查看存储过程

(2)循环语句while… end while

总结 

到此这篇关于MySQL高级进阶sql语句的文章就介绍到这了,更多相关Mysql高阶sql语句内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


联系我们
返回顶部