非常不錯的SQL語句學(xué)習(xí)手冊實(shí)例版
更新時間:2007年03月25日 00:00:00 作者:
例 26 找出籍貫為山西或河北,成績?yōu)?nbsp;90 分以上的學(xué)生的姓名、籍貫和成績。(當(dāng)構(gòu)造多表連接查詢命令時,必須遵循兩條規(guī)則。第一,連接條件數(shù)正好比表數(shù)少 1 (若有三個表,就有兩個連接條件 ) ;第二,若一個表中的主關(guān)鍵字是由多個列組成,則對此主關(guān)鍵字中的每一個列都要有一個連接條件(也有少數(shù)例外情況))
Select SNAME, BPLACE, GRADE FROM STUDENTS, ENROLLS
Where BPLACE IN (‘ 山西 ' , ‘ 河北 ') AND GRADE >= 90 AND STUDENTS.SNO=ENROLLS.SNO
例 28 查出課程成績在 80 分以上的女學(xué)生的姓名、課程名和成績。( FROM 子句中的子查詢)
Select SNAME,CNAME, GRADE FROM (Select SNAME, CNAME , GRADE
FROM STUDENTS, ENROLLS,COURSES Where SEX = ' 女 ')
AS TEMP (SNAME, CNAME,GRADE) Where GRADE > 80
表達(dá)式與函數(shù)的使用
例 29 查詢各課程的學(xué)時數(shù)。(算術(shù)表達(dá)式由算術(shù)運(yùn)算符+、-、 * 、/與列名或數(shù)值常量所組成。)
Select CNAME,COURSE_TIME = CREDIT*16 FROM COURSES
例 30 找出教師的最小年齡。(內(nèi)部函數(shù): SQL 標(biāo)準(zhǔn)中只使用 COUNT 、 SUM 、 AVG 、 MAX 、 MIN 函數(shù),稱之為聚集函數(shù)( Set Function )。 COUNT 函數(shù)的結(jié)果是該列統(tǒng)計(jì)值的總數(shù)目, SUM 函數(shù)求該列統(tǒng)計(jì)值之和, AVG 函數(shù)求該列統(tǒng)計(jì)值之平均值, MAX 函數(shù)求該列最大值, MIN 函數(shù)求該列最小值。)
Select MIN(AGE) FROM TEACHERS
例 31 統(tǒng)計(jì)年齡小于等于 22 歲的學(xué)生人數(shù)。(統(tǒng)計(jì))
Select COUNT(*) FROM STUDENTS Where AGE < = 22
例 32 找出學(xué)生的平均成績和所學(xué)課程門數(shù)。
Select SNO, AVG(GRADE), COURSES = COUNT(*) FROM ENROLLS GROUP BY SNO
例 34 找出年齡超過平均年齡的學(xué)生姓名。
Select SNAME FROM STUDENTS
Where AGE > (Select AVG(AGE) FROM STUDENTS)
例 35 找出各課程的平均成績,按課程號分組,且只選擇學(xué)生超過 3 人的課程的成績。( GROUP BY 與 HAVING
GROUP BY 子句把一個表按某一指定列(或一些列)上的值相等的原則分組,然后再對每組數(shù)據(jù)進(jìn)行規(guī)定的操作。
GROUP BY 子句總是跟在 Where 子句后面,當(dāng) Where 子句缺省時,它跟在 FROM 子句后面。
HAVING 子句常用于在計(jì)算出聚集之后對行的查詢進(jìn)行控制。)
Select CNO, AVG(GRADE), STUDENTS = COUNT(*) FROM ENROLLS
GROUP BY CNO HAVING COUNT(*) >= 3
相關(guān)子查詢
例 37 查詢沒有選任何課程的學(xué)生的學(xué)號和姓名。(當(dāng)一個子查詢涉及到一個來自外部查詢的列時,稱為相關(guān)子查詢( Correlated Subquery) 。相關(guān)子查詢要用到存在測試謂詞 EXISTS 和 NOT EXISTS ,以及 ALL 、 ANY ( SOME )等。)
Select SNO, SNAME FROM STUDENTS Where NOT EXISTS
(Select * FROM ENROLLS Where ENROLLS.SNO=STUDENTS.SNO)
例 38 查詢哪些課程只有男生選讀。
Select DISTINCT CNAME FROM COURSES C
Where ' 男 ' = ALL
(Select SEX FROM ENROLLS , STUDENTS Where ENROLLS.SNO=STUDENTS.SNO AND ENROLLS.CNO=C.CNO)
例 39 要求給出一張學(xué)生、籍貫列表,該表中的學(xué)生的籍貫省份,也是其他一些學(xué)生的籍貫省份。
Select SNAME, BPLACE FROM STUDENTS A Where EXISTS
(Select * FROM STUDENTS B Where A.BPLACE=B.BPLACE AND A.SNO < > B.SNO)
例 40 找出選修了全部課程的學(xué)生的姓名。本查詢可以改為:查詢這樣一些學(xué)生,沒有一門課程是他不選修的。
Select SNAME FROM STUDENTS Where NOT EXISTS
(Select * FROM COURSES Where NOT EXISTS
(Select * FROM ENROLLS Where ENROLLS.SNO = STUDENTS.SNO AND ENROLLS.CNO=
關(guān)系代數(shù)運(yùn)算
例 41 設(shè)有某商場工作人員的兩張表:營業(yè)員表 SP_SUBORD 和營銷經(jīng)理表 SP_MGR ,其關(guān)系數(shù)據(jù)模式如下:
SP_SUBORD (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
SP_MGR (SALPERS_ID, SALPERS_NAME, MANAGER_ID, OFFICE)
其中,屬性 SALPERS_ID 為工作人員的編號 , SALPERS_NAME 為工作人員的姓名 , MANAGER_ID 為所在部門經(jīng)理的編號 , OFFICE 為工作地點(diǎn)。
若查詢?nèi)可虉龉ぷ魅藛T,可以用下面的 SQL 語句:
(Select * FROM SP_SUBORD) UNION (Select * FROM SP_MGR)
或等價地用下面的 SQL 語句:
Select * FROM (TABLE SP_SUBORD UNION TABLE SP_MGR)
(2) INTERSECT (Select * FROM SP_SUBORD)
INTERSECT (Select * FROM SP_MGR)
或等價地用下面的 SQL 語句:
Select * FROM (TABLE SP_SUBORD INTERSECT TABLE SP_MGR)
或用帶 ALL 的 SQL 語句:
(Select * FROM SP_SUBORD) INTERSECT ALL (Select * FROM SP_MGR)
或
Select * FROM (TABLE SP_SUBORD INTERSECT ALL TABLE SP_MGR)
(3) EXCEPT (Select * FROM SP_MGR)
EXCEPT (Select * FROM SP_SUBORD)
或等價地用下面的 SQL 語句:
Select * FROM (TABLE SP_MGR EXCEPT TABLE SP_ SUBORD)
或用帶 ALL 的 SQL 語句:
(Select * FROM SP_MGR) EXCEPT ALL (Select * FROM SP_SUBORD)
例 42 查詢籍貫為四川、課程成績在 80 分以上的學(xué)生信息及其成績。(自然連接)
(Select * FROM STUDENTS Where BPLACE=‘ 四川 ') NATURAL JOIN
(Select * FROM ENROLLS Where GRADE >=80)
例3.43 列出全部教師的姓名及其任課的課程號、班級。(外連接與外部并外連接允許在結(jié)果表中保留非匹配元組,空缺部分填以 NULL 。外連接的作用是在做連接操作時避免丟失信息。
外連接有 3 類:
(1)左外連接( Left Outer Join )。連接運(yùn)算謂詞為 LEFT [OUTER] JOIN ,其結(jié)果表中保留左關(guān)系的所有元組。
(2)右外連接( Right Outer Join )。連接運(yùn)算謂詞為 RIGHT [OUTER] JOIN ,其結(jié)果表中保留右關(guān)系的所有元組。
(3)全外連接( Full Outer Join )。連接運(yùn)算謂詞為 FULL [OUTER] JOIN ,其結(jié)果表中保留左右兩關(guān)系的所有元組。)
Select TNAME, CNO, CLASS FROM TEACHERS LEFT OUTER JOIN TEACHING USING (TNO)
SQL 的數(shù)據(jù)操縱
例 44 把教師李映雪的記錄加入到教師表 TEACHERS 中。(插入)
Insert INTO TEACHERS VALUES(1476 , ' 李映雪 ' , 44 , ' 副教授 ')
例 45 成績優(yōu)秀的學(xué)生將留下當(dāng)教師。
Insert INTO TEACHERS (TNO , TNAME) Select DISTINCT SNO , SNAME
FROM STUDENTS , ENROLLS
Where STUDENTS.SNO = ENROLLS.SNO AND GRADE >= 90
例 47 把所有學(xué)生的年齡增加一歲。(修改)
Update STUDENTS SET AGE = AGE+1
例 48 學(xué)生張春明在數(shù)據(jù)庫課考試中作弊,該課成績應(yīng)作零分計(jì)。
Update ENROLLS SET GRADE = 0 Where CNO = 'C1' AND
' 張春明 ' = (Select SNAME FROM STUDENTS Where STUDENTS.SNO=ENROLLS.SNO)
例 49 從教師表中刪除年齡已到 60 歲的退休教師的數(shù)據(jù)。(刪除)
Delete FROM TEACHERS Where AGE >= 60
SQL 的數(shù)據(jù)控制
例 50 授予 LILI 有對表 STUDENTS 的查詢權(quán)。(表/視圖特權(quán)的授予 一個 SQL 特權(quán)允許一個被授權(quán)者在給定的數(shù)據(jù)庫對象上進(jìn)行特定的操作。授權(quán)操作的數(shù)據(jù)庫對象包括:表 / 視圖、列、域等。授權(quán)的操作包括: Insert 、 Update 、 Delete 、 Select 、 REFERENCES 、 TRIGGER 、 UNDER 、 USAGE 、 EXECUTE 等。其中 Insert 、 Update 、 Delete 、 Select 、 REFERENCES 、 TRIGGER 有對表做相應(yīng)操作的權(quán)限,故稱為表特權(quán)。)
GRANT Select ON STUDENTS TO LILI WITH GRANT OPTION
例 51 取消 LILI 的存取 STUDENTS 表的特權(quán)。
REVOKE ALL ON STUDENTS FROM LILI CASCADE
相關(guān)文章
sql server利用不同語種語言顯示報(bào)錯錯誤消息的方法示例
這篇文章主要給大家介紹了關(guān)于sql server利用不同語種語言顯示報(bào)錯錯誤消息的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用sql server具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05SQLSERVER中得到執(zhí)行計(jì)劃的兩種方式
得到執(zhí)行計(jì)劃的方式有兩種:一種是在指令的前面打開一些開關(guān),讓執(zhí)行計(jì)劃信息打在結(jié)果集里,這種方法比較適合在一個測試環(huán)境里對單個語句調(diào)優(yōu);另一種方法是使用SQL Trace里的事件跟蹤來跟蹤語句的執(zhí)行計(jì)劃,感興趣的朋友可以了解下2013-01-01SQL Server中使用Linkserver連接Oracle的方法
SQL Server提供了Linkserver來連接不同數(shù)據(jù)庫上的同構(gòu)或異構(gòu)數(shù)據(jù)源。下面以圖示介紹一下連接Oracle的方式2012-07-07用sql腳本創(chuàng)建sqlserver數(shù)據(jù)庫范例語句
創(chuàng)建sqlserver數(shù)據(jù)庫腳本 范例 ,主要是熟悉下用sql語句創(chuàng)建數(shù)據(jù)庫的代碼。2010-09-09BCP 大容量數(shù)據(jù)導(dǎo)入導(dǎo)出工具使用步驟
bcp工具的參數(shù)幫忙請查看聯(lián)機(jī)叢書.2010-05-05SQL對冗余數(shù)據(jù)的刪除重復(fù)記錄只保留單條的說明
本文講一下數(shù)據(jù)庫中通常存在一些冗余數(shù)據(jù),如重復(fù)記錄就是一種,那這樣的記錄如何刪除呢?2010-03-03Sql學(xué)習(xí)第三天——SQL 關(guān)于with ties介紹
with ties一般是和Top , order by相結(jié)合使用的,會查詢出最后一條數(shù)據(jù)額外的返回值,接下來將為大家詳細(xì)介紹下,感興趣的各位可以參考下哈2013-03-03