ORACLE結(jié)構(gòu)化查詢語言SQL培訓(xùn)介紹_第1頁
ORACLE結(jié)構(gòu)化查詢語言SQL培訓(xùn)介紹_第2頁
ORACLE結(jié)構(gòu)化查詢語言SQL培訓(xùn)介紹_第3頁
ORACLE結(jié)構(gòu)化查詢語言SQL培訓(xùn)介紹_第4頁
ORACLE結(jié)構(gòu)化查詢語言SQL培訓(xùn)介紹_第5頁
已閱讀5頁,還剩60頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、2:091 主要內(nèi)容 結(jié)構(gòu)化查詢語言結(jié)構(gòu)化查詢語言SQL一. 結(jié)構(gòu)化查詢語言概述二. SELECT查詢?nèi)? 針對(duì)單表的查詢四. 對(duì)查詢結(jié)果進(jìn)行編輯五. 多表連接查詢六. 子查詢 2:092一一. 結(jié)構(gòu)化查詢語言概述結(jié)構(gòu)化查詢語言概述 SQL的全稱為Structured Query Langauge(結(jié)構(gòu)化查詢語言)。它是數(shù)據(jù)庫系統(tǒng)的通用語言,利用它,用戶可以用幾乎同樣的語句在不同的數(shù)據(jù)庫系統(tǒng)上執(zhí)行同樣的操作。 SQL語言是一個(gè)綜合的,功能強(qiáng)大又簡(jiǎn)單易學(xué)的語言,它集數(shù)據(jù)查詢、數(shù)據(jù)操縱、數(shù)據(jù)定義和數(shù)據(jù)控制于一體。SQL語言按照功能可以分為4大類。2:093 按照指定的組合、條件表達(dá)式或排序檢索已存

2、在的數(shù)據(jù)庫中的數(shù)據(jù),但并不改變數(shù)據(jù)庫中數(shù)據(jù)。命令動(dòng)詞有SELECT。1. 數(shù)據(jù)查詢語言(Data Query Language,DQL) 創(chuàng)建、修改或刪除數(shù)據(jù)庫中各種對(duì)象,包括表、視圖、索 引等。命令動(dòng)詞有CREATE、ALTER 、DROP。2. 數(shù)據(jù)定義語言(DDL:Data Definition Language)3. 數(shù)據(jù)操縱語言(Data Manipulation Language,DML) 對(duì)已經(jīng)存在的數(shù)據(jù)庫進(jìn)行記錄的插入、刪除、修改等操作。命令動(dòng)詞有INSERT、UPADATE、DELETE。2:094 用來授予或收回訪問數(shù)據(jù)庫的某種特權(quán)、控制數(shù)據(jù)操縱事務(wù)的發(fā)生時(shí)間及效果、對(duì)數(shù)據(jù)

3、庫進(jìn)行監(jiān)視。命令動(dòng)詞有GRANT、REMOVE等。5. 數(shù)據(jù)控制語言(Data Control Language,DCL)4. 事務(wù)控制語言(Transaction Control Language,TCL)事務(wù)是對(duì)數(shù)據(jù)庫操作的邏輯單位,在一個(gè)事務(wù)中可以包含一條或多條DML(數(shù)據(jù)操縱語言)、DDL(數(shù)據(jù)定義語言)和DCL(數(shù)據(jù)控制語言)語句,這些語句組成一個(gè)邏輯整體。事務(wù)的執(zhí)行只有兩種結(jié)果:要么全部執(zhí)行,把數(shù)據(jù)庫帶入一個(gè)新的狀態(tài);要么全部不執(zhí)行,對(duì)數(shù)據(jù)庫不做任何修改。事務(wù)是一個(gè)或多個(gè)SQL語句序列,在程序更新數(shù)據(jù)庫時(shí)事務(wù)至關(guān)重要,因?yàn)楸仨毦S護(hù)數(shù)據(jù)的完整性,命令動(dòng)詞有 SAVEPOINT ,RO

4、LLBACK , COMMIT。2:095二二. SELECT查詢查詢 所謂查詢,就是針對(duì)數(shù)據(jù)庫中的數(shù)據(jù)按指定的條件和特定的組合進(jìn)行對(duì)數(shù)據(jù)表的檢索。 SELECT FROM 表名 WHERE 查詢條件 含義是:根據(jù)WHERE子句的查詢條件,從FROM子句指定的表中找出滿足條件記錄,再按SELECT語句中指定的字段次序,篩選出記錄中的指定字段值。若不設(shè)置查詢條件,則表示被查詢的表中所有記錄都滿足條件。 SELECT語句格式語句格式 SELECT查詢語句基本格式是:查詢語句基本格式是:2:096SELECT ALL|DISTINCT INTO 新表名FROM WHERE GROUP BY HAVI

