MySQL數(shù)據(jù)庫(kù)教程(微課版第2版) 課件全套 鄭阿奇 第1-9章 MySQL初步- MySQL事務(wù)管理_第1頁(yè)
MySQL數(shù)據(jù)庫(kù)教程(微課版第2版) 課件全套 鄭阿奇 第1-9章 MySQL初步- MySQL事務(wù)管理_第2頁(yè)
MySQL數(shù)據(jù)庫(kù)教程(微課版第2版) 課件全套 鄭阿奇 第1-9章 MySQL初步- MySQL事務(wù)管理_第3頁(yè)
MySQL數(shù)據(jù)庫(kù)教程(微課版第2版) 課件全套 鄭阿奇 第1-9章 MySQL初步- MySQL事務(wù)管理_第4頁(yè)
MySQL數(shù)據(jù)庫(kù)教程(微課版第2版) 課件全套 鄭阿奇 第1-9章 MySQL初步- MySQL事務(wù)管理_第5頁(yè)
已閱讀5頁(yè),還剩403頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第1章MySQL初步——數(shù)據(jù)庫(kù)和數(shù)據(jù)模型MySQL教程(第2版)01數(shù)據(jù)庫(kù)系統(tǒng)1.?dāng)?shù)據(jù)庫(kù)2.?dāng)?shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)一般由數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)、應(yīng)用系統(tǒng)、數(shù)據(jù)庫(kù)管理員和用戶構(gòu)成。DBMS是數(shù)據(jù)庫(kù)系統(tǒng)的基礎(chǔ)和核心。如圖。數(shù)據(jù)庫(kù)系統(tǒng)1.?dāng)?shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的倉(cāng)庫(kù)。是一個(gè)可長(zhǎng)期存儲(chǔ)在計(jì)算機(jī)內(nèi)的、有組織的、可共享的、統(tǒng)一管理的大量數(shù)據(jù)的集合。2.?dāng)?shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)是數(shù)據(jù)庫(kù)系統(tǒng)的核心組成部分,主要完成對(duì)數(shù)據(jù)庫(kù)的操作與管理功能,實(shí)現(xiàn)數(shù)據(jù)庫(kù)對(duì)象的創(chuàng)建、數(shù)據(jù)庫(kù)存儲(chǔ)數(shù)據(jù)的查詢、添加、修改與刪除操作和數(shù)據(jù)庫(kù)的用戶管理、權(quán)限管理等。02數(shù)據(jù)模型1.層次模型2.網(wǎng)狀模型3.關(guān)系模型數(shù)據(jù)模型1.層次模型將數(shù)據(jù)組織成一對(duì)多關(guān)系的結(jié)構(gòu),用樹形結(jié)構(gòu)表示實(shí)體及實(shí)體間的聯(lián)系

。如圖為按層次模型組織的數(shù)據(jù)示例。數(shù)據(jù)模型2.網(wǎng)狀模型用連接指令或指針來(lái)確定數(shù)據(jù)間的網(wǎng)狀連接關(guān)系,是具有多對(duì)多類型的數(shù)據(jù)組織方式。如圖為按網(wǎng)狀模型組織的數(shù)據(jù)示例。數(shù)據(jù)模型3.關(guān)系模型以記錄組或數(shù)據(jù)表的形式組織數(shù)據(jù),以便于利用各種實(shí)體與屬性之間的關(guān)系進(jìn)行存儲(chǔ)和變換,不分層也無(wú)指針,是建立空間數(shù)據(jù)和屬性數(shù)據(jù)之間關(guān)系的一種非常有效的數(shù)據(jù)組織方法

