数据库的几种连表方式详解

数据库主要有五种连表方式

首先需要准备两张表:

 

图书表 book

id    name    price    publish_id
1 西游记  33 1
2 红楼梦 56 1
3 三国演义 66 2
4 西厢记 55 6

 

 

 

 

 

出版社表 publish

id    name      addr
1 北京出版社 北京
2 南京出版社  南京
3 东京出版社 东京

 

 

 

 

 

1.左连接(Left Join)

从左表取出所有记录,与右表匹配。如果没有匹配,以null值代表右边表的列

 

SQL代码示例:

select * from book left join publish on book.publish_id=publish.id;

 

效果如下:

id    name    price    publish_id id  name    addr
1 西游记  33 1 1 北京出版社 北京
2 红楼梦 56 1 2 南京出版社 南京
3 三国演义 66 2 3 东京出版社 东京
4 西厢记 55 6 null null null

 

 

 

 

2.右连接(Right Join)

从右表取出所有记录,与左表匹配。如果没有匹配,以null值代表左边表的列

 

SQL代码示例:

select * from book right join publish on book.publish_id=publish.id;

 

效果如下:

id    name    price    publish_id id  name    addr
1 西游记  33 1 1 北京出版社 北京
2 红楼梦 56 1 1 北京出版社 北京
3 三国演义 66 2 2 南京出版社 南京
null null null null 3 东京出版社 东京

 

 

 

 

 

3.内连接(Inner Join)

得出同时存在book表和publish表的数据集,就是求两个表的交集

 

SQL代码示例:

 

select * from book inner join publish on book.publish_id=publish.id;

 

效果如下:

id    name    price    publish_id id  name    addr
1 西游记  33 1 1 北京出版社 北京
2 红楼梦 56 1 1 北京出版社 北京
3 三国演义 66 2 2 南京出版社 南京

 

 

 

 

 

4.全连接(Full Join)

利用左连接,右连接分两次将数据取出,然后用union将数据合并去重

 

SQL代码示例:

select * from book left join publish on book.publish_id=publish.id
union
select * from book right join publish on book.publish_id=publish.id;

 

效果如下:

id    name    price    publish_id id  name    addr
1 西游记  33 1 1 北京出版社 北京
2 红楼梦 56 1 1 北京出版社 北京
3 三国演义 66 2 2 南京出版社 南京
4 西厢记 55 6 null null null
null null null null 3 东京出版社 东京

 

 

 

 

 

 

5.交叉连接(笛卡尔积)

返回两个表的笛卡尔乘积,作用就是计算两个表之间每个可能的组合,结果集中的记录数等于两张表各自记录数的乘积

 

SQL代码示例:

select * from book,publish

 

效果如下:

id    name    price    publish_id id  name    addr
1 西游记  33 1 1 北京出版社 北京
1 西游记 33 1 2 南京出版社 南京
1 西游记 33 1 3 东京出版社 东京
2 红楼梦 56 1 1 北京出版社 北京
2 红楼梦 56 1 2 东京出版社 东京
2 红楼梦 56 1 3 东京出版社 东京
3 三国演义 66 2 1 北京出版社 北京
3 三国演义 66 2 2 南京出版社 南京
3 三国演义 66 2 3 东京出版社 东京
4 西厢记 55 6 1 北京出版社 北京
4 西厢记 55 6 2 南京出版社 南京
4 西厢记 55 6 3 东京出版社 东京

 

 

添加过滤条件,实现内连接:

select * from book,publish where book.publish_id=publish.id;
posted @ 2023-12-05 15:01  wellplayed  阅读(166)  评论(0编辑  收藏  举报