當前位置:首頁 » 編程語言 » sql第五章上機練習題
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql第五章上機練習題

發布時間: 2023-03-11 06:33:29

sql資料庫練習題

1.DISTINCT、top
2.convert
3.查詢、更新、管理
4.主鍵、外鍵
5.ROLLBACK TRAN、COMMIT TRAN
6.sp_renamedb
8.identity
9.插入數據的列數必須和表中列數相等
10.空
12.truncate
14.原子性、一致性、隔離性、永久性
16.count、avg、len、substring
17.cast
18.windows
19.物理數據表
20.<>、!=

Ⅱ SQL數據查詢練習

--1.1創建新表 score
create table score
(
[學號] varchar(10)
,[課程號] varchar(10)
,[成績] float
)
--1.2插入新表的值
insert into score values(103,'3-245',86)
insert into score values(105,'3-245',75)
insert into score values(109,'3-245',68)
insert into score values(103,'3-105',92)
insert into score values(105,'3-105',88)
insert into score values(109,'3-105',76)
insert into score values(101,'3-105',64)
insert into score values(101,'3-105',64)
insert into score values(101,'6-166',85)
insert into score values(107,'6-166',79)
insert into score values(108,'6-166',81)

--1.3 按排列順序查看創建的表的內容
select* from score order by [課程號] asc,[成績] desc --這樣查看不舒服,可以修改下,如下面這句:
select [課程號],[成績],[學號] from score order by [課程號] asc,[成績] desc

--1.4
select y=sum([成績]) --查找3-105 的分數之和,問題6-166的總分也是這個道理
, x=count([課程號]) from score where [課程號]='3-105'--查找3-105的課程個數
--計算平均分
select [3-105平均分]=y/x from(select y=sum([成績])
, x=count([課程號]) from score where [課程號]='3-105')t

--1.5 查詢成績為定值的記錄
select * from score where [成績]='85' or [成績]='86' or [成績]='88'
--這里用and 的話沒法查出內容,
--1.6 成績在多少到多少的記錄
select * from score where [成績] between 60 and 79 order by [成績] desc

--1.7查詢每個學生的最高分
select * from score where [成績] in(select max([成績]) from score group by [學號])
--1.8課程最高分
select * from score where [成績] in(select max([成績]) from score group by [課程號])
--各門課程最高分大於90的就是在上面的內容上增加一個where 條件,自己嘗試下
select * from(select * from score where [成績] in(select max([成績]) from score group by [課程號]))t
where [成績]>=90
--注意資料庫別名的用法't'
--1.9弟九個問題跳過,扯蛋的問題
--2.0課程次數及排序
select [課程號],[課程次數]=count([課程號]) from score group by [課程號] order by 課程次數 desc
--注意資料庫自定義欄位的使用
--升序 asc ,降序 desc

--2.1最後一個問題你自己考慮考慮,方法基本都在前面幾個問題裡面可以找到。

Ⅲ 誰有《電子商務資料庫技術》的復習資料和練習題啊

第一章
1.電子商務是發生在開放網路上包含企業之間、企業和消費者之間的商業交易(狹義)。廣義的定義除電子交易外,還包括利用計算機網路技術進行的全部商業活動。
2.電子商務的類型:1企業經營2網上銀行3網上商店和網上購物4網路服務5其他,有關認證,海關稅務等部門。
3.電子商務的基本框架:社會環境(公共政策、法律、規則等)、自然科技環境(文檔、安全、網路協議的技術標准)和電子商務技術內容構成了電子商務應用平台的三個支柱。
4.基礎通信網路是電子商務的硬體基礎設施,承擔著電子商務傳輸的任務。資料庫承擔著對商品信息的存貯、管理、查詢、結算和處理等功能。
5.Web與資料庫的集成有三種形式:運用Web發布數據,運用Web共享數據,用資料庫驅動Web站點。
6.數據倉庫是指大量散布在網路資料庫中的數據進行組織,使之能形成一個可被檢索、搜索、分析和報告的商業信息清單。
7.數據挖掘是指對龐大的歷史交易數據進行再分析,以選定目標客戶分辨市場定位發現新的商業機會。
8.企業建立電子商務網站的步驟:1選自ISP和ICP2注冊域名和選側接入方式3網頁設計製作4創建和維護資料庫5整合資料庫和網站6在Web上使用資料庫。
9.資料庫驅動Web站點的核心是網路資料庫軟體。
10.資料庫軟體的類型:桌面型,中小型面向對象型,大型分布型,數據倉庫型。(包含的種類)
11.電子商務Web站點資料庫的特徵:1對電子商務運營各個方面確保數據安全2對電子商務交易過程管理3對客戶確認已經完成,但由於硬體軟體故障而未能執行的交易可以彌補。
12.創建網路資料庫的調件:1要符合企業電子商務的需要2能被某個資料庫管理系統接受3具有較高的質量,便於維護,理解,效率高。
腳本語言用途:1可以處理用戶在表單中輸入的數據,編輯,復制他們到隱含域2可以增強界面效果3可以控製表單的提交合生成復雜的URL地址。

