关于mysql中join指令的相关使用

七种join指令

在这里插入图片描述
在这里插入图片描述

案例讲解

多表联合查询
sql语句

CREATE TABLE `tbl_dept` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`deptName` VARCHAR(30) DEFAULT NULL,
`locAdd` VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `tbl_emp` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(20) DEFAULT NULL,
`deptId` INT(11) DEFAULT NULL, 
PRIMARY KEY (`id`),
KEY `fk_dept_id` (`deptId`)
#CONSTRAINT `fk_dept_jid` FOREIGN KEY (`deptId`) REFERENCES `tbl_dept` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

INSERT INTO tbl_dept(deptName,locAdd) VALUES('RD',11);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('HR',12);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MK',13);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('MIS',14);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('FD',15);
INSERT INTO tbl_dept(deptName,locAdd) VALUES('BSR',250);

INSERT INTO tbl_emp(NAME ,deptId) VALUES('z3',1);
INSERT INTO tbl_emp(NAME,deptId) VALUES('z4',1);
INSERT INTO tbl_emp(NAME ,deptId) VALUES('z5',1);
INSERT INTO tbl_emp(NAME ,deptId) VALUES('w5',2);
INSERT INTO tbl_emp(NAME,deptId) VALUES('w6',2);
INSERT INTO tbl_emp(NAME,deptId) VALUES('s7',3);
INSERT INTO tbl_emp(NAME,deptId) VALUES('s8',4);
INSERT INTO tbl_emp(NAME,deptId) VALUES('s9',5 );
INSERT INTO tbl_emp(NAME,deptId) VALUES('wgk',999);

创建好表以后的数据
员工表
在这里插入图片描述
部门表
在这里插入图片描述

我们查询员工表和部门表对应的数据

查表语句:select * from tbl_emp a join tbl_dept b on a.deptid = b.id;
在这里插入图片描述

我们查询两个表中员工表的所有信息

select * from tbl_emp a left join tbl_dept b on a.deptid=b.id;
在这里插入图片描述

我们查询两个表中包含部门表的所有信息

部门表的所有信息
select * from tbl_emp a right join tbl_dept b on a.deptid=b.id;
在这里插入图片描述

我们查询部门表中没有员工的部门信息

select * from tbl_emp a right join tbl_dept b on a.deptid=b.id where a.deptid is null;
在这里插入图片描述

我们查询员工表中没有部门信息的员工信息

select * from tbl_emp a left join tbl_dept b on a.deptid=b.id where b.id is null;
在这里插入图片描述

查询两个表中所有的信息

select * from tbl_emp a full outer join tbl_dept b on a.deptid=b.id;
但是mysql不支持full outer 这个join
我们该改用
select * from tbl_emp a left join tbl_dept b on a.deptid=b.id
union
select * from tbl_emp a right join tbl_dept b on a.deptid=b.id;
在这里插入图片描述

我们查询两个表中员工信息为null和部门信息为null的信息

select * from tbl_emp a left join tbl_dept b on a.deptid=b.id where b.id is null
union
select * from tbl_emp a right join tbl_dept b on a.deptid=b.id where a.deptid is null;
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/l2470334493/article/details/108589393
今日推荐