結(jié)構(gòu)化查詢語(yǔ)言SQLPPT課件_第1頁(yè)
結(jié)構(gòu)化查詢語(yǔ)言SQLPPT課件_第2頁(yè)
結(jié)構(gòu)化查詢語(yǔ)言SQLPPT課件_第3頁(yè)
結(jié)構(gòu)化查詢語(yǔ)言SQLPPT課件_第4頁(yè)
結(jié)構(gòu)化查詢語(yǔ)言SQLPPT課件_第5頁(yè)
已閱讀5頁(yè),還剩38頁(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、本章學(xué)習(xí)導(dǎo)航 結(jié)構(gòu)化查詢語(yǔ)言SQL是一種功能齊全的數(shù)據(jù)庫(kù)語(yǔ)言,包含數(shù)據(jù)定義功能、數(shù)據(jù)查詢功能、數(shù)據(jù)操縱功能和數(shù)據(jù)控制功能。其中最主要的功能就是查詢。通過(guò)本章學(xué)習(xí),學(xué)生應(yīng)掌握SQL語(yǔ)言的使用方法和技巧,提高知識(shí)綜合運(yùn)用能力,寫出高質(zhì)量的SQL查詢命令。 第1頁(yè)/共43頁(yè)本章學(xué)習(xí)要點(diǎn)lSQL的數(shù)據(jù)定義 :熟練運(yùn)用CREATE TABLE、ALTER TABLET和DROP TABLE語(yǔ)句完成表的創(chuàng)建、修改和刪除 。l SQL的數(shù)據(jù)操縱 :熟練運(yùn)用INSERT、DELETE和UPDATE語(yǔ)句添加、刪除和更新記錄 。l SQL的數(shù)據(jù)查詢 :熟練運(yùn)用SELECT語(yǔ)句完成簡(jiǎn)單查詢、嵌套查詢、連接查詢、分組

2、與計(jì)算查詢 。 教學(xué)課時(shí):教學(xué)課時(shí):4課時(shí)課時(shí)第2頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 5.1 SQL概述 結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language,簡(jiǎn)稱SQL)是一種介于關(guān)系代數(shù)和關(guān)系演算之間的語(yǔ)言。它于1974年由Boyce和Chamberlin提出,由于具有語(yǔ)言簡(jiǎn)潔、方便實(shí)用、功能齊全等優(yōu)點(diǎn),很快得到推廣和應(yīng)用。隨著關(guān)系數(shù)據(jù)庫(kù)的流行,SQL語(yǔ)言最終發(fā)展成為關(guān)系數(shù)據(jù)庫(kù)的標(biāo)準(zhǔn)語(yǔ)言和數(shù)據(jù)庫(kù)領(lǐng)域中一個(gè)主流語(yǔ)言。SQL已經(jīng)被ANSI(美國(guó)國(guó)家標(biāo)準(zhǔn)化組織)確定為數(shù)據(jù)庫(kù)系統(tǒng)的工業(yè)標(biāo)準(zhǔn),它是數(shù)據(jù)庫(kù)系統(tǒng)的通用語(yǔ)言。利用SQL,用戶可以用幾乎相同的語(yǔ)句在不同的數(shù)據(jù)庫(kù)系統(tǒng)上執(zhí)行同

3、樣的操作。第3頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 語(yǔ)言的特點(diǎn) SQL語(yǔ)言之所以能夠成為國(guó)際標(biāo)準(zhǔn),是因?yàn)樗且粋€(gè)綜合的、通用的、功能極強(qiáng),同時(shí)又簡(jiǎn)單易學(xué)的語(yǔ)言。 (1)功能強(qiáng)大 SQL語(yǔ)言集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制功能于一體。 (2)高度非過(guò)程化 用戶只要提出“做什么”,而無(wú)需指明“怎么做”,存取路徑的選擇以及SQL語(yǔ)言的操作過(guò)程由系統(tǒng)自動(dòng)完成,不但大大減輕了用戶負(fù)擔(dān),而且有利于提高數(shù)據(jù)的獨(dú)立性。 (3)簡(jiǎn)單易用 SQL語(yǔ)言十分簡(jiǎn)潔,實(shí)現(xiàn)核心功能,一般只要用到下面9個(gè)命令動(dòng)詞,如表5-1所示。因此容易學(xué)習(xí)和掌握。 (4)有聯(lián)機(jī)交互和嵌入兩種使用方式 SQL語(yǔ)言支持兩種不同的使

