雖然多表查詢,在計算機的必須課,數據庫,里面已大講特講,但是這個難點很多老師都沒有講深講透。跟你凈扯1大堆,左連接右連接的東西,讓人1頭霧水。老師把所有多表查詢的方法告知你,但是到頭來1種方法都沒有掌握。其實只要記住1種就夠了,學會多表查詢,除在你考數據庫能夠拿到很高分以外,到了實際利用,很多地方都用到多表查詢。比如論壇工程中分析回帖發帖的關系,提供該用戶發了甚么帖子的功能、比如信息管理系統中,分析班級與學生、老師之間的關系,提供該班級中存在多少學生的查詢功能。就需要用到多表查詢,你總不能把每表都弄到猶如視圖1般,然后關系表不要把?說到地就是如何創建不同的視圖給不同攻城獅使用,下面使用MYSQL舉個例子說明,如何利用內連接與嵌套查詢,實現多表查詢。其實所有數據庫都1樣,SQL語句是通用的。
1、基本目標
已知,在test數據庫,可自行腦補為school數據庫,中存在以下表:
(1)學生表i_student,里面記錄著該學校所有學生的數據,表示該學校中有3個學生a,b,c
(2)班級表i_class,里面記錄著該學校所有班級的數據,表示該學校中有2個學生1,2
(3)班級-學生關系表i_class_student,里面記錄著該學校所有班級與學生的對應關系,表示該學校中1班有學生1,2,2班有學生3
然后問題來了,求1班中有哪些學生?怎樣用SQL語句查詢?
2、基本思想
其實這3張表有以下簡單的關系:
班級-學生關系表i_class_student的class_id數據取自班級表i_class的主鍵id,班級-學生關系表i_class_student的student_id數據取自學生表i_student的主鍵id,存在1個所謂的“參照完全性”,如圖上面的那個箭頭就是外鍵嘛。其余表中的鑰匙圖標就是主鍵嘛,每個表的ID列存在所謂的“實體完全性”嘛,也就是說ID列數字不能再出現第2次也許不能不填,也就所謂的唯1且非空。
3、制作進程
1、基于上面的分析,你可以先對班級-學生關系表i_class_student下手,使用以下的語句:
查出1班轄下的所有student_id
2、再對學生表i_student下手,根據找出這些student_id對應的學生名字就好了嘛,這里要把上面的查詢結果,與整張學生表i_student中的ID列與姓名列name連起來再查詢。首先你要有張學生表i_student的ID列與姓名列name。雖然現在整張學生表i_student中的ID列與姓名列name就是整張學生表i_student,但是實際中學生表i_student常常不止存兩列信息。通過1句簡單得不能再簡單,凡是學過數據庫都必須知道的語句查出整張學生表i_student中的姓名列name:
3、設第1步的查詢結果為t1,第2步的查詢結果為t2,把t1與t2兩張表連接起來,只存在保存id與student_id對應的結果,就得到最后的結果:
所以一樣把第1步的查詢語句與第2步的查詢語句,加條件地內連接起來,便得到以下的查詢語句,但此時我們無需再查詢學生表i_student的id了,這個id只作比對作用,可以把第2步的查詢語句中的id去掉,
班級1不正是有a,b兩個學生嗎?
下一篇 DFS + 剪枝策略