示例场景:大学的学生和课程.给定的学生可能会在几门课上,而且自然地一门课程通常会有很多学生.
示例表,简单设计:
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_ci CREATE 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_ci CREATE 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
原文地址:https://www.jb51.cc/php/140190.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。