第3章VF中SQL語言的應(yīng)用1
《第3章VF中SQL語言的應(yīng)用1》由會員分享,可在線閱讀,更多相關(guān)《第3章VF中SQL語言的應(yīng)用1(43頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、第十章 VF中SQL語言的應(yīng)用n第一節(jié)第一節(jié) SQL語言概述語言概述 n第二節(jié)第二節(jié) 數(shù)據(jù)查詢數(shù)據(jù)查詢n第三節(jié)第三節(jié) 數(shù)據(jù)操縱數(shù)據(jù)操縱n第四節(jié)第四節(jié) 數(shù)據(jù)定義數(shù)據(jù)定義 SQLSQL語言簡介語言簡介 SQLSQL(Structured Query LanguageStructured Query Language)語言是一種十分重要的語言是一種十分重要的。 SQLSQL語言語言19861986年成為國際標(biāo)準(zhǔn)語言年成為國際標(biāo)準(zhǔn)語言 SQL SQL語言有兩種使用方式,即可語言有兩種使用方式,即可以作為以作為自含式語言自含式語言,在數(shù)據(jù)庫管理系,在數(shù)據(jù)庫管理系統(tǒng)中獨(dú)立使用,又可以作為統(tǒng)中獨(dú)立使用,又可
2、以作為嵌入式語嵌入式語言言,嵌入許多高級語言(如,嵌入許多高級語言(如C C、FORTRANFORTRAN、COBOLCOBOL)中使用。)中使用。 SQLSQL語言的特點(diǎn)語言的特點(diǎn)1 1SQLSQL語言是一種一體化的語言語言是一種一體化的語言 2 2SQLSQL語言是一種高度非過程化的語言。語言是一種高度非過程化的語言。 它沒有必要一步步告訴計(jì)算機(jī)它沒有必要一步步告訴計(jì)算機(jī)“如何如何”去做,而只需要描述清楚用戶要去做,而只需要描述清楚用戶要“做什做什么么”,SQLSQL語言就可以將要求交給系統(tǒng),語言就可以將要求交給系統(tǒng),自動(dòng)完成全部工作。它的大多數(shù)語句都是自動(dòng)完成全部工作。它的大多數(shù)語句都是
3、獨(dú)立執(zhí)行、與上下文無關(guān)。獨(dú)立執(zhí)行、與上下文無關(guān)。3 3語言簡潔,易學(xué)易用語言簡潔,易學(xué)易用SQL的命令動(dòng)詞SQL功能 命令動(dòng)詞數(shù)據(jù)查詢數(shù)據(jù)查詢 SELECT數(shù)據(jù)定義數(shù)據(jù)定義 CREATE、DROP、ALTER數(shù)據(jù)操縱數(shù)據(jù)操縱 INSERT、UPDATE、DELETE數(shù)據(jù)控制數(shù)據(jù)控制 GRANT、REVOKE(VFP中不中不能用)能用)操作不需要打開表7二、二、 SQLSQL語言的基本概念語言的基本概念SQLSQL語言支持關(guān)系型數(shù)據(jù)庫的三級模式結(jié)構(gòu)。其中外模語言支持關(guān)系型數(shù)據(jù)庫的三級模式結(jié)構(gòu)。其中外模式對應(yīng)于式對應(yīng)于視圖(視圖(ViewView)和部分和部分基本表(基本表(Base TableB
4、ase Table),),模式對應(yīng)于基本表,內(nèi)模式對應(yīng)于存儲文件。模式對應(yīng)于基本表,內(nèi)模式對應(yīng)于存儲文件?;颈砘颈硎潜旧愍?dú)立存在的表,在是本身獨(dú)立存在的表,在SQLSQL語言中一個(gè)關(guān)語言中一個(gè)關(guān)系對應(yīng)一個(gè)表。一些基本表對應(yīng)一個(gè)存儲文件,一個(gè)系對應(yīng)一個(gè)表。一些基本表對應(yīng)一個(gè)存儲文件,一個(gè)表可以帶若干索引,索引存放在存儲文件中。表可以帶若干索引,索引存放在存儲文件中。存儲文件的邏輯結(jié)構(gòu)組成了關(guān)系型數(shù)據(jù)庫的內(nèi)模存儲文件的邏輯結(jié)構(gòu)組成了關(guān)系型數(shù)據(jù)庫的內(nèi)模式。而存儲文件的物理文件結(jié)構(gòu)是任意的。式。而存儲文件的物理文件結(jié)構(gòu)是任意的。視圖是從基本表或其他視圖中導(dǎo)出的表,它本身視圖是從基本表或其他視圖中導(dǎo)
5、出的表,它本身不獨(dú)立存儲在數(shù)據(jù)庫中,也就是說數(shù)據(jù)庫只存放在視不獨(dú)立存儲在數(shù)據(jù)庫中,也就是說數(shù)據(jù)庫只存放在視力的定義而不存放視圖對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放力的定義而不存放視圖對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中,因此視圖是一個(gè)虛表。在導(dǎo)出視圖的基本表中,因此視圖是一個(gè)虛表。1 1、數(shù)據(jù)定義數(shù)據(jù)定義命令命令* * CREATE TABLE-SQLCREATE TABLE-SQL(建立表結(jié)構(gòu))(建立表結(jié)構(gòu)) ALTER TABLE-SQLALTER TABLE-SQL(修改表結(jié)構(gòu))(修改表結(jié)構(gòu)) DROP TABLE-SQLDROP TABLE-SQL(刪除表)(刪除表)2 2、數(shù)據(jù)修改、
6、數(shù)據(jù)修改命令命令 INSERT-SQLINSERT-SQL(插入數(shù)據(jù))(插入數(shù)據(jù))* * DELETE-SQLDELETE-SQL(刪除數(shù)據(jù))(刪除數(shù)據(jù))* * UPDATE-SQLUPDATE-SQL(更新數(shù)據(jù))(更新數(shù)據(jù))3 3、SQLSQL數(shù)據(jù)查詢數(shù)據(jù)查詢 在數(shù)據(jù)庫中對數(shù)據(jù)的操作,很在數(shù)據(jù)庫中對數(shù)據(jù)的操作,很多時(shí)侯是查詢,因此,數(shù)據(jù)查詢是多時(shí)侯是查詢,因此,數(shù)據(jù)查詢是數(shù)據(jù)庫的核心操作。而在數(shù)據(jù)庫的核心操作。而在SQLSQL語言中,語言中,查詢語言中只有一條查詢命令,即查詢語言中只有一條查詢命令,即SELECTSELECT語句。語句。 10.2 數(shù)據(jù)查詢n數(shù)據(jù)查詢通過數(shù)據(jù)查詢通過Selec
7、t語句表達(dá)語句表達(dá)n語句格式語句格式S E L E C T A L L | D I S T I N C T , FROM , WHERE GROUP BY HAVING ORDER BY ASC|DESC 10.2 數(shù)據(jù)查詢nSELECT子句子句:指定要顯示的屬性列:指定要顯示的屬性列nFROM子句子句:指定查詢對象:指定查詢對象(基本表或視圖基本表或視圖)nWHERE子句子句:指定查詢條件:指定查詢條件nGROUP BY子句子句:對查詢結(jié)果按指定列的值分組,:對查詢結(jié)果按指定列的值分組,該屬性列值相等的元組為一個(gè)組。通常會在每組該屬性列值相等的元組為一個(gè)組。通常會在每組中作用集函數(shù)。中作用集
8、函數(shù)。nHAVING短語短語:篩選出只有滿足指定條件的組:篩選出只有滿足指定條件的組nORDER BY子句子句:對查詢結(jié)果表按指定列值的升:對查詢結(jié)果表按指定列值的升序或降序排序序或降序排序 10.2 數(shù)據(jù)查詢n整個(gè)整個(gè)Select語句的含義:語句的含義:n根據(jù)根據(jù)Where子句的條件表達(dá)式,從子句的條件表達(dá)式,從From子句指定子句指定的基本表或視圖中找出滿足條件的元組,再按的基本表或視圖中找出滿足條件的元組,再按Select子句中的目標(biāo)列表達(dá)式,選出元組中的屬子句中的目標(biāo)列表達(dá)式,選出元組中的屬性值形成結(jié)果表。如果有性值形成結(jié)果表。如果有Group子句,則將結(jié)果子句,則將結(jié)果按按的值進(jìn)行分
9、組,該屬性列值相等的的值進(jìn)行分組,該屬性列值相等的元組為一個(gè)組。元組為一個(gè)組。如果如果Group子句帶子句帶Having短語,短語,則只有滿足指定條件的組才可以輸出則只有滿足指定條件的組才可以輸出。如果有。如果有Order子句,則結(jié)果還要按子句,則結(jié)果還要按的值升序的值升序或降序排列。或降序排列。10.2 數(shù)據(jù)查詢n注意:注意:n編寫編寫SQL語句之前,要知道各個(gè)表的結(jié)構(gòu)和聯(lián)系,語句之前,要知道各個(gè)表的結(jié)構(gòu)和聯(lián)系,即數(shù)據(jù)庫的模式。即數(shù)據(jù)庫的模式。nSQL一般寫成多行,用續(xù)行符一般寫成多行,用續(xù)行符(;)接在最后,但接在最后,但SQL語句完成的那行不加續(xù)行符。語句完成的那行不加續(xù)行符。n表達(dá)式和
10、表達(dá)式和SQL中的中的符號的書寫必須使用半角符號符號的書寫必須使用半角符號10.2.1 單表查詢n單表查詢單表查詢:From子句后只有一個(gè)表的查詢子句后只有一個(gè)表的查詢nFrom子句的格式:子句的格式:FROM 數(shù)據(jù)庫名數(shù)據(jù)庫名! 表名表名 AS本地別名本地別名 n數(shù)據(jù)庫名數(shù)據(jù)庫名!:可選,用來指出哪個(gè)數(shù)據(jù)庫中的表:可選,用來指出哪個(gè)數(shù)據(jù)庫中的表n本地別名:可選,給數(shù)據(jù)表起另一個(gè)名字,在后本地別名:可選,給數(shù)據(jù)表起另一個(gè)名字,在后面可以用別名代替原表名面可以用別名代替原表名n分下面三種使用情況舉例分下面三種使用情況舉例n1. 查詢所有的列查詢所有的列n2. 查詢指定的列查詢指定的列n3.查詢經(jīng)
11、過計(jì)算的值或更改列標(biāo)題名查詢經(jīng)過計(jì)算的值或更改列標(biāo)題名1. 查詢所有列n如果如果SELECT中的中的為為*,表示查詢所有列,表示查詢所有列n例例10.1 返回返回“學(xué)生表學(xué)生表”中的所有行和所有列中的所有行和所有列set default to “D:我的我的數(shù)據(jù)庫項(xiàng)目數(shù)據(jù)庫項(xiàng)目”open database “D:我的我的數(shù)據(jù)庫項(xiàng)目數(shù)據(jù)庫項(xiàng)目數(shù)據(jù)庫數(shù)據(jù)庫教學(xué)管理教學(xué)管理數(shù)據(jù)庫數(shù)據(jù)庫.dbc”select * ;from 教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫!學(xué)生表學(xué)生表n例例10.2 查詢成績表中的所有記錄查詢成績表中的所有記錄set default to “D:我的數(shù)據(jù)庫項(xiàng)目我的數(shù)據(jù)庫項(xiàng)目”open
12、database “D:我的數(shù)據(jù)庫項(xiàng)目我的數(shù)據(jù)庫項(xiàng)目數(shù)據(jù)庫數(shù)據(jù)庫教學(xué)管理教學(xué)管理數(shù)據(jù)庫數(shù)據(jù)庫.dbc”select * ;from 成績表成績表2. 查詢指定列 (投影操作)n要查詢指定列,要在要查詢指定列,要在SELECT的的中中指定列名,在這些列上進(jìn)行投影。指定列名,在這些列上進(jìn)行投影。n例例10.3 檢索學(xué)生表中的學(xué)號、姓名、性別和籍貫檢索學(xué)生表中的學(xué)號、姓名、性別和籍貫set default to “D:我的數(shù)據(jù)庫項(xiàng)目我的數(shù)據(jù)庫項(xiàng)目”nopen database “D:我的數(shù)據(jù)庫項(xiàng)目我的數(shù)據(jù)庫項(xiàng)目數(shù)據(jù)庫數(shù)據(jù)庫教教學(xué)管理數(shù)據(jù)庫學(xué)管理數(shù)據(jù)庫.dbc”nselect 學(xué)號學(xué)號,姓名姓名,性別
13、性別,籍貫籍貫;nfrom 學(xué)生表學(xué)生表3.查詢經(jīng)過計(jì)算的值或更改列標(biāo)題名nSELECT子句中可以使用運(yùn)算符來對列進(jìn)行計(jì)算得到結(jié)果子句中可以使用運(yùn)算符來對列進(jìn)行計(jì)算得到結(jié)果nSELECT子句可以用子句可以用更改字段名更改字段名n例例10.4 對學(xué)生表的入學(xué)成績除以對學(xué)生表的入學(xué)成績除以600,求相對成績,其顯示的字段名為,求相對成績,其顯示的字段名為“相對成績相對成績”set default to “D:我的數(shù)據(jù)庫項(xiàng)目我的數(shù)據(jù)庫項(xiàng)目”open database “D:我的數(shù)據(jù)庫項(xiàng)目我的數(shù)據(jù)庫項(xiàng)目數(shù)據(jù)庫數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫.dbc”select 學(xué)號學(xué)號,姓名姓名,入學(xué)成績?nèi)雽W(xué)成績
14、/600 as 相對成績相對成績;from 學(xué)生表學(xué)生表n例例10.5 求所有學(xué)生在求所有學(xué)生在2004年的年齡年的年齡set default to “D:我的數(shù)據(jù)庫項(xiàng)目我的數(shù)據(jù)庫項(xiàng)目”open database “D:我的數(shù)據(jù)庫項(xiàng)目我的數(shù)據(jù)庫項(xiàng)目數(shù)據(jù)庫數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫.dbc”select 學(xué)號學(xué)號,姓名姓名,2004-year(出生日期出生日期) as 年齡年齡;from 學(xué)生表學(xué)生表二、選擇表中的若干元組二、選擇表中的若干元組(選擇操作選擇操作)n使用使用SELECT語句的語句的WHERE子句的條件來實(shí)行選擇子句的條件來實(shí)行選擇操作操作n1. 消除取值重復(fù)的行消除取值重
15、復(fù)的行n有時(shí)兩個(gè)本來不完全相同的元組,在選擇某些列后,可能有時(shí)兩個(gè)本來不完全相同的元組,在選擇某些列后,可能變成完全相同了。如果指定變成完全相同了。如果指定DISTINCT短語,則表示在計(jì)短語,則表示在計(jì)算時(shí)要取消指定列中的重復(fù)值。如果不指定算時(shí)要取消指定列中的重復(fù)值。如果不指定DISTINCT短短語或指定語或指定ALL短語短語(ALL為默認(rèn)值為默認(rèn)值),則表示不取消重復(fù)值。,則表示不取消重復(fù)值。n例例10.6:輸出學(xué)生表中所有的籍貫。:輸出學(xué)生表中所有的籍貫。select distinct 籍貫籍貫;from 學(xué)生表學(xué)生表二、選擇表中的若干元組二、選擇表中的若干元組(選擇操作選擇操作)2.查
16、詢滿足條件的元組查詢滿足條件的元組查詢滿足指定條件的元組可以通過查詢滿足指定條件的元組可以通過WHERE子句實(shí)現(xiàn),子句實(shí)現(xiàn),WHERE子句常用的查詢條件如子句常用的查詢條件如表表10.1所示。所示。=等于等于=小于等于小于等于=準(zhǔn)確等于準(zhǔn)確等于 AND與,用于多重條件與,用于多重條件 LIKE字符匹配字符匹配 OR或,用于多重條件或,用于多重條件 或或 != 或或 # 不等于不等于 NOT非,用于條件取非非,用于條件取非大于大于 BETWEENAND確定范圍確定范圍 =大于等于大于等于IN確定集合確定集合 、=、=、=、#(或或!=或或)、= =。 n例例10.8:查找入學(xué)成績大于等于:查找入
17、學(xué)成績大于等于600的同的同學(xué)的學(xué)號、姓名和入學(xué)成績。學(xué)的學(xué)號、姓名和入學(xué)成績。select 學(xué)號學(xué)號,姓名姓名,入學(xué)成績?nèi)雽W(xué)成績;from 學(xué)生表學(xué)生表;where 入學(xué)成績?nèi)雽W(xué)成績= 600 二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)2.查詢滿足條件的元組之查詢滿足條件的元組之(1)大小比較大小比較n例例10.9:查找學(xué)生表中的少數(shù)民族學(xué)生。:查找學(xué)生表中的少數(shù)民族學(xué)生。select 學(xué)號學(xué)號,姓名姓名;from 學(xué)生表學(xué)生表;where 少數(shù)民族否少數(shù)民族否 = .T.n例例10-10:求:求1987年以后出生的學(xué)生學(xué)號年以后出生的學(xué)生學(xué)號和姓名。和姓名。selec
18、t 學(xué)號學(xué)號,姓名姓名,出生日期出生日期;from 學(xué)生表學(xué)生表;where 出生日期出生日期=1987/01/01二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)n2.查詢滿足條件的元組之查詢滿足條件的元組之(2)多重條件查詢多重條件查詢nSELECT語句提供邏輯運(yùn)算符語句提供邏輯運(yùn)算符AND和和OR,可用來組合聯(lián)結(jié)多,可用來組合聯(lián)結(jié)多個(gè)查詢條件。個(gè)查詢條件。 n例例10.11:查找入學(xué)成績在:查找入學(xué)成績在500分以上的少數(shù)民族學(xué)生的學(xué)分以上的少數(shù)民族學(xué)生的學(xué)號、姓名和少數(shù)民族否。號、姓名和少數(shù)民族否。select 學(xué)號學(xué)號,姓名姓名,少數(shù)民族否少數(shù)民族否;from 學(xué)生表
19、學(xué)生表;where 入學(xué)成績?nèi)雽W(xué)成績 = 500 and 少數(shù)民族否少數(shù)民族否 = .T.n例例10.12:查找入學(xué)成績在:查找入學(xué)成績在570分以上的女性學(xué)生,顯示學(xué)分以上的女性學(xué)生,顯示學(xué)號、姓名、性別和入學(xué)成績。號、姓名、性別和入學(xué)成績。select 學(xué)號學(xué)號,姓名姓名,性別性別,入學(xué)成績?nèi)雽W(xué)成績;from 學(xué)生表學(xué)生表;where 入學(xué)成績?nèi)雽W(xué)成績 = 570 and 性別性別 = 女女nAND的優(yōu)先級高于的優(yōu)先級高于OR,但我們可以用括號改變優(yōu)先級。,但我們可以用括號改變優(yōu)先級。 二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)n2.查詢滿足條件的元組之查詢滿足條件的
20、元組之(3)確定范圍確定范圍n謂詞謂詞BETWEENAND用來限定范圍,其中用來限定范圍,其中BETWEEN后后是范圍的下限是范圍的下限(即低值即低值),AND后是范圍的上限(即高值)。后是范圍的上限(即高值)。n n例例10.13:求入學(xué)成績在:求入學(xué)成績在500到到600間的學(xué)生學(xué)號、姓名和入間的學(xué)生學(xué)號、姓名和入學(xué)成績。學(xué)成績。select 學(xué)生表學(xué)生表.學(xué)號學(xué)號, 學(xué)生表學(xué)生表.姓名姓名, 學(xué)生表學(xué)生表.入學(xué)成績?nèi)雽W(xué)成績;from 教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫!學(xué)生表學(xué)生表;where 學(xué)生表學(xué)生表.入學(xué)成績?nèi)雽W(xué)成績 between 500 and 600上述上述SQL語句的條件等價(jià)于
21、如下語句語句的條件等價(jià)于如下語句where 學(xué)生表學(xué)生表.入學(xué)成績?nèi)雽W(xué)成績 = 500 and 學(xué)生表學(xué)生表.入學(xué)成績?nèi)雽W(xué)成績 = 600二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)n2.查詢滿足條件的元組之查詢滿足條件的元組之(3)確定范圍確定范圍n如果要求入學(xué)成績不在如果要求入學(xué)成績不在500到到600間的學(xué)生學(xué)間的學(xué)生學(xué)號、姓名和入學(xué)成績,使用下列號、姓名和入學(xué)成績,使用下列SQL語句:語句:select 學(xué)生表學(xué)生表.學(xué)號學(xué)號, 學(xué)生表學(xué)生表.姓名姓名, 學(xué)生表學(xué)生表.入學(xué)成績?nèi)雽W(xué)成績;from 教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫!學(xué)生表學(xué)生表;where 學(xué)生表學(xué)生表.
22、入學(xué)成績?nèi)雽W(xué)成績 not between 1000 and 600 二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)n2.查詢滿足條件的元組之查詢滿足條件的元組之(4)確定集合確定集合n使用謂詞使用謂詞 IN , NOT IN n:用逗號分隔的一組取值:用逗號分隔的一組取值n例例10.14:求籍貫為:求籍貫為“江西南昌江西南昌”或或“吉林吉林”的學(xué)生學(xué)號、姓的學(xué)生學(xué)號、姓名和籍貫。名和籍貫。select 學(xué)生表學(xué)生表.學(xué)號學(xué)號, 學(xué)生表學(xué)生表.姓名姓名, 學(xué)生表學(xué)生表.籍貫籍貫;from 教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫!學(xué)生表學(xué)生表;where 學(xué)生表學(xué)生表.籍貫籍貫 in (吉
23、林吉林,江西南昌江西南昌)n上述上述SQL語句可以等價(jià)于如下語句可以等價(jià)于如下SQL語句。語句。select 學(xué)生表學(xué)生表.學(xué)號學(xué)號, 學(xué)生表學(xué)生表.姓名姓名, 學(xué)生表學(xué)生表.籍貫籍貫;from 教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫!學(xué)生表學(xué)生表;where 學(xué)生表學(xué)生表.籍貫籍貫 = 吉林吉林;or 學(xué)生表學(xué)生表.籍貫籍貫 = 江西南昌江西南昌二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)n2.查詢滿足條件的元組之查詢滿足條件的元組之(4)確定集合確定集合n例例10.15:求籍貫不為:求籍貫不為“江西南昌江西南昌”和和“吉林吉林”的學(xué)生學(xué)號、的學(xué)生學(xué)號、姓名和籍貫。姓名和籍貫。se
24、lect 學(xué)生表學(xué)生表.學(xué)號學(xué)號, 學(xué)生表學(xué)生表.姓名姓名, 學(xué)生表學(xué)生表.籍貫籍貫;from 教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫!學(xué)生表學(xué)生表;where 學(xué)生表學(xué)生表.籍貫籍貫 not in (吉林吉林,江西南昌江西南昌)n上述上述SQL語句可以等價(jià)于如下語句可以等價(jià)于如下SQL語句。語句。select 學(xué)生表學(xué)生表.學(xué)號學(xué)號, 學(xué)生表學(xué)生表.姓名姓名, 學(xué)生表學(xué)生表.籍貫籍貫;from 教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫!學(xué)生表學(xué)生表;where 學(xué)生表學(xué)生表.籍貫籍貫 != 吉林吉林;and 學(xué)生表學(xué)生表.籍貫籍貫 != 江西南昌江西南昌二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操
25、作)n2.查詢滿足條件的元組之查詢滿足條件的元組之(5)字符匹配字符匹配n謂詞謂詞LIKE可用來進(jìn)行字符串的匹配??捎脕磉M(jìn)行字符串的匹配。格式格式:nNOT LIKE ESCAPE n :指定匹配模板,固定字符串或含通配符的字符串:指定匹配模板,固定字符串或含通配符的字符串n當(dāng)匹配模板為固定字符串時(shí),可以用當(dāng)匹配模板為固定字符串時(shí),可以用 = = 運(yùn)算符取代運(yùn)算符取代 LIKE LIKE 謂謂詞,用詞,用 # #、!= != 或或 運(yùn)算符取代運(yùn)算符取代 NOT LIKE NOT LIKE 謂詞謂詞n通配符通配符:%(%(百分號百分號) )和和_(_(下劃線下劃線) )n% % 代表任意長度代表
26、任意長度( (長度可以為長度可以為0)0)的字符串。例如的字符串。例如a%ba%b表示以表示以a a開開頭,以頭,以b b結(jié)尾的任意長度的字符串。結(jié)尾的任意長度的字符串。n如如acbacb,addgbaddgb,abab等都滿足該匹配串等都滿足該匹配串 n代表任意單個(gè)字符。例如代表任意單個(gè)字符。例如a_ba_b表示以表示以a a開頭,以開頭,以b b結(jié)尾的長度為結(jié)尾的長度為3 3的任意字符串。如的任意字符串。如acbacb,afbafb等都滿足該匹配串等都滿足該匹配串二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)n2.查詢滿足條件的元組之查詢滿足條件的元組之(5)字符匹配字符
27、匹配例題n例例10-16:查找以姓:查找以姓“李李”開頭的學(xué)生學(xué)號和姓名。開頭的學(xué)生學(xué)號和姓名。select 學(xué)號學(xué)號,姓名姓名;from 學(xué)生表學(xué)生表;where 姓名姓名 like 李李%“n例例10-17:查找以:查找以“強(qiáng)強(qiáng)”字為最后一個(gè)字符的學(xué)生字為最后一個(gè)字符的學(xué)生學(xué)號和姓名。學(xué)號和姓名。select 學(xué)號學(xué)號,姓名姓名;from 學(xué)生表學(xué)生表;where 姓名姓名 like %強(qiáng)強(qiáng)二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)n2.查詢滿足條件的元組之查詢滿足條件的元組之(5)字符匹配字符匹配例題n例例10-18:查找第二個(gè)字符為:查找第二個(gè)字符為“永永”字的學(xué)
28、生學(xué)號字的學(xué)生學(xué)號和姓名。和姓名。select 學(xué)號學(xué)號,姓名姓名;from 學(xué)生表學(xué)生表;where 姓名姓名 like _永永%“n例例10-19:查找江西籍的男性學(xué)生的學(xué)號和姓名:查找江西籍的男性學(xué)生的學(xué)號和姓名select 學(xué)號學(xué)號,姓名姓名,性別性別,籍貫籍貫;from 學(xué)生表學(xué)生表;where 籍貫籍貫 like 江西江西%;and 性別性別 = 男男二、二、選擇表中的若干元組選擇表中的若干元組(選擇操作選擇操作)n2.查詢滿足條件的元組之查詢滿足條件的元組之(5)字符匹配字符匹配例題n例例10-20:查找吉林或遼寧籍的學(xué)生學(xué)號、姓名、性別和籍:查找吉林或遼寧籍的學(xué)生學(xué)號、姓名、性
29、別和籍貫。貫。select 學(xué)號學(xué)號,姓名姓名,性別性別,籍貫籍貫;from 學(xué)生表學(xué)生表;where 籍貫籍貫 like 吉林吉林%;or 籍貫籍貫 like 遼寧遼寧%“n例例10-21:查找非吉林和遼寧籍的學(xué)生學(xué)號、姓名、性別和:查找非吉林和遼寧籍的學(xué)生學(xué)號、姓名、性別和籍貫。籍貫。select 學(xué)號學(xué)號,姓名姓名,性別性別,籍貫籍貫;from 學(xué)生表學(xué)生表;where not (籍貫籍貫 like 吉林吉林%);and not (籍貫籍貫 like 遼寧遼寧%)二、二、選擇表中的若干元組(選擇表中的若干元組(查詢結(jié)果輸出到表查詢結(jié)果輸出到表)n2.查詢滿足條件的元組之查詢滿足條件的元組
30、之(6)查詢結(jié)果輸出到表查詢結(jié)果輸出到表nSELECT默認(rèn)輸出給用戶瀏覽默認(rèn)輸出給用戶瀏覽。SELECT同時(shí)提供同時(shí)提供INTO或或TO子句來將查詢結(jié)果輸出重定向,其格式為:子句來將查詢結(jié)果輸出重定向,其格式為:INTO | TO FILE ADDITIVE | TO PRINTERn1)INTO n表示將查詢結(jié)果保存到目標(biāo)中,表示將查詢結(jié)果保存到目標(biāo)中,目標(biāo)的形式有三種:目標(biāo)的形式有三種:nARRAY :將查詢結(jié)果存到指定的數(shù)組中。:將查詢結(jié)果存到指定的數(shù)組中。nCURSOR :將查詢結(jié)果存到一個(gè)游標(biāo)中。所謂:將查詢結(jié)果存到一個(gè)游標(biāo)中。所謂游標(biāo)是一個(gè)臨時(shí)表,不同之處在于一旦游標(biāo)關(guān)閉就被刪除。
31、游標(biāo)是一個(gè)臨時(shí)表,不同之處在于一旦游標(biāo)關(guān)閉就被刪除。nDBF | TABLE :將查詢結(jié)果存到一個(gè)表,如:將查詢結(jié)果存到一個(gè)表,如果該表已經(jīng)打開,則系統(tǒng)自動(dòng)關(guān)閉該表。如果已經(jīng)設(shè)置了果該表已經(jīng)打開,則系統(tǒng)自動(dòng)關(guān)閉該表。如果已經(jīng)設(shè)置了SET SAFETY OFF(將安全功能關(guān)閉將安全功能關(guān)閉),則重新打開它不提,則重新打開它不提示。如果沒有指定后綴,則默認(rèn)為示。如果沒有指定后綴,則默認(rèn)為.dbf。在。在SELECT命令命令執(zhí)行完后,該表為打開狀態(tài)。執(zhí)行完后,該表為打開狀態(tài)。 二、二、選擇表中的若干元組(選擇表中的若干元組(查詢結(jié)果輸出到表查詢結(jié)果輸出到表)n2.查詢滿足條件的元組之查詢滿足條件的元
32、組之(6)查詢結(jié)果輸出到表查詢結(jié)果輸出到表n2)TO FILE ADDITIVE 將查詢結(jié)果將查詢結(jié)果輸出到指定的文本文件,輸出到指定的文本文件,ADDTIVE表示將結(jié)果追加表示將結(jié)果追加到原文件后面,否則將覆蓋原有文件。到原文件后面,否則將覆蓋原有文件。n3)TO PRINTER 的功能是將查詢結(jié)果送打印機(jī)輸?shù)墓δ苁菍⒉樵兘Y(jié)果送打印機(jī)輸出。出。n例例10-22:將籍貫為:將籍貫為“吉林吉林”或或“遼寧遼寧”的學(xué)生學(xué)號、的學(xué)生學(xué)號、姓名、性別和籍貫輸出到姓名、性別和籍貫輸出到D盤的根目錄。盤的根目錄。open database “D數(shù)據(jù)庫數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫教學(xué)管理數(shù)據(jù)庫.DBC” &打開數(shù)據(jù)
33、庫打開數(shù)據(jù)庫set default to D:&設(shè)置輸出的目錄設(shè)置輸出的目錄select 學(xué)號學(xué)號,姓名姓名,性別性別,籍貫籍貫;from 學(xué)生表學(xué)生表;into dbf aa; where 籍貫籍貫 like “吉林吉林%” or 籍貫籍貫 like “遼遼寧寧%” &運(yùn)行查詢運(yùn)行查詢close all&關(guān)閉數(shù)據(jù)庫關(guān)閉數(shù)據(jù)庫use D:aa.dbf&打開數(shù)據(jù)庫打開數(shù)據(jù)庫aa.dbfbrowse&瀏覽查詢結(jié)果瀏覽查詢結(jié)果三、對查詢結(jié)果排序三、對查詢結(jié)果排序n使用使用ORDER BY子句子句n可以按一個(gè)或多個(gè)屬性列排序可以按一個(gè)或多個(gè)屬性列排序n升序:升序:ASC;降序:;降序:DESC;缺省值
34、為升序;缺省值為升序n當(dāng)排序列含空值時(shí)當(dāng)排序列含空值時(shí)nASC:排序列為空值的元組最后顯示:排序列為空值的元組最后顯示nDESC:排序列為空值的元組最先顯示:排序列為空值的元組最先顯示 三、對查詢結(jié)果排序三、對查詢結(jié)果排序舉例舉例n例例10-23:查詢所有學(xué)生的入學(xué)成績,查詢結(jié):查詢所有學(xué)生的入學(xué)成績,查詢結(jié)果按入學(xué)成績的降序排列。果按入學(xué)成績的降序排列。nselect 學(xué)號學(xué)號,姓名姓名,入學(xué)成績?nèi)雽W(xué)成績;nfrom 學(xué)生表學(xué)生表;norder by 入學(xué)成績?nèi)雽W(xué)成績 descn例例10-24:查詢所有學(xué)生的入學(xué)成績,查詢結(jié):查詢所有學(xué)生的入學(xué)成績,查詢結(jié)果按入學(xué)成績的升序排列。果按入學(xué)成績
35、的升序排列。n select 學(xué)號學(xué)號,姓名姓名,入學(xué)成績?nèi)雽W(xué)成績;nfrom 學(xué)生表學(xué)生表;norder by 入學(xué)成績?nèi)雽W(xué)成績?nèi)Σ樵兘Y(jié)果排序三、對查詢結(jié)果排序舉例舉例n例例10-25:按入學(xué)成績排降序和出生日期排降:按入學(xué)成績排降序和出生日期排降序輸出學(xué)號、姓名、入學(xué)成績和出生日期。序輸出學(xué)號、姓名、入學(xué)成績和出生日期。select 學(xué)號學(xué)號,姓名姓名,入學(xué)成績?nèi)雽W(xué)成績,出生日期出生日期;from 學(xué)生表學(xué)生表;order by 入學(xué)成績?nèi)雽W(xué)成績 desc, 出生日期出生日期 desc四、使用聚集函數(shù)四、使用聚集函數(shù)n聚集函數(shù):指作用在一個(gè)集合上的函數(shù),如聚集函數(shù):指作用在一個(gè)集合上的
36、函數(shù),如求和函數(shù)求和函數(shù)sum、求平均值、求平均值avg函數(shù)函數(shù) nSQL中的聚集函數(shù)中的聚集函數(shù) 函數(shù)函數(shù)含義含義AVG(DISTINCT|ALL )計(jì)算一列值的平均值計(jì)算一列值的平均值(此列必須是數(shù)值此列必須是數(shù)值型型)COUNT(DISTINCT|ALL *)統(tǒng)計(jì)元組個(gè)數(shù)統(tǒng)計(jì)元組個(gè)數(shù)COUNT(DISTINCT|ALL )統(tǒng)計(jì)一列中值的個(gè)數(shù)統(tǒng)計(jì)一列中值的個(gè)數(shù)MIN(DISTINCT|ALL )求一列值中的最小值求一列值中的最小值MAX(DISTINCT|ALL )求一列值中的最大值求一列值中的最大值SUM(DISTINCT|ALL )計(jì)算一列值的總和計(jì)算一列值的總和(此列必須是數(shù)值型此列
37、必須是數(shù)值型)四、使用聚集函數(shù)四、使用聚集函數(shù)例題例題n例例10-26:求學(xué)生表中入學(xué)成績在:求學(xué)生表中入學(xué)成績在600分以上分以上的人數(shù)。的人數(shù)。select count(*);from 學(xué)生表學(xué)生表;where 入學(xué)成績?nèi)雽W(xué)成績 = 600n例例10-27:求學(xué)生表中入學(xué)成績的平均成績:求學(xué)生表中入學(xué)成績的平均成績select avg(入學(xué)成績?nèi)雽W(xué)成績);from 學(xué)生表學(xué)生表五、對查詢結(jié)果分組五、對查詢結(jié)果分組 n使用使用GROUP BY子句分組子句分組 n細(xì)化集函數(shù)的作用對象細(xì)化集函數(shù)的作用對象n未對查詢結(jié)果分組,集函數(shù)將作用于整個(gè)查詢結(jié)果未對查詢結(jié)果分組,集函數(shù)將作用于整個(gè)查詢結(jié)果n
38、對查詢結(jié)果分組后,集函數(shù)將分別作用于每個(gè)組對查詢結(jié)果分組后,集函數(shù)將分別作用于每個(gè)組 課程號課程號課程名課程名開課學(xué)期開課學(xué)期課程類別號課程類別號課時(shí)數(shù)課時(shí)數(shù)學(xué)分學(xué)分A0101鄧小平理論鄧小平理論101322B1001計(jì)算機(jī)應(yīng)用計(jì)算機(jī)應(yīng)用基礎(chǔ)基礎(chǔ)202644C3004微機(jī)操作微機(jī)操作202322n例例10-28:按課程類別號,求各種類別課程的門數(shù):按課程類別號,求各種類別課程的門數(shù) select 課程類別號課程類別號,count(*);from 課程表課程表;group by 課程類別號課程類別號 課程類別號課程類別號Cnt011022五、對查詢結(jié)果分組五、對查詢結(jié)果分組 n例例10-29:求
39、各個(gè)年級的班數(shù):求各個(gè)年級的班數(shù) select 年級年級,count(*);from 班級表班級表;group by 年級年級班級號班級號專業(yè)名稱專業(yè)名稱年級年級 班主任姓名班主任姓名所在學(xué)院所在學(xué)院班級人數(shù)班級人數(shù)ICS0301 計(jì)算機(jī)科學(xué)技術(shù)計(jì)算機(jī)科學(xué)技術(shù)200301班班2003李一梅李一梅信息管理學(xué)信息管理學(xué)0ICS0302 計(jì)算機(jī)科學(xué)技術(shù)計(jì)算機(jī)科學(xué)技術(shù)200302班班2003張華張華信息管理學(xué)信息管理學(xué)0CPA0401注冊會計(jì)師注冊會計(jì)師200401班班2004王平王平會計(jì)學(xué)院會計(jì)學(xué)院0CPA0402注冊會計(jì)師注冊會計(jì)師200402班班2004馬曉明馬曉明會計(jì)學(xué)院會計(jì)學(xué)院0CPA0403注冊會計(jì)師注冊會計(jì)師200403班班2004 會計(jì)學(xué)院會計(jì)學(xué)院0年級年級Cnt2003220043五、對查詢結(jié)果分組五、對查詢結(jié)果分組nGROUP BY子句的用法子句的用法nGROUP BY子句的作用對象是查詢的中間結(jié)果表子句的作用對象是查詢的中間結(jié)果表n分組方法:按指定的一列或多列值分組,值相分組方法:按指定的一列或多列值分組,值相等的為一組等的為一組n使用使用GROUP BY子句后,子句后,SELECT子句的列名子句的列名列表中只能出現(xiàn)分組屬性和聚集函數(shù)列表中只能出現(xiàn)分組屬性和聚集函數(shù)
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。