4、用方式。一種是聯(lián)機(jī)交互使用,即用戶能在終端直接輸入SQL命令對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作;另一種是嵌入式,即將SQL語(yǔ)句嵌入到其他高級(jí)語(yǔ)言中,以便程序員在設(shè)計(jì)時(shí)使用。第4頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 數(shù)據(jù)定義功能 關(guān)系數(shù)據(jù)庫(kù)的基本對(duì)象是表、視圖和索引。因此SQL的數(shù)據(jù)定義功能包括定義數(shù)據(jù)庫(kù)、表、視圖和索引,如表5-2所示。由于視圖是基于表的虛表,索引是依附于表的,因此SQL通常不提供修改視圖和索引的操作。 1數(shù)據(jù)庫(kù)的創(chuàng)建和刪除 關(guān)系數(shù)據(jù)庫(kù)被定義為關(guān)系(表)、索引和視圖的集合。在創(chuàng)建表、視圖和索引前必須首先創(chuàng)建數(shù)據(jù)庫(kù)。 例如,創(chuàng)建學(xué)生選課數(shù)據(jù)庫(kù)stsc,可以用CREATEDATABASEstsc

5、語(yǔ)句來(lái)實(shí)現(xiàn)。第5頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 2基本表的創(chuàng)建、修改和刪除 用CREATEDATABASE建立的數(shù)據(jù)庫(kù)是一個(gè)空的數(shù)據(jù)庫(kù),接下來(lái)應(yīng)該在這個(gè)數(shù)據(jù)庫(kù)中建立表。 (1)創(chuàng)建基本表 表的創(chuàng)建既可以通過(guò)表設(shè)計(jì)器或Visual FoxPro的新建表命令實(shí)現(xiàn),也可以使用SQL中的相應(yīng)命令創(chuàng)建。 命令格式:CREATE TABLE|DBF FREE( (寬度,), (寬度,),) 功能:建立一個(gè)由指定的表結(jié)構(gòu)。 說(shuō)明: :指定要?jiǎng)?chuàng)建的表的名稱。 FREE:指定創(chuàng)建的表是一個(gè)自由表,不被添加到數(shù)據(jù)庫(kù)中。 (寬度,):指定相應(yīng)字段的名稱、類型、寬度及小數(shù)位數(shù)。 第6頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)

6、化查詢語(yǔ)言SQL 例5-1 在學(xué)生選課數(shù)據(jù)庫(kù)stsc中創(chuàng)建一個(gè)學(xué)生表student。 CREATE TABLE student (學(xué)號(hào) c(8),姓名 c(6),性別 c(2),院系 c(8),出生日期 D,入學(xué)成績(jī) N(4,1) 功能:用CREATE TABLE語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)表student。該表中包含了學(xué)號(hào)、姓名、性別、院系、出生日期和入學(xué)成績(jī)6個(gè)字段。第7頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL (2)修改表結(jié)構(gòu) 修改表結(jié)構(gòu)命令以ALTER TABLE開(kāi)頭,后面根據(jù)不同的操作使用不同的命令動(dòng)詞。 增加字段 格式:ALTER TABLE ADD 功能:對(duì)指定的表增加一個(gè)字段。 例5-為學(xué)生

7、student表增加一個(gè)照片字段。 ALTER TABLE student ADD 照片 G 刪除字段 格式:ALTER TABLE DROP 功能:在指定的表中刪除指定字段。 例5-刪除學(xué)生student表中的照片字段。 ALTER TABLE student DROP 照片第8頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 修改字段 格式:ALTER TABLE ALTER 功能:在指定的表中修改指定字段的類型和寬度,不能修改字段名。 例5-把學(xué)生student表中的姓名字段寬度由6改為10。 ALTER TABLE student ALTER 姓名 c(10) 修改字段名 格式:ALTER T