。例如,網(wǎng)上商城管理系統(tǒng)所涉及的商品類別、商品、供貨商、用戶、訂單、訂單項(xiàng)等表中,其中商品表主要信息包括商品編號(hào)、商品名稱、價(jià)格、庫(kù)存量和商品圖片等,部分?jǐn)?shù)據(jù)如表。商品編號(hào)商品名稱價(jià)格庫(kù)存量1A0101洛川紅富士蘋果冰糖心10斤箱裝44.8036011A0201煙臺(tái)紅富士蘋果10斤箱裝29.8056981A0302阿克蘇蘋果冰糖心5斤箱裝29.80126801B0501庫(kù)爾勒香梨10斤箱裝69.8089021B0601碭山梨10斤箱裝大果19.90145321B0602碭山梨5斤箱裝特大果16.9068341GA101智利車?yán)遄?斤大櫻桃整箱順豐包郵59.8054202A1602[王明公]農(nóng)家散養(yǎng)豬冷凍五花肉3斤裝118.003752B1701Tyson/泰森雞胸肉454g*5去皮冷凍包郵139.0016822B1702[周黑鴨]鹵鴨脖15g*50袋99.0059633BA301波士頓龍蝦特大鮮活1斤149.0028003C2205[參王朝]大連6-7年深海野生干海參1188.0012034A1601農(nóng)家散養(yǎng)草雞蛋40枚包郵33.906904C2402青島啤酒500ml*24聽整箱112.0023427數(shù)據(jù)模型隨著數(shù)據(jù)庫(kù)應(yīng)用領(lǐng)域的進(jìn)一步拓展與深入,對(duì)象數(shù)據(jù)、空間數(shù)據(jù)、圖像與圖形數(shù)據(jù)、聲音數(shù)據(jù)、關(guān)聯(lián)文本數(shù)據(jù)及海量倉(cāng)庫(kù)數(shù)據(jù)等出現(xiàn),為了適應(yīng)應(yīng)用需要,數(shù)據(jù)模型向下列幾個(gè)發(fā)展。對(duì)傳統(tǒng)關(guān)系模型的擴(kuò)充,以實(shí)現(xiàn)關(guān)系模型嵌套,支持關(guān)系繼承及關(guān)系函數(shù)等。(1)(2)XML從數(shù)據(jù)交換領(lǐng)域發(fā)展到了數(shù)據(jù)存儲(chǔ)與業(yè)務(wù)描述領(lǐng)域,數(shù)據(jù)庫(kù)系統(tǒng)都已支持對(duì)XML的存儲(chǔ)與處理。(3)研究新的數(shù)據(jù)模型,在數(shù)據(jù)構(gòu)造器與數(shù)據(jù)處理原語(yǔ)上都有了新的突破。(4)用面向?qū)ο蟮乃季S方式與方法來(lái)描述客觀實(shí)體,支持面向?qū)ο蠼?,支持?duì)象存取與持久化,支持代碼級(jí)面向?qū)ο髷?shù)據(jù)操作,成為面向?qū)ο髷?shù)據(jù)模型。第1章MySQL初步——數(shù)據(jù)庫(kù)設(shè)計(jì)01概念模型1.一對(duì)一的聯(lián)系(1∶1)2.一對(duì)多的聯(lián)系(1∶n)3.多對(duì)多的聯(lián)系(m∶n)概念模型概念模型用于信息世界的建模,最常用的是E-R模型、擴(kuò)充的E-R模型、面向?qū)ο竽P图爸^詞模型。通常,E-R模型把每一類數(shù)據(jù)對(duì)象的個(gè)體稱為“實(shí)體”,而每一類對(duì)象個(gè)體的集合稱為“實(shí)體集”,例如,在網(wǎng)上商城管理系統(tǒng)中主要涉及“商品”、“供貨商”和“用戶”等多個(gè)實(shí)體集。如果用矩形框表示實(shí)體集,用帶橢圓框表示屬性,用線段連接實(shí)體集與屬性,當(dāng)一個(gè)屬性或?qū)傩越M合指定為主碼時(shí),在實(shí)體集與屬性的連接線上標(biāo)記一斜線,則可以用如圖的形式描述網(wǎng)上商城管理系統(tǒng)中的實(shí)體集及每個(gè)實(shí)體集涉及的屬性。概念模型1.一對(duì)一的聯(lián)系(1∶1)A中的一個(gè)實(shí)體至多與B中的一個(gè)實(shí)體相聯(lián)系,B中的一個(gè)實(shí)體也至多與A中的一個(gè)實(shí)體相聯(lián)系。例如,“用戶”與“收件人”這兩個(gè)實(shí)體集之間的聯(lián)系是一對(duì)一的聯(lián)系,因?yàn)橐粋€(gè)用戶對(duì)應(yīng)一個(gè)收件人,反過(guò)來(lái),一個(gè)收件人對(duì)應(yīng)一個(gè)用戶,“用戶”與“收件人”兩個(gè)實(shí)體集的E-R模型如圖。2.一對(duì)多的聯(lián)系(1∶n)A中的一個(gè)實(shí)體可以與B中的多個(gè)實(shí)體相聯(lián)系,而B中的一個(gè)實(shí)體至多與A中的一個(gè)實(shí)體相聯(lián)系。例如,“供貨商”與“商品”這兩個(gè)實(shí)體集之間的聯(lián)系是一對(duì)多的聯(lián)系,因?yàn)橐粋€(gè)供貨商戶可提供若干商品,反過(guò)來(lái),一個(gè)特定商品只能屬于一個(gè)供貨商?!肮┴浬獭迸c“商品”兩個(gè)實(shí)體集的E-R模型如圖。概念模型3.多對(duì)多的聯(lián)系(m∶n)A中的一個(gè)實(shí)體可以與B中的多個(gè)實(shí)體相聯(lián)系,而B中的一個(gè)實(shí)體也可與A中的多個(gè)實(shí)體相聯(lián)系。例如,“用戶”與“商品”這兩個(gè)實(shí)體集之間的聯(lián)系是多對(duì)多的聯(lián)系,因?yàn)橐粋€(gè)用戶可購(gòu)買多個(gè)商品,反過(guò)來(lái),一個(gè)商品可被多個(gè)用戶購(gòu)買?!坝脩簟迸c“商品”兩個(gè)實(shí)體集的E-R模型如圖。概念模型實(shí)際應(yīng)用中,用戶訂貨產(chǎn)生訂單,在訂單中下單對(duì)應(yīng)商品,并確定數(shù)量。如圖。02邏輯模型1.(1∶1)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換2.(1∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換3.(m∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換邏輯模型1.(1∶1)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對(duì)于(1∶1)的聯(lián)系,既可單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,也可以不單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式。聯(lián)系單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,則由聯(lián)系屬性、參與聯(lián)系的各實(shí)體集的主碼屬性構(gòu)成關(guān)系模式,聯(lián)系不單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,聯(lián)系的屬性及一方的主碼加入另一方實(shí)體集對(duì)應(yīng)的關(guān)系模式中。其主碼可選參與聯(lián)系的實(shí)體集的任一方的主碼。2.(1∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對(duì)于(1∶n)的聯(lián)系,既可單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,也可以不單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式。聯(lián)系單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,則由聯(lián)系的屬性、參與聯(lián)系的各實(shí)體集的主碼屬性構(gòu)成關(guān)系模式,n端的主碼作為該關(guān)系模式的主碼。聯(lián)系不單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,則將聯(lián)系的屬性及1端的主碼加入n端實(shí)體集對(duì)應(yīng)的關(guān)系模式中,主碼仍為n端的主碼。3.(m∶n)聯(lián)系的E-R圖到關(guān)系模式的轉(zhuǎn)換對(duì)于(m∶n)的聯(lián)系,單獨(dú)對(duì)應(yīng)一個(gè)關(guān)系模式,該關(guān)系模式包括聯(lián)系的屬性、參與聯(lián)系的各實(shí)體集的主碼屬性,該關(guān)系模式的主碼由各實(shí)體集的主碼屬性共同組成。03物理模型物理模型物理模型是面向計(jì)算機(jī)物理表示的模型,描述了數(shù)據(jù)在儲(chǔ)存介質(zhì)上的組織結(jié)構(gòu),它不但與具體的DBMS有關(guān),而且還與操作系統(tǒng)和硬件有關(guān)。每一種邏輯數(shù)據(jù)模型在實(shí)現(xiàn)時(shí)都有其對(duì)應(yīng)的物理數(shù)據(jù)模型。DBMS為了保證其獨(dú)立性與可移植性,大部分物理數(shù)據(jù)模型的實(shí)現(xiàn)工作由系統(tǒng)自動(dòng)完成,而設(shè)計(jì)者只設(shè)計(jì)索引、聚集等特殊結(jié)構(gòu)。第1章MySQL初步——數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)01數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)結(jié)構(gòu)1.B/S架構(gòu)的應(yīng)用系統(tǒng)2.C/S架構(gòu)的應(yīng)用系統(tǒng)3.移動(dòng)客戶端APP數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)結(jié)構(gòu)1.B/S架構(gòu)的應(yīng)用系統(tǒng)基于Web的數(shù)據(jù)庫(kù)應(yīng)用采用三層(瀏覽器/Web服務(wù)器/數(shù)據(jù)庫(kù)服務(wù)器)模式,也稱B/S架構(gòu),如圖。2.C/S架構(gòu)的應(yīng)用系統(tǒng)C/S架構(gòu)的應(yīng)用系統(tǒng)要求客戶端上安裝應(yīng)用程序。應(yīng)用程序與數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)管理系統(tǒng)之間的關(guān)系如圖。3.移動(dòng)客戶端APP移動(dòng)客戶端APP應(yīng)用非常流行,但從結(jié)構(gòu)上仍然可認(rèn)為是C/S結(jié)構(gòu)。普通的C/S結(jié)構(gòu)的數(shù)據(jù)庫(kù)應(yīng)用程序安裝在PC機(jī)上,而移動(dòng)客戶端APP安裝在移動(dòng)端(手機(jī))上。02應(yīng)用系統(tǒng)的數(shù)據(jù)接口1.ODBC數(shù)據(jù)庫(kù)接口2.ADO.NET數(shù)據(jù)庫(kù)接口3.JDBC數(shù)據(jù)庫(kù)接口4.WebService應(yīng)用系統(tǒng)的數(shù)據(jù)接口1.ODBC數(shù)據(jù)庫(kù)接口ODBC即開放式數(shù)據(jù)庫(kù)互連(OpenDataBaseConnectivity),是微軟公司推出的一種實(shí)現(xiàn)應(yīng)用程序和關(guān)系數(shù)據(jù)庫(kù)之間通信的接口標(biāo)準(zhǔn)。符合該標(biāo)準(zhǔn)的數(shù)據(jù)庫(kù)就可以通過(guò)SQL語(yǔ)句編寫的程序?qū)?shù)據(jù)庫(kù)進(jìn)行操作,但只針對(duì)關(guān)系數(shù)據(jù)庫(kù)。ODBC本質(zhì)上是一組數(shù)據(jù)庫(kù)訪問(wèn)API(應(yīng)用程序編程接口),由一組函數(shù)調(diào)用組成,核心是SQL語(yǔ)句。2.ADO.NET數(shù)據(jù)庫(kù)接口ADO.NET提供了面向?qū)ο蟮臄?shù)據(jù)庫(kù)視圖,并且在其對(duì)象中封裝了許多數(shù)據(jù)庫(kù)屬性和關(guān)系。最重要的是,它通過(guò)多種方式封裝和隱藏了很多數(shù)據(jù)庫(kù)訪問(wèn)的細(xì)節(jié)。可以完全不知道對(duì)象在與ADO.NET對(duì)象交互,也不用擔(dān)心數(shù)據(jù)移動(dòng)到另一個(gè)數(shù)據(jù)庫(kù)或者從另一個(gè)數(shù)據(jù)庫(kù)獲得數(shù)據(jù)等細(xì)節(jié)問(wèn)題。如圖顯示了通過(guò)ADO.NET訪問(wèn)數(shù)據(jù)庫(kù)的接口模型。應(yīng)用系統(tǒng)的數(shù)據(jù)接口3.JDBC數(shù)據(jù)庫(kù)接口通過(guò)JDBC對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)包括4個(gè)主要組件:Java應(yīng)用程序、JDBC驅(qū)動(dòng)器管理器、驅(qū)動(dòng)器和數(shù)據(jù)源。在JDBCAPI中有兩層接口:應(yīng)用程序?qū)雍万?qū)動(dòng)程序?qū)?。前者使開發(fā)人員可以通過(guò)SQL調(diào)用數(shù)據(jù)庫(kù)和取得結(jié)果,后者處理與具體數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序的所有通信。使用JDBC接口操作數(shù)據(jù)庫(kù)有如下優(yōu)點(diǎn):(1)JDBCAPI與ODBC十分相似,有利于用戶理解。使編程人員從復(fù)雜的驅(qū)動(dòng)器調(diào)用命令和函數(shù)中解脫出來(lái),而致力于應(yīng)用程序功能的實(shí)現(xiàn)。JDBC支持不同的關(guān)系數(shù)據(jù)庫(kù),增強(qiáng)了程序的可移植性。(2)(3)應(yīng)用系統(tǒng)的數(shù)據(jù)接口4.WebServiceWebService能使得運(yùn)行在不同機(jī)器上的不同應(yīng)用無(wú)須借助附加的、專門的第三方軟件或硬件,就可相互交換數(shù)據(jù)或集成。它是自描述、自包含的可用網(wǎng)絡(luò)模塊,并可以執(zhí)行具體的業(yè)務(wù)功能。WebService也很容易部署,為整個(gè)企業(yè)甚至多個(gè)組織之間的業(yè)務(wù)流程的集成提供了一個(gè)通用機(jī)制。第1章MySQL初步——MySQL數(shù)據(jù)庫(kù)01MySQL安裝運(yùn)行1.MySQL安裝2.MySQL運(yùn)行MySQL安裝運(yùn)行1.MySQL安裝目前常用的MySQL版本為MySQL5.6、MySQL5.7和MySQL8.0。本書介紹的MySQL基本內(nèi)容均適用于上述版本。可通過(guò)MySQL官方網(wǎng)站上免費(fèi)下載MySQL的安裝包,在安裝MySQL前,請(qǐng)確保系統(tǒng)中安裝了相應(yīng)版本的Microsoft.NETFramework。初學(xué)者可按照默認(rèn)選項(xiàng)進(jìn)行安裝,系統(tǒng)會(huì)根據(jù)設(shè)備配置情況自動(dòng)安裝。MySQL安裝運(yùn)行2.MySQL運(yùn)行(1)啟動(dòng)MySQL服務(wù)。安裝配置完成后,打開Windows任務(wù)管理器,可以看到MySQL服務(wù)進(jìn)程mysqld.exe已經(jīng)啟動(dòng),如圖。MySQL安裝運(yùn)行(2)登錄MySQL數(shù)據(jù)庫(kù)。進(jìn)入Windows命令行,輸入:C:\...>cdMySQL安裝目錄\bin進(jìn)入MySQL可執(zhí)行程序目錄,再輸入:MySQL安裝目錄\bin>mysql-uroot-p按“Enter”鍵后,系統(tǒng)提示下列信息,輸入root用戶密碼““”njnu123456:Enterpassword:njnu123456顯示歡迎信息后出現(xiàn)下列提示符:mysql>表示進(jìn)入MySQL的命令行模式,在命令行提示符“mysql>”后輸入“quit”,可退出MySQL命令行回到操作系統(tǒng)狀態(tài)。MySQL安裝運(yùn)行(3)設(shè)置MySQL中文字符集編碼。查看當(dāng)前連接系統(tǒng)的字符集參數(shù):showvariableslike'char%';將數(shù)據(jù)庫(kù)和服務(wù)器的字符集均設(shè)置為gbk(中文):setcharacter_set_database='gbk';setcharacter_set_server='gbk';查看字符集設(shè)置后的結(jié)果:status;(4)為了在操作MySQL時(shí)防止由于不同操作系統(tǒng)默認(rèn)的權(quán)限差異而不能使用某些功能,建議初學(xué)者使用下列命令設(shè)置操作權(quán)限:usemysql;grantallprivilegeson*.*to‘root’@’%’identifiedby‘njnu123456’withgrantoption;flushprivileges;02MySQL常用界面工具1.圖形化客戶端2.基于Web的管理工具M(jìn)ySQL常用界面工具1.圖形化客戶端圖形化客戶端這類工具采用C/S架構(gòu),用戶通過(guò)安裝在桌面計(jì)算機(jī)上的客戶端軟件連接并操作后臺(tái)的MySQL數(shù)據(jù)庫(kù),原理如圖,客戶端是圖形化用戶界面(GUI)。除了MySQL官方提供的管理工具M(jìn)ySQLAdministrator和MySQLWorkbench,還有很多第三方開發(fā)的優(yōu)秀工具,比較著名的有:Navicat、SequelPro、HeidiSQL、SQLMaestroMySQLToolsFamily、SQLWave、dbForgeStudio、DBToolsManager、MyDBStudio、AquaDataStudio、SQLyog、MYSQLFront和SQLBuddy等。MySQL常用界面工具2.基于Web的管理工具基于Web的管理工具采用B/S架構(gòu),用戶計(jì)算機(jī)上無(wú)需再安裝客戶端,管理工具運(yùn)行于Web服務(wù)器上,如圖。用戶設(shè)備只需安裝瀏覽器,即可以訪問(wèn)Web頁(yè)的方式操作MySQL數(shù)據(jù)庫(kù)里的數(shù)據(jù)。第2章MySQL數(shù)據(jù)庫(kù)和表——MySQL數(shù)據(jù)庫(kù)MySQL教程(第2版)01創(chuàng)建數(shù)據(jù)庫(kù)1.查看數(shù)據(jù)庫(kù)2.創(chuàng)建數(shù)據(jù)庫(kù)3.設(shè)置當(dāng)前數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)1.查看數(shù)據(jù)庫(kù)查看MySQL系統(tǒng)的已有的數(shù)據(jù)庫(kù),輸入命令:showdatabases;系統(tǒng)會(huì)列出已有的數(shù)據(jù)庫(kù)。MySQL系統(tǒng)使用的數(shù)據(jù)庫(kù)3個(gè):information_schema、mysql和performance_schema,它們都是MySQL安裝時(shí)系統(tǒng)自動(dòng)創(chuàng)建的,MySQL把有關(guān)DBMS自身的管理信息都保存在這幾個(gè)數(shù)據(jù)庫(kù)中,如果刪除了它們,MySQL將不能正常工作。2.創(chuàng)建數(shù)據(jù)庫(kù)使用CREATEDATABASE或CREATESCHEMA命令可以創(chuàng)建數(shù)據(jù)庫(kù)。創(chuàng)建數(shù)據(jù)庫(kù)的語(yǔ)法格式如下:CREATE[IFNOTEXISTS]數(shù)據(jù)庫(kù)名[DEFAULT]CHARACTERSET字符集|[DEFAULT]COLLATE校對(duì)規(guī)則名創(chuàng)建數(shù)據(jù)庫(kù)【例2.1】創(chuàng)建學(xué)生成績(jī)數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)名稱xscj。mysql>createdatabasexscj如果已經(jīng)創(chuàng)建了數(shù)據(jù)庫(kù)(例如mytest),重復(fù)創(chuàng)建時(shí)系統(tǒng)會(huì)提示數(shù)據(jù)庫(kù)已經(jīng)存在,系統(tǒng)顯示錯(cuò)誤信息。使用IFNOTEXISTS選項(xiàng)從句可不顯示錯(cuò)誤信息,如圖。3.設(shè)置當(dāng)前數(shù)據(jù)庫(kù)USE命令的語(yǔ)法格式如下:USE數(shù)據(jù)庫(kù)名;例如:指定當(dāng)前數(shù)據(jù)庫(kù)為學(xué)生成績(jī)數(shù)據(jù)庫(kù)(xscj)。mysql>usexscj02修改數(shù)據(jù)庫(kù)修改數(shù)據(jù)庫(kù)創(chuàng)建數(shù)據(jù)庫(kù)后,如果需要修改數(shù)據(jù)庫(kù)的參數(shù),可以使用ALTERDATABASE命令,其他格式與CREATEDATABASE相同?!纠?.2】修改學(xué)生成績(jī)數(shù)據(jù)庫(kù)(xscj)默認(rèn)字符集和校對(duì)規(guī)則。語(yǔ)句及結(jié)果如圖。03刪除數(shù)據(jù)庫(kù)刪除數(shù)據(jù)庫(kù)用戶已經(jīng)創(chuàng)建的數(shù)據(jù)庫(kù)需要?jiǎng)h除,可以使用DROPDATABASE命令。語(yǔ)法格式如下:DROPDATABASE[IFEXISTS]數(shù)據(jù)庫(kù)名這里,還可以使用IFEXISTS子句,避免刪除不存在的數(shù)據(jù)庫(kù)時(shí)出現(xiàn)MySQL錯(cuò)誤信息。第2章MySQL數(shù)據(jù)庫(kù)和表——MySQL表01創(chuàng)

