軟件開(kāi)發(fā)工具:第12章 PostSQL 9_第1頁(yè)
軟件開(kāi)發(fā)工具:第12章 PostSQL 9_第2頁(yè)
軟件開(kāi)發(fā)工具:第12章 PostSQL 9_第3頁(yè)
軟件開(kāi)發(fā)工具:第12章 PostSQL 9_第4頁(yè)
軟件開(kāi)發(fā)工具:第12章 PostSQL 9_第5頁(yè)
已閱讀5頁(yè),還剩60頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、鄭州大學(xué)信息工程學(xué)院第12章 PostSQL 9點(diǎn)擊添加文本鄭州大學(xué)信息工程學(xué)院12.1 PostgreSQL 簡(jiǎn)介12.2 PostgreSQL 9的安裝與配置12.3 數(shù)據(jù)庫(kù)的基本操作12.4 數(shù)據(jù)表的基本操作點(diǎn)擊添加文本12.6 數(shù)據(jù)查詢(xún)12.7 綜合練習(xí))12.8 相關(guān)閱讀:數(shù)據(jù)備份與還原12.9 本章小結(jié)12.5 插入、更新與刪除數(shù)據(jù)12.1 PostgreSQL 簡(jiǎn)介PostgreSQL 是一個(gè)自由的對(duì)象-關(guān)系數(shù)據(jù)庫(kù)服務(wù)器(數(shù)據(jù)庫(kù)管理系統(tǒng)),它在靈活的 BSD-風(fēng)格許可證下發(fā)行。它提供了相對(duì)其他開(kāi)放源代碼數(shù)據(jù)庫(kù)系統(tǒng)(比如 MySQL 和 Firebird),和專(zhuān)有系統(tǒng)(比如 Ora

2、cle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一種選擇。PostgreSQL 不尋常的名字導(dǎo)致一些讀者停下來(lái)嘗試拼讀它,特別是那些把SQL拼讀為sequel的人。PostgreSQL 開(kāi)發(fā)者把它拼讀為 post-gress-Q-L。它也經(jīng)常被簡(jiǎn)略念為 postgres。12.2 PostgreSQL 9的安裝與配置12.2.1 安裝【例12.1】下載并安裝PostgreSQL 9。使用瀏覽器打開(kāi)/download/,這是PostgreSQL官方下載地址,選擇安裝平臺(tái),本書(shū)以Windows版PostgreSQL為例,所以點(diǎn)擊【W(wǎng)indows】超鏈

3、接按鈕。(2)在打開(kāi)的新頁(yè)面中,點(diǎn)擊【Download】超鏈接按鈕,找到最新版版本下方的圖標(biāo)這兩個(gè)圖標(biāo)分別可以下載Windows 32位、64位版PostgreSQL,請(qǐng)根據(jù)自己的系統(tǒng)選擇對(duì)應(yīng)版本。雙擊安裝程序圖標(biāo),默認(rèn)安裝即可。12.2.2 使用pgAdmin III連接PostgreSQLgAdminIII是PostgreSQL默認(rèn)的圖形化管理軟件,通過(guò)此管理軟件可以連接本地和遠(yuǎn)程的PostgreSQL數(shù)據(jù)庫(kù),支持增刪查改數(shù)據(jù)庫(kù)及其表、視圖等操作。下面介紹如何使用pgAdminIII連接默認(rèn)的PostgreSQL數(shù)據(jù)庫(kù)?!纠?2.2】使用pgAdmin III連接PostgreSQL。(1

4、)打開(kāi)pgAdminIII。從開(kāi)始菜單中找到PostgreSQL程序組,找到并打開(kāi)pgAdminIII。打開(kāi)后的界面如圖12-1所示。軟件界面功能區(qū)分為以下幾個(gè)部分:菜單欄、快捷按鈕欄、對(duì)象瀏覽器、標(biāo)簽欄、SQL窗口欄、狀態(tài)欄。12-1 pgAdmin 主界面12-2 輸入密碼12-3 對(duì)象瀏覽器(2)找到對(duì)象瀏覽器下的【服務(wù)器組】-【服務(wù)器】-【PostgreSQL9.4(localhost:5432)】,雙擊該條目,打開(kāi)如圖12-2所示的對(duì)話框。輸入安裝時(shí)設(shè)置的密碼,點(diǎn)擊【確定】進(jìn)行連接,此處可以勾選【保存密碼】,這樣下次連接時(shí)可以不用再次輸入密碼。(3)如果密碼輸入正確,此時(shí)的對(duì)象瀏覽器

5、更新,展開(kāi)后出現(xiàn)如圖12-3所示的界面。至此,我們已經(jīng)成功連接到默認(rèn)的數(shù)據(jù)庫(kù)引擎,并且可以看到此時(shí)的數(shù)據(jù)庫(kù)引擎中,有一個(gè)數(shù)據(jù)庫(kù),名為postgres,這個(gè)數(shù)據(jù)庫(kù)下無(wú)任何表、觸發(fā)器或者視圖等內(nèi)容。12.3 數(shù)據(jù)庫(kù)的基本操作我們一般為不同的應(yīng)用操作各自的數(shù)據(jù)庫(kù),所以下面介紹如何在pgadminIII界面下,創(chuàng)建、修改和刪除數(shù)據(jù)庫(kù)。12.3.1 創(chuàng)建數(shù)據(jù)庫(kù)在創(chuàng)建數(shù)據(jù)庫(kù)前,首先要打開(kāi)pgAdminIII,并連接上數(shù)據(jù)庫(kù)服務(wù)器?!纠?2.3】使用pgAdminIII創(chuàng)建數(shù)據(jù)庫(kù)。(1)右鍵對(duì)象瀏覽器中的【數(shù)據(jù)庫(kù)】,在彈出菜單中選擇【新建數(shù)據(jù)庫(kù)】。(2)填寫(xiě)【新建數(shù)據(jù)庫(kù)】對(duì)話框中的【屬性】標(biāo)簽?!久Q(chēng)】填寫(xiě)

6、“my_db”,【所有者】選擇“postgres”,【注釋】中填寫(xiě)任意文本即可。(3)填寫(xiě)【新建數(shù)據(jù)庫(kù)】對(duì)話框中的【定義】標(biāo)簽。所有參數(shù)可以不用修改?!咀址判颉亢汀咀址诸?lèi)】可以選擇“Chinese (Simplified)_Peoples Republic of China.936”?!具B接數(shù)限制】的“-1”代表了不限制連接數(shù)。(4)填寫(xiě)【新建數(shù)據(jù)庫(kù)】對(duì)話框中的【變量】標(biāo)簽。用戶(hù)如有需要可以自定義一些變量及其值,變量名必須是菜單中已經(jīng)存在的變量。(5)填寫(xiě)【新建數(shù)據(jù)庫(kù)】對(duì)話框中的【權(quán)限】標(biāo)簽。用戶(hù)如有需要可以修改不同用戶(hù)或組對(duì)本數(shù)據(jù)庫(kù)的權(quán)限。(6)填寫(xiě)【新建數(shù)據(jù)庫(kù)】對(duì)話框中的【SQL】標(biāo)簽

