【你也能从零基础学会网站开发】 SQL Server结构化查询语言数据操作应用--DML篇 SQL JOIN多表查询之INNER JOIN 内连接查询
🚀 个人主页 极客小俊
✍🏻 作者简介:程序猿、设计师、技术分享
🐋 希望大家多多支持, 我们一起学习和进步!
🏅 欢迎评论 ❤️点赞💬评论 📂收藏 📂加关注
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
查询数据,显示出来的就是满足条的中间交集部分
"👍点赞" "✍️评论" "收藏❤️"
欢迎一起交流学习❤️❤️💛💛💚💚
好玩 好用 好看
的干货教程可以
点击下方关注❤️
微信公众号❤️
说不定有意料之外的收获哦..🤗嘿嘿嘿、嘻嘻嘻🤗!
🌽🍓🍎🍍🍉🍇