表1.全新創(chuàng)建2.復(fù)制已有表創(chuàng)建創(chuàng)

表1.全新創(chuàng)建語(yǔ)法格式如下:CREATETABLE[IFNOTEXISTS]表名([列定義]...|[表索引定義])[表選項(xiàng)][select語(yǔ)句];創(chuàng)

表【例2.3】在學(xué)生成績(jī)數(shù)據(jù)庫(kù)(xscj)中也創(chuàng)建一個(gè)學(xué)生情況表,表名xs。(1)輸入以下命令:usexscjcreatetablexs(

學(xué)號(hào) char(6) notnullprimarykey,

姓名 char(8) notnull,

專業(yè)名 char(10) null,

性別 tinyint(1) notnulldefault1,

出生日期 date notnull,

總學(xué)分 tinyint(1) null,

照片 blob null,

備注 text null);創(chuàng)

表(2)用showtables命令顯示xscj數(shù)據(jù)庫(kù)中產(chǎn)生的學(xué)生(xs)表,用describexs命令可以顯示xs表的結(jié)構(gòu),如圖。創(chuàng)

表2.復(fù)制已有表創(chuàng)建如果創(chuàng)建的表與已有表相似,用戶也可直接復(fù)制數(shù)據(jù)庫(kù)中已有表的結(jié)構(gòu)和數(shù)據(jù),然后對(duì)表進(jìn)行修改。語(yǔ)法格式如下:CREATETABLE[IFNOTEXISTS]表名[LIKE已有表名]|[AS(復(fù)制表記錄)];【例2.4】在mytest數(shù)據(jù)庫(kù)中,用復(fù)制的方式創(chuàng)建一個(gè)名為user_copy1的表,表結(jié)構(gòu)直接取自u(píng)ser表;另再創(chuàng)建一個(gè)名為user_copy2的表,其結(jié)構(gòu)和內(nèi)容(數(shù)據(jù))都取自u(píng)ser表。(1)用user表創(chuàng)建新表。USEmytestcreatetableuser_copy1likeuser;CREATETABLEuser_copy2AS(SELECT*FROMuser);創(chuàng)

表執(zhí)行過(guò)程及結(jié)果,如圖。創(chuàng)

表(2)查詢發(fā)現(xiàn)user_copy1表中沒(méi)有記錄,而user_copy2表中包含user表中所有記錄,如圖。02修改

表1.修改表結(jié)構(gòu)2.更改表名修

表1.修改表結(jié)構(gòu)語(yǔ)法格式如下:ALTERTABLE表名 ADD列定義[FIRST|AFTER列名] MODIFY列定義 ALTER列名{SETDEFAULT值|DROPDEFAULT} CHANGE列名原列名 DROP列名 RENAME[TO]新表名【例2.5】在xscj數(shù)據(jù)庫(kù)的xs表中,增加“獎(jiǎng)學(xué)金等級(jí)”一列,并將表中的“姓名”列刪除。USExscjALTERTABLExs ADD獎(jiǎng)學(xué)金等級(jí)tinyintNULL, DROPCOLUMN姓名;修