第二章資料庫系統概論
1.資料庫管理的三個階段:人工管理階段,文件系統階段,資料庫系統階段。
2.按照模型發展劃分:1第一代資料庫管理系統,層次資料庫和網狀資料庫管理系統2第二代資料庫管理系統,關系資料庫管理系統(RDMS)3第三代資料庫管理系統,新一代,面向對象資料庫管理系統。
3.數據模型是資料庫系統的數學形式框架,是用來描述數據的一組該念和定義包括:數據的靜態特徵,數據的動態特徵,數據的完整約束性。大體可分兩類:面向值得數據模型和面向對象的數據模型。
4.在實際應用中,為了更好的描述現實世界中數據的特徵,常常針對不同的場合或不同的目的,採用不同的方法描述數據特徵,統稱為數據模型。有如下幾種:1概念數據模型,這是面向資料庫用戶的相士世界的數據模型,與具體的DBMS無關2邏輯數據模型,這是用戶從資料庫中所看到的數據模型,是具體的DBMS所支持的數據模型,既要面向用戶又要面向系統3物理數據模型,描述數據在存儲介質山的組織方式的數據模型,不僅與DBMS有關還和操作系統和硬體有關。
5.現實世界:是指存在於人腦之外的客觀世界。
6.概念世界:是現實世界在人們腦中的反映,是對客觀事物及其聯系的一種抽象描述。
7.實體:我們把客觀存在並可以相互區別的事物稱為實體。同一類實體的集合稱為實體集。屬性的集合表徵一種實體的類型,稱為實體型。
8.屬性:屬性是用來描述實體的某一方面的特性。屬性的具體取值為屬性值。
9.實體標志符:如果某個屬性或屬性集合的值能夠唯一的標志出實體集中的每一個實體,則可以選擇該屬性或屬性集合作為實體標志符。
10.聯系:實體集之間的對應關系稱為聯系,它反映現實世界的事物之間的相互關系。分實體內部各屬性之間的聯系和實體之間的聯系。
機器世界:信息經過加工編碼而進入機器世界,機器世界處理的對象是數據。
記錄:相對應每一實體的數據叫記錄。
欄位:相對應屬性的數據稱為欄位,或者數據項,又叫數據元素或初等項。
文件:相對應實體集的叫文件,它是同類記錄的集合。
記錄型:相對應於實體型的叫記錄型。
關鍵字:相應於實體標志符的為關鍵字,關鍵字又稱外碼。
11.E-R模型:E-R圖所描述的現實世界的信息結構稱為組織模式或企業模式,同時把這種描述結果稱為E-R模型。三要素:實體,屬性,實體之間的聯系。
12.聯系抽象後可歸結為三種:一對一聯系,一對多聯系,多對多聯系。
13.作實體-聯系圖(E-R圖)的步驟:1確定所有的實體集合2選擇實體集應包含的屬性3確定實體集之間的聯系4確定實體集的關鍵字,用下劃線在屬性上表明關鍵字的屬性集合5確定聯系的類型,在用線將表示聯系的菱形框聯繫到實體集時,在線旁邊註明是1或n來表示聯系的類型。
14.層次數據模型就是根據現實世界中存在的層次結構特點而提出的一種數據模型。用樹型結構來表示實體之間聯系的模型稱為層次模型。
15層次模型只能表示一對多關系,引入虛擬記錄型和指針轉換多對多關系。
16.網狀模型:用邏輯記錄型來代替實體型。邏輯記錄所包括的所有欄位的名字及其類型描述了邏輯記錄格式,這樣一邏輯記錄型為節點所形成的有向網路結構稱為網狀模型。網狀模型中給每一個父結點及子節點之間的聯系都指定名字,這種聯系稱為系。
17.關系模型:關系模型是同過表格數據來表示和實現兩個實體之間的聯系。關系就是二維表格,表格中的每一行稱作一個元組,它相當於一個記錄值;每一列是一個屬性值,列可以命名,稱為屬性名,屬性相當於記錄中的數據項或欄位值。關系是元組的集合。
18.關系有如下屬性:表格中的每一列都是不可再分的基本屬性;各列的名字不同,順序不重要;行的次序無關緊要;關系中部不允許有完全相同的兩行存在。.
19.域:域是值的有限集合。關系:笛卡爾積d1*d2*…dn 的任意一個子集稱為在d1,d2…dn上的一個關系。用R(d1,d2,…dn)表示,R為關系名。n為關系的度或目。
20.關系模式:我們將關系名及其屬性名集合稱為關系模式,具體的關系是實例。
21.資料庫模式;在支持關系模型的數據中,數據被看作是一個個的關系,描述資料庫全部關系的一組關系模式稱為關系的資料庫模式。任何時刻資料庫的所有具體的關系組成關系資料庫的一個實例。
22.關系運算:選擇σF(R) 投影ПAR 連接RfS
23.資料庫系統由五個部分組成:硬體資源(CPU,內存,磁碟),軟體資源(操作系統,資料庫管理系統,高級編程語言),資料庫結構,資料庫管理員和用戶。
24.資料庫管理系統的三級模式結構:用戶級資料庫,概念幾資料庫,物理級資料庫。
25.用戶資料庫是用戶看到使用的資料庫,所以又稱用戶視圖,子模式,外模式,用戶模式等。
26.概念級資料庫是DBA(資料庫管理員)看到的資料庫,因此也稱DBA視圖,又稱為模式。
27.物理級資料庫又稱為存儲模式,內模式,是資料庫管理系統內部的表示,即對數據的物理結構和方式的描述。
28.為了保證資料庫能夠高效正常的運行,一般大型資料庫都設有專門人員負責資料庫管理系統的管理工作,這種專門的人員成為資料庫管理人員(DBA)。主要職責:1負責資料庫核心及其開發工具的安裝及升級2為資料庫管理系統分配存儲空間並規劃未來的存儲要求3協助開發者建立基本的對象(表、視圖、索引)4負責注冊用戶並維護系統的安全性5負責資料庫管理系統的備份和恢復。
29.資料庫管理系統用戶分:最終用戶和專業用戶即應用程序員。
30.資料庫管理系統是對資料庫定義、管理、維護和檢索的一組軟體。其功能如下:1存儲數據2創建並維護數據結構3允許多用戶並發訪問4加強安全性和保密性5允許提取和操作已存儲的數據6實現數據錄入和數據載入7提供不同記錄的一致性8提供對指定數據快速提取的高效索引機制。
31.資料庫管理系統必須提供數據的安全性、並發性、完整性、數據備份、數據恢復等數據保護能力以保證資料庫中數據的安全可靠和正確性。為此需要建立資料庫保護機制,用於以阻止一切物理破壞和讀寫破壞,並能以最快的速度使其恢復工作。
32.資料庫的安全性主要是指保護資料庫,防止因用戶非法使用資料庫造成數據泄密、更改或破壞。保證安全性關鍵是控制和識別。
33.用戶操作資料庫中的數據至少三層安全防線:1操作系統的安全保護機制2資料庫管理系統的安全保護機制3資料庫中的安全防護機制a用戶標示和鑒定b存取控制c視圖d數據加密e資料庫審計。
34.資料庫的完整約束性是指數據的正確性、相容性和一致性,即防止不符合語義的錯誤數據輸入和輸出,同時還要使存儲在不同副本中的同一數據保持一致協調,使數據之間的結構不受破壞。
35.數據完整約束條件分類:1屬性值的約束和聯系的約束a屬性值的約束是對一個列的取值的說明b關於數據之間的聯系約束,在關系資料庫中指多個屬性或多個元組之間的聯系的約束2靜態約束和動態約束3立即執行約束和延遲執行約束。
36.完整性約束方法分兩類:隱含約束方法和顯式約束方法(a採用斷言說明句b採用CHECK子句或constraint 子句c採用資料庫觸發器d將完整性約束的說明和檢查任務交給應用程序)。
37.並發控制的基本單位是事務。
38.並發控制所帶來的數據不一致分三類:丟失數據,不可重讀數據和讀「臟」數據。
39.並發控制的基本思想:當一個應用程序對資料庫的某一部分執行修改操作時,對該部分數據實行封鎖,拒絕其他用戶對該部分的並發訪問控制要求,直到該事務執行完畢(正常結束或撤銷)。
40.並發控制的策略包括:封鎖單位大小的確定、死鎖的預防、檢測和解除。
41.分布式資料庫系統是在兩台或多台地理上或物理上分散而邏輯上集中的資料庫系統,管理這樣的資料庫系統的軟體稱為分布式資料庫管理系統(DDBMS)。
42.面向對象(OO)數據模型比傳統模型優勢:1具有表示和構造復雜對象的能力2通過封裝和消息隱藏技術提供了程序的模塊化機制3繼承和類層次技術不僅能表示is-a,還提供了軟體重用機制4通過滯後聯編等概念提供系統擴充能力5提供與宿主語言的無縫連接。
43.能夠管理數值、文件、表格、圖形、圖像、聲音等多媒體的資料庫稱為多媒體資料庫(MDB)。
44.管理應用方式:1基於關系模型,加以擴充,使之支持多媒體資料庫類型2基於OO模型來實現對多媒體信息的描述和操作3基於超文本模型。
45.多媒體資料庫的特殊功能:1支持圖像、聲音、動畫等多媒體欄位和用戶自定義欄位2支持長數據和非長數據的集成管理3支持復雜的實體表示4有保證完整性和一致性機制5支持同一實體多種表現形式6具有良好的用戶界面7至此多媒體的特殊查詢和良好的介面處理8支持分布式環境。
46.多媒體資料庫關鍵技術:1數據模型技術2數據存儲管理和壓縮解壓技術3多媒體再現和良好的用戶界面技術4多媒體信息檢索和查詢及其他處理技術5分布式環境與並行處理技術。

第三章資料庫設計基礎
1.資料庫設計的基本問題是如何建立一個良好的資料庫模式,亦即給出一組數據,如何構造一個合適於他們的數據模式,無論是存儲還是操縱反面都有較好的性能。
2.關系資料庫設計理論主要包括:函數依賴、範式和模式設計方法。
資料庫問題:數據冗餘、更新異常、插入異常、刪除異常。
3.規范化的目的:1把關系中的每一個數據項轉換成一個不可再分的基本項2消除冗餘,並使關系的檢索簡化3消除數據在插入、修改、刪除時的異常情況4關系模型靈活,易於使用非過程化的高級查詢語言進行查詢。
4.函數依賴:設R(A1A2A)是關系U={A1A2A}是R的所有屬性集合,X、Y、Z分別是R的屬性子集
1若對於R中的X的任何一個具體值,Y僅有唯一的具體值與之相對應,則稱R的屬性Y函數依賴於屬性X,記作X→Y,X稱為決定因素。
如果X→Y,且Y不是X的子集,則稱X→Y是非平凡的函數依賴。
2若在R中,如果屬性集Y函數依賴於屬性集X,且不與X的任何真子集函數依賴,則稱Y完全依賴於X記作Xf→Y,否則稱Y部分依賴於X,記作Xp→Y
3在R中對於屬性子集X、Y、Z,若Xf→Y,Y→Z,則稱Z對X傳遞函數依賴,記作Xt→Z。
關鍵字(碼):4在R中,設K是U的屬性或屬性集合。如果Kf→U,則稱K是關系R的一個後選關鍵字。若R中有一個以上的關鍵字,則選定其中一個作為主關鍵字(主碼),如果K是屬性集合,則稱為組合關鍵字或合成關鍵字。
5.包含在任意一個候選字中的屬性,稱為主屬性,不包含在任何候選關鍵字中的屬性稱為非主屬性。
6.若關系的全部屬性作為關鍵字,則稱為完全關鍵字。此時無非主屬性。
後選關鍵字的兩個性質:a標識的唯一性b無冗餘性。
5在關系R中,若屬性或屬性集合X不是R的關鍵字,但X是其他關系中的關鍵字,則稱X是關系R的外關鍵字或外碼。
6在關系R中,XYZ是屬性集合,且Z=U-X-Y,多值依賴X→→Y成立當且僅當對R中給定的一對(X,Z)值有一組Y的值與之對應,這組值決定於X值二與Z值無關。關系模式中至少存在三個屬性,才有可能存在多值依賴。
7.第一範式(1NF):如果關系R的每一個屬性的值為不可分離的原子值,即每個屬性都是不可再分的基本數據項,則R是第一範式記作R∈1NF。
8.第二範式:如果關系R∈1NF,且R中的每一非主屬性完全函數依賴於主關鍵字,則R是第二範式,記作R∈2NF。
9.第三範式:如果R∈2NF,而且它的任何一個非主屬性都不傳遞依賴於任何主關鍵字,則R是第三範式,記作R∈3NF。
10.BCNF:如果關系R∈3NF,X,Y∈U,若,且Y∈/U時,X必含有碼,則R是BCNF,記作R∈2NF。滿足BCNF的關系模式:a非主屬性對關鍵字完全函數依賴b主屬性對不包含它的關鍵字完全函數依賴c沒有屬性完全函數依賴於一組非主屬性。
11.第四範式:如果關系模式R∈BCNF,若X→→Y(Y∈/X)是平凡多值依賴,且X含有碼,則稱R是第四範式,記作R∈4NF.
12.規范化的小結:
目的:規范化的目的是使結構合理,清除存儲異常並使數據冗餘盡量小,便於插入、刪除和更新。
原則:遵從概念單一化「一事一地」原則,即一個關系模式描述一個實體或實體間的一種聯系。規范化的實質是概念單一化。
方法:將關系模式投影分解成兩個或兩個以上的關系模式。
要求:分解後的關系模式集合應當與原關系模式等價,即經過自然聯結可恢復原關系而不丟失信息,並保持屬性間的合理聯系。
13.E-R模型轉換為關系模型的規則:1E-R圖中的每個實體集,都相應的轉換成一個關系,實體集的名字就作為關系的名字,實體集的屬性就作為關系的屬性,實體集的關鍵字作為關系的關鍵字。2對於E-R圖中聯系,一個聯系轉化為一個關系,練習的名稱作為關系的名稱,聯系的屬性作為關系的屬性,所有參加聯系的實體集的關鍵字也作為關系的屬性,關系的屬性有聯系的類型決定。

