數(shù)據(jù)庫技術及應用03結構化查詢語言-課件_第1頁
數(shù)據(jù)庫技術及應用03結構化查詢語言-課件_第2頁
數(shù)據(jù)庫技術及應用03結構化查詢語言-課件_第3頁
數(shù)據(jù)庫技術及應用03結構化查詢語言-課件_第4頁
數(shù)據(jù)庫技術及應用03結構化查詢語言-課件_第5頁
已閱讀5頁,還剩246頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、結構化查詢SQL(Structured Query Language)是關系數(shù)據(jù)庫的標準語言,對關系模型的發(fā)展和商用DBMS的研制起著重要的作用。SQL語言建立在關系運算理論基礎之上,是介于關系代數(shù)和元組演算之間的一種語言,是一種通用的、功能強大的關系數(shù)據(jù)庫語言。本章將介紹SQL的數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)更新和嵌入式SQL。緒論機械工業(yè)出版社0目錄SQL語言概述3.1SQL數(shù)據(jù)定義3.2 SQL數(shù)據(jù)查詢3.3SQL數(shù)據(jù)更新3.4視圖 3.5SQL 數(shù)據(jù)控制 3.6 嵌入式SQL 3.7機械工業(yè)出版社13.1 SQL語言概述3.1.1 SQL語言的產生與發(fā)展: 1970年,美國IBM研究中心的E

2、.Codd發(fā)表多篇文章,提出了關系模型。1972年,IBM公司開始研制關系數(shù)據(jù)庫管理實驗系統(tǒng)System R,配制的查詢語言稱為SQUARE語言(Specifying Queries As Relational Expression),在語言中使用了大量的數(shù)學符號。1974年,Boyce和Chamberlin把SQUARE語言修改為SEQUEL語言(Structured English Query Language)。這兩種語言在本質上是相同的,但后者去掉了一些數(shù)學符號,并采用英語單詞表示和結構式的語法規(guī)則,后來SEQUEL語言簡稱為SQL,即結構化查詢語言。由于它功能豐富,語言簡捷,倍受用戶

3、歡迎。經眾多計算機公司的不斷修改、擴充和完善,SQL語言最終發(fā)展成為關系數(shù)據(jù)庫的標準語言。機械工業(yè)出版社23.1 SQL語言概述SQL被認為是數(shù)據(jù)庫界的奇跡,幾乎所有著名的關系數(shù)據(jù)庫管理系統(tǒng),如Oracle、Sybase、Informix、Ingres、DB2、SQL server都先后實現(xiàn)了對SQL語言的支持。1986年,美國國家標準協(xié)會(ANSI)發(fā)布了第一個SQL標準,即SQL86,并于1987年獲得國際標準化組織(ISO)的一致通過。SQL86主要包括模式定義、數(shù)據(jù)操作、嵌入式SQL等內容。1989年,ISO組織在模式定義中增補了完整性描述并修訂了一些其他內容,并頒布了SQL89標準。

4、1992年ISO組織對SQL89又進行了擴充和修改,公布了SQL92標準,人們習慣稱為SQL2標準。SQL2標準分為初級SQL2、中級SQL2和完全SQL2三個級別。初級SQL2在SQL89的基礎上增加了某些功能;中級SQL2是在初級SQL2的基礎上擴充了數(shù)據(jù)的類型、操作的種類和完整性方面的內容;完全SQL2進一步擴充了中級SQL2,放寬了對某些操作的限制,并增加了“BIT”的數(shù)據(jù)類型。此外,SQL2還提供對網絡環(huán)境和互聯(lián)網的支持,以實現(xiàn)對遠程數(shù)據(jù)庫的訪問。 機械工業(yè)出版社33.1 SQL語言概述1995年美國國家標準局在SQL2的基礎上進一步擴充了面向對象的功能,并公布了SQL3標準。SQL

5、3支持用戶自定義數(shù)據(jù)類型,提供了遞歸操作、臨時視圖、嵌套查詢、異步DML等新功能。SQL3是目前的最新標準,但由于各種歷史原因,仍有一些數(shù)據(jù)庫僅支持到SQL2。自SQL成為國際標準語言以后,各個數(shù)據(jù)庫廠家紛紛推出各自的SQL軟件或與SQL的接口軟件。這就使大多數(shù)數(shù)據(jù)庫均用SQL作為共同的數(shù)據(jù)存取語言和標準接口,使不同數(shù)據(jù)庫系統(tǒng)之間的互操作有了共同的基礎。SQL成為國際標準,對數(shù)據(jù)庫以外的領域也產生了巨大影響,很多軟件產品將SQL語言的數(shù)據(jù)查詢功能與圖形功能、軟件工程工具、軟件開發(fā)工具、人工智能程序結合起來。SQL已成為數(shù)據(jù)庫領域中一個主流語言,被廣泛應用在各種系統(tǒng)中。 機械工業(yè)出版社43.1

6、SQL語言概述3.1.2 SQL語言的基本概念 SQL語言支持關系數(shù)據(jù)庫的三級模式結構體系,如圖3-1所示。在SQL中,外模式對應于視圖(View)或部分基本表(Base Table),模式對應于基本表,內模式對應于存儲文件(Stored File)。 圖3-1 SQL數(shù)據(jù)庫的體系結構機械工業(yè)出版社53.1 SQL語言概述SQL數(shù)據(jù)庫的體系結構要點如下:(1)一個SQL模式(Schema)是已命名的數(shù)據(jù)組,由表、授權、規(guī)則、約束等組成。(2)一個SQL表由行(Row)組成,行由列(Column)組成,每一列對應一個數(shù)據(jù)項。(3)SQL表有三種類型:基本表、視圖和導出表?;颈硎菍嶋H存儲在數(shù)據(jù)庫

7、中的表,視圖是由若干個基本表或其他視圖構成的表的定義,是虛擬表,而導出表是執(zhí)行查詢后產生的表。(4)一個基本表可以跨一個或多個存儲文件,一個存儲文件也可以存放一個或多個基本表。每個存儲文件與外部存儲上的一個物理文件相對應。 機械工業(yè)出版社63.1 SQL語言概述(5)用戶可以使用SQL語句對基本表和視圖進行查詢等操作。對用戶來說,基本表和視圖是一樣的,都是表。(6)SQL用戶可以是終端用戶,也可以是應用程序。也就是說,SQL語言既可以作為獨立的交互型語言,供交互環(huán)境下的終端用戶使用;也可以作為嵌入式語言嵌入宿主語言的程序中使用,宿主語言可以是Visual Basic(VB)、C語言、COBOL

