什么是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官方文档或者网上的相关教程。