如何使用MySQL的INNER JOIN函数获取两个表的交集

什么是INNER JOIN

INNER JOIN是MySQL中一种常用的查询方法,它用于从多个表中选取所有符合条件的记录,并将它们组合成一个结果集。INNER JOIN有两种表达方式:

使用JOIN关键字。

使用INNER JOIN关键字。

这两种方式的结果是一样的,下面我们将以使用INNER JOIN关键字的方式为例来介绍如何获取两个表的交集。

INNER JOIN的语法

SELECT 列名 FROM 表1 INNER JOIN 表2 ON 表1.列名=表2.列名;

上述语法中,SELECT 列名表示要查询的列名,FROM 表1表示要查询的第一个表名,INNER JOIN 表2表示要查询的第二个表名,并且还要使用INNER JOIN关键字将两个表连接起来,ON 表1.列名=表2.列名;用来指定连接条件。

INNER JOIN的实例

创建表

首先,我们需要创建两个表,一个是学生表(table_student),另一个是成绩表(table_score)。其中,学生表中有学生的ID、姓名、性别,成绩表中有学生的ID、科目、成绩。下面是创建表的SQL语句:

CREATE TABLE table_student (

id INT(11) NOT NULL AUTO_INCREMENT,

name VARCHAR(20) NOT NULL,

gender VARCHAR(10) NOT NULL,

PRIMARY KEY(id)

);

CREATE TABLE table_score (

id INT(11) NOT NULL AUTO_INCREMENT,

student_id INT(11),

subject VARCHAR(20) NOT NULL,

score INT(11) NOT NULL,

PRIMARY KEY(id),

FOREIGN KEY(student_id) REFERENCES table_student(id)

);

插入数据

接下来,我们需要往学生表和成绩表中插入一些数据,以便我们进行查询。下面是插入数据的SQL语句:

INSERT INTO table_student (name, gender) VALUES ('张三', '男');

INSERT INTO table_student (name, gender) VALUES ('李四', '女');

INSERT INTO table_student (name, gender) VALUES ('王五', '男');

INSERT INTO table_score (student_id, subject, score) VALUES (1, '语文', 90);

INSERT INTO table_score (student_id, subject, score) VALUES (1, '数学', 95);

INSERT INTO table_score (student_id, subject, score) VALUES (2, '语文', 80);

INSERT INTO table_score (student_id, subject, score) VALUES (2, '数学', 85);

INSERT INTO table_score (student_id, subject, score) VALUES (3, '语文', 70);

INSERT INTO table_score (student_id, subject, score) VALUES (3, '数学', 75);

查询交集

现在,我们已经创建好了两个表,接下来我们可以使用INNER JOIN函数来获取两个表的交集。这个例子中,我们希望查出每个学生在语文和数学两门科目中的成绩,并且只显示选了这两门课的学生的成绩。下面是查询语句:

SELECT t1.name, t2.subject, t2.score 

FROM table_student t1

INNER JOIN table_score t2

ON t1.id = t2.student_id

WHERE t2.subject IN ('语文', '数学')

GROUP BY t1.name

HAVING count(*) = 2;

上面的SQL语句中,我们使用了INNER JOIN关键字来连接两个表,指定了连接的条件是学生表的ID和成绩表中的学生ID相等。然后我们使用了WHERE条件来筛选出选了语文和数学两门课的学生(使用IN关键字表示“或”),最后我们使用了GROUP BY和HAVING关键字来确保选了这两门课的学生的成绩都能够被查询出来。运行以上SQL语句,我们可以得到以下结果:

+--------+---------+-------+

| name | subject | score |

+--------+---------+-------+

| 张三 | 语文 | 90 |

| 张三 | 数学 | 95 |

| 李四 | 语文 | 80 |

| 李四 | 数学 | 85 |

+--------+---------+-------+

结果展示了选了语文和数学两门课的学生的成绩,可以看到,只有张三和李四被查询出来了。

总结

INNER JOIN是MySQL中常用的一种查询方法,可以用于从多个表中选取所有符合条件的记录,并将它们组合成一个结果集。这篇文章以查询两个表的交集为例,介绍了INNER JOIN的语法和使用方法。通过这篇文章的学习,相信您已经了解INNER JOIN的基本用法,并且可以将其应用到实际项目中。如果您想深入了解INNER JOIN,可以关注MySQL官方文档或者网上的相关教程。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签