为了使查询结果便于分析,可以用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;