5、NG ORDER BY ASC|DESC SELECT查詢語句完整格式是:查詢語句完整格式是:參數(shù)說明: (1)ALL|DISTINCT 其中ALL表示查詢滿足條件的所有行;DISTINCT表示在查詢的結(jié)果集中,消除重復(fù)的記錄。 (2):由被查詢的表中的字段或表達(dá)式組成,指明要查詢的字段信息。2:097(3)INTO 新表名 表示在查詢的時(shí)候同時(shí)建立一個(gè)新的表,新表中存放的數(shù)據(jù)來源于查詢的結(jié)果。(4)FROM 指出針對(duì)那些表進(jìn)行查詢操作,可以是單個(gè)表,也可以是多個(gè)表,表名與表名之間用逗號(hào)隔開。(5)WHERE 用于指定查詢的條件。該項(xiàng)是可選項(xiàng),即可以不設(shè)置查詢條件,但也可以設(shè)置一個(gè)或多個(gè)查詢條

6、件。(6)GROUP BY 對(duì)查詢的結(jié)果按照指定的字段進(jìn)行分組。(7)HAVING : 對(duì)分組后的查詢結(jié)果再次設(shè)置篩選條件,最后的結(jié)果集中只包含滿足條件的分組。必須與GROUP BY子句一起使用。(8)ORDER BY ASC|DESC 對(duì)查詢的結(jié)果按照指定的字段進(jìn)行排序,其中ASC|DESC用來指明排序的方式。ASC為升序;DESC為降序。2:098 整個(gè)整個(gè)SELECTSELECT語句的含義:語句的含義: 根據(jù)WHERE子句的篩選條件,從FROM子句指定的表中找出滿足條件記錄,再按SELECT語句中指定的字段次序,篩選出記錄中的字段值構(gòu)造一個(gè)顯示結(jié)果表。 如果有GROUP BY子句,則將結(jié)

7、果按group by后面的“字段名”的值進(jìn)行分組,該字段中值相等的元組為一個(gè)組; 如果GROUP BY子句帶有短語HAVING,則只有滿足短語指定條件的分組才會(huì)輸出。 如果有ORDER BY子句,則結(jié)果表要按照order by后面的的值進(jìn)行升序和降序排列。 SELECT ALL|DISTINCT實(shí)現(xiàn)的是對(duì)表的投影操作,WHERE 中實(shí)現(xiàn)的是選擇操作。 2:099 三三. 針對(duì)單表的查詢針對(duì)單表的查詢1. 查詢指定的字段查詢指定的字段【例例1 1】查詢student表中學(xué)生的學(xué)號(hào)、姓名以及家庭住址。 用戶往往需要了解表中部分字段信息或者全部字段信息,通過對(duì)SELECT語句中“字段列表”的控制即可

8、滿足用戶的需求。SELECT student_id, student_name, addressFROM student1.1 查詢部分字段查詢部分字段2:0910 方法一:列舉法,即把表中所有字段在SELECT子句中的“字段列表”中列舉出來; 方法二:通配符法,即使用通配符“*”來代替表中所有的字段。1.21.2 查詢?nèi)孔侄尾樵內(nèi)孔侄巍纠? 2】查詢student表中所有學(xué)生的所有字段信息。SELECT student_id, student_name, class_id, sex, SELECT student_id, student_name, class_id, sex, bor

9、n_date, address, tel, resumeborn_date, address, tel, resumeFROM studentFROM student方法一:列舉法SELECT * FROM student方法二:通配符法2:0911 當(dāng)用戶只需要了解表中部分記錄的信息時(shí),這就應(yīng)該在查詢的時(shí)候使用WHERE子句設(shè)置篩選條件,把滿足篩選條件的記錄查詢出來。 設(shè)置查詢條件的SELECT查詢語句基本格式是:1.3 查詢滿足條件的記錄查詢滿足條件的記錄SELECT SELECT FROM FROM 表名表名WHERE WHERE 查詢條件查詢條件查詢條件可以是關(guān)系表達(dá)式、邏輯表達(dá)式和特

