运维开发网

Mysql高级sql语句摘要大全

运维开发网 https://www.qedev.com 2022-07-10 21:41 出处:网络
这篇文章主要给大家介绍了关于MySQL高级进阶sql语句的相关资料,文中通过图文以及实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要给大家介绍了关于MySQL高级进阶sql语句的相关资料,文中通过图文以及实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

下面两个表用于解释。



SELECTSELECT "字段" FROM "表名";SELECT Store_Name FROM Store_Info;显示表格中的一个或数个字段的所有数据记录



DISTINCTSELECT DISTINCT "字段" FROM "表名";select distinct store_name from store_info;不显示重复的数据记录



WHERESELECT "字段" FROM "表名" WHERE "条件";查找store_info 表中 符号sales=700条件 的 store_name字段有条件查询



AND ORSELECT "字段" FROM "表名" WHERE "条件1" select store_name,sales,date from store_info where sales gt; 1000 or (sales lt; 500 and sales gt; 200);且 或


INSELECT "字段" FROM "表名" WHERE "字段" BETWEEN ('值1' AND '值2',...);select * from store_info where store_name in ('Houston','Los Angeles');显示已知的值的数据记录



BETWEENSELECT "字段" FROM "表名" WHERE "字段" BETWEEN '值1' AND '值2';select * from store_info where sales between 200 and 500;显示两个值范围



通配符

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

#39;A _ Z # 39:都带lsquoA # 39,任意值的另一个字符,并与lsquoz是结束字符串。比如# 39;ABZrsquo和# 39;A2Zprime都符合这个模式,而# 39;AKKZ # 39不匹配(因为A和Z之间有两个字符而不是一个)。

#39;ABC % # 39:都带# 39;ABCrsquo起始字符串。比如# 39;ABCDrsquo和# 39;ABCABCrsquo都符合这种模式。
# 39;% XYZ # 39;:都带# 39;XYZrsquo结束字符串。比如# 39;WXYZrsquo和lsquoZZXYZrsquo都符合这种模式。
# 39;% AN % # 39:都包含# 39;安# 39;此模式的字符串。比如# 39;洛杉矶。和# 39;旧金山;都符合这种模式。
# 39;_ AN % # 39:所有第二个字母都是# 39;Aprime第三个字母是# 39;Nrsquo一串。比如# 39;旧金山;符合这个模式,而# 39;洛杉矶# 39;不符合这种模式。


LIkeSELECT "字段" FROM "表名" WHERE"字段" LIKE {模式};select * from store_info where store_name like '%os%';匹配一个模式来找出我们要的数据记录



ORDER BYSELECT "字段" FROM "表名" [WHERE "条件"] ORDER BY "字段" [ASC,DESC];select * from store_info order by sales;select * from store_info order by sales desc;#ASC 是按照升序进行排序的,是默认的排序方式。#DESC 是按降序方式进行排序



函数

数学;

abs (x) 返回x的绝对值rand () 返回o到1的随机数mod (x,y) 返回x除以y以后的余数power (x,y) 返回x的y次方round (x) 返回离x最近的整数round (x,y) 保留x的y位小数四舍五入后的值sqrt(x) 返回x的平方根truncate (x, y) 返回数字x截断为y位小数的值ceil(x) 返回大于或等于x的最小整数floor(x) 返回小于或等于x的最大整数greatest (x1,x2...) 返回集合中最大的值least(x1,x2...) 返回集合中最小的值聚合函数:avg () 返回指定列的平均值count () 返回指定列中非NULL值的个数min () 返回指定列的最小值max () 返回指定列的最大值sum (x) 返回指定列的所有值之和



city表格


#count(*)包括了所有的列的行数,在统计结果的时候,不会忽略列值为NULL#count(列名)只包括列名那一列的行数,在统计结果的时候,会忽略列值为NULL的行


字符串函数trim ()返回去除指定格式的值concat (x, y)将提供的参数x和y拼接成一个字符串substr(x,y)获取从字符串x中的第y个位置开始的字符串,跟 substring()函数作用相同substr(x,y,z)获取从字符串x中的第y个位置开始长度为z的字符串length (x)返回字符串x的长度replace (x,y,z)将字符串z替代字符串x中的字符串yupper (x)将字符串x的所有字母变成大写字母lower (x)将字符串x的所有字母变成小写字母left (x, y)返回字符串x的前y个字符right (x, y)返回字符串 x的后y个字符repeat (x,y)将字符串x重复y次space (x)返回x个空格strcmp(x,y)比较x和y,返回的值可以为-1,0,1reverse (x)将字符串x反转


常用函数实例:


concat


如果sql_mode打开PIPES_AS_CONCAT,rsquo| | rsquo它被视为串联运算符而不是or运算符,类似于concat,字符串的串联函数,类似于Oracle,与Oracle数据库相同。



substr



trim



region



replace



group byselect "字段1",sum("字段2") from "表名" group by "字段1";group by 有一个原则,就是select后面的所有列中,没有使用聚合函数的列,必须出现在group by后面



having

group by语句返回的记录集通常与group by语句结合使用。
having语句的存在弥补了where关键字不能与聚合函数结合使用的不足。如果只选择了函数列,则不需要group by子句。