第四章 面向對象數據可設計
1.OO中對象的定義:對象是一些屬性(屬性值刻畫了一個對象的狀態)及專用服務的封裝體,是問題空間中一些東西的抽象。
2.類和事例:具有相同結構和相同行為的對象被組合在同一類中,這是一種抽象類型的表示,稱為類。任何單個對象都是某個類的實例。
3.消息:對象的存取或使用都是通過一種方式來實現的,即發送消息。
4.繼承:繼承是指對象繼承了它所在的類的結構、操作和約束,也指一個類繼承另一個類的結構、操作和約束,可以說繼承體現了一種共享機制。
5.一個合格的面向對象的資料庫管理系統應具備的性質和特徵:1必備的:是指面向對象的資料庫管理系統所必須滿足的特徵。它們是復雜對象、對象標識、封裝型、類、繼承性及遲後綁定蟲災、可擴充性、計算完備性、持久性、輔存管理、並發性、恢復和即席查詢功能。2可選類:是指為了使系統更加完善可添加的功能。分別是多繼承性類型檢查和推理分布設計事務處理和版本。3開放的:是設計人員可以選擇的特徵。分別是程序設計範例、表示系統、類型系統及單一性。
6.對象關系數據資料庫管理系統必須具備的特徵:1允許基本類型擴充2支持復雜對象管理3支持結構,數據和函數的繼承、包括多重繼承4對產生規則的支持。
7.集中式結構,所有資源(數據)和處理(程序)都在一台稱為主機的計算機上完成,用戶輸入的信息通過客戶機終端傳導主機上。
文件伺服器系統結構中,應用程序在客戶工作站上運行,而不是在文件伺服器上運行,文件伺服器只提供資源的集中式管理和訪問路徑。
8.兩層客戶機/伺服器結構
客戶機:從其他計算機中讀取數據,經過加工處理後將數據存儲到原來提供數據的計算機中的計算機。
伺服器:向其他計算機提供數據的計算機。
客戶機/伺服器有三個基本組成部分:客戶機、伺服器、客戶機與伺服器的連接。
9.客戶機是一個面向最終用戶的介面或應用程序。
10.伺服器的主要功能是建立進程和網路服務地址,監聽用戶的調用,處理客戶的請求,將結果交給客戶機和釋放與客戶機的連接。
客戶機與伺服器之間的連接時通過網路連接實現的。
11.客戶/服務的關鍵在於任務的劃分,一般的客戶完成用戶介面任務,主要是輸入/輸出和任務提交;伺服器則主要完成數據的存儲、訪問和復雜的計算任務;連接件主要完成客戶和服務取得數據交換。
12.三層結構:客戶機、應用伺服器和數據伺服器。
13.客戶機上只需要安裝應用程序,負責處理與用戶的交互和與應用程序的交互。
14.應用伺服器負責處理應用邏輯,即接受客戶機方應用程序的請求,然後根據應用邏輯將這個請求轉化為資料庫請求後與資料庫伺服器進行交互,並將與資料庫伺服器交互的結果傳送給客戶機方的應用程序。
15.數據伺服器軟體根據應用伺服器發送的請求,進行資料庫操作,並將操作結果傳送給應用伺服器。
16.應用邏輯被所有用戶共享是兩層結構和三層應用軟體的最大區別。中間層即應用伺服器是整個系統的核心,它必須具有處理系統的具體應用的能力,並提供事務處理、安全控制以及滿足不同數量客戶機的請求而進行性能調整的能力。
17.三層結構應用軟體開發系統優點明顯:1整個系統被分為不同的邏輯塊,層次非常清晰2能夠使肥客戶機辦成瘦客戶機3開發和管理的時間向伺服器方轉移,使得分布數據處理成為可能4管理和維護變得相對簡單。另外引進三層機構體系,客戶機便可省去與資料庫系統直接互動的麻煩。
18.資料庫管理系統的實現技術
採用存儲過程技術的好處如下:1高性能2共享性3簡化了應用開發過程,提高了應用開發效率4簡化了安全控制。
19.分布是資料庫管理技術:1數據復制和分布2兩個階段提交a協調者詢問各個參與者能否提交該事務,並等待他們的回答b各參與者根據收到協調者所做的決定進行事務處理或回滾,並向協調者作出答復。協調者在收到所有應答後,該事務結束。

第五章 SQL
1.Sql 資料庫的數據體系是三級結構。關系模式(模式)稱為基本表,存儲模式(內模式)稱為存儲文件,子模式(外模式)稱為視圖,元組稱為行,屬性成為列。
2.Sql的組成:一個Sql 數據可是表的集合;表有行構成,行是列的集合;一個表或者是基本表或者是視圖;一個基本表可以跨一個或多個存儲文件,一個存儲文件可存一個或多個基本表;用戶可以操作基本表也可以操作視圖;SQL用戶可以是應用程序,也可以是終端用戶。
3.SQL組成:數據定義(DDL,定義資料庫的邏輯結構,包括定義資料庫,基本表,視圖和索引四個部分。)
數據操作:DML包括查詢和更新(插入,刪除,更新)。
數據控制:基本表和視圖的授權,完整性規則的描述,事物控制語句。
4.嵌入語言的使用規定:規定SQL在宿主語言的程序中的使用規則。
SQL語言優點:非過程化語言,統一的語言,所有關系資料庫的公共語言。
5.數據字典是關於數據描述的信息的一個特殊資料庫。包含每一個數據類型的名字,意義,描述,來源,格式,用途以及與其他數據的聯系等數據,這類數據成為元數據。因而數據字典又稱與資料庫。
數據字典庫的數據類型:數據項,組項,記錄,文件,外模式,概念模式,內模式,用戶應用程序,存取口令,安全性要求,完整性要求,映像等。
6.DD/D(數據字典/目錄)的用途:1是系統分析員,資料庫設計人員的得力助手2是協助DBA管理資料庫的有力工具3支持DBMS4幫助應用程序員和終端用戶更好的使用資料庫。
7.SQL server 備份類型:資料庫備份;事務日誌備份;差異備份;文件和文件組備份。
8.資料庫恢復模式:簡單恢復;完全恢復;批日誌恢復。
Truncate table tablename
Numeric distinct identity grant revoke commit rollback column
Use master
Exec sp_admpdevice 『tape』 ,」tape2』, 『\\.tape0』
foreign key reference
9.通用網關介面CGI就是Web伺服器與一個外部程序(又稱CGI程序)進行通信的協議介面,這個介面協議規定了Web伺服器與CGI程序傳送消息的格式,信息的內容和格式,同時也規定了CGI程序返回信息的內容和輸出標准。在Web頁面中,主要通過超鏈接或者指定表格和圖形的方法來執行CGI程序。
10.在網路伺服器上,通常許多程序,用來完成不同的任務,在技術上網路伺服器上的這些程序統稱為CGI程序。
11.ODBC具有最大的互操作性,可以使用一個單獨的程序來提取數據可信息,在提供一種方法讓應用程序讀取數據。一個應用程序可以存取不同的資料庫管理系統,而應用程序不必和DBMS綁在一起進行編譯,連接,運行,而只要在應用程序中通過選擇一個叫做資料庫驅動程序的模塊就可以把應用程序和所選的ODBCl連接在一起。
12.ODBC組件:應用程序,驅動程序管理器,驅動程序,數據源。
13.ODBC的兩個基本用途:1在電子商務實際過程中,涉及企業,客戶,銀行海關,運輸和保險等部門和單位,他們的應用平台不一致,需要同時訪問多種異構資料庫。使用ODBC技術,設計人員只需要編寫一個程序版本,即可以方問任何資料庫,從而使程序具有更好的兼容性和適應性。2有些應用程序需要防問某種資料庫,就要求程序所在的計算機安裝相應的資料庫軟體。資料庫軟體有的龐大,加之很多單機版要與Web互聯,為此ODBC 提供了一批常用資料庫軟體驅動程序,這樣,計算機上即使沒有安裝相應的資料庫管理系統,但只要安裝了相應的驅動程序,CGI程序就可以防問。應用程序不必關心ODBC與DBMS之間的底層通信協議。

