MYSQL中连接查询中左连接left join、右连接 right join、内连接 inner join的区别

前言:

今天有时间、就记录一下这几个关键字的用法。

一、left join 左连接。连接查询时候 保持左表完整

//A表的记录完整 也就是说除了符合连接条件的数据外 A表的其他数据也会出现在结果集当中

A left join B  on  A.xxx = B.xxx 

二、right join 左连接。连接查询时候 保持右表完整

//B表的记录完整 也就是说除了符合连接条件的数据外 B表的其他数据也会出现在结果集当中


A right join B  on  A.xxx = B.xxx 

三、inner join 内连接查询 ,只有符合条件的数据 会出现在结果集

// 只会出现符合条件的 数据


A innerjoin B  on  A.xxx = B.xxx 

进行测试

创建两张表student class ,并插入数据

## 学生表
CREATE TABLE `student` (
  `sid` int(11) NOT NULL,
  `sname` varchar(255) NOT NULL,
  `cid` int(11) DEFAULT NULL,
  PRIMARY KEY (`sid`),
  KEY `cid` (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `student` VALUES ('1', 'dd', '2');
INSERT INTO `student` VALUES ('2', 'cc', '1');
INSERT INTO `student` VALUES ('3', 'bb', '2');
INSERT INTO `student` VALUES ('4', 'aa', null);

## 班级表
CREATE TABLE `class` (
  `classid` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  PRIMARY KEY (`classid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `class` VALUES ('1', '一班');
INSERT INTO `class` VALUES ('2', '二班');
INSERT INTO `class` VALUES ('3', '三班');
INSERT INTO `class` VALUES ('4', '四班');
INSERT INTO `class` VALUES ('5', '五班');
1.左连接 left join
SELECT * FROM class left join student ON classid  = cid;

结果如下:
在这里插入图片描述
结果集显示 class 这个表的数据保持完整 ,不满足连接条件 classid = cid的数据也被查询出来了。

2.右连接 right join
SELECT * FROM class right join student ON classid  = cid;

结果如下:
在这里插入图片描述
可以看到 右表数据保持完整 不满足连接条件 classid = cid的右表数据被查出来了

3.内连接 inner join
SELECT * FROM class inner join student ON classid  = cid;

结果如下:
在这里插入图片描述
可以看到 只会出现符合条件的数据。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是Mysql数据库左连接left join右连接right join内连接inner join的介绍和演示: 1. 左连接left join 左连接left join会返回左表所有的记录,以及右表符合条件的记录。如果右表没有符合条件的记录,则返回NULL。 语法: ``` SELECT * FROM a_table LEFT JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个表,一个是学生表students,一个是成绩表scores。学生表有学生的ID和姓名,成绩表有学生的ID和成绩。我们需要查询所有学生的姓名和成绩,如果学生没有成绩,则成绩为NULL。 ```sql SELECT students.name, scores.score FROM students LEFT JOIN scores ON students.id = scores.id; ``` 2. 右连接right join 右连接right join会返回右表所有的记录,以及左表符合条件的记录。如果左表没有符合条件的记录,则返回NULL。 语法: ``` SELECT * FROM a_table RIGHT JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个表,一个是学生表students,一个是成绩表scores。学生表有学生的ID和姓名,成绩表有学生的ID和成绩。我们需要查询所有成绩和对应的学生姓名,如果成绩表没有对应的学生,则姓名为NULL。 ```sql SELECT students.name, scores.score FROM students RIGHT JOIN scores ON students.id = scores.id; ``` 3. 内连接inner join 内连接inner join会返回左右表都符合条件的记录。 语法: ``` SELECT * FROM a_table INNER JOIN b_table ON a_table.key = b_table.key; ``` 示例: 假设有两个表,一个是学生表students,一个是成绩表scores。学生表有学生的ID和姓名,成绩表有学生的ID和成绩。我们需要查询所有有成绩的学生的姓名和成绩。 ```sql SELECT students.name, scores.score FROM students INNER JOIN scores ON students.id = scores.id; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值