表2.更改表名除了上面的ALTERTABLE命令,還可以直接用RENAMETABLE語(yǔ)句來(lái)更改表的名字。RENAMETABLE的語(yǔ)法格式如下:RENAMETABLE老表名TO新表名...【例2.6】將mytest數(shù)據(jù)庫(kù)中的user_copy1表重命名為user1,user_copy2表重命名為user2,再將user2表更名為userb。RENAMETABLEuser_copy1TOuser1,user_copy2TOuser2;ALTERTABLEuser2RENAMETOuserb;03刪除

表1.修改表結(jié)構(gòu)2.更改表名刪

表語(yǔ)法格式如下:DROPTABLE[IFEXISTS]表名...使用這個(gè)命令將表的描述、表的完整性約束、索引及和表相關(guān)的權(quán)限等一并刪除。【例2.7】刪除表uesrb。DROPTABLEIFEXISTSuserb;第2章MySQL數(shù)據(jù)庫(kù)和表——表記錄的操作01插入記錄1.插入新記錄2.已有表中插入新記錄3.插入圖片插入記錄1.插入新記錄語(yǔ)法格式如下:INSERT[INTO]表名 [(列名,...)]VALUES({expr|DEFAULT},...) |SET列名={EXPR|DEFAULT},...【例2.8】向?qū)W生成績(jī)數(shù)據(jù)庫(kù)(xscj)的表xs(表中列包括學(xué)號(hào)、姓名、專業(yè)名、性別、出生日期、總學(xué)分、照片、備注)中插入如下一行:221101,王林,計(jì)算機(jī),1,2004-02-10,15,NULL,NULL使用下列語(yǔ)句:USExscjINSERTINTOxs VALUES('221101','王林','計(jì)算機(jī)',1,'2004-02-10',15,NULL,NULL);插入記錄若表xs中專業(yè)列的默認(rèn)值為“計(jì)算機(jī)”,照片、備注列的默認(rèn)值為NULL,插入例中那行數(shù)據(jù)也可以使用如下命令:INSERTINTOxs(學(xué)號(hào),姓名,性別,出生日期,總學(xué)分) VALUES('221101','王林',1,'2004-02-10',15);與下面這個(gè)命令的效果相同:INSERTINTOxs VALUES('221101','王林',default,1,'2004-02-10',15,NULL,NULL);當(dāng)然,也可以使用SET子句來(lái)實(shí)現(xiàn):INSERTINTOxs SET學(xué)號(hào)='221101',姓名='王林',專業(yè)名=default,性別=1,出生日期='2004-02-10',總學(xué)分=15;執(zhí)行結(jié)果如圖。插入記錄2.已有表中插入新記錄語(yǔ)法格式如下:INSERT[INTO]表名[(列名,...)]SELECT語(yǔ)句【例2.9】將mytest數(shù)據(jù)庫(kù)中的user表記錄插入user1表中。USEmytestINSERTINTOuser1SELECT*FROMuser;命令執(zhí)行前后的效果如圖。

插入記錄3.插入圖片MySQL還支持圖片的插入,圖片一般可以以路徑的形式來(lái)存儲(chǔ)。當(dāng)然也可以直接插入圖片本身,只要用LOAD_FILE()函數(shù)即可?!纠?.10】向xs表中插入如下一行記錄:221102,程明,計(jì)算機(jī),1,2005-02-01,15,picture.jpg,NULL其中,圖片路徑為D:\IMAGE\picture.jpg,可使用如下語(yǔ)句:INSERTINTOxs VALUES('221102','程明','計(jì)算機(jī)',1,'2005-02-01',15,'D:\IMAGE\picture.jpg',NULL);也可使用這個(gè)語(yǔ)句直接存儲(chǔ)圖片本身:INSERTINTOxs VALUES('221102','程明','計(jì)算機(jī)',1,'2005-02-01',15,load_file('D:\IMAGE\picture.jpg'),NULL);執(zhí)行結(jié)果如圖。02修改記錄1.替換舊記錄2.修改單個(gè)表3.修改多個(gè)表修改記錄1.替換舊記錄使用REPLACE語(yǔ)句除了可以插入表中不存在的記錄,同時(shí)可以替換已經(jīng)存在的舊記錄。REPLACE語(yǔ)句格式與INSERT的相同?!纠?.11】若例2.10中的記錄行已經(jīng)被插入,其中學(xué)號(hào)為主鍵(PRIMARYKEY),現(xiàn)在想再插入下列一行記錄:221101,劉華,通信工程,1,2004-06-10,13,NULL,NULL若直接使用INSERT語(yǔ)句,會(huì)產(chǎn)生圖所示錯(cuò)誤。使用REPLACE語(yǔ)句,則可以成功插入,如圖。修改記錄2.修改單個(gè)表語(yǔ)法格式如下:UPDATE[LOW_PRIORITY][IGNORE]表名 SET列名1=expr1[,列名2=expr2...] [WHERE條件]【例2.12】將學(xué)生成績(jī)數(shù)據(jù)庫(kù)(xscj)的學(xué)生(xs)表中的所有學(xué)生的總學(xué)分都增加10。將姓名為“劉華”的學(xué)生的備注填寫為“輔修計(jì)算機(jī)專業(yè)”,學(xué)號(hào)改為“221201”。UPDATExs SET總學(xué)分=總學(xué)分+10;UPDATExs SET學(xué)號(hào)='221201',備注='輔修計(jì)算機(jī)專業(yè)’ WHERE姓名='劉華';SELECT學(xué)號(hào),姓名,總學(xué)分,備注FROMxs;執(zhí)行結(jié)果如圖。修改記錄3.修改多個(gè)表語(yǔ)法格式如下:UPDATE表名,表名... SET列名1=expr1[,列名2=expr2...] [WHERE條件]【例2.13】mytest數(shù)據(jù)庫(kù)的表user和表userb中都有兩列idint(11)、passwordchar(8),其中id為主鍵。當(dāng)表user中id值與userb中id值相同時(shí),將表user中對(duì)應(yīng)的password值修改為“11111111”,將表userb中對(duì)應(yīng)的password值改為“22222222”。USEmytestUPDATEuser,userbSETuser.password='11111111',userb.password='22222222’ WHEREuser.id=userb.id;修改后的結(jié)果如圖。

03刪除記錄1.從單個(gè)表中刪除記錄2.從多個(gè)表中刪除記錄3.清除表數(shù)據(jù)刪除記錄1.從單個(gè)表中刪除記錄語(yǔ)法格式如下:DELETEFROM表名[WHERE條件]【例2.14】刪除mytest數(shù)據(jù)庫(kù)userb表中的“周何駿”的記錄。USEmytestDELETEFROMuserb WHEREusername='周何駿';或者DELETEFROMuserb WHEREid=2;刪除記錄2.從多個(gè)表中刪除記錄語(yǔ)法格式如下:DELETE[LOW_PRIORITY][QUICK][IGNORE]表名[.*][,表名[.*]...]

FROM參考表 [WHERE條件]或:DELETE[LOW_PRIORITY][QUICK][IGNORE] FROM表名[.*][,表名[.*]...] USING參考表 [WHERE條件]刪除記錄【例2.15】刪除user1表中id值等于user表中id值的所有行和userb表中id值等于user表中id值的所有行,使用如下語(yǔ)句:DELETEuser1,userb FROMuser1,userb,user WHEREuser1.id=user.idANDuserb.id=user.id;命令執(zhí)行結(jié)果如圖。3.清除表數(shù)據(jù)語(yǔ)法格式如下:TRUNCATETABLE表名第3章MySQL查詢和視圖——MySQL數(shù)據(jù)查詢MySQL教程(第2版)MySQL數(shù)據(jù)庫(kù)查詢使用SELECT語(yǔ)句可以從一個(gè)或多個(gè)表中選取符合某種條件的特定的行和列,結(jié)果通常是生成一個(gè)臨時(shí)表。下面介紹SELECT語(yǔ)句,它是SQL的核心。SELECT語(yǔ)句的語(yǔ)法格式如下:SELECT [ALL|DISTINCT|DISTINCTROW]

