MySQL。子查询
我很难理解子查询。有人能给我解释一下吗 我有一个疑问:MySQL。子查询,mysql,sql,database,subquery,Mysql,Sql,Database,Subquery,我很难理解子查询。有人能给我解释一下吗 我有一个疑问: SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini FROM tip_masina GROUP BY companie; SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini FROM proprietate GROUP BY
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie;
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca;
这显示:
companie numar_masini
Chevrolet 5
Dacia 1
Dodge 5
Ford 6
marca nr_masini
Chevrolet 18
Dodge 9
Ford 11
此查询:
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie;
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca;
这显示:
companie numar_masini
Chevrolet 5
Dacia 1
Dodge 5
Ford 6
marca nr_masini
Chevrolet 18
Dodge 9
Ford 11
我希望正确地“组合”此查询,并获得以下结果:
companie numar_marci numar_masini
Chevrolet 5 18
Dacia 1 0 (or null)
Dodge 5 9
Ford 6 11
我怎样才能正确地做到这一点?我不需要代码,我需要对子查询进行适当的解释,因为我没有正确理解它们,也没有找到适当的文档来解释它。这不是子查询<代码>子字符串索引是一个函数 这就是子查询的工作方式
SELECT *
FROM
(
-- This is the subquery
SELECT id, test1, test2
FROM table
) TableAlias
基本上,mysql从内部select收集结果:
SELECT id, test1, test2 FROM table
现在是表别名
现在可以这样使用语法了
SELECT TableAlias.Id, TableAlias.test1, TableAlias.test2
FROM
(
-- This is the subquery
SELECT id, test1, test2
FROM table
) TableAlias
子查询对许多事情都很有用。当使用聚合函数时,例如SUM
,AVG
。然后它可以真正帮助订购重用LTS
请尝试以下链接:
我希望这能更好地解释子查询。这不是子查询<代码>子字符串索引是一个函数
这就是子查询的工作方式
SELECT *
FROM
(
-- This is the subquery
SELECT id, test1, test2
FROM table
) TableAlias
基本上,mysql从内部select收集结果:
SELECT id, test1, test2 FROM table
现在是表别名
现在可以这样使用语法了
SELECT TableAlias.Id, TableAlias.test1, TableAlias.test2
FROM
(
-- This is the subquery
SELECT id, test1, test2
FROM table
) TableAlias
子查询对许多事情都很有用。当使用聚合函数时,例如SUM
,AVG
。然后它可以真正帮助订购重用LTS
请尝试以下链接:
我希望这能更好地解释子查询。这不是子查询<代码>子字符串索引是一个函数
这就是子查询的工作方式
SELECT *
FROM
(
-- This is the subquery
SELECT id, test1, test2
FROM table
) TableAlias
基本上,mysql从内部select收集结果:
SELECT id, test1, test2 FROM table
现在是表别名
现在可以这样使用语法了
SELECT TableAlias.Id, TableAlias.test1, TableAlias.test2
FROM
(
-- This is the subquery
SELECT id, test1, test2
FROM table
) TableAlias
子查询对许多事情都很有用。当使用聚合函数时,例如SUM
,AVG
。然后它可以真正帮助订购重用LTS
请尝试以下链接:
我希望这能更好地解释子查询。这不是子查询<代码>子字符串索引是一个函数
这就是子查询的工作方式
SELECT *
FROM
(
-- This is the subquery
SELECT id, test1, test2
FROM table
) TableAlias
基本上,mysql从内部select收集结果:
SELECT id, test1, test2 FROM table
现在是表别名
现在可以这样使用语法了
SELECT TableAlias.Id, TableAlias.test1, TableAlias.test2
FROM
(
-- This is the subquery
SELECT id, test1, test2
FROM table
) TableAlias
子查询对许多事情都很有用。当使用聚合函数时,例如SUM
,AVG
。然后它可以真正帮助订购重用LTS
请尝试以下链接:
我希望这能更好地解释子查询。子查询(以这种方式)只是返回一组行。您可以将子查询的结果视为一个表
例如,您的查询可以按如下方式使用
SELECT b.marca, b.nr_masini, c.numar_masini
(
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca
) b
LEFT OUTER JOIN
(
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie
) c
ON b.marca = c.companie
这里是第一次查询,得到4个make(与计数一起),然后将该结果与第二次查询的结果合并。第二次查询只返回3行
可能两个查询都会返回另一个查询不返回的行。在这种情况下,您可以使用第三个子查询来获取主要行。然后,您可以加入其他2个:-
SELECT a.companie, b.nr_masini, c.numar_masini
FROM
(
SELECT substring_index(marca, ' ', 1) AS companie
FROM tip_masina
UNION
SELECT substring_index(id_masina, ' ', 1) AS companie
FROM proprietate
) a
LEFT OUTER JOIN
(
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca
) b
ON a.companie = b.marca
LEFT OUTER JOIN
(
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie
) b
ON a.companie = c.companie
通过这种方式,您可以使用一个子查询来获取所有可能的companie值的列表,并将其视为一个表,以针对其他两个子查询进行连接
您可以将这些子查询中的每一个子查询设置为视图,这样,当您连接它们时,它们看起来更像表。子查询(以这种方式)只是返回一组行。您可以将子查询的结果视为一个表
例如,您的查询可以按如下方式使用
SELECT b.marca, b.nr_masini, c.numar_masini
(
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca
) b
LEFT OUTER JOIN
(
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie
) c
ON b.marca = c.companie
这里是第一次查询,得到4个make(与计数一起),然后将该结果与第二次查询的结果合并。第二次查询只返回3行
可能两个查询都会返回另一个查询不返回的行。在这种情况下,您可以使用第三个子查询来获取主要行。然后,您可以加入其他2个:-
SELECT a.companie, b.nr_masini, c.numar_masini
FROM
(
SELECT substring_index(marca, ' ', 1) AS companie
FROM tip_masina
UNION
SELECT substring_index(id_masina, ' ', 1) AS companie
FROM proprietate
) a
LEFT OUTER JOIN
(
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca
) b
ON a.companie = b.marca
LEFT OUTER JOIN
(
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie
) b
ON a.companie = c.companie
通过这种方式,您可以使用一个子查询来获取所有可能的companie值的列表,并将其视为一个表,以针对其他两个子查询进行连接
您可以将这些子查询中的每一个子查询设置为视图,这样,当您连接它们时,它们看起来更像表。子查询(以这种方式)只是返回一组行。您可以将子查询的结果视为一个表
例如,您的查询可以按如下方式使用
SELECT b.marca, b.nr_masini, c.numar_masini
(
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca
) b
LEFT OUTER JOIN
(
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie
) c
ON b.marca = c.companie
这里是第一次查询,得到4个make(与计数一起),然后将该结果与第二次查询的结果合并。第二次查询只返回3行
可能两个查询都会返回另一个查询不返回的行。在这种情况下,您可以使用第三个子查询来获取主要行。然后,您可以加入其他2个:-
SELECT a.companie, b.nr_masini, c.numar_masini
FROM
(
SELECT substring_index(marca, ' ', 1) AS companie
FROM tip_masina
UNION
SELECT substring_index(id_masina, ' ', 1) AS companie
FROM proprietate
) a
LEFT OUTER JOIN
(
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca
) b
ON a.companie = b.marca
LEFT OUTER JOIN
(
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie
) b
ON a.companie = c.companie
通过这种方式,您可以使用一个子查询来获取所有可能的companie值的列表,并将其视为一个表,以针对其他两个子查询进行连接
您可以将这些子查询中的每一个子查询设置为视图,这样,当您连接它们时,它们看起来更像表。子查询(以这种方式)只是返回一组行。您可以将子查询的结果视为一个表
例如,您的查询可以按如下方式使用
SELECT b.marca, b.nr_masini, c.numar_masini
(
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca
) b
LEFT OUTER JOIN
(
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie
) c
ON b.marca = c.companie
这里是第一次查询,得到4个make(与计数一起),然后将该结果与第二次查询的结果合并。第二次查询只返回3行
可能两个查询都会返回另一个查询不返回的行。在这种情况下,您可以使用第三个子查询来获取主要行。然后,您可以加入其他2个:-
SELECT a.companie, b.nr_masini, c.numar_masini
FROM
(
SELECT substring_index(marca, ' ', 1) AS companie
FROM tip_masina
UNION
SELECT substring_index(id_masina, ' ', 1) AS companie
FROM proprietate
) a
LEFT OUTER JOIN
(
SELECT substring_index(id_masina, ' ', 1) AS marca, SUM(nr_vehicule) AS nr_masini
FROM proprietate
GROUP BY marca
) b
ON a.companie = b.marca
LEFT OUTER JOIN
(
SELECT substring_index(marca, ' ', 1) AS companie, count(*) AS numar_masini
FROM tip_masina
GROUP BY companie
) b
ON a.companie = c.companie
通过这种方式,您可以使用一个子查询来获取所有可能的companie值的列表,并将其视为joi的一个表