【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),我们将第一时间核实后及时予以删除。