为了便于通过例子理解外连接和内连接,我们先创建两个表:user_info 和 address 表,再分别向其中添加几条数据;

#user_info表
create table user_info(
      id int(2) primary key,
      user_name varchar(12) unique,
      password varchar(15) not null,
      real_name varchar(8) not null,
      age int(3)
); 

#address表
create table address(
      id int(2) primary key,
      user_id int(2) not null,
      real_name varchar(8),
      mobile char(11),
      address varchar(150)
); 


insert into user_info values(1,'浅唱灬幸福','8912@321','王晓明',12);
insert into address values(1,1,'王小明','15516472282','山西太原');
insert into address values(2,1,'王鑫','18404905139','山西大同');
insert into address values(3,1,'任建','15333021730','山西晋城');
 
insert into user_info values(2,'ぅ浮生若梦〤','56701wz','王楠',36);
insert into address values(4,2,'王楠','15010303314','北京海淀');
insert into address values(5,2,'赵婕','18435224278','山西长治');
 
insert into user_info values(3,'街角の风铃','27w4921','李晓飞',9);

insert into address values(6,6,'刘倩','13159775555','吉林长春');

查询得到得到下面俩个表:

mysql join 外部数据 mysql外连接和内连接_mysql join 外部数据

 (address表) 

mysql join 外部数据 mysql外连接和内连接_外连接_02

(user_info表)

外连接(左连接、右连接)

先看左连接:

select ui.*,addr.*  from user_info ui left join address addr on ui.id = addr.user_id

mysql join 外部数据 mysql外连接和内连接_右连接_03

该表是左连接操作返回的表;我们可以看出,左连接查询操作是将 left 关键字 左边的表(这里是user_info表,取别名了叫ui表)的数据为主要数据,将 left 关键字 右边的表(这里是address表,取别名叫addr表)作为补充数据以 on 关键字 后面的条件(这里是:ui.id = addr.user_id)进行匹配并将匹配到的数据输入到 left 关键字

注意:左连接操作以 left 关键字 左边的表为主表(可能叫法不对,这里只为求便于理解),根据 on 关键字 后面的条件与  left 关键字 右边的辅表(同理,便于理解)进行匹配时,主表中没有匹配到辅表的数据则在返回的表中其辅表的列属性均为null,辅表中没有匹配到主表中的数据则被全部舍弃 (address表中第6行数据被舍弃);

明白左连接,右连接就简单了;

select ui.*,addr.*  from user_info ui right join address addr on ui.id = addr.user_id

mysql join 外部数据 mysql外连接和内连接_右连接_04

而右连接刚好与左连接相反,右连接将 right 关键字

最后是内连接,更简单了;

select ui.*,addr.*  from user_info ui inner join address addr on ui.id = addr.user_id

mysql join 外部数据 mysql外连接和内连接_右连接_05

内连接在形式上可以看做是外连接中的左、右连接的综合,跟数学集合的交集很接近;

它是将 inner 关键字