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'; 

这是一个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;

这是一个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个订单的详细信息。

你可能感兴趣的:(sql)