版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,1,第3章 關(guān)系數(shù)據(jù)庫標(biāo)準(zhǔn)語言SQL,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,2,在數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)查詢是最常用的操作。SQL是目前使用最廣泛的數(shù)據(jù)庫語言。利用SQL可以通過功能強(qiáng)大而又簡捷的查詢語言與數(shù)據(jù)庫打交道,從數(shù)據(jù)庫中得到想要的數(shù)據(jù)。 SQL語句主要被用于進(jìn)行數(shù)據(jù)庫的查詢、定義、操縱和控制幾個(gè)方面,是一種功能齊全的數(shù)據(jù)庫語言。 SQL的數(shù)據(jù)定義是指對關(guān)系模式一級的定義。數(shù)據(jù)操縱是指對關(guān)系中的具體數(shù)據(jù)進(jìn)行增、刪、改等更新操作。數(shù)據(jù)控制是指對數(shù)據(jù)訪問權(quán)限的授予與取消,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)
2、算機(jī)科學(xué)系,3,3.1 SQL語言基本知識(shí) 3.1.1 SQL的發(fā)展史 1974年IBM圣約瑟實(shí)驗(yàn)室的Boyce和Chamberlin為關(guān)系數(shù)據(jù)庫管理系統(tǒng)System-R設(shè)計(jì)的一種查詢語言,當(dāng)時(shí)稱為SEQUEL語言(Structured English Query Language),后簡稱為SQL。 1981年IBM推出關(guān)系數(shù)據(jù)庫系統(tǒng)SQL/DS后,SQL得到了廣泛應(yīng)用。 1986年美國國家標(biāo)準(zhǔn)協(xié)會(huì)(ANSI)公布了第一個(gè)SQL標(biāo)準(zhǔn)SQL86。 1987年,ISO通過SQL86標(biāo)準(zhǔn),2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,4,1989年,ISO制定SQL89標(biāo)準(zhǔn),SQL89
3、標(biāo)準(zhǔn)在SQL86基礎(chǔ)上增補(bǔ)了完整性描述。 1990年,我國制定等同SQL89的國家標(biāo)準(zhǔn)。 1992年,ISO制定SQL92標(biāo)準(zhǔn),即SQL2。 1999年,ANSI制定SQL3標(biāo)準(zhǔn)。 SQL成為國際標(biāo)準(zhǔn)后,對數(shù)據(jù)庫以外的領(lǐng)域產(chǎn)生了很大的影響,有不少軟件產(chǎn)品將SQL語言的數(shù)據(jù)查詢功能與圖形功能、軟件工程工具、軟件開發(fā)工具、人工智能程序結(jié)合起來。SQL已成為數(shù)據(jù)庫領(lǐng)域中一個(gè)主流語言,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,5,在許多軟件產(chǎn)品中,軟件廠商都對SQL的基本命令集進(jìn)行了擴(kuò)充,將其擴(kuò)展成嵌入式SQL語言。SQL Server 2000中使用Transact-SQL語言與數(shù)據(jù)
4、庫服務(wù)器打交道,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,6,3.1.2 SQL的特點(diǎn) SQL具有如下特點(diǎn): 1綜合統(tǒng)一。 2高度非過程化。 3面向集合的操作方式。 4以同一種語法結(jié)構(gòu)提供兩種使用方式 5. 語言簡捷、易學(xué)易用。 SQL語言功能極強(qiáng),但由于設(shè)計(jì)巧妙,語言十分簡捷,完成核心功能只用了9個(gè)動(dòng)詞,如下表示,SQL語言接近英語口語,因此容易學(xué)習(xí),容易使用,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,7,SQL語言的動(dòng)詞,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,8,SQL語言支持關(guān)系數(shù)據(jù)庫三級模式結(jié)構(gòu),如下圖示。其中外模式對應(yīng)于視圖和部分基
5、本表,模式對應(yīng)于基本表,內(nèi)模式對應(yīng)于存儲(chǔ)文件。 基本表是本身獨(dú)立存在的表,在SQL中一個(gè)關(guān)系就對應(yīng)一個(gè)表。一個(gè)(或多個(gè))基本表對應(yīng)一個(gè)存儲(chǔ)文件。一個(gè)表可以帶若干個(gè)索引,索引也存放在存儲(chǔ)文件中。 存儲(chǔ)文件的邏輯結(jié)構(gòu)組成了關(guān)系數(shù)據(jù)庫的內(nèi)模式,存儲(chǔ)文件的物理結(jié)構(gòu)是任意的,對用戶是透明的。 視圖是從一個(gè)或幾個(gè)基本表導(dǎo)出的表。它本身不獨(dú)立存儲(chǔ)在數(shù)據(jù)庫中,是一個(gè)虛表。即數(shù)據(jù)庫中只存放視圖的定義而不存放視圖對應(yīng)的數(shù)據(jù),2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,9,外模式,內(nèi)模式,模式,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,10,3.1.3 SQL的分類 1、數(shù)據(jù)定義語言(
6、DDL:Data Definition Language) 創(chuàng)建、修改或刪除數(shù)據(jù)庫中各種對象,包括表、視圖、索引等。 2、查詢語言(QL:Query Language) 按照指定的組合、條件表達(dá)式或排序檢索已存在的數(shù)據(jù)庫中的數(shù)據(jù),但并不改變數(shù)據(jù)庫中數(shù)據(jù)。 3、數(shù)據(jù)操縱語言(DML:Data Manipulation Language ) 對已經(jīng)存在的數(shù)據(jù)庫進(jìn)行記錄的插入、刪除、修改等操作,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,11,4、數(shù)據(jù)控制語言(DCL:Data Control Language) 用來授予或收回訪問數(shù)據(jù)庫的某種特權(quán)、控制數(shù)據(jù)操縱事務(wù)的發(fā)生時(shí)間及效果、對
7、數(shù)據(jù)庫進(jìn)行監(jiān)視 注意:在書寫各種SQL 命令時(shí),命令中所涉及的標(biāo)點(diǎn)符號,如括號、逗號、分號、圓點(diǎn)(英文句號)等都應(yīng)是英文半角,如果寫成中文全角符號,則會(huì)在執(zhí)行命令時(shí)出錯(cuò),2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,12,3.2 數(shù)據(jù)定義 數(shù)據(jù)定義命令用于建立數(shù)據(jù)庫和建立、修改、 刪除基本表,SQL的數(shù)據(jù)定義語句,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,13,3.2.1 定義、刪除與修改基本表 一、定義基本表 建立數(shù)據(jù)庫最重要的一步就是定義一些基本表。SQL語言使用CREATE TABLE 語句定義基本表,其一般格式如下: CREATE TABLE (列級完整性約
8、束條件 列級完整性約束條件表級完整性約束條件); 其中是所要定義的基本表的名字,它可以由一個(gè)或多個(gè)屬性(列)組成,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,14,建表的同時(shí)通常還可以定義與該表有關(guān)的完整性約束條件。這些完整性約束條件被存入系統(tǒng)的數(shù)據(jù)字典中,當(dāng)用戶操作表中數(shù)據(jù)時(shí)由DBMS自動(dòng)檢查該操作是否違背這些完整性約束條件。如果完整性約束條件涉及到該表的多個(gè)屬性列,則必須定義在表級上,否則既可以定義在列級上也可以定義在表級上,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,15,例1 建立一個(gè)“學(xué)生”表Student,它由學(xué)號Sno,姓名Sname,性別Ssex,年
9、齡Sdept、所在系Sdept五個(gè)屬性組成。其中學(xué)號不能為空,值是唯一的,并且姓名取值也唯一。 CREATE TABLE Student (Sno CHAR(5) NOT NULL UNIQUE, Sname CHAR(20) UNIQUE, Ssex CHAR(1), Sage INT, Sdept CHAR(15); 其中:NOT NULL指的是該列的值不能為空值, UNIQUE指的是該列的值唯一,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,16,Student,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,17,例2:建立如下表所示學(xué)生基本情況表的命令是: cr
10、eate table jbqk (number char(8)not null, name char(8)not null, sex char(2)not null, Birthday datetime, department char(12,jbqk,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,18,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,19,建立課程表的命令是: create table course(c_number char(4)not null, c_name char(20) not null, period decimal(3,0), t_num
11、ber char(4) not null); 建立教師表(teacher)的命令是:: create table teacher(t_number char(4) not null, t_name char(8), title char(10); 建立選課表(sle_course)的命令是:: Create table sle_course(s_number char(8) not null, c_number char(4), score decimal(3,0,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,20,二、修改基本表 隨著應(yīng)用環(huán)境和應(yīng)用需求的變化,有時(shí)需要修改已建立好
12、的基本表,SQL語言使用ALTER TABLE 語句定義基本表,其一般格式如下: ALTERTABLE ADD 列級完整 性約束條件 DROP MODIFY,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,21,例1:向Student表中增加“入學(xué)時(shí)間”列,其數(shù)據(jù)類型為日期型。 ALTER TABLE Student ADD Scome DATE; 不論基本表中原來是否已有數(shù)據(jù),新增加的列一律為空值。 例2:將Student表中年齡的數(shù)據(jù)類型改為短整型 ALTER TABLE Student MODIFY Sage SMALLINT,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)
13、科學(xué)系,22,例3 將Student表中學(xué)生姓名必須取唯一值的約束刪除 ALTER TABLE Student DROP UNIQUE(Sname); SQL沒有提供刪除屬性列的語句,用戶只能間接實(shí)現(xiàn)這一功能,即先把表中要保留的列及其內(nèi)容復(fù)制到一個(gè)新表中,然后刪除原表,再將新表重命名為原表名,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,23,三、 數(shù)據(jù)表的刪除 DROP TABLE ; 例4:刪除Student表,使用如下命令格式: DROP TABLE Student; 注意: 基本表定義一旦刪除,表中的數(shù)據(jù)、此表上建立的索引和視圖都將自動(dòng)被刪除掉。因此執(zhí)行刪除基本表的操作一定
14、要格外小心,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,24,3.2.2 索引的建立與刪除 索引是對數(shù)據(jù)庫表中一個(gè)或多個(gè)列的值進(jìn)行排序的結(jié)構(gòu)??梢岳盟饕焖僭L問數(shù)據(jù)庫表中的特定信息。 一、建立索引語句 CREATE UNIQUECLUSTER INDEX ON (列名次序,列名次序); 說明:索引可以建立在一列和多列之上,索引順序可以是ASC(升序)或DESC(降序),缺省值是ASC(升序) 。UNIQUE表示每一個(gè)索引值對應(yīng)唯一的數(shù)據(jù)記錄,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,25,UNIQUE表明此索引的每一個(gè)索引值只對應(yīng)唯一的數(shù)據(jù)記錄。 CLUSTER
15、表示要建立的索引是聚簇索引。所謂聚簇索引是指索引項(xiàng)的順序與表中記錄的物理順序一致的索引組織。 例如,執(zhí)行下面的索引語句: CREATE CLUSTER INDEX Stusname ON Student(Sname); 將會(huì)在Student表的Sname列上建立一個(gè)聚簇索引,而且Student表中的記錄將按照Sname值的升序存放,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,26,用戶可以在最常查詢的列上建立聚簇索引以提高查詢效率。顯然在一個(gè)基本表上最多只能建立一個(gè)聚簇索引。建立聚簇索引后,更新索引列數(shù)據(jù)時(shí),往往導(dǎo)致表中記錄的物理順序的變更,代價(jià)較大,因此對于經(jīng)常更新的列不宜建立
16、聚簇索引,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,27,例1:為學(xué)生數(shù)據(jù)庫中的Student,Course,SC三個(gè)表建立索引,其中,Student表按學(xué)號升序建唯一索引,Course表按課程號升序建唯一索引,SC表按學(xué)號升序和課程號降序建唯一索引。 CREATE UNIQUE INDEX Stusno ON Student(Sno); CREATE UNIQUE INDEX Coucno ON Course(Cno); CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,2
17、8,Student,a,設(shè)有一個(gè)學(xué)生-課程數(shù)據(jù)庫,包括學(xué)生關(guān)系Student,課程關(guān)系Course和選修關(guān)系SC。如下圖示,68,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,29,Course,b,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,30,c,SC,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,31,二、刪除索引 索引一經(jīng)建立,就由系統(tǒng)使用和維護(hù)它,不需用戶干預(yù)。建立索引是為了減少查詢操作時(shí)間,但如果數(shù)據(jù)增、刪、改頻繁,系統(tǒng)會(huì)花費(fèi)許多時(shí)間來維護(hù)索引,這時(shí),可以刪除一些不必要的索引 DROP INDEX ; 注意:該命令不能刪除由CREATE TA
18、BLE或者ALTER TABLE命令創(chuàng)建的主鍵和唯一性約束索引,也不能刪除系統(tǒng)表中的索引。 例2、刪除例1中建立的索引Stusno DROP INDEX Stusno,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,32,3.3 數(shù)據(jù)查詢語言,數(shù)據(jù)庫查詢是數(shù)據(jù)庫的核心操作。SQL語言提供了SELECT語句進(jìn)行數(shù)據(jù)庫的查詢,該語句具有靈活的使用方式和豐富的功能,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,33,SQL語言的查詢語句一般格式是: SELECT ALL|DISTINCT , FROM , WHERE GROUP BY HAVING ORDER BY ASC|D
19、ESC; 下面對該命令進(jìn)行一些說明,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,34,1命令含義 從FROM子句指定的基本表或視圖中,根據(jù)WHERE子句的條件表達(dá)式查找出滿足該條件的元組(記錄),再按照SELECT子句指定的目標(biāo)列表達(dá)式,選出元組中的屬性值形成結(jié)果表。如果有GROUP BY子句,則將結(jié)果按“列名1”的值進(jìn)行分組,該屬性列值相等的元組為一個(gè)組;如果GROUP BY子句帶有短語HAVING,則只有滿足短語指定條件的分組才會(huì)輸出。如果有ORDER BY子句,則結(jié)果表要按照的值進(jìn)行升序和降序排列,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,35,SELECT
20、 ALL|DISTINCT實(shí)現(xiàn)的是對表的投影操作, WHERE 中實(shí)現(xiàn)的是選擇操作。 FROM ,實(shí)現(xiàn)的是對指定表的廣義笛卡爾積,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,36,2目標(biāo)列表達(dá)式 列表達(dá)式可以是“列名1,列名2”的形式;如果FROM子句指定了多個(gè)表,則列名應(yīng)是“表名.列名”的形式。 列表達(dá)式可以使用SQL提供的庫函數(shù)形成表達(dá)式,常用的函數(shù)如下: COUNT(*):統(tǒng)計(jì)記錄條數(shù)。 COUNT(列名):統(tǒng)計(jì)一列值得個(gè)數(shù)。 SUM(列名):計(jì)算某一數(shù)值型列的值的總和。 AVG(列名):計(jì)算某一數(shù)值型列的值的平均值 MAX(列名):計(jì)算某一數(shù)值型列的值的最大值 DISTI
21、NCT參數(shù):表示在結(jié)果集中,查詢出的內(nèi)容相同的記錄只留下一條。 MIN(列名):計(jì)算某一數(shù)值型列的值的最小值,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,37,3.3.1 單表查詢 單表查詢是指僅涉及一個(gè)表的查詢。 一、選擇表中的若干列 選擇表中的全部列和部分列,就是投影運(yùn)算。 1、查詢指定列 在很多情況下,用戶只對表中的一部分屬性列感興趣,這時(shí)可以通過在SELECT子句的中指定要查詢的屬性,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,38,例1:查詢?nèi)w學(xué)生的學(xué)號和姓名。 SELECT Sno,Sname FROM Student; 例2:查詢?nèi)w學(xué)生的姓名、學(xué)號
22、、所在系。 SELECT Sname, Sno,Sdept FROM Student,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,39,2、查詢?nèi)苛?將表中所有屬性列都選出來,可以有兩種方法。一種方法是在SELECT關(guān)鍵字后列出所有的列名。如果列的顯示順序與其在基表中的順序相同,也可以簡單地將指定為*。 例3:查詢?nèi)w學(xué)生的詳細(xì)記錄。 SELECT * SELECT Sno,Sname, FROM Student FROM Student,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,40,3、查詢經(jīng)過計(jì)算的值 SELECT子句的不僅可以是表中的屬性列,也可以是表達(dá)
23、式。 例4:查全體學(xué)生的姓名及其出生年份 SELECT Sname,2004-Sage FROM Student; 輸出的結(jié)果為: 不僅可以是算術(shù)表達(dá)式,還可以是字符串常量、函數(shù)等,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,41,例5:查詢?nèi)w學(xué)生的姓名,出生年份和所在系,要求用小寫字母表示所在系名。 SELECT Sname,Year of Birth, 2004-Sage,ISLOWER(Sdept) FROM Student; 輸出結(jié)果為: 用戶可以通過指定別名來改變查詢結(jié)果的列標(biāo)題。這對于含算術(shù)表達(dá)式、常量、函數(shù)名的目標(biāo)列表達(dá)式尤為有用。例如,對上例,可定義如下,202
24、1年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,42,SELECT Sname NAME,Year of Birth; BIRTH,2004-Sage BIRTHDAY, ISLOWER(Sdept) DEPARTMENT FROM Student; 結(jié)果為,c,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,43,a,b,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,44,二、選擇表中的若干元組 1、消除取值重復(fù)的行 兩個(gè)本來并不完全相同的元組,投影到指定的某些列上后,可能變成相同的行。如果想去掉表中的重復(fù)行,必須在SELECT子句中指定DISTINCET短語。如果
25、沒有指定DISTINCET短語,則缺省為ALL,即保留結(jié)果表中取值重復(fù)的行。 例 6:查詢選修了課程的學(xué)生學(xué)號。 SELECT Sno FROM SC,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,45,a,該查詢結(jié)果里包含了許多重復(fù)行,如果想去掉表中的重復(fù)行,則,SELECT DISTINCT Sno,FROM SC,執(zhí)行結(jié)果為,b,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,46,2、查詢滿足條件的元組 查詢滿足條件的元組可以通過WHERE子句來實(shí)現(xiàn),WHERE子句常用的查詢條件如下表示,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,47,常用的查詢條
26、件,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,48,例7:查詢考試成績不及格學(xué)生的學(xué)號。 SELECT DISTINCT Sno FROM SC WHERE Grade 60; 例8:查詢年齡在2023之間的學(xué)生的姓名,系別和年齡。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage BETWEEN 20 AND 23 例9:查詢年齡不在2023之間的學(xué)生的姓名,系別和年齡。 SELECT Sname,Sdept,Sage FROM Student WHERE Sage NOT BETWEEN 20 AND 23,2021年3月10日
27、5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,49,例10:查詢計(jì)算機(jī)系、信息系學(xué)生的姓名、系別和年齡。 SELECT Sname,Sdept,Sage FROM Student WHERE Sdept IN(CS,IS); 例11:查詢不是計(jì)算機(jī)系、也不是信息系的學(xué)生的姓名、系別和年齡。 SELECT Sname,Sdept,Sage FROM Student WHERE Sdept NOTIN(CS,IS,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,50,謂詞LIKE可以用來進(jìn)行字符串的匹配。其一般語法格式如下: NOT LIKE ESCAPE 其含義是查找指定的屬性列值與相匹配的元
28、組。 可以是一個(gè)完整的字符串,也可以含有通配符和。其中: (百分號)代表任意長度(可以為)的字符串,如:a%b表示以a開頭,以b結(jié)尾的任意長度的字符串。 _(下劃線)代表任意單個(gè)字符。a_b表示以a開頭,以b結(jié)尾長度為的任意字符串,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,51,例12:查詢所有姓“王”的學(xué)生信息。 SELECT * FROM Student WHERE Sname like 王%; 例13:查詢名字中第二個(gè)字為“陽”的學(xué)生姓名和學(xué)號。 SELECT Sname,Sno FROM Student WHERE Sname like _ _陽%; 如果用戶要查詢的字
29、符串本身就含有%或_ 就要使用ESCAPE 對通配符進(jìn)行轉(zhuǎn)義,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,52,例14:查詢DB_Design課程的課程號和學(xué)分 SELECT Cno,Ccredit FROM Course WHERE Cname like DB_Design ESCAPE ; 其中:ESCAPE 短語表示為換碼字符,這樣匹配串中緊跟在后面的字符“_”不再具有通配符的含義,轉(zhuǎn)義為普通的“_”字符。 例15:查詢以“DB_”開頭,且倒數(shù)第三個(gè)字符為i的課程的詳細(xì)情況 SELECT FROM Course WHERE Cname like DB_%i_ _ ESCAP
30、E,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,53,例16 某些學(xué)生選修課程后沒有參加考試,所以有選課記錄,但沒有考試成績。查詢?nèi)鄙俪煽兊膶W(xué)生的學(xué)號和相應(yīng)的課程號。 SELECT Sno,Cno FROM SC WHERE Grade IS NULL 例17查詢所有有成績的學(xué)生的學(xué)號和相應(yīng)的課程號。 SELECT Sno,Cno FROM SC WHERE Grade IS NOT NULL,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,54,多重條件查詢 邏輯運(yùn)算符AND和OR可用來聯(lián)結(jié)多個(gè)查詢條件, AND優(yōu)先級高于OR,但用戶可用括號改變優(yōu)先級。 例18 查詢
31、計(jì)算機(jī)系年齡在20歲以下的學(xué)生姓名 SELECT SnameFROM Student WHERE Sdept=CSAND Sage20; 例19:查詢計(jì)算機(jī)系、信息系學(xué)生的姓名、系別和年齡。 SELECT Sname,Sdept,Sage FROM Student WHERE Sdept =CS OR Sdept=IS,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,55,三、對查詢結(jié)果排序 用戶可以用ORDER BY子句對查詢結(jié)果按照一個(gè)或多個(gè)屬性列的升序(ASC)或降序(DESC)排列,缺省值為升序。 例19 查詢選修了號課程的學(xué)號及其成績,查詢結(jié)果按分?jǐn)?shù)的降序排列。 SELEC
32、T Sno,GradeFROM SC WHERE Cno=3 ORDER BY Grade DESC; 對于空值,若按升序,含空值的元組將最后顯示,若按降序排,空值的元組將最先顯示,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,56,例19 查詢?nèi)w學(xué)生情況,查詢結(jié)果按所在系的系號升序排列,同一系中的學(xué)生按年齡降序排列。 SELECT FROM Student ORDER BY Sdept,Sage DESC,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,57,四、查詢中集函數(shù)的使用 說明:DISTINCT:取消列中的重復(fù)值 ALL:為默認(rèn)狀態(tài),表示不取消重復(fù)值,202
33、1年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,58,例20:查詢學(xué)生總?cè)藬?shù)。 SELECT COUNT(*) FROM Student; 例21:計(jì)算95001學(xué)生的平均成績。 SELECT AVG(Grade) FROM SC WHERE Sno = 95001,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,59,5查詢結(jié)果的分組與排序 GROUP BY子句將查詢結(jié)果表按某一列或多列值分組,值相等的為一組。 分組的目的是為了細(xì)化集函數(shù)的作用對象,如果未對查詢結(jié)果分組,集函數(shù)將作用于整個(gè)查詢結(jié)果。分組后集函數(shù)將作用在每一個(gè)組上,即每一組都有一個(gè)函數(shù)值,2021年3月10日5時(shí)
34、30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,60,例22:查詢選修了2門以上課程的學(xué)生學(xué)號,并且查詢結(jié)果按照升序排列。 SELECT Sno FROM SC GROUP BY Sno HAVING COUNT(*) 2 ORDER BY Sno ASC; WHERE與HAVING的區(qū)別在于作用的對象不同。WHERE子句作用于基本表或視圖,從中選擇滿足條件的記錄;HAVING短語作用于分組,從中選出滿足條件的組,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,61,3.3.2 連接查詢 前面的查詢都是針對一個(gè)表進(jìn)行的。若一個(gè)查詢同時(shí)涉及兩個(gè)以上的表,則稱之為連接查詢,連接查詢是關(guān)系數(shù)據(jù)庫中最主要
35、的查詢,包括等值連接、自然連接、非等值連接查詢、自身連接查詢、外連接查詢和復(fù)合條件連接查詢,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,62,從概念上講,DBMS執(zhí)行連接操作的過程是:首先在表1中找到第一個(gè)元組,然后從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第一個(gè)元組與該元組拼接起來,形成結(jié)果表中一個(gè)元組。表2全部查找完后,再找表1中第2個(gè)元組,然后再從頭開始掃描表2,逐一查找滿足連接條件的元組,找到后就將表1中的第2個(gè)元組與該元組拼接起來,形成結(jié)果表中一個(gè)元組。重復(fù)上述操作,直到表1中的全部元組都處理完畢為止,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)
36、算機(jī)科學(xué)系,63,一、等值與非等值連接。 連接查詢中用來連接兩個(gè)表的條件稱為連接條件或連接謂詞,其一般格式為: . . 其中主要有:=,=,稱為連接字段, 連接條件中的各個(gè)連接字段類型必須是可比的,但不必是相同的。 Eg,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,64,在本例中,SELECT子句與WHERE子句中的屬性名前都加上了表名前綴,這是為了避免混淆。如果屬性名在參加連接的各表中是唯一的,則可以省略表名前綴。 連接運(yùn)算中有兩種特殊情況,一種為自然連接,另一種為廣義笛卡爾積(連接)。 廣義笛卡爾積是不帶連接謂詞的連接。兩個(gè)表的廣義笛卡爾積即是兩表中元組的交叉乘積,其連接的結(jié)
37、果會(huì)產(chǎn)生一些沒有意義的元組,所以這種運(yùn)算實(shí)際很少使用。 若在等值連接中把目標(biāo)列中重復(fù)的屬性列去掉則為自然連接,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,65,二、自身連接 連接操作不僅可以在兩個(gè)表之間進(jìn)行,也可以是一個(gè)表與其自己進(jìn)行連接,稱為表的自身連接。 在通常的連接操作中,只有滿足連接條件的元組才能作為結(jié)果輸出,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,66,三、外連接 外連接的表示方法為,在連接謂詞的某一邊加符號*(有的數(shù)據(jù)庫系統(tǒng)中用+)。外連接就好象為符號*所在邊的表增加一個(gè)“萬能的”行,這個(gè)行全部由空值組成。它可以和另一邊的表中所有不滿足條件的元組進(jìn)行
38、連接(從而使得另一個(gè)表在連接的過程中不會(huì)有元組丟失)。 如果外連接符出現(xiàn)在連接條件的右邊,稱其為右外連接,如果外連接符出現(xiàn)在連接條件的左邊,則稱其為左外連接,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,67,四、復(fù)合條件的連接 上面各個(gè)連接查詢中,WHERE子句中只有一個(gè)條件,即連接謂詞。 WHERE子句中可以有多個(gè)連接條件,稱為復(fù)合條件連接。 連接操作除了可以是兩表連接,一個(gè)表與其自身連接外,還可以是兩個(gè)以上的表進(jìn)行連接,后者稱為多表連接,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,68,例23 查詢每個(gè)學(xué)生及其所選課程的情況 Select Student.*,
39、SC.* From Student, SC Where Student.Sno = SC.Sno; 例24 查詢每個(gè)學(xué)生及其所選課程的情況(用自然連接) Select Student.Sno,Sname,Ssex,Sage,Sdept,Cno,Grade From Student, SC Where Student.Sno = SC.Sno; 例25 查詢所有比李勇年齡大的學(xué)生姓名、年齡 Select X.Sname, X.Sage From Student X, Student Y Where X.Sage Y.Sage And Y.Sname=李勇,結(jié)果,結(jié)果,2021年3月10日5時(shí)30
40、分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,69,該查詢的執(zhí)行結(jié)果,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,70,該查詢的執(zhí)行結(jié)果,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,71,例26 查詢每一門課的間接先修課(即先修課的先修課)。 Select FIRST.Cno ,SECOND.Cpno From Course FIRST, Course SECOND Where FIRST.Cpno=SECOND.Cno; 例27 查詢所有學(xué)生的學(xué)號、姓名、選修的課程和成績 Select Student.Sno, Sname, Cname, Grade From Student,
41、SC, Course Where Student.Sno=SC.Sno(+) And SC.Cno=Course.Cno(,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,72,例28 查詢選修2號課程且成績在90分以上的所有學(xué)生。 SELECT Student.Sno, Sname FROM Student, SC WHERE Student.Sno=SC.Sno AND SC.Cno=2 AND SC.Grade90,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,73,例29 查詢每個(gè)學(xué)生的學(xué)號、姓名、選修的課程名及成績。 SELECT Student.Sno, Sn
42、ame,Cname,Grade FROM Student, SC,Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,74,該查詢的執(zhí)行結(jié)果,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,75,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,76,3.3.3嵌套查詢,在SQL語言中,一個(gè)SELECT-FROM-WHERE 稱為一個(gè)查詢塊,將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢。上層的查詢塊稱為外層查詢或父查詢
43、,下層查詢稱為內(nèi)層查詢或子查詢。外層查詢利用子查詢來獲取檢索條件的條件值,并根據(jù)這個(gè)條件值確定外層查詢的結(jié)果集合。SQL語言允許多層嵌套查詢,即一個(gè)子查詢中還可以嵌套其他子查詢,通過子查詢,可以利用一系列簡單查詢來構(gòu)造一個(gè)復(fù)雜查詢。 子查詢中的SELECT語句中不能使用ORDER BY子句,ORDER BY子句只能對最終查詢結(jié)果排序,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,77,嵌套查詢一般的求解方法是由里向外處理,即每個(gè)子查詢在上一級查詢處理之前求解,子查詢的結(jié)果用于建立其父查詢的查找條件。 嵌套查詢使我們可以用多個(gè)簡單查詢構(gòu)成復(fù)雜的查詢,從而增強(qiáng)SQL的查詢能力。以層層嵌
44、套的方式來構(gòu)造程序正是SQL(Structured Query Language)中“結(jié)構(gòu)化”的含義所在,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,78,一、帶有IN謂詞的子查詢 在嵌套查詢中,子查詢的結(jié)果往往是一個(gè)集合,所以謂詞IN是嵌套查詢中最經(jīng)常使用的謂詞。 例30 查詢與劉晨在同一個(gè)系學(xué)習(xí)的學(xué)生。 Select Sno, Sname, Sdept From Student Where Sdept IN (Select Sdept From Student Where Sname = 劉晨,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,79,本例中的查詢也可以
45、用自身連接來完成: SELECT S1.Sno,S1.Sname,S1.Sdept FROM Student S1,Student S2 WHERE S1.Sdept=S2 .Sdept AND S2 .Sname=“劉晨”; 本例中父查詢和子查詢均引用了Student表,可以像自身連接那樣用別名將父查詢中的Student表與子查詢中的Student表區(qū)分開,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,80,Select Sno, Sname, Sdept From Student S1 Where S1.Sdept IN (Select Sdept From Student S
46、2 Where S2.Sname = 劉晨,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,81,例31 查詢選修了課程名為信息系統(tǒng)的學(xué)生的學(xué)號和姓名。 SELECT Sno, Sname FROM Student WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN (SELECT Cno FROM Course WHERE Cname = 信息系統(tǒng),首先在Course,關(guān)系中找出“信息,系統(tǒng)”的課程號,結(jié)果為3號,然后在SC關(guān)系中找出選修,了3號課程的學(xué)生學(xué)號,最后在Student關(guān)系中取,出Sno和Sname,2021年3月10日5時(shí)30分
47、,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,82,同樣本查詢也可以用連接查詢來實(shí)現(xiàn): SELECT Sno, Sname FROM Student, SC, Course WHERE Student.Sno=SC.Sno AND SC.Cno=Course.Cno AND Course.Cname=“信息系統(tǒng),2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,83,從例30和例31可以看到,查詢涉及多個(gè)關(guān)系時(shí),用嵌套查詢逐步求解,層次清楚,易于構(gòu)造,具有結(jié)構(gòu)化程序設(shè)計(jì)的優(yōu)點(diǎn)。 有些嵌套查詢可以用連接運(yùn)算替代,有些是不能替代的。到底采用哪種方法用戶可以根據(jù)自己的習(xí)慣確定。 例30和例31中的各個(gè)子查詢都
48、只執(zhí)行一次,其結(jié)果用于父查詢。子查詢的查詢條件不依賴于父查詢,這類子查詢稱為不相關(guān)子查詢。這種子查詢是最簡單的一類子查詢,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,84,二、帶有比較運(yùn)算符的子查詢,帶有比較運(yùn)算符的子查詢是指父查詢與子查詢之間用比較運(yùn)算符進(jìn)行連接。當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時(shí),可以用, =, 等比較運(yùn)算符。 例如在例30中,由于一個(gè)學(xué)生只可能在一個(gè)系學(xué)習(xí),也就是說內(nèi)查詢的結(jié)果是一個(gè)值,因此可以用=代替IN,其SQL語句如下,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,85,SELECT Sno, Sname, Sdept FROM Stu
49、dent WHERE Sdept = (SELECT Sdept FROM Student WHERE Sname = 劉晨); 需要注意的是,子查詢一定要跟在比較符之后,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,86,三、帶有ANY或ALL謂詞的子查詢 子查詢返回單值時(shí)可以用比較運(yùn)算符,而使用ANY或ALL謂詞時(shí)則必須同時(shí)使用比較運(yùn)算符。其語義為: ANY 大于子查詢結(jié)果中的某個(gè)值 ALL 大于子查詢結(jié)果中的所有值 =ANY 大于等于子查詢結(jié)果中的某個(gè)值 =ALL 大于等于子查詢結(jié)果中的所有值 =ANY 小于等于子查詢結(jié)果中的某個(gè)值,2021年3月10日5時(shí)30分,周口師范學(xué)
50、院計(jì)算機(jī)科學(xué)系,87,ANY 不等于子查詢結(jié)果中的某個(gè)值 !=(或)ALL 不等于子查詢結(jié)果中的任何一 個(gè)值,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,88,例32 查詢其他系中比信息系中某一學(xué)生年齡小的學(xué)生姓名和年齡。 Select Sname, Sage From Student Where Sdept IS AND Sage Any(Select Sage From Student Where Sdept = IS); DBMS執(zhí)行此查詢時(shí),首先處理子查詢找出IS系中所有學(xué)生的年齡,構(gòu)成一個(gè)集合(19, 18)。然后處理父查詢,找所有不是IS系且年齡小于19或18的學(xué)生,
51、2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,89,本查詢也可以用集函數(shù)來實(shí)現(xiàn)。首先用子查詢找出IS系中最大年齡(19),然后在父查詢中查所有非IS系且年齡小于19歲的學(xué)生姓名及年齡。SQL語句如下: Select Sname, Sage From Student Where Sdept IS AND Sage (Select MAX(Sage) From Student Where Sdept = IS,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,90,例33 查詢其他系中比信息系中所有學(xué)生年齡都小的學(xué)生姓名和年齡。 Select Sname, Sage From
52、Student Where Sdept IS And Sage All(Select Sage From Student Where Sdept = IS); 本查詢也可以用集函數(shù)實(shí)現(xiàn)。SQL語句,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,91,事實(shí)上,用集函數(shù)實(shí)現(xiàn)子查詢通常比直接用ANY或ALL查詢效率要高。 ANY與ALL與集函數(shù)的對應(yīng)關(guān)系如下表示: ANY, ALL謂詞與集函數(shù)及IN謂詞的等價(jià)轉(zhuǎn)換關(guān)系,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,92,四、帶有EXISTS謂詞的子查詢 EXISTS代表存在量詞 。帶有EXISTS謂詞的子查詢不返回任何數(shù)據(jù),只
53、產(chǎn)生邏輯真值“true”或邏輯假值“false”. 例34 查詢選擇了1號課程的學(xué)生姓名。 SELECT Sname FROM Student WHERE EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=1,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,93,使用存在量詞EXISTS后,若內(nèi)層查詢結(jié)果非空,則外層的WHERE子句返回真值,否則返回假值。 由EXISTS引出的子查詢,其目標(biāo)列表達(dá)式通常都用*,因?yàn)閹XISTS的子查詢只返回真值或假值,給出列名沒有實(shí)際意義。 這類子查詢的查詢條件依賴于外層父查詢的某個(gè)屬性值
54、,稱這類查詢?yōu)橄嚓P(guān)子查詢,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,94,從概念上講,相關(guān)子查詢的一般處理過程是: 首先取外層查詢中表的第一個(gè)元組,根據(jù)它與內(nèi)層查詢相關(guān)的屬性值處理內(nèi)層查詢,若WHERE子句返回值為真,則取此元組放入結(jié)果表;然后再取表的下一個(gè)元組;重復(fù)這一過程,直至外層表全部檢查完為止。 與EXISTS謂詞相對應(yīng)的是NOT EXISTS謂詞。使用存在量詞NOT EXISTS后,若內(nèi)層查詢結(jié)果為空,則外層的 WHERE子句返回真值,否則返回假值,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,95,例35 查詢沒有選擇1號課程的學(xué)生姓名。 SELECT
55、Sname FROM Student WHERE Not EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno And Cno=1); 一些帶有EXISTS或NOT EXISTS謂詞的子查詢不能被其它形式的子查詢等價(jià)替換,但所有帶IN謂詞、比較運(yùn)算符、ANY和ALL謂詞的子查詢都能用帶有EXISTS或NOT EXISTS謂詞的子查詢等價(jià)替換,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,96,查詢與劉晨在同一個(gè)系學(xué)習(xí)的學(xué)生。 SELECT Sno, Sname, Sdept FROM Student WHERE Sdept IN (SELEC
56、T Sdept FROM Student WHERE Sname = 劉晨,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,97,SELECT Sno, Sname, Sdept FROM Student S1 WHERE EXISTS (SELECT * FROM Student S2 WHERE S2.Sdept=S1.Sdept AND S2.Sname = 劉晨,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,98,由于帶EXISTS詞的相關(guān)子查詢只關(guān)心內(nèi)層查詢是否有返回值,并不需要查具體值因此其效率并不一定低于不相關(guān)子查詢,有時(shí)是高效的方法,2021年3月10日5
57、時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,99,例36 查詢選修了全部課程的學(xué)生姓名 SELECT Sname FROM Student WHERE NOT EXISTS (SELECT * FROM Course WHERE NOT EXISTS (SELECT * FROM SC WHERE Sno=Student.Sno AND Cno=Course.Cno,某個(gè)課程沒選,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,100,3.3.4集合查詢,SELECT語句的查詢結(jié)果是元組的集合,所以多個(gè)SELECT語句的可進(jìn)行集合操作。集合操作主要包括并操作UNION、交操作INTERSEC
58、T和差操作MINUS. 例37 查詢選修了1號或2號課程的學(xué)生 SELECT Sno FROM SC WHERE Cno=1 UNION SELECT Sno FROM SC WHERE Cno=2,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,101,標(biāo)準(zhǔn)SQL中沒有直接提供集合交操作和集合差操作,但可以用其他方法來實(shí)現(xiàn)。 例38 查詢選修了1號課程的學(xué)生和選修了2號課程的學(xué)生的交集 SELECT Sno FROM SC WHERE Cno=1 AND Sno IN (SELECT Sno FROM SC WHERE Cno=2,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)
59、科學(xué)系,102,例39 查詢計(jì)算機(jī)系的學(xué)生與年齡不大于19歲的學(xué)生的差集。 即查詢計(jì)算機(jī)系中年齡大于19歲的學(xué)生。 SELECT * FROM Student WHERE Sdept = CS AND Sage 19,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,103,3.4 數(shù)據(jù)更新,SQL中數(shù)據(jù)更新包括插入、修改數(shù)據(jù)和刪除數(shù)據(jù)三條語句: INSERT語句 UPDATE語句 DELETE語句,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,104,3.4.1 Insert語句,SQL的數(shù)據(jù)插入語句INSERT通常有兩種形式。一種是插入一個(gè)元組,另一種是插入子查詢結(jié)果。
60、后者可以一次插入多個(gè)元組 一、插入單個(gè)元組 INSERT INTO (,) VALUES(,); 其功能是將新元組插入指定表中。其中新記錄屬性列1的值為常量1,屬性列2的值為常量2,INTO子句中沒有出現(xiàn)的屬性列,新記錄在這些列上將取空值。如果INTO子句中沒有任何列名,則新插入的記錄必須在每個(gè)屬性列上均有值,2021年3月10日5時(shí)30分,周口師范學(xué)院計(jì)算機(jī)科學(xué)系,105,例1 將一個(gè)新學(xué)生記錄(學(xué)號:95020;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。 INSERT INTO Student Values (95020, 陳冬, 男,IS, 18); 例
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年媒體策劃委托合同
- 2025年虛擬現(xiàn)實(shí)教育技術(shù)調(diào)查合同
- 2025年度個(gè)人旅游紀(jì)念品抵押借款合同范本2篇
- 2025版彩禮退還與婚約解除合同范本3篇
- 酒店管理與運(yùn)營合同
- 2025版市政工程挖掘機(jī)械轉(zhuǎn)讓與采購合同3篇
- 2025版探礦權(quán)轉(zhuǎn)讓與地質(zhì)技術(shù)服務(wù)合同樣本3篇
- 裝修與物業(yè)合作協(xié)議
- 2025年度房產(chǎn)抵押權(quán)解除合同附買賣合同及解除后權(quán)屬轉(zhuǎn)移
- 2025年個(gè)人房產(chǎn)投資買賣合同范本下載2篇
- 2025年人教五四新版八年級物理上冊階段測試試卷含答案
- 不同茶葉的沖泡方法
- 2025年春季1530安全教育記錄主題
- 光伏發(fā)電并網(wǎng)申辦具體流程
- 建筑勞務(wù)專業(yè)分包合同范本(2025年)
- 企業(yè)融資報(bào)告特斯拉成功案例分享
- 五年(2020-2024)高考地理真題分類匯編(全國版)專題12區(qū)域發(fā)展解析版
- 《阻燃材料與技術(shù)》課件 第8講 阻燃木質(zhì)材料
- 低空經(jīng)濟(jì)的社會(huì)接受度與倫理問題分析
- GB/T 4732.1-2024壓力容器分析設(shè)計(jì)第1部分:通用要求
- 銷售調(diào)味品工作總結(jié)5篇
評論
0/150
提交評論