ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql中关联查询的介绍及实例

2021-02-10 09:32:08  阅读:225  来源: 互联网

标签:classId JOIN 连接 查询 实例 student Mysql id class


文章目录


前言

Mysql作为日常开发中常用的数据库,并且业务中的数据库查询极大情况下需要多表查询,因此掌握Mysql中的关联查询很重要。


一、建表语句

  • class表
/*Table structure for table `class` */
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
 `id` VARCHAR(11) NOT NULL COMMENT '班级号',
 `teacherName` VARCHAR(11) NOT NULL COMMENT '班主任姓名',
 PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
/*Data for the table `class` */
INSERT  INTO `class`(`id`,`teacherName`) VALUES ('C01','李老师'),('C02','王老师'),('C03','张老师'),('C04','陈老师');
  • student表
/*Table structure for table `student` */
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
 `stuId` varchar(11) NOT NULL COMMENT '学号',
 `stuName` varchar(11) NOT NULL COMMENT '学生姓名',
 `classId` varchar(11) NOT NULL COMMENT '班级号',
 PRIMARY KEY (`stuId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*Data for the table `student` */
insert  into `student`(`stuId`,`stuName`,`classId`) values ('S001','张三','C01'),('S008','李四','C03'),('S009','王五','C02'),('S110','赵六','C05');

二、交叉连接(CROSS JOIN)

  • 定义
    没有任何关联条件,结果为所涉及表的笛卡尔积(A×B)
    注:这里的A表示左表,B表示右表,后文的所有A和B的关系都表示的集合关系
  • 连接案例
SELECT * FROM student s CROSS JOIN class c
#SELECT * FROM student s,class c 和上面一种等价
  • 案例结果
    在这里插入图片描述

三、内连接(INNER JOIN)

  • 定义
    获取两个表中字段匹配关系的记录(A∩B)
  • 连接案例
SELECT * FROM student s INNER JOIN class c ON s.`classId`=c.`id`
#SELECT * FROM student s,class c WHERE s.`classId`=c.`id` 和上面一种等价
  • 案例结果
    在这里插入图片描述

四、左外连接(LEFT JOIN)

  • 定义
    返回左表中的所有行,如果左表中行在右表中没有匹配行,则结果中右表中的列返回空值。
  • 连接案例1(A)
SELECT * FROM student s LEFT JOIN class c ON s.`classId`=c.`id`
  • 案例结果
    在这里插入图片描述

  • 连接案例2(特殊的左连接)(A-A∩B)

SELECT * FROM student s LEFT JOIN class c ON s.`classId`=c.`id` WHERE c.`id`IS NULL
  • 案例结果
    在这里插入图片描述

五、右外连接(RIGHT JOIN)

  • 定义
    返回右表中的所有行,如果右表中行在左表中没有匹配行,则结果中左表中的列返回空值。
  • 连接案例1(B)
SELECT * FROM student s RIGHT JOIN class c ON s.`classId`=c.`id`
  • 案例结果
    在这里插入图片描述

  • 连接案例2(特殊的右连接)(B-A∩B)

     SELECT * FROM student s RIGHT JOIN class c ON s.`classId`=c.`id` WHERE s.`classId` IS NULL```
    
  • 案例结果
    在这里插入图片描述

六、全连接(FULL JOIN)

  • 定义
    完整外部联接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
    注:Mysql中不支持全连接,但是可以通过left join+right join+union实现
  • 连接案例1(A∪B)
SELECT * FROM student s LEFT JOIN class c ON s.`classId`=c.`id` 
UNION 
SELECT * FROM student s RIGHT JOIN class c ON s.`classId`=c.`id`
  • 案例结果
    在这里插入图片描述

  • 连接案例2(A∪B-A∩B)

SELECT * FROM student s LEFT JOIN class c ON s.`classId`=c.`id` WHERE c.`id`IS NULL
UNION
SELECT * FROM student s RIGHT JOIN class c ON s.`classId`=c.`id` WHERE s.`classId` IS NULL
  • 案例结果
    在这里插入图片描述

标签:classId,JOIN,连接,查询,实例,student,Mysql,id,class
来源: https://blog.csdn.net/weixin_44027397/article/details/113778789

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有