8、、 FORTRAN、PL/1等程序設計語言。(7)存儲文件的邏輯結構組成了關系數(shù)據(jù)庫的內模式。存儲文件的物理結構是任意的,對用戶是透明的。 機械工業(yè)出版社73.1 SQL語言概述3.1.3 SQL語言的主要特點 SQL語言是介于關系數(shù)據(jù)庫與關系演算之間的一種結構化查詢語言。雖然SQL是一種查詢語言,但實際上它的功能并非查詢信息那么簡單,主要功能包括數(shù)據(jù)查詢(Data Query)、數(shù)據(jù)操縱(Data Manipulation)、數(shù)據(jù)定義(Data Definition)和數(shù)據(jù)控制(Data Control),是一種通用的、功能強大而又簡單易學的關系數(shù)據(jù)庫語言,其主要特點包括以下幾個方面。 機械

9、工業(yè)出版社83.1 SQL語言概述1綜合統(tǒng)一 數(shù)據(jù)庫系統(tǒng)的主要功能是通過數(shù)據(jù)庫支持的數(shù)據(jù)語言來實現(xiàn)。層次模型、網狀模型等非關系模式數(shù)據(jù)庫語言大多分為模式數(shù)據(jù)定義語言(模式DDL,Schema Data Definition Language)、外模式數(shù)據(jù)定義語言(外模式DDL或子模式DDL,Subschema Data Definition Language)、與數(shù)據(jù)存儲有關的描述語言(DSDL,Data Storage Description Language)及數(shù)據(jù)操縱語言(DML,Data Manipulation Language),分別用于定義模式、外模式、內模式和進行數(shù)據(jù)的存取與處

10、置。不足之處是:當用戶數(shù)據(jù)庫投入運行之后,如果需要修改模式,必須停止現(xiàn)有數(shù)據(jù)庫的運行,轉儲數(shù)據(jù),修改模式并編譯后再重裝數(shù)據(jù)庫,非常麻煩。SQL語言集數(shù)據(jù)定義語言DDL、數(shù)據(jù)操縱語言DML、數(shù)據(jù)控制語言DCL的功能于一體,語言風格統(tǒng)一,可以獨立完成數(shù)據(jù)庫生命周期中的全部活動,包括定義關系模式、建立數(shù)據(jù)庫、插入數(shù)據(jù)、查詢、更新、維護、數(shù)據(jù)庫重構、數(shù)據(jù)庫安全控制等一系列操作要求,為數(shù)據(jù)庫應用系統(tǒng)提供了良好的開發(fā)環(huán)境。更重要的是,用戶數(shù)據(jù)庫在投入運行后,在不影響數(shù)據(jù)庫運行的情況下,可根據(jù)需要隨時修改模式,從而使系統(tǒng)具有良好的可擴展性。機械工業(yè)出版社93.1 SQL語言概述2高度非過程化 非關系數(shù)據(jù)模型

11、的數(shù)據(jù)操縱語言是面向過程的語言,如果要完成某項請求,必須指出存取路徑。而SQL語言是高度非過程化語言,當進行數(shù)據(jù)操作時,只需要指出“做什么”,無須指明“怎么做”,存儲路徑對用戶來說是透明的,而不需要指出存儲路徑,存儲路徑的選擇和SQL語句的操作過程全部是由系統(tǒng)自動完成的,從而大大減輕了用戶的負擔,同時有利于提高數(shù)據(jù)的獨立性。機械工業(yè)出版社103.1 SQL語言概述3面向集合的操作方 法 非關系數(shù)據(jù)模型采用面向記錄的操作方式,操作對象是一條記錄。例如查詢工資在2000元以上的員工姓名,用戶必須要編寫一段處理程序,指明具體處理過程,包括按照哪條存儲路徑、如何循環(huán)等,才能一條一條地把滿足要求的員工記

12、錄查找出來。而SQL語言采用面向集合的操作方式,不僅操作對象、查找結果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合。機械工業(yè)出版社113.1 SQL語言概述4以同一種語言結構提供兩種使用方式 SQL語言提供兩種工作方式:一種是交互式命令方式,另一種是嵌入式程序方式。第一種方式是用戶可以在終端鍵盤上輸入SQL命令,對數(shù)據(jù)庫進行操作,能夠獨立地用于聯(lián)機交互的使用方式,所以稱為自含式語言;第二種方式是將SQL語句嵌入到高級程序設計語言(如C語言、C+語言、COBOL、 FORTRAN、PowerBuilder、PL/1)程序中,供程序員設計程序時使用,因此又稱為嵌入式語言。

13、而在以上兩種不同的使用方式下,SQL語言的語法結構基本上是一致的。這種以統(tǒng)一的語法結構提供兩種不同的使用方式的做法,提供了極大的靈活性和方便性。機械工業(yè)出版社123.1 SQL語言概述5語言簡潔,易學易用 SQL語言不僅功能強大,而且十分簡潔,完成核心功能只用了9個動詞,如表3-1所示。SQL語言接近英語口語,因此容易學習,方便使用。 表3-1 SQL語言功能表SQL功能 動 詞 數(shù)據(jù)查詢SELECT數(shù)據(jù)定義CREATE,DROP,ALTER數(shù)據(jù)操縱INSERT,UPDATE,DELETE數(shù)據(jù)控制GRANT,REVOKE機械工業(yè)出版社133.2 SQL數(shù)據(jù)定義 關系數(shù)據(jù)庫系統(tǒng)支持三級模式結構,