7、。用戶(hù)可以在這里查看到創(chuàng)建數(shù)據(jù)的SQL語(yǔ)句。點(diǎn)擊【確定】創(chuàng)建數(shù)據(jù)庫(kù),創(chuàng)建成功后,在對(duì)象瀏覽器中即可查看到。12.3.2 修改數(shù)據(jù)庫(kù)修改數(shù)據(jù)庫(kù)與創(chuàng)建類(lèi)似,首先在對(duì)象瀏覽器中,找到需要修改的數(shù)據(jù)庫(kù),點(diǎn)擊鼠標(biāo)右鍵,在彈出的菜單中選擇【屬性】,即可打開(kāi)數(shù)據(jù)庫(kù)的屬性頁(yè)面,如圖18.27所示。修改的過(guò)程與創(chuàng)建過(guò)程相同,這里不再重復(fù)。12.3.3 刪除數(shù)據(jù)庫(kù)首先選中要?jiǎng)h除的數(shù)據(jù),點(diǎn)擊鼠標(biāo)右鍵,在菜單中選擇【刪除/移除】,在彈出的確認(rèn)對(duì)話框中,選擇【是】,即可刪除。12.4 數(shù)據(jù)表的基本操作12.4.1 創(chuàng)建數(shù)據(jù)表【例12.4】使用pgAdminIII創(chuàng)建數(shù)據(jù)表。下面,將以建立表12-1所示的表為例,介紹如何

