left join 和count
时间: 2023-06-30 17:26:09 浏览: 114
MySQL:Left Join 避坑指南.docx
`LEFT JOIN` 是一种 SQL 关联查询的语法,它可以将两个或多个表中的数据关联起来。关联查询中,有时需要统计某个表中的数据行数,可以使用 `COUNT` 函数进行计数。
下面是一个 `LEFT JOIN` 和 `COUNT` 函数的例子:
假设有两个表 `table1` 和 `table2`,它们的结构如下:
```
table1
+----+-------+
| id | name |
+----+-------+
| 1 | Alice |
| 2 | Bob |
| 3 | Carol |
+----+-------+
table2
+----+--------+
| id | status |
+----+--------+
| 1 | active |
| 2 | inactive |
+----+--------+
```
现在想要查询 `table1` 表中每个人的状态,包括那些没有状态的人。可以使用 `LEFT JOIN` 语法如下:
```
SELECT table1.name, table2.status
FROM table1
LEFT JOIN table2
ON table1.id = table2.id;
```
这条 SQL 语句会返回以下结果:
```
+-------+----------+
| name | status |
+-------+----------+
| Alice | active |
| Bob | inactive |
| Carol | NULL |
+-------+----------+
```
可以看到,`LEFT JOIN` 连接了 `table1` 和 `table2`,同时返回了 `table1` 中所有的行,即使在 `table2` 中没有匹配的行。对于 `Carol` 这个人,因为在 `table2` 中没有匹配的行,所以 `status` 返回了 `NULL`。
如果想要统计每个状态的人数,可以使用 `COUNT` 函数。例如,想要统计 `status` 为 `active` 的人数,可以使用以下 SQL 语句:
```
SELECT COUNT(table1.name)
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
WHERE table2.status = 'active';
```
这条 SQL 语句会返回 `status` 为 `active` 的人数,即 `1`。注意,这里使用了 `COUNT` 函数统计的是 `table1.name` 列的行数,即 `table1` 表中每个人的名字。同时,在 `WHERE` 子句中限定了条件 `table2.status = 'active'`,筛选出 `status` 为 `active` 的行。
阅读全文