10、殊表達(dá)式。2:0912用關(guān)系運(yùn)算符號(hào)將兩個(gè)表達(dá)式連接在一起的式子稱為關(guān)系表達(dá)式,其返回值為邏輯真(TRUE)或邏輯假(FALSE),關(guān)系表達(dá)式的格式為: 2常用的關(guān)系運(yùn)算符如下表所示。運(yùn)算符號(hào)含義=等于小于大于=大于或等于!=或不等于關(guān)系表達(dá)式關(guān)系表達(dá)式2:0913【例例3】查詢所有男學(xué)生的學(xué)號(hào)、姓名、性別和出生日期。SELECT student_id, student_name, sex, born_dateFROM studentWHERE sex=男男2:0914用邏輯運(yùn)算符號(hào)將兩個(gè)表達(dá)式連接在一起的式子稱為邏輯表達(dá)式,其返回值為邏輯真(TRUE)或邏輯假(FALSE),邏輯表達(dá)式的格式

11、為:2常用的邏輯運(yùn)算符下圖所示。運(yùn)算符號(hào)含義OR邏輯或AND邏輯與NOT邏輯否 邏輯表達(dá)式邏輯表達(dá)式2:0915(1)邏輯與運(yùn)算ANDAND所有條件都成立時(shí),返回結(jié)果才為真?!纠?】查詢所有1989年以后出生所有女學(xué)生的基本信息。SELECT * FROM studentWHERE born_date1989-12-31 AND sex=女女【例例5】查詢課程表中非公共課的課程信息。(2)邏輯否運(yùn)算NOTSELECT *FROM courseWHERE NOT (c_type =公共課公共課)2:0916(3)邏輯或運(yùn)算OR所有條件中只要有一個(gè)條件成立,返回結(jié)果即為真?!纠?】查詢學(xué)生表中

12、來自廣州市的學(xué)生或來自其他地方的女學(xué)生的學(xué)號(hào)、姓名、班級(jí)編號(hào)、家庭住址和備注信息SELECT student_id, student_name, class_id, address, resumeFROM studentWHERE address=廣州市廣州市 OR sex=女女2:0917特殊表達(dá)式在比較運(yùn)算中有一些特殊的作用。常用的特殊運(yùn)算符號(hào)如下圖所示。特殊表達(dá)式特殊表達(dá)式 運(yùn)算符號(hào)含義%通配符,包含0個(gè)或多個(gè)字符的任意字符串通配符,表示任意單個(gè)字符 指定范圍或集合中的任意單個(gè)字符BETWEEN.AND定義一個(gè)區(qū)間范圍IS NOT NULL檢測(cè)字段值為空或不為空LIKE字符匹配操作符NO

13、T IN檢查一個(gè)字段值屬于或不屬于一個(gè)集合EXISTS檢查某一字段是否存在值2:0918 LIKE LIKE關(guān)鍵字的作用是用于指出一個(gè)字符串是否與指定的字符串相匹配,其運(yùn)算對(duì)象可以是charchar、texttext、datetimedatetime等數(shù)據(jù)類型,返回邏輯值。LIKELIKE表達(dá)式的格式為: 字符表達(dá)式字符表達(dá)式1 NOT LIKE 1 NOT LIKE 字符表達(dá)式字符表達(dá)式2 2 若省略NOT,則表示字符表達(dá)式1與字符表達(dá)式2相匹配時(shí)才返回邏輯真。 若選擇NOT,則表示字符表達(dá)式1與字符表達(dá)式2不匹配時(shí)才返回邏輯真。(1)字符匹配操作符LIKELIKE2:0919【例例6 6】

14、查詢姓劉的學(xué)生的基本情況。SELECT SELECT * * FROM student FROM studentWHERE student_name LIKE WHERE student_name LIKE 劉劉% %【例例7 7】查詢所有姓張和姓劉學(xué)生的基本情況。SELECT SELECT * * FROM studentFROM studentWHERE student_name LIKE WHERE student_name LIKE 張,劉張,劉%說明:在使用通配符“%”或“_”時(shí),就只能用字符匹配操作符LIKE,不能使用=運(yùn)算符 2:0920判斷所指定的值是否在給定的區(qū)間,返回邏輯值

15、。格式為:表達(dá)式表達(dá)式 NOT BETWEEN NOT BETWEEN 表達(dá)式表達(dá)式1 AND 1 AND 表達(dá)式表達(dá)式2 2“表達(dá)式1”是區(qū)間的下限,“表達(dá)式2”是區(qū)間的上限。若省略NOT,則表示表達(dá)式的值在指定的區(qū)間內(nèi)即返回邏輯真。若選擇NOT,則表示表達(dá)式的值不在指定的區(qū)間內(nèi)即返回邏輯真。(2)區(qū)間控制運(yùn)算符BETWEEN.ANDBETWEEN.AND【例例8 8】查詢出1990年1月1日至1991年12月31日出生的學(xué)生的學(xué)號(hào)、姓名、出生日期。SELECT student_id, student_name, born_dateFROM studentWHERE born_date BE

