准备部门表dept表 和 部门支出表
创建表的sql:
CREATE TABLE `dept` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; insert into `dept`(`id`,`name`) values (1,'1111部'),(2,'2222部'),(3,'3333部'),(4,'444部'),(5,'555部'),(6,'666部'),(8,'888部'); CREATE TABLE `zhichu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `deptId` int(11) DEFAULT NULL, `num` varchar(50) DEFAULT NULL, `date` date DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; insert into `zhichu`(`id`,`deptId`,`num`,`date`) values (6,1,'111','2022-09-28'),(7,1,'22','2022-09-29'),(8,2,'333','2022-09-28'),(9,9,'666','2022-09-29'),(10,1,'2','2022-09-28');
演示 left join
SELECT * FROM `dept` a LEFT JOIN `zhichu` b ON a.id = b.deptId SELECT *,b.num FROM `dept` a LEFT JOIN `zhichu` b ON a.id = b.deptId
从结果可以看出来,left join 这个是以左表为主,就是部门表为主。
某个部门没有支出的显示null ,
如果支出有多条记录就显示多条记录。 而不是一条。
left join 和 == 有什么区别 不建议使用== 因为== 速度非常慢。
SELECT * FROM `dept` a ,`zhichu` b WHERE a.id = b.`deptId`
== 是没有显示多余的数据。
SELECT *,b.num dd FROM `dept` a LEFT JOIN `zhichu` b ON a.id = b.deptId
SELECT * FROM `dept` a RIGHT JOIN `zhichu` b ON a.id = b.deptId
right join 可以看出来 是以右表为主了。部门表没有的显示null
站长微信:xiaomao0055
站长QQ:14496453