第七章 MYSQL
1.恢復root口令:1停止Mysqld server 服務,在任務管理器中終止MySQL進程。2使用—skop-grant-tables參數啟動mysqld.3使用mysql –h –hostname mysql 命令登陸到mysql server,用grant 命令改變口令;也可以這樣:mysqladmin –h hostname –u user –passwordnew password 。4載入許可權表:mysqladmin –h hostname flush-privileges,或使用SQL 命令FLUSH Privileges(當然也可以重啟Mysql)。 Mysqlmp
2.優化操作系統:不要交換區,不要使用NFS磁碟,增加系統和Mysql伺服器的打開文件數量,增加系統進程和線程的數量,使用支持大文件的文件系統,使用合適的文件系統。

第八章 ORACLE
1.Oracle資料庫的突出優點:1支持大資料庫,多用戶的高性能的事務處理2Oracle遵守數據存取語言,操作系統,用戶介面和網路通信協議的工業標准3實施安全性和完整性控制4支持分式資料庫和分布處理5具有可移植性,可兼容性和可連接性。
2.Oracle 三種訪問資料庫的方法;1用SQL*Plus,他用SQL命令以交互的應用程序訪問資料庫2用第四代語言應用開發工具的應用程序訪問資料庫,SQL*Froms,sql*reportwriter,sql*menu 等,3用第三代語言嵌入的Sql語言或Oracle庫函數調用來訪問。Prol*C。
數據保護也稱數據控制主要包括資料庫的完整性控制,安全性控制,並發控制和恢復。
3.Oracle用下列機制管理資料庫的安全性:存取機制,特權(對象特權,系統特權)和角色,審計(語句審計,特權審計,對象審計)
資料庫不一致類型: 不一致性,不可重讀性,讀臟數據,丟失更改,破壞DDL操作。
4.封鎖:數據封鎖,DDL封鎖,內部封鎖。
5.Oracle使用的結構,當發生故障時保護數據:資料庫後備(完全後備,部分後備),日誌(在線日誌,歸檔日誌),回滾段和控制文件。
6.Oracle資料庫的三種標准備份方法:導出/導入(邏輯備份),冷備份和熱備份(物理備份)。
Exec sql begin declare section
….
Exec sql end declare section;
Exec sql include sqlca ;
Exec sql connect : 用戶名
Indentified by : 口令
定義游標
Exec sql declare 游標名 cursor for
Select 列
From 表;
打開游標
Exec sql open 游標名;
取數據
Exec sql fetch 游標名 into : 變數2,變數3 ..;
關閉游標
Exec sql close 游標名;

Ⅳ SQL資料庫練習題

1. SQL Server 2000是典型的關系型資料庫產品。 ( 1 )
2. 在一台計算機上可以同時運行多個版本的SQL Server。 ( 1 )
3. 在SQL Server中日誌文件是維護資料庫完整性的重要工具。 ( 0 )
4. 在定義數據表時,定義某列為標識列的關鍵字是Identity。 ( 1 )
5. 浮點數據類型的優點是能夠存儲范圍非常大的數字,但容易發生誤差。 ( 0 )
6. 資料庫完整性的目的是為了防止錯誤信息輸入和輸出。 ( 0 )
7. 在Update語句中,一次可以更新多個表。 ( 0)
8. 盡量使用Select * ,可以加快查詢速度。 ( 0 )
9. 在SQL Server 2000中表示注釋可以用類似C語言的/*...*/和//。 ( 0 )
10. 在SQL Server中,RTRIM函數刪除字元串右邊的空白字元。 ( 1 )
11. 一個表只能有一個聚集索引(簇索引)。 ( 1 )
12. SQL查詢語言中,如果沒有指定排序方式,則默認是升序方式。 ( 1 )
13. 在SQL Server 2000中ntext類型的欄位不能進行排序操作。 ( 0 )
14. 在SQL Server 2000中bit類型的欄位不能建立索引。 ( 1 )
15. 在被定義為唯一索引的列上的數據不能有重復的值。 ( 1 )
16. 在被定義為唯一索引的列上的數據不允許空。 ( 0可以的但是只能有一個null值 )
17. 在SQL Server中,每張表都應該建立一個索引,以提高查詢速度。 ( 0 )
18. 視圖在SQL Server中是一張虛擬表。 ( 1 )
19. 當一個視圖由2個以上基本表構成時,不能進行刪除視圖中的數據。 ( 0 )
20. 在SQL Server中,觸發器是一種特殊的存儲過程。 ( 1 )
21. 由於存儲過程是解釋執行,所以每次執行時都要檢查是否有語法錯誤。 ( 0 )
22. 可以在用戶正在使用的資料庫上執行資料庫恢復操作。 ( 0 )
1表示正確

Ⅳ 第五章 SQL定義表(一)

可以通過定義表(使用 CREATE TABLE )或通過定義投影到表的持久類來創建表:

由於以下原因,這兩個名字之間的對應關系可能不相同:

表、視圖或存儲過程名稱可以是限定的( schema.name ),也可以是限定的( name )。

模式名遵循標識符約定,需要特別注意非字母數字字元的使用。
模式名不應該指定為帶分隔符的標識符。
嘗試指定「USER」或任何其他SQL保留字作為模式名會導致 SQLCODE -312 錯誤。
INFORMATION_SCHEMA 模式名和相應的信息。
模式包名在所有命名空間中保留。
用戶不應該在這個模式/包中創建表/類。

當執行一個創建操作(比如 create TABLE ),指定一個還不存在的模式時,InterSystems IRIS將創建新的模式。
InterSystems IRIS使用模式名生成相應的包名。
由於模式及其對應包的命名約定不同,用戶應該注意非字母數字字元的名稱轉換注意事項。
這些名稱轉換的注意事項與表不同:

INFORMATION_SCHEMA 模式名和相應的信息。
模式包名在所有命名空間中保留。
用戶不應該在這個模式/包中創建表/類

在所有名稱空間中保留 IRIS_Shard 模式名。
用戶不應在此模式中創建表、視圖或過程。
存儲在 IRIS_Shard 模式中的項不會通過編目查詢或 INFORMATION_SCHEMA 查詢顯示。

初始設置是對所有名稱空間(系統范圍)使用相同的默認模式名。
可以為所有命名空間設置相同的默認模式名,也可以為當前命名空間設置默認模式名。

如果創建了一個具有非限定名稱的表或其他項,InterSystems IRIS將為其分配默認模式名和相應的持久類包名。
如果一個命名的或默認的模式不存在,InterSystems IRIS將創建模式(和包),並將創建的項分配給該模式。
如果刪除模式中的最後一項,InterSystems IRIS將刪除該模式(和包)。
下面的模式名解析描述適用於表名、視圖名和存儲過程名。

系統范圍的初始默認模式名是 SQLUser 。
對應的持久類包名是 User 。
因此,非限定表名 Employee 或限定表名 SQLUser 。
Employee 將生成類 User.Employee 。

因為 USER 是一個保留字,嘗試用 USER 的模式名(或任何SQL保留字)指定限定名會導致 SQLCODE -1 錯誤。

要返回當前默認模式名,請調用 $SYSTEM.SQL.DefaultSchema() 方法:

或者使用以下預處理器宏:

可以使用以下任意一種方式更改默認模式名:

注意:當更改默認的SQL模式名稱時,系統將自動清除系統上所有名稱空間中的所有緩存查詢。
通過更改默認模式名稱,可以更改所有包含非限定表、視圖或存儲過程名稱的查詢的含義。
強烈建議在安裝InterSystems IRIS時建立默認的SQL模式名,以後不要修改。

模式名用於生成相應的類包名。
因為這些名稱有不同的命名約定,所以它們可能不相同。

可以通過將其設置為系統范圍的默認模式來創建與SQL保留字同名的模式,但是不建議這樣做。
名為 User 的默認模式根據類命名唯一性約定,生成相應的類包名稱 User0 。

如果指定 _CURRENT_USER/name 作為默認模式名,其中name是選擇的任意字元串,那麼InterSystems IRIS將當前登錄進程的用戶名分配為默認模式名。
如果進程沒有登錄,則name將用作默認的模式名。
例如,如果進程沒有登錄, _CURRENT_USER/HMO 使用HMO作為默認模式名。

在 $SYSTEM.SQL.SetDefaultSchema() 中,指定 "_CURRENT_USER" 作為帶引號的字元串。