16、TWEEN 1990-1-1 AND 1991-12-312:0921IS NULLIS NULL用來測(cè)試字段值是否為空值,返回邏輯值,格式為: 表達(dá)式表達(dá)式 IS NOT NULLIS NOT NULL若省略NOT,則表示表達(dá)式的值為空時(shí)即返回邏輯真。若選擇NOT,則表示表達(dá)式的值不為空時(shí)即返回邏輯真。(3)空值判斷運(yùn)算符IS NULLIS NULL【例例9 9】查詢備注內(nèi)容為空的學(xué)生的學(xué)號(hào)、姓名與備注。 SELECT student_id, student_name,resumeSELECT student_id, student_name,resumeFROM studentFROM s

17、tudentWHERE resume is nullWHERE resume is null2:0922 判斷表達(dá)式的值是否屬于某一個(gè)給定的集合。返回邏輯值,格式為: 表達(dá)式表達(dá)式 NOT IN NOT IN (表達(dá)式(表達(dá)式1 1 ,.n.n)若省略NOT,則表示表達(dá)式的值屬于給定集合時(shí)即返回邏輯真。若選擇NOT,則表示表達(dá)式的值不屬于給定的集合時(shí)即返回邏輯真。(4)集合判斷運(yùn)算符ININ【例例1010】查詢來自長(zhǎng)沙和廣州市學(xué)生的姓名、班級(jí)編號(hào)和來自的城市。SELECT student_name, class_id,addressSELECT student_name, class_id,a

18、ddressFROM studentFROM studentWHERE address in (WHERE address in (長(zhǎng)沙市, ,廣州市) )2:0923四四. .對(duì)查詢結(jié)果進(jìn)行編輯對(duì)查詢結(jié)果進(jìn)行編輯 1.1.對(duì)查詢的字段進(jìn)行說明對(duì)查詢的字段進(jìn)行說明【例例1111】查詢學(xué)生表中學(xué)生的姓名和來自的城市,并分別用中文對(duì)其進(jìn)行說明。 在SELECT語句中,可以在一個(gè)字段的前面加上一個(gè)單引號(hào)字符串,對(duì)后面的字段起說明作用。SELECT SELECT 姓名姓名, student_name, , student_name, 城市城市, address, addressFROM student

19、FROM student2:0924為了能讓人更容易了解字段的內(nèi)容,可以為字段指定別名,并顯示在結(jié)果集中,方法有3種:方法一:字段名方法一:字段名 AS AS 別名;別名;方法二:字段名方法二:字段名 別名別名方法三:別名方法三:別名= =字段名字段名2.2.對(duì)查詢的字段使用別名對(duì)查詢的字段使用別名【例例12】查詢學(xué)生表中的學(xué)生的student_name和born_date信息,并用中文“姓名”和“出生日期”來顯示字段名。SELECT student_name AS 姓名姓名, born_date AS 出生日期出生日期 FROM student2:0925 SELECT子句后面可以是字段名,

20、也可以是表達(dá)式。 3.3.顯示表達(dá)式的值顯示表達(dá)式的值【例例1313】查詢學(xué)生表中所有女學(xué)生的姓名和年齡。SELECT student_name , SELECT student_name , year(getdate()-year(born_date) year(getdate()-year(born_date) 年齡年齡FROM studentFROM studentWHERE sex=WHERE sex=女女 2:0926 SELECT子句中有一個(gè)可選項(xiàng):ALL|DISTINCT,其中DISTINCT的作用就是用來消除結(jié)果集中重復(fù)的記錄,內(nèi)容相同的記錄只顯示一條。4.4.消除結(jié)果集中重復(fù)

21、的記錄消除結(jié)果集中重復(fù)的記錄【例例1414】查詢學(xué)生表學(xué)生所來自的城市。查詢學(xué)生表學(xué)生所來自的城市。SELECT DINSTINCT addressSELECT DINSTINCT addressFROM studentFROM student2:0927 查詢語句中還可以指定表中返回的行數(shù),格式如下:SELECT TOP n SELECT TOP n 字段列表字段列表FROM FROM 其中,TOP n用于指定查詢結(jié)果返回的行數(shù),其返回的結(jié)果一定從上往下的n行信息。5.5.返回指定的行數(shù)返回指定的行數(shù)【例例1515】查詢學(xué)生表前3位學(xué)生的學(xué)號(hào)和姓名。SELECT TOP 3 student_

22、id, student_name, class_idFROM student2:0928SQL SERVER提供的聚合函數(shù),用來完成一定的統(tǒng)計(jì)功能.能對(duì)集合中的一組數(shù)據(jù)進(jìn)行計(jì)算,并返回單個(gè)計(jì)算結(jié)果.常與SELECT和GROUP BY 子句一起使用.常用聚合函數(shù)函數(shù)功能含義說明COUNT統(tǒng)計(jì)統(tǒng)計(jì)滿足條件的記錄數(shù)MAX求最大值求某一集合中的最大值MIN求最小值求某一集合中的最小值A(chǔ)VG求平均值計(jì)算某一數(shù)值集合中的平均值SUM求和計(jì)算某一數(shù)值集合中的總和2:0929 MAX和MIN函數(shù)分別用于查找指定集合中的最大值和最小值。格式為: MAX MAXMINMIN(ALL | DISTINCT ALL

23、| DISTINCT 表達(dá)式)表達(dá)式) 其中,ALL表示對(duì)所有值進(jìn)行聚合函數(shù)運(yùn)算,DISTINCT表示如果有多個(gè)重復(fù)的值,則這些重復(fù)值只計(jì)算一次,默認(rèn)為ALL。表達(dá)式可以是涉及一個(gè)列或多個(gè)列的算術(shù)表達(dá)式。6.16.1 MAXMAX和和MINMIN函數(shù)函數(shù)【例例1616】查找成績(jī)表中1001號(hào)課程的最高分和最低分。SELECT max(grade)SELECT max(grade)最高分最高分, min(grade), min(grade)最低分最低分 FROM scoreFROM scoreWHERE course_id=1001WHERE course_id=10012:0930該函數(shù)用于計(jì)

24、算查詢到的數(shù)據(jù)值的總和。語法格式為: SUM(ALL | DISTINCT 表達(dá)式)表達(dá)式)【例例17】計(jì)算0801101號(hào)學(xué)生總成績(jī)。6.2 SUM函數(shù)函數(shù)SELECT sum(grade)總分FROM scoreWHERE student_id=08011012:0931用于計(jì)算查詢結(jié)果的平均值。語法格式為: AVG(ALL | DISTINCT 表達(dá)式)表達(dá)式)6.3 AVG函數(shù)函數(shù)【例例18】計(jì)算0801101號(hào)學(xué)生平均成績(jī)。SELECT AVG(grade)平均分平均分FROM scoreWHERE student_id=08011012:0932用于統(tǒng)計(jì)查詢結(jié)果集中記錄的數(shù)目。語法

