標籤:資料庫 基本表的串連操作 內串連 外串連
這次有幸幫師姐進行考試系統的基礎維護,說直接點就是對考試人員的管理,增刪改查,最主要的還是查詢學生,用來和老師所給的資訊進行核對,最後再確定考試的人員,在查詢的過程中就遇到了這樣的一種情況:
在對English考試的人員進行核對的時候,為了方便查詢,而建立的一個相關的視圖,該視圖所涉及到的表有:TB_Student(學生基本資料),TB_ExecutiveClass(涉及到所在的班級),TB_DepartmentName(所屬專業),TB_CollegeName(所屬學院),TB_English主要就是把學生基本資料以及所屬的學院專業以及英語考試的相關資訊來建立一個整體的資訊表。對於資訊的檢查第一部分就是看看視圖中的資訊有沒有和老師所給的英語資訊表一一對應。
胡亂忙碌的半天,最後按照師姐的想法,先對錶進行了右外串連,以學生英語分級資訊為主,來進行了查詢:
相關語句如下:
SELECT DISTINCT
dbo.TB_Student.StudentName, dbo.TB_Student.StudentCode, dbo.TB_Student.Sex, dbo.TB_ExecutiveClass.ExecutiveClassName, dbo.TB_Department.DepartmentName,
dbo.TB_College.CollegeName, dbo.TB_Grade.GradeName, dbo.TB_english.englisfenji, dbo.TB_english.englishclass
FROM dbo.TBR_DepCollegeLink INNER JOIN
dbo.TB_Department ON dbo.TBR_DepCollegeLink.DepartmentID = dbo.TB_Department.DepartmentID INNER JOIN
dbo.TB_College ON dbo.TBR_DepCollegeLink.CollegeID = dbo.TB_College.CollegeID INNER JOIN
dbo.TBR_ExecutiveClassDepLink ON dbo.TB_Department.DepartmentID = dbo.TBR_ExecutiveClassDepLink.DepartmentID INNER JOIN
dbo.TBR_StuExecutiveClassLink INNER JOIN
dbo.TB_ExecutiveClass ON dbo.TBR_StuExecutiveClassLink.ExecutiveClassID = dbo.TB_ExecutiveClass.ExecutiveClassID INNER JOIN
dbo.TB_Student ON dbo.TBR_StuExecutiveClassLink.StudentID = dbo.TB_Student.StudentID ON
dbo.TBR_ExecutiveClassDepLink.ExecutiveClassID = dbo.TB_ExecutiveClass.ExecutiveClassID INNER JOIN
dbo.TBR_ExecutiveClassGradeLink ON dbo.TB_ExecutiveClass.ExecutiveClassID = dbo.TBR_ExecutiveClassGradeLink.ExecutiveClassID INNER JOIN
dbo.TB_Grade ON dbo.TBR_ExecutiveClassGradeLink.GradeID = dbo.TB_Grade.GradeID RIGHT OUTER JOIN
dbo.TB_english ON dbo.TB_Student.StudentCode = dbo.TB_english.studentCode
所出現的效果如下:
為什麼會出現這種狀況呢?其原因當然很簡單,由於T_English表中的資料是自己按照老師所給的Excel表格直接匯入進去的,所以如果採用又外串連會出現其等同量的資料,可是由於某種原因,當初添加基本資料的時候忘記了此學生,又或者轉專業只刪除了而忘記把其添加進去了等等,從而導致基礎學生表為空白,所以才出現的的現象。
通過基本表的串連操作進行了簡單的查詢,然後再一對照,發現真的是這五條資料搗的鬼。哎!這次真的是幫了自己的大忙了
其實右外串連只是基本表中的一種連線類型,除此之外,資料表的連線類型分成:
1)內串連:是等值串連
2)外串連:看以什麼資訊為主,是表格A還是表格B,如果以表A資訊為依據,那就使用左外串連,相反則使用右外串連。全外串連則是兩個表都不加限制。
3)自然串連:串連發生在一張表內
下邊通過舉例來詳細說明:
表TB_student和表TB_English
對於自然串連,一般使用在有公用屬性的情況中,如果兩個關係沒有公用屬性,那麼自然串連則就轉換成笛卡兒積來進行操作。
迪卡兒積:
SELECT dbo.TB_English.studentCode, dbo.TB_English.englisfenji, dbo.TB_Student.StudentCodes, dbo.TB_Student.StudentNameFROM dbo.TB_English CROSS JOIN dbo.TB_Student
顯示效果:
內串連:
SELECT dbo.TB_English.studentCode, dbo.TB_English.englisfenji, dbo.TB_Student.StudentCodes, dbo.TB_Student.StudentNameFROM dbo.TB_English <span style="color:#ff0000;">INNER JOIN</span> dbo.TB_Student ON dbo.TB_English.studentCode = dbo.TB_Student.StudentCodes
左外串連:
SELECT dbo.TB_English.studentCode, dbo.TB_English.englisfenji, dbo.TB_Student.StudentCodes, dbo.TB_Student.StudentNameFROM dbo.TB_English<span style="color:#ff0000;"> LEFT OUTER JOIN</span> dbo.TB_Student ON dbo.TB_English.studentCode = dbo.TB_Student.StudentCodes
右外串連:
SELECT dbo.TB_English.studentCode, dbo.TB_English.englisfenji, dbo.TB_Student.StudentCodes, dbo.TB_Student.StudentNameFROM dbo.TB_English <span style="color:#ff0000;">RIGHT OUTER JOIN</span> dbo.TB_Student ON dbo.TB_English.studentCode = dbo.TB_Student.StudentCodes
全外串連:
SELECT dbo.TB_English.studentCode, dbo.TB_English.englisfenji, dbo.TB_Student.StudentCodes, dbo.TB_Student.StudentNameFROM dbo.TB_English <span style="color:#ff0000;">FULL OUTER JOIN</span> dbo.TB_Student ON dbo.TB_English.studentCode = dbo.TB_Student.StudentCodes
總結:
這次對於基礎資訊的操作讓自己對於SQL查詢等等熟悉了許多,對於實踐檢驗知識的熟練程度,真的是一點都不假啊!雖然只是一些小小的知識點,但是通過這次基礎資訊維護,讓自己更加明白了這些基礎性的學習一定要紮實啊!這些知識看似簡單,但是如果不瞭解,真的會使自己的查詢效率大大降低啊!