當訪問一個現有的表(或視圖,或存儲過程)進行DML操作時,將從模式搜索路徑中提供一個非限定的名稱。
按照指定的順序搜索模式,並返回第一個匹配項。
如果在搜索路徑中沒有找到匹配的模式,或者沒有搜索路徑,則使用默認的模式名。
(注意, #Import 宏指令使用了不同的搜索策略,不會「失敗」到默認的模式名。)

如果非限定名與模式搜索路徑中指定的任何模式或默認模式名不匹配,則會發出 SQLCODE -30 錯誤,例如: SQLCODE: -30 消息: Table 'PEOPLE' not found in schemas: CUSTOMERS,EMPLOYEES,SQLUSER 。

當創建一個基於odbc的查詢以通過Mac上的Microsoft query從Microsoft Excel運行時,如果從可用的表列表中選擇一個表,則生成的查詢不包括該表的模式(相當於類的包)。
例如,如果選擇從示例模式返回 Person 表的所有行,則生成的查詢為:

因為InterSystems IRIS將不限定的表名解釋為 SQLUser 模式中的表名,所以該語句要麼失敗,要麼從錯誤的表返回數據。
要糾正這一點,編輯查詢(在SQL View選項卡上),顯式引用所需的模式。
然後查詢應該是:

INFORMATION.SCHEMA 。
SCHEMATA persistent 類列出當前名稱空間中的所有模式。

下面的示例返回當前命名空間中的所有非系統模式名:

Management Portal SQL界面的左側允許查看模式(或匹配篩選器模式的多個模式)的內容。

每個表在其模式中都有一個唯一的名稱。
一個表有一個SQL表名和一個對應的持久化類名;
這些名稱在允許的字元、區分大小寫和最大長度方面有所不同。
如果使用SQL CREATE TABLE 命令定義,則指定遵循標識符約定的SQL表名;
系統生成一個對應的持久化類名。
如果定義為持久類定義,則必須指定只包含字母和數字字元的名稱;
這個名稱既用作區分大小寫的持久類名,也用作(默認情況下)對應的不區分大小寫的SQL表名。
可選的 SqlTableName class 關鍵字允許用戶指定不同的SQL表名。

當使用 CREATE TABLE 命令創建表時,InterSystems IRIS使用表名生成相應的持久化類名。
由於表及其對應類的命名約定不同,用戶應該注意非字母數字字元的名稱轉換:

同一個模式中的視圖和表不能具有相同的名稱。
嘗試這樣做會導致 SQLCODE -201 錯誤。

可以使用 $SYSTEM.SQL.TableExists() 方法確定一個表名是否已經存在。
可以使用 $SYSTEM.SQL.ViewExists() 方法確定視圖名是否已經存在。
這些方法還返回與表或視圖名稱對應的類名。
管理門戶SQL interface Catalog Details表信息選項顯示與所選SQL表名稱對應的類名。

試圖指定 「USER」 或任何其他SQL保留字作為表名或模式名會導致 SQLCODE -312 錯誤。
要指定SQL保留字作為表名或模式名,可以指定名稱作為帶分隔符的標識符。
如果使用帶分隔符的標識符指定包含非字母數字字元的表或模式名,InterSystems IRIS將在生成相應的類或包名時刪除這些非字母數字字元。

適用以下表名長度限制:

在SQL中,每條記錄都由一個唯一的整數值標識,這個整數值稱為 RowID 。
在InterSystems SQL中,不需要指定 RowID 欄位。
當創建表並指定所需的數據欄位時,會自動創建RowID欄位。
這個 RowID 在內部使用,但沒有映射到類屬性。
默認情況下,只有當持久化類被投影到SQL表時,它的存在才可見。
在這個投影表中,將出現一個額外的 RowID 欄位。
默認情況下,這個欄位被命名為 「ID」 ,並分配給第1列。

默認情況下,當在表中填充數據時,InterSystems IRIS將從1開始向該欄位分配連續的正整數。 RowID 數據類型為 BIGINT(%Library.BigInt) 。為 RowID 生成的值具有以下約束:每個值都是唯一的。不允許使用 NULL 值。排序規則是精確的。 默認情況下,值不可修改。

默認情況下,InterSystems IRIS將此欄位命名為 「 ID」 。但是,此欄位名稱不是保留的。每次編譯表時都會重新建立 RowID 欄位名。如果用戶定義了一個名為 「 ID」 的欄位,則在編譯表時,InterSystems IRIS會將 RowID 命名為 「 ID1」 。例如,如果用戶隨後使用 ALTER TABLE 定義了一個名為 「 ID1」 的欄位,則表編譯會將 RowID 重命名為 「 ID2」 ,依此類推。在持久性類定義中,可以使用 SqlRowIdName 類關鍵字直接為此類投影到的表指定 RowID 欄位名。由於這些原因,應避免按名稱引用 RowID 欄位。

InterSystems SQL提供了 %ID 偽列名稱(別名),無論分配給 RowID 的欄位名稱如何,該偽列名稱始終返回 RowID 值。 (InterSystems TSQL提供了 $IDENTITY 偽列名稱,其作用相同。)

ALTER TABLE 無法修改或刪除 RowID 欄位定義。

將記錄插入表中後,InterSystems IRIS將為每個記錄分配一個整數ID值。 RowID 值始終遞增。它們不被重用。因此,如果已插入和刪除記錄,則 RowID 值將按升序排列,但可能不連續。

可以通過設置 SetDDLUseSequence() 方法,將InterSystems IRIS配置為使用 $INCREMENT 執行 ID 分配。若要確定當前設置,請調用 $ SYSTEM.SQL.CurrentSettings() 方法。

在持久性類定義中, IdLocation 存儲關鍵字global(例如,對於持久性類 Sample.Person:<IdLocation> ^ Sample.PersonD </ IdLocation> )包含RowID計數器的最高分配值。 (這是分配給記錄的最高整數,而不是分配給進程的最高整數。)請注意,此RowID計數器值可能不再與現有記錄相對應。要確定是否存在具有特定RowID值的記錄,請調用表的 %ExistsId() 方法。

通過 TRUNCATE TABLE 命令重置 RowID 計數器。即使使用 DELETE 命令刪除表中的所有行,也不會通過 DELETE 命令將其重置。如果沒有數據插入表中,或者已使用 TRUNCATE TABLE 刪除所有表數據,則 IdLocation 存儲關鍵字全局值未定義。

默認情況下, RowID 值不可用戶修改。嘗試修改 RowID 值會產生 SQLCODE -107 錯誤。覆蓋此默認值以允許修改 RowID 值可能會導致嚴重的後果,只有在非常特殊的情況下並應格外謹慎。 Config.SQL.AllowRowIDUpdate 屬性允許 RowID 值是用戶可修改的。

通過定義一個用於投影表的持久類,可以定義 RowID 以具有欄位或欄位組合中的值。為此,請使用 IdKey index 關鍵字指定一個索引。例如,一個表可以具有一個 RowID ,其 RowId 通過在 PatientName [IdKey] 上指定索引定義 IdxId 來與 PatientName 欄位的值相同;或者可以通過指定索引定義 IdxId 來將 PatientName 和 SSN 欄位的組合值在 (PatientName,SSN)[IdKey]; 上。

當 RowID 基於多個欄位時, RowID 值是由 || 連接的每個組成欄位的值。操作員。例如, Ross,Betsy || 123-45-6789 。 InterSystems IRIS嘗試確定基於多個欄位的 RowID 的最大長度。如果無法確定最大長度,則 RowID 長度默認為512。

用作外鍵引用的 RowID 必須是公共的。

默認情況下,不能將具有公共 RowID 的表用作源表或目標表,以使用 INSERT INTO Sample.DupTable SELECT * FROM Sample.SrcTable 將數據復制到重復表中。

可以使用Management Portal SQL界面「目錄詳細信息欄位」列出「隱藏」列來顯示 RowID 是否被隱藏。

可以使用以下程序返回指定欄位(在此示例中為 ID )是否被隱藏:

Ⅵ SQL練習題

一 學生 – 課程資料庫
1 查詢 7號課程沒有考試成績的學生學號
select sno from sc where cno=』7』 and grade is not null
2 查詢 7號課程成績在90分以上或60分以下的學生學號
select sno from sc where grade>90 or grade<60
3 查詢課程名以「數據」兩個字開頭的所有課程的課程號和課程名。
Select cno,cname from c where cname like 『數據%』
4 查詢每個學生所有課程的平均成績,輸出學生學號、平均成績
select sno,avg(grade) from sc group by sno
5 查詢每門課程的選修人數,輸出課程號、選修人數。
Select cno,count(*) from sc group by cno
6 查詢選修 7號課程的學生的學號、姓名、性別。
Select s.sno, sname,ssex from s , sc where s.sno=sc.sno and cno = 『7』
7 查詢選修7號課程學生的平均年齡。
Select avg(sage) from s , sc where s.sno=sc.sno and cno = 『7』
8 查詢由30名以上學生選修的課程號。
Select sno from sc group by cno having count(*)>30
9 查詢至今沒有考試不及格的學生學號
a: select sno from s where sno not in ( select sno from sc where grade<60 )
b: select sno from sc group by sno having min(grade)>=60

1 找出選修課程號為 C2 的學生學號與成績。
Select sno,grade from sc where cno=』C2』
2 找出選修課程號為C4 的學生學號與姓名。
Select s.sno , sname from s,sc where s.sno=sc.sno and cno=』C4』
3 找出選修課程名為 Maths 的學生學號與姓名。
Select s.sno ,sname from s,sc,c
where s.sno=sc.sno and c.cno=sc.cno and cname = 『Maths』
4找出選修課程號為C2或C4 的學生學號。
Select distinct sno from sc where cno in (『C2』,』C4』)
或: Select distinct sno from sc where cno=』C2』 or cno =』C4』
5找出選修課程號為C2和C4 的學生學號。
Select sno from sc where cno =』C2』 and sno in (
select sno from sc where cno = 『C4』 )
6 找出不學C2課程的學生姓名和年齡
select sname , sage from s where sno not in ( select sno from sc where cno=』C2』 )
或:
select sname , sage from s where not exists ( select * from sc where sc.sno=s.sno and cno=』C2』 )
7 找出選修了資料庫課程的所有學生姓名。(與3同)
Select s.sno ,sname from s,sc,c
where s.sno=sc.sno and c.cno=sc.cno and cname = 『資料庫』

8 找出資料庫課程不及格的女生姓名
嵌套:
select sname from s where ssex = 『女』 and sno in ( select sno from sc where grade<60 and cno in ( select cno from c where cname=』資料庫』) )
連接:
Select sname from s,sc,c
where s.sno=sc.sno and c.cno=sc.cno and ssex=』女』 and cname = 『資料庫』 and grade<60
9 找出各門課程的平均成績,輸出課程名和平均成績
select cname , avg(grade) from sc , c where c.cno =sc.cno group by sc.cno
10找出各個學生的平均成績,輸出學生姓名和平均成績
select sname , avg(grade) from s , sc where s.sno=sc.sno group by sc.sno
11 找出至少有30個學生選修的課程名
select cname from c where cno in ( select cno from sc group by cno having count(*)>=30 )
12 找出選修了不少於3門課程的學生姓名。
Select sname from s where sno in ( select sno from sc group by sno having count(*)>=3)
13 找出各門課程的成績均不低於90分的學生姓名。
Select sname from s where sno not in ( select sno from sc where grade<90)
14* 找出資料庫課程成績不低於該門課程平均分的學生姓名。
Select sname from s where sno in (
Select sno from sc , c where sc.cno=c.cno and cname=』資料庫』 and
Grade > (Select avg(grade) from sc , c where sc.cno=c.cno and cname=』資料庫』 ) )
15 找出各個系科男女學生的平均年齡和人數。
Select sdept,ssex , avg(sage) , count(*) from s
Group by sdept , ssex
16 找出計算機系(JSJ)課程平均分最高的學生學號和姓名。
Select sc.sno , sname from s, sc where s.sno=sc.sno and sdept=』JSJ』
Group by sc.sno Having avg(grade) =
( Select top 1 avg(grade) from sc, s where s.sno=sc.sno and sdept=』JSJ』
group by sc.sno order by avg(grade) DESC )
三 客戶 – 商品資料庫中包括3按各表:KH,FP,YWY
1 查詢工資在 1000 到3000 元之間的男性業務員的姓名和辦公室編號。
Select Yname , Ono from YWY where salary between 1000 and 3000 and Ysex=』男』
2 查詢各個辦公室的業務員人數,輸出辦公室編號和對應的人數。
Select Ono , count(*) from YWY group by Ono
3 查詢每個客戶在2002年5月購買的總金額,輸出客戶號和相應的總金額。
Select Kno,sum(Fmoney) from FP where fdate between 『2002.5.1』 and 『2002.5.31』
Group by Kno
4 查詢2002年5月購買次數超過5次的所有客戶號,且按客戶號升序排序。
Select Kno from FP where fdate between 『2002.5.1』 and 『2002.5.31』
Group by Kno having count(*)>5
Order by Kno ASC
5 查詢各辦公室男性和女性業務員的平均工資。
Select Ono,Ysex ,avg(salary) from YWY group by Ono , Ysex
6 查詢2002年5月曾經在王海亮業務員手中購買過商品的客戶號、客戶姓名、聯系電話。
Select Kno,Kname,phone from KH where Kno in (
Select kno from FP where fdate between 『2002.5.1』 and 『2002.5.31』 and
Yno=(select Yno from YWY where Yname = 『王海亮』 )
7 查詢所有工資比1538號業務員高的業務員的編號、姓名、工資。
Select yno ,Yname, salary from YWY where salary >
( Select salary from YWY where Yno=』1538』 )
8 查詢所有與1538號業務員在同一個辦公室的其他業務員的編號、姓名。
Select Yno , Yname from YWY where Yno<>』1538』 and Ono in (
Select Ono from YWY where Yno=』1538』 )
9 查詢銷售總金額最高的業務員的編號。
Select Yno from FP Group By Yno Having sum(Fmoney) =
(Select top 1 sum(Fmoney) from FP group by Yno ORDER BY sum(Fmoney) DESC)
10 查詢所有業務員的編號、姓名、工資以及工資比他高的其他業務員的平均工資。
利用自身連接
Select y1.Yno ,y1.Yname ,y1.salary , avg( y2. salary) from YWY y1 , YWY y2
Where y1.Yno<>y2.Yno and y1.salary < y2.salary
Group by y1.Yno
Sno salary sno salary
1 100 1 100
2 120 2 120
3 90 3 90
4 110 4 110
四 某中學資料庫中由一張表:
學生選課表:由板及代碼、班內學號、姓名、科目、成績五個屬性組成,關系模式為
SC(BJDM,BNXH,XSXM,KM,CJ) ,其中(BJDM,BNXH)為主碼。
說明:每個學生每門科目存放一個記錄,科目有「語文」、「數學」、「外語」三門。
1 找出每個班級的班級代碼、學生人數、平均成績。
Select BJDM,count(*) ,avg(CJ) from SC group by BJDM
2 找出每個學生的班級代碼、學生姓名、考試科目數、總成績。
Select BJDM,XSXM,count(*) , sum(CJ) from SC
Group by BNXH
3 輸出一張表格,每位學生對應一條記錄,包括:班級代碼、姓名、語文成績、數學成績、外語成績。
方法一:利用視圖
create view v1 (bjdm,xsxm, yw,sx,wy ) AS
select bjdm , xsxm , cj , 0,0 from sc where km=』語文』
union
select bjdm , xsxm , 0 , cj,0 from sc where km=』數學』
union
select bjdm , xsxm , 0,0,cj from sc where km=』外語』

select bjdm, xsxm , sum(yw) as 語文, sum(sx) as 數學, sum(wy) as 外語 from v1 group by bjdm, xsxm
方法二:自身連接
select a.bjdm,a.xsxm , a.km,a.cj , b.km,b.cj , c.km,c.cj from sc a , sc b , sc c
where a.bjdm=b.bjdm and a.bnxh= b.bnxh and b.bjdm=c.bjdm and b.bnxh= c.bnxh
and a.km=』語文』 and b.km=』數學』 and c.km=』外語』
方法三:利用存儲過程(略)
4 輸出一張表格:由成績低於60分的每位學生對應一條記錄,包括欄位:班級代碼、姓名、最低成績。
Select bjdm,xsxm ,min(CJ) from sc where grade<60 group by bjdm,xsxm
5輸出一張表格:由成績低於60分的每位學生對應一條記錄,包括欄位:班級代碼、姓名、最高成績、平均成績。
得到平均成績:create view V1 (bjdm,bnxh ,avg_cj) AS
select bjdm,bnxh ,avg(cj) from sc where bjdm , bnxh
select sc.bjdm,sc.xsxm ,max(cj) , avg_cj from sc , V1
where sc.bjdm=v1.bjdm and sc.bnxh=V1.bnxh and cj<60
group by sc.bjdm,sc.xsxm
6輸出一張表格:所有成績不低於60分的每位學生對應一條記錄,包括欄位:班級代碼、姓名、平均成績。
select bjdm, xsxm , avg(cj) from sc
where sno not in ( select sno from sc where grade<60)
group by bjdm, xsxm
7輸出一張表格:每一位學生對應一條記錄,包括欄位:班級代碼、姓名、去掉一個最低分後的平均成績。
方法一:
得到每個學生的最低分:
create view V1 (bjdm,bnxh ,min_cj) as
select bjdm,bnxh,min(cj) from sc group by bjdm,bnxh
select sc.bjdm,sc.xsxm , avg(cj) from sc , v1
where sc.bjdm=v1.bjdm and sc.bnxh=v1.bnxh and sc.cj <> v1.min_cj
group by bjdm,bnxh
方法二:
select sc.bjdm,sc.xsxm , ( sum(cj) – min(cj) ) / count(*) from sc
group by bjdm , bnxh
8輸出一張表格:每門科目對應一條記錄,包括欄位:科目、去掉一個最低分後的平均成績。
方法一:
得到每門課的最低分:
create view V1 ( km, min_cj) as
select km,min(cj) from sc group by km
select sc.km , avg(cj) from sc , v1
where sc.km=v1.km and sc.cj <> v1.min_cj
group by sc.km
方法二:
select km , (sum( cj) – min(cj) )/count(*) from sc
group by km
補充9:輸出表格:每門科目對應一條記錄,包括欄位:科目、去掉一個最低分和最高分後的平均成績。
select km , (sum( cj) – min(cj) – max(cj) )/count(*) from sc
group by km
五 資料庫存放著某高校1990年以來英語四、六級的考試情況,且規定:
1 英語四、六級考試每年分別在6月和12月舉行二次;
2 四級沒有通過的學生不能報考六級;
3 某一級的考試只要沒有通過可以反復參加考試;
4 某一級的考試一旦通過就不能再報考同級的考試;
5 允許報了名但不參加考試。
該資料庫中有二張表,相應的關系模式如下:
學生表:S(Sno, Sname, Ssex, Sage, Sdept),其中Sno為主碼。
考試表:E(Sno, Year, Month, Level, Grade),學號、年、月、級別、成績。
其中(Sno, Year, Month)為主碼。
1. 找出各次四級和六級考試的參考人數和平均成績(報了名但沒有參加考試的不作統計)
select year , month,level ,count(*) , avg(grade)
group by year,month , level
2. 找出各次四級考試中平均分最高的系科(報了名但沒有參加考試的不作統計)。
A: Select sdept from s , e where s.sno=e.sno
Where level=4
Group by sdept
Having avg(grade)>=ALL(
Select avg(grade) from s , e where s.sno=e.sno where level=4 Group by sdept )
B: Select top 1 sdept from s , e where s.sno=e.sno
Where level=4
Group by sdept
Order by (avg(grade) desc
3. 找出已經通過英語六級考試的學生的學號、姓名和性別(用連接方法做)
select s.sno,sname,ssex from s,e
where s.sno=e.sno and level=6 and grade>=60
4. 找出在同一年中四、六級考試都參加了的學生的學號
1) select sno from E
where (level=4 and grade>=60) or level=6
group by year having count(*)>=2
2) select sno from E X where level=4 and grade>=60 and exists (
select * from E Y where Y.sno=X.sno and year=X.year and level=6 )
5. 找出只參加一次考試就通過了英語六級考試的學生的學號
select sno from E
where level=6
group by sno
having count(*)=1 錯,想想為何?
1) select sno from E
where level=6
group by sno
having count(*)=1 and max(grade)>=60
2) select sno from E where level=6 and grade>=60 and sno in (
select sno from E where level=6 group by sno having count(*)=1)
6. 找出至今沒有通過英語四級考試的學生的學號(應包括至今還沒有參加過考試或者是參加了但還沒有通過兩種)
select sno from E where level=4
group by sno
having max(grade)<60
Union
Select sno from s where sno not in( select sno from E)
7. 找出英語六級考試中合格人數最少的考試年份和月份(有並列的都要列出,用一句SQL語句)。
Select year , month From E
Where level = 6 and grade>=60
Group by year , month
Having count(*) <=all
(Select count(*) from E where level=6 and grade>=60 group by year , month )