25、格式為: COUNT COUNT(ALL | DISTINCT ALL | DISTINCT 表達(dá)式)表達(dá)式) 如果COUNT函數(shù)使用字段名做為參數(shù),則只統(tǒng)計(jì)內(nèi)容不為空的行的數(shù)目。 如果執(zhí)行COUNT(*),即使用“*”作為參數(shù),則統(tǒng)計(jì)所有行(包括空值的行)。6.4 COUNT函數(shù)函數(shù)【例例19】統(tǒng)計(jì)學(xué)生表中學(xué)生的總數(shù)。統(tǒng)計(jì)學(xué)生表中學(xué)生的總數(shù)。SELECT COUNT(student_id)學(xué)生總數(shù)學(xué)生總數(shù)FROM student2:0933GROUP BY子句將查詢結(jié)果表按某一列或多列值分組,值相等的為一組。一般與SQL的聚合函數(shù)一起使用,對(duì)分組后的每一組數(shù)據(jù)分別進(jìn)行統(tǒng)計(jì)。格式:SELECT

26、 FROM GROUP BY HAVING 6.5 對(duì)查詢結(jié)果進(jìn)行分組和篩選對(duì)查詢結(jié)果進(jìn)行分組和篩選【例例20】統(tǒng)計(jì)各個(gè)班學(xué)生的總?cè)藬?shù)。統(tǒng)計(jì)各個(gè)班學(xué)生的總?cè)藬?shù)。SELECT class_id , count(student_id)FROM studentGROUP BY class_id2:0934【例例21】統(tǒng)計(jì)成績(jī)表中每個(gè)學(xué)生的總分和平均分。SELECT student_id , sum(grade)總分總分, avg(grade)平均分平均分FROM scoreGROUP BY student_id2:09356.6 6.6 對(duì)分組后還要求按一定的條件對(duì)這些分組進(jìn)行篩選,最終對(duì)分組后還要

