在数据库中,仅有一些基础的语法是往往不够的,有一些目的需要高级语法来完成。
一、like
例:选取 name 以字母“G”开头的所有客户:
SELECT * FROM Websites WHERE name LIKE '_G%';
通配符: % 代表多个字符
_ 代表一个字符
二、order by 排序
SELECT * FROM test_table ORDER BY userid;
用法:确定字段数,后面跟着的数字超出了字段数就会报错
三、group by 分组
group by 分组;根据(by)一定的规则进行分组(group);
SELECT * FROM test_table ORDER BY userid;
作用:通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。
·先排序后分组
gruop by 必须有“聚合函数”sum()、count()、avg()配合使用;
当查询语句同时出现了where、gruop by、having、order by的时候,执行顺序和编写顺序是:
①执行where xx 对全表数据做筛选,返回第一个数据集;
②针对第一个结果集使用gruop by分组,返回第二个结果集;
③针对第二个结果集中每一组数据执行select xx ,有几组执行几次,返回第三个结果集;
④针对第三个结果集执行having xx 进行筛选,返回第四个结果集;
⑤针对第四个结果集进行排序
四、limit
select * from table limit m,n
其中m指记录开始的index,从0开始,表第一条记录。
n指的是从第m+1条开始,取n条
两个参数:第一个是偏移量,第二个是数目
例:select * from employee limit 3,7 指的是返回第4-11行
select * from employee limit 3,1 指的是返回第4行
一个参数:
select * from employee limit 3;指的是返回前3行
五、union 联合查询
用and union select 1,2,3,…;来猜解列数(字段数),只有列数相等才返回True
六、结合exists
结合exists()函数猜解表名
and exists (select ……)
union 结合系统函数暴数据库信息
load_file() 读取服务器文件内容
七、挖掘SQL注入
- 使用逻辑进行确认
OR 1 = 1
OR 1 = 2
AND 1 = 1
AND 1 = 2 - 使用union语句提取数据
SELECT column -1 , column -2 ,…,column -N FROM table -1 - 如果允许重复的值,就需要使用union all
SELECT cliumn -1 , column -2 , …,column -N FROM table -1
UNION ALL
SELECT cliumn -1 , column -2 , …,column -N FROM table -2 - 匹配列的两种主要方法
union select NULL,NULL,NULL……直到匹配对应列时返回为真
order by3,order by4,…当列数小于或等于当前列的时候返回正常