列... [FROM表...] [WHERE條件] [GROUPBY{列名|表達(dá)式|position}[ASC|DESC],...] [HAVING條件] [ORDERBY{列名|表達(dá)式|position}[ASC|DESC],...]01選擇輸出列1.選擇指定的列2.定義列別名3.替換查詢結(jié)果中的數(shù)據(jù)4.計(jì)算列值5.消除結(jié)果集中的重復(fù)行6.聚合函數(shù)選擇輸出列1.選擇指定的列使用SELECT語(yǔ)句選擇一個(gè)表中的某些列,各列名之間要以逗號(hào)分隔,所有列用“*”表示。語(yǔ)法格式為如下:SELECT*|列名,列名,...FROM表名【例3.1】查詢xscj數(shù)據(jù)庫(kù)的xs表中各個(gè)學(xué)生的姓名、專業(yè)名和總學(xué)分。USExscj SELECT姓名,專業(yè)名,總學(xué)分 FROMxs;選擇輸出列2.定義列別名當(dāng)希望查詢結(jié)果中的列標(biāo)題顯示為自己選擇的列標(biāo)題,可以在列名之后使用AS子句。語(yǔ)法格式如下:SELECT...列名[AS列別名]【例3.2】查詢xs表中計(jì)算機(jī)專業(yè)學(xué)生的學(xué)號(hào)、姓名和總學(xué)分,將結(jié)果中各列的標(biāo)題分別指定為number、name和mark。SELECT學(xué)號(hào)ASnumber,姓名ASname,總學(xué)分ASmark FROMxs WHERE專業(yè)名='計(jì)算機(jī)';執(zhí)行結(jié)果如圖。選擇輸出列3.替換查詢結(jié)果中的數(shù)據(jù)語(yǔ)法格式如下:CASE WHEN條件1THEN表達(dá)式1 WHEN條件2THEN表達(dá)式2 ... ELSE表達(dá)式NEND【例3.3】查詢xs表中計(jì)算機(jī)專業(yè)各學(xué)生的學(xué)號(hào)、姓名和總學(xué)分,對(duì)總學(xué)分按如下規(guī)則進(jìn)行替換:若總學(xué)分為空值,替換為“尚未選課”;若總學(xué)分小于15,替換為“不及格”;若總學(xué)分為15~50,替換為“合格”;若總學(xué)分大于50,替換為“優(yōu)秀”;將總學(xué)分列的標(biāo)題更改為“等級(jí)”。選擇輸出列替換操作代碼如下:SELECT學(xué)號(hào),姓名,CASE WHEN總學(xué)分ISNULLTHEN'尚未選課’ WHEN總學(xué)分<15THEN'不及格’ WHEN總學(xué)分>=15AND總學(xué)分<=50THEN'合格’ ELSE'優(yōu)秀'ENDAS等級(jí)FROMxsWHERE專業(yè)名='計(jì)算機(jī)';執(zhí)行結(jié)果如圖。選擇輸出列4.計(jì)算列值輸出列可使用表達(dá)式表示。語(yǔ)法格式如下:SELECT表達(dá)式...【例3.4】按120分制重新計(jì)算成績(jī),顯示cj表中學(xué)號(hào)為221101學(xué)生的成績(jī)信息。SELECT學(xué)號(hào),課程號(hào),成績(jī)*1.20AS成績(jī)120 FROMcj WHERE學(xué)號(hào)='221101';執(zhí)行結(jié)果如圖。選擇輸出列5.消除結(jié)果集中的重復(fù)行對(duì)表只選擇其某些列時(shí),輸出的結(jié)果可能會(huì)出現(xiàn)重復(fù)行。語(yǔ)法格式如下:SELECTDISTINCT|DISTINCTROW列名...【例3.5】對(duì)xs表只選擇專業(yè)名列和總學(xué)分列,消除結(jié)果集中的重復(fù)行。SELECTDISTINCT專業(yè)名,總學(xué)分 FROMxs;執(zhí)行結(jié)果如圖。選擇輸出列6.聚合函數(shù)SELECT的輸出列還可以包含所謂的聚合函數(shù)。聚合函數(shù)常常用于對(duì)一組值進(jìn)行計(jì)算,然后返回單個(gè)值。除COUNT()函數(shù)外,聚合函數(shù)都會(huì)忽略空值。表3.1列出了一些常用的聚合函數(shù)。函

數(shù)

名說(shuō)

