《專(zhuān)升本輔導(dǎo)第5章SQL語(yǔ)言》由會(huì)員分享,可在線閱讀,更多相關(guān)《專(zhuān)升本輔導(dǎo)第5章SQL語(yǔ)言(24頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、2020/9/3,1,第5章 關(guān)系數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)語(yǔ)言SQL,目 錄,上一頁(yè),下一頁(yè),退 出,2020/9/3,2,本 章 要 點(diǎn),5.1SQL語(yǔ)言的基本概念 5.2數(shù)據(jù)定義 5.3SQL中的數(shù)據(jù)查詢語(yǔ)句,思考題,2020/9/3,3,1綜合統(tǒng)一 SQL語(yǔ)言集數(shù)據(jù)定義(DDL)、數(shù)據(jù)操縱(DML)、數(shù)據(jù)管理(DCL)的功能于一體,語(yǔ)言風(fēng)格統(tǒng)一,可以獨(dú)立完成數(shù)據(jù)庫(kù)的全部操作,包括定義關(guān)系模式、錄入數(shù)據(jù)及建立數(shù)據(jù)庫(kù)、查詢、更新、維護(hù)數(shù)據(jù)、數(shù)據(jù)庫(kù)的重新構(gòu)造、數(shù)據(jù)庫(kù)安全性等一系列操作的要求,為數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)開(kāi)發(fā)者提供了良好的環(huán)境。 2高度非過(guò)程化 3面向集合的操作方式 4以同一種語(yǔ)法結(jié)構(gòu)提供兩種使用
2、方式 5語(yǔ)言簡(jiǎn)潔,易學(xué)易用,,5.1.1 SQL語(yǔ)言的特點(diǎn),2020/9/3,4,操作對(duì)象:表、索引和視圖 三個(gè)命令:表的建立(CREATE)、表的刪除(DROP) 表的修改(ALTER) 5.2.1 定義(創(chuàng)建)表 【格式】CREATE TABLE ( (,) CHECK ERROR 字符型文本信息 DEFAULT PRIMARY KEY | UNIQUE NULL | NOT NULL ,) 【功能】定義(也稱創(chuàng)建)一個(gè)表。,5.2 數(shù)據(jù)定義,2020/9/3,5,【例5-1】創(chuàng)建一個(gè)表STUD(學(xué)生信息表),它由以下字段組成:學(xué)號(hào) (C,
3、10);姓名(C,8);性別(C,2);班級(jí)名(C,10);系別代號(hào)(C,2);地址(C,50);出生日期 (D);是否團(tuán)員 (L);備注 (M)。 CREATE TABLE STUD(學(xué)號(hào)C(10),姓名 C(10),性別 C(2),班級(jí)名 C(10),系別代號(hào) C(2),地址 C(50),出生日期 D,是否團(tuán)員 L,備注 M,照片 G) LIST STRUCTURE 【例5-2】創(chuàng)建一個(gè)表SC(課程成績(jī)表),它由以下字段組成:學(xué)號(hào)(C,10);課程號(hào)(C,2)。 CREATE TABLE SC(學(xué)號(hào) C(10),課程號(hào) C(2)) LIST STRUCTURE,2020/9/3,6,5.3
4、 SQL中的數(shù)據(jù)查詢語(yǔ)句,數(shù)據(jù)庫(kù)中的數(shù)據(jù)很多時(shí)侯是為了查詢的,因此,數(shù)據(jù)查詢是數(shù)據(jù)庫(kù)的核心操作。而在SQL語(yǔ)言中,查詢語(yǔ)言中有一條查詢命令,即SELECT語(yǔ)句。,2020/9/3,7,5.3.1 基本查詢語(yǔ)句 【格式】SELECT ALL | DISTINCT TOP AS , AS FROM 【功能】無(wú)條件查詢。 【說(shuō)明】ALL: 表示顯示全部查詢記錄,包括重復(fù)記錄。 DISTINCT: 表示顯示無(wú)重復(fù)結(jié)果的記錄。,2020/9/3,8,【例5-3】顯示STUD(學(xué)生信息數(shù)據(jù)表)中的所有記錄。 SELECT * ; FROM STUD 命令中
5、的*表示輸出顯示所有的字段,數(shù)據(jù)來(lái)源是STUD表,表中的內(nèi)容以瀏覽方式顯示。 【例5-4】顯示STUD(學(xué)生信息數(shù)據(jù)表)中的所有的學(xué)號(hào)及與之對(duì)應(yīng)的姓名,同時(shí)能去除重復(fù)記錄。 SELECT DISTINCT 學(xué)號(hào),姓名; FROM STUD,2020/9/3,9,【例5-5】顯示SC(課程成績(jī)表)中的所有記錄,并將成績(jī)一項(xiàng)乘以0.7。 SELECT 學(xué)號(hào),課程號(hào),成績(jī)*0.7 AS 成績(jī); FROM SC,2020/9/3,10,5.3.2 帶條件(WHERE)的查詢語(yǔ)句 【格式】SELECT FROM WHERE 【功能】從一個(gè)表中查詢滿足條件的數(shù)據(jù)。 【說(shuō)明】由一系列用A
6、ND 或 OR 連接的條件表達(dá)式組成,條件表達(dá)式的格式可以是以下幾種:,2020/9/3,11,【例5-6】顯示STUD表中所有男生記錄的學(xué)號(hào),姓名和性別字段值。 SELECT 學(xué)號(hào),姓名,性別 ; FROM STUD WHERE 性別=男 【例5-7】顯示STUD表中出生日期在85年之間的學(xué)生的學(xué)號(hào),姓名,出生日期。 SELECT 學(xué)號(hào),姓名,出生日期 ; FROM STUD ; WHERE 出生日期 BETWEEN 01/01/85 AND; 12/31/86,2020/9/3,12,【例5-8】顯示STUD表中姓李的學(xué)生的學(xué)號(hào),姓名,出生日期。 SELECT 學(xué)號(hào),姓名,出生日期; FR
7、OM STUD ; WHERE 姓名 LIKE “李%”,2020/9/3,13,5.3.3 SQL的復(fù)雜查詢,1連接查詢 【說(shuō)明】在一個(gè)數(shù)據(jù)庫(kù)中的多個(gè)表之間一般都存在著某些聯(lián)系,在一個(gè)查詢語(yǔ)句中同時(shí)涉及到兩個(gè)或兩個(gè)以上的表時(shí),這種查詢稱之為連接查詢(也稱為多表查詢)。在多表之間查詢必須處理表與表之間的連接關(guān)系。 【格式】SELECT FROM , .. WHERE ,2020/9/3,14,【例5-9】查詢并顯示各個(gè)學(xué)生的學(xué)號(hào),姓名,各科成績(jī)及課程名。 SELECT a.學(xué)號(hào),a.姓名,b.課程名,c.成績(jī) ; FROM STUD a,COURSE b,SC
8、 c ; WHERE a.學(xué)號(hào)=c.學(xué)號(hào) AND b.課程號(hào)=c.課程號(hào) 【例5-10】查詢并顯示各個(gè)學(xué)生所學(xué)課程的情況。 SELECT STUD.學(xué)號(hào),STUD.姓名,COURSE.課程名 ; FROM STUD,SC,COURSE ; WHERE STUD.學(xué)號(hào)=SC.學(xué)號(hào) AND SC.課程號(hào)=COURSE.課程號(hào),2020/9/3,15,(1)內(nèi)連接 【格式】SELECT FROM INNER JOIN ON 內(nèi)連接是指包括符合條件的每個(gè)表的記錄,也稱之為全記錄操作。而上面兩個(gè)例子就是內(nèi)連接。 【例5-11】查詢并顯示各個(gè)學(xué)生的學(xué)號(hào),所學(xué)課程及課程成績(jī)。 SEL
9、ECT SC.學(xué)號(hào),COURSE.課程名,SC.成績(jī) ; FROM SC,COURSE ; WHERE SC.課程號(hào)=COURSE.課程號(hào),2020/9/3,16,如果采用內(nèi)連接方式,則命令如下: SELECT a.學(xué)號(hào),b.課程名,成績(jī) ; FROM SC a INNER JOIN COURSE b ; ON a.課程號(hào)=b.課程號(hào) 將會(huì)得到完全相同的結(jié)果。 (2)外連接 外連接是指把兩個(gè)表分為左右兩個(gè)表。右外連接是指連接滿足條件右側(cè)表的全部記錄。左外連接是指連接滿足條件左側(cè)表的全部記錄。全外連接是指連接滿足條件表的全部記錄。,2020/9/3,17,2分組與計(jì)算查詢 【格式】SELECT
10、ALL | DISTINCT FROM WHERE GROUP BY HAVING ORDER BY ASC | DESC 【功能】包括有排序、函數(shù)運(yùn)算和謂詞演算,2020/9/3,18,【例5-12】按出生日期降序顯示STUD表中的學(xué)號(hào),姓名,出生日期。 SELECT 學(xué)號(hào),姓名,出生日期 ; FROM STUD ; ORDER BY 出生日期 DESC 【例5-13】按成績(jī)升序顯示SC表中的學(xué)號(hào),課程號(hào),成績(jī)。 SELECT 學(xué)號(hào),課程號(hào),成績(jī) ; FROM SC ; ORDER BY 成績(jī),2020/9/3,19,【例5-13】按班級(jí)分類(lèi)顯示學(xué)生的姓名,課程名,成績(jī),同
11、一班級(jí)按分?jǐn)?shù)排序。 SELECT a.姓名,a.班級(jí)名,c.課程名,b.成績(jī) ; FROM STUD a,SC b,COURSE c ; WHERE a.學(xué)號(hào)=b.學(xué)號(hào) AND b.課程號(hào)=c.課程號(hào); ORDER BY a.班級(jí)名,b.成績(jī); 【例5-14】顯示成績(jī)?cè)?0至90之間的學(xué)號(hào),姓名,課程名和成績(jī)。 SELECT a.姓名,c.課程名,b.成績(jī) ; FROM STUD a,SC b,COURSE c ; WHERE a.學(xué)號(hào)=b.學(xué)號(hào) AND b.課程號(hào)=c.課程號(hào) ; AND b.成績(jī) BETWEEN 80 AND 90,2020/9/3,20,【例5-14】顯示計(jì)算機(jī)系學(xué)生的成
12、績(jī)。 SELECT a.姓名,a.系別代號(hào),c.課程名,b.成績(jī) ; FROM STUD a,SC b,COURSE c ; WHERE a.學(xué)號(hào)=b.學(xué)號(hào) AND b.課程號(hào)=c.課程號(hào) ; AND a.系別代號(hào)=“01” 【例5-15】顯示各班總?cè)藬?shù)。 SELECT 班級(jí)名,COUNT(班級(jí)名) AS 總?cè)藬?shù) ; FROM STUD ; GROUP BY 班級(jí)名,2020/9/3,21,【例5-16】顯示計(jì)算機(jī)系的學(xué)生及所有男學(xué)生。 SELECT 學(xué)號(hào),姓名,系別代號(hào),性別 ; FROM STUD ; WHERE 系別代號(hào)=01 UNION ; SELECT 學(xué)號(hào),姓名,系別代號(hào),性別 ;
13、 FROM STUD ; WHERE 性別=男 【例5-17】顯示選修了英語(yǔ)或數(shù)學(xué)科目的學(xué)生學(xué)號(hào)。 SELECT 學(xué)號(hào),課程號(hào) FROM SC ; WHERE 課程號(hào)=01 UNION ; SELECT 學(xué)號(hào),課程號(hào) ; FROM SC ; WHERE 課程號(hào)=02,2020/9/3,22,【例5-18】顯示計(jì)算機(jī)系男生的名單。 SELECT 學(xué)號(hào),姓名,系別代號(hào),性別 ; FROM STUD ; WHERE 系別代號(hào)=“01” AND 性別=“男” 【例5-19】顯示既選修了01課程又選修了02課程學(xué)生的名單。 SELECT 學(xué)號(hào) ; FROM SC ; WHERE 課程號(hào)=“01” AND
14、 學(xué)號(hào) IN ; (SELECT 學(xué)號(hào) FROM SC WHERE 課程號(hào)=“02”),2020/9/3,23,【例5-20】顯示計(jì)算機(jī)系非男生的名單。 SELECT 學(xué)號(hào),姓名,系別代號(hào),性別 ; FROM STUD ; WHERE 系別代號(hào)=“01” AND 性別=“女” 【例5-21】顯示選修了01課程而沒(méi)有選修02課程學(xué)生的名單。 SELECT 學(xué)號(hào) ; FROM SC ; WHERE 課程號(hào)=“01” AND 學(xué)號(hào) NOT IN ; (SELECT 學(xué)號(hào) FROM SC WHERE 課程號(hào)=“02”),2020/9/3,24,3查詢?nèi)ハ?默認(rèn)情況下,查詢輸出到一個(gè)瀏覽窗口,用戶在“SELECT”語(yǔ)句中可使用INTO|TO FILE|TO SCREEN| TO PRINTER子句選擇查詢?nèi)ハ颍?INTO ARRAY 數(shù)組名:將查詢結(jié)果保存到一個(gè)數(shù)組中。 CURSOR:將查詢結(jié)果保存到一個(gè)臨時(shí)表中。 DBF | TABLE :將查詢結(jié)果保存到一個(gè)永久表中。 TO FILEADDITIVE:將查詢結(jié)果保存到文本文件中。如果帶“ADDITIVE”關(guān)鍵字,查詢結(jié)果以追加方式添加到指定的文件,否則,以新建或覆蓋方式添加到指定的文件。 TO SCREEN:將查詢結(jié)果保在屏幕上顯示。 TO PRINTER:將查詢結(jié)果送打印機(jī)打印。,