數(shù)據(jù)庫及其應(yīng)用課件:結(jié)構(gòu)查詢語言SQL_第1頁
數(shù)據(jù)庫及其應(yīng)用課件:結(jié)構(gòu)查詢語言SQL_第2頁
數(shù)據(jù)庫及其應(yīng)用課件:結(jié)構(gòu)查詢語言SQL_第3頁
數(shù)據(jù)庫及其應(yīng)用課件:結(jié)構(gòu)查詢語言SQL_第4頁
數(shù)據(jù)庫及其應(yīng)用課件:結(jié)構(gòu)查詢語言SQL_第5頁
已閱讀5頁,還剩82頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

結(jié)構(gòu)化查詢語言(SQL)本章重點(diǎn)是應(yīng)用SQL語言創(chuàng)建數(shù)據(jù)庫、定義表結(jié)構(gòu)、輸入、修改、查詢、刪除數(shù)據(jù)等操作,以及連接查詢、嵌套查詢等多種查詢技術(shù)。

一是SQL語言與關(guān)系代數(shù)的關(guān)系,應(yīng)該從關(guān)系代數(shù)的理論上來理解SQL語言的工作原理;二是通過上機(jī)實(shí)驗(yàn)了解和驗(yàn)證SQL的應(yīng)用實(shí)例,熟練掌握SQL的各種功能。本章的實(shí)驗(yàn)環(huán)境是MySQL數(shù)據(jù)庫系統(tǒng)。

2

第一節(jié)SQL語言概述

SQL是一種非過程化的語言,它與通常的高級語言不同,使用SQL時,只要說明做什么,不需要說明怎么做,具體的操作全部由DBMS自動完成。例如,要查詢所有女同學(xué)的姓名,只要寫出SQL語句:

SELECT姓名

FROM學(xué)生

WHERE性別=‘女’

3SQL可劃分為三個組成部分:

數(shù)據(jù)定義語言(DDL):在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)庫、表、視圖、索引等都是對象,用于定義這些對象的SQL語句稱為DDL。數(shù)據(jù)處理語言(DML):用于插入、修改、刪除和查詢數(shù)據(jù)的SQL語句稱為DML。數(shù)據(jù)控制語言(DCL):用于實(shí)現(xiàn)數(shù)據(jù)完整性、安全性、一致性等控制的SQL語句稱為DCL。MySQL數(shù)據(jù)庫系統(tǒng)簡介主要特點(diǎn):跨平臺Windows、UNIX、Linux和MacOS

多用戶、多線程的數(shù)據(jù)庫服務(wù)器支持大型數(shù)據(jù)庫多種編程語言接口開放源代碼價格優(yōu)勢4第二節(jié)Mysql的運(yùn)行準(zhǔn)備在DOS命令行窗口輸入命令行執(zhí)行操作,

簡單、高效、快捷地操作數(shù)據(jù)庫;在圖形化界面中通過菜單、選項(xiàng)、輸入命令的參數(shù),由圖形化界面軟件生成命令并執(zhí)行從學(xué)習(xí)SQL語言的目的考慮選擇第一種方式,在Windows平臺的命令行窗口輸入和執(zhí)行SQL語句。5第二節(jié)Mysql的運(yùn)行準(zhǔn)備使用MySQL數(shù)據(jù)庫需要兩個步驟:啟動MySQL服務(wù)器。連接(登錄)MySQL服務(wù)器。6一、利用Windows服務(wù)管理器

啟動MySQL服務(wù)器圖4.1Windows服務(wù)窗口啟動MySQL服務(wù)器二、連接和斷開MySQL服務(wù)器方法一在“開始”菜單中搜索到“MySQL8.0CommandLineClient”命令,單擊即可打開MySQL客戶端命令窗口,輸入正確的密碼,按回車鍵,若出現(xiàn)mysql>提示符,則表示已正確連接(登錄)MySQL服務(wù)器。8方法1:在“開始”菜單中搜索單擊“MySQL8.0CommandLineClient”命令,打開MySQL客戶端命令窗口,輸入正確的密碼,按回車鍵,出現(xiàn)mysql>提示符,連接(登錄)MySQL服務(wù)器。9方法2在Windows的運(yùn)行窗口

輸入

