• 001SQL语句分析


    SELECT 
    CONCAT(table_schema,'.',table_name) AS 'Table Name', table_rows AS 'Number of Rows', 
    CONCAT(ROUND(data_length/(1024*1024*1024),4),'G') AS 'Data Size', 
    CONCAT(ROUND( index_length/(1024*1024*1024),4),'G') AS 'Index Size', 
    CONCAT(ROUND((data_length+ index_length)/(1024*1024*1024),4),'G') AS'Total'
    FROM information_schema.TABLES 
    WHERE table_schema LIKE 'test'; 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    这是一个MySQL查询语句,用于获取特定schema(在此为’test’)下的表的信息。下面是对这个查询的详细分析:

    1、SELECT CONCAT(table_schema,‘.’,table_name) AS ‘Table Name’, table_rows AS ‘Number of Rows’,:这部分选择了表名和行数。其中,table_schema和table_name分别代表表的schema和名称,通过CONCAT函数合并它们并添加了’.‘分隔符,然后将结果命名为’Table Name’。table_rows代表表的行数,被命名为’Number of Rows’。

    2、CONCAT(ROUND(data_length/(102410241024),4),‘G’) AS ‘Data Size’,:这部分选择了数据大小。data_length代表表占用的数据空间大小,单位是字节。通过除以(102410241024),将单位转换为GB(Gigabytes),然后使用ROUND函数保留四位小数,最后加上’G’表示单位为GB,并将结果命名为’Data Size’。

    3、CONCAT(ROUND(index_length/(102410241024),4),‘G’) AS ‘Index Size’,:这部分选择了索引大小。index_length代表表的索引占用的空间大小,单位是字节。同样地,通过除以(102410241024)将单位转换为GB,并使用ROUND函数保留四位小数,最后加上’G’表示单位为GB,并将结果命名为’Index Size’。

    4、CONCAT(ROUND((data_length+ index_length)/(102410241024),4),‘G’) AS’Total’:这部分选择了总大小。总大小是数据大小和索引大小的和,通过除以(102410241024)将单位转换为GB,并使用ROUND函数保留四位小数,最后加上’G’表示单位为GB,并将结果命名为’Total’。

    5、FROM information_schema.TABLES WHERE table_schema LIKE ‘test’;:这部分指定了查询的数据来源是information_schema.TABLES视图,这个视图包含了关于数据库中所有表的信息。通过WHERE子句筛选出schema名为’test’的表。LIKE 'test’表示匹配以’test’开头的字符串。
    总结起来,这个查询会返回一个包含特定schema下所有表的名称、行数、数据大小、索引大小和总大小的列表。

    使用行存查询数据

    SELECT
    l_orderkey,
    SUM(
    l_extendedprice * (1 - l_discount)
    ) AS revenue,
    o_orderdate,
    o_shippriority
    FROM
    customer,
    orders,
    lineitem
    WHERE
    c_mktsegment = 'BUILDING'
    AND c_custkey = o_custkey
    AND l_orderkey = o_orderkey
    AND o_orderdate < DATE '1996-01-01'
    AND l_shipdate > DATE '1996-02-01'
    GROUP BY
    l_orderkey,
    o_orderdate,
    o_shippriority
    ORDER BY
    revenue DESC,
    o_orderdate
    limit 10;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    这是一个SQL查询,下面是对这个查询的详细分析:

    1. SELECT语句:
      • l_orderkey: 这是订单的唯一标识符,从lineitem表中选取。
      • SUM(l_extendedprice * (1 - l_discount)) AS revenue: 这一部分计算了每个订单的总收入。它通过订单的每个项目(lineitem)的扩展价格(l_extendedprice)和折扣(l_discount)来计算。首先,它计算每个项目的净价格(扩展价格减去折扣),然后将所有项目的净价格相加来得到订单的总收入。AS revenue是为这个计算结果命名的别名。
      • o_orderdate: 这是订单的日期,从orders表中选取。
      • o_shippriority: 这是订单的运输优先级,从orders表中选取。
    2. FROM语句:
      这个查询从三个表中获取数据:customerorderslineitem。它通过customer表的c_mktsegment字段和BUILDING值筛选出建筑市场的客户。然后,它使用c_custkey = o_custkeyl_orderkey = o_orderkey条件来关联这三个表。这些条件确保了选取的客户、订单和项目是匹配的。
    3. WHERE语句:
      • c_mktsegment = 'BUILDING': 这个条件筛选出在建筑市场的客户。
      • o_orderdate < DATE '1996-01-01': 这个条件筛选出所有在1996年1月1日之前的订单。
      • l_shipdate > DATE '1996-02-01': 这个条件筛选出所有在1996年2月1日之后的发货日期。这个查询只关注在1996年之前下单但在1996年2月之后发货的订单。
    4. GROUP BY语句:
      这部分按照订单号(l_orderkey),订单日期(o_orderdate)和运输优先级(o_shippriority)将结果进行分组。这样,每个组的所有行都具有相同的订单号、订单日期和运输优先级。
    5. ORDER BY语句:
      这部分按照收入(revenue)降序排列结果,如果收入相同,则按照订单日期(o_orderdate)升序排列。
    6. LIMIT语句:
      最后,这个查询限制了返回结果的行数为10行。

    总的来说,这个查询是为了找出在1996年之前下单但在1996年2月之后发货的建筑市场客户的订单,并按照收入和订单日期排序,返回收入最高的前10个订单的详细信息。

  • 相关阅读:
    1017 Queueing at Bank
    深入解读GLIDE/PITI代码
    2023年软件测试还能不能干,怎么干!听听这些肺腑之言!
    MySQL的备份与恢复以及日志管理
    各种 sql 语句
    Nosql redis高可用和持久化
    Mac使用本地docker,在IDEA进行本地容器化部署、启动
    Wireshark分析https流量
    安装Apache2.4
    金九银十又到了分享面试经验的时候了
  • 原文地址:https://blog.csdn.net/gaoluan6052/article/details/134014502