SQL,INNER JOIN 与 LEFT JOIN 之间的区别。

本文介绍了SQL中的三种联接类型——LEFTJOIN、RIGHTJOIN和INNERJOIN,分别展示了它们在查询时如何处理左右表的数据。LEFTJOIN返回左表的所有记录及匹配的右表记录,RIGHTJOIN反之,INNERJOIN只返回两表中联接字段相等的记录。通过具体的查询示例和表数据,清晰地阐述了三者之间的区别。

一、SQL的LEFT JOIN、RIGHT JOIN、INNER JOIN 之间的区别

  LEFT JOIN(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 
  
       RIGHT JOIN(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
  
       INNER JOIN(等值连接) 只返回两个表中联结字段相等的行


1、使用 LEFT JOIN 进行表直接关联,查询出来的数据如图一所示:

SELECT
	u.id,
	u.`name`,
	u.age,
	u.create_date,
	u2.name AS name2,
	u2.age AS age2
	
FROM `user` u
LEFT JOIN user2 u2 ON u2.id = u.id
WHERE
	u.is_deleted = 'n'
;

 图一


 

2、使用 RIGHT JOIN 进行表直接关联,查询出来的数据如图二所示:

SELECT
	u.id,
	u.`name`,
	u.age,
	u.create_date,
	u2.name AS name2,
	u2.age AS age2
	
FROM `user` u
RIGHT JOIN user2 u2 ON u2.id = u.id
WHERE
	u.is_deleted = 'n'
;

 图二

3、使用 INNER JOIN 进行表直接关联,查询出来的数据如图三所示:

SELECT
	u.id,
	u.`name`,
	u.age,
	u.create_date,
	u2.name AS name2,
	u2.age AS age2
	
FROM `user` u
INNER JOIN user2 u2 ON u2.id = u.id
WHERE
	u.is_deleted = 'n'
;

 图三

使用的基础数据库表、表数据如下所示:

-- 用户表
CREATE TABLE user (
  id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID, 主键.',
  is_deleted varchar(4) DEFAULT NULL COMMENT '是否删除, n否,y是.',
  name varchar(100) DEFAULT NULL COMMENT '姓名',
  age int(3) DEFAULT NULL COMMENT '年龄',
  create_date datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1019 DEFAULT CHARSET=utf8mb4 COMMENT='用户表';


-- 用户表2
CREATE TABLE user2 (
  id bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID, 主键.',
  name varchar(100) DEFAULT NULL COMMENT '姓名',
  age int(3) DEFAULT NULL COMMENT '年龄',
  create_date datetime DEFAULT NULL COMMENT '创建时间',
  many_name varchar(200) DEFAULT NULL COMMENT '多个姓名',
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COMMENT='用户表2';



INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (1, 'n', '张三三', 28, '2020-04-02 09:54:23');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (2, 'n', '硫萄萄糖', 27, '2020-01-05 11:20:00');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (4, 'n', '李四', 25, '2019-10-22 16:27:03');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (5, 'n', '刘涛', 22, '2020-04-06 08:07:30');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (6, 'n', '张曼玉', 18, '2020-04-09 17:21:45');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (7, 'n', '刘德华', 33, '2020-03-18 17:22:07');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (8, 'n', '刘备', 23, '2020-03-17 17:22:34');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (1001, 'n', '王小二', 18, '2020-04-06 08:07:30');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (1005, 'y', '王小二', 18, '2021-06-06 15:14:10');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (1006, 'n', 'admin', 20, '2020-02-20 16:12:45');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (1017, 'y', '狗狗33', 2, '2023-01-31 17:19:48');
INSERT INTO user(id, is_deleted, name, age, create_date) VALUES (1018, NULL, '张三66', 5, '2023-01-31 17:19:08');



INSERT INTO user2(id, name, age, create_date, many_name) VALUES (1, '张三', 20, '2020-04-02 09:54:23', '李桃,二狗,王大锤');
INSERT INTO user2(id, name, age, create_date, many_name) VALUES (2, '张三', 20, '2020-01-05 11:20:00', '张三丰,宋曼玉');
INSERT INTO user2(id, name, age, create_date, many_name) VALUES (4, '李四', 25, '2019-10-22 16:27:03', '李四,袁冲,李雪玲');
INSERT INTO user2(id, name, age, create_date, many_name) VALUES (5, '刘涛', 22, '2020-04-06 08:07:30', '二狗,章子怡');
INSERT INTO user2(id, name, age, create_date, many_name) VALUES (6, '张曼玉', 18, '2020-04-09 17:21:45', '李二狗,王小二,李四');



参考文章:  INNER JOIN 与 LEFT JOIN 之间的区别                   

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值