“mysql-uroot-p”命令”命令1、MySQL安裝時在創(chuàng)建的bin目錄下存放多個MySQL的應(yīng)用程序,這些程序運(yùn)行時,需要給出絕對路徑。2、設(shè)置Windows的環(huán)境變量Path為C:\ProgramFiles\MySQL\MySQLServer8.0\bin

3、在鍵盤上同時按下【W(wǎng)indows旗幟圖標(biāo)+R】,彈出運(yùn)行窗口,在【打開(O)】的輸入框中鍵入命令:mysql-uroot-p,如圖4.4所示。101、修改Windows的環(huán)境變量Path

11圖4.3設(shè)置環(huán)境變量窗口2、打開Windows的運(yùn)行窗口

輸入

“mysql-uroot-p”命令”命令在鍵盤上同時按下【W(wǎng)indows旗幟圖標(biāo)+R】,彈出運(yùn)行窗口,在【打開(O)】的輸入框中鍵入命令:mysqluroot-p

12打開MySQL客戶端命令窗口13

MySQL命令行客戶端窗口輸入SQL語句第三節(jié)創(chuàng)建數(shù)據(jù)庫SQL語句格式:CREATEDATABASE<數(shù)據(jù)庫名>;例4.1創(chuàng)建一個名稱為MYTEST數(shù)據(jù)庫。14二、選擇數(shù)據(jù)庫

每個用戶每次只能對一個數(shù)據(jù)庫進(jìn)行操作,該數(shù)據(jù)庫稱為當(dāng)前數(shù)據(jù)庫。

15

SQL語句格式:USE<數(shù)據(jù)庫名>;例4.2選擇MYTEST為當(dāng)前數(shù)據(jù)庫。

三、顯示數(shù)據(jù)庫16SQL語句格式:SHOWDATABASES;

例4.3查看創(chuàng)建的

數(shù)據(jù)庫名稱。

四、刪除數(shù)據(jù)庫17SQL語句格式:DROPDATABASE<數(shù)據(jù)庫名>;

例4.4刪除MYTEST數(shù)據(jù)庫。

第四節(jié)創(chuàng)建表(案例)

盛達(dá)公司數(shù)據(jù)庫的10個關(guān)系模式如下:商品(商品編碼,品名,顏色,花型,規(guī)格,庫存數(shù)量,最高庫存,最低庫存,參考價格)供應(yīng)商(廠商編號,廠商名稱,聯(lián)系人,地址,電話號碼)客戶(客戶編號,客戶名稱,聯(lián)系人,地址,電話號碼)職工(職工號,姓名,性別,出生年月,職務(wù),工資,身份證號)入庫單(入庫單號,廠商編號,送貨日期,來單編號,職工號)入庫明細(xì)(入庫單號,商品編碼,進(jìn)價,入庫數(shù)量)訂單(訂單號,簽單日期,客戶編號,送貨地址,收貨人,職工號)訂單明細(xì)(訂單號,商品編碼,單價,訂購數(shù)量)出庫單(出庫單號,發(fā)貨日期,訂單號,送貨地址,收貨人,職工號)出庫明細(xì)(出庫單號,商品編碼,發(fā)貨數(shù)量)18一、創(chuàng)建表(CREATETABLE)SQL語句基本格式:CREATETABLE<表名>(<字段名1><數(shù)據(jù)類型>,<字段名2><數(shù)據(jù)類型>,…,<字段名n><數(shù)據(jù)類型>,PRIMARYKEY(<主鍵>),F(xiàn)OREIGNKEY(<外鍵>)REFERENCES表名(<外鍵>));191、常用的數(shù)據(jù)類型數(shù)據(jù)類型類型名稱說

明SMALLINT短整型數(shù)有符號數(shù)(-32768~32767),無符號數(shù)(0~65535)INT(INTEGER)整型數(shù)有符號數(shù)(-2147483648~2147483647),無符號數(shù)(0~4294967295)DEC(M,D)(DECIMAL)精準(zhǔn)數(shù)值M是數(shù)值的全部位數(shù)(不含小數(shù)點(diǎn)),D則是小數(shù)的位數(shù)FLOAT單精度浮點(diǎn)數(shù)科學(xué)計(jì)數(shù)法,例如s=1.5×1011,稱1.5為尾數(shù)(有效數(shù)字),11是指數(shù),記作1.5E11。單精度浮點(diǎn)數(shù)的范圍:+(-)3.402823466E+38DOUBLE雙精度浮點(diǎn)數(shù)雙精度浮點(diǎn)數(shù)的范圍:+(-)1.7976931348623157E+308,+(-)2.2250738585072014E-308