别名select "表格别名"."字段一" [AS] "字段别名" from "表格名" [AS] "表格别名";字段别名,表格别名



子查询select "字段1" from "表格" where "字段2" [比较运算符] #外查询select "字段1" from "表格2" where "条件";连接表格,在where 子句或 having 子句中插入另一个 sql语句可以是符号的运算符,例如 = gt; lt; lt;= gt;= 也可以文字的运算符 例如 LIKE IN BETWEEN



exists用来测试内查询有没有产生任何结果,类似布尔值是否为真#如果有的话,系统就会执行外查询中的SQL语句,若是没有的话,那整个SQL语句就不会产生任何结果。语法:SELECT "字段1" from "表格1" where exists (SELECT * FROM "表格2" WHERE "条件");SELECT SUM(Sales) FROM Store_Info WHERE EXISTS (SELECT * FROM location WHERE Region = 'West');



表链接

以下两个表用于实验。


内部联接:仅返回两个表中具有相等联接字段的行
左联接:返回左表中的所有记录和右表中具有相等联接字段的记录
右联接:返回右表中的所有记录和左表中具有相等联接字段的记录。



使用子查询实现多表查询



create view

视图可以看作是虚拟表,也可以看作是存储查询
视图和表的区别在于,表中实际存储的是数据记录,而视图是基于表的结构,它并不实际存储数据记录。用户退出或断开与数据库的连接后,临时表会自动消失,但视图不会消失。
视图不包含数据,只包含它的定义,它的用途通常可以简化复杂的查询。比如你要连接查询几个表,又要进行统计排序等操作,那么写SQL语句会很麻烦。用一个视图连接几个表,然后查询这个视图就像查询一个表一样方便。
视图表不会像临时表一样断开后自动消失。
视图表存储select语句的查询结果,本身不存储数据。
当视图表的结构与存储数据的原表结构相同时,可以修改或插入数据;否则不能修改或插入数据(比如多表连接查询的结果)。



union

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

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




交集值取两个SQL语句结果的交集select A.store_name from location A inner join store_info B on A.store_name=B.store_name;select A.store_name from location A inner join store_info B using(store_name);


两个表中的一个没有指定的行,而另一个表有重复的行,这是不适用的。要求这两个表有相交的行。


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



无交集值

显示第一条SQL语句的结果,没有与第二条SQL语句重叠的结果,也没有重复的结果。



case是SQL用来做为 if-then-else 之类逻辑的关键字语法:select casd("字段名") when "条件1" then "结果2" when "条件2" then "结果2" .... [else "结果N"] endfrom "表名";#条件可以是一个数值或公式。else 子句并不是必须的



空值(null) 和无值(rsquo; #39;) 的区别

1.无值长度为0,不占用空之间的值;空值的长度为NULL,占用空之间的空间。
2。IS NULL或IS NoT NULL用于确定一个字段是否为NULL,
无法发现它是否没有值。
3。无价值判断使用= # 39;#39;或者lt;gt;#39;#39;去处理它。lt;gt;不等于。
4。用count()统计指定字段的行数时,空值会被自动忽略,记录中不会添加任何值进行计算。






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

语法:select quot字段quot来自quot表名quot其中quot字段quotregexp { mode };




存储过程

存储过程是完成特定功能的一组SQL语句。
在存储过程的使用过程中,常见或复杂的工作都是预先用SQL语句编写好的,并以指定的名称存储。该过程被编译和优化并存储在数据库服务器中。当你需要使用这个存储过程时,就调用它。存储过程在执行时比传统的SQL更快更有效。

存储过程的优点:
1。执行一次后,生成的二进制代码会驻留在缓冲区中,提高执行效率
2。SQL语句和控制语句集具有很高的灵活性。当存储在服务器端,由客户端调用时,会降低网络负载
4。可以反复调用。


创建存储过程delimiter $$##将语句的结束符号从分号;临时改为两个$$ 可以自定义create procedure proc() ##创建存储过程,过程名为proc,不带参数 -gt; begin ##过程体以关键字 begin 开始-gt; select * from Store_info; ##过程体语句-gt; end $$ ##过程体以关键字 end结束delimiter; ##将语句的结束符号恢复为分号call proc##调用存储过程show create procedure [数据库.]存储过程名;



存储过程的参数

In参数:表示调用折叠过程的传入值(传入值可以是文字,也可以是变量)
out参数:表示过程对调用者的传出值(可以返回多个值)
inout输入输出参数:表示调用者传入值给过程,过程传出值给调用者(值只能是变量)。



查看存储过程show create procedure [数据库.]存储过程名;


删除存储过程存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名词创建新的存储过程drop procedure if exists Proc;#仅当存在时删除,不添加 if exists时,如果指定的过程不存在,则产生一个错误 drop procedure proc1;


存储过程的控制语句

(1)条件语句if-then-else hellip如果…就会结束

delimiter $$ create procedure proc2(in num int) begin declare var int; set var=num*2; if var gt;= 10 then update t set id=id+1; else update t set id=id-1; end if; end$$


(2)循环语句whilehellip结束时间



总结

这就是这篇关于Mysql高级sql语句的文章。有关Mysql高级sql语句的更多信息

0

精彩评论

暂无评论...
验证码 换一张
取 消