我是從「上海全鼎軟體學院」畢業的————————

Ⅶ sql語句相關測試

sql語句相關測試

篇一:SQL語句測試

1、(10分)要求:

選擇受理時間在2008-5-1 到 2008-6-1之間的所有申請人姓氏為「劉」的數據,並把「新受理編號」列表示成當前機器時間的年月和原受理編號年月後的數值組合

格式如下:

受理編號,新受理編號,受理時間, 申請人

200801112 201008112 2008-01-13劉XX

需要的表

I_Optinst 業務實例表

REGDATE(受理日期)

Regnum(受理編號)

Proposer(申請人)

解答:select Regnum as 受理編號, as 新受理編號,REGDATE as 受理時間,Proposer as申請人 from Optinst 2、(15分)要求:

前提:只統計業務小類「存量房買賣」

①按照月份分12月列出2008年每個月份的月份對應月份的交易總面積

②按照月份分12月列出2008年每個月份的月份對應月份的交易均價(申報價格/建築面積)

格式

年度月份 交易總面積 年度月份交易均價(元/平方米)

2008-01 23232 2008-01 2323

2008-02 23232008-02 232

2008-03 232323 2008-03 7656

2008-04 232323 2008-03 565

2008-05 232323 2008-03 5656

2008-06 232323 2008-03 565

