MySQL中的內連線和外連線

2021-10-11 00:01:34 字數 3357 閱讀 8281

總結雖然開發中經常用到mysql,但是感覺很多關於mysql的相關知識仍然不太理解,比如mysql的內連線和外連線,我理解的連線,就是在進行多表查詢使用相關聯的條件將多表聯絡起來,並根據條件查詢各表中的和條件有關的全部內容或部分內容。

根據如下sql語句執行,準備兩張表beauty和boys:

create database /*!32312 if not exists*/`girls` /*!40100 default character set utf8 */;

use `girls`;

drop table if exists `beauty`;

create table `beauty` (

`id` int(11) not null auto_increment,

`name` varchar(50) not null,

`***` char(1) default '女',

`borndate` datetime default '1987-01-01 00:00:00',

`phone` varchar(11) not null,

`photo` blob,

`boyfriend_id` int(11) default null,

primary key (`id`)

) engine=innodb auto_increment=13 default charset=utf8;

/*data for the table `beauty` */

insert into `beauty`(`id`,`name`,`***`,`borndate`,`phone`,`photo`,`boyfriend_id`) values (1,'柳岩','女','1988-02-03 00:00:00','18209876577',null,8),(2,'蒼老師','女','1987-12-30 00:00:00','18219876577',null,9),(3,'angelababy','女','1989-02-03 00:00:00','18209876567',null,3),(4,'熱巴','女','1993-02-03 00:00:00','18209876579',null,2),(5,'周冬雨','女','1992-02-03 00:00:00','18209179577',null,9),(6,'周芷若','女','1988-02-03 00:00:00','18209876577',null,1),(7,'岳靈珊','女','1987-12-30 00:00:00','18219876577',null,9),(8,'小昭','女','1989-02-03 00:00:00','18209876567',null,1),(9,'雙兒','女','1993-02-03 00:00:00','18209876579',null,9),(10,'王語嫣','女','1992-02-03 00:00:00','18209179577',null,4),(11,'夏雪','女','1993-02-03 00:00:00','18209876579',null,9),(12,'趙敏','女','1992-02-03 00:00:00','18209179577',null,1);

/*table structure for table `boys` */

drop table if exists `boys`;

create table `boys` (

`id` int(11) not null auto_increment,

`boyname` varchar(20) default null,

`usercp` int(11) default null,

primary key (`id`)

) engine=innodb auto_increment=5 default charset=utf8;

/*data for the table `boys` */

insert into `boys`(`id`,`boyname`,`usercp`) values (1,'張無忌',100),(2,'鹿晗',800),(3,'黃曉明',50),(4,'段譽',300);

如果是在查詢兩個表的情況下,內連線相當於查詢兩個表的交集。

如下圖所示,內連線只查詢兩個表中相關的部分,其他不相關的部分不查詢。

按照上面的查詢,會查詢出如下結果:

外連線分為左外連線和右外連線,是乙個表作為主表的查詢,查詢時會將主表的所有資料都查詢出來,再根據連線條件,查詢出另一張表的一部分。

左邊是主表,表1 left join 表2 on 連線條件

左外連線:左表是主表,查詢所有左表的記錄,右表只查詢符合連線條件的部分,右表中不符合連線條件的部分顯示為空;

如下圖:

左外連線會查詢出所有的女生,包括沒有男朋友的女生,沒有男朋友的男朋友資訊為null

select * from beauty be left join boys bo on be.boyfriend_id = bo.id

按照上面的查詢,會查詢出如下結果:

右邊是主表,表1 right join 表2 on 連線條件

右外連線:右表是主表,查詢所有右表的記錄,左表只查詢符合連線條件的部分,其他為空,左表中不符合連線條件的 部分顯示為空;

如下圖:

按照上方的sql語句查詢,會查詢出所有的男生資訊,不會查詢出沒有男朋友的女生資訊,因此查詢出來的只是部分女生的資訊。

下面是查詢的結果:

根據這些查詢和一些思考,我大致理解了mysql的內連線和外連線,希望在以後的學習中,可以更好的理解和運用到這些知識。

mysql內連線和外連線

testa表 idname class1張三 a2李四b 3王五ctestb表 class ageb10c 20d30內連線實際上就是交集,顯示符合匹配條件的資料 select testa.testb.from testa inner join testb on test.class testb.c...

mysql中的內連線,外連線

內連線 只連線匹配的行 左外連線 包含左邊表的全部行 不管右邊的表中是否存在與它們匹配的行 以及右邊表中全部匹配的行 右外連線 包含右邊表的全部行 不管左邊的表中是否存在與它們匹配的行 以及左邊表中全部匹配的行 全外連線 包含左 右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。交叉連線 ...

Mysql表連線,內連線和外連線

當需要同時顯示多個表中的字段時,就可以用表連線來實現這樣的功能,從大類上來分,連線分為內連線和外連線 內連線僅選出需要連線表中相互匹配的記錄 外連線會選出連線表中不匹配的記錄 外連線分為左連線和右連線 左連線 包含所有左表中的記錄,甚至是右表中沒有和它匹配的記錄 右連線 包含所有右表中的記錄,甚至是...