8、ABLE RENAME TO 功能:在指定表中將字段名更名為字段名。 例5-把課程表course中的課名改為課程名稱。 ALTER TABLE course RENAME 課名 TO 課程名稱 說(shuō)明:執(zhí)行一條命令只能對(duì)一個(gè)字段進(jìn)行一種操作。 第9頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL (3)刪除表 DROP TABLE語(yǔ)句用于刪除表的定義和表中的數(shù)據(jù)、建立在表上的索引、視圖等。 格式: DROP TABLE /?RECYCLE 功能:刪除指定的表。 說(shuō)明: /?:將顯示“移去”對(duì)話框,從中可刪除指定的表。 RECYCLE:將刪除的表文件放到回收站,以后可以恢復(fù)。第10頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)

9、化查詢語(yǔ)言SQL 3視圖的創(chuàng)建和刪除 視圖是一個(gè)虛表,是由一個(gè)或者幾個(gè)基本表導(dǎo)出的表。它本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫(kù)中,即數(shù)據(jù)庫(kù)中只存放視圖的定義而不存放視圖對(duì)應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在對(duì)應(yīng)的表中。當(dāng)基本表中的數(shù)據(jù)發(fā)生了變化,視圖中對(duì)應(yīng)的數(shù)據(jù)也隨之改變。第11頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL (1)創(chuàng)建視圖 視圖一經(jīng)創(chuàng)建,就可以通過(guò)它來(lái)查詢數(shù)據(jù)庫(kù)中數(shù)據(jù),又可以用來(lái)定義新的視圖。 格式:CREATE VIEW ( ,) AS 功能:創(chuàng)建一個(gè)由視圖名指定的視圖。 用視圖可以簡(jiǎn)化基本表的瀏覽。例如只想了解學(xué)生表中的學(xué)號(hào)、姓名和院系,可以從學(xué)生表student創(chuàng)建一個(gè)視圖: CREATE VIEW

10、stuyx AS SELECT 學(xué)號(hào),姓名,院系 FROM student 其中,stuyx是視圖名,省略了視圖的列名,隱含是SELECT查詢語(yǔ)句中的列名。 例如,可以通過(guò)創(chuàng)建stu_jsj視圖查看金融系的學(xué)生內(nèi)容,語(yǔ)句如下: CREATE VIEW stu_jsj AS SELECT * FROM student WHERE 院系“金融”第12頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL (2)查詢視圖 視圖定義后,用戶就可以像基本表一樣對(duì)視圖進(jìn)行查詢。 格式:SELECT ( ,) FROM (3)刪除視圖 格式:DROP VIEW 視圖刪除后,其定義的以及在它基礎(chǔ)上再建立的其他視圖將自動(dòng)刪除

11、。 由于視圖是從基本表中衍生出來(lái)的,所以不能進(jìn)行結(jié)構(gòu)修改。若要改變視圖結(jié)構(gòu),則只能刪除后重新定義視圖。第13頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 數(shù)據(jù)查詢功能 數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)的核心操作。數(shù)據(jù)查詢是指根據(jù)用戶的需要,從數(shù)據(jù)庫(kù)中提取所需的數(shù)據(jù)。SQL提供了SELECT語(yǔ)句實(shí)現(xiàn)查詢,該語(yǔ)句具有靈活的使用方式和豐富的功能,既可以完成相對(duì)簡(jiǎn)單的單表查詢,又可以完成復(fù)雜的多表連接查詢和嵌套查詢。 第14頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 1SQL查詢命令 一般格式: SELECT ALL|DISTINCT,; FROM ,; WHERE ; GROUP BY HAVING ; ORDER BY

12、ASC|DESC 功能: 根據(jù)WHERE子句的條件表達(dá)式,從FROM子句指定的基本表或視圖中,找出滿足條件的記錄;再按SELECT子句中的目標(biāo)表達(dá)式,選出記錄中的屬性值,形成結(jié)果表。如果有GROUP BY子句,則將結(jié)果按分組列名的值進(jìn)行分組,該屬性列值相等的記錄為一個(gè)組。如果GROUP BY子句還帶有HAVING短語(yǔ),則只有滿足指定條件的組才能輸出。如果有ORDER BY子句,則結(jié)果還要按排序字段的值進(jìn)行升序或降序排列。第15頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 說(shuō)明: (1)在使用SQL查詢語(yǔ)句時(shí),無(wú)論數(shù)據(jù)庫(kù)是否打開(kāi),F(xiàn)ROM子句中指定的表所在數(shù)據(jù)庫(kù)將自動(dòng)打開(kāi)。 (2)由于FoxPro系

