最近搜索

SQL多表查询 LEFT JOIN 左连接 RIGHT JOIN 右连接

浏览:666
管理员 2020-02-04 08:58

    LEFT JOIN 讲解



准备部门表dept表 和 部门支出表

image.png  image.png


创建表的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

image.png

从结果可以看出来,left join 这个是以左表为主,就是部门表为主。

某个部门没有支出的显示null ,

如果支出有多条记录就显示多条记录。 而不是一条。



left join 和 == 有什么区别  不建议使用==   因为== 速度非常慢。

SELECT * FROM `dept` a  ,`zhichu` b WHERE a.id = b.`deptId`

image.png

== 是没有显示多余的数据。




使用表.字段显示。


SELECT  *,b.num dd    FROM  `dept` a   LEFT JOIN  `zhichu` b  ON a.id = b.deptId

image.png






right join 的区别。

SELECT  * FROM  `dept` a   RIGHT JOIN  `zhichu` b  ON a.id = b.deptId


image.png


right join 可以看出来 是以右表为主了。部门表没有的显示null





联系站长

站长微信:xiaomao0055

站长QQ:14496453