明COUNT()統(tǒng)計(jì)記錄數(shù),返回int類型整數(shù)MAX()求最大值MIN()求最小值SUM()返回表達(dá)式中所有值的和AVG()求組中值的平均值STD()或STDDEV()返回給定表達(dá)式中所有值的標(biāo)準(zhǔn)差VARIANCE()返回給定表達(dá)式中所有值的方差GROUP_CONCAT()返回由屬于一組的列值連接組合而成的結(jié)果BIT_AND()邏輯或BIT_OR()邏輯與BIT_XOR()邏輯異或選擇輸出列(1)COUNT()函數(shù)COUNT()函數(shù)用于統(tǒng)計(jì)組中滿足條件的行數(shù)或總行數(shù),返回SELECT語(yǔ)句檢索到的行中非NULL值的數(shù)目,若找不到匹配的行,則返回0。語(yǔ)法格式如下:COUNT({[ALL|DISTINCT]表達(dá)式}|*)其中,表達(dá)式的數(shù)據(jù)類型可以是除BLOB或TEXT之外的任何類型。ALL表示對(duì)所有值進(jìn)行運(yùn)算,DISTINCT表示去除重復(fù)值,默認(rèn)值為ALL。使用COUNT(*)時(shí)將返回檢索行的總數(shù)目,不論其是否包含NULL值?!纠?.6】求學(xué)生的總數(shù)。SELECTCOUNT(*)AS'學(xué)生總數(shù)’ FROMxs;執(zhí)行結(jié)果如圖。選擇輸出列【例3.7】統(tǒng)計(jì)備注不為空的學(xué)生數(shù)目。SELECTCOUNT(備注)AS'備注不為空的學(xué)生數(shù)目’ FROMxs;執(zhí)行結(jié)果如圖。【例3.8】統(tǒng)計(jì)總學(xué)分在50分以上的人數(shù)。SELECTCOUNT(總學(xué)分)AS'總學(xué)分50分以上的人數(shù)’ FROMxs WHERE總學(xué)分>50;執(zhí)行結(jié)果如圖。選擇輸出列(2)MAX()函數(shù)和MIN()函數(shù)MAX()函數(shù)和MIN()函數(shù)分別用于求表達(dá)式中所有值項(xiàng)的最大值與最小值。語(yǔ)法格式如下:MAX/MIN([ALL|DISTINCT]表達(dá)式)【例3.9】求選修101課程的學(xué)生的最高分和最低分。SELECTMAX(成績(jī)),MIN(成績(jī)) FROMcj WHERE課程號(hào)='101';執(zhí)行結(jié)果如圖。選擇輸出列(3)SUM()函數(shù)和AVG()函數(shù)SUM()函數(shù)和AVG()函數(shù)分別用于求表達(dá)式中所有值項(xiàng)的總和與平均值。語(yǔ)法格式如下:SUM/AVG([ALL|DISTINCT]表達(dá)式)【例3.10】求學(xué)號(hào)為221101的學(xué)生所學(xué)課程的總成績(jī)。SELECTSUM(成績(jī))AS'課程總成績(jī)’ FROMcj WHERE學(xué)號(hào)='221101';執(zhí)行結(jié)果如圖。【例3.11】求選修101課程的學(xué)生的平均成績(jī)。SELECTAVG(成績(jī))AS'課程101平均成績(jī)’ FROMcj WHERE課程號(hào)='101';執(zhí)行結(jié)果如圖。選擇輸出列(4)VARIANCE()函數(shù)和STDDEV()函數(shù)VARIANCE()函數(shù)和STDDEV()函數(shù)分別用于計(jì)算特定的表達(dá)式中的所有值的方差和標(biāo)準(zhǔn)差。語(yǔ)法格式如下:VARIANCE/STDDEV([ALL|DISTINCT]表達(dá)式)【例3.12】求選修101課程的成績(jī)的方差。SELECTVARIANCE(成績(jī)) FROMcj WHERE課程號(hào)='101';執(zhí)行結(jié)果如圖?!纠?.13】求選修101課程的成績(jī)的標(biāo)準(zhǔn)差。SELECTSTDDEV(成績(jī)) FROMcj WHERE課程號(hào)='101';執(zhí)行結(jié)果如圖。選擇輸出列(5)GROUP_CONCAT()函數(shù)MySQL支持一個(gè)特殊的聚合函數(shù)GROUP_CONCAT()。該函數(shù)返回來(lái)自一個(gè)組中指定列的所有非NULL值,這些值一個(gè)接著一個(gè)放置,中間用逗號(hào)隔開,并表示為一個(gè)長(zhǎng)長(zhǎng)的字符串。這個(gè)字符串的長(zhǎng)度是有限制的,標(biāo)準(zhǔn)值是1024。語(yǔ)法格式如下:GROUP_CONCAT({[ALL|DISTINCT]表達(dá)式}|*)【例3.14】查詢選修了206課程的學(xué)生的學(xué)號(hào)。SELECTGROUP_CONCAT(學(xué)號(hào)) FROMcj WHERE課程號(hào)='206';執(zhí)行結(jié)果如圖。選擇輸出列(6)BIT_AND()函數(shù)、BIT_OR()函數(shù)和BIT_XOR()函數(shù)。存在與二進(jìn)制運(yùn)算符&(與)、|(或)和^(異或)相對(duì)應(yīng)的聚合函數(shù),分別是BIT_AND、BIT_OR、BIT_XOR。語(yǔ)法格式如下:BIT_AND|BIT_OR|BIT_XOR({[ALL|DISTINCT]表達(dá)式}|*)【例3.15】有一個(gè)表bits,其中有一列bin_value上有3個(gè)integer值,即1、3、7,獲取在該列上執(zhí)行BIT_OR的結(jié)果。SELECTBIN(BIT_OR(bin_value)) FROMbits;02數(shù)據(jù)來(lái)源1.引用一個(gè)表2.多表連接數(shù)據(jù)來(lái)源1.引用一個(gè)表用戶可以用如下兩種方式引用表。第一種方式是使用USE語(yǔ)句讓一個(gè)數(shù)據(jù)庫(kù)成為當(dāng)前數(shù)據(jù)庫(kù),F(xiàn)ROM子句中指定表名應(yīng)該屬于當(dāng)前數(shù)據(jù)庫(kù)。第二種方式是在指定表名前帶上表所屬數(shù)據(jù)庫(kù)的名字。例如,假設(shè)當(dāng)前數(shù)據(jù)庫(kù)是db1,現(xiàn)在要顯示數(shù)據(jù)庫(kù)db2里的表tb的內(nèi)容,使用如下語(yǔ)句:SELECT*FROMdb2.tb;數(shù)據(jù)來(lái)源2.多表連接(1)全連接。將各個(gè)表用逗號(hào)分隔,就指定了一個(gè)全連接。使用FROM子句產(chǎn)生的中間結(jié)果是一個(gè)新表,新表是每個(gè)表的每行都與其他表中的每行交叉以產(chǎn)生的所有可能組合。這種連接方式會(huì)潛在地產(chǎn)生數(shù)量非常多的行,因?yàn)榭赡艿玫降男袛?shù)為每個(gè)表行數(shù)之積!使用WHERE子句設(shè)定條件將結(jié)果集減小為易于管理的大小,這樣的連接即等值連接(連接條件中兩表對(duì)應(yīng))。【例3.16】查找所有學(xué)生選過(guò)的課程名和課程號(hào)。使用如下語(yǔ)句:SELECTDISTINCTkc.課程名,cj.課程號(hào)FROMkc,cjWHEREkc.課程號(hào)=cj.課程號(hào);執(zhí)行結(jié)果如圖。數(shù)據(jù)來(lái)源(2)JOIN連接。語(yǔ)法格式如下:JOIN表ON連接條件使用JOIN關(guān)鍵字的連接主要分為如下3種。①內(nèi)連接。指定了INNER關(guān)鍵字的連接是內(nèi)連接。【例3.17】查找所有學(xué)生選過(guò)的課程名和課程號(hào)??梢允褂靡韵抡Z(yǔ)句:SELECTDISTINCT課程名,cj.課程號(hào) FROMkcINNER JOINcjON(kc.課程號(hào)=cj.課程號(hào));它的功能是合并兩個(gè)表,返回滿足條件的行。內(nèi)連接是系統(tǒng)默認(rèn)的,可以省略INNER關(guān)鍵字。數(shù)據(jù)來(lái)源【例3.18】查找選修了206課程且成績(jī)?yōu)?0分及以上的學(xué)生的姓名及成績(jī)。SELECT姓名,成績(jī) FROMxsJOINcjONxs.學(xué)號(hào)=cj.學(xué)號(hào) WHERE課程號(hào)='206'AND成績(jī)>=80;執(zhí)行結(jié)果如圖。數(shù)據(jù)來(lái)源【例3.19】查找選修了“計(jì)算機(jī)導(dǎo)論”課程且成績(jī)?yōu)?0分及以上學(xué)生的學(xué)號(hào)、姓名、課程名及成績(jī)。SELECTxs.學(xué)號(hào),姓名,課程名,成績(jī) FROMxsJOINcjONxs.學(xué)號(hào)=cj.學(xué)號(hào) JOINkcONcj.課程號(hào)=kc.課程號(hào) WHERE課程名='計(jì)算機(jī)導(dǎo)論'AND成績(jī)>=80;執(zhí)行結(jié)果如圖。數(shù)據(jù)來(lái)源【例3.20】查找課程不同、成績(jī)相同的學(xué)生的學(xué)號(hào)、課程號(hào)和成績(jī)。SELECTa.學(xué)號(hào),a.課程號(hào),b.課程號(hào),a.成績(jī) FROMcjASa JOINcjASbONa.成績(jī)=b.成績(jī)ANDa.學(xué)號(hào)=b.學(xué)號(hào)ANDa.課程號(hào)!=b.課程號(hào);執(zhí)行結(jié)果如圖?!纠?.21】查找kc表中所有學(xué)生選過(guò)的課程名。SELECT課程名 FROMkcINNERJOINcjUSING(課程號(hào));數(shù)據(jù)來(lái)源②外連接。指定了OUTER關(guān)鍵字的連接為外連接,其中的OUTER關(guān)鍵字均可省略。外連接包括以下。左外連接(LEFTOUTERJOIN):結(jié)果表中除了匹配行外,還包括左表有的但右表中不匹配的行,對(duì)于這樣的行,右表被選擇的列輸出為NULL。右外連接(RIGHTOUTERJOIN):結(jié)果表中除了匹配行外,還包括右表有的但左表中不匹配的行,對(duì)于這樣的行,從左表被選擇的列設(shè)置為NULL。自然連接(NATURALJOIN):自然連接包括自然左外連接(NATURALLEFTOUTERJOIN)和自然右外連接(NATURALRIGHTOUTERJOIN)。【例3.22】查找所有學(xué)生情況及他們選修的課程號(hào),若學(xué)生未選修任何課,也要顯示其情況。SELECTxs.*,課程號(hào) FROMxsLEFTOUTERJOINcjONxs.學(xué)號(hào)=cj.學(xué)號(hào);數(shù)據(jù)來(lái)源【例3.23】查找被選修了的課程的選修情況和所有開設(shè)的課程名。SELECTcj.*,課程名 FROMcjRIGHTJOINkcONcj.課程號(hào)=kc.課程號(hào);結(jié)果顯示如圖?!纠?.24】使用自然連接查詢所有學(xué)生選過(guò)的課程名和課程號(hào)。SELECT課程名,課程號(hào)FROMkc WHERE課程號(hào)IN (SELECTDISTINCT課程號(hào)FROMkcNATURALRIGHTOUTERJOINcj);數(shù)據(jù)來(lái)源③交叉連接。指定了CROSSJOIN關(guān)鍵字的連接是交叉連接。在不包含連接條件時(shí),交叉連接結(jié)果表是由第一個(gè)表的每一行與第二個(gè)表的每一行拼接后形成的表,因此結(jié)果表的行數(shù)等于兩個(gè)表行數(shù)之積。在MySQL中,CROSSJOIN語(yǔ)法上與INNERJOIN等同,兩者可以互換?!纠?.25】列出學(xué)生所有可能的選課情況。SELECT學(xué)號(hào),姓名,課程號(hào),課程名 FROMxsCROSSJOINkc;另外,STRAIGHT_JOIN連接用法和INNERJOIN連接基本相同。不同的是,STRAIGHT_JOIN后不可以使用USING子句替代ON條件?!纠?.26】使用STRAIGHT_JOIN連接查找所有學(xué)生選過(guò)的課程名和課程號(hào)。SELECTDISTINCT課程名,cj.課程號(hào) FROMkcSTRAIGHT_JOINcjON(kc.課程號(hào)=cj.課程號(hào));03查詢條件1.比較運(yùn)算2.模式匹配3.范圍比較4.空值比較5.子查詢查詢條件WHERE子句的基本格式為:WHERE條件條件格式如下:表達(dá)式<比較運(yùn)算符>表達(dá)式 /*比較運(yùn)算*/|邏輯表達(dá)式<邏輯運(yùn)算符>邏輯表達(dá)式|表達(dá)式[NOT]LIKE表達(dá)式[ESCAPE'ESC字符’] /*LIKE運(yùn)算符*/|表達(dá)式[NOT][REGEXP|RLIKE]表達(dá)式 /*REGEXP運(yùn)算符*/|表達(dá)式[NOT]BETWEEN表達(dá)式AND表達(dá)式 /*指定范圍*/|表達(dá)式IS[NOT]NULL /*判斷是否為空值*/|表達(dá)式[NOT]IN(子查詢|表達(dá)式[,…n]) /*IN子句*/|表達(dá)式<比較運(yùn)算符>{ALL|SOME|ANY}(子查詢) /*比較子查詢*/|EXIST(子查詢) /*EXIST子查詢*/使用WHERE子句會(huì)根據(jù)條件對(duì)FROM子句一行一行地進(jìn)行判斷,當(dāng)條件為TRUE的時(shí)候,這一行就被包含到WHERE子句的中間結(jié)果中。查詢條件1.比較運(yùn)算比較運(yùn)算用于比較兩個(gè)表達(dá)式值,當(dāng)兩個(gè)表達(dá)式值均不為空值(NULL)時(shí),比較運(yùn)算返回邏輯值TRUE(真)或FALSE(假);而當(dāng)兩個(gè)表達(dá)式值中有一個(gè)為空值或都為空值時(shí),將返回UNKNOWN。MySQL支持的比較運(yùn)算符有=(等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、<=>(相等或都等于空)、<>(不等于)、!=(不等于)等。【例3.27】查詢xs表中學(xué)號(hào)為221101的學(xué)生的情況。SELECT姓名,學(xué)號(hào),總學(xué)分 FROMxs WHERE學(xué)號(hào)='221101';執(zhí)行結(jié)果如圖。查詢條件【例3.28】查詢xs表中總學(xué)分大于50分的學(xué)生的情況。SELECT姓名,學(xué)號(hào),出生日期,總學(xué)分 FROMxs WHERE總學(xué)分>50;執(zhí)行結(jié)果如圖。MySQL支持一個(gè)特殊的等于運(yùn)算符“<=>”,當(dāng)兩個(gè)表達(dá)式值彼此相等或都等于空值時(shí),它的返回值為TRUE,其中有一個(gè)空值或都是非空值但不相等時(shí),返回值就是FALSE。其中沒(méi)有UNKNOWN的情況。查詢條件【例3.29】查詢xs表中備注為空的學(xué)生的情況。SELECT姓名,學(xué)號(hào),出生日期,總學(xué)分 FROMxs WHERE備注<=>NULL;可以通過(guò)邏輯運(yùn)算符(AND、OR、XOR和NOT)組成更為復(fù)雜的查詢條件。查詢xs表中專業(yè)為計(jì)算機(jī)、性別為女(0)的學(xué)生的情況。SELECT姓名,學(xué)號(hào),性別,總學(xué)分 FROMxs WHERE專業(yè)名='計(jì)算機(jī)'AND性別=0;執(zhí)行結(jié)果如圖。查詢條件2.模式匹配(1)LIKE運(yùn)算符。LIKE運(yùn)算符用于指出一個(gè)字符串是否與指定的字符串相匹配,其運(yùn)算對(duì)象可以是char、varchar、text、datetime等類型的數(shù)據(jù),返回邏輯值TRUE或FALSE。語(yǔ)法格式如下:表達(dá)式[NOT]LIKE表達(dá)式[ESCAPE'esc字符']使用LIKE進(jìn)行模式匹配時(shí),常使用特殊符號(hào)_和%,可進(jìn)行模糊查詢?!?”代表0個(gè)或多個(gè)字符,“_”代表單個(gè)字符。由于MySQL默認(rèn)不區(qū)分大小寫,要區(qū)分大小寫時(shí)需要更換字符集的校對(duì)規(guī)則。【例3.30】查詢xs表中姓“王”學(xué)生的學(xué)號(hào)、姓名及性別。SELECT學(xué)號(hào),姓名,性別 FROMxs WHERE姓名LIKE'王%';執(zhí)行結(jié)果如圖。查詢條件【例3.31】查詢xs表中學(xué)號(hào)倒數(shù)第二個(gè)數(shù)字為0的學(xué)生的學(xué)號(hào)、姓名及專業(yè)名。SELECT學(xué)號(hào),姓名,專業(yè)名 FROMxs WHERE學(xué)號(hào)LIKE'%0_';執(zhí)行結(jié)果如圖。【例3.32】查詢xs表中名字包含下畫線學(xué)生的學(xué)號(hào)和姓名。SELECT學(xué)號(hào),姓名 FROMxs WHERE學(xué)號(hào)LIKE'%#_%'ESCAPE'#';查詢條件(2)REGEXP運(yùn)算符。REGEXP運(yùn)算符用來(lái)執(zhí)行更復(fù)雜的字符串比較運(yùn)算。REGEXP是正規(guī)表達(dá)式的縮寫,但它不是SQL標(biāo)準(zhǔn)的一部分。REGEXP運(yùn)算符的一個(gè)同義詞是RLIKE。語(yǔ)法格式如下:表達(dá)式[NOT][REGEXP|RLIKE]表達(dá)式屬于REGEXP運(yùn)算符的特殊字符如表。特殊字符含

義特殊字符含

義^匹配字符串的開始部分[abc]匹配方括號(hào)里出現(xiàn)的字符串a(chǎn)bc$匹配字符串的結(jié)束部分[a-z]匹配方括號(hào)里出現(xiàn)的a~z之間的1個(gè)字符.匹配任何一個(gè)字符(包括回車和新行)[^a-z]匹配方括號(hào)里出現(xiàn)的不在a~z之間的1個(gè)字符*匹配星號(hào)之前的0個(gè)或多個(gè)字符的任何序列|匹配符號(hào)左邊或右邊出現(xiàn)的字符串+匹配加號(hào)之前的1個(gè)或多個(gè)字符的任何序列[[..]]匹配方括號(hào)里出現(xiàn)的符號(hào)(如空格、換行、括號(hào)、句號(hào)、冒號(hào)、加號(hào)、連字符等)?匹配問(wèn)號(hào)之前0個(gè)或多個(gè)字符[[:<:]和[[:>:]]匹配一個(gè)單詞的開始和結(jié)束{n}匹配括號(hào)前的內(nèi)容出現(xiàn)n次的序列[[::]匹配方括號(hào)里出現(xiàn)的字符中的任意一個(gè)字符()匹配括號(hào)里的內(nèi)容

查詢條件【例3.33】查詢姓李的學(xué)生的學(xué)號(hào)、姓名和專業(yè)名。SELECT學(xué)號(hào),姓名,專業(yè)名 FROMxs WHERE姓名REGEXP'^李';執(zhí)行結(jié)果如圖?!纠?.34】查詢學(xué)號(hào)里包含4、5、6學(xué)生的學(xué)號(hào)、姓名和專業(yè)名。SELECT學(xué)號(hào),姓名,專業(yè)名 FROMxs WHERE學(xué)號(hào)REGEXP'[4,5,6]';執(zhí)行結(jié)果如圖。查詢條件【例3.35】查詢學(xué)號(hào)以21開頭、以02結(jié)尾的學(xué)生學(xué)號(hào)、姓名和專業(yè)名。SELECT學(xué)號(hào),姓名,專業(yè)名 FROMxs WHERE學(xué)號(hào)REGEXP'^21.*02$';執(zhí)行結(jié)果如圖。查詢條件3.范圍比較用于范圍比較的關(guān)鍵字有兩個(gè):BETWEEN和IN。當(dāng)要查詢的條件是某個(gè)值的范圍時(shí),可以使用BETWEEN關(guān)鍵字指出查詢范圍。語(yǔ)法格式如下:表達(dá)式[NOT]BETWEEN表達(dá)式1AND表達(dá)式2當(dāng)不使用NOT時(shí),若表達(dá)式的值在表達(dá)式1的值與表達(dá)式2的值之間(包括這兩個(gè)值),則返回TRUE,否則返回FALSE;使用NOT時(shí),返回值剛好相反。使用IN關(guān)鍵字可以指定一個(gè)值表,值表中列出所有可能的值,當(dāng)表達(dá)式的值與值表中的任一個(gè)值匹配時(shí),即返回TRUE,否則返回FALSE。使用IN關(guān)鍵字指定值表的格式為:表達(dá)式IN(表達(dá)式[,…,n])查詢條件【例3.36】查詢xs表中不在2003年出生學(xué)生的情況。SELECT學(xué)號(hào),姓名,專業(yè)名,出生日期 FROMxs WHERE出生日期NOTBETWEEN'2003-1-1'AND'2003-12-31';執(zhí)行結(jié)果如圖。查詢條件【例3.37】查詢xs表中專業(yè)名為“計(jì)算機(jī)”“通信工程”或“無(wú)線電”的學(xué)生的情況。SELECT* FROMxs WHERE專業(yè)名IN('計(jì)算機(jī)','通信工程','無(wú)線電');該語(yǔ)句與下句等價(jià):SELECT* FROMxs WHERE專業(yè)名='計(jì)算機(jī)'OR專業(yè)名='通信工程'OR專業(yè)名='無(wú)線電';查詢條件4.空值比較當(dāng)需要判定一個(gè)表達(dá)式的值是否為空值時(shí),使用ISNULL關(guān)鍵字。語(yǔ)法格式如下:表達(dá)式IS[NOT]NULL當(dāng)不使用NOT時(shí),若表達(dá)式的值為空值,返回TRUE,否則返回FALSE;當(dāng)使用NOT時(shí),結(jié)果剛好相反?!纠?.38】查詢總學(xué)分尚不定學(xué)生的情況。SELECT* FROMxs WHERE總學(xué)分ISNULL;查詢條件5.子查詢(1)IN子查詢。IN子查詢用于進(jìn)行給定值是否在子查詢結(jié)果集中的判斷。語(yǔ)法格式如下:表達(dá)式[NOT]IN(子查詢)當(dāng)表達(dá)式的值與子查詢結(jié)果表中的某個(gè)值相等時(shí),IN謂詞返回TRUE,否則返回FALSE;若使用了NOT,則返回的值剛好相反?!纠?.39】查找選修了課程號(hào)為206課程的學(xué)生的姓名、學(xué)號(hào)。SELECT姓名,學(xué)號(hào) FROMxs WHERE學(xué)號(hào)IN (SELECT學(xué)號(hào) fromcj WHERE課程號(hào)='206’ );執(zhí)行結(jié)果如圖。查詢條件【例3.40】查找未選修離散數(shù)學(xué)的學(xué)生的姓名、學(xué)號(hào)、專業(yè)名。SELECT姓名,學(xué)號(hào),專業(yè)名 FROMxs WHERE學(xué)號(hào)NOTIN ( SELECT學(xué)號(hào) FROMcj WHERE課程號(hào)IN (SELECT課程號(hào) FROMkc WHERE課程名='離散數(shù)學(xué)’ ) );執(zhí)行結(jié)果如圖。查詢條件(2)比較子查詢。這種子查詢可以被認(rèn)為是IN子查詢的擴(kuò)展,它使表達(dá)式的值與子查詢的結(jié)果進(jìn)行比較運(yùn)算。語(yǔ)法格式如下:表達(dá)式{<|<=|=|>|>=|!=|<>}{ALL|SOME|ANY}(子查詢)其中:ALL用于指定表達(dá)式的值要與子查詢結(jié)果集中的每個(gè)值都進(jìn)行比較,當(dāng)表達(dá)式的值與查詢結(jié)果集中的每個(gè)值都滿足比較的關(guān)系時(shí),才返回TRUE,否則返回FALSE;SOME或ANY是同義詞,表示表達(dá)式的值只要與子查詢結(jié)果集中的某個(gè)值滿足比較的關(guān)系時(shí),就返回TRUE,否則返回FALSE;如果子查詢的結(jié)果集只返回一行數(shù)據(jù),可以通過(guò)比較運(yùn)算符直接比較。查詢條件【例3.41】查找選修了離散數(shù)學(xué)學(xué)生的學(xué)號(hào)。SELECT學(xué)號(hào) FROMcj WHERE課程號(hào)= ( SELECT課程號(hào) FROMkc WHERE課程名='離散數(shù)學(xué)’ );執(zhí)行結(jié)果如圖。查詢條件【例3.42】查找xs表中比所有通信工程專業(yè)學(xué)生年齡都小的學(xué)生的學(xué)號(hào)、姓名、專業(yè)名、出生日期。SELECT學(xué)號(hào),姓名,專業(yè)名,出生日期 FROMxs WHERE出生日期>ALL ( SELECT出生日期 FROMxs WHERE專業(yè)名='通信工程’ );執(zhí)行結(jié)果如圖。查詢條件【例3.43】查找cj表中課程號(hào)為206課程的成績(jī)不低于課程號(hào)為101課程的最低成績(jī)的學(xué)生的學(xué)號(hào)。SELECT學(xué)號(hào) FROMcj WHERE課程號(hào)='206'AND成績(jī)>=ANY ( SELECT成績(jī) FROMcj WHERE課程號(hào)='101’ );執(zhí)行結(jié)果如圖。查詢條件(3)EXISTS子查詢。EXISTS謂詞用于測(cè)試子查詢的結(jié)果是否為空表,若子查詢的結(jié)果集不為空,則EXISTS返回TRUE,否則返回FALSE。EXISTS還可與NOT結(jié)合使用,即NOTEXISTS,其返回值與EXIST的剛好相反。語(yǔ)法格式如下:[NOT]EXISTS(子查詢)【例3.44】查找選修課程號(hào)為206學(xué)生的姓名。SELECT姓名 FROMxs WHEREEXISTS ( SELECT* FROMcj WHERE學(xué)號(hào)=xs.學(xué)號(hào)AND課程號(hào)='206’ );執(zhí)行結(jié)果如圖。查詢條件這類子查詢稱為相關(guān)子查詢,因?yàn)樽硬樵兊臈l件依賴于外層查詢中的某些值。其處理過(guò)程:首先找外層SELECT中xs表的第一行,根據(jù)該行的學(xué)號(hào)列值處理內(nèi)層SELECT,若結(jié)果不為空,則WHERE條件就為真,就把該行的姓名值取出作為結(jié)果集的一行;然后找xs表的第2、3等行,重復(fù)上述處理過(guò)程直到xs表的所有行都查找完為止?!纠?.45】查找選修了全部課程學(xué)生的姓名。SELECT姓名 FROMxs WHERENOTEXISTS ( SELECT* FROMkc WHERENOTEXISTS ( SELECT* FROMcj WHERE學(xué)號(hào)=xs.學(xué)號(hào)AND課程號(hào)=kc.課程號(hào) ) );查詢條件MySQL區(qū)分了4種類型的子查詢:①返回一個(gè)表的子查詢是表子查詢;②返回帶有一個(gè)或多個(gè)值的一行的子查詢是行子查詢;③返回一行或多行,但每行上只有一個(gè)值的是列子查詢;④只返回一個(gè)值的是標(biāo)量子查詢,從定義上講,每個(gè)標(biāo)量子查詢都是一個(gè)列子查詢和行子查詢。上面介紹的子查詢都屬于列子查詢。另外,子查詢還可以用在SELECT語(yǔ)句的其他子句中。子查詢可以用在FROM子句中,但必須為子查詢產(chǎn)生的中間表定義一個(gè)別名?!纠?.46】從xs表中查找總學(xué)分大于50分的男學(xué)生的姓名和學(xué)號(hào)。SELECT姓名,學(xué)號(hào),總學(xué)分 FROM(SELECT姓名,學(xué)號(hào),性別,總學(xué)分 FROMxs WHERE總學(xué)分>50 )ASstudent WHERE性別='1';執(zhí)行結(jié)果如圖。查詢條件【例3.47】從xs表中查找所有女學(xué)生的姓名、學(xué)號(hào),以及與221101號(hào)學(xué)生的年齡差距。SELECT學(xué)號(hào),姓名,YEAR(出生日期)- YEAR((SELECT出生日期 FROMxs WHERE學(xué)號(hào)='221101’ ))AS年齡差距 FROMxs WHERE性別='0';執(zhí)行結(jié)果如圖。查詢條件【例3.48】查找與221101號(hào)學(xué)生性別相同、總學(xué)分相同學(xué)生的學(xué)號(hào)和姓名。SELECT學(xué)號(hào),姓名 FROMxs WHERE(性別,總學(xué)分)=(SELECT性別,總學(xué)分 FROMxs WHERE學(xué)號(hào)='221101’ );執(zhí)行結(jié)果如圖。04分

組分

組語(yǔ)法格式如下:GROUPBY{列名|表達(dá)式|列順序}[ASC|DESC],...[WITHROLLUP]【例3.49】查詢各專業(yè)名及對(duì)應(yīng)的學(xué)生數(shù)。SELECT專業(yè)名,COUNT(*)AS'學(xué)生數(shù)’ FROMxs GROUPBY專業(yè)名;執(zhí)行結(jié)果如圖。分

組【例3.50】求被選修的各門課程的平均成績(jī)和選修該課程學(xué)生的人數(shù)。SELECT課程號(hào),AVG(成績(jī))AS'平均成績(jī)',COUNT(學(xué)號(hào))AS'選修人數(shù)’ FROMcj GROUPBY課程號(hào);執(zhí)行結(jié)果如圖。分

組【例3.51】查詢每個(gè)專業(yè)的男生人數(shù)、女生人數(shù)、總?cè)藬?shù),以及學(xué)生總?cè)藬?shù)。SELECT專業(yè)名,性別,COUNT(*)AS'人數(shù)’ FROMxs GROUPBY專業(yè)名,性別 WITHROLLUP;執(zhí)行結(jié)果如圖。將上述語(yǔ)句與不帶ROLLUP操作符的GROUPBY子句的執(zhí)行情況進(jìn)行比較:SELECT專業(yè)名,性別,COUNT(*)AS'人數(shù)’ FROMxs GROUPBY專業(yè)名,性別;執(zhí)行結(jié)果如圖。分