CHAR(N)定長字符串0-255字節(jié)VARCHAR變長字符串0-65535字節(jié)TEXT長文本數(shù)據(jù)0-65535字節(jié)DATE日期YYYY-MM-DDTIME時間HH:MM:SSDATETIME日期時間YYYY-MM-DDHH:MM:SS202、域完整性約束定義

域完整性約束是對屬性值有效性的約束,包括在關(guān)系模式定義中規(guī)定的屬性類型、寬度、小數(shù)位,屬性是否可以取NULL值、缺省值(DEFAULT)、唯一值(UNIQUE),以及基于屬性的域檢查子句(CHECK)等。213、主鍵子句(PRIMARYKEY)主鍵子句PRIMARYKEY定義主鍵和實(shí)體完整性,約束關(guān)系的主鍵不允許為空值(NULL)。例4.5創(chuàng)建職工表,定義實(shí)體完整性定義。22例4.6創(chuàng)建客戶表23例4.7創(chuàng)建商品表244.外鍵子句(FOREIGNKEY)外鍵子句FOREIGNKEY定義外鍵和參照完整性約束。約束外鍵的值必須是另一個關(guān)系中主鍵的有效值或空值。25刪除約束短語:ONDELETERESTRICT刪除約束ONDELETECASCADE級聯(lián)刪除ONDELETESETNULL刪除置空ONDELETENOACTION刪除約束更新約束短語:ONUPDATERESTRICT更新約束

ONUPDATECASCADE級聯(lián)更新ONUPDATESETNULL更新置空ONUPDATENOACTION更新約束

例4.8創(chuàng)建訂單表26例4.9創(chuàng)建訂單明細(xì)表27創(chuàng)建表順序說明

創(chuàng)建表的順序是先創(chuàng)建被參照表,再創(chuàng)建參照表,即“先父后子”。例如,先創(chuàng)建客戶和職工表,再創(chuàng)建訂單表,因?yàn)榭蛻艉吐毠け硎怯唵蔚摹案副怼保粍?chuàng)建商品和訂單表之后,才能創(chuàng)建訂單明細(xì)表。

如果要刪除已經(jīng)建立的表時,則刪除的順序與創(chuàng)建表的順序正相反,即“先子后父”。28二、查看表的結(jié)構(gòu)信息(1)DESCRIBE<表名>;或者DESC<表名>;

DESC訂單;29二、查看表的結(jié)構(gòu)信息(2)SHOWCREATETABLE<表名>[\G]

302、MySQL中查看表名稱SHOWTABLES;31三、修改表結(jié)構(gòu)表中增加新字段,所有元組在這個新字段上都將賦值NULL。語句格式是:

ALTERTABLE<表名>ADD<列名><數(shù)據(jù)類型>;

例4.13在職工表中添加“身份證號”字段,設(shè)定字段值是唯一的,并顯示新增字段。ALTERTABLE職工ADD身份證號CHAR(18)UNIQUE;DESC職工;32332、刪除字段ALTERTABLE<表名>DROP<列名>;

例4.14在訂單表中增加一個聯(lián)系電話字段,然后再

刪除這個字段。ALTERTABLE訂單ADD聯(lián)系電話CHAR(11);DESC訂單;

ALTERTABLE訂單DROP聯(lián)系電話; DESC訂單;34例4.14的執(zhí)行結(jié)果353、修改字段的數(shù)據(jù)類型

ALTERTABLE<表名>MODIFYCOLUMN<列名><數(shù)據(jù)類型>;例4.15修改客戶表“電話號碼”字段的長度為CHAR(11),并顯示客戶表的結(jié)構(gòu)信息。ALTERTABLE客戶MODIFYCOLUMN電話號碼CHAR(11);DESC客戶;