27、求按一定的條件對(duì)這些分組進(jìn)行篩選,最終只輸出滿足指定條件的分組,則用只輸出滿足指定條件的分組,則用HAVINGHAVING短語指定篩選條件。短語指定篩選條件?!纠?222】在例在例2121中,只輸出總分大于中,只輸出總分大于150150的學(xué)生的學(xué)號(hào)、總的學(xué)生的學(xué)號(hào)、總分和平均分。分和平均分。SELECT SELECT student_idstudent_id, sum(grade), sum(grade)總分總分, , avgavg(grade)(grade)平均分平均分 FROM gradeFROM gradeGROUP BY GROUP BY student_idstudent_idHA

28、VING sum(grade)150HAVING sum(grade)1502:09366.7 對(duì)查詢結(jié)果集進(jìn)行排序?qū)Σ樵兘Y(jié)果集進(jìn)行排序 在SELECT查詢語句中。使用ORDER BY子句對(duì)查詢輸出結(jié)果進(jìn)行排序。 排序的方式有兩種:ASC(升序)和DESC(降序)。【例例23】統(tǒng)計(jì)成績(jī)表中每個(gè)學(xué)生的總分和平均分,把查詢結(jié)果按總分的降序排列輸出。SELECT student_id , sum(grade)總分總分, avg(grade)平均分平均分FROM gradeGROUP BY student_idORDER BY 總分總分 DESC2:0937 通過INTO子句,可以創(chuàng)建一個(gè)新表并將查詢

29、到的結(jié)果插入到新表中。6.8 6.8 把查詢結(jié)果插入新的表把查詢結(jié)果插入新的表【例例2424】查詢學(xué)生表中學(xué)生的學(xué)號(hào)、姓名和班級(jí)編號(hào),并把查詢結(jié)果插入到新的表student_class中。然后針對(duì)student_class表進(jìn)行查詢操作,驗(yàn)證新表student_class是否建立成功且被插入了記錄。 SELECT student_id, student_name, class_idSELECT student_id, student_name, class_idINTO student_classINTO student_classFROM student FROM student 說明:新表

30、的所包含的字段與數(shù)據(jù)類型與SELECT語句的字段列表一致。如果要?jiǎng)?chuàng)建的臨時(shí)表,則只要在表名前加上“#或#”即可2:0938 五五. 多連接表查詢多連接表查詢 連接查詢分兩大類,一是使用連接謂詞進(jìn)行連接;二是使用關(guān)鍵字JHON進(jìn)行連接。 使用連接謂詞連接表的基本格式為:SELECT FROM 表表1,表,表2 ,.nWHERE 連接謂詞連接謂詞連接字段:必須是可比較的 連接謂詞包括:=、=、!=、等,當(dāng)比較符是=時(shí)稱為等值連接。2:0939當(dāng)連接謂詞是“=”時(shí)的連接,稱為等值連接。當(dāng)連接謂詞是不等運(yùn)算符時(shí)的連接,稱為不等連接?!?5】查詢學(xué)生的基本信息和成績(jī)信息。SELECT student.*

31、 , score.*FROM student , scoreWHERE student.student_id=score.student_id1等值連接和不等連接等值連接和不等連接2:09402. 自然連接自然連接 在針對(duì)多表進(jìn)行查詢時(shí)。如果所引用的列為被查詢的表所共有,則引用列時(shí)必須用表名來指定列是來源于哪個(gè)表,指定方法為:表名.列名。反之,不一定需要表名來指定來源。【例例26】查詢學(xué)生的基本信息和成績(jī)信息,在輸出結(jié)果中相同的字段只保留一個(gè)。SELECT student.student_id, student_name, class_id, sex, born_date, address,

32、tel, resume, course_id, gradeFROM student , scoreWHERE student.student_id=score.student_id 若在等值連接中把輸出字段列表中重復(fù)的字段只保留一個(gè)的連接稱為自然連接。2:09413. 復(fù)合條件連接復(fù)合條件連接含有多個(gè)連接條件稱為復(fù)合條件連接?!纠?7】查詢學(xué)生的學(xué)號(hào)、姓名、所學(xué)課程的名稱和成績(jī)信查詢學(xué)生的學(xué)號(hào)、姓名、所學(xué)課程的名稱和成績(jī)信息。息。SELECT student.student_id,student_name,course_name,gradeFROM student, score, cours

