a表left join b表 on a.id=b.id where a.status=1 and b.status=1,当表a或表b中有其中一个表不满足where条件时结果表是怎样的?都不满足时是怎样的?都满足时是怎样的?请举例说明并分别做对比
时间: 2023-08-05 13:03:34 浏览: 37
当表a或表b中有其中一个表不满足where条件时,left join会返回满足条件的那个表的记录和另一个表的空记录。如果都不满足时,返回的结果表中将不会有任何记录。
举个例子,假设有以下两个表:
```
Table A
id | name | status
----|------|-------
1 | Amy | 1
2 | Bob | 0
3 | Cate | 1
Table B
id | age | status
----|------|-------
1 | 20 | 1
2 | 25 | 1
4 | 30 | 0
```
执行以下SQL语句:
```
SELECT *
FROM A
LEFT JOIN B
ON A.id = B.id
WHERE A.status = 1
AND B.status = 1;
```
结果表是:
```
id | name | status | id | age | status
----|------|--------|-----|------|-------
1 | Amy | 1 | 1 | 20 | 1
3 | Cate | 1 | NULL| NULL | NULL
```
可以看到,因为表A中id为2的记录的status不满足条件,所以不会被返回,但是因为是left join,表B中id为2的记录仍然会被返回,但是age和status会是NULL。
如果都满足条件,比如执行以下SQL语句:
```
SELECT *
FROM A
LEFT JOIN B
ON A.id = B.id
WHERE A.status = 1
AND B.age > 20;
```
结果表是:
```
id | name | status | id | age | status
----|------|--------|-----|------|-------
1 | Amy | 1 | 1 | 20 | 1
```
可以看到,只有id为1的记录同时满足条件,所以只有这条记录被返回。