36例4.15的圖37四、刪除表DROPTABLE<表名>;例4.16在盛達(dá)數(shù)據(jù)庫中,已經(jīng)創(chuàng)建了客戶、職工、商品、訂單和訂單明細(xì)、供應(yīng)商、入庫單、入庫明細(xì)、出庫單和出庫明細(xì)10個表,并且定義了參照完整性。如果要刪除訂單表,則必須先刪除訂單明細(xì)表,否則將違反參照完整性約束,系統(tǒng)拒絕執(zhí)行該刪除操作。DROPTABLE訂單明細(xì);DROPTABLE訂單;DROPTABLE客戶;38五、創(chuàng)建索引關(guān)鍵字地址指針10221210462124212234301254021339學(xué)

號姓

名性別出生年月系編號1022田平平女08/05/19801012124郭黎明男03/04/19811024021何明慧女04/12/19821041223姜明明男12/05/19801013012何漓江男10/05/19791032104康紀(jì)平女03/04/1981102索引表基本表創(chuàng)建索引的SQL語句SQL語句格式:CREATE[UNIQUE]<索引名稱>ON<表名>(<字段名1>,<字段名2>,……);例4.18

在職工表的身份證號字段上創(chuàng)建唯一索引,索引名稱為SFZNO。在職工表的身份證號字段上創(chuàng)建唯一索引,索引名稱為SFZNO。語句格式如下:在職工表的身份證號字段上創(chuàng)建唯一索引,索引名稱為SFZNO。語句格式如下:式如下:CREATEUNIQUEINDEXSFZNOON職工(身份證號);40六、刪除索引1、ALTERTABLE<表名>DROPINDEX<索引名>;2、DROPINDEX<索引名>ON<表名>;例4.19刪除職工表上創(chuàng)建的索引SFZNO。ALTERTABLE職工DROPINDEXSFZNO;或者DROPINDEXSFZNOON職工;41第五節(jié)數(shù)據(jù)操作

一、插入數(shù)據(jù)第一種格式是指定字段名和要插入的值INSERTINTO<表名>(字段名列表)VALUES(<值1>,<值2>,.....,<值N>);INSERTINTO職工(職工號,姓名,性別,出生年月,職務(wù),工資,身份證號)VALUES('E1','李樹生','男','1981-3-12','經(jīng)理',8800.00,);SELECT*FROM職工;42第二種插入數(shù)據(jù)的格式將VALUES子句換成一個查詢語句INSERTINTO<表名>(<列名表>)SELECT<列名表>FROM<表名>WHERE<條件表達(dá)式>(1)創(chuàng)建一個名單表,SQL語句如下:

CREATETABLE名單(姓名CHAR(8),性別CHAR(2));(2)將職工表中姓名和性別兩列數(shù)據(jù)拷貝到名單表中。在命令行窗口輸入下列語句:INSERTINTO名單(姓名,性別)SELECT姓名,性別FROM職工;(3)輸入下列語句查看操作的結(jié)果,如圖4.23所示。

SELECT*FROM名單;43一個查詢語句第三種插入數(shù)據(jù)的格式INSERTINTO<表名>(<列名表>)VALUES(<值1>,<值2>,.....,<值N>),(<值1>,<值2>,.....,<值N>),……,(<值1>,<值2>,.....,<值N>);INSERT

INTO職工(職工號,姓名,性別)

VALUES('E3','韓康健','男'),('E4','何乃云','女'),('E5','王建南','男');SELECT*FROM職工;MySQL的擴(kuò)展功能,在表中一次插入多行數(shù)據(jù)44一個查詢語句45第二種格式是將VALUES子句換成一個查詢語句

SQL的語法格式:

INSERTINTO<表名>(<列名表>)例4.23執(zhí)行的結(jié)果如圖4.24所示二、更新數(shù)據(jù)MySQL數(shù)據(jù)更新語句的格式是:UPDATE<表名>SET<列名1>=<新值1>,<列名2>=<新值2>,……,<列名n>=<新值n>WHERE<條件表達(dá)式>;UPDATE職工SET出生年月='1980-10-18',職務(wù)='銷售員’,工資=4500,身份證號=WHERE職工號='E2';SELECT*FROM職工WHERE職工號='E2';46例4.25將訂單明細(xì)表中訂單號為“D2”、商品編碼為“P2”的訂購數(shù)量增加10%.UPDATE訂單明細(xì)SET訂購數(shù)量=訂購數(shù)量*1.1WHERE訂單號='D2'

