MySQL中的内连接和外连接


虽然开发中经常用到MySQL,但是感觉很多关于MySQL的相关知识仍然不太理解,比如MySQL的内连接和外连接,我理解的连接,就是在进行多表查询使用相关联的条件将多表联系起来,并根据条件查询各表中的和条件有关的全部内容或部分内容。

准备工作

根据如下sql语句执行,准备两张表beauty和boys:

CREATE DATABASE /*!32312 IF NOT EXISTS*/`girls` /*!40100 DEFAULT CHARACTER SET utf8 */;

USE `girls`;

DROP TABLE IF EXISTS `beauty`;

CREATE TABLE `beauty` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL,
  `sex` char(1) DEFAULT '女',
  `borndate` datetime DEFAULT '1987-01-01 00:00:00',
  `phone` varchar(11) NOT NULL,
  `photo` blob,
  `boyfriend_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

/*Data for the table `beauty` */

insert  into `beauty`(`id`,`name`,`sex`,`borndate`,`phone`,`photo`,`boyfriend_id`) values (1,'柳岩','女','1988-02-03 00:00:00','18209876577',NULL,8),(2,'苍老师','女','1987-12-30 00:00:00','18219876577',NULL,9),(3,'Angelababy','女','1989-02-03 00:00:00','18209876567',NULL,3),(4,'热巴','女','1993-02-03 00:00:00','18209876579',NULL,2),(5,'周冬雨','女','1992-02-03 00:00:00','18209179577',NULL,9),(6,'周芷若','女','1988-02-03 00:00:00','18209876577',NULL,1),(7,'岳灵珊','女','1987-12-30 00:00:00','18219876577',NULL,9),(8,'小昭','女','1989-02-03 00:00:00','18209876567',NULL,1),(9,'双儿','女','1993-02-03 00:00:00','18209876579',NULL,9),(10,'王语嫣','女','1992-02-03 00:00:00','18209179577',NULL,4),(11,'夏雪','女','1993-02-03 00:00:00','18209876579',NULL,9),(12,'赵敏','女','1992-02-03 00:00:00','18209179577',NULL,1);

/*Table structure for table `boys` */

DROP TABLE IF EXISTS `boys`;

CREATE TABLE `boys` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `boyName` varchar(20) DEFAULT NULL,
  `userCP` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

/*Data for the table `boys` */

insert  into `boys`(`id`,`boyName`,`userCP`) values (1,'张无忌',100),(2,'鹿晗',800),(3,'黄晓明',50),(4,'段誉',300);

内连接

如果是在查询两个表的情况下,内连接相当于查询两个表的交集。
如下图所示,内连接只查询两个表中相关的部分,其他不相关的部分不查询。
内连接
SELECT * from beauty be, boys bo WHERE be.boyfriend_id = bo.id
按照上面的查询,会查询出如下结果:
在这里插入图片描述

外连接

外连接分为左外连接和右外连接,是一个表作为主表的查询,查询时会将主表的所有数据都查询出来,再根据连接条件,查询出另一张表的一部分。

左外连接

左边是主表,表1 left join 表2 on 连接条件
左外连接:左表是主表,查询所有左表的记录,右表只查询符合连接条件的部分,右表中不符合连接条件的部分显示为空;
如下图:

左外连接
左外连接会查询出所有的女生,包括没有男朋友的女生,没有男朋友的男朋友信息为null

SELECT * from beauty be LEFT JOIN boys bo ON be.boyfriend_id = bo.id
按照上面的查询,会查询出如下结果:
在这里插入图片描述

右外连接

右边是主表,表1 right join 表2 on 连接条件
右外连接:右表是主表,查询所有右表的记录,左表只查询符合连接条件的部分,其他为空,左表中不符合连接条件的 部分显示为空;
如下图:
右外连接
SELECT * from beauty be right JOIN boys bo ON be.boyfriend_id = bo.id
按照上方的sql语句查询,会查询出所有的男生信息,不会查询出没有男朋友的女生信息,因此查询出来的只是部分女生的信息。
下面是查询的结果:
在这里插入图片描述

总结

根据这些查询和一些思考,我大致理解了MySQL的内连接和外连接,希望在以后的学习中,可以更好的理解和运用到这些知识。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值