8、在PostgresSQL中創(chuàng)建數(shù)據(jù)表。(1)在創(chuàng)建數(shù)據(jù)表前,先要確認(rèn)是在哪個(gè)數(shù)據(jù)庫(kù)內(nèi)。我們選擇數(shù)據(jù)庫(kù)“my_db”,找到該數(shù)據(jù)庫(kù),然后依次展開(kāi)“my_db”“架構(gòu)”“public”,找到【數(shù)據(jù)庫(kù)表】,單擊鼠標(biāo)右鍵,在菜單中,選擇【新建數(shù)據(jù)表】選項(xiàng)。(2)填寫(xiě)【新建數(shù)據(jù)表】對(duì)話框中的【屬性】標(biāo)簽?!久Q(chēng)】填寫(xiě)“my_table”,【所有者】選擇“postgres”,【注釋】任意填寫(xiě)。(3)填寫(xiě)【新建數(shù)據(jù)表】對(duì)話框中的【字段】標(biāo)簽。點(diǎn)擊【添加】。填寫(xiě)彈出的【添加字段】對(duì)話框。按照表12-1中的字段要求,填寫(xiě)【名稱(chēng)】,選擇【數(shù)據(jù)類(lèi)型】和【長(zhǎng)度】(如果長(zhǎng)度是可變的話)。(4)填寫(xiě)【新建數(shù)據(jù)表】對(duì)話框中

9、的【約束】標(biāo)簽。PostgresSQL可以添加的約束包括主鍵、外鍵、排他、唯一和檢查約束。下面以添加主鍵為例,將數(shù)據(jù)表“my_table”中的“id”字段設(shè)置為主鍵約束。在【新建數(shù)據(jù)表】對(duì)話框中,單擊【約束】標(biāo)簽,選擇底部下拉菜單的【主鍵】選項(xiàng),點(diǎn)擊【添加】。在【新建主鍵.】對(duì)話框中,【名稱(chēng)】填寫(xiě)“pk_id”,【注釋】任意填寫(xiě)。切換到【字段】標(biāo)簽,在【字段】下拉框中選擇“id”,點(diǎn)擊【添加】按鈕,將該字段加入到列表。點(diǎn)擊【確定】按鈕完成主鍵的添加?!咀⒁狻恐麈I是必須的,如果沒(méi)有主鍵,pgAdminIII將無(wú)法正常對(duì)數(shù)據(jù)表進(jìn)行編輯;主鍵可以有多個(gè),組成聯(lián)合主鍵,只要在字段中添加即可。(5)完成