14、其模式、外模式和內模式中的基本對象有表、視圖和索引。因此SQL的數(shù)據(jù)定義功能包括定義表、定義視圖和定義索引,具體命令如表3-2所示。 機械工業(yè)出版社143.2 SQL數(shù)據(jù)定義表3-2 SQL的數(shù)據(jù)定義語句 操作對象 操 作 方 式 創(chuàng) 建刪 除修 改表CREATETABLEDROPTABLEALTERTABLE視圖CREATE VIEWDROP VIEW索引CREATE INDEX DROP INDEX 機械工業(yè)出版社153.2 SQL數(shù)據(jù)定義 在數(shù)據(jù)庫中獨立存在的表稱為基本表,一個基本表對應一個基本關系,它是由CREATE TABLE命令來創(chuàng)建的。基本表的定義是指建立基本的關系模式,基本表的

15、變更是指對數(shù)據(jù)庫中已存在的基本表進行修改或刪除。數(shù)據(jù)庫通常是包含多個基本表的一個數(shù)據(jù)集。 機械工業(yè)出版社163.2 SQL數(shù)據(jù)定義 一個基本表可以建立若干索引,它們都依附于基本表且存放在存儲文件中。索引屬于物理存儲概念,而不是邏輯概念。有些關系型數(shù)據(jù)庫同時包括索引機制和主鍵機制,相比而言,主鍵機制占用系統(tǒng)資源較少,并且效率較高。 機械工業(yè)出版社173.2 SQL數(shù)據(jù)定義 視圖對應于外模式,它是從現(xiàn)有的一個或幾個基本表中抽取若干子集組成的“虛表”。 視圖可以通過SQL中的CREATE VIEW命令來來創(chuàng)建,創(chuàng)建視圖只是把視圖的定義存放在系統(tǒng)中,而不是直接存儲視圖相應的數(shù)據(jù),這些數(shù)據(jù)仍然存放在導出

16、視圖的基本表中。只有當用戶使用該視圖時,才從相應的表中獲取數(shù)據(jù)。SQL在查詢視圖時與基本表完全相同,并且用戶可以在視圖上再定義視圖,但用視圖對數(shù)據(jù)庫中的數(shù)據(jù)進行增加、刪除、修改等更新操作時有一定的限制。本節(jié)將介紹如何定義基本表和索引,視圖的定義方法將在3.5節(jié)介紹。機械工業(yè)出版社183.2 SQL數(shù)據(jù)定義3.2.1 基本數(shù)據(jù)類型 不同的數(shù)據(jù)庫系統(tǒng)支持的數(shù)據(jù)類型不完全相同。SQL提供的主要數(shù)據(jù)類型(也稱為“域類型”)有以下幾種:(1)數(shù)值型 INTEGER 全字長二進制整數(shù)(也可寫成INT) SMALLINT 半字長二進制整數(shù) REAL 取決于機器精度的浮點數(shù) DOUBLE PRECISION