2008-07 232323 2008-03 67

2008-08 232323 2008-03 676

2008-09 232323 2008-03 6767

2008-10 232323 2008-03 8686

2008-11 232323 2008-03 867

2008-12 232323 2008-03 454

需要的表:

Fc_room 房間表

BAREA(建築面積)

I_Optinst業務實例表

regdate(受理時間)

fc_owner 產權表

COSTVAL(申報價格)

EVLVAL(評估價格)

fc_owoom 房間明細表

1.select regdate as年度月份,BAREA as 交易總面積 from Fc_room,Optinst where

3、(20分)要求:

①:按照時間統計收費明細 統計格式如下

受理編號繳費人收費日期 收費名稱收費金額核費人收費人

②:按照時間匯總(2008年度)統計收費項目分類 統計格式如下

收費名稱 總金額

需要的表:

I_OptInst(業務實例表)

Regnum 受理編號

Proposer 申請人

I_Charge(收費實例表)

HEFEIMAN 核費人

PAYEE 收款人

CDATE 收費日期

I_ChrDtl(收費實例明細表

CNAME 收費名稱

MONEY 收費金額

4、(15分)要求:用途是住宅並且建築面積<=140>140 定義為 「非普通住宅」

用途是商業並且建築面積>140 定義為 「商業A級」

其他情況定義為「非住宅」

根據用途和面積列表出所有數據

格式

受理編號, 用途

200406000386 普通住宅

200406004631 非普通住宅

200406004633 普通住宅

200406004638 普通住宅

200406004641 非住宅

200501000004 普通住宅

200406004568 非住宅

200406005677 商業A級

表:

fc_room

barea 建築面積

BUse 用途

i_optinst

regnum 受理編號

5、(30分)工作量統計

① 選擇出以下格式的數據;並創建視圖名稱為view_AAAA

業務小類業務實例 交易價格建築面積 登記時間

1 存量房買賣 14100 19400.0029.98 2005-11-10 11:32:50 2 新建商品房 15041 229530.00 124.07 2005-11-21 08:59:36 3 新建商品房 15043 177363.00 101.35 2005-11-21 09:15:59 4 新建商品房 13046 71130.0023.71 2005-11-02 10:15:37 5 新建商品房 11280 148563.00 87.39 2005-10-11 09:50:48 6 新建商品房 11353 267369.00 116.04 2005-10-11 15:34:53 7 房改售房 2689 35.22 2004-06-17 08:43:00 8 產權人名稱變更 11701 724.18 2005-10-17 10:05:20 9 新建商品房 7206 158257.00 88.69 2005-09-16 14:50:57 10 存量房買賣 (轉 載於:wWw.cnboThwiN.cOM 博 威範文 網: sql語句測試 )10100 103.07 2005-08-31 20:27:06 11 存量房買賣 12980 51500.0046.66 2005-11-01 14:41:32 12 新建商品房 13000 136782.00 80.46 2005-11-01 15:37:05 13 新建商品房 16946 300844.00 146.33 2005-12-15 14:15:07 14 存量房買賣 10091 509.18 2005-08-31 19:19:25 ② 使用視圖 view_AAAA 當做表 選擇出如下樣式數據

業務小類 件數合計金額 合計面積

1 用途變更 1151.3

2 轉移登記 184.03

3 新建商品房 31 263243643197.34

4 房改售房 8252.43

5 產權人名稱變更 3 778.6

6 單位產新建 311697.49

7 贈與 1 28.48

8 存量房買賣 24 4379004134.67

9 判決仲裁 2 439.41

10 繼承遺贈 1 49.17

11 換證 2 228.88

12 新建房屋 17 928.91

③ 用水晶報表關聯視圖 view_AAAA 設計出類似於②的數據格式 需要的表

FC_Owner

EvlVal交易價格

I_OptInst,

SOName 業務小類

fc_owoom,

BArea 建築面積

FC_Room

regdate 受理日期

篇二:sql查詢語句學習測試答案

第一部分SQL查詢語句的學習

單表查詢 1、--查詢訂購日期在1996年7月1日至1996年7月15日之間的訂單的訂購日期、訂單ID、客戶ID和雇員ID等欄位的值

use eee

SELECT 訂購日期,訂單ID,客戶ID,

雇員ID

FROM 訂單

WHERE 訂購日期BETWEEN '1996-7-1 00:00:00' AND '1996-7-15 23:59:59'

2、--查詢「Northwind」示例資料庫中供應商的ID、公司名稱、地區、城市和電話欄位的值。條件是「地區等於華北」並且「聯系人頭銜等於銷售代表」。

use eee

SELECT 供應商ID,公司名稱,地區,城市,電話

FROM 供應商

WHERE 地區='華北' AND 聯系人職務='銷售代表'

3、--查詢「Northwind」示例資料庫中供應商的ID、公司名稱、地區、城市和電話欄位的值。其中的一些供應商位於華東或華南地區,另外一些供應商所在的城市是天津 use eee

SELECT 供應商ID,公司名稱,地區,城市,電話

FROM 供應商

WHERE 地區IN('華東', '華南') OR 城市='天津'

4、--查詢「Northwind」示例資料庫中位於「華東」或「華南」地區的供應商的ID、公司名稱、地區、城市和電話欄位的值

use eee

SELECT 供應商ID,公司名稱,地區,城市,電話

FROM 供應商

WHERE 地區IN('華東', '華南')

多表查詢 5、--查詢訂購日期在1996年7月1日至1996年7月15日之間的訂單的訂購日期、訂單ID、相應訂單的客戶公司名稱、負責訂單的雇員的姓氏和名字等欄位的值,並將查詢結果按雇員的「姓氏」和「名字」欄位的升序排列,「姓氏」和「名字」值相同的記錄按「訂單 ID」的降序排列

use eee

SELECT 訂購日期,訂單ID,公司名稱,姓氏,名字

FROM 訂單,雇員,客戶

WHERE 訂購日期BETWEEN '1996-7-1 00:00:00' AND '1996-7-15 23:59:59'

AND 訂單.雇員ID = 雇員.雇員ID

AND 訂單.客戶ID = 客戶.客戶ID

ORDER BY 姓氏,名字ASC,訂單ID DESC

6、--查詢「10248」和「10254」號訂單的訂單ID、運貨商的公司名稱、訂單上所訂購的產品的名稱

use eee

SELECT 訂單.訂單ID,公司名稱,產品名稱

FROM 訂單,運貨商,產品,訂單明細

WHERE 訂單.訂單ID IN('10248','10254')

AND 訂單.訂單ID = 訂單明細.訂單ID

AND 訂單明細.產品ID = 產品.產品ID

AND

訂單.運貨商= 運貨商.運貨商ID

7、--查詢「10248」和「10254」號訂單的訂單ID、訂單上所訂購的產品的名稱、數量、單價和折扣

use eee

SELECT 訂單.訂單ID,產品名稱,數量,訂單明細.單價,折扣

FROM 訂單,產品,訂單明細

WHERE 訂單.訂單ID IN('10248','10254')

AND 訂單.訂單ID = 訂單明細.訂單ID

AND 訂單明細.產品ID = 產品.產品ID

篇三:sql語句練習題及答案

一 在資料庫 school 中建立student , sc, course 表。

學生表、課程表、選課表屬於資料庫 School ,其各自的數據結構如下:

學生 Student (Sno,Sname,Ssex,Sage,Sdept)

課程表 course(Cno,Cname,Cpno,Ccredit)

學生選課 SC(Sno,Cno,Grade)

二 設定主碼

1 Student表的主碼:sno2 Course表的主碼:cno 3 Sc表的主碼:sno,cno

1寫出使用 Create Table 語句創建表 student , sc, course 的SQL語句

2

3 刪除student表中的元組

4在資料庫school中刪除關系student

5在student表添加屬性sbirthdate 類型 datetime

Delete

1 刪除所有 JSJ 系的男生 from Student where Sdept=』JSJ』 and Ssex=』男』; 2 刪除「資料庫原理」的課的選課紀錄

from SC where Cno in (select Cno fromCourse where Cname=』資料庫原理』);

Update

1 修改 0001 學生的系科為: JSJ

2 把陳小明的年齡加1歲,性別改為女。 2 修改李文慶的1001課程的成績為 93 分 3 把「資料庫原理」課的成績減去1分

Select 查詢語句

一 單表

1查詢年齡在19至21歲之間的女生的學號,姓名,年齡,按年齡從大到小排列。 2查詢姓名中第2個字為「明」字的學生學號、性別。 3查詢 1001課程沒有成績的學生學號、課程號

4查詢JSJ 、SX、WL 系的年齡大於25歲的學生學號,姓名,結果按系排列 5按10分制查詢學生的sno,cno,10分製成績

(1-10分 為1 ,11-20分為2 ,30-39分為3,。。。90-100為10) 6查詢 student 表中的學生共分布在那幾個系中。(distinct) 7查詢0001號學生1001,1002課程的成績。

二 統計

1查詢姓名中有「明」字的學生人數。 2計算『JSJ』系的平均年齡及最大年齡。 3查詢學生中姓名為張明、趙英的人數

4計算每一門課的總分、平均分,最高分、最低分,按平均分由高到低排列 5 計算 1001,1002 課程的'平均分。

6 查詢平均分大於80分的學生學號及平均分 7 統計選修課程超過 2 門的學生學號

8 統計有10位成績大於85分以上的課程號。 9 統計平均分不及格的學生學號

10 統計有大於兩門課不及格的學生學號

三 連接

1查詢 JSJ 系的學生選修的課程號

2查詢選修1002 課程的學生的學生姓名 (不用嵌套及嵌套2種方法) 3查詢資料庫原理不及格的學生學號及成績

4查詢選修「資料庫原理」課且成績 80 以上的學生姓名(不用嵌套及嵌套2種方法) 5查詢平均分不及格的學生的學號,姓名,平均分。 6查詢女學生平均分高於75分的學生姓名。

7查詢男學生學號、姓名、課程號、成績。(一門課程也沒有選修的男學生也要列出,不能

四 嵌套、相關及其他

1 查詢平均分不及格的學生人數

2 查詢沒有選修1002 課程的學生的學生姓名

3 查詢平均分最高的學生學號及平均分 (2種方法 TOP , any , all) *4 查詢沒有選修1001,1002課程的學生姓名。

5 查詢1002課程第一名的學生學號(2種方法) 6 查詢平均分前三名的學生學號

7 查詢 JSJ 系的學生與年齡不大於19歲的學生的差集

8 查詢1001號課程大於90分的學生學號、姓名及平均分大於85分的學生學號、姓名 9 查詢每門課程成績都高於該門課程平均分的學生學號 10 查詢大於本系科平均年齡的學生姓名

答案

參考答案

1 create table student (sno6), sname var8), ssex2), sagesmallint, sdept var15), primary key(sno));

