假设大家有两个表:学生和课程。一个学生可以选择多门课程,一门课程也可以被多个学生选择。
CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50) ); CREATE TABLE course ( id INT PRIMARY KEY, name VARCHAR(50) );
为了建立学生和课程之间的多对多关系,大家需要创建一个中间表,存储学生和课程的关联数据。
CREATE TABLE student_course ( student_id INT, course_id INT, PRIMARY KEY(student_id,course_id), FOREIGN KEY(student_id) REFERENCES student(id), FOREIGN KEY(course_id) REFERENCES course(id) );
在中间表中,大家定义了两个外键关联学生表和课程表,保证了关联数据的完整性。主键是由学生ID和课程ID组成的复合主键,确保了每个学生只能选择一次每门课程。
现在大家可以向学生和课程表中插入数据,然后向中间表中插入关联数据:
INSERT INTO student(id,name) VALUES(1,'张三'); INSERT INTO student(id,name) VALUES(2,'李四'); INSERT INTO student(id,name) VALUES(3,'王五'); INSERT INTO course(id,name) VALUES(1,'语文'); INSERT INTO course(id,name) VALUES(2,'数学'); INSERT INTO course(id,name) VALUES(3,'英语'); INSERT INTO student_course(student_id,course_id) VALUES(1,1); INSERT INTO student_course(student_id,course_id) VALUES(1,2); INSERT INTO student_course(student_id,course_id) VALUES(2,2); INSERT INTO student_course(student_id,course_id) VALUES(3,1); INSERT INTO student_course(student_id,course_id) VALUES(3,3);
现在大家可以通过JOIN操作查询学生选课信息:
SELECT student.name,course.name FROM student JOIN student_course ON student.id = student_course.student_id JOIN course ON course.id = student_course.course_id;
上述查询语句将返回以下结果:
+------+--------+ | name | name | +------+--------+ | 张三 | 语文 | | 张三 | 数学 | | 李四 | 数学 | | 王五 | 语文 | | 王五 | 英语 | +------+--------+
大家看到,通过中间表连接学生和课程表,大家可以轻松实现多对多关系。