MySQL中sql语句有哪些
MySQL中sql语句有哪些
小编给大家分享一下MySQL中sql语句有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
以下两个表格做讲解
SELECT
SELECT"字段"FROM"表名";SELECTStore_NameFROMStore_Info;显示表格中的一个或数个字段的所有数据记录
DISTINCT
SELECTDISTINCT"字段"FROM"表名";selectdistinctstore_namefromstore_info;不显示重复的数据记录
WHERE
SELECT"字段"FROM"表名"WHERE"条件";查找store_info表中符号sales=700条件的store_name字段有条件查询
AND OR
SELECT"字段"FROM"表名"WHERE"条件1"selectstore_name,sales,datefromstore_infowheresales>1000or(sales<500andsales>200);且或
IN
SELECT"字段"FROM"表名"WHERE"字段"BETWEEN('值1'AND'值2',...);select*fromstore_infowherestore_namein('Houston','LosAngeles');显示已知的值的数据记录
BETWEEN
SELECT"字段"FROM"表名"WHERE"字段"BETWEEN'值1'AND'值2';select*fromstore_infowheresalesbetween200and500;显示两个值范围
通配符
% ;百分号表示零个,一个或多个字符
_ :下划线表示单个字符'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
SELECT"字段"FROM"表名"WHERE"字段"LIKE{模式};select*fromstore_infowherestore_namelike'%os%';匹配一个模式来找出我们要的数据记录
ORDER BY
SELECT"字段"FROM"表名"[WHERE"条件"]ORDERBY"字段"[ASC,DESC];select*fromstore_infoorderbysales;select*fromstore_infoorderbysalesdesc;#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,’||’ 视为字符串的连接操作符而非或运算符,和字符串的拼接函数Concat相类似,这和Oracle相类似,这和Oracle数据库使用方法一样
substr
trim
region
replace
group by
select"字段1",sum("字段2")from"表名"groupby"字段1";groupby有一个原则,就是select后面的所有列中,没有使用聚合函数的列,必须出现在groupby后面
having
用来过来由group by 语句返回的记录集,通常与group by 语句联合使用
having 语句的存在弥补了where关键字不能与聚合函数联合使用的不足,如果被select的只有函数栏,那就不需要group by子句
别名
select"表格别名"."字段一"[AS]"字段别名"from"表格名"[AS]"表格别名";字段别名,表格别名
子查询
select"字段1"from"表格"where"字段2"[比较运算符]#外查询select"字段1"from"表格2"where"条件";连接表格,在where子句或having子句中插入另一个sql语句可以是符号的运算符,例如=><<=>=也可以文字的运算符例如LIKEINBETWEEN
exists
用来测试内查询有没有产生任何结果,类似布尔值是否为真#如果有的话,系统就会执行外查询中的SQL语句,若是没有的话,那整个SQL语句就不会产生任何结果。语法:SELECT"字段1"from"表格1"whereexists(SELECT*FROM"表格2"WHERE"条件");SELECTSUM(Sales)FROMStore_InfoWHEREEXISTS(SELECT*FROMlocationWHERERegion='West');
表链接
以下两表做实验
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语句结果的交集selectA.store_namefromlocationAinnerjoinstore_infoBonA.store_name=B.store_name;selectA.store_namefromlocationAinnerjoinstore_infoBusing(store_name);
两表其中的一个表没有指定的行,而另一个表这个行有重复不适用,要求两个表确实有交集的行的时候用
取两个SQL语句结果的交集,且没有重复
无交集值
显示第一个SQL语句的结果,且与第二个SQL语句没有交集的结果,且没有重复
case
是SQL用来做为if-then-else之类逻辑的关键字语法:selectcasd("字段名")when"条件1"then"结果2"when"条件2"then"结果2"....[else"结果N"]endfrom"表名";#条件可以是一个数值或公式。else子句并不是必须的
空值(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、可完成所有的数据库操作,也可控制数据库的信息访问权限
创建存储过程
delimiter$$##将语句的结束符号从分号;临时改为两个$$可以自定义createprocedureproc()##创建存储过程,过程名为proc,不带参数->begin##过程体以关键字begin开始->select*fromStore_info;##过程体语句->end$$##过程体以关键字end结束delimiter;##将语句的结束符号恢复为分号callproc##调用存储过程showcreateprocedure[数据库.]存储过程名;
存储过程的参数
in 输入参数:表示调用折向过程传入值(传入值可以是字面量或变量)
out 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
inout 输入输出参数:即表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
查看存储过程
showcreateprocedure[数据库.]存储过程名;
删除存储过程
存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名词创建新的存储过程dropprocedureifexistsProc;#仅当存在时删除,不添加ifexists时,如果指定的过程不存在,则产生一个错误dropprocedureproc1;
存储过程的控制语句
(1) 条件语句 if-then-else …end if
delimiter$$createprocedureproc2(innumint)begindeclarevarint;setvar=num*2;ifvar>=10thenupdatetsetid=id+1;elseupdatetsetid=id-1;endif;end$$
(2)循环语句while… end while
以上是“MySQL中sql语句有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注恰卡编程网行业资讯频道!
推荐阅读
-
MySQL索引怎么创建和删除
MySQL索引怎么创建和删除这篇文章主要介绍了MySQL索引怎么创...
-
MySQL查看锁的代码怎么写
MySQL查看锁的代码怎么写本文小编为大家详细介绍“MySQL查看...
-
在 PHP 7 中不要做的 10 件事
1.不要使用MySQL_函数这一天终于来了,从此你不仅仅“不应该”使用mysql_函数。PHP7已经把它们从核心...
-
如何使用 SQL Server FILESTREAM 存储非结构化数据?
-
MySQL体系架构,超详细
-
安全攻防六:SQL注入,明明设置了强密码,为什么还会被别人登录
-
利用PHP访问MySql数据库以及增删改查实例操作
关于利用PHP访问MySql数据库的逻辑操作以及增删改查实例操作PHP访问MySql数据库˂?php//造连...
-
密码攻防系列文章6:服务器MySQL账号扫描及攻击
-
计算机毕业设计php创建mysql数据库
-
PHP动态网站设计试题