【你也能从零基础学会网站开发】 SQL Server结构化查询语言数据操作应用--DML篇 SQL JOIN多表查询之INNER JOIN 内连接查询

  • 2024-11-08
  • dfer
  • 41

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

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查询数据,显示出来的就是满足条的中间交集部分

"👍点赞" "✍️评论" "收藏❤️"

大家的支持就是我坚持下去的动力!

如果以上内容有任何错误或者不准确的地方,🤗🤗🤗欢迎在下面 👇👇👇 留个言指出、或者你有更好的想法,
欢迎一起交流学习❤️❤️💛💛💚💚

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