示例场景:大学中的学生和课程。给定的学生可能正在参加几门课程,并且自然而然地,一门课程通常会有很多学生。
示例表,简单设计:
CREATE TABLE `Student` ( `StudentID` INT UNSIGNED NOT NULL AUTO_INCREMENT, `FirstName` VARCHAr(25), `LastName` VARCHAr(25) NOT NULL, PRIMARY KEY (`StudentID`)) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ciCREATE TABLE `Course` ( `CourseID` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, `Code` VARCHAr(10) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL, `Name` VARCHAr(100) NOT NULL, PRIMARY KEY (`CourseID`)) ENGINE=INNODB CHARACTER SET utf8 COLLATE utf8_general_ciCREATE TABLE `CourseMembership` ( `Student` INT UNSIGNED NOT NULL, `Course` SMALLINT UNSIGNED NOT NULL, PRIMARY KEY (`Student`, `Course`), ConSTRAINT `Constr_CourseMembership_Student_fk` FOREIGN KEY `Student_fk` (`Student`) REFERENCES `Student` (`StudentID`) ON DELETe CASCADE ON UPDATE CASCADE, ConSTRAINT `Constr_CourseMembership_Course_fk` FOREIGN KEY `Course_fk` (`Course`) REFERENCES `Course` (`CourseID`) ON DELETE CASCADE ON UPDATE CASCADE) ENGINE=INNODB CHARACTER SET ascii COLLATE ascii_general_ci
查找所有注册课程的学生:
SELECT `Student`.*FROM `Student` JOIN `CourseMembership` ON `Student`.`StudentID` = `CourseMembership`.`Student`WHERe `CourseMembership`.`Course` = 1234
查找给定学生参加的所有课程:
SELECt `Course`.*FROM `Course` JOIN `CourseMembership` ON `Course`.`CourseID` = `CourseMembership`.`Course`WHERe `CourseMembership`.`Student` = 5678