10、數(shù)據(jù)表的創(chuàng)建。填寫(xiě)完所有的設(shè)置后,點(diǎn)擊“新建數(shù)據(jù)表”對(duì)話框的右下側(cè)的【確定】按鈕,完成創(chuàng)建。完成創(chuàng)建后,在對(duì)象瀏覽器中可以看到該表。12.4.2 修改數(shù)據(jù)表修改表的方法與新建數(shù)據(jù)表類(lèi)似,首先要選擇要操作的表,然后單擊鼠標(biāo)右鍵,在彈出的菜單中選擇【屬性】,打開(kāi)表屬性標(biāo)簽組窗口,該窗口的內(nèi)容與新建數(shù)據(jù)表相同,這里不再贅述。如果只是為了增加數(shù)據(jù)表的屬性,pgAdminIII提供了另外一種修改數(shù)據(jù)表的方法:在對(duì)象瀏覽器中,選中“my_table”,鼠標(biāo)單擊右鍵,在彈出的菜單中,展開(kāi)【新建對(duì)象】子菜單,該子菜單中包括了新建字段、新建主鍵、新建外鍵、新建排他約束、新建唯一約束等一系列操作,只需要選擇需要的

11、選項(xiàng)進(jìn)行操作即可。12.4.3 刪除數(shù)據(jù)表刪除數(shù)據(jù)表方法與刪除數(shù)據(jù)庫(kù)類(lèi)似,首先要選擇要操作的表,然后單擊鼠標(biāo)右鍵,在彈出的菜單中選擇【刪除/移除】選項(xiàng),在彈出的確認(rèn)對(duì)話框中,選擇【確定】即可完成操作。12.5 插入、更新與刪除數(shù)據(jù)12.5.1 插入【例12.5】使用pgAdminIII插入一行數(shù)據(jù)。1、使用pgAdminIII插入(1)在對(duì)象瀏覽器中,選中“my_table”,在快捷工具欄上點(diǎn)擊圖標(biāo),打開(kāi)如圖12-4所示的編輯數(shù)據(jù)窗口。 12-4 為數(shù)據(jù)表插入數(shù)據(jù) 12-5 填寫(xiě)數(shù)據(jù)并保存(2)填寫(xiě)數(shù)據(jù)。在編輯數(shù)據(jù)窗口中,有一空白行,該行第一列有*號(hào),代表可以錄入數(shù)據(jù)。在該行內(nèi),輸入符合字段格

12、式的數(shù)據(jù)。完成后,點(diǎn)擊快捷工具欄上的按鈕保存該行數(shù)據(jù)。2、使用SQL語(yǔ)句插入插入的SQL關(guān)鍵詞是INSERT ,插入的基本語(yǔ)法如下:INSERT INTO 要插入的表名稱(chēng) (字段1,字段2,) VALUES (字段1對(duì)應(yīng)的值, 字段2對(duì)應(yīng)的值,) , (字段1對(duì)應(yīng)的值, 字段2對(duì)應(yīng)的值,)例如圖12-4中插入的數(shù)據(jù)可以用下列語(yǔ)句實(shí)現(xiàn):INSERT INTO my_table (id,name,sex,birthday,class_id,height) VALUES (1,張三,男,1989-01-01,1,165.5)如果要插入多條數(shù)據(jù),直接在VALUES后輸入多條數(shù)據(jù),中間用逗號(hào)隔開(kāi)即可,例

13、如下面的例子:INSERT INTO my_table (id,name,sex,birthday,class_id,height) VALUES (1,張三,男,1989-01-01,1,165.5), (2,李四,女,1988-01-01,2,165.5)如果要插入數(shù)據(jù)不寫(xiě)列名,則后方插入的值必須與數(shù)據(jù)表中的所有字段匹配,否則報(bào)錯(cuò),例如下面的例子:INSERT INTO my_tableVALUES (1,張三,男,1989-01-01,1,165.5), (2,李四,女,1988-01-01,2,165.5)12.5.2 更新【例12.6】使用pgAdminIII更新一行數(shù)據(jù)。1、使用p

