版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
第七章數(shù)據(jù)庫中每個表僅了一部分的數(shù)據(jù)。在許多情況下,單獨使用一個表時無法查詢到所需的數(shù)據(jù)的,這時就需要能從多個表中查詢數(shù)據(jù),就需要使用連接操作。本章將本章主要內(nèi)容:SELECT語句pnumberProjectPaccepter表,也可以使用不同名字的列進行連接,例如使EmployeeidDepartmentmgrid列進行連接。進行連接操作時,用傳統(tǒng)的連接語法:FROM/WHERESQLSQLJOINSELECTFROMTable1name,[Table2name,WHERE[Table1name.]columnoperatorSELECTFROMtable_list/view_list[WHEREconditions]FROM子句中指定了多個表。例如,下面是一個典型的非連接的SELECT語句:SELECTname,sex,id,FROMEmployeeWHEREsalary=而連接語句包含了多個表。例如,查詢部門的負(fù)責(zé)的部門號、名字、id號、及工資,就需要使用連接,因為在Employee表中并沒有誰是什么部門的,的id號在Department表中,連接語句為:SELECTdnumber,name,sex,id,salaryFROMEmployee,DepartmentWHEREid=————6男1男2男3男4男5男SQLSQLJOIN、CROSSJOINNATURALJOIN,用于連接操作。使用JOIN關(guān)鍵字連接的基本格式如下:SELECTFROMTable1name[CROSS|NATURAL]JOINTable2name[ON[Table1name.]columnoperator[Table2name.]column][WHEREconditions]第一行中的select_list仍然是選擇的列的名稱,但是需要注意的是,如果使用兩CROSSNATURAL是可選項,可以使用也可以不使用。如果選擇了CROSS或NATURAL關(guān)鍵字,那么就不能使用ON關(guān)鍵字;CROSSJOINONWHERE子句設(shè)定連接的條件。因為如果不設(shè)定連接條件,將返回表之間的每一種可能組合(即笛卡NATURALJOIN只有在兩個表有相同名稱的列時才能使用,將在同名列上進行連接。因此,不必使用關(guān)鍵字ON或WHERE子句設(shè)定連接條件。當(dāng)然,使用WHERE例如,查詢部門的負(fù)責(zé)的部門號、名字、id號、及工資,可以使用JOIN進行連接:SELECTdnumber,name,sex,id,salaryFROMEmployeeJOINDepartmentONid=————6男1男2男3男4男5男CROSSJOINSELECTdnumber,name,sex,id,salaryFROMEmployeeCROSSJOINDepartmentWHEREid=mgrid雖然Employee表中的id列與Project表中mgrid列的數(shù)據(jù)類型相同,的內(nèi)容也是相同的,但由于創(chuàng)建Project表時將部門id號的列的名稱定義為mgrid,因EmployeeProjectNATURALJOINProject表時將部門id號的列的名稱也定義為id,則可以對這兩個表使用NATURALProject表與Paccepter表中有兩個相同的列pnumber,兩個表中pnumber列的ProjectPaccepterNATURALJOIN關(guān)鍵字SELECTpnumber,accepter,budgetFROMProjectNATURALJOINPaccepterCROSSJOIN、JOINFROM/WHERE實現(xiàn),SELECTSELECTpnumber,accepter,budgetFROMProjectCROSSJOINWHEREProject.pnumber=SELECTpnumber,accepter,budgetFROMProjectJOINPaccepterONProject.pnumber=SELECTpnumber,accepter,budgetFROMProjectPaccepterWHEREProject.pnumber=NATURALJOIN的查詢結(jié)果相同。同時,您可以看到,在這兩個查詢中在pnumber之前使用了表名進行限定,如果不進行限定:SELECTpnumber,accepter,budgetFROMProjectJOINPaccepterONpnumber=兩個pnumber將會產(chǎn)生。因此,在使用多個表時,如果表之間有相同名稱的列,雖然越來越多的數(shù)據(jù)庫系統(tǒng)都支持JOIN關(guān)鍵字的連接操作,但是傳統(tǒng)的FROM/WHERE用法仍然使用的非常普遍,而且為了增加代碼的可移植性傳統(tǒng)的FROM/WHERE用法是可取的。因此,本章中大部分例子仍使用傳統(tǒng)的FROM/WHERE語法,其間也會介紹使用JOIN的語法。進行數(shù)據(jù)庫設(shè)計時,由于一致性(即最小冗余性、方便性及性能的要求,每個表中的列數(shù)必須有限制,而不能將數(shù)據(jù)都在一個表中,因此需要按照規(guī)范化準(zhǔn)則對表進行處理。按照規(guī)范化準(zhǔn)則進行處理后,許多信息將分散在不同的表中,以防止數(shù)據(jù)冗余、更新復(fù)雜等問題的產(chǎn)生。于是,輸入的數(shù)據(jù)將到按照規(guī)范化準(zhǔn)則設(shè)計的各個表中,當(dāng)您希望綜合數(shù)據(jù)進行分析時,就不得不從多個表中組合數(shù)據(jù)。查詢某個工作人員所屬部門的部門,單獨的Employee表或單獨的Department表都使用連接還有一個好處:連接對于結(jié)果沒有特別的限制,具有很大的靈活性。通??梢酝ㄟ^連接創(chuàng)建包含不同表中數(shù)據(jù)的新表或者視圖。這就使得數(shù)據(jù)庫的擴展具有很大靈性例,果用發(fā)需新信息當(dāng)可通向個中加一錄在該列的值均為空值,除非隨后對其進行更新。這時,可以為其建立一個新表,并通過使用適當(dāng)?shù)倪B接以使新的數(shù)據(jù)能方便的與原有數(shù)據(jù)進行連接,當(dāng)然用于連接的列也必須包含在新表中。這樣添加新的數(shù)據(jù)時就不會在原有的表中產(chǎn)生大量空值。先察看Project表中包含的數(shù)據(jù):SELECTpnumber,budgetFROMProject SELECTpnumber,accepterFROMPaccepter aceperpnubrroct表中的nuber也相同。實際上,兩個列的是相同的數(shù)據(jù),都是項目的編號。一般來說,不同表中不過,當(dāng)用來連接的列是主鍵及與其對應(yīng)的外部鍵時,可以獲得良好的連接。在理想的情況下,對數(shù)據(jù)庫中的表進行連接時使用表的主鍵與相應(yīng)外部鍵。因為,設(shè)計數(shù)據(jù)庫時,主鍵與外部鍵在邏輯上就是互相聯(lián)系的,并且主鍵與外部鍵之間具有一致性,會保持主鍵列與外部鍵列在值上的一致。主鍵與外部鍵可以很好的保持?jǐn)?shù)據(jù)庫完整性。創(chuàng)進行連接的列名稱可以不同,除非要使用NATURALJOIN,如果需要使用相同表中的dname列進行連接;接是毫無用處的。例如,雖然Employee表中的name列與Department表中的dname在進行連接時,還應(yīng)該指定連接條件,連接條件的設(shè)定使您可以很方便的進行一些特定的查詢。例如,查找正工作在與項目接收方所在城市相同的工作人員,可以這樣進SELECTname,sex,id,salaryFROMEmployee,PaccepterWHEREEmployee.city=SELECTname,sex,id,salaryFROMEmployeeJOINONEmployee.city=笛卡爾ABC———abcdefbcdDE——deefABCDE—————abcdeabcefdefdedefefbcdde 323*6錄??梢?,兩個表的笛卡爾積是兩個表中所有記錄的所有組合。如果沒有限制連接條件roctaceperSELECTname,sex,id,salaryFROMEmployee,PaccepterABC———abcdefbcdDE——deABCDE—————abcdedefdebcdde進行連接操作時,都是先形成表之間的笛卡爾積,獲得笛卡爾積之后再使用指定的HEE的記錄。正確的指定連接條件和限制條件將有助于產(chǎn)生良好的連接結(jié)果。當(dāng)返回的結(jié)果進行連接,例如,前面介紹的查詢部門的負(fù)責(zé)的部門號、名字、id號、性別及工資,可以使用等號連接Employee表與Department表:SELECTdnumber,name,sex,id,salaryFROMEmployeeJOINDepartmentONid=SELECTdnumber,name,sex,id,salaryFROMEmployee,DepartmentWHEREid=也可以使用大于或小于等其它運算符進行連接操作。例如,查找沒有在規(guī)定時間內(nèi)roctpenddaeceperceaeSELECTpnumber,accepter,penddate,accedateFROMProject,PaccepterWHEREpenddate>accedateANDProject.pnumber=Paccepter.pnumber2001-12-2001-12-2002-04-2002-04-子句中按照兩個表的pnumber列進行相等連接,由于WHERE子句中附加的表達式也可以使用不等式進行連接,與大于連接類似,使用不等式進行連接,通常也需要octpendaeaceperaedaeSELECTpnumber,accepter,penddate,accedateFROMProject,PaccepterWHEREpenddate<>accedateANDProject.pnumber=Paccepter.pnumber2001-12-2001-12-2002-08-2002-08-2002-04-2002-04-WHERE子句限制查找的行。例如,只需要查看項目號小于201的所有項目的項目編號、接收項目成本,就必須使用WHERE子句SELECTpnumber,accepter,bugdetFROMProjectJOINPaccepterONProject.pnumber=Paccepter.pnumberWHEREProject.pnumber<201SELECTpnumber,accepter,bugdetFROMProject,PaccepterWHEREProject.pnumber=Paccepter.pnumberProject.pnumber<
華夏技術(shù) 神州發(fā)展 四海貿(mào)易多表連有的時候您可能需要連接兩個以上的表進行查詢,來獲得一些完整的信息。例如,需要知道工作人員本身以及其所屬的部門和所參與的項目的詳細信息,就需要連接Epoye表、Deparent表、roect表這三個表以得到所需的信息。FROM子句中添加表名,在連接條件中設(shè)定新的連接條Project121728行的組合表。實際情況中,每個表包含的100100萬行的組合表。處理這樣SELECTname,id,dnumber,mgrid,pnumber,grossFROMEmployee,Department,ProjectWHEREdno=dnumberANDpno=pnumber————1111144444455剛55SELECTname,id,dnumber,mgrid,pnumber,grossFROMEmployee,DepartmentONdno=dnumberONpno=就需要對兩個表進行連接。例如,ProjectPaccepter表之間就是一對一關(guān)系,可以通過項目號pnumber進行連接:SELECTpnumber,accepter,budgetFROMProjectJOINPaccepterONProject.pnumber=Paccepter.pnumberWHEREProject.pnumber=102SELECTpnumber,accepter,budgetFROMProjectPaccepterWHEREProject.pnumber=Paccepter.pnumberANDProject.pnumber=102
華夏技術(shù)對于一對多關(guān)系的處理也比較簡單。一對多關(guān)系是一個表中一個記錄可以與另一個表的若干記錄相對應(yīng)。查詢時也可以對兩個表進行連接。例如,部門與工作人員之間就SELECTname,id,dnumber,mgridFROMEmployeeJOINDepartmentONdno=dnumberWHEREname=’SELECTname,id,dnumber,mgridFROMEmployee,DepartmentWHEREdno=dnumberANDname=’’————1對于多對多關(guān)系,由于無法直接對具有多對多關(guān)系的兩個表進行連接實現(xiàn),則必須使用創(chuàng)建數(shù)據(jù)庫時專門為多對多關(guān)系創(chuàng)建的連接表來實現(xiàn)。因此,需要使用包含三個表的連接來組合數(shù)據(jù)。例如,一個部門可以同時進行一個或多個項目,而一個項目可能也需要多個部門的配合才能很好的完成。也就是說,部門與項目間存在著多對多的關(guān)系??梢酝ㄟ^連接表來實現(xiàn)部門與項目的連接:SELECTdnumber,mgrid,pnumberFROMDepartmentJOINDep_proONDepartment.dnumber=Dep_pro.dnumberProjectJOINDep_proONProject.pnumber=Dep_pro.pnumberWHEREProject.pnumber=301SELECTdnumber,mgrid,FROMWHEREDepartment.dnumber=Dep_pro.dnumberANDProject.pnumber=Dep_pro.pnumberANDProject.pnumber=301145 列表中列出需要返回的列。如果使用“*”包含所有的列,那么顯示時列將按照創(chuàng)建表時指定的順序顯示。例EpoyeDeparentSLET列表種使用了“*”,返回的結(jié)果是難以忍受的:SELECTFROMEmployeeJOINDepartmentONdno=dnumberWHEREname=’SELECTFROMEmployee,DepartmentWHEREdno=dnumberANDname=’ —
———1977-04-an女44 2001-1-本例中僅列出了一行,結(jié)果已經(jīng)是很晦澀了。如果查詢返回的是20行,甚至的時候,返回的結(jié)果幾乎無法閱讀。因此,在使用時需要注意“*”的使用,不恰當(dāng)?shù)厥褂脤斐珊艽蟮牟槐?。進行連接時,應(yīng)該仔細選擇需要查看的列。EmployeednoDepartmentdnumber列連接,顯示結(jié)果SELECTname,salary,dno,dnumberFROMEmployeeJOINDepartmentONdno=WHEREsalary=SELECTname,salary,dno,dnumberFROMEmployee,DepartmentWHEREdno=dnumberANDsalary=22115511剛55332233SELECT列表中使用一個列即可。如,上面的查詢可SELECTname,salary,dnumberFROMEmployeeJOINDepartmentONdno=dnumberWHEREsalary=SELECTname,salary,dnumberFROMEmployee,DepartmentWHEREdno=dnumberANDsalary=2151剛5323在進行連接時,也可以為表或列創(chuàng)建別名以方便使用或使顯示結(jié)果更加清晰。特別是表中有相同名稱的列時,別名的使用可以使代碼更易于輸入,且更易于閱讀。例如,ProectPacceperpnuber所以需要進行限定以防止:SELECTpnumber,accepter,pmgridFROMProjectJOINPaccepterONProject.pnumber=WHEREProject.pnumber=SELECTpnumber,accepter,pmgridFROMProject,PaccepterWHEREProject.pnumber=Paccepter.pnumberANDProject.pnumber=102如果項目接收方也有對應(yīng)項目的,且創(chuàng)建Pa eter表時,也命名為pmgrid,SELECTpnumber,accepter,Project.pmgridFROMProjectJOINPaccepterONProject.pnumber=Paccepter.pnumberWHEREProject.pnumber=102SELECTpnumber,accepter,Project.pmgridFROMProject,PaccepterWHEREProject.pnumber=Paccepter.pnumberANDProject.pnumber=102使用這么長的表名進行限定時比較麻煩的,也使得代碼不是非常清晰。可以為表創(chuàng)建別名便于代碼的書寫,也可以為列創(chuàng)建別名以使顯示結(jié)果清晰易讀。例如,上例可以SELECTpnumber,accepter,Paccepter.pmgridASAc FROMProjectpJOINPaccepteraONp.pnumber=a.pnumberWHEREp.pnumber=102SELECTpnumber,accepter,Paccepter.pmgridASAc FROMProjectp,PaccepteraWHEREp.pnumber=a.pnumberAND
華夏技術(shù)10015NULL時,NULL將不會參與連接,即使兩個表的連接列都存在NULL,連接結(jié)果也不會存在NULL。因為,空值代表的是未知、丟失或不可例如,Employeecity列記錄的是工作人員正在工作的城市,該列允許空值,在citycity列包含SELECTname,city,pnoFROMEmployeeWHEREpno同樣,Paccepter表中city列也可能由于出現(xiàn)了空值(假設(shè)項目號為102301citySELECTpnumber,accepter,cityFROMPaccepterSELECTname,city,pnumber,accepterFROMEmployeee,PaccepteraWHEREe.city=a.cityANDpno=pnumberANDcityNOTIN(’’,’104與301員正在城市“杭州”或“廈門”工作。Empoee中名為“”的工作人員參與了301cycy詢結(jié)果可以看出,雖然符合設(shè)定的其它條件,但是并沒有進行連接操作??梢?,連接操接著,使用WHERE子句從形成的笛卡爾積中去除所有不符合限制條件的行。這時SELECT子句還沒有進行執(zhí)行,因此,連接表形成的笛卡爾積中包含了用于連接的WHERESELECT列表中的列的原WHEREGROUPBYBY子句中指定的列對剩下的行進行分組。雖然,這時SELECT子句還沒有執(zhí)行,但是如果SELECT列表中包含了函數(shù)將會對分好的組進行計算。HAVING子句,將使用其設(shè)定的條件對分組結(jié)果進行刪除,ORDERBYORDERBY子句指定的列進行排序顯示出來。一般的一般的連接通常通過兩個表中的某個特定的列進行連接。最通常使用的是相等連接,當(dāng)然也可以使用大于連接、小于連接等。例如,EployePacceper表中都包含cycySQL語句進行連接:SELECTname,city,pnumber,accepterFROMEmployeee,PaccepteraWHEREe.city=a.cityANDpno=pnumber剛CESA.自然連使用WHERE子句限制查找的行仍然是可以的。使用傳統(tǒng)的FROM/WHERE子句,則需要在WHERE子句中指定連接列的相等條件。例如,ProjectPaccepterpnumberProjectPaccepterSELECTpnumber,accepter,FROMProjectpNATURALJOINPaccepterSELECTpnumber,accepter,pmgridFROMProjectp,PaccepteraWHEREp.pnumber=a.pnumber自連有的時候需要進行一些特殊的操作,例如,查詢項目接收方在同一個城市的項目,于roect表中并沒有項目接收方所在城市的信息,無法得到項目接收方的信息,而acceper表中了項目接收方所在城市的信息,那么如何得到處于同一個城市的所有項目的信息呢?當(dāng)然,可以使用子查詢來實現(xiàn),子查詢將在下一章中介紹。但是,使用子查詢比較麻煩。SQL支持了自連接可以很好的完成這樣的操作。例如,如果不為表設(shè)定別名,對Paccepter表進行自連接:SELECTPaccepter.accepter,Paccepter.city,Paccepter.accepter,Paccepter.cityFROMPaccepter,Paccepter由于Pacceptercity列進行自連接時產(chǎn)生的結(jié)果太多,因此設(shè)定只對city列SELECTpnumber,accepter,cityFROMPaccepter SELECTa1.accepter,a1.city,a2.accepter,a2.cityFROMPacceptera1,Pacceptera2WHEREa1.city=a2.cityANDa1.cityIN(’杭州’,’’)———由于在自連接時沒有設(shè)定限制條件,所以行與其自身產(chǎn)生了連接,造成了結(jié)果的大量重復(fù),使得顯示結(jié)果很不清晰。因此,需要為其加上不等條件保證行不與其自身相連SELECTDISTINCTa1.accepter,a1.city,a2.accepter,a2.cityFROMPacceptera1,Pacceptera2WHEREa1.city=a2.cityANDa1.acceptera2.accepterANDa1.cityIN(’杭州’,’’)———藍科通訊公杭州漢升咨詢公司杭藍科通訊公杭州貿(mào)易公司杭漢升咨詢公杭州藍科通訊公司杭漢升咨詢公杭州貿(mào)易公司杭貿(mào)易公司杭州藍科通訊公司杭貿(mào)易公司杭州漢升咨詢公司杭化天通訊公汽修公司化天通訊公汽修公司東勝東勝汽修公司化天通訊公司東勝化天通訊公司東勝汽修公司DISTINCT關(guān)鍵字用于去除重復(fù)。避許多公司中可能還Employee表中為每個工作人員其上司的id號,增加一個leader列用來上司的id號。那么就可以對Employee表進行自連接,以查找員工SELECT,e1.id,ASleader,e2.idASleaderidFROMEmployeee1,Employeee2WHEREe1.leader=外連是外連接的作用。使用外連接可以方便的在連接結(jié)果中包含某個表中的其它記錄。SQL中提供了兩個關(guān)鍵字:LEFTOUTERJOINRIGHTOUTERJOIN。LEFTOUTERJOIN關(guān)鍵字使外連接顯示LEFTOUTERJOIN左側(cè)的表包含的所有記錄。而RIGHTOUTERJOIN關(guān)鍵字則使外連接顯示RIGHTOUTERJOIN右側(cè)的表所包含的所有記錄。LEFTOUTER要顯示工作人員的信息及其參與的項目的信息,可以對EmployeeProject表進行連連接進行查詢,可以這樣使用LEFTOUTERJOIN:SELECTname,id,pnumber,pmgridFROMEmployeeLEFTOUTERJOINProjectONpno=pnumber剛LEFTOUTERJOINEmployeeProject表中記錄連接的值,都將在結(jié)果中包含Employee表中的所有記錄,對于沒有連接值的記錄其對應(yīng)的Project表中的列顯示為空值。在不同的數(shù)據(jù)庫產(chǎn)品中,LEFTOUTERJOIN的實現(xiàn)可能會有所不同。例如,Oracle中在需要顯示所有記錄的表之后使用一個加號來實現(xiàn),如上例在Oracle中可以這樣編SELECTname,id,pnumber,pmgridFROMEmployee,ProjectONpno(+)=T-SQL“*”號來實現(xiàn),如上例應(yīng)該這SELECTname,id,pnumber,pmgridFROMEmployee,ProjectWHEREpno*=RIGHTOUTER表包含的所有記錄。如SQL語句:SELECTname,id,pnumber,FROMEmployeeRIGHTOUTERJOINProjectONpno=pnumberProjectEmployee表中的記錄。返剛RIGHTOUTERJOIN告訴系統(tǒng),無論Project表中的記錄是否有一個可以與Employee表中記錄連接的值,都將在結(jié)果中包含Project表中的所有記錄,對于沒有連接值的記錄其對應(yīng)的Employee表中的列顯示為空值。在不同的數(shù)據(jù)庫產(chǎn)品中,RIGHTOUTERJOIN的實現(xiàn)可能會有所不同。例如,上例在Oracle中可以這樣編寫:SELECTname,id,pnumber,pmgridFROMEmployee,ProjectONpno=SELECTname,id,pnumber,pmgridFROMEmployee,ProjectWHEREpno=*FULLOUTER如果您希望在連接結(jié)果中列出連接的兩個表中包含的所有記錄,則可以使用SQLFULLOUTERJOIN關(guān)鍵字。FULLOUTERJOINLEFTOUTERJOIN與RIGHTOUTERJOIN的結(jié)果。EmployeeProjectFULLOUTERSELECTFROMEmployeeFULLOUTERJOINProjectONpno=pnumberLEFTOUTERJOIN24RIGHTOUTERJOIN23FULLOUTERJOIN32行。可見,查詢結(jié)果在包含可以EmployeeProject表中沒有對應(yīng)值的記錄,也將ProjectEmployeeLEFTOUTERJOIN與RIGHTOUTERJOIN的結(jié)合。在SQL2中連接表是不可更新的。也就是說,基于連接表形成的視圖不能使用DELETE、INSERT、UPDATE語句進行操作。但是,SQL3中基于連接表形成的視圖是FULLOUTERJOIN形成的視圖,Employee9列,Project表有7列,INSERT操作有三種可能的情況:97列都是空值,INSERT79Employee表中。INSERT添加的新記錄就添加在Employee表中;97Project表中。INSERTDELETEUPDATE操作,也有上述的一些可能情況,具體的使用請參看視WHEREEmployee表與Project表進行RIGHTOUTERJOIN,同時加上限制條件,希望工作人員的工資高于3000.00元,可以這樣使用SQL語句:SELECTname,id,pnumber,FROMEmployeeRIGHTOUTERJOINProjectONpno=pnumberANDsalary>IHTOUTERJOIN符合條件的工作人員的值將顯示為空值。如果單獨使用條件進行普通連接,而不是外部連接:SELECTname,id,pnumber,pmgridFROMEmployeeJOINProjectONpno=WHEREsalary>SELECTname,id,pnumber,pmgridFROMEmployee,ProjectWHEREpno=pnumberANDsalary> 語句的結(jié)果可以看作是一個集合,這樣就可以使用集合運算符對UNION將多個查詢的結(jié)果組合到一個查詢結(jié)果中。默認(rèn)的情況下,UNION將刪MINUS返回在一個查詢結(jié)果中存在,而不在另一個查詢結(jié)果中存在的行,即兩UNONUNOIN運算是集合運算中應(yīng)用的最多的,得到了廣泛的支持。UNION運算可以從多個表中組合數(shù)據(jù)進行顯示,但是與連接不同,UNION不是在FROM子句中添加多個表并指定連接條件實現(xiàn),而是通過將多個查詢的結(jié)果結(jié)合到一起實現(xiàn)的。使用UNIONSELECTFROMtable_list/view_list[WHEREconditions]UNIONSELECTFROMtable_list/view_list[WHEREconditions]這樣使用UNION:SELECTid,name,cityFROMEmployeeWHEREcityIN(’杭州’,’廈門’)SELECTpnumber,accepter,cityFROMPaccepterWHEREcityIN(’杭州’,’廈門由于兩個查詢結(jié)果都包含三個列,而且對應(yīng)列的數(shù)據(jù)類型相同,id與pumber都為整數(shù)類型,nameacceptercity也都是字符串類型。因此,對這兩個查詢結(jié)果進行UNION運算是可以的。運算結(jié)果為: ————從查詢結(jié)果可以看出,顯示時列的名稱用的是第一個查詢列出的列的名稱。同時,EploeeacceperSELET列表中的列按照從左到右的順序自動進UNION運算符的位置無關(guān)。UNIONSELECTid,nameFROMEmployeeWHEREcityIN(’杭州’,’廈門’)SELECTpnumber,accepter,cityFROMPaccepterWHEREcityIN(’杭州’,’廈門SELECTid,birthday,cityFROMEmployeeWHEREcityIN(’杭州’,’廈門’)SELECTpnumber,pmgrid,cityFROMPaccepterWHEREcityIN(’杭州’,’廈門brhdypgrd是屬子數(shù)據(jù)類型的,二者不能兼容,因此產(chǎn)生了錯誤。在使用集合運算符時,一定要注意列的數(shù)目相等,且對應(yīng)列相互兼容這兩個條件。而下面的查詢雖然符合條件,不會產(chǎn)生錯SELECTid,birthday,cityFROMEmployeeWHEREcityIN(’杭州’,’廈門’)SELECTpnumber,accedate,cityFROMPaccepterWHEREcityIN(’杭州’,’廈門—2001-05-2002-02-2002-04-2003-01-birthdayUNION運ORDERBYORDERBY子句對查詢結(jié)果進行排序,以增強查詢結(jié)果的可讀性。集合運算的每個查詢都可以有自己的WHERE子句,但是整ORDERBYORDERBY子句應(yīng)該放在集合運結(jié)果按照city列進行排序,可以這樣使用UNION:SELECTidASnumber,name,cityFROMEmployeeWHEREcityIN(’杭州’,’廈門’)SELECTpnumber,accepter,cityFROMPaccepterWHEREcityIN(’杭州’,’廈門’)ORDERBYcityALL僅僅使用UNION時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版苗圃苗木線上線下銷售渠道合作協(xié)議4篇
- 2025年度個人房產(chǎn)抵押貸款還款協(xié)議書模板4篇
- 2025年度航空航天模具研發(fā)制造合同4篇
- 二零二五版豪華車型購車指標(biāo)使用權(quán)租賃協(xié)議3篇
- 2025年物業(yè)廣告位租賃與環(huán)保理念推廣合作協(xié)議3篇
- 2025版企業(yè)內(nèi)部員工技能培訓(xùn)學(xué)員協(xié)議3篇
- 2025年環(huán)保打印機購銷合同綠色環(huán)保版4篇
- 個人招標(biāo)工作心得:2024年實踐與思考3篇
- 二零二五年度航空器租賃合同租賃期限與維護保養(yǎng)責(zé)任4篇
- 2025年農(nóng)業(yè)大棚租賃與智能灌溉系統(tǒng)安裝合同4篇
- 開展課外讀物負(fù)面清單管理的具體實施舉措方案
- 2025年云南中煙工業(yè)限責(zé)任公司招聘420人高頻重點提升(共500題)附帶答案詳解
- 2025-2030年中國洗衣液市場未來發(fā)展趨勢及前景調(diào)研分析報告
- 2024解析:第三章物態(tài)變化-基礎(chǔ)練(解析版)
- 2023年江蘇省南京市中考化學(xué)真題
- 供電副所長述職報告
- 校園欺凌問題成因及對策分析研究論文
- 技術(shù)支持資料投標(biāo)書
- 老年人意外事件與與預(yù)防
- 預(yù)防艾滋病、梅毒和乙肝母嬰傳播轉(zhuǎn)介服務(wù)制度
- 《高速鐵路客運安全與應(yīng)急處理》課程標(biāo)準(zhǔn)
評論
0/150
提交評論