zoukankan      html  css  js  c++  java
  • 网络安全从入门到精通(第二章-3)后端基础SQL— MySQL高级查询与子查询

    本文内容:

    • MySQL的基础查询语句
    • 链接查询
    • 联合查询
    • 子查询
    • 渗透测试常用函数

     1,MySQL基础查询语句:

      select * from 表 order  by ASC/DESC;

      ASC:从小到大(默认)。

      DESC:从大到小。

    补充:在不知道字段名称的情况下,order by可以使用数字代替,用数字几就是按第几个字段排序。

      select * from 表 limit n,m;

      n:表示从第几行开始取。

      m:表示取几条。

    注意多种查询可以合并,先后顺序为:条件>排序=>分组>分页。

      select * from 表 where 字段 like '%a%';

      %通配符

      补充:渗透测试时,有时候不能写=,就可以用like查询代替。

    2,链接查询:

      内链接:

        select 表1.*, 表2.* from 表1 INNER JOIN 表2 on 表1.字段=表2.字段;

        表1.字段=表2.字段为链接查询的条件。

      外连接:

        左链接:显示左表所有数据,右表没有数据的显示NULL。

          select 表1.*, 表2.* from 表1 LEFT JOIN 表2 on 表1.字段=表2.字段;

        右链接:显示右表所有数据,左表没有数据的显示NULL。

          select 表1.*, 表2.* from 表1 RIGHT JOIN 表2 on 表1.字段=表2.字段;

    补充:数据库可以进行一些运算。

      运算符:+、-、/、*、%。

      逻辑运算符: NOT(!)  AND(&&)   OR(!!)

      slee():延迟函数。

      select slee(n)延迟n秒。

      AND和OR逻辑:

        AND:都为真,为真,其余全为假。

        OR:都为假,为假,其余全为真。

        AND执行有选择:

        当第一个条件为真时,不执行其余条件

        当第一个条件为假时,不执行其余条件

      举例:

        假如表中符合数据有两条。

        select * from 表 where 字段=数据 and sleep(2)

        这时语句执行就会延迟4秒

        因为第一个条件为真,就不会执行第二个条件,所以延迟4秒。

        select * from 表 where 字段= 数据 or sleep(2)

        这是语句执行就会延迟8秒

        虽然第一个条件为真,但是or执行没有选择,第二个条件还是会执行。所以会延迟8秒

    3,联合查询:

       表的内容无重复:

        select * from 表1 UNION select * from 表2;

       表的内容有重复:

        select* from 表1 UNION ALL select * from 表2;

    注意事项:两次查询的字段数必须一致。

    4,子查询:

      官方定义:子查询是一种常用计算机语言select-sql语言种嵌套查询下层给的程序模块,当一个查询是另一个查询的条件是,称为子查询。

      通俗解释:子查询就是有限执行,然后执行得到的结果作为某个查询的条件。

    举例:

      admin表当id=1的用户是否在user表也存在。

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

      检查admin表和user用户名是否相等。

      select * from user where yonghu in (select yonghu from admin);

    补充:子查询中的关键字:

      ANY:对于子查询返回的列中任何一个数值,如果比较结果true就返回true。

      IN:效果等同于ANY。

      ALL:效果与ANY相反,比较结果必须全部为FALSE。

      SOME:some是any的别名,用的比较少。

      EXISTS:子查询是否有结果,若返回0行则表示FALSE,否则为TRUE。

    5,渗透测试常用函数:

      GROUP_CONCAT(字段):         可以将列显示的数据,转换为行显示,中间间隔符为逗号。

      ASCII(char):              返回字符的ASCII码值。

      SELECT DATABASE():          返回当前数据库名。

      SELECT USE()或SYSTEM_USEER():       返回当前登录用户名。

      SELECT VERSION():          返回Mysql服务器的版本。

      SELECT SLEEP(n):             休眠n秒。

    与君共勉:

      努力不是为了做给谁看,

      无论什么结果都能问心无愧,

      努力是因为你可以不接受命运的框定,

      靠自己来场漂亮的反击。

  • 相关阅读:
    优化页面响应时间
    php性能优化
    加快compser install 和update的方法
    好用的类库
    php会话(session)实现原理
    mysql引擎
    数据库事物四大特性
    数据库索引
    insert和insertSelective区别
    java面试题之int和Integer的区别
  • 原文地址:https://www.cnblogs.com/xz25/p/12532626.html
Copyright © 2011-2022 走看看