13、統(tǒng)中將Enter鍵解釋為一條語(yǔ)句的結(jié)束,在整個(gè)語(yǔ)句結(jié)束前只能連續(xù)寫,不能用Enter鍵來(lái)?yè)Q行。在SQL中,為了使查詢結(jié)構(gòu)清晰,往往把SELECT子句、FROM子句及各層嵌套以分號(hào)作為分隔符,表示下一行為本行的后續(xù)。 為了便于理解,還是以學(xué)生選課數(shù)據(jù)庫(kù)stsc為例說(shuō)明SELECT語(yǔ)句的基本用法。學(xué)生選課數(shù)據(jù)庫(kù)stsc由三個(gè)基本表組成: 學(xué)生表student(學(xué)號(hào)、姓名、性別、出生日期、院系、入學(xué)成績(jī)); 成績(jī)表score(學(xué)號(hào)、課程編號(hào)、成績(jī)); 課程表course(課程編號(hào)、課程名稱、學(xué)分)。 第16頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 2簡(jiǎn)單查詢 簡(jiǎn)單查詢是基于單表的查詢,由SELECT

14、和FROM短語(yǔ)構(gòu)成無(wú)條件查詢或者由SELECT、FROM和WHERE短語(yǔ)構(gòu)成有條件查詢。 (1)選擇表中的若干列 例5-6 查詢學(xué)生表student中所有院系。 SELECT 院系 FROM student 該結(jié)果中有重復(fù)值,若要去掉重復(fù)值只需加上DISTINCT短語(yǔ): SELECT DISTINCT 院系 FROM student 例5-7 查詢?nèi)w學(xué)生的詳細(xì)記錄。 SELECT * FROM student 其中的“*”表示要查詢所有的列。 例5-8 查詢?nèi)w學(xué)生情況,并將結(jié)果按入學(xué)成績(jī)升序排序。 SELECT * FROM student ORDER BY 入學(xué)成績(jī) ASC 結(jié)果表中的記

15、錄自動(dòng)按入學(xué)成績(jī)的升序排序。第17頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL (2)用WHERE子句選擇滿足條件的記錄 例5-9 查找中文系全體學(xué)生的名單。 SELECT 姓名 FROM student WHERE 院系=中文 例5-10 查找缺少成績(jī)的學(xué)生學(xué)號(hào)和課程號(hào)。 SELECT 學(xué)號(hào),課程編號(hào) FROM score WHERE 成績(jī) IS NULL 例5-11 查找姓“王”的所有學(xué)生姓名和院系。 SELECT 姓名,院系 FROM student WHERE 姓名 LIKE 王% 第18頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 3連接查詢 若查詢涉及到兩個(gè)或兩個(gè)以上的表,就要用到連接查詢

16、。 (1)連接 由于SQL的高度非過(guò)程化,用戶只需要在FROM子句中指出要用到的表名,在WHERE中指出連接條件,連接過(guò)程將由系統(tǒng)自動(dòng)完成。 連接條件 用來(lái)連接兩個(gè)表的條件稱為連接條件,其一般格式為: . . 此外,連接條件還可以用下面的形式: . BETWEEN . AND . 連接條件中的列名稱為連接字段,條件中的各連接字段必須是可比的。 等值連接和非等值連接 當(dāng)連接運(yùn)算符為“=”時(shí),稱為等值連接。使用其他運(yùn)算符稱為非等值連接。第19頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 例5-12 查詢選修課程編號(hào)為“9001”的學(xué)生學(xué)號(hào)和姓名。 學(xué)生的姓名在student表中,學(xué)生選課信息在scor

