Mysql将多个查询结果合成一行

多查询结果同行显示

学了那么久今天自己第一次撸代码,然后在求下图6六列各自的平均值并显示在页面上就出现了问题。同过下面代码能实现是没有错,好像要六次查询并且不算封装到实体中代码量,代码量也太多了,有没有一次调用sql语句就能全部查询且封装到实体的方法呢?

SELECT AVG(plant_height7d) AS plant_height7d FROM fheight WHERE h_height=1.5;

Mysql将多个查询结果合成一行_第1张图片终于我发现了如下sql组合方式

SELECT * FROM(查询语句) 别名,(查询语句) 别名,....;

该组合方式能够将多个查询语句的结果按照别名放在同一行进行显示。因此我进行了一下sql语句的编写:

SELECT * FROM(SELECT AVG(plant_height7d) AS 'plant_height7d' FROM fheight WHERE h_height=1) plant_height7d,
(SELECT AVG(plant_height14d) AS 'plant_height14d' FROM fheight WHERE h_height=1) plant_height14d,
(SELECT AVG(plant_height14d) AS 'plant_height21d' FROM fheight WHERE h_height=1) plant_height21d,
(SELECT AVG(plant_height14d) AS 'fruit_height7d' FROM fheight WHERE h_height=1) fruit_height7d,
(SELECT AVG(plant_height14d) AS 'fruit_height14d' FROM fheight WHERE h_height=1) fruit_height14d,
(SELECT AVG(plant_height14d) AS 'fruit_height21d' FROM fheight WHERE h_height=1) fruit_height21d
;

查询结果如图:
在这里插入图片描述这样就能省去代码,还能一步封装到位。

  • 注意
    有一点值得注意的是,如果查询语句和组合同时设置别名的话,那么优先选择查询语句的别名设置。例如:
SELECT * FROM(select avg(age) as A from user) B,(select avg(money) as C from user) D;

查询结果显示时的别名不是B,D而是A,C 如图:
在这里插入图片描述

多查询结果同列显示

既然有同行显示,那么肯定有并列显示。我们可以使用SQL UNION,SQL的官方网站对UNION的描述如下:
可以访问该网站:链接: [http://www.w3school.com.cn/sql/sql_union.asp]

SQL UNION 操作符

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。
SQL UNION 语法

SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。
SQL UNION ALL 语法

SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2

另外,UNION 结果集中的列名总是等于 UNION 中第一个 SELECT 语句中的列名。

实例:
表中数据:
在这里插入图片描述

SELECT money FROM `user` WHERE id =1
UNION
SELECT pice FROM `user` WHERE id =10;

结果:
在这里插入图片描述

你可能感兴趣的:(Mysql,SQL,查询,CSDN)