一些SQL知识点

一些SQL知识点

数据

1
2
3
4
5
6
7
8
9
10
11
12
person
pid age name
1 11 小明
2 22 小红
3 33 小白

address
aid pid city
10 1 北京
11 1 东京
12 2 南京
13 4 西京

内连接

只有两张表都有数据才连接

1
2
3
4
5
6
select * from person inner join address on person.pid=address.pid

pid age name aid pid(1) city
1 11 小明 10 1 北京
1 11 小明 11 1 东京
2 22 小红 12 2 南京

左连接

左边的表的行都有,右边的没有就补null

1
2
3
4
5
6
7
select * from person left join address on person.pid=address.pid

pid age name aid pid(1) city
1 11 小明 10 1 北京
1 11 小明 11 1 东京
2 22 小红 12 2 南京
3 33 小白 null null null

右连接

右边的表的行都有,左边的没有就补null

1
2
3
4
5
6
7
select * from person right join address on person.pid=address.pid

pid age name aid pid(1) city
1 11 小明 10 1 北京
1 11 小明 11 1 东京
2 22 小红 12 2 南京
null null null 13 4 西京

全连接

左边和右边的表的行都有,没有就补null,不过貌似mysql不支持全连接,反正navicat报错

1
2
3
4
5
6
7
8
select * from person full join address on person.pid=address.pid

pid age name aid pid(1) city
1 11 小明 10 1 北京
1 11 小明 11 1 东京
2 22 小红 12 2 南京
3 33 小白 null null null
null null null 13 4 西京

NULL返回

如果某个sql语句返回的是Empty set,可以有两个办法当Empty set时返回NULL。一是用子sql包一下,二是使用ifnull语句。不过要注意select的只允许一列。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
select id from t where false;
Empty set

select (select id from t where false) as name;
+------+
| name |
+------+
| NULL |
+------+

select ifnull((select id from t where false),null) as name;
+------+
| name |
+------+
| NULL |
+------+


一些SQL知识点
https://cellargalaxy.github.io/posts/中间件/6.一些SQL知识点/
作者
cellargalaxy
发布于
2020年5月9日
许可协议