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 | 农行卡 | +------+------+--------+------+--------+
内连查询就是俩张表中的数据,通过某个字段相等,查询出相关记录数据。
扫描二维码关注公众号,回复:
10775051 查看本文章
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 | 邮政卡 | +------+------+--------+------+--------+