33、eWHERE student.student_id=score.student_id AND score.course_id=course.course_id2:0942 一個(gè)表與自身進(jìn)行連接稱為自連接。 在同一個(gè)表中查找具有相同字段值的行,則可以使用自連接。在使用自連接時(shí)需要為表指定兩個(gè)別名,且對(duì)所有引用的列均要用別名來指定其來源。4. 自連接自連接 【例例28】查找同一課程成績(jī)相同的學(xué)生的學(xué)號(hào)、課程號(hào)和成績(jī)。SELECT a.student_id,b.student_id,a.course_id,a.gradeFROM score a, score bWHERE a.grade=b.gra

34、de AND a.student_idb.student_idAND a.course_id=b.course_id 2:0943以以JOIN關(guān)鍵字連接關(guān)鍵字連接 以JOIN關(guān)鍵字來連接表的方式,增強(qiáng)了表的連接能力和連接的靈活性。 使用JOIN關(guān)鍵字連接表的的基本格式為:SELECT FROM 表名表名1 表名表名2 ON 表名表名3 ON .參數(shù)說明:1)表名1,表名2,表名3等用來指明需要連接的表。2)連接類型有: INNER | LEFT | RIGHE | FULL OUTER JOIN。其中INNER JOIN表示內(nèi)連接;OUTER JOIN表示外連接,外連接又分:左外連接(LEFT

35、 OUTER JOIN)、右外連接(RIGHT OUTER JOIN)和全外連接(FULL OUTER JOIN)。3)ON:用來指明連接條件。2:0944 等值連接、不等連接和自然連接屬于內(nèi)連接。以JOIN關(guān)鍵字來實(shí)現(xiàn)內(nèi)連接按照ON所指定的連接條件合并兩個(gè)表,返回滿足條件的行。1 1內(nèi)連接(內(nèi)連接(INNER JOININNER JOIN) 【例例2929】查詢學(xué)生的基本信息和成績(jī)信息SELECT student.SELECT student.* * , score. , score.* *FROM student INNER JOIN score FROM student INNER JO

36、IN score ON student.student_id=score.student_id ON student.student_id=score.student_id2:0945 在內(nèi)連接中,INNER可以省略,使用內(nèi)連接后仍然可以使用WHERE子句對(duì)連接后的記錄進(jìn)行篩選?!纠?0】查詢學(xué)號(hào)為0801101學(xué)生的基本信息和成績(jī)信息。SELECT student.student_id, student_name, class_id, sex, born_date, address, tel, resume, course_id, gradeFROM student INNER JOIN

37、score ON student.student_id=score.student_idWHERE student.student_id= 08011012:0946 外連接返回到查詢結(jié)果集合中的不僅包含符合連接條件的行,而且還包括左表(左外連接時(shí))、右表(右外連接時(shí))或兩個(gè)邊接表(全外連接)中的所有數(shù)據(jù)行。2外連接外連接(OUTER JOIN)(1)左外連接)左外連接 查詢輸出結(jié)果中顯示符合條件的數(shù)據(jù)行及左邊數(shù)據(jù)表中不符合條件的數(shù)據(jù)行。左外連接的連接格式為:【例例31】查找所有學(xué)生的學(xué)號(hào)、姓名以及他們所學(xué)的課程編號(hào)和成績(jī),沒有課程成績(jī)的學(xué)生信息也要顯示。FROM 左表名左表名 LEFT OU

38、TER JOIN 右表名右表名 ON 連接條件連接條件SELECT student.student_id, student_name, course_id, gradeFROM student LEFT OUTER JOIN score ON student.student_id=score.student_id2:0947 查詢輸出結(jié)果中顯示符合條件的數(shù)據(jù)行及右邊數(shù)據(jù)表中不符合條件的數(shù)據(jù)行。右外連接的連接格式為:(2)右外連接)右外連接FROM 左表名左表名 RIGHT OUTER JOIN 右表名右表名 ON 連接條件連接條件【例例32】查詢學(xué)生的學(xué)號(hào)、所在的班級(jí)編號(hào)和班級(jí)名稱,班級(jí)表中沒

39、有連接成功的記錄也要顯示。SELECT student.student_id, class.class_id, class_nameFROM student RIGHT OUTER JOIN class ON student.class_id=class.class_id2:0948(3)全外連接)全外連接 查詢輸出結(jié)果中顯示符合條件的數(shù)據(jù)行右邊及左邊數(shù)據(jù)表中不符合條件的數(shù)據(jù)行。全外連接的格式為:FROM 左表名左表名 FULL OUTER JOIN 右表名右表名 ON 連接條件連接條件【例例33】查詢學(xué)生的學(xué)號(hào)、所學(xué)課程名稱及成績(jī),兩表中沒有連接成功的記錄均要顯示(采用全外連接)。SELEC

