左连接右连接和内连接的详解及区别,右连接和内连接

MYSQL
左连接右连接和内连接的区分
,这里就对那一个概念经过三个实例,讲授清楚。

本子如下:
drop table table1;
CREATE TABLE `andrew`.`table1`
(
`name` VARCHAR(32) NOT NULL,
`city` VARCHAR(32) NOT NULL
)
ENGINE = MyISAM;
insert into TABLE1(name, city) values (‘Person A’, ‘BJ’);
insert into TABLE1(name, city) values (‘Person B’, ‘BJ’);
insert into TABLE1(name, city) values (‘Person C’, ‘SH’);
insert into TABLE1(name, city) values (‘Person D’, ‘SZ’);
commit;
drop table table2;
CREATE TABLE `andrew`.`金沙网址,table2`
(
`name` VARCHAR(32) NOT NULL,
`city` VARCHAR(32) NOT NULL
)
ENGINE = MyISAM;
insert into TABLE2(name, city) values (‘Person W’, ‘BJ’);
insert into TABLE2(name, city) values (‘Person X’, ‘SH’);
insert into TABLE2(name, city) values (‘Person Y’, ‘SH’);
insert into TABLE2(name, city) values (‘Person Z’, ‘NJ’);
commit;

代码如下:

  1. 外连接 – 左连接结果
drop table table1;CREATE TABLE `andrew`.`table1`(`name` VARCHAR(32) NOT NULL,`city` VARCHAR(32) NOT NULL)ENGINE = MyISAM;insert into TABLE1(name, city) values ('Person A', 'BJ');insert into TABLE1(name, city) values ('Person B', 'BJ');insert into TABLE1(name, city) values ('Person C', 'SH');insert into TABLE1(name, city) values ('Person D', 'SZ');commit;drop table table2;CREATE TABLE `andrew`.`table2`(`name` VARCHAR(32) NOT NULL,`city` VARCHAR(32) NOT NULL)ENGINE = MyISAM;insert into TABLE2(name, city) values ('Person W', 'BJ');insert into TABLE2(name, city) values ('Person X', 'SH');insert into TABLE2(name, city) values ('Person Y', 'SH');insert into TABLE2(name, city) values ('Person Z', 'NJ');commit;

table1居左,故谓之左连接。这种场所下,以table1为主,即table1中的全数记录均会被列出。有须臾间三种情状:
a.
对于table1中的每一条记下对应的城墙要是在table第22中学也刚巧存在何况赶巧独有一条,那么就能够在
回到的结果中造成一条新的记录。如上边Person A和Person B对应的情状。
b.
对于table1中的每一条记下对应的都市若是在table2中也正巧存在何况有N条,那么就能够在回到的结果中产生N条新的记录。如上面的Person
C对应的图景。
c.
对于table1中的每一条记下对应的都会假若在table2中海市蜃楼,那么就能够在回去的结果中形成一条
条新的记录,且该记录的左侧全部NULL。如上面的Person D对应的动静。
不相符地方三条准绳的笔录不会被列出。

1. 外接连 – 左连接结果

  1. 外连接 – 右连接结果

table1居左,故谓之左连接。这种情状下,以table1为主,即table1中的全部记录均会被列出。有须臾间二种情景:

table2居右,故谓之右连接。这种气象下,以table2为主,即table第22中学的全数记录均会被列出。有弹指间三种情状:
a.
对于table第22中学的每一条记下对应的城市假如在table1中也刚刚存在而且适逢其时独有一条,那么就能够在
回去的结果中产生一条新的笔录。如上边Person X和Person Y对应的景色。
b.
对于table第22中学的每一条记下对应的城邑假诺在table1中也适逢其时存在而且有N条,那么就能在重回的结果中形成N条新的笔录。如下边包车型大巴Person
W对应的状态。
c.
对于table2中的每一条记下对应的都市假诺在table1中不设有,那么就能够在重临的结果中造成一条
条新的记录,且该记录的侧边全体NULL。如下边包车型客车Person Z对应的情事。
不合乎地方三条准绳的记录不会被列出。

a.
对于table1中的每一条记下对应的都会假设在table第22中学也适逢其会存在何况恰巧独有一条,那么就能够在

  1. 内连接

归来的结果中形成一条新的记录。如下边Person A和Person B对应的情事。

内接连的数码记录中,不会存在字段为NULL的动静。能够省略地感到,内链接的结果便是在左连接或然右连接的结果中去除存在字段为NULL的笔录后所拿走的结果。以致能够感觉,假诺几个表中仅分别剩下内接连续运输算后所得的数目记录,如table1中独有Person
A、Person B和Person C,table第22中学唯有Person W、Person X和Person
Y,那么那多少个表的之间的左连接和右连接的归来的结果是平等的。
注意:select * from table1 a inner join table2 b on a.city = b.city
和select * from table1 a join table2 b on a.city = b.city
的功能是同样的,即只要join的右边手未有诸如left、right或然inner那样的根本字时,缺省的是内接连。另,MySQL不扶持full
join。

b.
对于table1中的每一条记下对应的城市假如在table2中也恰巧存在并且有N条,那么就能够在回去的结果中变成N条新的笔录。如上边的Person
C对应的意况。

c.
对于table1中的每一条记下对应的城市倘若在table第22中学不设有,那么就能够在回来的结果中产生一条

条新的笔录,且该记录的动手全体NULL。如下面的Person D对应的情状。

不相符地点三条法规的记录不会被列出。

2. 外接连 – 右连接结果

table2居右,故谓之右连接。这种景况下,以table2为主,即table第22中学的全数记录均会被列出。有弹指间三种状态:

a.
对于table第22中学的每一条记下对应的城郭固然在table1中也恰恰存在何况恰恰只有一条,那么就能在

回来的结果中产生一条新的记录。如上边Person X和Person Y对应的图景。

b.
对于table第22中学的每一条记下对应的都会借使在table1中也刚刚存在何况有N条,那么就能够在回到的结果中产生N条新的记录。如上边的Person
W对应的境况。

c.
对于table第22中学的每一条记下对应的都会假使在table1中子虚乌有,那么就能够在回去的结果中产生一条

条新的记录,且该记录的左侧全体NULL。如上边的Person Z对应的事态。

不相符地点三条法规的笔录不会被列出。

3. 内连接

内连接的数量记录中,不会存在字段为NULL的情状。能够简轻便单地感到,内链接的结果就是在左连接或许右连接的结果中剔除存在字段为NULL的笔录后所赢得的结果。以至能够以为,尽管七个表中仅分别剩下内连接运算后所得的数据记录,如table1中独有Person
A、Person B和Person C,table第22中学独有Person W、Person X和Person
Y,那么那多个表的之间的左连接和右连接的回来的结果是均等的。

注意:select * from table1 a inner join table2 b on a.city = b.city
和select * from table1 a join table2 b on a.city = b.city
的效果是风流罗曼蒂克致的,即只要join的侧面未有诸如left、right只怕inner那样的最重要字时,缺省的是内连接。另,MySQL不扶持full
join。

感谢阅读,希望能支援到大家,感激我们对本站的支持!

发表评论

电子邮件地址不会被公开。 必填项已用*标注