网安学习笔记 8 ---- mysql 基操(下)

2023.9.30

目录

三、select 基本语法形式 

where 语法

• 比较 

• 指定范围

• 指定集合

• 匹配字符 

• 多个查询条件

group by 语法

order by 语法

limit 语法

四、查找时去除重复值

五、集合函数 

六、正则表达式

七、运算符

• 算术运算符

• 比较运算符

• 逻辑运算符

• 运算符优先级

八、注释

九、查询函数

• 联合查询

• 组合查询

• 嵌套查询 

• 查询函数


三、select 基本语法形式 

select 属性名 from 表名 [where 子句][group by 属性名][order by 属性名[asc/desc]][limit 记录数]

select * from 表名:表示查找所有

where条件语句
group by根据一个或多个列对查询结果进行分组
order by

排序

asc:升序

desc:降序

where 语法

where 查询条件符号或关键字
比较=、<、<=、>、>=、!=、<>
指定范围BETWEEN AND 、NOT BETWEEN AND
指定集合IN、 NOT IN
匹配字符LIKE 、NOT LIKE
多个查询条件AND、 OR

• 比较 

比较符
=等于
>大于
>=大于等于
<小于
<=小于等于
!=“不等于
<>不等于

• 指定范围

select 属性名 from 表名 where 属性名 [not] between 元素1 and 元素2;

• 指定集合

select 属性名 from 表名 where 属性名 [not] in (元素1,元素2,...);

ps:集合中的元素为字符时必须加上引号 

ps:between 是范围,in 是集合 

• 匹配字符 

select 属性名 from 表名 where 属性名 [not] like 元素;
通配符
%匹配所有,但不能匹配空值
_一个 _ 表示匹配一个字符

• 多个查询条件

ps:and 运算优先级高于 or,可以加括号解决

select 属性名 from 表名 where 条件表达式1 and/or 条件表达式2

group by 语法

group by 将查询结果按某个字段或多个字段进行分组。字段中的值相等的为一组。

语法规则如下:

group by 属性名 [having 条件表达式]

having:对分组后的结果按条件进行筛选,只能在group by子句后使用,不能单独使用,只能对分组计算的结果进行筛选,不能使用别名

order by 语法

order by 对记录进行排序

语法规则如下:

order by 属性名 [asc | desc]

asc:升序(默认升序)

desc:降序

可以给多个列排序,只需要指定列名,列名之间用逗号分开即可

limit 语法

limit 不指定初始位置,从第一条记录开始显示。

语法规则如下:

limit n,m

n:开始位置

m:要检索的行数行

0 :检索出来的第一行为行0,而不是行1, 因此,limit 1,1将检索出第二行而不是第一行

四、查找时去除重复值

select distinct 属性名 from 表名

五、集合函数 

select 函数 from 表名

count()统计记录的条数
sum()计算字段的值的总和
avg()计算字段的值的平均值
max()查询字段的最大值
min()查询字段的最小值

 

 

六、正则表达式

select 属性名 from 表名 where 属性名 ergexp '匹配方式'
// 将 ergexp 换成 rlike 也可以

模式描述
^

匹配输入字符串的开始位置

如果设置了 regexp 对象的 multiline 属性,^ 也匹配 '\n' 或 '\r' 之后的位置

$

匹配输入字符串的结束位置

如果设置了regexp 对象的 multiline 属性,$ 也匹配 '\n' 或 '\r' 之前的位置

.

匹配字符串中的任意一个字符

[...]

字符集合,匹配所包含的任意一个字符

例如, '[abc]' 可以匹配 "plain" 中的 'a'

[^...]

非字符集合,匹配未包含的任意字符

例如, '[^abc]' 可以匹配 "plain" 中的'p' 'l' 'i' 'n'

p1|p2|p3

匹配 p1 或 p2 或 p3

例如,'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"

*

匹配前面的子表达式零次或多次

例如,zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}

+

匹配前面的子表达式一次或多次

例如,'zo+' 能匹配 "zo" 以及 "zoo",但不能匹配 "z"。+ 等价于 {1,}

{m}

m是一个非负整数。匹配确定的 m 次

例如,'o{2}' 不能匹配 "Bob" 中的 'o',但是能匹配 "food" 中的两个 o

{m,n}

m 和 n 均为非负整数,其中m <= n

最少匹配 m次且最多匹配 n次

 

 

 

七、运算符

• 算术运算符

加减乘除求余,主要是用在数值计算上

运算符作用
+加法
-减法
*乘法
/ 或 DIV除法
% 或 MOD取余

• 比较运算符

大于、小于、 等于、不等于,主要用于数值 的比较和字符串的匹配上

符号描述
=等于
>大于
<小于
=等于
<> 或 !=不等于
>=大于等于
<=小于等于
BETWEEN在两值之间
NOT BETWEEN不在两值之间
IN在集合中
NOT IN不在集合中
<=>严格比较两个NULL值是否相等
LIKE模糊匹配
REGEXP 或 RLIKE正则式匹配
IS NULL为空
IS NOT NULL不为空

• 逻辑运算符

与、或、非、异或等,结果只返回真值(1或者true)和假值(0或false)