40、T student_id, course_name, gradeFROM score FULL OUTER JOIN course ON score.course_id=course.course_id2:09493.交叉連接交叉連接 交叉連接也叫非限制連接,它將兩個(gè)表不加任何約束地組合起來。在數(shù)學(xué)上,就是兩個(gè)表的笛卡爾積。交叉連接后得到的結(jié)果集的行數(shù)是兩個(gè)被連接表的行數(shù)的乘積?!纠?4】查詢學(xué)生的基本信息及其成績(jī)信息(使用交叉連接)。SELECT *FROM student CROSS JOIN score2:0950 六.子查詢子查詢 子查詢是一個(gè)嵌套在 SELECT、INSERT、UP

41、DATE 或 DELETE 語句中的WHERE 或 HAVING 子句內(nèi),或嵌套在其他子查詢中的SELECT查詢。 子查詢可以嵌套,它能將比較復(fù)雜的查詢分解為幾個(gè)簡(jiǎn)單的查詢。一個(gè)SELECTFROMWHERE語句稱為一個(gè)查詢塊查詢塊。將一個(gè)查詢塊嵌套在另一個(gè)WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢嵌套查詢。2:0951 SELECT class_name外部查詢外部查詢 FROM class WHERE class_id IN ( SELECT class_id 內(nèi)部查詢內(nèi)部查詢 FROM student (子查詢)(子查詢) WHERE student_name=張小云 )

42、 嵌套查詢的執(zhí)行順序是:首先執(zhí)行最底層的內(nèi)部查詢(即子查詢),它的查詢結(jié)果并不顯示,而是傳遞給外層查詢,用來做外外部查詢的查詢條件。即按照由里向外的順序執(zhí)行。 2:0952可以使用子查詢的地方有: 在使用 IN 或NOT IN的集合查詢中。在UPDATE、DELETE和INSERT語句中。在使用比較運(yùn)算符時(shí)使用 ANY 或 ALL時(shí)。使用 EXISTS或NOT EXISTS 引入的存在測(cè)試時(shí)。在有表達(dá)式的地方。子查詢的使用2:0953 IN子查詢是把子查詢的結(jié)果做為外部查詢的條件。判斷外部查詢中的某個(gè)值是否屬于子查詢的結(jié)果集合。帶謂詞帶謂詞IN或或NOT IN的子查詢的子查詢【例例35】查找選

43、修了1002號(hào)課程的學(xué)生的學(xué)號(hào)、姓名和班級(jí)編號(hào)。格式: NOT IN (子查詢)SELECT student_id, student_name, class_idFROM studentWHERE student_id IN (SELECT student_id FROM score WHERE course_id=1002)2:0954 當(dāng)子查詢返回的是單值時(shí),子查詢可以由一個(gè)比較運(yùn)算符( =、=、!=或)引入。當(dāng)子查詢可能返回多個(gè)值時(shí)則應(yīng)把比較運(yùn)算符與ALL和ANY 結(jié)合使用。格式為:表達(dá)式 比較運(yùn)算符 ALL|ANY (子查詢) ALL:表示表達(dá)式要與子查詢的結(jié)果集中的所以值進(jìn)行比較,當(dāng)

44、表達(dá)式與每個(gè)值都滿足比較關(guān)系時(shí),才返回TRUE,否則返回FALSE。 ANY:表示表達(dá)式只要與子查詢的結(jié)果集中的某個(gè)值滿足比較關(guān)系時(shí),就返回TRUE,否則返回FALSE。帶有比較運(yùn)算符的子查詢帶有比較運(yùn)算符的子查詢2:09552:0956【例例36】查詢選修了1001號(hào)課程且成績(jī)比0801103號(hào)學(xué)生1001號(hào)課程成績(jī)高的學(xué)生的學(xué)號(hào)、課程編號(hào)和成績(jī)。SELECT student_id, course_id, gradeFROM scoreWHERE course_id=1001 AND grade(SELECT grade FROM score WHERE student_id=0801103 AND course_id=1001)2:0957 INSERT、DELETE和和UPDATE語句中的子查詢語句中的子查詢 子查詢可以嵌套在INSERT、DELETE和UPDATE語句中,把子查詢的結(jié)果插入到新表中或用來設(shè)置刪除和修改記錄的條件。 INSERT和SELECT語句結(jié)合起來,可以往指定的表中插入批量的記錄。帶子查詢的插入操作的格式為:1帶子查詢的插入操作帶子查詢的插入操作INSERT INTO (,)SELECT (,)FROM WHERE2:09582.帶子查詢的修改操作帶子查詢的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論