AND商品編碼='P2';47三、刪除數(shù)據(jù)DELETEFROM<表名>WHERE<條件表達(dá)式>DELETEFROM職工WHERE職工號='E3';

SELECT*FROM職工;48第六節(jié)SQL查詢語句、SQL查詢語句的基本格式SELECT<列名表>包括字段名、函數(shù)、表達(dá)式等FROM表名

數(shù)據(jù)來源(表名)、單表或多表WHERE<條件表達(dá)式>;選擇行的條件表達(dá)式491、SELECT子句的參數(shù)1)列名表SELECT姓名,工資

FROM職工WHERE工資>=5000;2)所有字段SELECT*FROM職工WHERE職務(wù)='經(jīng)理’;3)表達(dá)式SELECT訂單號,商品編碼,單價,訂購數(shù)量,單價*訂購數(shù)量AS金額

FROM訂單明細(xì)WHERE訂單號='D2’;4)函數(shù)SELECT姓名,YEAR(NOW())-YEAR(出生年月)AS年齡

FROM職工WHERE性別='男';2、WHERE子句中條件表達(dá)式的運(yùn)算符算術(shù)運(yùn)算符

:加減乘除乘方,先乘除后加減。比較運(yùn)算符

:<、<=、>、>=、=、<>,用于字符串表達(dá)式、算術(shù)表達(dá)式,以及特殊的類型(如日期類型)的比較。運(yùn)算的結(jié)果是邏輯值真(T)或假(F),表達(dá)式成立為真,否則為假。邏輯運(yùn)算符:AND(邏輯與)、OR(邏輯或)和NOT(邏輯非),可將多個比較表達(dá)式連接起來,構(gòu)成復(fù)雜的邏輯表達(dá)式,表示復(fù)雜的條件,運(yùn)算的結(jié)果是邏輯值真(T)或假(F)。51三類運(yùn)算符的級別括號最優(yōu)先。算術(shù)運(yùn)算符

比較運(yùn)算符邏輯運(yùn)算符高低邏輯運(yùn)算符NOT、AND、OR高低例如,下列表達(dá)式的計(jì)算順序:WHERE((YEAR(NOW())-YEAR(出生年月))>40AND性別='男')OR((Year(NOW())-YEAR(出生年月))>35AND性別='女');52WHERE子句的示例SELECT姓名,工資FROM職工WHERE工資>=6000;SELECT姓名FROM職工WHERE出生年月>="1980-1-1";SELECT姓名FROM職工WHERE出生年月>='1980-1-1'AND性別='男’;SELECT姓名,性別,YEAR(NOW())-YEAR(出生年月)AS年齡FROM職工WHERE((YEAR(NOW())-YEAR(出生年月))>40AND性別='男')OR((Year(NOW())-YEAR(出生年月))>35AND性別='女');533、FROM子句指定查詢語句的數(shù)據(jù)來源(表名)。如果是多個表,則該查詢語句是連接,連接條件可以用兩種格式表示。(1)在FROM子句中給出表與表之間的連接條件(§4.7節(jié))(2)在WHERE子句中給出連接條件。如下例:SELECT訂單號,客戶名稱,姓名,簽單日期FROM客戶,訂單,職工

WHERE客戶.客戶編號=訂單.客戶編號AND職工.職工號=訂單.職工號

AND簽單日期>='2022-03-01';543、FROM子句SQL允許在FROM子句中使用表的別名(簡名),可用別名代替表名,上述SQL語句可寫成:SELECT訂單號,客戶名稱,姓名,簽單日期FROM客戶C,訂單D,職工EWHEREC.客戶編號=D.客戶編號ANDD.職工號=E.職工號AND簽單日期>='2022-3-1';55

二、字符串操作字符串匹配符有:

百分號%表示任意字符串。

下劃線_表示任何一個字符字符串操作符有:LIKE

NOTLIKE內(nèi)置函數(shù)trim示例:SELECT姓名FROM職工WHERE姓名LIKE'李%’;SELECT姓名

FROM職工