14、gAdminIII更新更新操作與插入新數(shù)據(jù)一樣,在圖12-4所示的編輯數(shù)據(jù)窗口,找到需要修改的行與字段,雙擊該字段,修改完數(shù)據(jù),點(diǎn)擊保存修改。2、使用SQL更新更新的SQL關(guān)鍵詞是UPDATE,更新的基本語(yǔ)法如下:UPDATE 要更新的表名稱(chēng) SET 字段1=新的值, 字段2=新的值, WHERE 條件如果WHERE條件不輸入,則表中所有條目都更新為設(shè)置的值,否則只更新符合條件的條目。12.5.3 刪除【例12.7】使用pgAdminIII插入一行數(shù)據(jù)。1、使用pgAdminIII刪除更新操作與插入新數(shù)據(jù)一樣,在圖12-4所示的編輯數(shù)據(jù)窗口,找到需要?jiǎng)h除的行,雙擊選中該行。在行數(shù)列的位置,點(diǎn)擊

15、鼠標(biāo)右鍵,在彈出的菜單中選擇【刪除】。在彈出的確認(rèn)對(duì)話框中,選擇【確定】即可完成刪除。2、使用SQL刪除更新的SQL關(guān)鍵詞是DELETE,更新的基本語(yǔ)法如下:DELETE FROM 表名稱(chēng) WHERE 條件如果WHERE條件不輸入,則表中所有條目都刪除,否則只刪除符合條件的條目。例如,如果要將姓名為張三的所有相關(guān)記錄刪除,則可用下列語(yǔ)句實(shí)現(xiàn):DELETE FROM my_table WHERE name=張三12.6 數(shù)據(jù)查詢(xún)數(shù)據(jù)庫(kù)操作的重要操作就是數(shù)據(jù)的查詢(xún),從簡(jiǎn)單的單表無(wú)條件查詢(xún)到復(fù)雜的帶條件的連接查詢(xún)。本節(jié)將對(duì)數(shù)據(jù)查詢(xún)展開(kāi)相關(guān)介紹。12.6.1 查詢(xún)語(yǔ)句PostgresSQL使用SELE

16、CT作為查詢(xún)語(yǔ)句。SELECT的基本語(yǔ)法:SELECT * | , FROM ,WHERE AND|OR ORDER BY DESC|ASCGROUP BY LIMIT, OFFSET 起始行(偏移量)參數(shù)簡(jiǎn)介: * | , 大括號(hào)內(nèi)的代表查詢(xún)返回的字段。查詢(xún)可以是*代表所有字段;也可以是指定一個(gè)或多個(gè)字段。FROM ,FROM是關(guān)鍵詞必須要有,大括號(hào)內(nèi)代表的是從哪些表或者視圖中查詢(xún)。WHERE AND|OR 中括號(hào)內(nèi)代表的查詢(xún)條件。WHERE是關(guān)鍵詞,如果需要限制條件,則這是必須的。后面的是條件,可以有多個(gè)條件,不同的條件用AND或者OR連接。ORDER BY DESC|ASC對(duì)結(jié)果進(jìn)行排序

17、,ORDER BY是關(guān)鍵詞,如果需要進(jìn)行排序,則必須添加。是排序的對(duì)象,可以有多個(gè)字段進(jìn)行排序。DESC|ASC表示排序的順序是降序還是升序。GROUP BY 對(duì)結(jié)果進(jìn)行分組,GROUP BY是關(guān)鍵詞,如果需要分組,則必須添加。是分組的對(duì)象,可以有多個(gè)分組的字段。LIMIT, OFFSET 起始行(偏移量)限制讀取行數(shù)。LIMIT是關(guān)鍵詞,如需限制讀取行數(shù),則必須添加。OFFSET 起始行(偏移量)是指查詢(xún)起始的第一條行號(hào)或者叫距離第一行的偏移量,該參數(shù)不是必要的,如果不填則默認(rèn)是0,即從第一行開(kāi)始;指的是讀取多少行。下面幾小節(jié),我們將利用12.4.1中創(chuàng)建的表格進(jìn)行操作,為了方便相關(guān)操作,我

