『数据库系统概论』学习笔记之四 |
第三章 關係數據庫標准語言SQL |
引言:
因此章內容太多,故分成兩篇記之。閱讀前一部分請點擊這裡。 |
3.3 查詢
數據庫查詢是數據庫的核心操作。動詞:Select。Select的定義很繁雜,略過不記,只需記住主體語句就可。Select語句相當於關係運算中的投影運算,但投影運算會去掉重復元組,而在SQL中要去掉重復元組須在Select語句後指定Distinct方可。 SQL表达式的基本结构由select子句、from子句和where子句构成,其中where子句可以省略,如下所示:
Select A1, A2, …, An 对应投影,列出要显示的属性 From r1, r2, …, rm 对应笛卡尔积,对关系进行扫描 Where P 对应谓词,指出查询条件 常用的查詢條件
比較:=、>、<、>=、<=、!=、!>、!<、Not +上述比較運算符 確定范圍:Between ? And ?、Not Between ? And ? 確定集合:In、Not In 字符匹配:Like、Not Like 空值:Is Null、Is Not Null 多重條件:And、Or 一、單表查詢 單表查詢比較簡單,比如: --從Employees表中找出所有年齡在20到30歲之間的“蜀”部門的職員姓名和年齡:
Select Ename,Eage from Employees where Edept='蜀' and Eage between 20 and 30;
--查詢程序名稱以“fm_”開頭,倒數第三個字符是“9”的所有子程序的詳細情況:
select * from Programs where Pname like 'fm\_%i__' ESCAPE '\' /*說明: ESCAPE 'escape_character' 允許萬用字元在字元字串中進行搜尋,而不是用來做為萬用字元,escape_character 是置於萬用字元前方的字元,用以代表這項特殊用途。 */
--查詢各個子程序號及相應被賦予權限的人數
select Pid,count(Pid) from Authority Group by pid --查詢被賦予了三個以上權限的職員代號 select Eid from Authority Group by Eid Having count(*)>3
--查詢所有職員的權限分配情況
select E.*,A.Pid from Employees E,Authority A where E.Eid=A.Eid(*) --以上語句是標准SQL語法,Transact-SQL語法為: select E.*,A.Pid from Employees E left join Authority A ON E.Eid=A.Eid
--查詢與劉備有相同權限的人員姓名
select E.Ename from Employees E where Eid in ( select Eid from Authority A where Pid In( select Pid from authority B where Eid = ( select Eid from Employees where Ename='劉務' ))) --查詢部門為“蜀”和“吳”以外的人員資料 select * from Employees where Edept not in ("蜀", "吳")
--查詢平均年齡最大的部門名稱
select Edept from Employees Group by Edept Having avg(Eage)>=all (select avg(Eage) from Employees Group by Edept)
--查詢賦予了代號為frmsys990子程序權限的人員姓名:
select Ename from Employees E where exists ( select * from Authority A where A.Eid=E.Eid and pid='frmsys990')
--查詢部門“蜀”的職員資料及查詢年齡大於30歲的職員資料
select * from Employees where Edept='蜀' Union select * from Employees Where Eage>30 --等價於 select * from Employees where Edept='蜀' and Eage>30
--建立部門為“蜀”的職員資料視圖
Create View V_Employees As select Eid,Ename,Eage from Employees where Edept='蜀' --刪除上面建立的視圖 Drop View V_Employees
--在視圖中查詢年齡在30歲以上的職員姓名
select Ename from V_Employees where Eage>30
|
未完待續。。。
版權聲明:此為原創,轉載請注明出處:www.cnblogs.com Bonny.wong(讓思想飛翔) 2005.2.25 |