文章目录
- 前言
- 一、联合查询 : UNION
- 二、嵌套查询:[NOT]IN、ANY、ALL、[NOT]EXISTS
- 三、查询函数
- 四、其它相关函数
- 1. left(s,n) #返回字符串s最左边的字符,n是个数
- 2. right(s,n) #返回字符串s最右边的字符
- 3. substr()和mid() #截取字符串
- 4. lpad()和rpad() #填充
- 5. LOCATE() #检索
- 6. insert(str1,pos,len,str2) #替换
- 7. instr() #返回特定字符串的位置
- 8. position() #返回字符串中第一次出现的子字符串的位置
- 9. concat() #返回结果为连接参数产生的字符串
- 10. concat_ws() #返回用第一个参数作为连接符号将字符串连接
- 11. group_concat() #将group by产生的同一个分组中的值连接起来,返回一个字符串
- 12. if() #条件判断
- 13. case else #条件判断
- 14. sleep(N) #数据库睡眠
- 15. oct() #转换为8进制
- 16. ord() #返回第一个字符串的第一个字符的ascii值
- 17. hex() #转换为16进制
- 18. char() #转换为字符串
- 19. ascii() #ASCII
- 五、函数用于判断(猜名字)
前言
MySQL中可以使用SELECT
语句来查询数据。
一、联合查询 : UNION
并操作 union、交操作 intersect、差操作 except
UNION用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内容。
语法:
select * from venus1
union
select * from venus2
- union查询默认不返回重复记录
- union查询的表的字段必须一样
- union查询的数据类型必须能兼
union查询结果只增加了行数而列数不变
union操作符用于合并两个或多个select语句的结果集。
union所查询的列数、列的顺序必须相同,数据类型必须兼容。
联合查询的union 一般和order by一起来使用,用来判断字段数。
二、嵌套查询:[NOT]IN、ANY、ALL、[NOT]EXISTS
1、子查询
2、子查询可以继续嵌套
3、子查询中不可以使用order by子句,只对最后结果排序
4、子查询要用括号括起来
子查询结果为集合时可用如下关键字判断:
- [NOT]IN
#[不]包含其中
- ANY//ALL
#任何一个//所有的
- [NOT]EXISTS
#[不]存在
三、查询函数
1. 系统用户名:system_user()
查询语句:
select system_user();
select user from mysql.use
2. 用户名:user()
查询语句:
select user();
3. 当前用户名:current_user()
查询语句:
current_date()当前日期
select current_user()
4. 连接数据库用户名:session_user()
查询语句:
select session_user();
5. 数据库名:database()
查询语句:
select database();
6. 数据库版本:version()
查询语句:
select version();
7. 数据库读取路径:
查询语句:
show variables like '%basedir%';
8. MYSQL安装路径:
查询语句:
show variables like "%char%";
9. 查看当前系统版本:
查询语句:
select @@version_compile_os;
四、其它相关函数
1. left(s,n) #返回字符串s最左边的字符,n是个数
2. right(s,n) #返回字符串s最右边的字符
3. substr()和mid() #截取字符串
substr(s,n,len)
mid(s,n,len)
#截取字符串s的第n个字符,且截取长度为len
#其中n是从1开始算起
4. lpad()和rpad() #填充
lpad(string,length,'str')#从前面开始填充
rpad(string,length,'str') #从后面开始填充
#string:需要填充的字符串
#length:填充之后的总长度
#str:填充字符串,默认空格
5. LOCATE() #检索
LOCATE(str,str1)
LOCATE(str,str1,pos)
LOCATE('a',locale,5)
#返回str在str1中第一次出现的位置 pos,从pos位置开始检索
6. insert(str1,pos,len,str2) #替换
insert(str1,pos,len,str2)
#str1:指定字符串
#pos:开始被替换的位置
#len:被替换字符串长度
#str2:新字符串
7. instr() #返回特定字符串的位置
instr(field, str)
#返回field字符串中出现str字符串的位置
8. position() #返回字符串中第一次出现的子字符串的位置
position(str1 in str2)
#返回字符串中第一次出现的子字符串的位置,若没有返回0
9. concat() #返回结果为连接参数产生的字符串
concat(str1, str2,...)
concat(str1,NULL, str2)就返回NULL
10. concat_ws() #返回用第一个参数作为连接符号将字符串连接
concat_ws(separator, str1, str2, ...)
concat_ws(null, str1, str2, ...) 返回null
11. group_concat() #将group by产生的同一个分组中的值连接起来,返回一个字符串
group_concat(str1,str2,...)
12. if() #条件判断
if(expr,v1,v2)
#expr:条件 满足条件返回V1,不满足条件返回V2
13. case else #条件判断
case when expr then v1 else v2 end
#满足expr,则返回V1,不满足则返回V2
14. sleep(N) #数据库睡眠
#执行select sleep(N)可以让此语句运行N秒
15. oct() #转换为8进制
16. ord() #返回第一个字符串的第一个字符的ascii值
17. hex() #转换为16进制
18. char() #转换为字符串
19. ascii() #ASCII
五、函数用于判断(猜名字)
这个非常实用,可以在获得普通权限,没有管理员权限的时候使用
1. 判断当前用户的第一字符:
查询语句:
select left(user(),1)='r';
#正确返回1,错误返回0
2. 判断当前用户的最后一个字符:
查询语句:
select right(user(),1)='r';
#正确返回1,错误返回0
3. 截取当前数据第二个字符是否为r
查询语句:
select substr(database(),2,1)='r';
select mid(database(),2,1)='r';
#正确返回1,错误返回0