爲了使查詢結果便於分析,可以用Join關鍵字將2張或以上數量的數據表連接起來。簡單來說,即是根據應用的需要,抽取多張表的字段,顯示在同一個數據集合裏面,使得結果更加直觀易懂。比如數據庫中存在兩張關聯的表,tbPerson顧客表和tbOrder訂單表,訂單表裏保存了顧客的id,通過id可以對應到顧客的信息,爲了在一個查詢結果裏面同時顯示顧客信息和其對應的訂單信息,就可以考慮用Join關鍵字。
一、數據準備
創建Person表並初始化數據
create table tbPerson(
`Id_P` int unsigned not null auto_increment,
`Name` varchar(20) default 'lala',
`Sex` varchar(10) default 'male',
`Age` int unsigned,
primary key(`Id_P`)
);
insert into tbPerson values(null, 'zhangsan', 'male', 21);
insert into tbPerson values(null, 'lisi', 'male', 23);
insert into tbPerson values(null, 'wangwu', 'male', 24);
insert into tbPerson values(null, 'zhaoliu', 'male', 25);
insert into tbPerson values(null, 'yangzq', 'female', 26);
insert into tbPerson values(null, 'chenxb', 'female', 27);
創建訂單表並初始化數據
create table tbOrder(
`Id_O` int unsigned not null auto_increment,
`OrderNo` int unsigned not null,
`Id_P` int unsigned not null,
primary key(`Id_O`)
);
insert into tbOrder values(null, 10000, 1);
insert into tbOrder values(null, 10001, 2);
insert into tbOrder values(null, 10002, 3);
insert into tbOrder values(null, 10003, 4);
insert into tbOrder values(null, 10004, 5);
insert into tbOrder values(null, 10005, 9);
數據庫初始化結果如下:
二、Join
爲了便於觀察顧客與其訂單信息,這裏可以利用多表查詢的方法,也可以用Join的方法
三、inner/left/right/full join
- inner join等同於join
- left join會返回左表中所有的行,即使在右表中沒有匹配的行(右表無匹配時字段內容爲空)
- right join與left join類似
- full join會返回左右兩表中所有的行,不論是否左右匹配(在MySQL中不支持)
select tbperson.name,tbperson.age,tborder.orderNo
from tbperson
inner join tborder
on tbperson.id_p=tborder.id_p;
select tbperson.name,tbperson.age,tborder.orderNo
from tbperson
left join tborder
on tbperson.id_p=tborder.id_p;
select tbperson.name,tbperson.age,tborder.orderNo
from tbperson
right join tborder
on tbperson.id_p=tborder.id_p;
select tbperson.name,tbperson.age,tborder.orderNo
from tbperson
full join tborder
on tbperson.id_p=tborder.id_p;