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的一个表