17、e成績(jī)表中,所以本查詢實(shí)際上同時(shí)student和score兩個(gè)表中的數(shù)據(jù)。這兩個(gè)表之間的聯(lián)系是通過(guò)兩個(gè)表中都有“學(xué)號(hào)”字段實(shí)現(xiàn)的。要查詢學(xué)生及其選修課程的情況,就必須將這兩個(gè)表中學(xué)號(hào)相同的記錄連接起來(lái)。這是一個(gè)等值連接。SQL語(yǔ)句為: SELECT student.學(xué)號(hào),姓名 FROM student, score ; WHERE student.學(xué)號(hào)=score.學(xué)號(hào) AND 課程編號(hào)=9001 注意:student表與score表中均包含學(xué)號(hào)字段,訪問(wèn)時(shí)要加前綴。第20頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 4嵌套查詢 在SQL語(yǔ)言中,一個(gè)SELECTFROMWHERE語(yǔ)句稱為一個(gè)查詢塊

18、。將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HANVIG短語(yǔ)中的查詢稱為嵌套查詢。嵌套查詢使用戶可以用多個(gè)簡(jiǎn)單查詢構(gòu)造復(fù)雜的查詢,從而增強(qiáng)SQL語(yǔ)言的查詢能力。 例5-13 用嵌套查詢實(shí)現(xiàn)例5-12的語(yǔ)句是: SELECT 學(xué)號(hào),姓名 FROM student ; WHERE 學(xué)號(hào) IN(SELECT 學(xué)號(hào) FROM score WHERE 課程編號(hào)=9001) 在本例中,下層查詢塊SELECT學(xué)號(hào)FROM score WHERE課程編號(hào)“9001”是嵌套在查詢塊SELECT學(xué)號(hào),姓名 FROM student WHERE學(xué)號(hào) IN中的。上層查詢塊又稱為“外層查詢”或“父查詢”,下層查詢

19、塊稱為“內(nèi)層查詢”或“子查詢”。一個(gè)子查詢還可以嵌套其他子查詢。第21頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 5計(jì)算查詢 SQL提供了稱為庫(kù)函數(shù)的常用統(tǒng)計(jì)函數(shù),這些庫(kù)函數(shù)增強(qiáng)了查詢功能,進(jìn)一步方便了用戶。這些庫(kù)函數(shù)及其功能如下: COUNT():對(duì)指定字段進(jìn)行計(jì)數(shù) SUM():求指定字段值的總和(該字段必須為數(shù)值) AVG():求指定字段值的平均值(該字段必須為數(shù)值) MAX():求指定字段中的最大值 MIN():求指定字段中的最小值 以上函數(shù)不可以嵌套使用。在使用庫(kù)函數(shù)查詢時(shí),常用AS來(lái)指定列名。第22頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 例5-14 查詢課程總數(shù)。 SELECT CO

20、UNT(*)AS 課程總數(shù) FROM course 在course表中課程編號(hào)的值唯一,所以統(tǒng)計(jì)課程總數(shù)就是統(tǒng)計(jì)表中的記錄數(shù)。 例5-15 查詢選修了課程學(xué)生人數(shù)。 SELECT COUNT(DISTINCT 學(xué)號(hào))AS 選課人數(shù) FROM score 由于每個(gè)學(xué)生選課不止一門課,score表中一個(gè)學(xué)生可能有多個(gè)記錄,因此在COUNT函數(shù)中用DISTINCT去掉重復(fù)記錄。 例5-16 統(tǒng)計(jì)各課程選修的學(xué)生人數(shù)。 SELECT 課程編號(hào),COUNT(學(xué)號(hào))AS 學(xué)生人數(shù) FROM score GROUP BY 課程編號(hào) 本例對(duì)score按課程編號(hào)分組,對(duì)每一組用函數(shù)COUNT求出學(xué)生人數(shù)。第23

21、頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 6查詢結(jié)果輸出 )輸出部分結(jié)果 在SELECT語(yǔ)句中常使用TOP n PERCENT短語(yǔ)來(lái)顯示滿足條件的前幾條記錄。不帶PERCENT參數(shù)時(shí),n是132767之間的整數(shù),說(shuō)明顯示前n條記錄;使用PERCENT參數(shù)時(shí),n是0.0199.99之間的實(shí)數(shù),說(shuō)明顯示查詢結(jié)果中前百分之多少的記錄。 TOP短語(yǔ)要與ORDER BY短語(yǔ)同時(shí)使用才有效。 例5-17 查詢輸出入學(xué)成績(jī)?cè)谇?名的學(xué)生 SELECT * TOP 3 FROM student ORDER BY 入學(xué)成績(jī) DESC 例5-18 查詢輸出入學(xué)成績(jī)?cè)谇?%的學(xué)生 SELECT * TOP 3 PE