WHERE職務(wù)NOTLIKE'經(jīng)%’;SELECT姓名FROM職工WHEREtrim(姓名)LIKE'李_生';56三、幾個特殊的運(yùn)算符BETWEENAND在某個范圍之間。NOTBETWEENAND不在某個范圍之間。IN指定字段的值屬于指定集合中的一個元素。NOTIN指定字段的值不屬于指定集合的元素。57特殊運(yùn)算符應(yīng)用示例SELECT*FROM職工

WHERE工資BETWEEN3000AND5000;SELECT*FROM職工WHERE工資>=3000AND工資<=5000;SELECT*FROM職工

WHERE工資NOTBETWEEN3000AND5000;SELECT*FROM職工

WHERE工資<3000OR工資>5000;SELECT客戶名稱,簽單日期

FROM客戶C,訂單DWHEREC.客戶編號=D.客戶編號AND簽單日期IN('2022-2-12','2022-5-13’);SELECT客戶名稱,簽單日期FROM客戶C,訂單DWHEREC.客戶編號=D.客戶編號AND(簽單日期='2022-2-12'OR簽單日期='2022-5-13');58四、排序(ORDERBY子句)SELECT<列名表>FROM表名WHERE<條件表達(dá)式>ORDERBY<列名表>[DESC][ASC]其中:DESC表示降序,ASC表示升序,缺省為升序。例4.22按照簽單日期升序顯示訂單號、簽單日期、客戶名稱、業(yè)務(wù)員姓名。SELECT訂單號,簽單日期,客戶名稱,姓名FROM客戶C,訂單D,職工EWHEREC.客戶編號=D.客戶編號ANDE.職工號=D.職工號ORDERBY簽單日期;59按時間排序的查詢結(jié)果60五、并操作(UNION語句)MySQL實(shí)現(xiàn)并運(yùn)算的語句UNION。例4.43列出入庫明細(xì)和訂單明細(xì)表中,商品編碼為“P1”的入庫單號(或訂單號)、商品編碼和單價。(分析差價和利潤)SELECT入庫單號AS單號,商品編碼,進(jìn)價AS價格FROM入庫明細(xì)WHERE商品編碼='P1'UNIONSELECT訂單號,商品編碼,單價

FROM訂單明細(xì)WHERE商品編碼='P1';6162六、聚合函數(shù)631、求平均值函數(shù)

SELECTAVG(工資)AS平均工資WHERE職務(wù)=‘銷售員’;

2、求總和函數(shù)

SELECTFORMAT(SUM(訂購數(shù)量*單價),2)AS總金額

FROM訂單D,訂單明細(xì)M

WHERED.訂單號=M.訂單號AND客戶編號=‘C2’;

3、求最大值和最小值函數(shù)

SELECTMAX(工資)AS最高工資,MIN(工資)AS最低工資

FROM職工;

SELECTMIN(出生年月)AS年齡最大,

MAX(出生年月)AS年齡最小

FROM職工;

64計(jì)數(shù)函數(shù)有3種格式:1、COUNT(*)統(tǒng)計(jì)所有行數(shù),包括含有空值的行。2、COUNT(字段名)計(jì)算表中字段值非空值的行數(shù)。3、COUNT(DISTINCT(字段名))計(jì)算表中字段值

唯一且非空值的行數(shù)。65示例:SELECTCOUNT(*)AS職工人數(shù)FROM職工;SELECTCOUNT(身份證號)AS有身份證人數(shù)FROM職工;SELECTCOUNT(DISTINCT職務(wù))AS種類數(shù)目FROM職工;七、分組GROUPBY、HAVING子句SELECT性別,COUNT(性別)AS人數(shù)FROM職工GROUPBY性別;SELECT商品編碼,MAX(訂購數(shù)量)AS最高量,AVG(訂購數(shù)量)AS平均訂購量,MIN(訂購數(shù)量)AS最低量FROM訂單明細(xì)GROUPBY商品編碼;66SELECT<字段列表>FROM表名

WHERE<條件表達(dá)式>GROUPBY<分組表達(dá)式>HAVING<篩選條件表達(dá)式>SELECT客戶編號,SUM(單價*訂購數(shù)量)AS總金額FROM訂單D,訂單明細(xì)MWHERED.訂單號=M.訂單號AND簽單日期BETWEEN'2022-3-1'AND'2022-12-31'GROUPBY客戶編號HAVINGSUM(單價*訂購數(shù)量)>18000;例4.51檢索在2022年1月1日-2022年12月31期間,客戶訂購商品的總金額超過18000元的客戶編號和總金額。八、空值(NULL)1.測試空值運(yùn)算符(ISNULL和ISNOTNULL)SELECT職工號,姓名FROM職工WHERE身份證號ISNULL;SELECT職工號,姓名FROM職工WHERE身份證號ISNOTNULL2.空值的處理原則(1)算術(shù)表達(dá)式中含有NULL,運(yùn)算結(jié)果是NULL。(2)比較運(yùn)算中含有NULL,比較的結(jié)果視為假(false)。(3)SQL規(guī)定,比較運(yùn)算中含有NULL,結(jié)果是“未知(unknown)”(4)幾乎其他所有情況下,將unknown作為false。683、聚合函數(shù)對NULL的處理原則(1)SUM、AVG、MIN、MAX函數(shù)對參數(shù)中的空值(NULL)忽略不計(jì)。若所有參數(shù)值都是空值(NULL),則函數(shù)的返回值是NULL。(2)COUNT函數(shù)的參數(shù)是“*”,返回表的所有行數(shù),包括含有空值(NULL)的行;若參數(shù)是一個字段名,則該字段為空值(NULL)行忽略不計(jì);若所有參數(shù)值都是空值(NULL),則函數(shù)的返回值是0。69第七節(jié)SQL的連接查詢

一個查詢同時涉及2個以上表,稱為連接查詢。連接查詢是關(guān)系數(shù)據(jù)庫最主要的查詢,包括等值連接查詢、自然連接查詢、非等值連接查詢、自連接查詢、外連接查詢和復(fù)合條件查詢等。SQL語句中定義連接條件的方法有兩種方法:WHERE子句中定義連接條件FROM子句中定義連接條件

70定義連接條件的兩種方法SELECT訂單號,客戶名稱,姓名FROM客戶,訂單,職工WHERE客戶.客戶編號=訂單.客戶編號AND職工.職工號=訂單.職工號AND簽單日期>='2022-1-1’;SELECT訂單號,客戶名稱,姓名FROM(客戶CINNERJOIN訂單DON(C.客戶編號=D.客戶編號))INNERJOIN職工EON(E.職工號=D.職工號)WHERE簽單日期>='2022-1-1';71連接操作的類型72一、內(nèi)連接

內(nèi)連接(INNERJOIN)也稱為等值連接。它是以連接屬性值相等為條件的連接,在連接的結(jié)果中,僅包含兩個關(guān)系笛卡兒積中連接屬性值相等的元組,且不消除重復(fù)的屬性。

FROMRINNERJOINS[ON(<連接條件>)]例4.55內(nèi)連接示例SELECT供應(yīng)商.*,客戶.*FROM供應(yīng)商INNERJOIN客戶ON廠商名稱=客戶名稱;73二、自然連接自然連接以公共屬性值相等為條件的連接,且消除重復(fù)列。例4.56自然連接示例SELECT客戶名稱,訂購數(shù)量

FROM客戶AINNERJOIN訂單BON(A.客戶編號=B.客戶編號)INNERJOIN訂單明細(xì)CON(B.訂單號=C.訂單號)INNERJOIN商品DON(C.商品編碼=D.商品編碼)

WHERE規(guī)格='245’;三、左外連接

左外連接(LEFTOUTERJOIN)的結(jié)果中,除了內(nèi)連接結(jié)果之外還包括左表不相匹配的元組,且其對應(yīng)的右表值為空值。FROM左表LEFTOUTERJOIN右表ON(<連接條件>)

例4.57左外連接示例SELECTA.客戶編號,客戶名稱,訂單號FROM客戶ALEFTOUTERJOIN訂單BON(A.客戶編號=B.客戶編號);75左外連接示例76四、右外連接

右外連接(RIGHTOUTERJOIN)的結(jié)果中,除了內(nèi)連接結(jié)果之外還包括右表不相匹配的元組,且其對應(yīng)的左表值為空值。FROM左表RIGHTOUTERJOIN右表ON(<連接條件>)

例4.58右外連接示例SELECT

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論