18、們先對(duì)該表格插入一些數(shù)據(jù)。INSERT INTO my_table (id,name,sex,birthday,class_id,height) VALUES(1,張三,男,1989-01-02,1,165.5),(2,李四,女,1988-02-02,2,160),(3,王五,男,1985-03-02,3,180.5),(4,趙六,女,1982-04-02,1,161),(5,錢(qián)七,男,1981-05-02,2,175),(6,孫八,女,1986-06-02,3,156.5),(7,楊九,男,1986-07-02,1,177),(8,吳十,女,1982-01-02,2,163),(9,張三風(fēng),

19、男,1983-09-02,3,170.5),(10,張四民,女,1984-10-02,1,156),(11,張五濟(jì),男,1990-11-02,2,169),(12,張六霞, 女,1991-12-02,3,167)12.6.2 單表查詢(xún)1、查詢(xún)所有字段PostgresSQL中,查詢(xún)所有字段有2種方法,第一種使用“*”,第二種將所有字段都列出?!纠?2.8】查詢(xún)所有字段。SELECT * FROM my_tableSELECT id,name,sex,birthday,class_id FROM my_table2、查詢(xún)指定字段查詢(xún)指定字段可以是表中的一個(gè)或多個(gè)字段,也可以包括PostgresSQ

20、L支持的函數(shù)?!纠?2.9】查詢(xún)當(dāng)前世界和my_table的id與name。SELECT now(),id,name FROM my_table3、簡(jiǎn)單條件查詢(xún)一般情況下,在進(jìn)行數(shù)據(jù)查詢(xún)時(shí),都是需要帶條件的。因?yàn)閿?shù)據(jù)庫(kù)的數(shù)據(jù)量非常大,要從中獲取有效數(shù)據(jù),就需要進(jìn)行篩選過(guò)濾。PostgresSQL中通過(guò)WHERE子句來(lái)實(shí)現(xiàn)條件查詢(xún)。表18.19所示的是PostgresSQL支持的條件判斷符?!纠?2.10】查詢(xún)my_table中,符合姓名為張三的出生年月。SELECT birthday FROM my_table WHERE name=張三【例12.11】查詢(xún)my_table中,符合班級(jí)clas

21、s_id為1且性別為女的所有信息。SELECT * FROM my_table WHERE class_id=1 AND sex=女BETWEEN AND操作符可以用來(lái)查詢(xún)符合字段介于BETWEEN后面的值與AND后面的值的條目,或者在IN前加NOT查詢(xún)不等于的條目?!纠?2.12】查詢(xún)my_table中,符合出生年月介于19851988年且性別為女的所有信息。SELECT * FROM my_table WHERE birthday BETWEEN 1985-01-01 AND 1988-12-31IN操作符可以用來(lái)查詢(xún)符合字段等于IN后括號(hào)內(nèi)所包括的值的條目?;蛘咴贗N前加NOT查詢(xún)不等于

22、IN后括號(hào)內(nèi)包括的值的條目?!纠?2.13】查詢(xún)my_table中,符合id不等于(1,3,5,7,9,11)的所有信息。SELECT * FROM my_table WHERE id NOT IN (1,3,5,7,9,11)LIKE操作符可以用于模糊匹配要查詢(xún)的字段。使用“%”作為通配符,“%”可以被添加在LIKE后的匹配值的任意位置,例如“%a”代表任意以a結(jié)尾的字符串,“%a%”代表中間帶有a的字符串?!纠?2.14】查詢(xún)my_table中,查找姓張的所有信息。SELECT * FROM my_table WHERE name LIKE 張%4、合并查詢(xún)結(jié)果的重復(fù)項(xiàng)每個(gè)字段在數(shù)據(jù)表中,

