a)select pname as '商品名',avg(qty) as 平均銷售量 from s,p,m where m.city='上海' and s.mno=m.mno and p.pno=s.pno,select p.Pno,p.pname,sum(s.qty)
from s left join p on s.pno=p.pno left join m on p.Mno=m.Mno
where m.city='上海市'
group by p.Pno,p.pname,p.city,p.color
b)、先刪除Sale表的外鍵PNO,再刪除gds表。
c)聯系:視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系
區別:1、視圖是已經編譯好的sql語句。而表不是
2、視圖沒有實際的物理記錄。而表有。
3、表是內容,視圖是窗口
4、表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改
5、表是內模式,視圖是外模式
6、視圖是查看數據表的一種方法,可以查詢數據表中某些欄位構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。
7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。
8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。
B. 誰來幫我解決這些SQL SERVER測試題
6 ad
7 ac
8 b 這是sql server裡面的取前面記錄,一般會用來分頁
9 d
10 c
C. 計算機SQL語言試題
(一)現有關系資料庫如下: 資料庫名:我班同學資料庫同學表(學號 char(6),姓名,性別,年齡,民族,身份證號,宿舍號) 宿舍表(宿舍號 char(6),宿舍電話) 用SQL語言實現下列功能的sql語句代碼:1.創建資料庫[我班同學資料庫]代碼。2.創建數據表[宿舍表]代碼; 宿舍表(宿舍號 char(6),宿舍電話) 要求使用:主鍵(宿舍號)、宿舍電話:以633開頭的7位電話號碼3.創建數據表[同學表]代碼; 同學表(學號 char(6),姓名,性別,年齡,民族,身份證號,宿舍號) 要求使用:主鍵(學號)、外鍵(宿舍號)、默認(民族)、非空(民族,姓名,年齡)、唯一(身份證號)、檢查(性別)4.將下列宿舍信息添加到宿舍表的代碼 宿舍號 宿舍電話 101 6331157 102 6331777 修改 宿舍號為101的 宿舍電話:6331158 刪除 宿舍號為102的 宿舍信息5.創建視圖[同學表視圖]代碼; 同學表視圖(學號, 姓名, 性別, 年齡, 民族, 身份證號, 宿舍號, 宿舍電話)6.從同學表視圖中查詢姓張的女同學的姓名、性別、宿舍電話。7.從同學表中查詢女同學的最大年齡、最小年齡、平均年齡。8.創建帶參數的存儲過程[某宿舍同學]:姓名, 性別, 宿舍電話 執行此過程,查詢'101'宿舍情況 (二) 現有關系資料庫如下: 資料庫名:學生成績資料庫學生表(學號 char(6),姓名,性別,民族,身份證號) 課程表(課號 char(6),名稱) 成績表(ID,學號,課號,分數) 用SQL語言實現下列功能的sql語句代碼:1.創建資料庫[學生成績資料庫]代碼 ;2.創建[課程表]代碼 ; 課程表(課號 char(6),名稱) 要求使用:主鍵(課號)、非空(名稱)3. 創建[學生表]代碼 ; 學生表(學號 char(6),姓名,性別,民族,身份證號) 要求使用:主鍵(學號)、默認(民族)、非空(民族,姓名)、唯一(身份證號)、檢查(性別)4. 創建[成績表]代碼 ; 成績表(ID,學號,課號,分數) 要求使用:主鍵(課號)、外鍵(成績表.學號,成績表.課號)、檢查(分數),自動編號(ID)5. 將下列課程信息添加到課程表的代碼 課號 課程名稱 100001 大學語文 100002 大學英語 100003 西班牙語 修改 課號為100002的課程名稱:實用英語 刪除 課號為100003的課程信息 6. 寫出創建:成績表視圖(學號,姓名,課號,課程名稱,分數)的代碼; 8. 寫出創建:某門課程高低均分 計算某門課程成績最高分、最低分、平均分 存儲過程以及執行的代碼; 執行:所有修 實用英語 這門學生的最高分、最低分、平均分;9. 檢索姓李的女同學的情況:姓名、性別、民族。 10.檢索有一門或一門以上課程成績大於等於90分的所有學生的信息,包括學號、姓名。 (三)有一個[學生課程]資料庫,資料庫中包括三個表:學生表Student由學號(Sno)、姓名(Sname)、性別(Ssex)、年齡(Sage)、所在系(Sdept)五個屬性組成,記為: Student(Sno,Sname,Ssex,Sage,Sdept) ,Sno 為關鍵字。課程表Course由課程號(Cno)、課程名(Cname)、先修課號(Cpno)、學分(Ccredit)四個屬性組成,記為:Course(Cno,Cname,Cpno,Ccredit) Cno為關鍵字。 成績表SG由學號(Sno)、課程號(Cno)、成績(Grade)三個屬性組成,記為:SG(Sno Cno, Grade) (SNO, CNO)為關鍵字。用SQL語言實現下列功能:1.建立學生表Student,其中學號屬性不能為空,並且其值是唯一的。2.向Student表增加「入學時間(Scome)」列,其數據類型為日期型。3.查詢選修了3號課程的學生的學號及其成績,查詢結果按分數的降序排列。4.查詢學習1號課程的學生最高分數、平均成績。5.查詢與「李洋」在同一個系學習的學生。6.將計算機系全體學生的成績置零。
有些秘密是男人永遠不會說的,所以就不要再問了,因為再問,他們給的答案也不會是真的!
1、男人很容易喜歡一個女人,卻不輕易深愛一個女人。
2、男人在感情的王國里,絕對是個昏君。女人只要肯奉承,他什麼都答應。
3、男人普遍喜歡外表溫柔的女子,寧願把精力花在事業或其他地方,也不願全用來征服女人。
4、男人都不太重視對自己太好的女人。
5、男人都怕女人死纏爛打,但喜歡用同樣的方式對付沒追上的女人。
6、男人的夢想之一,是擁有可以超越友誼界限的紅顏知己。
7、男人會以很理性的態度取捨愛情,就算他感性上很愛一個人,但當他清楚她並非一個好妻子時,他會放棄她,另找合適家居生活的那一個。男人認為戀愛和結婚是兩回事,很多時候,他拖延結婚,根本原因就是他認為身邊的女人不是想像中的好妻子。
8、男人對妻子的要求,可能比對戀人更低——在外型上,在性格上則更高。
9、懂得欣賞聰明女人的男人不多,和她們在一起,男人總覺得缺乏安全感受。
10、當有喜歡的女人在場時,男人會有如下表現:話多;顯得聰明些;比平日慷慨;會把話題扯到得意成就上;會刻意顯露平時少見的好心腸;多說一些自以為好笑的笑話引大家發笑。
11、一個男人同時是大男人和小男人的化身。大男人的他,希望女人完全遷就他,令他放心;小男人的他,意識到自己懦弱無能的一面,猶豫不決。說穿了,他們很多都是忌妒心重的小器鬼,又像孩子般容易被哄騙。
12、男人追求女人的時候願意割捨一切自由,追到了越來越感到自由的重要性。
13、男人內心隱藏著狩獵心態,追捕,得到後就要馴服她,讓她變成可在家飼養的乖乖動物。
14、男人都有愛當英雄的自大心態,所以很容易愛上向他訴苦的女人。
15、男人希望身邊的女人明白:帶著同一個女人去所有地方,實在是一件很悶的事(或許女人也這樣覺得吧,只是不好意思說),所以和其他女人適度約會,是調劑和放鬆,完全可以沒有其他企圖。
16、兩性關系中,女人需要男人告訴她,他願意為她做任何犧牲,男人則需要女人告訴他,他很能幹。
17、男人自以為是的多情,常常是女人眼中不折不扣的薄倖。
18、在男人心底,親熱到哪個程度,就是和女人的戀情發展到什麼程度。
19、男人每隔一段時間,就有情緒和體力跌到谷底的幾天,不想見任何人,躲起來翻翻書,聽聽音樂,看看影碟或狂打電玩發泄。
20、有過戀愛經驗的男人都知道:女人是不能不騙的,類似像:「我會永遠愛你」,「我一直都會像現在這樣疼你」,「什麼時候需要我,一個電話我就立刻趕來」,「我以後再也不會像愛你這樣去愛另外一個人」這種話是必須要說但永遠堅持不了的「騙話」,誰讓女人這么愛聽呢!
21、男人遇上舊情人多半會自作多情,以為與自己有過感情的人,內心總會保存一份情,幻想愛過他的女人永遠愛他。女人只會美化眼前的男人,男人卻不自覺地美化逝去的戀情。所以男人比女人更認同:分手還是朋友。不管是甩人還是被甩,男人多半願意與前女友繼續保持聯絡。
22、女人在意男友以前的女友,男人卻在意女人離開他後找個什麼樣的男友。如果分手後仍是朋友的,他會時不時批評她的男友。
23、男人跌入愛河,很少問她的過去,不太關心她和哪種男人談過戀愛,因為男人較注重女人的外表——外表就是現在。
24、男人不願聽心上人的舊戀情,因為一想到自己愛的人之前和其他男人有過肌膚之親,就難以忍受。
25、面對兩個對自己有愛意的人,女人會在徘徊中選擇,男人不會為此煩惱——他其實只想同時追上兩個人呢!
26、男人愛上一個女人,不一定對她有強烈的親熱沖動,反倒對一些他只是喜歡而不愛的女人,沖動更大些。
27、男人很容易被女人吸引,但他分得出哪種渴求出於性還是愛,大概知道能從她身上得到什麼。
28、女人主動示愛,對男人來說,唯一的損失就是縮短了那段朦朦朧朧,若有若無的浪漫日子。
29、男人相信證明自身出色的重要表現之一是:擁有更多的女人。事業上越出色的男人,往往需要更多女人的仰慕和傾心以體現他的超凡脫俗。
30、男人在分手問題上拖泥帶水,其實是想把去留的難題丟給女人,減少自己決定帶來的內疚感。
31、男人說的「未來」是6個月到1年時間,女人的定義則可以是10年到50年。當男人愛上一個女人,他只會想像如何在短暫的未來與她親密發展;女人則幻想到戀愛,結婚,生孩子乃至如何白頭到老。
32、男人基本是都小器,大方是裝出來的。表面上他們不拘小節,其實內心和女人一樣,計算得清清楚楚。
33、女性較容易坦白心事,男人恰恰相反。遇到煩惱,他們找個別好友傾訴時,不會說得很完整,總會給自己留最後一點面子。男人的傾訴都是經過包裝或刻意切碎的,不讓一個人知道全部。這也是女人很難了解男人的原因——他們根本不想被人徹底了解。
34、一個男人可以愛上兩個女人,但究竟喜歡哪個多一點,他多半分不清楚。
35、男人看待婚外情比女人實際,因為他有更多機會涉及婚外情,而且他心裡明白——花心隱藏在男人的天性中。
36、男人要變心,其實和女人是否注意保持美麗儀表沒直接關系,那隻是他的借口之一。當他厭倦一個女人,不管她多漂亮,只要是她以外的任何女人,他都覺得比她有吸引力。
37、成熟男人對於崇拜他的少女,抵抗力是相當弱的。
38、男人年紀越大,擇偶越隨心所欲,乃至不顧他人的任何想法。
39、對許多男人來說,真愛意味著——愛情減去性。換句話,男人只要覺得女人缺乏性的吸引力,就可以一直跟她做單純的朋友。
40、男人在有尋求親熱的身體沖動那一刻,對異性的要求忽然降低,他會覺得一個平時普通的女人很可愛,甚至很性感。不過等沖動一旦消退,他立刻恢復了習慣的審美判斷。
41、男人對女人的愛天天快遞查詢 http://www.paijian.com/tt.html總是混合了生理沖動,親熱前他覺得女人什麼都好,之後卻可以無半點留戀,但為了不背負太多罪惡感,他們可以裝作溫柔地在事後繼續吐露纏綿的情話。
42、男人很容易愛上賣弄風情,看起來唾手可得的女人,因為他覺得有更多機會觸摸。
D. 我正在學習sql server 2005,我想找點練習題。
我這倒是有兩個;練習 但是是word文檔 不好復制進來 只能復制點筆試題 要機試題請發給郵件給我 我給你傳過來 郵件中說明 是目的 不然我不知道會當垃圾郵件處理的 我的郵箱是 [email protected]
針對以下題目請選擇正確答案(每道題目有一個或多個正確的答案)。針對每一道題目,所有答案都選對,則該題得分,否則不得分。
1. 資料庫設計的最終目標不包括()。 (選擇兩項)BD
A. 高效
B. 滿足範式要求
C. 安全
D. 表現設計者的技術實力
E. 易用
F. 便於將來擴展功能和容量
2. 有關數據冗餘說法錯誤的是()。(選擇一項)C
A. 資料庫中,數據存在副本的現象,就是數據冗餘。
B. 通過分類存儲,可以有效減少數據冗餘,但是會增加數據查找的復雜性。
C. 在資料庫設計階段,一定要盡最大可能避免數據冗餘,最好做到無數據冗餘。
D. 數據冗餘通常是由於資料庫設計引起的。
3. 用於表示資料庫實體之間的關系圖是()。A
A. 實體關系圖
B. 數據模型圖
C. 實體分類圖
D. 以上都不是
4. 假定有一個用戶表,表中包含欄位:userid (int)、username (varchar)、 password(varchar)等,該表需要設置主鍵,以下說法正確的是()。(選擇兩項)AB
A. 如果不能有同時重復的username和password,那麼username和password可以組合在一起作為主鍵。
B. 此表設計主鍵時,根據選擇主鍵的最小性原則,最好採用userid作為主鍵。
C. 此表設計主鍵時,根據選擇主鍵的最小性原則,最好採用username和password作為組合鍵。
D. 如果採用userid作為主鍵,那麼在userid列輸入的數值,允許為空。
5. 語句 alter table userinfo add constraint uq_userid unique(userid)執行成功後,為userinfo表的()欄位添加了()約束。B
A. userid 主鍵
B. userid 唯一
C. uq_userid 外鍵
D. uq_userid 檢查
6. 運行如下T-SQL,結果返回包含()的記錄集。A
create table scores
(
scoreid int identity(1,2),
score numeric(4,2) not null,
courseid int
)
insert int scores values(90.5,null);
insert into scores values(78.234,2);
select * from scores;
A. 1 90.50 NULL
3 78.23 2
B. 1 78.23 2
C. 1 90.50
D. 1 90.50
2 78.23 2
7. 關於子查詢,以下說法正確的是()。(選擇兩項)AC
A. 一般來說,表連接都可以用子查詢替換。
B. 一般來說,子查詢都可以用表連接替換。
C. 相對於表連接,子查詢適合於作為查詢的篩選條件。
D. 相對於表連接,子查詢適合於查看多表的數據。
8. 創建存儲過程如下:
create procere scoreproc
@scoreid int,@score numeric(4,2) output
as
select @score = score from scores where scoreid=@scoreid
正確的調用是:C
A. exec scoreproc 1,@myscore output
print @myscore
B. exec scoreproc @id = 1,@myscore output
print @myscore
C. declare @myscore numeric(4,2)
exec scoreproc 1,@myscore output
print @myscore
D. declare @myscore numeric(4,2)
exec scoreproc @id = 1,@myscore output
print @myscore
9. 假設需要設計一張表,記錄各個作者著作的所有圖書信息,表的結構如下:作者(作者名稱,圖書1,版本1,書價1,圖書二,版本2,書價2,…),該表最多符合第()範式。A
A. 一
B. 二
C. 三
D. 不符合任何範式
10. 一個學生只能就讀於一個班級,而一個班級可以同時容納多個學生,學生與班級之間是()的關系。C
A. 一對一
B. 一對多
C. 多對一
D. 多對多
11. E-R圖中,關系集用下面()來表示。B
A. 矩形
B. 橢圓形
C. 菱形
D. 圓形
12. 有如下表結構,#號打頭欄位代表主鍵或組合主鍵,一份訂單可以訂購多種產品。
產品:#產品編號,產品名稱,產品價格;
訂單:#訂單編號,#產品編號,訂購日期,訂購數量;(訂單編號與產品編號是組合主鍵)
該表最高符合第()範式。B
A. 一
B. 二
C. 三
D. 未規范化的
13. 有如下表結構,#號打頭欄位代表主鍵或組合主鍵,一份訂單可以訂購多種產品。
產品:#產品編號,產品名稱,產品價格;
訂單:#訂單編號,總價,訂購日期;
訂單子項: #子項編號,訂單編號,產品編號,訂購數量;
該表最高符合第()範式。C
A. 一
B. 二
C. 三
D. 未規范化的
14. 創建sql語句如下:
create table userInfo
(
userId int identity(-1,1), 第1行
userName nvarchar(20) not null, 第2行
cardNO char not null, 第3行
age smallint(2), 第4行
address ntext(300) 第5行
)
執行時,會在第()行出現錯誤。(選擇兩項)DE
A. 1
B. 2
C. 3
D. 4
E. 5
15. 以下關於規范設計的描述正確的是()。(選擇兩項)AD
A. 規范設計的主要目的是消除數據冗餘。
B. 規范設計往往會增加資料庫的性能。
C. 設計資料庫時,規范化程度越高越好。
D. 在規范化資料庫時,易於維護資料庫的完整性。
16. 關於存儲過程,以下說法正確的是()。(選擇一項)A
A. 不能在存儲過程中使用CREATE VIEW命令。
B. T-SQL批代碼的執行速度要快於存儲過程。
C. 存儲過程必須帶有參數。
D. 存儲過程不能返回結果集。
17. 已知有scores表,scoreid為主鍵,現在表中共有10條記錄,其中一條scoreid=21。
創建視圖:
create view view_scores
as
select * from scores
執行如下命令:
delete from view_scores where (scoreid = 21)
再執行如下命令:
select * from scores
select * from view_scores
假定上述命令全部執行成功,將各自返回()()行記錄。D
A. 10,10
B. 10,9
C. 9,10
D. 9,9
18. 設計用戶表時,身份證號為固定18位長,對該欄位最好採用()數據類型。(選擇一項)B
A. int
B. char
C. varchar
D. text
19. 授予用戶someone對scores表的一些許可權,正確的授權語句是()。(選擇一項)C
A. grant insert , update to talbe scores on someone
B. grant insert and update to table scores on someone
C. grant insert , update on scores to someone
D. grant insert and update on scores to someone
20. 建立如下資料庫表:
create talbe Department(
departID int not null primary key,
deptName varchar(20) not null
)
create table Employee(
employeeID int not null,
deptID int not null,
name varchar(20) not null
)
要想保證Employee表中每一個雇員(employee)是唯一的,且只能屬於在Department表中已經存在的部門,最有的做法是()。(選擇一項)B
A. 把employeeID和deptID設為組合主鍵。
B. 把employeeID設為主鍵,同時在deptID列上創建一個外鍵約束。
C. 把employeeID設為主鍵,同時在deptID列上創建一個檢查約束。
D. 在deptID列上創建一個唯一約束,同時在deptID列上創建一個外鍵約束。
21. 建立一張員工表,當向表中插入數據時,若不提供入職時間,就把系統當前時間作為員工入職時間插入資料庫,以下說法正確的是()。(選擇一項)D
A. 約束不能使用各種函數,所以無法實現要求的功能。
B. 可以使用CHECK約束實現,默認值採用日期函數getDate()。
C. 入職時間必須設為日期類型。
D. 可以使用DEFAULT約束實現,默認值採用日期函數getDate()。
22. 為了加快對某表查詢的速度,應對此表建立()。(選擇一項)D
A. 約束
B. 存儲過程
C. 規則
D. 索引
23. 假設有表student(學生)的設計如下:
id () 標識列
name () 學生姓名
address () 學生地址
department () 所屬院系
departmentHead () 學院主管
該表最高滿足()範式。(選擇一項)B
A. 一
B. 二
C. 三
D. 不滿足任何範式
24. 為資料庫中一個或者多個表中的數據提供另外一種查看方式的邏輯表被稱為()。(選擇一項)C
A. 存儲過程
B. 資料庫關系圖
C. 視圖
D. 表
25. 要建立一個教師表,包含姓名、職稱、級別等欄位。若插入數據時,級別欄位如果不輸入,預設值為「講師」,最合適的實現方式是()。A
A. 為「級別」欄位建立default約束。
B. 為「級別」欄位建立check約束。
C. 為教師表數據輸入編寫一個存儲過程進行控制。
26. 現有訂單表orders,包含數據如下表。若查詢既訂購了產品p01,又訂購了產品p02的顧客編號,可以執行以下()sql語句。(選擇兩項)CD
A. select distinct (cid) from orders ol where ol.pid in ('p01','p02')
B. select distinct (cid) from orders ol where ol.pid = 'p01' and ol.pid = 'p02'
C. select distinct (o1.cid) from orders o1,orders o2 where o1.pid='p01' and o2.pid='p02' and o2.cid = o1.cid
D. select distinct(cid) from orders where pid = 'p01' and cid in(select cid from orders where pid='p02')
27. 關於聚集索引,以下()說法是錯誤的。(選擇兩項)CD
A. 一個表最多隻能創建一個聚集索引。
B. 聚集索引比非聚集索引有更快的訪問速度。
C. 主鍵一定是聚集索引。
D. 創建了聚集索引的列不允許有重復值。
28. 關於視圖,以下()說法是錯誤的。(選擇一項)C
A. 使用視圖,可以簡化數據的使用。
B. 使用視圖,可以保護敏感數據。
C. 視圖是一種虛擬表,視圖中的數據只能來源於物理數據表,不能來源於其他視圖。
D. 視圖中指存儲了查詢語句,並不包含任何數據。
29. 常用的存儲過程不包括()。(選擇一項)D
A. sp_tables
B. sp_columns
C. sp_stored_proceres
D. sp_renametable
30. 對事務的描述錯誤的是()。(選擇2項)BD
A. 一個事務中的所有命令作為一個整體提交或者回滾。
B. 如果兩個並發事務要同時修改一個表,可能產生死鎖。
C. SQL Server默認將每條單獨的T-SQL語句視為一個事務。
D. 事務必須使用begin transaction來明確制定事務的開始。
31. 分數表scores設計如下:
courseID(課程編號)
studentID(學生編號)
score(分數)
另有一個學生信息表student,包含studentID,sname(學生姓名)。
已知並非所有學生都參加了courseID為0001的考試,現在查詢所有參加0001號課程考試及格學生的學生姓名,下面正確的是()。(選擇一項)A
A. select sname from student where studentID in (select studentID from scores where courseID = 0001 and score>=60)
B. select sname from student where studentID = (select studentID from scores where courseID = 0001 and score>=60)
C. select sname from student where studentID not in (select studentID from scores where courseID = 0001 and score<=60)
D. select sname from student where studentID exists (select studentID from scores where courseID = 0001 and score>=60)
32. 在()的列上更適合創建索引。(選擇兩項)AD
A. 需要對數據進行排序
B. 具有默認值
C. 頻繁更改
D. 頻繁搜索
33. SQL Server資料庫有2種登錄認證方式。其中在()方式下,需要客戶端應用程序連接時提供登錄時需要用戶標識和密碼。C
A. Windows身份認證。
B. 以超級用戶身份登錄。
C. SQL Server身份認證。
D. 以系統身份登錄時。
34. SQL Server資料庫中,下列不屬於T-SQL事務管理語句的是()。(選擇一項)B
A. BEGIN TRANSACTION;
B. END TRANSACTION;
C. COMMIT TRANSACTION;
D. ROLLBACK TRANSACTION;
35. 要建立一個約束,保證用戶表(user)中年齡(age)必須在16歲以上,下面語句正確的是()。(選擇一項)A
A. alter table user add constraint ck_age CHECK(age>16)
B. alter table user add constraint df_age DEFAULT(16) for age
C. alter table user add constraint uq_age UNIQUE(age>16)
D. alter table user add constraint df_age DEFAULT(16)
36. SQL Server資料庫中,包含兩個表:Order訂單表,Item訂單子項目表。當一個新訂單被加入時,數據要分別保存到Order和Item表,要保證數據完整性,可以使用以下()語句。(選擇一項)C
A. BEGIN TRASACTION
INSERT INTO Order VALUES(此處省略)
INSERT INTO Items VALUES(此處省略)
END TRASACTION
B. BEGIN TRASACTION
INSERT INTO Order VALUES(此處省略)
INSERT INTO Items VALUES(此處省略)
IF(@@Erro = 0)
COMMIT TRASACTION
ELSE
ROLLBACK TRASACTION
C. BEGIN TRASACTION
INSERT INTO Order VALUES(此處省略)
IF(@@Erro = 0)
INSERT INTO Items VALUES(此處省略)
IF(@@Erro = 0)
COMMIT TRASACTION
ELSE
ROLLBACK TRASACTION
ELSE
ROLLBACK TRASACTION
D. BEGIN TRASACTION
INSERT INTO Order VALUES(此處省略)
INSERT INTO Items VALUES(此處省略)
IF(@@Erro <> 0)
ROLLBACK TRASACTION
37. 現有一個學生信息表student,包含主鍵studentID(學生編號)。又有分數表scores,包含studentID(學生編號)、以及score(考試分數)。已知student表中共有50個學生,有45人參加了考試(分數存在scores表中),其中10人不及格。執行以下SQL語句:
select * from student where exists(select studentId form score where score<60)
可返回()條記錄。(選擇一項)A
A. 50
B. 45
C. 10
D. 0
38. create table student
(
id int identity(1,1),
name varchar(20)
)
alter table student add constraint uq_name unique(name)
insert into student values(null)
insert into student values(null)
insert into student values('jack')
insert into student values('jack')
依次執行以上SQL語句後,student表中存在()行記錄。B
A. 1
B. 2
C. 3
D. 4
39. 已知employee表中具有默認約束df_email,刪除該約束的語句為()。(選擇一項)A
A. alter talbe employee drop constraint df_email
B. alter talbe employee remove constraint df_email
C. alter talbe employee delete constraint df_email
D. remove constraint df_email from talbe employee
40. 在employee表的firstname欄位上建立的非聚集索引的物理效果是()。(選擇一項)D
A. 所有的行按照firstname欄位值升序排列並物理地存儲在數據頁中
B. 索引中的項按照索引鍵值的順序存儲,但表中信息的順序保持不變。
C. 所有的行按照firstname欄位值降序排列並物理地存儲在數據頁中
D. 所有的行被物理地存儲在數據頁上,並且根據firstname欄位按照索引建立時指定的順序排列
41. 創建存儲過程的片斷如下:創建成功後,以下()調用方式是正確的。(選擇一項)B
create procere proc_score
@passed int = 60,
@count int output
as
select count(*) from scores where score < @passed
A. execute proc_score @count int output
B. declare @count int
execute proc_score 70,@count output
C. declare @count int output
execute proc_score 70,@count
D. execute proc_score 70,@count output
42. 現有學生表Students和用戶表Users,兩表中的數據如下:
執行sql語句:select * from Users union select * from Students。下列說法正確的是()。(選擇一項)A
Users Students
userID(int) name (varchar) studentID(int) age(int)
1 Wen 1 80
2 Shu 2 75
3 Gao
4 Shui
A. 出現錯誤:name與age不是同一數據類型。
B. 正確執行,返回6行4 列。
C. 正確執行,返回6行2 列。
D. 正確執行,返回4行2列。
43. 假設有scores表的設計如下:
ID(編號,主鍵)
StudentID(學生編號)
CourseID(課程編號)
Score(分數)
現在要查詢參加過至少兩門課程考試的學生各門課程的平均成績。以下SQL語句正確的是()。(選擇一項)A
A. select StudentID,avg(score) from scores group by StudentID having count(studentID)>1
B. select StudentID,avg(score) from scores group by StudentID where count(studentID)>1
C. select StudentID,avg(score) from scores group by StudentID where count(studentID)>1 group by StudentID
D. select StudentID,avg(score) from scores having count(studentID)>1
44. 假設orders表中存在orderid等於1的紀錄,執行下面T-SQL:
begin transaction
delete from orders where orderid = 1
if (@@error<>0)
rollback transaction
rollback transaction
以下說法正確的是()。(選擇一項)B
A. 執行成功,orderid為1的記錄被永久刪除。
B. 執行成功,orders表沒有任何變化。
C. 執行時出現錯誤。
D. 執行成功,但事務處理並沒有結束。
45. 項目開發需要經過幾個階段,繪制資料庫的E-R圖應該在()階段進行。(選擇一項)B
A. 需求分析
B. 概要設計
C. 詳細設計
D. 代碼編寫
46. 將E-R圖轉換為表的過程中,如果實體之間存在多對多的關系,通常的做法是()。(選擇一項)B
A. 在兩個實體間建立主外鍵關系。
B. 在兩個實體間建立關聯表,把一個多對多的關系分解成兩個一對多的關系。
C. 在兩個實體間建立關聯表,把一個多對多的關系分解成兩個一對一的關系。
D. 在兩個實體間不建立任何關系。
47. 某個欄位希望存放電話號碼,該欄位應選用()數據類型。
A. char(10)
B. text
C. varchar(13)
D. int
48. 運行以下語句得到的結果是()C
use javaWebDB
create table numbers
(
N1 INT,
N2 NUMERIC(5,0),
N3 NUMERIC(4,2),
)
INSERT numbers VALUES(100,100.5,10.5)
select * from numbers
A. 返回100,100,10.5的結果集
B. 返回100,100,10.50的結果集
C. 返回100,101,10.50的結果集
D. 語句無法全部成功執行
49. 資料庫事務處理具有如下特徵(),被簡稱為ACID。(選擇四項)ACEF
A. 原子性
B. 安全性
C. 隔離性
D. 完整性
E. 持久性
F. 一致性
50. SQL語言集數據查詢、數據操縱、數據定義和數據控制功能於一體,其中,CREATE、DROP、ALTER語句是實現哪種功能( )。C
A. 數據查詢
B. 數據操縱
C. 數據定義
D. 數據控制
E. 面試題目(sql)
1、忍不住想說一句,因為第一題中的欄位類型是
【日期型】,而各種資料庫操作日期型數據有不同的方法,沒有一種共通的方法,所以脫離了資料庫而言沒有一種共通的sql。
2、select
ID,NAME,ADDRESS,PHONE,LOGDATE
from
T
where
ID
in(
select
ID
from
T
group
by
NAME
having
count(*)>1)
order
by
NAME;
3、delete
from
T
where
ID
not
in
(select
min(id)
from
T
group
by
name);
4、update
T
set
T.ADDRESS=(select
E.ADDRESS
from
E
where
E.NAME=T.NAME),
T.PHONE=(select
E.PHONE
from
E
where
E.NAME=T.NAME);
5、這個不同的資料庫也有不同的處理方法,不能脫離資料庫談了。
如:SqlServer或者access可以使用
top
oracle可以使用
rownum
等
---
以上,希望對你有所幫助。
F. sql期末考試試題及答案
查詢題:1).select*fromEMPwhereDEPTNO='20';2).select*fromEMPwhereENAMElike'MA%';3).select*fromEMPorderbyJOB;4).selectb.DNAME,COUNT(a.*)asnumfromEMPaleftjoinDEPTbona.DEPTNO=b.DEPTNOgroupbyb.DNAME5).select*fromEMPwhereSAL>(selectmax(SAL)asSALfromEMPwhereDEPTNO='20');程序題:1).函數:CREATEFUNCTION[SumN](@nINT)RETURNSINTASBEGINdeclare@outINT,@iintset@out=0set@i=1while@i<=@nbeginset@out=@out+@iset@i=@i+1endreturn(@out)END2).存儲過程:CREATEPROCEDURE[emp_info](@nDECIMAL(2))ASselect*fromEMPwhereDEPTNO=@n視圖和索引1).CREATEVIEW[emp10_view]ASselect*fromEMPwhereDEPTNO='10'2).ALTERTABLE[EMP]ADDCONSTRAINT[IX_Empno]PRIMARYKEYCLUSTERED([empno]ASC)
G. sql面試題50題(mysql版)
--插入學生表測試數據
insert into Student values(༽' , '趙雷' , -01-01' , '男');
insert into Student values(༾' , '錢電' , -12-21' , '男');
insert into Student values(༿' , '孫風' , -05-20' , '男');
insert into Student values(ཀ' , '李雲' , -08-06' , '男');
insert into Student values(ཁ' , '周梅' , -12-01' , '女');
insert into Student values(ག' , '吳蘭' , -03-01' , '女');
insert into Student values(གྷ' , '鄭竹' , -07-01' , '女');
insert into Student values(ང' , '王菊' , -01-20' , '女');
--課程表測試數據
insert into Course values(༽' , '語文' , ༾');
insert into Course values(༾' , '數學' , ༽');
insert into Course values(༿' , '英語' , ༿');
--教師表測試數據
insert into Teacher values(༽' , '張三');
insert into Teacher values(༾' , '李四');
insert into Teacher values(༿' , '王五');
--成績表測試數據
insert into Score values(༽' , ༽' , 80);
insert into Score values(༽' , ༾' , 90);
insert into Score values(༽' , ༿' , 99);
insert into Score values(༾' , ༽' , 70);
insert into Score values(༾' , ༾' , 60);
insert into Score values(༾' , ༿' , 80);
insert into Score values(༿' , ༽' , 80);
insert into Score values(༿' , ༾' , 80);
insert into Score values(༿' , ༿' , 80);
insert into Score values(ཀ' , ༽' , 50);
insert into Score values(ཀ' , ༾' , 30);
insert into Score values(ཀ' , ༿' , 20);
insert into Score values(ཁ' , ༽' , 76);
insert into Score values(ཁ' , ༾' , 87);
insert into Score values(ག' , ༽' , 31);
insert into Score values(ག' , ༿' , 34);
insert into Score values(གྷ' , ༾' , 89);
insert into Score values(གྷ' , ༿' , 98);
-- 1、查詢"01"課程比"02"課程成績高的學生的信息及課程分數
select c.*,a.s_score as 01課程score,b.s_score as 02課程score from
score a,score b
left join student c
on b.s_id = c.s_id
where a.s_id = b.s_id and a.c_id = ༽' and b.c_id = ༾' and a.s_score > b.s_score;
-- 2、查詢"01"課程比"02"課程成績低的學生的信息及課程分數
select a.* ,b.s_score as 01課程,c.s_score as 02課程 from student a
join score b
on a.s_id=b.s_id and b.c_id = ༽'
left join score c
on b.s_id = c.s_id and c.c_id = ༾'
where b.s_score < c.s_score ;
-- 3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績
select a.s_id,a.s_name,round(avg(b.s_score),2) as 平均成績 from student a
join score b
on a.s_id = b.s_id
group by b.s_id having 平均成績 >= 60;
備註:round[avg(成績),1]里,round是四捨五入函數,1代表保留1位小數
-- 4、查詢平均成績小於60分的同學的學生編號和學生姓名和平均成績
-- (包括有成績的和無成績的)
select b. ,round(avg(a.s_score),2) as 平均成績 from
student b
left join score a on b.s_id = a.s_id group by a.s_id having 平均成績 < 60
union
select b. ,0 as 平衡成績 from student b where b.s_id not in (select s_id from score);
-- 5、查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績
select a.s_id,a.s_name,count(b.c_id) as 選課總數 ,sum(b.s_score) as 總分 from student a
left join score b
on a.s_id = b.s_id group by s_id ;
-- 6、查詢"李"姓老師的數量
select count(*) as 李姓老師數量 from teacher where t_name like '李%'
-- 7、查詢學過"張三"老師授課的同學的信息
select a.* from student a join score b
on a.s_id = b.s_id
where b.c_id in (select c.c_id from course c
join teacher d on c.t_id = d.t_id where d.t_name = '張三');
-- 8、查詢沒學過"張三"老師授課的同學的信息
select a.* from student a left join score b on a.s_id = b.s_id where a.s_id not in
(select s_id from score where c_id =
(select c_id from course where t_id =
(select t_id from teacher where t_name = '張
三'))) group by a.s_id;
-- 9、查詢學過編號為"01"並且也學過編號為"02"的課程的同學的信息
select * from student where s_id in
(select a.s_id from score a join score b on a.s_id = b.s_id
where a.c_id = ༽' and b.c_id = ༾');
-- 10、查詢學過編號為"01"但是沒有學過編號為"02"的課程的同學的信息
select * from student where s_id in
(select s_id from score where c_id = ༽' )
and s_id not in (select s_id from score where c_id = ༾' );
-- 11、查詢沒有學全所有課程的同學的信息
select * from student where s_id not in
(select s_id from score group by s_id having count(c_id) = 3);
-- 12、查詢至少有一門課與學號為"01"的同學所學相同的同學的信息
select distinct a.* from student a left join score b
on a.s_id = b.s_id where b.c_id in
(select c_id from score where s_id = ༽') and a.s_id != ༽' ;
注意:distinct是去重的
-- 13、查詢和"01"號的同學學習的課程完全相同的其他同學的信息
select * from student where s_id in
(select s_id from score group by s_id having count(c_id) =
(select count(c_id) from score where s_id = ༽') and s_id not in
(select s_id from score where c_id not in
(select c_id from score where s_id = ༽')) and s_id != ༽');
-- 14、查詢沒學過"張三"老師講授的任一門課程的學生姓名
select s_name from student where s_id not in
(select s_id from score where c_id in
(select c_id from course where t_id in
(select t_id from teacher where t_name ='張三')));
-- 15、查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
select a.s_id ,b.s_name,round(avg(a.s_score),2) as 平均成績 from score a
left join student b on a.s_id = b.s_id
where s_score < 60 group by s_id having count(1) >=2;
或者試試
select a.s_id ,b.s_name,round(avg(a.s_score),2) as 平均成績 from score a
left join student b on a.s_id = b.s_id
where a.s_score < 60 group by a.s_id having count(*) >=2;
-- 16、檢索"01"課程分數小於60,按分數降序排列的學生信息
select a.* ,b.c_id ,b.s_score from student a
left join score b on a.s_id = b.s_id
where b.c_id = ༽' and b.s_score < 60
order by b.s_score desc;
-- 17、按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
select a.s_name ,
sum(case when b.c_id = ༽' then s_score else null end ) as 語文,
sum(case when b.c_id = ༾' then s_score else null end ) as 數學,
sum(case when b.c_id = ༿' then s_score else null end ) as 英語,
round(avg(s_score),2) as 平均成績
from student a left join score b on a.s_id = b.s_id group by a.s_name
order by 平均成績 desc;
-- 18.查詢各科成績最高分、最低分和平均分:以如下形式顯示:課程ID,課程name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率
--及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90
select b.c_id,b.c_name,
max(a.s_score) as 最高分,
min(a.s_score) as 最低分,
round(avg(a.s_score),2) as 平均分,
round(sum(case when a.s_score>= 60 then 1 else 0 end)/count(s_id),2) as 及格率 ,
round(sum(case when a.s_score>= 70 and a.s_score <80 then 1 else 0 end)/count(s_id),2) as 中等率,
round(sum(case when a.s_score>= 80 and a.s_score <90 then 1 else 0 end)/count(s_id),2) as 優良率,
round(sum(case when a.s_score>= 90 then 1 else 0 end)/count(s_id),2) as 優秀率
from score a
left join course b
on a.c_id = b.c_id group by b.c_id;
-- 19、按各科成績進行排序,並顯示排名
第一種:
set @pre_c_id:= ༽'
set @rank:=0;
select tb2.s_id ,tb2.c_id,tb2.s_score,tb2.排名 from
(select *,(case when tb1.c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1.c_id then @pre_c_id else @pre_c_id:=tb1.c_id end ) as pre_c_id
from
(select * from score order by c_id,s_score desc) tb1 )tb2;
如果看不懂用第二種方法:
SELECT a.c_id,a.s_id,a.s_score,COUNT(b.s_score)+1 AS 排名
FROM score a LEFT JOIN score b ON a.s_score<b.s_score AND a.c_id = b.c_id
GROUP BY a.c_id,a.s_id,a.s_score ORDER BY a.c_id,排名,a.s_id ASC
-- 20、查詢學生的總成績並進行排名
set @rank:=0;
select * ,(@rank:=@rank+1) as rank from
(select s_id ,sum(s_score) as 總成績 from score
group by s_id order by 總成績 desc) tb1;
-- 21、查詢不同老師所教不同課程平均分從高到低顯示
select a.c_id, d.t_name,round(avg(a.s_score)) as 平均分 from score a
left join student b on a.s_id = b.s_id
left join course c on a.c_id = c.c_id
left join teacher d on c.t_id = d.t_id group by a.c_id
order by 平均分 desc;
-- 22、查詢所有課程的成績第2名到第3名的學生信息及該課程成績
set @pre_c_id:= ༽'
set @rank:=0;
select b.s_name,tb2.s_id ,tb2.c_id,tb2.s_score,tb2.排名 from
(select *,(case when tb1.c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1.c_id then @pre_c_id else @pre_c_id:=tb1.c_id end ) as pre_c_id
from
(select * from score order by c_id,s_score desc) tb1 )tb2 join student b on tb2.s_id = b.s_id where 排名 = 2 or 排名 =3;
-- 23、統計各科成績各分數段人數:課程編號,課程名稱,[100-85],(85-70],(70-60],(0-60]及所佔百分比
select b.c_id,b.c_name ,
sum(case when a.s_score >=85 then 1 else 0 end) as 100-85 ,
concat(round(100 sum(case when a.s_score >=85 then 1 else 0 end)/count( ),2), '%') as 百分比,
sum(case when a.s_score <85 and a.s_score >=70 then 1 else 0 end) as 85-70 ,
concat(round(100 sum(case when a.s_score <85 and a.s_score >=70 then 1 else 0 end)/count( ),2),'%') as 百分比,
sum(case when a.s_score <70 and a.s_score >=60 then 1 else 0 end) as 70-60 ,
concat(round(100 sum(case when a.s_score <70 and a.s_score >=60 then 1 else 0 end)/count( ),2) ,'%')as 百分比,
sum(case when a.s_score <60 and a.s_score >=0 then 1 else 0 end) as 60-0 ,
concat(round(100 sum(case when a.s_score <60 and a.s_score >=0 then 1
else 0 end)/count( ),2),'%') as 百分比
from score a left join course b on a.c_id = b.c_id group by b.c_id;
-- 24、查詢學生平均成績及其名次
select tb1.*,(@rank:=@rank +1 ) as rank from
(select s_id ,round(avg(s_score),2) as 平均成績 from score
group by s_id order by 平均成績 desc) tb1,(select @rank:=0) b;
-- 25、查詢各科成績前三名的記錄
set @pre_c_id:= ༽'
set @rank:=0;
select b.s_name,tb2.s_id ,tb2.c_id,tb2.s_score,tb2.排名 from
(select *,(case when tb1.c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1.c_id then @pre_c_id else @pre_c_id:=tb1.c_id end ) as pre_c_id
from
(select * from score order by c_id,s_score desc) tb1 )tb2 join student b on tb2.s_id = b.s_id where 排名 <4;
-- 26、查詢每門課程被選修的學生數
select c_id ,count(s_id) as 選修人數 from score group by c_id;
-- 27、查詢出只有兩門課程的全部學生的學號和姓名
select a.s_id ,b.s_name from score a left join student b on a.s_id = b.s_id group by s_id having count(*) = 2;
-- 28、查詢男生、女生人數
select sum(case s_sex when '男' then 1 else 0 end) as 男生人數,
sum(case s_sex when '女' then 1 else 0 end) as 女生人數 from student;
-- 29、查詢名字中含有"風"字的學生信息
select * from student where s_name like '%風%'
-- 30、查詢同名同性學生名單,並統計同名人數
--略,不想寫
-- 31、查詢1990年出生的學生名單
select * from student where s_birth like %'
-- 32、查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列
select c_id ,round(avg(s_score),2) as 平均成績 from score group by c_id order by 平均成績 desc, c_id asc;
-- 33、查詢平均成績大於等於85的所有學生的學號、姓名和平均成績
select a.s_id,b.s_name ,round(avg(s_score),2) as 平均成績 from score a
left join student b on a.s_id = b.s_id group by a.s_id having 平均成績>=85;
-- 34、查詢課程名稱為"數學",且分數低於60的學生姓名和分數
select b.s_name ,a.s_score from score a
left join student b on a.s_id = b.s_id
where a.c_id=(select c_id from course where c_name = '數學')and a.s_score < 60;
-- 35、查詢所有學生的課程及分數情況;
select b.s_name,
sum(case when a.c_id = ༽' then a.s_score else null end) as 語文,
sum(case when a.c_id = ༾' then a.s_score else null end) as 數學,
sum(case when a.c_id = ༿' then a.s_score else null end) as 英語
from score a right join student b on a.s_id = b.s_id group by b.s_name
-- 36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;
select b.s_name,
sum(case when a.c_id = ༽' then a.s_score else null end) as 語文,
sum(case when a.c_id = ༾' then a.s_score else null end) as 數學,
sum(case when a.c_id = ༿' then a.s_score else null end) as 英語
from score a right join student b on a.s_id = b.s_id group by b.s_name having 語文>= 70 or 數學>= 70 or 英語>= 70 ;
-- 37、查詢不及格的課程
select a.s_id,a.c_id,b.c_name,a.s_score from score a
left join course b on a.c_id = b.c_id where a.s_score<60;
--38、查詢課程編號為01且課程成績在80分以上的學生的學號和姓名;
select a.s_id,b.s_name from score a left join student b on a.s_id = b.s_id where a.c_id = ༽' and a.s_score>=80;
-- 39、求每門課程的學生人數
select c_id,count(*) as 學生人數 from score group by c_id ;
-- 40、查詢選修"張三"老師所授課程的學生中,成績最高的學生信息及其成績
select a.*,b.c_id,max(b.s_score) as 最高成績 from student a
right join score b on a.s_id = b.s_id
group by b.c_id
having b.c_id = (select c_id from course
where t_id = (select t_id from teacher where t_name = '張三'));
-- 41、查詢不同課程成績相同的學生的學生編號、課程編號、學生成績
--(這題我搞不清題目是什麼意思,是指查找學生個體參加了的所有課程的成績各不相同的那個學生信息呢?還是所有課程之間做對比呢,我更傾向於理解為前者)
--理解為前者的寫法
select * from
(select * from score group by s_id,s_score) tb1
group by s_id having count(*) = 1;
--理解為後者的寫法
select distinct a.s_id,a.c_id,b.s_score from score a,score b where a.c_id != b.c_id and a.s_score = b.s_score;
-- 42、查詢每門課程成績最好的前兩名
set @pre_c_id:= ༽'
set @rank:=0;
select tb2.s_id ,tb2.c_id,tb2.s_score from
(select *,(case when tb1.c_id = @pre_c_id then @rank:=@rank+1 else @rank:=1 end) as 排名,
(case when @pre_c_id = tb1.c_id then @pre_c_id else @pre_c_id:=tb1.c_id end ) as pre_c_id
from
(select * from score order by c_id,s_score desc) tb1 )tb2
join student b on tb2.s_id = b.s_id where 排名 <3;
-- 43、統計每門課程的學生選修人數(超過5人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人相同,按課程號升序排列
select c_id ,count(*) as 選修人數 from score group by c_id having 選修人數>5 order by 選修人數 desc , c_id asc;
-- 44、檢索至少選修兩門課程的學生學號
select s_id from score group by s_id having count(*) >= 2;
-- 45、查詢選修了全部課程的學生信息
select * from student where s_id in
(select s_id from score group by s_id having count(*) = 3)
--46、查詢各學生的年齡
select s_name ,(date_format(now(),'%Y')-date_format(s_birth,'%Y') + (CASE when date_format(now(),'%m%d')>=date_format(s_birth,'%m%d') then 0 else 1 end)) as age
from student
-- 47、查詢本周過生日的學生
---(實現得並不完全,因為例如出生月日為『01-01』在每一年可能會輸入不同周)
select * from student where week(date_format(s_birth,'%m%d'))=week(date_format(now(),'%m%d')) ;
-- 48、查詢下周過生日的學生
select * from student
where week(date_format(s_birth,'%m%d'))=week(date_format(date_add(now(),interval 7-dayofweek(now())+1 day),'%m%d'));
-- 49、查詢本月過生日的學生
select * from student where date_format(s_birth,'%m') = date_format(now(),'%m')
-- 50、查詢下月過生日的學生
select * from student where date_format(s_birth,'%m') = date_format(date_add(now(),interval 1 month),'%m')
H. SQL資料庫試題求解
------------------------------------------------------
create table students(st_id varchar(20),st_name varchar(50),sex varchar(10))
insert into students(st_id,st_name,sex)
select 'st001','張傑', '男' union all
select 'st002', '公孫燕飛' ,'男' union all
select 'st003', '王楠', '女' union all
select 'st004', '王偉', '男' union all
select 'st005','李燕紋', '女' union all
select 'st006', '孫武' ,'男'
select *
from students
create table teachers(t_id varchar(20),t_name varchar(50),t_lesson varchar(50))
insert into teachers
select 't001', '張老師' ,'數學' union all
select 't002', '李老師', '英語'
delete from results
create table results(r_id varchar(20),r_fenshu int,r_stid varchar(50),r_tid varchar(50))
insert into results
select 'r001','90', 'st001', 't002' union all
select 'r002', '68', 'st005', 't001' union all
select 'r003', '92', 'st003' ,'t001' union all
select 'r004', '82', 'st006', 't002' union all
select 'r005', '70', 'st002', 't002' union all
select 'r006', '86', 'st002', 't001' union all
select 'r007', '57', 'st003', 't002' union all
select 'r008', '76', 'st006', 't001' union all
select 'r009', '55', 'st001', 't001' union all
select 'r010', '77', 'st004', 't002' union all
select 'r011', '58', 'st005', 't002'
----------------------------------------------------------
1.
select st_id
from students
where st_name = '王偉'
2.select st_id,st_name
from students
where st_name like '__燕%'
3 select st_name,len(st_name) as 名字長度
from students
where sex ='男'
4 select min(r_fenshu) as 最低分數
from teachers t inner join results r on t.t_id =r.r_tid
where t_lesson ='數學' --這個是不考慮成績中有null值的
5 select s.st_id as 學生編號,r_fenshu as分數,r_tid as 課目號
from students s inner join results r on s.st_id =r.r_stid
where s.sex='女'
--如果還要課目的名稱的話請用下面的
select s.st_id as 學生編號,r.r_fenshu as 分數,r.r_tid as 課目號,t.t_lesson as 課目名稱
from students s inner join results r on s.st_id =r.r_stid
inner join teachers t on r.r_tid = t.t_id
where s.sex='女'
6 select avg(r.r_fenshu)
from results r inner join teachers t on r.r_tid = t.t_id
where t.t_lesson='英語'
7.select *
from students s inner join results r on s.st_id =r.r_stid
inner join teachers t on r.r_tid = t.t_id
where s.st_id in (select top 2 st_id from students order by st_id desc)
order by s.st_id desc
8 select sum(r.r_fenshu) as 總分
from results r inner join students s on r.r_stid =s.st_id
where s.st_name = '王楠'
9.select distinct s.st_id,s.st_name
from students s inner join results r on s.st_id = r.r_stid
where st_id not in (select r_stid from results where r_fenshu<60) and st_id not in (select r_stid from results where r_fenshu >=90)
10 update results
set r_fenshu = r_fenshu + 10
--如果分數不可能大於100請用這句 set r_fenshu = case when r_fenshu + 10 <=100 then r_fenshu + 10 else 100 end
where r_stid in (select st_id from students where sex='女')
1 進階題
select t.t_name,count(*)
from students s,teachers t,results r
where r.r_tid = t.t_id
and s.st_id =r.r_stid
and r.r_fenshu >= 60
and t.t_id in (select t_id from teachers where t_lesson='數學' )
--and t_lesson='數學'
group by t.t_name
2
select top 1 sum(r_fenshu) as 總分,t.t_lesson,t_id,t_name
from results r,teachers t
where r.r_tid = t.t_id
group by t.t_lesson,t_id,t_name
order by 總分 desc
3. delete from results where r_stid in (select r_stid from results group by r_stid having count(r_tid) = 1)
1 選做題
select d.name from sysobjects d where d.xtype='U'
2.select top 5 * from students order by newid()
I. 50分求sql題
1.一道SQL語句面試題,關於group by
表內容:
2005-05-09 勝
2005-05-09 勝
2005-05-09 負
2005-05-09 負
2005-05-10 勝
2005-05-10 負
2005-05-10 負
如果要生成下列結果, 該如何寫sql語句?
勝 負
2005-05-09 2 2
2005-05-10 1 2
------------------------------------------
create table #tmp(rq varchar(10),shengfu nchar(1))
insert into #tmp values('2005-05-09','勝')
insert into #tmp values('2005-05-09','勝')
insert into #tmp values('2005-05-09','負')
insert into #tmp values('2005-05-09','負')
insert into #tmp values('2005-05-10','勝')
insert into #tmp values('2005-05-10','負')
insert into #tmp values('2005-05-10','負')
select * from #tmp
select rq, shengfu from #tmp group by rq,shengfu
select rq, shengfu from #tmp group by shengfu,rq
select rq, shengfu,sum(shengfu) from #tmp group by shengfu,rq
1)select rq, sum(case when shengfu='勝' then 1 else 0 end)'勝',sum(case when shengfu='負' then 1 else 0 end)'負' from #tmp group by rq
2) select N.rq,N.勝,M.負 from (
select rq,勝=count(*) from #tmp where shengfu='勝'group by rq)N inner join
(select rq,負=count(*) from #tmp where shengfu='負'group by rq)M on N.rq=M.rq
3)select a.col001,a.a1 勝,b.b1 負 from
(select col001,count(col001) a1 from temp1 where col002='勝' group by col001) a,
(select col001,count(col001) b1 from temp1 where col002='負' group by col001) b
where a.col001=b.col001
2.請教一個面試中遇到的SQL語句的查詢問題
表中有A B C三列,用SQL語句實現:當A列大於B列時選擇A列否則選擇B列,當B列大於C列時選擇B列否則選擇C列。
------------------------------------------
select (case when a>b then a else b end ),
(case when b>c then b esle c end)
from table_name
3.面試題:一個日期判斷的sql語句?
請取出tb_send表中日期(SendTime欄位)為當天的所有記錄?(SendTime欄位為datetime型,包含日期與時間)
------------------------------------------
select * from tb where datediff(dd,SendTime,getdate())=0
4.有一張表,裡面有3個欄位:語文,數學,英語。其中有3條記錄分別表示語文70分,數學80分,英語58分,請用一條sql語句查詢出這三條記錄並按以下條件顯示出來(並寫出您的思路):
大於或等於80表示優秀,大於或等於60表示及格,小於60分表示不及格。
顯示格式:
語文 數學 英語
及格 優秀 不及格
------------------------------------------
select
(case when 語文>=80 then '優秀'
when 語文>=60 then '及格'
else '不及格') as 語文,
(case when 數學>=80 then '優秀'
when 數學>=60 then '及格'
else '不及格') as 數學,
(case when 英語>=80 then '優秀'
when 英語>=60 then '及格'
else '不及格') as 英語,
from table
5.在sqlserver2000中請用sql創建一張用戶臨時表和系統臨時表,裡麵包含兩個欄位ID和IDValues,類型都是int型,並解釋下兩者的區別?
------------------------------------------
用戶臨時表:create table #xx(ID int, IDValues int)
系統臨時表:create table ##xx(ID int, IDValues int)
區別:
用戶臨時表只對創建這個表的用戶的Session可見,對其他進程是不可見的.
當創建它的進程消失時這個臨時表就自動刪除.
全局臨時表對整個SQL Server實例都可見,但是所有訪問它的Session都消失的時候,它也自動刪除.
6.sqlserver2000是一種大型資料庫,他的存儲容量只受存儲介質的限制,請問它是通過什麼方式實現這種無限容量機制的。
------------------------------------------
它的所有數據都存儲在數據文件中(*.dbf),所以只要文件夠大,SQL Server的存儲容量是可以擴大的.
SQL Server 2000 資料庫有三種類型的文件:
主要數據文件
主要數據文件是資料庫的起點,指向資料庫中文件的其它部分。每個資料庫都有一個主要數據文件。主要數據文件的推薦文件擴展名是 .mdf。
次要數據文件
次要數據文件包含除主要數據文件外的所有數據文件。有些資料庫可能沒有次要數據文件,而有些資料庫則有多個次要數據文件。次要數據文件的推薦文件擴展名是 .ndf。
日誌文件
日誌文件包含恢復資料庫所需的所有日誌信息。每個資料庫必須至少有一個日誌文件,但可以不止一個。日誌文件的推薦文件擴展名是 .ldf。
7.請用一個sql語句得出結果
從table1,table2中取出如table3所列格式數據,注意提供的數據及結果不準確,只是作為一個格式向大家請教。
如使用存儲過程也可以。
table1
月份mon 部門dep 業績yj
-------------------------------
一月份 01 10
一月份 02 10
一月份 03 5
二月份 02 8
二月份 04 9
三月份 03 8
table2
部門dep 部門名稱dname
--------------------------------
01 國內業務一部
02 國內業務二部
03 國內業務三部
04 國際業務部
table3 (result)
部門dep 一月份 二月份 三月份
--------------------------------------
01 10 null null
02 10 8 null
03 null 5 8
04 null null 9
------------------------------------------
1)
select a.部門名稱dname,b.業績yj as '一月份',c.業績yj as '二月份',d.業績yj as '三月份'
from table1 a,table2 b,table2 c,table2 d
where a.部門dep = b.部門dep and b.月份mon = '一月份' and
a.部門dep = c.部門dep and c.月份mon = '二月份' and
a.部門dep = d.部門dep and d.月份mon = '三月份' and
2)
select a.dep,
sum(case when b.mon=1 then b.yj else 0 end) as '一月份',
sum(case when b.mon=2 then b.yj else 0 end) as '二月份',
sum(case when b.mon=3 then b.yj else 0 end) as '三月份',
sum(case when b.mon=4 then b.yj else 0 end) as '四月份',
sum(case when b.mon=5 then b.yj else 0 end) as '五月份',
sum(case when b.mon=6 then b.yj else 0 end) as '六月份',
sum(case when b.mon=7 then b.yj else 0 end) as '七月份',
sum(case when b.mon=8 then b.yj else 0 end) as '八月份',
sum(case when b.mon=9 then b.yj else 0 end) as '九月份',
sum(case when b.mon=10 then b.yj else 0 end) as '十月份',
sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',
sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',
from table2 a left join table1 b on a.dep=b.dep
8.華為一道面試題
一個表中的Id有多個記錄,把所有這個id的記錄查出來,並顯示共有多少條記錄數。
------------------------------------------
select id, Count(*) from tb group by id having count(*)>1
select * from(select count(ID) as count from table group by ID)T where T.count>1
實在沒空發郵件。。。在這收吧
J. 一些SQL的試題
4.1
select stud_id,name ,birthday,gender,mark from stud_info where name like '張%' and len(name)=2
4.2
select stud_id ,name from stud_grade where grade=(select max(grade) from stud_grade
或者select top 1 stud_id ,name from stud_grade order by grade desc
4.3
declare @zhuanye char(10)
select @zhuanye=sunbstring(zhuanye,5,2) from stud_info
select name from stud_info where @zhuanye='01'
4.4
create proc people_num
as
begin
select count(*) from stud_info where gender='男'
end
4.5
alert table stud_info add column money varchar(30)
4.6
alter table stud_info add constraint uniqueindex unique(telcode)
4.7
ALTER TABLE stud_info
ADD
CONSTRAINT pk_level
PRIMARY KEY CLUSTERED (stud_id)
4.8
alter table stud_grade
add constraint stud_info
foreign key (stud_id)
references (stud_id)
4.9
create nonclustered index CourseIndex
on stud_grade(course_id)
4.10
create view stud_view
as
select A.stud_id ,A.name,B.grade from stud_info A,stud_grade B where A.stud_id=B.stud_id and
substring(stud_id,3,2)='01'
第二題
36 select 姓名,年齡 from S order by 年齡 desc
37 select * from S where 姓名 like '王%'
38 select S.姓名,S.年齡,S.性別,S.系別 from S,C,SC where S.學號=SC.學號 and C.課號=SC.課號 and C.課名='資料庫原理'
39 select * from S where 系別=(select 系別 from S where 姓名='劉平')