MySQL:内连接查询和左外连接查询(案例)

1. 首先,我们先建立一张部门信息表

drop table if exists dept;

create table dept(
id int not null  primary key auto_increment,
d_name varchar(10) default null,
d_no varchar(10) default null,
d_desc varchar(10) default null
);

begin;
insert into dept values (1,'研发部','d001','软件研发');
insert into dept values (2,'项目管理部','d002','项目管理');
insert into dept values (3,'人事部','d003','人事管理');
commit;

2. 建立员工信息表

drop table if exists emp;

create table emp(
id int not null auto_increment primary key,
e_name varchar(10) default null,
sex varchar(2) default null,
e_no varchar(10) default null,
d_id int default null
);

begin;
insert into emp values(1,'王五','男','001',2);
insert into emp values(2,'张三','男','002',1);
insert into emp values(3,'李四','女','003',1);
insert into emp values(4,'Lucy','女','004',null);
insert into emp values(5,'老王','男','001',2);
commit;

3. 我们的目标是:查询id为1的部门及其所属的员工信息

select * from dept d 
INNER JOIN emp e on e.d_id = d.id 
where d.id = 1;

-- INNER JOIN更为常见的一种等价写法:
select * from dept d,emp e where d.id = e.d_id and d.id = 1; 

在inner join 查询中,多表之间没有字段值匹配,就不会显示结果集(无法构成笛卡尔积)
举例来说,部门id为3的部门暂时没有员工,这时如果我们要查询所有部门编号
大于2的部门及员工信息,部门编号为3的就无法显示,因此,这里引入了left join查询

-- inner join 查询部门编号为3的部门信息及对应员工信息
select * from dept d 
INNER JOIN emp e on e.d_id = d.id 
where d.id = 3;

-- left join 查询部门编号为3的部门信息及对应员工信息
select * from dept d 
left JOIN emp e on e.d_id = d.id 
where d.id = 3;

两者的结果分别如下图所示:

 

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值