🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注

JOIN(连接)查询
之前我们已经讲了数据表设计中的三种关系结构, 现在我们可以来开始学习多表查询了!
多表查询就是在多张表中查询所需要的数据,把它们按照一定的需求提取出来!
而在我们的数据库SQL中, 多表查询主要通过JOIN(连接)来实操作的, 这种语法结构可以让我们在两个表或多个表的字段之间进行连接,从实现查询数据!
INNER JOIN 内连接查询
内连接查询指的是两张表交集的部分, 也就是说只有当两个表中的记录满足连接条件的时候,这些记录就会出现在查询结果中!
我们可以看下面这个图, 满足条件的就是绿色部分的数据!
如图

语法结构
首先这种查询方式的语法结构如下:
SELECT 字段名..FROM 表名1 INNER JOIN 表名2 ON 表名1.字段=表名2.字段;
或者省略 INNER 关键字 不写也是可以的!
SELECT 字段名..FROM 表名1 JOIN 表名2 ON 表名1.字段=表名2.字段;
举个栗子 🌰
关于这个概念,我们还是要用实际的案例来演示一下,帮助大家理解inner join查询
我们创建两张表:t_student(学生表)和 t_class(班级表)
SQL如下
-- 创建班级表
CREATE TABLE t_class (
classId INT PRIMARY KEY,
className NVARCHAR(100) NOT NULL
);
-- 创建学生表
CREATE TABLE t_student (
studentId INT PRIMARY KEY,
studentName NVARCHAR(100) NOT NULL,
classId INT,
FOREIGN KEY (classId) REFERENCES T_class(classId)
);
如图

然后我们来插入一些数据~
如下
-- 插入班级数据
INSERT INTO t_class (classId, className) VALUES (1, 'ClassA');
INSERT INTO t_class (classId, className) VALUES (2, 'ClassB');
INSERT INTO t_class (classId, className) VALUES (3, 'ClassC');
-- 插入学生数据
INSERT INTO t_student (studentId, studentName, classId) VALUES (1, '张三', 1);
INSERT INTO t_student (studentId, studentName, classId) VALUES (2, '李四', 2);
INSERT INTO t_student (studentId, studentName, classId) VALUES (3, '王五', 1);
INSERT INTO t_student (studentId, studentName, classId) VALUES (4, '大卫', 3);
INSERT INTO t_student (studentId, studentName, classId) VALUES (5, '伊娃', 2);
如图

那么我们现在简单查询一下!
如图

那么根据现在这个数据存储的结构,我们先根据这个inner join的语法来查询一下这两个表!
很明显这两个表中有关联的字段,inner join查询关键就在于条件on 把这个条件找出来,进行连接即可!
连接操作如下:
SELECT * FROM t_class INNER JOIN t_student ON t_class.classId = t_student.classId;
如图

首先我们看一下,这很明显的就是一个一对多的关系 对吧!!
那么我们现在又来插入两条数据给学生表
如下
INSERT INTO t_student (studentId, studentName, classId) VALUES (6, '哈利波特', 50);
INSERT INTO t_student (studentId, studentName, classId) VALUES (7, '伏地魔', 60);
再给班级表也插入一些数据
INSERT INTO t_class (classId, className) VALUES (4, 'ClassD');
注意:这里我们可以先把外键约束先删除一下,否则这样添加数据是添加不进去的!
然后我们再来执行一下,刚刚的inner join查询
如图

好了,此时此刻,现在你应该可以看出区别了~ 两个表中不符合条件的不显示!
也就是说 ,虽然刚刚我们添加了一些数据给学生表和班级表 但是这些数据并没有显示出来!
inner join的重点就在于:
把两个表之中满足彼此条件的,现实出来,不满足条件的,就不会显示出来!
所以,在实际开发中,我们如果遇到只需要满足添加的结果被查询出来的情况下,那么久要考虑使用inner join来实现!
那么接下来,拿到两个表的连接数据集合之后,就可以开始处理了呀!
比如: 统计一下每个班级多少学生!
SELECT t_class.className, COUNT(t_student.studentId) '每个班级有多少学生' FROM t_class INNER JOIN t_student ON t_class.classId = t_student.classId
GROUP BY t_class.className;
如图

这里我建议大家一定要用AS关键字先把别名用起来, 就是给定义的字段,表取个名字!
如下
SELECT c.className, COUNT(s.studentId) '每个班级有多少学生' FROM t_class AS c
INNER JOIN t_student AS s ON c.classId = s.classId
GROUP BY c.className;
我们也可以不写INNER关键字
SELECT c.className, COUNT(s.studentId) '每个班级有多少学生' FROM t_class AS c
JOIN t_student AS s ON c.classId = s.classId
GROUP BY c.className;
查询结果是一样的!
如图

最后
所以使用inner join查询数据,显示出来的就是满足条的中间交集部分


"👍点赞" "✍️评论" "收藏❤️"欢迎一起交流学习❤️❤️💛💛💚💚

好玩 好用 好看的干货教程可以点击下方关注❤️微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇


1012

被折叠的 条评论
为什么被折叠?