22、RCENT FROM student ORDER BY 入學(xué)成績(jī) DESC )輸出去向 在SELECT語(yǔ)句中INTO或TO短語(yǔ),可以指定查詢結(jié)果的輸出去向。第24頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 例5-19 將所有女同學(xué)的信息保存于臨時(shí)表TEMP中。 SELECT * FROM student WHERE 性別=女 INTO CURSOR TEMP 例5-20 將入學(xué)成績(jī)大于450分的學(xué)生信息保存于高分.DBF表中。 SELECT * FROM student WHERE 入學(xué)成績(jī)450 INTO DBF 高分 例5-21 將中文系的學(xué)生信息存放到文件名為“中文”的文本文件中。 SEL

23、ECT * FROM student WHERE 院系=中文 TO FILE 中文第25頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 操縱功能 SQL的數(shù)據(jù)操作功能是指對(duì)已經(jīng)存在的數(shù)據(jù)表進(jìn)行記錄的插入、刪除和修改操作。SQL的數(shù)據(jù)操作包括三個(gè)語(yǔ)句:INSERT(插入記錄)、DELETE(刪除記錄)和UPDATE(修改記錄)。第26頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 1插入數(shù)據(jù) (1)命令格式: INSERT INTO(字段名,字段名)VALUES(表達(dá)式1,表達(dá)式2) 功能:在表尾追加一條包含指定字段值的記錄。 例5-22 給成績(jī)表添加一條選課記錄。 INSERT INTO score (學(xué)

24、號(hào),課程編號(hào),成績(jī)) VALUES (03036003,001,89) 說(shuō)明: 命令中的各表達(dá)式和各字段之間相對(duì)應(yīng)的,其數(shù)據(jù)類型應(yīng)相同。 若插入命令中表的每一個(gè)字段都有具體的值,那么字段名列表可以省略。若只給出部分字段的值,那么必須在命令中列出對(duì)應(yīng)的字段名。 如上列的命令可改為: INSERT INTO score VALUES (“03036003”,”001”,89) (2)命令格式2: INSERT INTO FROM ARRAY| 功能:從數(shù)組或內(nèi)存變量中導(dǎo)入記錄。 第27頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 2刪除數(shù)據(jù) 命令格式: DELETE FROMWHERE 功能:從指定的

25、表中對(duì)滿足條件的那些記錄作刪除標(biāo)記。 說(shuō)明: 該命令執(zhí)行的是邏輯刪除,若要徹底刪除記錄,還需要使用PACK命令。 如果省略條件子句,表示刪除表中所有記錄,但是該表的結(jié)構(gòu)仍然存在。 例5-23 從課程表中刪除課程號(hào)為”001”的記錄。 DELETE FROM course WHERE 課程編號(hào)=001。第28頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 3修改數(shù)據(jù) 修改數(shù)據(jù)是指修改指定表中滿足條件的記錄。 命令格式: UPDATE SET =,= WHERE 功能:按SET子句中的表達(dá)式修改記錄的相應(yīng)的字段值。如果省略條件,表示表中所有記錄都要修改,否則僅修改滿足條件的部分記錄。 例5-24 將學(xué)生

26、表中學(xué)號(hào)為”03036003”的學(xué)生姓名改為“王平”。 UPDATE student SET 姓名=王平 WHERE 學(xué)號(hào)=03036003 例5-25 將所有學(xué)生的入學(xué)成績(jī)加上5分。 UPDATE student SET 入學(xué)成績(jī)=入學(xué)成績(jī)+5第29頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 5.2 用SQL進(jìn)行表的基本操作案例 案例說(shuō)明 本案例要求運(yùn)用SQL語(yǔ)句的定義功能,創(chuàng)建“學(xué)生-成績(jī)-課程”數(shù)據(jù)庫(kù)Stsc,然后在該數(shù)據(jù)庫(kù)中創(chuàng)建表,并建立表間聯(lián)系?;疽笕缦拢?(1)用SQL語(yǔ)句創(chuàng)建數(shù)據(jù)庫(kù)stsc。 (2)在該數(shù)據(jù)庫(kù)下創(chuàng)建3張數(shù)據(jù)庫(kù)表,分別為:學(xué)生表student、成績(jī)表score、課

