sql基础-高级查询和子查询

mq   ·   发表于 2019-12-24 22:27:43   ·   技术文章投稿区

一、MySQL的基础查询语句

1、select * from table_name order by 字段 [ASC(默认)/DESC];

     升序(从小到大)ASC

     降序(从大到小)DESC

     order by表示排序,当如果不知道字段名时,可以用select * from table_name order by [数字1、2、3、4...]代替探测有几个字段

     (如果字段数超过了本身字段数就会返回空或者报错,在手工sql十分有用)

2、select * from 表 limit n,m;

     n表示从第几行开始(不包括该行),m表示取几条

3、select * from table_name where username like '%%' 模糊查询

     a、当like后面跟的是具体的字符,相当于‘=’

     b、当跟的是%a,表示以a结尾的任意字符/字符串

     c、当跟的是a%,表示以a开头的任意字符/字符串

     d、当跟的是%a%,表示以a在中间的任意字符/字符串

4、算术运算符号:+ - * / %

5、逻辑运算符号:NOT(!) AND(&) OR(|)

6、时间函数查询sleep()

   a、sleep()本身查询出来的结果为false即为0

   b、sleep()与select语句连用时注意时延,如下例子:

   select * from ssh where zh=1 and sleep(1);

   //当使用and查询并且zh=1存在时,每次查询就要消耗1秒,但是返回结果为空(sleep函数为false),当zh=1不存在时,语句直接返回为空,不消耗时间

   select * from ssh where zh=1 or sleep(1);

   //当使用or查询并且zh=1存在时,每次查询,or就会判断,如果该行数据符合要求,就不进行sleep,不符合要求的行进行sleep,每行做了遍历,当zh不存在时,每次遍历就做sleep

二、联合查询

1、表的内容无重复:

    select * from 表1 union select * from 表2;

2、表的内容有重复(重复的项目不会被自动合并)

    select * from 表1 union all select * from 表2;

3、注意事项:

    两次查询的表的列数必须一致,最后的结果以第一个查询语句的表的列名为列名,数据是合并在一张表中的

三、子查询

子查询是一种常用计算机语

老师理解:子查询就如同 1+2*2=5 (1+2)*2=6 子查询就是优先执行,然后执行得到的结果作为某个查询的条件 

例如:select *from user where username = (select username from admin where id=1);

表达的意思:admin表当id=1的用户名是否在user表也存在

例如:select*from user where username in (select username from admin)

表达的意思: 检查admin表和user表是否有用户名相等

四、渗透测试常用函数

GROUP_CONCAT(col) 返回由属于一组的列值连接组合而成的结果

DATABASE()     返回当前数据库名

USER()或SYSTEM_USER()    返回当前登陆用户名

VERSION()     返回MySQL服务器的版本

SLEEP(n) 休眠n秒 


用户名金币积分时间理由
admin 10.00 0 2019-12-28 14:02:03 鼓励

打赏我,让我更有动力~

0 Reply   |  Until 2019-12-24 | 885 View
LoginCan Publish Content
返回顶部 投诉反馈

© 2016 - 2022 掌控者 All Rights Reserved.