当前位置: 首页 >数据库 > 【12】连接查询:内连接、左连接、右连接

【12】连接查询:内连接、左连接、右连接

1、四种连接查询

内连接:inner join 或者 join

外连接:

左连接:left join 或者 left outer join

右连接:right join 或者 right outer join

完全外连接:full join 或者 full outer join

2、创建两个表:person表和card表

mysql> create table person(-> id int,-> name varchar(20),-> cardId int-> );
mysql> create table card(-> id int,-> name varchar(20)-> );

插入数据:

INSERT INTO card VALUES(1,'饭卡');INSERT INTO card VALUES(2,'建行卡');INSERT INTO card VALUES(3,'农行卡');INSERT INTO card VALUES(4,'工商卡');INSERT INTO card VALUES(5,'邮政卡');
INSERT INTO person VALUES(1,'张三',1);INSERT INTO person VALUES(2,'李四',3);INSERT INTO person VALUES(3,'王五',6);
mysql> select * from card;+------+--------+| id| name|+------+--------+|1 | 饭卡||2 | 建行卡 ||3 | 农行卡 ||4 | 工商卡 ||5 | 邮政卡 |+------+--------+
mysql> select * from person;+------+------+--------+| id| name | cardId |+------+------+--------+|1 | 张三 |  1 ||2 | 李四 |  3 ||3 | 王五 |  6 |+------+------+--------+

两个表中并没有创建外键。

3、inner join查询(内连接):(交集)

mysql> select * from person inner join card on person.cardId=card.id;+------+------+--------+------+--------+| id| name | cardId | id| name|+------+------+--------+------+--------+|1 | 张三 |  1 |1 | 饭卡||2 | 李四 |  3 |3 | 农行卡 |+------+------+--------+------+--------+

内连查询就是俩张表中的数据,通过某个字段相等,查询出相关记录数据。

4、left (outer) join(左外连接):

mysql> select * from person left join card on person.cardId=card.id;+------+------+--------+------+--------+| id| name | cardId | id| name|+------+------+--------+------+--------+|1 | 张三 |  1 |1 | 饭卡||2 | 李四 |  3 |3 | 农行卡 ||3 | 王五 |  6 | NULL | NULL|+------+------+--------+------+--------+

左外连接,会把左边表里面的所有数据取出来,而右边表中的数据,如果有相等的就显示出来,如果没有,就会补NULL。

5、right (outer) join(右外连接):

mysql> select * from person right join card on person.cardId=card.id;+------+------+--------+------+--------+| id| name | cardId | id| name|+------+------+--------+------+--------+|1 | 张三 |  1 |1 | 饭卡||2 | 李四 |  3 |3 | 农行卡 || NULL | NULL |NULL |2 | 建行卡 || NULL | NULL |NULL |4 | 工商卡 || NULL | NULL |NULL |5 | 邮政卡 |+------+------+--------+------+--------+

右外连接,会把右边表里面的所有数据取出来,而左边表中的数据,如果有相等的就显示出来,如果没有,就会补NULL。

6、full join(全外连接):

mysql> select * from person full join card on person.cardId=card.id;ERROR 1054 (42S22): Unknown column 'person.cardId' in 'on clause'

mysql不支持full join,实际上全外连接就是取两个表的并集:

mysql> select * from person left join card on person.cardId=card.id-> union-> select * from person right join card on person.cardId=card.id;+------+------+--------+------+--------+| id| name | cardId | id| name|+------+------+--------+------+--------+|1 | 张三 |  1 |1 | 饭卡||2 | 李四 |  3 |3 | 农行卡 ||3 | 王五 |  6 | NULL | NULL|| NULL | NULL |NULL |2 | 建行卡 || NULL | NULL |NULL |4 | 工商卡 || NULL | NULL |NULL |5 | 邮政卡 |+------+------+--------+------+--------+

 

作者:闪亮可可仙
来源链接:https://www.cnblogs.com/direwolf22/p/12695648.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaclub.cn/database/117775.html

分享给朋友:

“【12】连接查询:内连接、左连接、右连接” 的相关文章

MySQL数据库(基础) 2022年05月16日 21:54:19
Linux安装MySQL(超详细) 2022年05月16日 21:54:54
mysql 查询或 2022年06月07日 13:56:22
mysql查询最后一条记录 2022年06月08日 19:25:45
mysql查询给某个字段赋值 2022年06月10日 21:43:53
mysql 查询所有下级 2022年06月12日 13:42:12
mysql查询重复的 2022年06月12日 13:49:33