国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
如何巧用SQL的外連接

連接查詢(xún)是關(guān)系數(shù)據(jù)庫(kù)的重要組成部分和主要特點(diǎn),在實(shí)際應(yīng)用中,連接查詢(xún)廣泛應(yīng)用在數(shù)據(jù)庫(kù)使用的方方面面。下面是YJBYS小編為大家搜索整理了關(guān)于巧用SQL的外連接的方法,歡迎參考閱讀,希望對(duì)大家有所幫助。想了解更多相關(guān)信息請(qǐng)持續(xù)關(guān)注我們應(yīng)屆畢業(yè)生培訓(xùn)網(wǎng)!



  SQL連接查詢(xún)可以實(shí)現(xiàn)對(duì)多個(gè)表進(jìn)行查詢(xún),生成的結(jié)果包含滿(mǎn)足連接條件的記錄。



  一、連接查詢(xún)



  連接是兩元運(yùn)算,是關(guān)系的模向結(jié)合。連接運(yùn)算是將兩個(gè)關(guān)系模式拼接成一個(gè)更寬的關(guān)系模式,生成的新關(guān)系中包含滿(mǎn)足連接條件的記錄。



  在實(shí)際的應(yīng)用中,當(dāng)檢索數(shù)據(jù)時(shí),常通過(guò)連接操作查詢(xún)出存放在多個(gè)表中的不同實(shí)體的信息。例如,在教師信息管理數(shù)據(jù)庫(kù)中查詢(xún)某教師的姓名、職稱(chēng)、工資、任課科目等,所需要的列有來(lái)自于教師表的姓名和職稱(chēng)數(shù)據(jù)列;有來(lái)自于工資表中的工資數(shù)據(jù)列;有來(lái)自于課程表中的任課科目數(shù)據(jù)列。這種涉及到多個(gè)表之間的查詢(xún)就是我們所說(shuō)的連接查詢(xún)。



  在T-SQL中,連接查詢(xún)分為兩種表示形式,一是符合SQL標(biāo)準(zhǔn)的連接謂詞的表示形式,二是T-SQL擴(kuò)展的使用關(guān)鍵詞JOIN的表示形式。



  1.連接謂詞



  連接謂詞表示形式的連接查詢(xún)是在WHERE子句中使用的連接語(yǔ)句,在數(shù)據(jù)庫(kù)語(yǔ)言中,也被稱(chēng)為隱性連接。然而,隨著數(shù)據(jù)庫(kù)語(yǔ)言的規(guī)范和發(fā)展,隱性連接已逐漸不被使用,當(dāng)前的數(shù)據(jù)庫(kù)語(yǔ)言基本上已經(jīng)全部采用顯性連接。



  2.使用JOIN關(guān)鍵詞指定的連接



  T-SQL擴(kuò)展了以JOIN關(guān)鍵詞指定連接的表示方式,我們將這種以JOIN……ON子句產(chǎn)生的連接稱(chēng)為顯性連接。顯性連接大大增強(qiáng)了多表的連接運(yùn)算能力。FROM子句的表示將多個(gè)表連接起來(lái),連接語(yǔ)法格式如下:



  FROM join_table join_type join_table



  [ON (join_condition)]



  指出連接類(lèi)型,可分為三種:內(nèi)連接、外連接和交叉連接。



  1) 內(nèi)連接(join 或 inner join):兩個(gè)存在關(guān)聯(lián)關(guān)系的表A和B,表A與表B內(nèi)連接的查詢(xún)結(jié)果為C,結(jié)果集C中只能包括表A與表B中滿(mǎn)足連接條件的記錄。



  2) 外連接可分為:左連接、右連接、完全外連接。



 ?、?左連接(left join 或 left outer join):兩個(gè)存在關(guān)聯(lián)關(guān)系的表A和B,表A與表B左連接的查詢(xún)結(jié)果為C。C的記錄中包括A的全部記錄以及B中與A滿(mǎn)足連接條件的記錄,C中A與B不滿(mǎn)足連接條件的列值為空值。



 ?、?右連接(right join 或 right outer join):右連接的含義是:兩個(gè)存在關(guān)聯(lián)關(guān)系的表A和B,表A與表B右連接的查詢(xún)結(jié)果為C。C的記錄中包括B的全部記錄以及表A中與B滿(mǎn)足連接條件的記錄,C中B與A不能夠滿(mǎn)足連接條件部分為空值。



 ?、?完全外連接(full join 或 full outer join):兩個(gè)存在關(guān)聯(lián)關(guān)系的表A和B,表A與表B完全外連接的查詢(xún)結(jié)果為C。C的記錄中包括A和B的全部記錄,C中B與A以及A與B不滿(mǎn)足連接條件的部分為空值。



  3) 交叉連接(cross join):交叉連接查詢(xún)返回被連接的兩個(gè)表所有數(shù)據(jù)行的笛卡爾積,查詢(xún)結(jié)果集合中的數(shù)據(jù)行數(shù)等于第一個(gè)表中符合查詢(xún)條件的數(shù)據(jù)行數(shù)乘以第二個(gè)表中符合查詢(xún)條件的數(shù)據(jù)行數(shù)。



  二、巧用SQL的外連接示例



  內(nèi)連接時(shí),返回查詢(xún)結(jié)果集合中的僅是符合查詢(xún)條件和連接條件的行。而采用外連接時(shí),它返回到查詢(xún)結(jié)果集合中的不僅包含符合連接條件的行,而且還可以包括左表、右表或兩個(gè)連接表中的所有數(shù)據(jù)行。因此,外連接更具靈活性,查詢(xún)運(yùn)算功能也更強(qiáng)大,合理應(yīng)用好外連接查詢(xún)有時(shí)將起到意想不到的效果,并大大提高我們的工作效率。



  1.案例問(wèn)題



  學(xué)歷證書(shū)是學(xué)生在學(xué)校學(xué)習(xí)的重要憑證,對(duì)學(xué)生的就業(yè)具有重大影響。因此,學(xué)歷證書(shū)的及時(shí)辦理和準(zhǔn)時(shí)發(fā)放是每一所學(xué)校都非常重視的工作。而對(duì)于技工院校,學(xué)歷證書(shū)辦理過(guò)程中畢業(yè)生資料的收集和整理,特別是畢業(yè)生學(xué)習(xí)成績(jī)(含五門(mén)文化基礎(chǔ)課成績(jī)和五門(mén)專(zhuān)業(yè)課成績(jī))的錄入又是這項(xiàng)工作的重中之重。需完成上報(bào)的“畢業(yè)生學(xué)習(xí)成績(jī)表”,見(jiàn)圖6。



  隨著學(xué)校規(guī)模的不斷擴(kuò)大,畢業(yè)學(xué)生人數(shù)的逐年增多,學(xué)生畢業(yè)資料的整理更是越來(lái)越繁重。畢業(yè)生學(xué)習(xí)成績(jī)的錄入困難主要表現(xiàn)在如下幾方面:



  1) “畢業(yè)生學(xué)習(xí)成績(jī)表”要求需嚴(yán)格按照規(guī)定的學(xué)生學(xué)號(hào)次序和規(guī)定的十門(mén)課程的排序進(jìn)行錄入。



  2) 各畢業(yè)生的各科目成績(jī)需從每個(gè)學(xué)期期末各班主任上交教學(xué)管理部門(mén)的“學(xué)生成績(jī)總表”中查詢(xún)獲取。



  3) 各班主任上交的“學(xué)生成績(jī)總表”中學(xué)生的排序通常是按學(xué)生的座位號(hào)進(jìn)行排列的,而且各科目的排序也是隨機(jī)的。



  因此,要完成一個(gè)班級(jí)的畢業(yè)生學(xué)習(xí)成績(jī)表,基本上需要分別到四個(gè)學(xué)期的“學(xué)生成績(jī)總表”中去逐一將十門(mén)課程的成績(jī)找出來(lái),并填入“畢業(yè)生學(xué)習(xí)成績(jī)表”對(duì)應(yīng)的位置。這是何等繁重的一項(xiàng)工作,傳統(tǒng)的方式完成一個(gè)班級(jí)的成績(jī)錄入至少也得花上三個(gè)多小時(shí)。而對(duì)于整個(gè)學(xué)校幾十個(gè)畢業(yè)班而言,一個(gè)部門(mén)要完成這么一項(xiàng)巨大的工程,這簡(jiǎn)直就是一項(xiàng)不可能的任務(wù)。



  為此,如何高效、快速的完成如此龐大的數(shù)據(jù)錄入,減少相關(guān)學(xué)生管理部門(mén)的工作量,就是擺在我們面前的一個(gè)重要的課題。



  2.創(chuàng)建示例數(shù)據(jù)庫(kù)



  1) 創(chuàng)建案例數(shù)據(jù)庫(kù)和數(shù)據(jù)表



  為了進(jìn)行實(shí)驗(yàn)分析,該文利用“畢業(yè)生花名冊(cè)”(見(jiàn)圖7)和各學(xué)期每個(gè)班主任交上來(lái)的“學(xué)生成績(jī)總表”EXCEL表格(見(jiàn)圖8),建立了案例數(shù)據(jù)庫(kù)“DB09”,對(duì)應(yīng)XM和T1兩張數(shù)據(jù)表,如表1、2所示。



  2) 給數(shù)據(jù)表填充數(shù)據(jù)



  示例數(shù)據(jù)庫(kù)和數(shù)據(jù)表創(chuàng)建完成后,我們把要查詢(xún)的班級(jí)學(xué)生名單從全校的“畢業(yè)生花名冊(cè)”中復(fù)制下來(lái),并粘貼到XM數(shù)據(jù)表中。并將需查詢(xún)的某一學(xué)期的該班級(jí)的學(xué)生成績(jī)總表數(shù)據(jù),復(fù)制粘貼到T1數(shù)據(jù)表中。至此,數(shù)據(jù)庫(kù)、數(shù)據(jù)表和需查詢(xún)的數(shù)據(jù)都已準(zhǔn)備完成。



  3.編寫(xiě)SQL語(yǔ)句



  現(xiàn)在我們需要做的就是利用SQL語(yǔ)句,按照XM表的名字順序,從T1 表中查詢(xún)出需要的科目成績(jī)。比方說(shuō),如果希望按照0915班的學(xué)生名字排序,查詢(xún)同學(xué)們?cè)?009—2010學(xué)年第一學(xué)期FLASH科目的對(duì)應(yīng)成績(jī),則可以編寫(xiě)如下所示的SELECT語(yǔ)句:



  USE DB09



  select XM.姓名,T1.科目二 as 'FLASH'



  from XM left join T1



  on XM.姓名=T1.姓名



  order by XM.id asc



  以上語(yǔ)句執(zhí)行的結(jié)果如圖9所示。



  通過(guò)上述的SQL左外連接示例,我們輕輕松松實(shí)現(xiàn)了對(duì)0915班FLASH科目的成績(jī)查詢(xún),這跟手工逐一篩選相比,無(wú)疑前進(jìn)了一大步。然而,我們僅僅實(shí)現(xiàn)了對(duì)一個(gè)學(xué)期一門(mén)科目的成績(jī)查詢(xún),那么,我們能不能夠使用同樣的方法,實(shí)現(xiàn)同時(shí)對(duì)多個(gè)學(xué)期多門(mén)科目的成績(jī)查詢(xún)呢?答案顯然是肯定的。



  下面,我們以0915班為例,以每學(xué)期的“學(xué)生成績(jī)總表”建立相對(duì)應(yīng)的數(shù)據(jù)表,分別為:T1、T2、T3、T4。再按照學(xué)生名字的排序,查詢(xún)出同學(xué)們第一學(xué)期的FLASH,第二學(xué)期的英語(yǔ)和語(yǔ)文,第三學(xué)期的政治和計(jì)算機(jī)網(wǎng)絡(luò)管理,第四學(xué)期的數(shù)學(xué)、體育、中文VF、網(wǎng)頁(yè)制作和ASP程序設(shè)計(jì)科目的對(duì)應(yīng)成績(jī)。實(shí)現(xiàn)的SELECT語(yǔ)句如下:



  USE DB09



  select xm.姓名,T3.科目五 as '政治',T2.科目七 as '語(yǔ)文',T4.科目六 as '數(shù)學(xué)',T2.科目六 as '英語(yǔ)',T4.科目七 as '體育',T1.科目二 as 'FLASH',T4.科目一 as '中文VF',T4.科目四 as 'ASP程序設(shè)計(jì)',T3.科目二 as '計(jì)算機(jī)網(wǎng)絡(luò)管理',T4.科目三 as '網(wǎng)頁(yè)制作'



  from xm left join T1 on T1.姓名=xm.姓名



  left join T2 on T2.姓名=xm.姓名



  left join T3 on T3.姓名=xm.姓名



  left join T4 on T4.姓名=xm.姓名



  order by XM.id asc



  上述語(yǔ)句執(zhí)行的結(jié)果如圖10所示。



  通過(guò)對(duì)SELECT語(yǔ)句進(jìn)一步的優(yōu)化和擴(kuò)展,我們一步到位,一次執(zhí)行即可完成一個(gè)班級(jí)的畢業(yè)生學(xué)習(xí)成績(jī)表,將這項(xiàng)原本“不可能的任務(wù)”變得輕而易舉,大大減少了相關(guān)學(xué)生管理部門(mén)的工作量,為學(xué)校每年學(xué)歷證書(shū)的及時(shí)辦理提供了強(qiáng)有力的保障和支持。



  SQL是一門(mén) ANSI 的標(biāo)準(zhǔn)計(jì)算機(jī)語(yǔ)言,集數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制等功能于一體,用于存取數(shù)據(jù)以及查詢(xún)、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)。數(shù)據(jù)庫(kù)的查詢(xún)正是SQL語(yǔ)言的核心內(nèi)容,也是我們最常用的操作。而連接查詢(xún)又是關(guān)系數(shù)據(jù)庫(kù)中最主要的查詢(xún),在實(shí)際中被廣泛應(yīng)用。如何在各行各業(yè)中靈活、科學(xué)地使用數(shù)據(jù)庫(kù)技術(shù),提高工作效率具有很現(xiàn)實(shí)的意義。

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
跨庫(kù)數(shù)據(jù)表的運(yùn)算
MySQL入門(mén)(一)
MSSQL 從一個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)表將數(shù)據(jù)復(fù)制到另一個(gè)數(shù)據(jù)庫(kù)中相同的數(shù)據(jù)表
走向面試之?dāng)?shù)據(jù)庫(kù)基礎(chǔ):二、SQL進(jìn)階之case、子查詢(xún)、分頁(yè)、join與視圖
第12章 多表連接查詢(xún)
數(shù)據(jù)庫(kù)教程-SQL Server多表級(jí)聯(lián)操作
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服