組【例3.52】在xscj數(shù)據(jù)庫(kù)中產(chǎn)生一個(gè)結(jié)果集,包括每門課程各專業(yè)的平均成績(jī)、每門課程的總平均成績(jī)和所有課程的總平均成績(jī)。SELECT課程名,專業(yè)名,AVG(成績(jī))AS'平均成績(jī)’ FROMcj,kc,xs WHEREcj.課程號(hào)=kc.課程號(hào)ANDcj.學(xué)號(hào)=xs.學(xué)號(hào) GROUPBY課程名,專業(yè)名 WITHROLLUP;執(zhí)行結(jié)果如圖。05分組條件分組條件HAVING子句的語(yǔ)法格式如下:HAVING條件其中,條件的定義和WHERE子句中條件的類似,不過(guò)HAVING子句中的條件可以包含聚合函數(shù),而WHERE子句中的則不可以。SQL標(biāo)準(zhǔn)要求HAVING子句必須引用GROUPBY子句中的列或用于聚合函數(shù)中的列。MySQL允許HAVING子句引用SELECT清單中的列和外部子查詢中的列?!纠?.53】查找平均成績(jī)?yōu)?5分及以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。SELECT學(xué)號(hào),AVG(成績(jī))AS'平均成績(jī)’ FROMcj GROUPBY學(xué)號(hào) HAVINGAVG(成績(jī))>=85;執(zhí)行結(jié)果如圖。分組條件【例3.54】查找選修課程超過(guò)2門且成績(jī)都為80分及以上的學(xué)生的學(xué)號(hào)。SELECT學(xué)號(hào) FROMcj WHERE成績(jī)>=80 GROUPBY學(xué)號(hào) HAVINGCOUNT(*)>2;執(zhí)行結(jié)果如圖。分組條件【例3.55】查找通信工程專業(yè)平均成績(jī)?yōu)?5分及以上的學(xué)生的學(xué)號(hào)和平均成績(jī)。SELECT學(xué)號(hào),AVG(成績(jī))AS'平均成績(jī)’ FROMcj WHERE學(xué)號(hào)IN (SELECT學(xué)號(hào) FROMxs WHERE專業(yè)名

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論