create table sc

(sno6), cno 4),

grade decimal(12,2), primary key(sno,cno));

into student

values( 』4001』,』趙茵』,』男』,20,』SX』)

from student

student

alter table student add sbirthdate datetime

1 select sno, sname, sage from student

where ssex=』女』 and sage between 19 and 21order by sage desc; 2 select sno, ssexfrom student

where sname like 』_明% 』 ; 3 select sno, cnofrom sc

where grade is null and cno=』1001』 ; 4 select sno, sname from student

where sdept in (』JSJ』,』SX』,』WL』) and sage>25 group by sdept;

select sno, cno, grade/10.0+1 as levelfrom sc ;

select distinct sdept from student ; select grade from sc

where sno=』0001』 and (cno=』1001』 or cno=』1002』) ;

select count(*) from student where sname like 』%明% 』 ; select avg(sage),max(sage) from student where sdept=』JSJ』 ; select cno,sum(grade),avg(grade),max(grade),min(grade) from sc group by cno

order by avg(grade) desc ;

select cno, avg(grade) from sc where cno in(『1001』,』1002』) group by cno ;

select sc.sno ,avg(grade) from scgroup by sc.sno

having avg(grade)>80 ;

select sno from sc group by sno having count(*)>2 ;

select cno from sc where grade>85 group by cno having count(*)=10 ; select sno from sc group by sno having avg(grade)<60 ;

select sno from sc where grade<60 group="" by="" sno="" having="">2 ;

select cno from student,sc where student.sno=sc.sno and sdept=』JSJ』 ; a:select sname from student,sc where student.sno=sc.sno and cno=』1002』

b:select sname from student where sno in (select sno from sc where cno=』1002』)

select sno,grade from sc,course

where sc.cno=course.cno and cname=』資料庫原理』 and grade<60 a:select sname from student ,sc,course

where student.sno=sc.sno and sc.cno=course.cno and grade>80 and cname=』 資料庫原理』 b:select sname from student where sno in (select sno from sc where grade>80 and cno in (select cno from course where cname=』 資料庫原理』)) select sno,sname,avg(grade) from sc,studentwhere student.sno=sc.snogroup by student.sno having avg(grade)<60

a:select sname from student where ssex=』女』 and sno in(select sno from sc group by sno having avg(grade)>75)

b:select sname from sc,student where student.sno=sc.sno and ssex=』女』group by student.sno having avg(grade)>75

select student.sno,sname,cno,grade from student left join sc on student.sno=sc.sno and ssex=』男』

select count(*) from student where sno in( select sno from sc group by sno havingavg(grade)<60)

select sname from student where sno not in(select sno from sc where cno=』1002』)

student

0001 aaX 0002 bb

0003 ccX Sc

0001 1001 0001 1002 0002 1001 0003 1002

Select sname from student where not exists(select* from sc where cno=』1002』 and sc.sno=student.sno)

a:select top 1 sno,avg(grade) from sc group by sno order by avg(grade) desc b:select sno, avg(grade) from sc group by sno

having avg(grade)=(select top 1 avg(grade) from scgroup by sno order by avg(grade) desc) c:select sno, avg(grade) from sc group by sno

having avg(grade)>=all ( select avg(grade) from sc group by sno)

select sname from student where not exists(

select * from course where cno in(『1001』,』1002』) and

not exists(select * from sc where sno =student.sno and cno=course.cno) ) a:select top 1 sno from sc cno=』1002』 order by grade desc b:select sno from sc where cno=』1002』 and grade >=all (

;