23、可能有很多條數(shù)據(jù)都有相同的值,當(dāng)我們查詢(xún)的結(jié)果不需要重復(fù)項(xiàng)的時(shí)候,可以使用DISTINCT關(guān)鍵字來(lái)排除重復(fù)項(xiàng)?!纠?2.15】查詢(xún)my_table中,查找班級(jí)編號(hào)class_id哪幾個(gè)。SELECT DISTINCT class_id FROM my_table5、排序查詢(xún)查詢(xún)的結(jié)果如果不人工設(shè)定排序依據(jù),一般都是按照數(shù)據(jù)存儲(chǔ)的順序返回結(jié)果。當(dāng)我們需要自定義排序的時(shí)候,就需要使用ORDER BY來(lái)設(shè)計(jì)排序方法。ORDER BY可以指定一個(gè)或多個(gè)排序字段,還可以設(shè)置排序規(guī)則是升序(ASC)還是降序(DESC)?!纠?2.16】查詢(xún)my_table中,查找結(jié)果按照出生年月降序排列。SELECT *

24、 FROM my_table ORDER BY birthday DESC【例12.17】查詢(xún)my_table中,查找結(jié)果按照首先按照性別排序其次按照出生年月排序。SELECT * FROM my_table ORDER BY sex,birthday6、分組查詢(xún) 分組查詢(xún)是指對(duì)數(shù)據(jù)按照一個(gè)或多個(gè)字段進(jìn)行分組后返回結(jié)果,PostgresSQL使用GROUP BY分組?!纠?2.18】查詢(xún)my_table中,根據(jù)class_id進(jìn)行分組,并獲取每個(gè)分組的條數(shù)。SELECT class_id,count(*) FROM my_table GROUP BY class_id上述例子的分組結(jié)果沒(méi)有任何

25、條件篩選,如果需要對(duì)結(jié)果進(jìn)行篩選,PostgresSQL提供了HAVING關(guān)鍵字實(shí)現(xiàn)篩選?!纠?2.19】查詢(xún)my_table中,根據(jù)class_id進(jìn)行分組,并獲取每個(gè)分組的條數(shù),并篩選出class_id不為1的部分。SELECT class_id,count(*) FROM my_table GROUP BY class_id HAVING class17、限制查詢(xún)行數(shù)由于數(shù)據(jù)表的查詢(xún)結(jié)果可能條數(shù)過(guò)多,查詢(xún)時(shí)間可能過(guò)長(zhǎng),并且對(duì)于應(yīng)用來(lái)說(shuō)一次也不能顯示過(guò)多條數(shù),所以對(duì)查詢(xún)結(jié)果一般進(jìn)行條數(shù)限制。PostgresSQL提供了LIMIT關(guān)鍵字實(shí)現(xiàn)讀取有限行數(shù)據(jù)?!纠?2.20】查詢(xún)my_table

26、,僅獲取前5行。SELECT * FROM my_table LIMIT 5【例12.21】查詢(xún)my_table,從第6行起,獲取5行。SELECT * FROM my_table LIMIT 5 OFFSET 5【注意】OFFSET用于記錄偏移量,該偏移量從0開(kāi)始,0代表第1行。12.6.2 集合函數(shù)查詢(xún)數(shù)據(jù)表進(jìn)行查詢(xún)時(shí),返回的結(jié)果可以是字段也可以是其他的數(shù)據(jù),例如查詢(xún)結(jié)果的行數(shù)。在PostgresSQL中,這些非字段的數(shù)據(jù)查詢(xún)可以通過(guò)集合函數(shù)來(lái)實(shí)現(xiàn)。1、COUNT()【例12.22】查詢(xún)my_table一共有多少行數(shù)據(jù)。SELECT COUNT (*) FROM my_table 2、AV