27、程表course。 (3)設(shè)置學(xué)生表的學(xué)號(hào)為主索引、成績(jī)表的學(xué)號(hào)和課程編號(hào)為候選索引、課程表的課程編號(hào)為主索引。 (4)建立學(xué)生表和成績(jī)表、課程表和成績(jī)表一對(duì)多關(guān)聯(lián)。 (5)設(shè)置數(shù)據(jù)庫(kù)表的完整約束性條件。 (6)向數(shù)據(jù)庫(kù)表中添加記錄。第30頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 操作步驟 (1)創(chuàng)建數(shù)據(jù)庫(kù)stsc (2)創(chuàng)建數(shù)據(jù)庫(kù)表 在命令窗口中輸入CREATE TABLE命令,分別建立學(xué)生表student、成績(jī)表score、課程表couse,并要求對(duì)學(xué)生表中的“學(xué)號(hào)”和課程表中的“課程編號(hào)”字段建立主索引,對(duì)成績(jī)表中的“學(xué)號(hào)”和“課程編號(hào)”字段建立候選索引。在新建成績(jī)表(score)命令中

28、用REFERENCES子句建立了該表與其他兩個(gè)表的關(guān)聯(lián)。 (3)修改表結(jié)構(gòu) (4)給成績(jī)表添加一條記錄或從數(shù)組中導(dǎo)入記錄。 第31頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 本節(jié)知識(shí)點(diǎn) 1完整性約束條件 在案例中用到了SQL數(shù)據(jù)定義功能中的完整性約束條件的使用。 2使用SQL插入命令 當(dāng)表中定義了主索引或候選索引,相應(yīng)的字段設(shè)置成不能為空時(shí),Visuai FoxPro的INSERT或者APPEND命令就無(wú)法使用了,因此這里使用SQL的插入命令。第32頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 5.3 用SQL查詢命令查詢數(shù)據(jù)案例 案例說(shuō)明 本案例要求在“學(xué)生-成績(jī)-課程”數(shù)據(jù)庫(kù)基礎(chǔ)上,運(yùn)用SQL查

29、詢命令,對(duì)stsc數(shù)據(jù)庫(kù)中數(shù)據(jù)實(shí)現(xiàn)單表的簡(jiǎn)單查詢、多表的連接查詢和復(fù)雜的嵌套查詢,靈活地運(yùn)用數(shù)據(jù)庫(kù)內(nèi)的數(shù)據(jù)為實(shí)際應(yīng)用服務(wù)?;疽笕缦拢?(1)用SQL的查詢命令有選擇地顯示表中的部分列。 (2)利用SQL查詢功能實(shí)現(xiàn)計(jì)算查詢和分組計(jì)算查詢。 (3)用SELECT命令進(jìn)行多表的連接查詢。 (4)用嵌套查詢構(gòu)造復(fù)雜的查詢。第33頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 操作步驟 1用簡(jiǎn)單查詢實(shí)現(xiàn)表中部分列和記錄的顯示。 (1)查詢?nèi)w學(xué)生的學(xué)號(hào)和姓名。 在命令窗口中鍵入下列命令: SELECT 學(xué)號(hào),姓名 FROM student (2)查詢?nèi)w學(xué)生的姓名和年齡。 由于表中沒(méi)有直接的年齡字段,因

30、此可以在SQL查詢命令中運(yùn)用表達(dá)式來(lái)實(shí)現(xiàn)。在命令窗口中鍵入下列命令: SELECT 姓名,year(2003-09-01)-year(出生日期) as 年齡 FROM student第34頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL (3)查詢學(xué)校的院系名稱。 由于通過(guò)學(xué)生表可以看到學(xué)校的院系名單,但是會(huì)出現(xiàn)院系名重復(fù),因此用DISTINCT子句去掉重復(fù)。命令如下: SELECT 院系 DISTINCT FROM student (4)查找入學(xué)成績(jī)?cè)?60分至500分之間的學(xué)生信息,并按入學(xué)成績(jī)降序排序。 在命令窗口中輸入下列命令: SELECT * FROM student ; WHERE 入學(xué)

