日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

对于多对多关系的对象,如何建表与关联查询(转载)

發(fā)布時(shí)間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对于多对多关系的对象,如何建表与关联查询(转载) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

(一)背景介紹
??在數(shù)據(jù)庫(kù)中建表時(shí),很容易遇到一種情況:一個(gè)學(xué)生選修了多門(mén)課,而每門(mén)課有多名學(xué)生選修,“學(xué)生”和“課程”之間就是典型的多對(duì)多關(guān)系。
(二)如何建表
??遇到這種多對(duì)多關(guān)系,我們一般是創(chuàng)建三張表:Student(學(xué)生表)、Course(課程表)和選課表(id、student_id、course_id)
?

下面來(lái)自狗書(shū)

?

查詢(xún)多對(duì)多關(guān)系要分成兩步。

若想知道某位學(xué)生選擇了哪些課程,

students中根據(jù)name獲取id

registrations中根據(jù)id獲取所有他選擇的課程的id

classes中根據(jù)課程的id得到課程名字

#------------------------------------------------------------

同樣,若想找到選擇了某門(mén)課程的所有學(xué)生,

classes中根據(jù)課程的名字得到id

registrations中根據(jù)id獲取所有選擇這門(mén)課程的學(xué)生的id
students列表中根據(jù)所有選擇這門(mén)課學(xué)生的id,獲得所有學(xué)生的名字

#------------------------------------------------------------

光說(shuō)不夠,下面是具體的實(shí)踐.

--------------------------------------------------------datagrip建表--------------------------------------------------------
學(xué)生表建立:
CREATE TABLE students
(
? ? id int PRIMARY KEY AUTO_INCREMENT,
? ? name varchar(64),
? ? date time
);


中間表建立:
CREATE TABLE temp
(
? ? student_id int,
? ? curriculum_id int
);

課程表建立:
CREATE TABLE curriculums
(
? ? id int PRIMARY KEY AUTO_INCREMENT,
? ? name varchar(32),
? ? date time,
? ? status varchar(8)
);

---------------------------------下面是插入數(shù)據(jù)-----------------------------------------------------------

students:

?

temp:

?

curriculums:

?

------------------------------下面是關(guān)聯(lián)語(yǔ)句查詢(xún)--------------------------------------------------------
小白兔選擇的所有課程:
mysql>SELECT curriculums.name FROM curriculums?
INNER JOIN temp ON temp.curriculum_id=curriculums.id?
INNER JOIN students ON students.name="小白兔" and students.id = temp.student_id;
+-----------------+
| name ? ? ? ? ? ?|
+-----------------+
| 數(shù)據(jù)庫(kù)設(shè)計(jì) ? ? ?|
| 計(jì)算機(jī)原理 ? ? ?|
| 大學(xué)物理 ? ? ? ?|
+-----------------+


選中"數(shù)據(jù)庫(kù)設(shè)計(jì)"課程的所有人:
mysql>select students.name from students?
inner join temp on temp.student_id=students.id?
inner join curriculums on curriculums.name="數(shù)據(jù)庫(kù)設(shè)計(jì)" and curriculums.id=temp.curriculum_id;

+-----------+
| name ? ? ?|
+-----------+
| 小白兔 ? ?|
| 大森林 ? ?|
+-----------+
?

總結(jié)

以上是生活随笔為你收集整理的对于多对多关系的对象,如何建表与关联查询(转载)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。