17、取決于機器精度的雙精度浮點數(shù) FLOAT(n) 浮點數(shù),精度至少為n位數(shù)字 NUMERIC(p,d) 定點數(shù),由p位數(shù)字(不包括符號、 小數(shù)點)組 成,小數(shù)點后面有d位數(shù)字 (也可以寫成 DECIMAL(p,d)DEC(p,d)機械工業(yè)出版社193.2 SQL數(shù)據(jù)定義(2)字符串型 CHAR(n) 長度為n的定長字符串 VARCHAR(n) 具有最大長度為n的變長字符串 GRAPHIC(n) 長度為n的定長圖形字符串 VARGRAPHIC(n) 具有最大長度為n的定長圖形字符串(3)位串型 BIT(n) 長度為n的二進制位串 BIT VARYING(n) 最大長度為n的變長二進制位串(4)時間

18、型 DATE 日期型,格式為YYYY-MM-DD TIME 時間型,格式為HH:MM:SS TIMESTAMP 日期加時間機械工業(yè)出版社203.2 SQL數(shù)據(jù)定義3.2.2 創(chuàng)建、修改和刪除基本表 如果在系統(tǒng)中創(chuàng)建了一個數(shù)據(jù)庫,那么就可以在數(shù)據(jù)庫中定義基本表。對基本表的操作包括創(chuàng)建、修改和刪除。1基本表的創(chuàng)建 建立數(shù)據(jù)庫最基本、最重要的一步就是創(chuàng)建基本表,也就是定義基本表的結構。SQL語言使用CREATE TABLE語句創(chuàng)建基本表,其一般格式為:CREATE TABLE ( 列級完整性約束條件 , 列級完整性約束條件 ,); 其中,是所要定義的基本表的名字,基本表可以由一個或多個屬性(列)組成

19、,每個列的類型可以是基本數(shù)據(jù)類型,也可以是用戶預先定義的域名。機械工業(yè)出版社213.2 SQL數(shù)據(jù)定義 建立基本表的同時通常還可以定義與該表有關的完整性約束條件,這些完整性約束條件被存儲在系統(tǒng)的數(shù)據(jù)字典中,當用戶操作表中數(shù)據(jù)時,由DBMS自動檢查該操作是否違背這些完整性約束條件。如果完整性約束條件涉及該表的多個屬性列,則必須定義在表級上,否則既可以定義在列級上,也可以定義在表級上。 機械工業(yè)出版社223.2 SQL數(shù)據(jù)定義 例3.1 設教學管理數(shù)據(jù)庫S-C中有三個基本表:學生表STUDENT、學生選課表SC和課程表COURSE。其中學生表由學號SNO、姓名SNAME、性別SSEX、年齡SAGE

20、、所在系SDEPT五個屬性組成;學生選課表由學號SNO、課程號CNO、成績GRADE三個屬性組成;課程表由課程號CNO、課程名CNAME、先修課程號CPNO、學分CREDITS 四個屬性組成。 STUDENT (SNO, SNAME, SSEX, SAGE, SDEPT) SC (SNO, CNO, GRADE) COURSE (CNO, CNAME, CPNO, CREDITS)機械工業(yè)出版社233.2 SQL數(shù)據(jù)定義基本表STUDENT可用下列命令創(chuàng)建: CREATE TABLE STUDENT (SNO CHAR(5) NOT NULL UNIQUE, /*列級完整性約 束條件, SNO

21、、SNAME不能為空值,取值唯一*/ SNAME CHAR(8) NOT NULL UNIQUE, SSEX CHAR(2), SAGE INT, SDEPT CHAR(20), PRIMARY KEY(SNO); 機械工業(yè)出版社243.2 SQL數(shù)據(jù)定義 系統(tǒng)執(zhí)行上面的CREATE TABLE命令后,就在數(shù)據(jù)庫中建立一個新的空表STUDENT,并將有關表的定義以及有關約束條件存放在數(shù)據(jù)字典中。定義表的各個屬性時需要指明其數(shù)據(jù)類型及長度。 SQL中允許列值是空值,但當要求某一列的值不允許為空值時,就應在定義該列時寫上關鍵字“NOT NULL”,例如這里的學號SNO、學生姓名SNAME后都有“N

22、OT NULL”字樣。PRIMARY KEY(SNO)表示定義主碼為SNO。 機械工業(yè)出版社253.2 SQL數(shù)據(jù)定義對于基本表SC、COURSE可以用下列語句創(chuàng)建:CREATE TABLE SC (SNO CHAR(5), CNO CHAR(4), GRADE INT, PRIMARY KEY(SNO,CNO), FOREIGN KEY(SNO) REFERENCES STUDENT(SNO), FOREIGN KEY(CNO) REFERENCES COURSE(CNO), CHECK (GRADE BETWEEN 0 AND 100);CREATE TABLE COURSE (CNO C

23、HAR(4) NOT NULL, CNAME CHAR(10) NOT NULL, CPNO CHAR(4), CREDITS INT, PRIMARY KEY(CNO); 機械工業(yè)出版社263.2 SQL數(shù)據(jù)定義 在基本表SC的定義中說明有三個屬性列,主鍵是(SNO,CNO)。還定義了兩個外碼,并指出外碼SNO和基本表STUDENT中的SNO相對應,外碼CNO和基本表COURSE中的CNO相對應。在本例中對應的屬性列名稱恰好同名,實際上也可以不同名,只要指出其對應性即可。外碼體現(xiàn)了關系數(shù)據(jù)庫的參照完整性。定義中還使用了一個檢查子句,指出成績GRADE的值應在0100之間。 在基本表COURS

24、E的定義中也說明有三個屬性列,主碼是CNO,同時屬性CNO和CNAME不允許為空值。 機械工業(yè)出版社273.2 SQL數(shù)據(jù)定義 2基本表的修改 在基本表建立后,可根據(jù)實際需要對基本表的結構進行修改,可以增加新的屬性列和新的完整性約束條件、刪除指定列的完整性約束條件,還可以修改數(shù)據(jù)類型、寬度等。SQL語言用ALTER TABLE語句修改基本表,其一般格式為: ALTER TABLE ADD 完整性約束 DORP MODIFY ; 其中指出要修改的基本表;ADD子句用于增加新列和新的完整性約束條件;DORP子句用于刪除指定的完整性約束條件;MODFIY子句用于修改原有的列定義,包括修改列名和數(shù)據(jù)類

25、型。 機械工業(yè)出版社283.2 SQL數(shù)據(jù)定義 (1)增加列 例3.2 在基本表STUDENT中增加一個地址列ADDRESS, 可用下列語句實現(xiàn): ALTER TABLE STUDENT ADD ADDRESS CHAR(30) 應該注意的是,不論基本表中原來是否已有數(shù)據(jù),新增加 的列不能定義為“NOT NULL”,基本表在增加一個屬性列后,原有元組在新增加的列上的值都被定義為空值NULL。 機械工業(yè)出版社293.2 SQL數(shù)據(jù)定義 (2)補充定義主碼 由于SQL并不要求每個基本表在建立時都定義主碼,因此提供了一個補充定義主碼的命令,在需要時定義主碼。被定義為主碼的列名表必須滿足NOT NUL

26、L和唯一性條件。ALTER TABLE ADD PRIMARY KEY(); 機械工業(yè)出版社303.2 SQL數(shù)據(jù)定義 (3)撤銷主碼定義 如果定義了主碼,系統(tǒng)一般在主碼上自動建立索引,并在插入新的元組時,進行主碼唯一性檢驗。這在插入大量數(shù)據(jù)時,會嚴重影響系統(tǒng)的性能。利用下面的命令,可以暫時撤銷主碼定義。 ALTER TABLE DORP PRIMARY KEY; 機械工業(yè)出版社313.2 SQL數(shù)據(jù)定義 (4)補充定義外碼 ALTER TABLE ADD FOREIGN KEY )() REFERENCES ON DELETERESTRICT|CASCADE|SET NULL; 上述命令中,

27、花括號表示任選三項中的一項,RESTRICT為默認值。 機械工業(yè)出版社323.2 SQL數(shù)據(jù)定義 (5)撤銷外碼定義 定義了外碼,必須引用完整性檢驗,這在有些情況下會影響系統(tǒng)的性能。為此,SQL提供了撤銷外碼的命令,在必要時暫時撤銷外碼。 ALTER TABLE DORP ;(6)修改屬性的數(shù)據(jù)類型及約束條件 機械工業(yè)出版社333.2 SQL數(shù)據(jù)定義例3.3 將表STUDENT中年齡的數(shù)據(jù)類型改為半字長整數(shù)(SMALLINT)。 ALTER TABLE STUDENT MODIFY SAGE SMALLINT; 修改原有的屬性列定義有可能會破壞已有的數(shù)據(jù)。例3.4 刪除表STUDENT中學生姓

28、名必須取唯一值的約束。 ALTER TABLE STUDENT DORP UNIQUE(SNAME); 標準SQL沒有提供刪除屬性列的語句,用戶只能間接實現(xiàn)這一功能,可以先把表中要保留的屬性列及其內容復制到一個新表中,然后刪除原表,再建新表重新命名為原表名。 機械工業(yè)出版社343.2 SQL數(shù)據(jù)定義3基本表的刪除 當某個基本表不再需要時,用戶可以使用DORP TABLE命令刪除它。其一般格式為:DORP TABLE ; 基本表一旦刪除,表中的數(shù)據(jù)以及此表上建立的索引和視圖都將自動被刪除掉。因此執(zhí)行刪除基本表的操作一定要格外謹慎。例3.5 刪除STUDENT表。 DORP TABLE STUDE

29、NT;機械工業(yè)出版社353.2 SQL數(shù)據(jù)定義3.2.3 創(chuàng)建和維護索引 索引屬于物理存儲的路徑概念,而不是邏輯的概念。在定義基本表時定義索引,就會把數(shù)據(jù)庫的物理結構和邏輯結構混在一起。建立索引是加快查詢速度的有效手段。用戶可以根據(jù)應用環(huán)境的需要,在基本表上建立一個或多個索引,以提供多種存取路徑,加快查找速度。一般來說,建立與刪除索引由數(shù)據(jù)庫管理員DBA或表的屬主(即建立該表的人)負責完成。系統(tǒng)在存取數(shù)據(jù)時會自動選擇合適的索引作為存取路徑,用戶不必也不能選擇索引。 機械工業(yè)出版社363.2 SQL數(shù)據(jù)定義1索引的建立 在SQL語言中,建立索引使用CREATE INDEX語句,其一般格式為: C

30、REATE UNIQUECLUSTER INDEX ON (,); 機械工業(yè)出版社373.2 SQL數(shù)據(jù)定義 其中,表名是要建立索引的基本表的名字。索引可以建立在該表的一列或多列上,各列名之間用逗號分隔。每個列名后面還可以用次序指定索引值的排列次序,可選ASC(升序)或DESC(降序),默認值為ASC。 UNIQUE表明此索引的每一個索引值只對應唯一的數(shù)據(jù)記錄。 CLUSTER表示要建立的索引是聚簇索引。所謂聚簇索引是指索引項的順序與表中記錄的物理順序一致的索引組織。機械工業(yè)出版社383.2 SQL數(shù)據(jù)定義 例3.6 在基本表STUDENT中的SNAME(姓名)列 上建立一個聚簇索引,并且ST

31、UDENT表中的記錄將按照SNAME值的降序存放。 CREATE CLUSTER INDEX STU-SNAME ON STUDENT (SNAME DESC); 用戶可以在最常查詢的列上建立聚簇索引以提高查詢效率。值得注意的是,每個基本表上最多只能建立一個聚簇索引。建立聚簇索引后,更新索引列上的數(shù)據(jù)時,往往導致基本表中元組的物理順序的變更,時間開銷較大,因此對于經常更新的列不易建立聚簇索引。機械工業(yè)出版社393.2 SQL數(shù)據(jù)定義 例3.7 為教學管理數(shù)據(jù)庫中的STUDENT、SC、COURSE三個表建立索引。其中STUDENT表按學號(SNO)升序建立唯一索引,SC表按學號(SNO)升序和

32、成績(GRADE)降序建立唯一索引,COURSE表按課程號(CNO)升序建立唯一索引。 CREATE UNIQUE INDEX STU-SNO ON STUDENT (SNO ASC); CREATE UNIQUE INDEX SC-SNO ON SC (SNO ASC, GRADE DESC); CREATE UNIQUE INDEX C-CNO ON COURSE (CNO ASC);機械工業(yè)出版社403.2 SQL數(shù)據(jù)定義2索引的刪除 索引建立以后,就由系統(tǒng)使用和維護它,不需用戶干預。建立索引是為了減少查詢操作的時間。但如果數(shù)據(jù)增加和修改頻繁,系統(tǒng)會花費許多時間來維護索引。這時可以刪除不

33、必要的索引。 在SQL語言中,刪除索引使用DORP INDEX語句,其一般格式為:DORP INDEX ;機械工業(yè)出版社413.2 SQL數(shù)據(jù)定義 例3.8 刪除基本表STUDENT中的STU-SNAME索引。DORP INDEX ; 刪除索引時,系統(tǒng)會同時從數(shù)據(jù)字典中刪去有關該索引的描述。機械工業(yè)出版社423.3 SQL數(shù)據(jù)查詢3.3.1 SELECT查詢命令 數(shù)據(jù)查詢是數(shù)據(jù)庫的核心操作。SQL提供了SELECT語句進行數(shù)據(jù)庫的查詢,該語句具有靈活的使用方式和豐富的功能。其一般格式為: SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING OR

34、DER BY ASC|DESC;機械工業(yè)出版社433.3 SQL數(shù)據(jù)查詢 整個SELECT語句的含義是:根據(jù)WHERE子句給出的條件表達式,從FROM子句指定的基本表或視圖中找出滿足條件的元組,再按照SELECT子句中的目標列表達式,選出元組中的屬性值形成結果表。如果有GROUP子句,則將結果按的值進行分組,該屬性列值相等的元組為一個組。如果GROUP子句帶有HAVING短語,則只輸出滿足指定條件的組。如果有ORDER子句,則結果表還要按的值的升序或降序排序。機械工業(yè)出版社443.3 SQL數(shù)據(jù)查詢 SELECT語句既可以完成簡單的單表查詢,也可以完成復雜的連接查詢和嵌套查詢,SELECT語句

35、能表達所有的關系代數(shù)表達式。下面以教學管理數(shù)據(jù)庫S-C為例說明SELECT語句的各種用法。 教學管理數(shù)據(jù)庫中包含三個基本表:學生表:STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT) STUDENT由學號(SNO)、姓名(SNAME)、性 別(SSEX)、年齡(SAGE)、所在系(SDEPT) 五個屬性組成,其中SNO為主碼。機械工業(yè)出版社453.3 SQL數(shù)據(jù)查詢課程表: CORUSE(CNO,CNAME,CPNO,CREDITS) CORUSE有課程號(CNO)、課程名 (CNAME)、選修課號(CPNO)、學分 (CREDITS)四個屬性組成,其中CNO為主碼。學生選課

36、表:SC(SNO,CNO,GRADE) SC由學號(SNO)、課程號(CNO)、成績 (GRADE)三個屬性組成,其中主碼為 (SNO,CNO)。機械工業(yè)出版社463.3 SQL數(shù)據(jù)查詢SNOSNAMESSEXSAGESDEPTS8201王晨男21計算機系S8202李俊女20計算機系S8203劉利敏女19計算機系S8204張海男20計算機系S8801吳浩男18數(shù)學系S8802程小磊男20數(shù)學系S8803張建超男19數(shù)學系S9101李云鵬男18自動化系S9102劉一鳴女20自動化系表3-3 基本STUDENT機械工業(yè)出版社473.3 SQL數(shù)據(jù)查詢CNOCCNAMECPNOCREDITS1高等數(shù)

37、學 22英語43C語言44數(shù)據(jù)結構345操作系統(tǒng)446離散數(shù)學137數(shù)據(jù)庫438網絡原理53表3-4 基本表COURSE機械工業(yè)出版社483.3 SQL數(shù)據(jù)查詢SNOCNOGRADES8201195S8201385S8202188S8202274S8202383S8203194S8203291S82044 75S8204590S8801486表3-5 基本表SC機械工業(yè)出版社493.3 SQL數(shù)據(jù)查詢3.3.2 簡單查詢 簡單查詢是指數(shù)據(jù)源只涉及一個基本表或一個視圖的查詢。1選擇表中的若干列 選擇表中的若干列,既可以是選擇表中的全部列,也可以是選擇表中的部分列。選擇表中的全部列或部分列,這就是

38、投影運算。 (1) 查詢指定列 在多數(shù)情況下,用戶只對表中的一部分屬性列感興趣,這時可通過在SELECT子句的目標列表達式中指定要查詢的屬性列。機械工業(yè)出版社503.3 SQL數(shù)據(jù)查詢 例3.9 查詢全體學生的學號、姓名和所在系。SELECT SNO, SNAME, SEPTFROM STUDENT; 查詢結果如表3-6所示。機械工業(yè)出版社513.3 SQL數(shù)據(jù)查詢SNOSNAMESDEPTS8201王晨計算機系S8202李俊計算機系S8203劉利敏計算機系S8204張海計算機系S8801吳浩數(shù)學系S8802程小磊數(shù)學系S8803張建超數(shù)學系S9101李云鵬自動化系S9102劉一鳴自動化系表3

39、-6 查詢學號、姓名和所在系結果機械工業(yè)出版社523.3 SQL數(shù)據(jù)查詢例3.10 查詢全體學生的姓名、學號、性別和所在系。SELECT SNAME, SNO, SSEX, SEPTFROM STUDENT;查詢結果如表3-7所示。 機械工業(yè)出版社533.3 SQL數(shù)據(jù)查詢SNOSNAMESSEXSDEPTS8201王晨男計算機系S8202李俊女計算機系S8203劉利敏女計算機系S8204張海男計算機系S8801吳浩男數(shù)學系S8802程小磊男數(shù)學系S8803張建超男數(shù)學系S9101李云鵬男自動化系S9102劉一鳴女自動化系表3-7查詢學號、姓名、性別和所在系結果目標列表達式中各個列的先后順序可

40、以與表中的順序不一致,用戶可以根據(jù)應用的需要改變列的顯示順序。機械工業(yè)出版社543.3 SQL數(shù)據(jù)查詢(2) 查詢全部列 如果要查詢表中的所有屬性列,可以使用兩種方法:一種方法是在目標列表達式中列出所有的列名;另一種方法是如果列的顯示順序與基本表中定義的順序相同,則可以簡單地將目標列表達式指定為星號“*”。例3.11 查詢全體學生的記錄。SELECT SNO, SNAME, SAGE, SSEX, SEPTFROM STUDENT; 等價于: SELECT * FROM STUDENT;查詢結果如表3-8所示。機械工業(yè)出版社553.3 SQL數(shù)據(jù)查詢例3.10 查詢全體學生的姓名、學號、性別和

41、所在系。SELECT SNAME, SNO, SSEX, SEPTFROM STUDENT;查詢結果如表3-7所示。 機械工業(yè)出版社563.3 SQL數(shù)據(jù)查詢SNOSNAMESSEXSAGESDEPTS8201王晨男21計算機系S8202李俊女20計算機系S8203劉利敏女19計算機系S8204張海男20計算機系S8801吳浩男18數(shù)學系S8802程小磊男20數(shù)學系S8803張建超男19數(shù)學系S9101李云鵬男18自動化系S9102劉一鳴女20自動化系表3-8 查詢全體學生記錄結果機械工業(yè)出版社573.3 SQL數(shù)據(jù)查詢(3)查詢經過計算的列 SELECT子句中的目標列表達式可以是表中存在的屬

42、性列,也可以是表達式、常量或函數(shù)。例3.12 查詢全體學生的姓名和出生年份。 在STUDENT表中只記錄了學生的年齡,而沒有記錄學生的出生年份,但可以經過計算得到出生年份,即用當前年(假設為2007年)減去年齡,得到出生年份。因此,實現(xiàn)此功能的查詢語句為:SELECT SNAME,2007SAGEFROM STUDENT;查詢結果如表3-9所示。機械工業(yè)出版社583.3 SQL數(shù)據(jù)查詢SNAMESSEX王晨1986李俊1987劉利敏1988張海1987吳浩1989程小磊1987張建超1988李云鵬1989劉一鳴1987表3-9 查詢姓名和出生年份結果機械工業(yè)出版社593.3 SQL數(shù)據(jù)查詢例3

43、.13 查詢全體學生的姓名和出生年份,并在出生年 份列前加入一個列,此列的每行數(shù)據(jù)均為“YEAR OF BIRTH”常量值。SELECT SNAME, YEAR OF BIRTH,2007SAGEFROM STUDENT;查詢結果如表3-10所示。機械工業(yè)出版社603.3 SQL數(shù)據(jù)查詢表3-10 查詢并加入新列結果SNAME王晨YEAROFBIRTH 1986李俊YEAROFBIRTH1987劉利敏YEAROFBIRTH1988張海YEAROFBIRTH1987吳浩YEAROFBIRTH1989程小磊YEAROFBIRTH1987張建超YEAROFBIRTH1988李云鵬YEAROFBIRT

44、H1989劉一鳴YEAROFBIRTH1987注意,選擇列表中的常量和計算是對表中的每一行進行的。機械工業(yè)出版社613.3 SQL數(shù)據(jù)查詢例3.14 查詢全體學生的姓名、出生年份和所在系,要求用小寫字母表示學號中的字母。 SELECT ISLOWER(SNO) ,SNAME, YEAR OF BIRTH,2007SAGEFROM STUDENT;查詢結果如表3-11所示。機械工業(yè)出版社623.3 SQL數(shù)據(jù)查詢表3-11 查詢并用小寫字母標示系名結果SNAMES8201王晨YEAROFBIRTH 1986S8202李俊YEAROFBIRTH1987S8203劉利敏YEAROFBIRTH1988

45、S8204張海YEAROFBIRTH1987S8801吳浩YEAROFBIRTH1989S8802程小磊YEAROFBIRTH1987S8803張建超YEAROFBIRTH1988S9101李云鵬YEAROFBIRTH1989S9102劉一鳴YEAROFBIRTH1987機械工業(yè)出版社633.3 SQL數(shù)據(jù)查詢 可以看出經過計算的列、函數(shù)的列和常量列顯示結果都沒有列標題,通過指定列的別名可以改變查詢結果的列標題,這對于算數(shù)表達式、常量、函數(shù)名的目標列尤其有用。 改變列標題的語法格式為:列名|表達式 AS 列標題或列標題=列名|表達式機械工業(yè)出版社643.3 SQL數(shù)據(jù)查詢例如,對于例3.14,

46、可以定義如下列別名:SELECT ISLOWER(SNO) LSNO,SNAME, YEAR OF BIRTH BRITH, 2007SAGE BRITHDAYFROM STUDENT;查詢結果間如表3-12所示。機械工業(yè)出版社653.3 SQL數(shù)據(jù)查詢表3-12 查詢并定義別名結果LSNO SNAMEBIRTHBRITHDAYS8201王晨YEAROFBIRTH 1986S8202李俊YEAROFBIRTH1987S8203劉利敏YEAROFBIRTH1988S8204張海YEAROFBIRTH1987S8801吳浩YEAROFBIRTH1989S8802程小磊YEAROFBIRTH1987

47、S8803張建超YEAROFBIRTH1988S9101李云鵬YEAROFBIRTH1989S9102劉一鳴YEAROFBIRTH1987機械工業(yè)出版社663.3 SQL數(shù)據(jù)查詢2選擇表中的若干元組 上面介紹的例子全部都是選擇表中的所有記錄,而沒有對表中的記錄進行任何有條件的選擇。事實上,在查詢的過程中,除了可以選擇列之外,還可以對行進行選擇,使查詢結果更加滿足用戶的要求。(1)消除取值相同的元組 本來在數(shù)據(jù)庫表中不存在取值完全相同的元組,但在進行了對列的選擇后,在查詢結果中就有可能出現(xiàn)取值完全相同的行了。取值相同的行在結果中是沒有意義的,因此應消除掉。機械工業(yè)出版社673.3 SQL數(shù)據(jù)查詢

48、例3.15 在基本表SC中查詢選修了課程的學生學號。SELECT SNO FROM SC;查詢結果如表3-13所示。SNOS8201S8202S8203S8204S8801S8802S8803S9101S9102 表3-13 查詢學號結果機械工業(yè)出版社683.3 SQL數(shù)據(jù)查詢 在這個查詢結果中有許多重復的元組,一個學生選修了多少門課程,其學號就在結果中重復幾次。如果想去掉結果表中的重復行,必須指定DISTINCT短語:SELECT DISTINCT SNO FROM SC;執(zhí)行結果如表3-14所示。機械工業(yè)出版社69TableSNOS8201S8202S8203S8204S8801表3-14

49、去掉重復行結果 DISTINCT關鍵字在SELECT的后邊,目標列表達式的前邊。如果沒有指定DISTINCT短語,則默認ALL,即保留結果表中取值重復的行。SELECT SNO FROM SC;等價于:SELECT ALL SNO FROM SC;機械工業(yè)出版社703.3 SQL數(shù)據(jù)查詢(2)查詢滿足條件的元組查詢滿足條件的元組是通過WHERE子句來實現(xiàn)的。WHERE子句常用的查詢條件如表3-15所示。查詢條件謂 詞比較(比較運算符)=,=,=,!=,!,!,NOT+上述比較運算符確定范圍BETWEEN AND,NOT BETWEEN AND確定集合IN,NOT IN字符匹配LIKE,NOT

50、LIKE空值IS NULL,IS NOT NULL多重條件(邏輯謂詞)AND,OR表3-15 常用的查詢條件機械工業(yè)出版社713.3 SQL數(shù)據(jù)查詢比較大小的查詢例3.16 查詢計算機系的所有學生的學號、姓名。SELECT SNO, SNAMEFROM STUDENTWHERE SDEPT=計算機系;查詢結果如表3-16所示。SNOSNAMES8201王晨S8202李俊S8203劉利敏S8204張海表3-16 查詢計算機系學生學號、姓名結果機械工業(yè)出版社723.3 SQL數(shù)據(jù)查詢例3.17 查詢所有年齡在21歲以下的學生姓名及年齡。SELECT SNAME, SAGEFROM STUDENTW

51、HERE SAGE=21;查詢結果如表3-17所示。SNAMESAGE李俊20劉利敏19張海20吳浩18程小磊20張建超19李云鵬18劉一鳴20表3-17 查詢21歲以下的學生結果機械工業(yè)出版社733.3 SQL數(shù)據(jù)查詢例3.18 查詢考試成績在85分以上(包括85分)的學生學號。SELECT SNOFROM COURSEWHERE GRADE=85;查詢結果如表3-18所示。SNO GRADES820192S820185S820288S820394S820391S820490S880186表3-18 查詢成績在85分以上的結果機械工業(yè)出版社743.3 SQL數(shù)據(jù)查詢確定范圍的查詢 BETWE

52、ENAND和NOT BETWEENAND是邏輯運算符,可以用來查找屬性值在或不在指定范圍內的元組,其中BETWEEN后面指定范圍的下限,AND后面指定范圍的上限。使用BETWEENAND的格式為:列名|表達式 NOT BETWEEN 下限值 AND 上限值 BETWEENAND一般用于對數(shù)值型數(shù)據(jù)進行比較。列名或表達式的類型要與下限值或上限值的類型相同。 “BETWEEN 下限值 AND 上限值”的含義是:如果列或表達式的值在下限值和上限值范圍內,則結果為TRUE,表明此記錄符合查詢條件,否則結果為FALSE,表明此記錄不符合查詢條件。 “NOT BETWEEN 下限值 AND 上限值”的含義

53、正好相反:如果列或表達式的值在下限值和上限值范圍內,則結果為FALSE,表明此記錄不符合查詢條件,否則結果為TRUE,表明此記錄符合查詢條件。機械工業(yè)出版社753.3 SQL數(shù)據(jù)查詢例3.19 查詢年齡在1921歲之間的學生學號、 姓名和年齡。SELECT SNO, SNAME, SAGEFROM STUDENTWHERE SAGE BETWEEN 19 AND 21;查詢結果如表3-19所示。機械工業(yè)出版社763.3 SQL數(shù)據(jù)查詢SNOSNAMESAGES8201王晨21S8202李俊20S8203劉利敏19S8204張海20S8802程小磊20S8803張建超19S9102劉一鳴20表3

54、-19 查詢年齡1921歲學生結果等價于:SELECT SNO, SNAME, SAGEFROM STUDENTWHERE SAGE=19 AND SAGE=21;機械工業(yè)出版社773.3 SQL數(shù)據(jù)查詢例3.20 查詢年齡不在1921歲之間的學生學號、姓名和年齡。SELECT SNO, SNAME, SAGEFROM STUDENTWHERE SAGE NOT BETWEEN 19 AND 21;等價于:SELECT SNO, SNAME, SAGEFROM STUDENTWHERE SAGE21;查詢結果如表3-20所示。SNOSNAMESAGES8801吳浩18S9101李云鵬18表3-

55、20查詢不在年齡1921歲學生結果機械工業(yè)出版社783.3 SQL數(shù)據(jù)查詢確定集合的查詢 如果要查找屬性值屬于指定集合的元組,可以使用一個邏輯運算符IN,使用IN的格式為:列名NOT IN 用IN進行比較的數(shù)據(jù)大多為字符型數(shù)據(jù),也可以是數(shù)值型數(shù)據(jù)。 IN的含義為:當列的值與IN中的某個常量值相同時,則結果為TRUE,表明此記錄符合查詢條件。NOT IN的含義正好相反,當列的值與某個常量相同時,則結果為FALSE,表明此記錄不符合查詢條件。機械工業(yè)出版社793.3 SQL數(shù)據(jù)查詢例3.21查詢計算機系和數(shù)學系學生的學號、姓名和性別。SELECT SNO, SNAME, SSEXFROM STUD

56、ENTWHERE SDEPT IN (計算機系, 數(shù)學系);等價于:SELECT SNO, SNAME, SSEXFROM STUDENTWHERE SDEPT =計算機系 OR SDEPT =數(shù)學系;查詢結果如表3-21所示。機械工業(yè)出版社803.3 SQL數(shù)據(jù)查詢SNOSNAMESSEXS8201王晨男S8202李俊女S8203劉利敏女S8204張海男S8801吳浩男S8802程小磊男S8803張建超男表3-21 查詢計算機系和數(shù)學系學生結果機械工業(yè)出版社813.3 SQL數(shù)據(jù)查詢例3.22 查詢既不是計算機系,也不是數(shù)學系學生的學號、姓名、性別和年齡。SELECT SNO, SNAME,

57、 SSEX, SAGEFROM STUDENTWHERE SDEPT NOT IN (計算機系, 數(shù)學系);等價于:SELECT SNO, SNAME, SSEX, SAGEFROM STUDENTWHERE SDEPT! =計算機系 OR SDEPT!= 數(shù)學系;查詢結果如表3-22所示。表3-22查詢既不是計算機系也不是數(shù)學系學生結果機械工業(yè)出版社823.3 SQL數(shù)據(jù)查詢字符匹配的查詢 LIKE用于查找指定列值與匹配串常量匹配的元組。匹配串是一種特殊的字符串,其特殊之處在于它不僅可以包含普通字符,而且還可以包含通配符。通配符用于表示任意的字符或字符串。在實際應用中,如果需要從數(shù)據(jù)庫中檢索

58、一批記錄,但又不能給出精確的字符查詢條件,這時就可以使用LIKE運算符和通配符來實現(xiàn)模糊查詢。在LIKE運算符前邊也可以使用NOT運算符,表示對結果取反,其一般格式為:NOT LIKE 匹配串 ESCAPE 機械工業(yè)出版社833.3 SQL數(shù)據(jù)查詢 其含義是查找指定的屬性列值與匹配串相匹配的元組。匹配串可以是一個完整的字符串,也可以含有通配符%和_。其中:%(百分號)代表任意長度(長度可以為0)的字符串。例如,a%b表示以a開頭,以b結尾的任意長度的字符串。如acb、adertb、artghklb等。_(下橫線)表示任意單個字符。例如,a_b表示以a開頭,以b結尾的長度為3的任意字符串。如ad

59、b、agb等都滿足該匹配串。機械工業(yè)出版社843.3 SQL數(shù)據(jù)查詢例3.23 查詢數(shù)學系學生的信息。SELECT *FROM STUDENTWHERE SDEPT LIKE 數(shù)學系;等價于:SELECT *FROM STUDENTWHERE SDEPT= 數(shù)學系;如果LIKE后面的匹配串中不含通配符,則可以用=(等于)運算符代替LIKE謂詞,用!=或(不等于)運算符取代NOT LIKE謂詞。查詢結果如表3-23所示。機械工業(yè)出版社853.3 SQL數(shù)據(jù)查詢SNOSNAMESSEXSAGESDEPTS8801吳浩男18數(shù)學系S8802程小磊男20數(shù)學系S8803張建超男19數(shù)學系表3-23查詢

60、數(shù)學系學生結果機械工業(yè)出版社863.3 SQL數(shù)據(jù)查詢例3.24 查詢所有姓李的學生信息。SELECT *FROM STUDENTWHERE SNAME LIKE 李%;查詢結果如表3-24所示。SNOSNAMESSEXSAGESDEPTS8202李俊女20計算機系S9101李云鵬男18自動化系表3-24 查詢所有姓李的學生結果機械工業(yè)出版社873.3 SQL數(shù)據(jù)查詢例3.25 查詢姓名中第二個字為“小”的學生信息。SELECT *FROM STUDENTWHERE SNAME LIKE _ _小%;注意:因為一個漢字要占兩個字符的位置,所以匹配串“小”前面需要兩個“_”。查詢結果如表3-25

溫馨提示

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

評論

0/150

提交評論