MySQL 外連線和內連線小結

2021-09-29 17:34:16 字數 2660 閱讀 5885

為了便於通過例子理解外連線和內連線,我們先建立兩個表: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','吉林長春');

查詢得到得到下面倆個表:

先看左連線:

該表是左連線操作返回的表;我們可以看出,左連線查詢操作是將left 關鍵字左邊的表(這裡是user_info表,取別名了叫ui表)的資料為主要資料,將left 關鍵字右邊的表(這裡是address表,取別名叫addr表)作為補充資料以on 關鍵字後面的條件(這裡是:ui.id = addr.user_id)進行匹配並將匹配到的資料輸入到left 關鍵字左邊的表中與原有資料形成乙個新錶並返回輸出;

注意:左連線操作以left 關鍵字左邊的表為主表(可能叫法不對,這裡只為求便於理解),根據on 關鍵字後面的條件與left 關鍵字右邊的輔表(同理,便於理解)進行匹配時,主表中沒有匹配到輔表的資料則在返回的表中其輔表的列屬性均為null,輔表中沒有匹配到主表中的資料則被全部捨棄 (address表中第6行資料被捨棄);

明白左連線,右連線就簡單了;

而右連線剛好與左連線相反,右連線將right 關鍵字右邊的表作為主表,左邊的表作為輔表進行匹配,並將新錶輸出;同樣也是主表中沒有匹配到輔表的資料在返回的新錶中列屬性為null,輔表中沒有匹配到主表的資料則會被捨棄(user_info表的第三條資料被捨棄);

最後是內連線,更簡單了;

內連線在形式上可以看做是外連線中的左、右連線的綜合,跟數學集合的交集很接近;

它是將inner 關鍵字兩邊的表進行匹配,只取匹配到的資料形成新錶進行返回,其他的資料均捨棄。

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 外連線和內連線分析

表1 test user 表2 一 left join 2 select from test user a left join test order b on a.name b.namewhere a.name 張三 3 select from test user a left join test ...