27、G() 【例12.23】查詢(xún)my_table,計(jì)算平均身高。SELECT AVG(height) FROM my_table3、MIN()和MAX()【例12.24】查詢(xún)my_table,獲取最高和最低身高。SELECT MAX(height),MAX(height) FROM my_table4、SUM()【例12.25】查詢(xún)my_table,求所有人身高的總和。SELECT SUM(height) FROM my_table12.6.3 連接查詢(xún)連接查詢(xún)是數(shù)據(jù)庫(kù)查詢(xún)中最常用的查詢(xún)方法之一,包括內(nèi)連接、外連接等。使用連接查詢(xún)可以將多個(gè)表格連接到一起,獲取表中有用的數(shù)據(jù),篩除無(wú)效的數(shù)據(jù)。1、內(nèi)

28、連接查詢(xún)內(nèi)連接查詢(xún)使用INNER JOIN關(guān)鍵字操作,使用時(shí)INNER JOIN左右兩側(cè)分別列出兩張表,然后使用ON限定連接條件?!纠?2.26】在my_table和my_class表之間使用內(nèi)連接查詢(xún)。首先,建立my_class表,并插入數(shù)據(jù)。CREATE TABLE my_class(class_id INT PRIMARY KEY,class_name character varying(10),grade_name character varying(10),class_teacher character varying(25)INSERT INTO my_class (class_i

29、d,grade_name,class_name,class_teacher) VALUES(1,Grade1, Class1,David),(2,Grade2, Class1,John),(3,Grade1, Class2,Mary),(4,Grade2,Class2,Cindy)SQL語(yǔ)句如下:SELECT my_table.id,name,sex,birthday,height,grade_name,class_name,class_teacherFROM my_tableINNER JOIN my_class ON my_table.class_id=my_class.class_id【

30、注意】上述例子中,其實(shí)可以使用WHERE也能夠?qū)崿F(xiàn)相同的查詢(xún)結(jié)果。WHERE使用時(shí),查詢(xún)的表都置于FROM后,連接條件置于WHERE后。INNER JOIN則將需要連接的表置于INNER JOIN后,連接條件置于ON后。SELECT my_table.id,name,sex,birthday,height,grade_name,class_name,class_teacherFROM my_table,my_class WHERE my_table.class_id=my_class.class_id2、外連接查詢(xún)內(nèi)連接進(jìn)行查詢(xún)時(shí),有一個(gè)限制,查詢(xún)的結(jié)果只能是符合查詢(xún)條件和連接條件的行。如果需

31、要查詢(xún)沒(méi)有關(guān)聯(lián)的數(shù)據(jù),就需要使用外連接來(lái)實(shí)現(xiàn)。外連接分為左連接(LEFT JOIN)和右連接(RIGHT JOIN)。LEFT JOIN:返回左表所有記錄,以及右表中連接字段相等的記錄。RIGHT JOIN:返回右表所有記錄,以及左表中連接字段相等的記錄。下面的例子需要用到一張新數(shù)據(jù)表,先建立my_score表,并插入數(shù)據(jù)。CREATE TABLE my_score(course_id INT PRIMARY KEY,course_name character varying(10),course_score float(5),student_id INT)INSERT INTO my_sco

32、re (course_id, course_name, course_score, student_id) VALUES(1,English,90,1), (2,English,70.5,2), (3,English,82,3), (4,Chinease,90,4),(5,Chinease,90,5), (6,Chinease,70,6) , (7,Chinease,90.5,7), (8,Math,90,8),(9, Math,85,9), (10, Math,79 ,1) , (11, Math,65 ,10) , (12, Math,59.5 ,12)關(guān)于LEFT JOIN:【例12.2

33、7】在my_table和my_score表之間使用左連接查詢(xún)成績(jī)。SELECT my_table.id,my_,my_score.course_name,my_score.course_scoreFROM my_table LEFT JOIN my_score ON my_table.id=my_score.student_id關(guān)于RIGHT JOIN:【例12.28】在my_table和my_score表之間使用右連接查詢(xún)成績(jī)。SELECT my_table.id,my_,my_score.course_name,my_score.course_scoreFROM my_table RIGHT JOIN

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論