31、成績(jī) BETWEEN 460 AND 500; ORDER BY 入學(xué)成績(jī) DESC (5)查找金融系和建筑系學(xué)生的姓名和出生日期。命令如下: SELECT 姓名,出生日期,院系 FROM student; WHERE 院系 in(金融 ,建筑)第35頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 2利用SQL查詢功能實(shí)現(xiàn)實(shí)現(xiàn)計(jì)算查詢和分組計(jì)算查詢。 (1)求女生的人數(shù)、平均入學(xué)成績(jī)、往常入學(xué)成績(jī)最高分和入學(xué)成績(jī)最低分。在SQL中通過(guò)計(jì)算查詢可以直接對(duì)查詢的結(jié)果進(jìn)行計(jì)算。命令如下: SELECT COUNT(*) AS 女生人數(shù),AVG(入學(xué)成績(jī)) AS 平均入學(xué)成績(jī),; MAX(入學(xué)成績(jī)) AS

32、最高分入學(xué)成績(jī)最高分,MIN(入學(xué)成績(jī)) AS 入學(xué)成績(jī)最低分; FROM student WHERE 性別=女 (2)查詢各門課程的平均成績(jī)。 要統(tǒng)計(jì)課程的平均分,需要用查詢命令中GROUP子句將課程分組,然后計(jì)算平均分。命令如下: SELECT 課程編號(hào),AVG(成績(jī)) AS 課程平均分 FROM score GROUP BY 課程編號(hào) (3)查詢課程的平均成績(jī)高于70分的課程號(hào)和平均成績(jī). 在分組計(jì)算的結(jié)果上再進(jìn)行篩選,可以用HAVING子句實(shí)現(xiàn)。HAVING子句總是跟在GROUP BY后面的,不可單獨(dú)使用。查詢命令如下: SELECT 課程編號(hào),AVG(成績(jī)) AS 課程平均分; FR

33、OM score GROUP BY 課程編號(hào) HAVING AVG(成績(jī))=70第36頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 3用SELECT命令進(jìn)行多表查詢。 在實(shí)際應(yīng)用中,經(jīng)常碰到同時(shí)要用到兩個(gè)表或更多表的數(shù)據(jù)的問(wèn)題,用SELECT的連接查詢就能解決這樣的問(wèn)題。 (1)查詢每個(gè)學(xué)生的選課情況。 學(xué)生信息在student表中,選課信息在score表中,所以本查詢涉及student與score兩個(gè)表中的數(shù)據(jù)。這兩個(gè)表的聯(lián)系是通過(guò)兩個(gè)表中都具有的字段“學(xué)號(hào)”實(shí)現(xiàn)的。SQL語(yǔ)句為: SELECT student.*,score.課程編號(hào),score.成績(jī); FROM student,score

34、WHERE student.學(xué)號(hào)=score.學(xué)號(hào) (2)查詢所有學(xué)生的平均成績(jī)。 本題需要從score表中查詢并統(tǒng)計(jì)各個(gè)學(xué)生的平均成績(jī),然后按學(xué)號(hào)進(jìn)行分組。查詢命令: SELECT student.學(xué)號(hào),student.姓名,AVG(score.成績(jī)) AS 平均成績(jī) ; FROM student,score WHERE student.學(xué)號(hào)=score.學(xué)號(hào) GROUP BY score.學(xué)號(hào)第37頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL (3)查詢平均成績(jī)?cè)谇叭膶W(xué)生的成績(jī)。 本題不僅要查詢出所有學(xué)生的平均成績(jī),而且還要按平均成績(jī)進(jìn)行降序排序,最后只輸出前三名的學(xué)生的信息。查詢命令為: SELECT student.學(xué)號(hào),student.姓名,AVG(score.成績(jī)) AS 平均成績(jī) ; TOP 3 FROM student,score WHERE student.學(xué)號(hào)=score.學(xué)號(hào); GROUP BY score.學(xué)號(hào) ORDER BY 平均成績(jī) DESC第38頁(yè)/共43頁(yè)第5章 結(jié)構(gòu)化查詢語(yǔ)言SQL 4用嵌套查詢構(gòu)造新的數(shù)據(jù)關(guān)系。 (1)查詢選修了“

溫馨提示

  • 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)論