运算符号作用
AND或&&逻辑与
OR或||逻辑或
NOT 或 !逻辑非
XOR逻辑异或

• 运算符优先级

优先级(高到低)运算符
1!
2-(负号)、〜(位反转)
3^
4*、/、%
5-(减号)、+
6>>、<<
7&
8|
9=(比较运算)、<=>、>=、>、<、<=、<>、!=、 IS、 LIKE、REGEXP、IN
10BETWEEN、CASE、WHEN、THEN、ELSE
11NOT
12&&、AND
13XOR
14||、OR
15=(赋值运算)、:=

八、注释

sql注入中广泛运用

#

表示单行注释

语法:#注释内容

--

表示单行注释

语法:-- 注释内容

/**/

表示多行注释

语法:/*注释内容*/

九、查询函数

• 联合查询

union 并操作
intersect交操作
except差操作

union

1、用于合并具有相同字段结构的两个表的内容,主要用在一个结果中集中显示不同表的内容

2、查询默认不返回重复记录

3、查询的表的字段必须一样

4、查询的数据类型必须能兼容

5、查询结果只增加了行数而列数不变

select * from 语句 union select * from 语句

• 组合查询

union 试探列数

id = 1 order by 4 -- + 正常

id = 1 order by 5 -- + 异常

结论:当前语句查询了四列 

求显示位的原因: 尽管查询出四列,但页面只显示出两列内容, 而需要求出到底用了哪两列,再在所用的列中插入paylaod

union select 1,2,3,4 -- #查看哪列内容被显示出来

• 嵌套查询 

1.子查询

2.子查询可以继续嵌套

3.子查询中不可以使用order by子句,只对最后结果排序

4.子查询要用括号括起来

子查询结果为集合时可用如下关键字判断
[NOT]IN[不]包含其中
ANY//ALL任何一个//所有的
[NOT]EXISTS[不]存在

• 查询函数 

名称类型函数查询语句
系统用户名system_user()

select system_user();

select user from mysql.user;

用户名user()select user();
当前用户名current_user()select current_user();
连接数据库用户名session_user()select session_user();
数据库名database()select database();
数据库版本version()select version();
数据库读取路径@@basedirshow variables like '%basedir%';
MYSQL安装路径@@charshow variables like"%char%";
查看当前系统版本@@version_compile_os

select @@version_compile_os;

其他相关函数作用示例
left(s,n) 返回字符串s最左边的字符 n是个数
select left(user(),2);
// user 为 root@localhost
// 因此结果为 ro
right(s,n)返回字符串s最右边的字符
select right(user(),2);
// user 为 root@localhost
// 因此结果为 ot
substr(s,n,len)截取字符串s的第n个字符,且截取长度为len
select substr(user(),2,2);
select mid(user(),2,2);
// user 为 root@localhost
// 因此结果为 oo
mid(s,n,len)
lpad(string,length,’str2’)string:需要填充的字符串
length:填充之后的总长度
str:填充字符串,默认空格
select lpad(user(),15,2);
// user 为 root@localhost
// 因此结果为 2root@localhost
rpad(string,length,’str’)
select lpad(user(),15,2);
// user 为 root@localhost
// 因此结果为 root@localhost2
locate(s2,s1,pos)返回字符串s2在字符串s2中第一次出现的位置
pos:从pos位置开始检索
select locate('a','locala',5);
//返回 6
//pos 不写默认从头开始
insert(s1,pos,len,s2)s1:指定字符串
pos:开始被替换的位置
len:被替换字符串长度
s2:新字符串
select insert('abcde',4,2,'f');
//返回 abcf
instr(s1, s2)返回字符串s1中出现字符串s2的位置
select instr('abcde','c');
//返回 3
position(s2 in s1)返回字符串s1中第一次出现的子字符串s2的位置,若没有返回0
select position('bc' in 'abcde');
//返回 2
concat(s1, s2,...)

返回结果为连接参数产生的字符串

如果有字符串为 null 则为 null

select concat('a','b','c');
//返回 abc
concat_ws(s0, s1, s2, ...)用第一个参数作为连接符号将字符串连接
select concat_ws('+','1','2');
// 返回 1+2
group_concat(s)将group by产生的同一个分组中的值连接起来,返回一个字符串
select 属性名1,group_concat(属性名2) from 表名 group by 属性名1;
if(expr,v1,v2)expr:条件
满足条件返回V1不满足条件返回V2
一般结合 substr() 进行爆破
select if (substr(user(),1,1)='r',1,0);
case when expr then v1 else v2 end

满足expr,则返回V1,不满足则返回V2

同理 if

select case when substr(user(),1,1)='r' then 1 else 0 end;

sleep(N)可以让此语句运行N秒
select sleep(10)
//暂停10秒
oct()转换为8进制
select oct(8);
//返回 10
ord()返回第一个字符串的第一个字符的ASCII值
 select ord(0);
//返回 48
hex()转换为16进制
 select hex(16);
//返回 10
char()转换为字符串
 select char(48);
//返回 0
ascii()ASCII值
 select ascii(0);
//返回 48

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Z时代.bug(゜▽゜*)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值