(1)表名:購物信息 購物人 商品名稱 數量 A 甲 2 B 乙 4 C 丙 1 A 丁 2 B 丙 5 …… 給出全部購入商品爲兩種或兩種以上的購物人記錄 答:select * from 購物信息 where 購物人 in (select 購物人 from 購物信息 group by 購物人 having count(*) >= 2); (2)表名:成績表 姓名 課程 分數 張三 語文 81 張三 數學 75 李四 語文 56 李四 數學 90 王五 語文 81 王五 數學 100 王五 英語 49 給出成績所有合格的學生信息(包含姓名、課程、分數),注:分數在60以上評爲合格 答:select * from 成績表 where 姓名 not in (select distinct 姓名 from 成績表 where 分數 < 60) 或者: select * from 成績表 where 姓名 in (select 姓名 from 成績表 group by 姓名 having min(分數) >=60) (3)表名:商品表 名稱 產地 進價 蘋果 煙臺 2.5 蘋果 雲南 1.9 蘋果 四川 3 西瓜 江西 1.5 西瓜 北京 2.4 …… 給出平均進價在2元如下的商品名稱 答:select 名稱 from 商品表 group by 名稱 having avg(進價) < 2 (4)表名:高考信息表 准考證號 科目 成績 2006001 語文 119 2006001 數學 108 2006002 物理 142 2006001 化學 136 2006001 物理 127 2006002 數學 149 2006002 英語 110 2006002 語文 105 2006001 英語 98 2006002 化學 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 600 (5)表名:高考信息表 准考證號 數學 語文 英語 物理 化學 2006001 108 119 98 127 136 2006002 149 105 110 142 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600 (四部分) (一)表名:club id gender age 67 M 19 68 F 30 69 F 27 70 F 16 71 M 32 …… 查詢出該俱樂部裏男性會員和女性會員的總數 答:select gender,count(id) from club group by gender (二)表名:team ID(number型) Name(varchar2型) 1 a 2 b 3 b 4 a 5 c 6 c 要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的 例如:刪除後的結果應以下: ID(number型) Name(varchar2型) 1 a 2 b 5 c 請寫出SQL語句。 delete from team where id not in (select min(id) from team group by name) (三)表名:student name course score 張青 語文 72 王華 數學 72 張華 英語 81 張青 物理 67 李立 化學 98 張燕 物理 70 張青 化學 76 查詢出「張」姓學生中平均成績大於75分的學生信息 答:select * from student where name in (select name from student where name like '張%' group by name having avg(score) > 75) 1.一道SQL語句面試題,關於group by表內容: info 表 date result 2005-05-09 win 2005-05-09 lose 2005-05-09 lose 2005-05-09 lose 2005-05-10 win 2005-05-10 lose 2005-05-10 lose 若是要生成下列結果, 該如何寫sql語句? win lose 2005-05-09 2 2 2005-05-10 1 2 答案: (1) select date, sum(case when result = "win" then 1 else 0 end) as "win", sum(case when result = "lose" then 1 else 0 end) as "lose" from info group by date; (2) select a.date, a.result as win, b.result as lose from (select date, count(result) as result from info where result = "win" group by date) as a join (select date, count(result) as result from info where result = "lose" group by date) as b on a.date = b.date; 2.表中有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 else c end) from table; 3.請取出tb_send表中日期(SendTime字段)爲當天的全部記錄? (SendTime字段爲datetime型,包含日期與時間) select * from tb where datediff(dd,SendTime,getdate())=0 4.有一張表,裏面有3個字段:chinese,math,english。其中有一條記錄chinese 70分,math 80分,english 58分,請用一條sql語句查詢出全部記錄並按如下條件顯示出來(並寫出您的思路): 大於或等於80表示excellent,大於或等於60表示pass,小於60分表示fail。 顯示格式: 以上面的chinese 70分,math 80分,english 58分 chinese math english pass excellent fail select (case when chinese >= 80 then "excellent" when chinese >= 60 then "pass" else "fail" end) as chinese, (case when math >= 80 then "excellent" when math >= 60 then "pass" else "fail" end) as math, (case when english >= 80 then "excellent" when english >= 60 then "pass" else "fail" end) as english from grade; 5.請用一個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 ------------------------------------------ select t1.dep, sum(case when mon = 1 then yj else 0 end) as jun, sum(case when mon = 2 then yj else 0 end) as feb, sum(case when mon = 3 then yj else 0 end) as mar from t1 right join t2 on t1.dep = t2.dep group by t1.dep; 題目1、 有兩個表: TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; 2、請寫出SQL,取出計算機科考成績不及格的學生; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; 題目2、 有兩個表定義以下: create tableindividual ( firstname varchar2(20) not null lastname vatchar2(20) not null birthdate date gender varchar2(1) initial number(2) farorite varchar2(6) type varchar2(8) ); 在此表中建惟一索引 firstname + lastname create table chile_detail( firstname varchar2(20) lastname varchar2(20) cname varchar2(8) coment varchar2(2) type varchar2(8) ); 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; select * from TableX where name like '張%' order by age 2、請寫出SQL,取出計算機科考成績不及格的學生; select * from tableX where code in (select code from tableY WEHRE class='計算機' and score <60) 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 select a.name,b.class,b.score from tableX full join tableY on a.code=b.code 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); insert into tablex values('97005','趙六',20) 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; update tablex set age=21 where code='97004' 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; delete tablex where code not in (select code from tabley) DELETE TABLEX WHERE CODE IN ( SELECT CODE FROM TABLEX WHERE CODE NOT IN(SELECT Y.CODE FROM TABLEY)) 但看了其它人的寫法,感受本身寫的不簡潔,學習一下. 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; SELECT * FROM TableX WHERE Name LIKE '張%' ORDER BY Age; 2、請寫出SQL,取出計算機科考成績不及格的學生; SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = '計算機' AND Score < 60; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 Left Out:SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code(+) Right Out: SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code(+) = y.Code Full Out:Left join union all right join 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); INSERT INTO TableX(Code, Name, Age) VALUES('97005','趙六',20); COMMIT; 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = '李五') 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; DELETE FROM TableX WHERE Code Not in (SELECT Code FROM TableY WHERE NVL(Score,0) = 0) 在此表中建惟一索引 firstname + lastname CREATE UNIQUE INDEX NAME_UNINDEX ON individual(firstname,lastname) 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 DELETE FROM individual WHERE TO_CHAR(birthdate,'YYYY-MM-DD') = '1990-10-02'; COMMIT; 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 UPDATE chile_detail SET Cname = 'declear', coment = '02' WHERE type = 'kkd'; COMMIT; http://www.51testing.com/?uid-165528-action-viewspace-itemid-99563 http://www.cnblogs.com/zemliu/archive/2012/10/09/2717629.html http://bbs.csdn.NET/topics/270058476 [sql] view plain copy 一 單詞解釋(2分/個) 34 Data 數據Database 數據庫RDBMS 關係數據庫管理系統GRANT 受權 REVOKE取消權限DENY 拒絕權限DECLARE 定義變量PROCEDURE存儲過程 Transaction事務TRIGGER觸發器繼續 continue惟一 unqiue 主鍵 primary key標識列 identity外鍵 foreign kdy 檢查 check 約束 constraint 二 編寫SQL語句(5分/題)50 1) 建立一張學生表,包含如下信息,學號,姓名,年齡,性別,家庭住址,聯繫電話 Create table stu (學號 int , 姓名 varchar(8), 年齡 int, 性別 varchar(4), 家庭地址 varchar(50), 聯繫電話 int ); 2) 修改學生表的結構,添加一列信息,學歷 Alter table stu add 學歷 varchar(6); 3) 修改學生表的結構,刪除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向學生表添加以下信息: 學號 姓名年齡性別聯繫電話學歷 1A22男123456小學 2B21男119中學 3C23男110高中 4D18女114大學 Insert into stu values(1,’A’,22,’男’,123456,’小學’) Insert into stu values(2,’B’,21,’男’,119,’中學’) Insert into stu values(3,’C’,23,’男’,110,’高中’) Insert into stu values(4,’D’,18,’女’,114,’大學’) 修改學生表的數據,將電話號碼以11開頭的學員的學歷改成「大專」 Update stu set 學歷=’大專’ where 聯繫電話 like ‘11%’ 6) 刪除學生表的數據,姓名以C開頭,性別爲‘男’的記錄刪除 Delect from stu where 性別=’男’ and 姓名 like ‘c%’ 7) 查詢學生表的數據,將全部年齡小於22歲的,學歷爲「大專」的,學生的姓名和學號示出來 Select 姓名,學號 from stu where 年齡<22 and 學歷=’大專’ 8) 查詢學生表的數據,查詢全部信息,列出前25%的記錄 Select top 25 percent * from stu 9) 查詢出全部學生的姓名,性別,年齡降序排列 Select 姓名,性別 from stu order by 年齡 desc 10) 按照性別分組查詢全部的平均年齡 Select avg(年齡) from stu group by 性別 三 填空(3分/題) 36 1) 索引分爲__彙集索引___和__非彙集索引__在一張表上最多能夠建立1個 彙集索引_索引。可是能夠建立_249個非 彙集索引 索引。 2) 系統存儲過程_sp-helptext__是用來顯示規則,默認值,未加密的存儲過程,用戶定義函數,觸發或視圖的文本 3) 事務開始:begin Transction 提交事務:commit Transction 回滾事務:rollback Transction 四 問答題(5分/題)60 1) 數據庫包含哪些那幾種後綴名的文件必須,這些文件分別存放在什麼的信息? 主要數據文件(.mdf) 包含數據用戶收集的信息,還有數據庫其餘相關的信息, 日誌數據文件(.ndf) 存放用戶對數據庫的增刪改查的信息,用於備份恢復使用 2) TRUNCATE TABLE 命令是什麼含義?和Delete from 表名有什麼區? TRUNCATE TABLE: 提供了一種刪除表中全部記錄的快速方法 Delete from 表名:能夠刪除表的一個或多條記錄 3) 說出如下聚合數的含義:avg ,sum ,max ,min , count ,count(*) AVG:求平均值 SUM:求和 MAX:求最大值 MIN:求最小值 COUNT(*):返回全部行數 COUNT返回知足指定條件的記錄值 inner join 是什麼意思?做用是什麼?寫出基本語法結構 INNER JOIN 內聯接,用於返回兩個表中要查詢的列數據通訊 Select * from 表名1 inner join 表名2 on 條件表達式 5) 左向外聯接,右向外聯接,全聯接的關健字如何寫? Left outer join 左向外聯接 Right outer join 右向外聯接 Full outer join 全聯接 6) 子查詢分爲幾類,說明相互之間的別 了查詢分三種基本子查詢: 1.使用in 查詢返回一列或更多值 2.比較運算符,返回單個值勤作爲外查詢的參數 3.用exists 查詢時至關於進行一次數據測試 7) 實現實體完整性,實現域完整性,實現 完整性(引用完整性),實現自定義完整性分別使用什麼手段? 實現實體完整性: 主鍵約束 惟一約束 標識列 實現域完整性: 默認值約束 檢查約束 非空屬性 引和完整性: 外鍵引用 8) 視圖能夠更新嗎?會影響到實際表嗎? 視圖是能夠更新的,視圖只是基於基本表上的虛擬表,對視圖的更新會直接影響到實際表 9) 談談這樣幾個角色, dbo , Sysadmin public Dbo : 是數據庫的擁有者,對數據庫擁有全部操做的權限 Sysadmin : 能夠對SQL SERVER執行任何活動 Public : 自動建立的,能捕獲數據庫中用戶的全部默認權限 10) 何爲動態遊標?何爲靜態遊標? 動態遊標與靜態遊標相對,反映結果集中所作的全部更改, 靜態遊標的結果集在遊標打開時,創建在tempdb中,總按照遊標打開時的原樣顯示 11) 什麼是存儲過程?爲何存儲過程要比單純的Sql 語句執行起來要快? 存儲過程:是一組預先編譯好的T-SQL代碼 在建立存儲過程時通過了語法和性能優化,執行沒必要重複的步驟,使用存儲過程可提升運行效率 12)什麼是Inserted 表 ?什麼是Deleted 表? Inserted表用於存儲inserted和update語句影響的副本 Deleted 表用於存儲delect 和 update語句影響的行的副本 (1)表名:購物信息 購物人 商品名稱 數量 A 甲 2 B 乙 4 C 丙 1 A 丁 2 B 丙 5 …… 給出全部購入商品爲兩種或兩種以上的購物人記錄 答:select * from 購物信息 where 購物人 in (select 購物人 from 購物信息 group by 購物人 having count(*) >= 2); (2)表名:成績表 姓名 課程 分數 張三 語文 81 張三 數學 75 李四 語文 56 李四 數學 90 王五 語文 81 王五 數學 100 王五 英語 49 給出成績所有合格的學生信息(包含姓名、課程、分數),注:分數在60以上評爲合格 答:select * from 成績表 where 姓名 not in (select distinct 姓名 from 成績表 where 分數 < 60) 或者: select * from 成績表 where 姓名 in (select 姓名 from 成績表 group by 姓名 having min(分數) >=60) (3)表名:商品表 名稱 產地 進價 蘋果 煙臺 2.5 蘋果 雲南 1.9 蘋果 四川 3 西瓜 江西 1.5 西瓜 北京 2.4 …… 給出平均進價在2元如下的商品名稱 答:select 名稱 from 商品表 group by 名稱 having avg(進價) < 2 (4)表名:高考信息表 准考證號 科目 成績 2006001 語文 119 2006001 數學 108 2006002 物理 142 2006001 化學 136 2006001 物理 127 2006002 數學 149 2006002 英語 110 2006002 語文 105 2006001 英語 98 2006002 化學 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 600 (5)表名:高考信息表 准考證號 數學 語文 英語 物理 化學 2006001 108 119 98 127 136 2006002 149 105 110 142 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600 (四部分) (一)表名:club id gender age 67 M 19 68 F 30 69 F 27 70 F 16 71 M 32 …… 查詢出該俱樂部裏男性會員和女性會員的總數 答:select gender,count(id) from club group by gender (二)表名:team ID(number型) Name(varchar2型) 1 a 2 b 3 b 4 a 5 c 6 c 要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的 例如:刪除後的結果應以下: ID(number型) Name(varchar2型) 1 a 2 b 5 c 請寫出SQL語句。 delete from team where id not in (select min(id) from team group by name) (三)表名:student name course score 張青 語文 72 王華 數學 72 張華 英語 81 張青 物理 67 李立 化學 98 張燕 物理 70 張青 化學 76 查詢出「張」姓學生中平均成績大於75分的學生信息 答:select * from student where name in (select name from student where name like '張%' group by name having avg(score) > 75) 1.一道SQL語句面試題,關於group by表內容: info 表 date result 2005-05-09 win 2005-05-09 lose 2005-05-09 lose 2005-05-09 lose 2005-05-10 win 2005-05-10 lose 2005-05-10 lose 若是要生成下列結果, 該如何寫sql語句? win lose 2005-05-09 2 2 2005-05-10 1 2 答案: (1) select date, sum(case when result = "win" then 1 else 0 end) as "win", sum(case when result = "lose" then 1 else 0 end) as "lose" from info group by date; (2) select a.date, a.result as win, b.result as lose from (select date, count(result) as result from info where result = "win" group by date) as a join (select date, count(result) as result from info where result = "lose" group by date) as b on a.date = b.date; 2.表中有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 else c end) from table; 3.請取出tb_send表中日期(SendTime字段)爲當天的全部記錄? (SendTime字段爲datetime型,包含日期與時間) select * from tb where datediff(dd,SendTime,getdate())=0 4.有一張表,裏面有3個字段:chinese,math,english。其中有一條記錄chinese 70分,math 80分,english 58分,請用一條sql語句查詢出全部記錄並按如下條件顯示出來(並寫出您的思路): 大於或等於80表示excellent,大於或等於60表示pass,小於60分表示fail。 顯示格式: 以上面的chinese 70分,math 80分,english 58分 chinese math english pass excellent fail select (case when chinese >= 80 then "excellent" when chinese >= 60 then "pass" else "fail" end) as chinese, (case when math >= 80 then "excellent" when math >= 60 then "pass" else "fail" end) as math, (case when english >= 80 then "excellent" when english >= 60 then "pass" else "fail" end) as english from grade; 5.請用一個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 ------------------------------------------ select t1.dep, sum(case when mon = 1 then yj else 0 end) as jun, sum(case when mon = 2 then yj else 0 end) as feb, sum(case when mon = 3 then yj else 0 end) as mar from t1 right join t2 on t1.dep = t2.dep group by t1.dep; 題目1、 有兩個表: TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; 2、請寫出SQL,取出計算機科考成績不及格的學生; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; 題目2、 有兩個表定義以下: create tableindividual ( firstname varchar2(20) not null lastname vatchar2(20) not null birthdate date gender varchar2(1) initial number(2) farorite varchar2(6) type varchar2(8) ); 在此表中建惟一索引 firstname + lastname create table chile_detail( firstname varchar2(20) lastname varchar2(20) cname varchar2(8) coment varchar2(2) type varchar2(8) ); 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; select * from TableX where name like '張%' order by age 2、請寫出SQL,取出計算機科考成績不及格的學生; select * from tableX where code in (select code from tableY WEHRE class='計算機' and score <60) 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 select a.name,b.class,b.score from tableX full join tableY on a.code=b.code 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); insert into tablex values('97005','趙六',20) 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; update tablex set age=21 where code='97004' 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; delete tablex where code not in (select code from tabley) DELETE TABLEX WHERE CODE IN ( SELECT CODE FROM TABLEX WHERE CODE NOT IN(SELECT Y.CODE FROM TABLEY)) 但看了其它人的寫法,感受本身寫的不簡潔,學習一下. 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; SELECT * FROM TableX WHERE Name LIKE '張%' ORDER BY Age; 2、請寫出SQL,取出計算機科考成績不及格的學生; SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = '計算機' AND Score < 60; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 Left Out:SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code(+) Right Out: SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code(+) = y.Code Full Out:Left join union all right join 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); INSERT INTO TableX(Code, Name, Age) VALUES('97005','趙六',20); COMMIT; 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = '李五') 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; DELETE FROM TableX WHERE Code Not in (SELECT Code FROM TableY WHERE NVL(Score,0) = 0) 在此表中建惟一索引 firstname + lastname CREATE UNIQUE INDEX NAME_UNINDEX ON individual(firstname,lastname) 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 DELETE FROM individual WHERE TO_CHAR(birthdate,'YYYY-MM-DD') = '1990-10-02'; COMMIT; 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 UPDATE chile_detail SET Cname = 'declear', coment = '02' WHERE type = 'kkd'; COMMIT; http://www.51testing.com/?uid-165528-action-viewspace-itemid-99563 http://www.cnblogs.com/zemliu/archive/2012/10/09/2717629.html http://bbs.csdn.NET/topics/270058476 [sql] view plain copy 一 單詞解釋(2分/個) 34 Data 數據Database 數據庫RDBMS 關係數據庫管理系統GRANT 受權 REVOKE取消權限DENY 拒絕權限DECLARE 定義變量PROCEDURE存儲過程 Transaction事務TRIGGER觸發器繼續 continue惟一 unqiue 主鍵 primary key標識列 identity外鍵 foreign kdy 檢查 check 約束 constraint 二 編寫SQL語句(5分/題)50 1) 建立一張學生表,包含如下信息,學號,姓名,年齡,性別,家庭住址,聯繫電話 Create table stu (學號 int , 姓名 varchar(8), 年齡 int, 性別 varchar(4), 家庭地址 varchar(50), 聯繫電話 int ); 2) 修改學生表的結構,添加一列信息,學歷 Alter table stu add 學歷 varchar(6); 3) 修改學生表的結構,刪除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向學生表添加以下信息: 學號 姓名年齡性別聯繫電話學歷 1A22男123456小學 2B21男119中學 3C23男110高中 4D18女114大學 Insert into stu values(1,’A’,22,’男’,123456,’小學’) Insert into stu values(2,’B’,21,’男’,119,’中學’) Insert into stu values(3,’C’,23,’男’,110,’高中’) Insert into stu values(4,’D’,18,’女’,114,’大學’) 修改學生表的數據,將電話號碼以11開頭的學員的學歷改成「大專」 Update stu set 學歷=’大專’ where 聯繫電話 like ‘11%’ 6) 刪除學生表的數據,姓名以C開頭,性別爲‘男’的記錄刪除 Delect from stu where 性別=’男’ and 姓名 like ‘c%’ 7) 查詢學生表的數據,將全部年齡小於22歲的,學歷爲「大專」的,學生的姓名和學號示出來 Select 姓名,學號 from stu where 年齡<22 and 學歷=’大專’ 8) 查詢學生表的數據,查詢全部信息,列出前25%的記錄 Select top 25 percent * from stu 9) 查詢出全部學生的姓名,性別,年齡降序排列 Select 姓名,性別 from stu order by 年齡 desc 10) 按照性別分組查詢全部的平均年齡 Select avg(年齡) from stu group by 性別 三 填空(3分/題) 36 1) 索引分爲__彙集索引___和__非彙集索引__在一張表上最多能夠建立1個 彙集索引_索引。可是能夠建立_249個非 彙集索引 索引。 2) 系統存儲過程_sp-helptext__是用來顯示規則,默認值,未加密的存儲過程,用戶定義函數,觸發或視圖的文本 3) 事務開始:begin Transction 提交事務:commit Transction 回滾事務:rollback Transction 四 問答題(5分/題)60 1) 數據庫包含哪些那幾種後綴名的文件必須,這些文件分別存放在什麼的信息? 主要數據文件(.mdf) 包含數據用戶收集的信息,還有數據庫其餘相關的信息, 日誌數據文件(.ndf) 存放用戶對數據庫的增刪改查的信息,用於備份恢復使用 2) TRUNCATE TABLE 命令是什麼含義?和Delete from 表名有什麼區? TRUNCATE TABLE: 提供了一種刪除表中全部記錄的快速方法 Delete from 表名:能夠刪除表的一個或多條記錄 3) 說出如下聚合數的含義:avg ,sum ,max ,min , count ,count(*) AVG:求平均值 SUM:求和 MAX:求最大值 MIN:求最小值 COUNT(*):返回全部行數 COUNT返回知足指定條件的記錄值 inner join 是什麼意思?做用是什麼?寫出基本語法結構 INNER JOIN 內聯接,用於返回兩個表中要查詢的列數據通訊 Select * from 表名1 inner join 表名2 on 條件表達式 5) 左向外聯接,右向外聯接,全聯接的關健字如何寫? Left outer join 左向外聯接 Right outer join 右向外聯接 Full outer join 全聯接 6) 子查詢分爲幾類,說明相互之間的別 了查詢分三種基本子查詢: 1.使用in 查詢返回一列或更多值 2.比較運算符,返回單個值勤作爲外查詢的參數 3.用exists 查詢時至關於進行一次數據測試 7) 實現實體完整性,實現域完整性,實現 完整性(引用完整性),實現自定義完整性分別使用什麼手段? 實現實體完整性: 主鍵約束 惟一約束 標識列 實現域完整性: 默認值約束 檢查約束 非空屬性 引和完整性: 外鍵引用 8) 視圖能夠更新嗎?會影響到實際表嗎? 視圖是能夠更新的,視圖只是基於基本表上的虛擬表,對視圖的更新會直接影響到實際表 9) 談談這樣幾個角色, dbo , Sysadmin public Dbo : 是數據庫的擁有者,對數據庫擁有全部操做的權限 Sysadmin : 能夠對SQL SERVER執行任何活動 Public : 自動建立的,能捕獲數據庫中用戶的全部默認權限 10) 何爲動態遊標?何爲靜態遊標? 動態遊標與靜態遊標相對,反映結果集中所作的全部更改, 靜態遊標的結果集在遊標打開時,創建在tempdb中,總按照遊標打開時的原樣顯示 11) 什麼是存儲過程?爲何存儲過程要比單純的Sql 語句執行起來要快? 存儲過程:是一組預先編譯好的T-SQL代碼 在建立存儲過程時通過了語法和性能優化,執行沒必要重複的步驟,使用存儲過程可提升運行效率 12)什麼是Inserted 表 ?什麼是Deleted 表? Inserted表用於存儲inserted和update語句影響的副本 Deleted 表用於存儲delect 和 update語句影響的行的副本 (1)表名:購物信息 購物人 商品名稱 數量 A 甲 2 B 乙 4 C 丙 1 A 丁 2 B 丙 5 …… 給出全部購入商品爲兩種或兩種以上的購物人記錄 答:select * from 購物信息 where 購物人 in (select 購物人 from 購物信息 group by 購物人 having count(*) >= 2); (2)表名:成績表 姓名 課程 分數 張三 語文 81 張三 數學 75 李四 語文 56 李四 數學 90 王五 語文 81 王五 數學 100 王五 英語 49 給出成績所有合格的學生信息(包含姓名、課程、分數),注:分數在60以上評爲合格 答:select * from 成績表 where 姓名 not in (select distinct 姓名 from 成績表 where 分數 < 60) 或者: select * from 成績表 where 姓名 in (select 姓名 from 成績表 group by 姓名 having min(分數) >=60) (3)表名:商品表 名稱 產地 進價 蘋果 煙臺 2.5 蘋果 雲南 1.9 蘋果 四川 3 西瓜 江西 1.5 西瓜 北京 2.4 …… 給出平均進價在2元如下的商品名稱 答:select 名稱 from 商品表 group by 名稱 having avg(進價) < 2 (4)表名:高考信息表 准考證號 科目 成績 2006001 語文 119 2006001 數學 108 2006002 物理 142 2006001 化學 136 2006001 物理 127 2006002 數學 149 2006002 英語 110 2006002 語文 105 2006001 英語 98 2006002 化學 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 600 (5)表名:高考信息表 准考證號 數學 語文 英語 物理 化學 2006001 108 119 98 127 136 2006002 149 105 110 142 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600 (四部分) (一)表名:club id gender age 67 M 19 68 F 30 69 F 27 70 F 16 71 M 32 …… 查詢出該俱樂部裏男性會員和女性會員的總數 答:select gender,count(id) from club group by gender (二)表名:team ID(number型) Name(varchar2型) 1 a 2 b 3 b 4 a 5 c 6 c 要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的 例如:刪除後的結果應以下: ID(number型) Name(varchar2型) 1 a 2 b 5 c 請寫出SQL語句。 delete from team where id not in (select min(id) from team group by name) (三)表名:student name course score 張青 語文 72 王華 數學 72 張華 英語 81 張青 物理 67 李立 化學 98 張燕 物理 70 張青 化學 76 查詢出「張」姓學生中平均成績大於75分的學生信息 答:select * from student where name in (select name from student where name like '張%' group by name having avg(score) > 75) 1.一道SQL語句面試題,關於group by表內容: info 表 date result 2005-05-09 win 2005-05-09 lose 2005-05-09 lose 2005-05-09 lose 2005-05-10 win 2005-05-10 lose 2005-05-10 lose 若是要生成下列結果, 該如何寫sql語句? win lose 2005-05-09 2 2 2005-05-10 1 2 答案: (1) select date, sum(case when result = "win" then 1 else 0 end) as "win", sum(case when result = "lose" then 1 else 0 end) as "lose" from info group by date; (2) select a.date, a.result as win, b.result as lose from (select date, count(result) as result from info where result = "win" group by date) as a join (select date, count(result) as result from info where result = "lose" group by date) as b on a.date = b.date; 2.表中有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 else c end) from table; 3.請取出tb_send表中日期(SendTime字段)爲當天的全部記錄? (SendTime字段爲datetime型,包含日期與時間) select * from tb where datediff(dd,SendTime,getdate())=0 4.有一張表,裏面有3個字段:chinese,math,english。其中有一條記錄chinese 70分,math 80分,english 58分,請用一條sql語句查詢出全部記錄並按如下條件顯示出來(並寫出您的思路): 大於或等於80表示excellent,大於或等於60表示pass,小於60分表示fail。 顯示格式: 以上面的chinese 70分,math 80分,english 58分 chinese math english pass excellent fail select (case when chinese >= 80 then "excellent" when chinese >= 60 then "pass" else "fail" end) as chinese, (case when math >= 80 then "excellent" when math >= 60 then "pass" else "fail" end) as math, (case when english >= 80 then "excellent" when english >= 60 then "pass" else "fail" end) as english from grade; 5.請用一個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 ------------------------------------------ select t1.dep, sum(case when mon = 1 then yj else 0 end) as jun, sum(case when mon = 2 then yj else 0 end) as feb, sum(case when mon = 3 then yj else 0 end) as mar from t1 right join t2 on t1.dep = t2.dep group by t1.dep; 題目1、 有兩個表: TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; 2、請寫出SQL,取出計算機科考成績不及格的學生; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; 題目2、 有兩個表定義以下: create tableindividual ( firstname varchar2(20) not null lastname vatchar2(20) not null birthdate date gender varchar2(1) initial number(2) farorite varchar2(6) type varchar2(8) ); 在此表中建惟一索引 firstname + lastname create table chile_detail( firstname varchar2(20) lastname varchar2(20) cname varchar2(8) coment varchar2(2) type varchar2(8) ); 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; select * from TableX where name like '張%' order by age 2、請寫出SQL,取出計算機科考成績不及格的學生; select * from tableX where code in (select code from tableY WEHRE class='計算機' and score <60) 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 select a.name,b.class,b.score from tableX full join tableY on a.code=b.code 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); insert into tablex values('97005','趙六',20) 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; update tablex set age=21 where code='97004' 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; delete tablex where code not in (select code from tabley) DELETE TABLEX WHERE CODE IN ( SELECT CODE FROM TABLEX WHERE CODE NOT IN(SELECT Y.CODE FROM TABLEY)) 但看了其它人的寫法,感受本身寫的不簡潔,學習一下. 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; SELECT * FROM TableX WHERE Name LIKE '張%' ORDER BY Age; 2、請寫出SQL,取出計算機科考成績不及格的學生; SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = '計算機' AND Score < 60; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 Left Out:SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code(+) Right Out: SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code(+) = y.Code Full Out:Left join union all right join 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); INSERT INTO TableX(Code, Name, Age) VALUES('97005','趙六',20); COMMIT; 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = '李五') 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; DELETE FROM TableX WHERE Code Not in (SELECT Code FROM TableY WHERE NVL(Score,0) = 0) 在此表中建惟一索引 firstname + lastname CREATE UNIQUE INDEX NAME_UNINDEX ON individual(firstname,lastname) 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 DELETE FROM individual WHERE TO_CHAR(birthdate,'YYYY-MM-DD') = '1990-10-02'; COMMIT; 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 UPDATE chile_detail SET Cname = 'declear', coment = '02' WHERE type = 'kkd'; COMMIT; http://www.51testing.com/?uid-165528-action-viewspace-itemid-99563 http://www.cnblogs.com/zemliu/archive/2012/10/09/2717629.html http://bbs.csdn.NET/topics/270058476 [sql] view plain copy 一 單詞解釋(2分/個) 34 Data 數據Database 數據庫RDBMS 關係數據庫管理系統GRANT 受權 REVOKE取消權限DENY 拒絕權限DECLARE 定義變量PROCEDURE存儲過程 Transaction事務TRIGGER觸發器繼續 continue惟一 unqiue 主鍵 primary key標識列 identity外鍵 foreign kdy 檢查 check 約束 constraint 二 編寫SQL語句(5分/題)50 1) 建立一張學生表,包含如下信息,學號,姓名,年齡,性別,家庭住址,聯繫電話 Create table stu (學號 int , 姓名 varchar(8), 年齡 int, 性別 varchar(4), 家庭地址 varchar(50), 聯繫電話 int ); 2) 修改學生表的結構,添加一列信息,學歷 Alter table stu add 學歷 varchar(6); 3) 修改學生表的結構,刪除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向學生表添加以下信息: 學號 姓名年齡性別聯繫電話學歷 1A22男123456小學 2B21男119中學 3C23男110高中 4D18女114大學 Insert into stu values(1,’A’,22,’男’,123456,’小學’) Insert into stu values(2,’B’,21,’男’,119,’中學’) Insert into stu values(3,’C’,23,’男’,110,’高中’) Insert into stu values(4,’D’,18,’女’,114,’大學’) 修改學生表的數據,將電話號碼以11開頭的學員的學歷改成「大專」 Update stu set 學歷=’大專’ where 聯繫電話 like ‘11%’ 6) 刪除學生表的數據,姓名以C開頭,性別爲‘男’的記錄刪除 Delect from stu where 性別=’男’ and 姓名 like ‘c%’ 7) 查詢學生表的數據,將全部年齡小於22歲的,學歷爲「大專」的,學生的姓名和學號示出來 Select 姓名,學號 from stu where 年齡<22 and 學歷=’大專’ 8) 查詢學生表的數據,查詢全部信息,列出前25%的記錄 Select top 25 percent * from stu 9) 查詢出全部學生的姓名,性別,年齡降序排列 Select 姓名,性別 from stu order by 年齡 desc 10) 按照性別分組查詢全部的平均年齡 Select avg(年齡) from stu group by 性別 三 填空(3分/題) 36 1) 索引分爲__彙集索引___和__非彙集索引__在一張表上最多能夠建立1個 彙集索引_索引。可是能夠建立_249個非 彙集索引 索引。 2) 系統存儲過程_sp-helptext__是用來顯示規則,默認值,未加密的存儲過程,用戶定義函數,觸發或視圖的文本 3) 事務開始:begin Transction 提交事務:commit Transction 回滾事務:rollback Transction 四 問答題(5分/題)60 1) 數據庫包含哪些那幾種後綴名的文件必須,這些文件分別存放在什麼的信息? 主要數據文件(.mdf) 包含數據用戶收集的信息,還有數據庫其餘相關的信息, 日誌數據文件(.ndf) 存放用戶對數據庫的增刪改查的信息,用於備份恢復使用 2) TRUNCATE TABLE 命令是什麼含義?和Delete from 表名有什麼區? TRUNCATE TABLE: 提供了一種刪除表中全部記錄的快速方法 Delete from 表名:能夠刪除表的一個或多條記錄 3) 說出如下聚合數的含義:avg ,sum ,max ,min , count ,count(*) AVG:求平均值 SUM:求和 MAX:求最大值 MIN:求最小值 COUNT(*):返回全部行數 COUNT返回知足指定條件的記錄值 inner join 是什麼意思?做用是什麼?寫出基本語法結構 INNER JOIN 內聯接,用於返回兩個表中要查詢的列數據通訊 Select * from 表名1 inner join 表名2 on 條件表達式 5) 左向外聯接,右向外聯接,全聯接的關健字如何寫? Left outer join 左向外聯接 Right outer join 右向外聯接 Full outer join 全聯接 6) 子查詢分爲幾類,說明相互之間的別 了查詢分三種基本子查詢: 1.使用in 查詢返回一列或更多值 2.比較運算符,返回單個值勤作爲外查詢的參數 3.用exists 查詢時至關於進行一次數據測試 7) 實現實體完整性,實現域完整性,實現 完整性(引用完整性),實現自定義完整性分別使用什麼手段? 實現實體完整性: 主鍵約束 惟一約束 標識列 實現域完整性: 默認值約束 檢查約束 非空屬性 引和完整性: 外鍵引用 8) 視圖能夠更新嗎?會影響到實際表嗎? 視圖是能夠更新的,視圖只是基於基本表上的虛擬表,對視圖的更新會直接影響到實際表 9) 談談這樣幾個角色, dbo , Sysadmin public Dbo : 是數據庫的擁有者,對數據庫擁有全部操做的權限 Sysadmin : 能夠對SQL SERVER執行任何活動 Public : 自動建立的,能捕獲數據庫中用戶的全部默認權限 10) 何爲動態遊標?何爲靜態遊標? 動態遊標與靜態遊標相對,反映結果集中所作的全部更改, 靜態遊標的結果集在遊標打開時,創建在tempdb中,總按照遊標打開時的原樣顯示 11) 什麼是存儲過程?爲何存儲過程要比單純的Sql 語句執行起來要快? 存儲過程:是一組預先編譯好的T-SQL代碼 在建立存儲過程時通過了語法和性能優化,執行沒必要重複的步驟,使用存儲過程可提升運行效率 12)什麼是Inserted 表 ?什麼是Deleted 表? Inserted表用於存儲inserted和update語句影響的副本 Deleted 表用於存儲delect 和 update語句影響的行的副本
(1)表名:購物信息 購物人 商品名稱 數量 A 甲 2 B 乙 4 C 丙 1 A 丁 2 B 丙 5 …… 給出全部購入商品爲兩種或兩種以上的購物人記錄 答:select * from 購物信息 where 購物人 in (select 購物人 from 購物信息 group by 購物人 having count(*) >= 2); (2)表名:成績表 姓名 課程 分數 張三 語文 81 張三 數學 75 李四 語文 56 李四 數學 90 王五 語文 81 王五 數學 100 王五 英語 49 給出成績所有合格的學生信息(包含姓名、課程、分數),注:分數在60以上評爲合格 答:select * from 成績表 where 姓名 not in (select distinct 姓名 from 成績表 where 分數 < 60) 或者: select * from 成績表 where 姓名 in (select 姓名 from 成績表 group by 姓名 having min(分數) >=60) (3)表名:商品表 名稱 產地 進價 蘋果 煙臺 2.5 蘋果 雲南 1.9 蘋果 四川 3 西瓜 江西 1.5 西瓜 北京 2.4 …… 給出平均進價在2元如下的商品名稱 答:select 名稱 from 商品表 group by 名稱 having avg(進價) < 2 (4)表名:高考信息表 准考證號 科目 成績 2006001 語文 119 2006001 數學 108 2006002 物理 142 2006001 化學 136 2006001 物理 127 2006002 數學 149 2006002 英語 110 2006002 語文 105 2006001 英語 98 2006002 化學 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 600 (5)表名:高考信息表 准考證號 數學 語文 英語 物理 化學 2006001 108 119 98 127 136 2006002 149 105 110 142 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600 (四部分) (一)表名:club id gender age 67 M 19 68 F 30 69 F 27 70 F 16 71 M 32 …… 查詢出該俱樂部裏男性會員和女性會員的總數 答:select gender,count(id) from club group by gender (二)表名:team ID(number型) Name(varchar2型) 1 a 2 b 3 b 4 a 5 c 6 c 要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的 例如:刪除後的結果應以下: ID(number型) Name(varchar2型) 1 a 2 b 5 c 請寫出SQL語句。 delete from team where id not in (select min(id) from team group by name) (三)表名:student name course score 張青 語文 72 王華 數學 72 張華 英語 81 張青 物理 67 李立 化學 98 張燕 物理 70 張青 化學 76 查詢出「張」姓學生中平均成績大於75分的學生信息 答:select * from student where name in (select name from student where name like '張%' group by name having avg(score) > 75) 1.一道SQL語句面試題,關於group by表內容: info 表 date result 2005-05-09 win 2005-05-09 lose 2005-05-09 lose 2005-05-09 lose 2005-05-10 win 2005-05-10 lose 2005-05-10 lose 若是要生成下列結果, 該如何寫sql語句? win lose 2005-05-09 2 2 2005-05-10 1 2 答案: (1) select date, sum(case when result = "win" then 1 else 0 end) as "win", sum(case when result = "lose" then 1 else 0 end) as "lose" from info group by date; (2) select a.date, a.result as win, b.result as lose from (select date, count(result) as result from info where result = "win" group by date) as a join (select date, count(result) as result from info where result = "lose" group by date) as b on a.date = b.date; 2.表中有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 else c end) from table; 3.請取出tb_send表中日期(SendTime字段)爲當天的全部記錄? (SendTime字段爲datetime型,包含日期與時間) select * from tb where datediff(dd,SendTime,getdate())=0 4.有一張表,裏面有3個字段:chinese,math,english。其中有一條記錄chinese 70分,math 80分,english 58分,請用一條sql語句查詢出全部記錄並按如下條件顯示出來(並寫出您的思路): 大於或等於80表示excellent,大於或等於60表示pass,小於60分表示fail。 顯示格式: 以上面的chinese 70分,math 80分,english 58分 chinese math english pass excellent fail select (case when chinese >= 80 then "excellent" when chinese >= 60 then "pass" else "fail" end) as chinese, (case when math >= 80 then "excellent" when math >= 60 then "pass" else "fail" end) as math, (case when english >= 80 then "excellent" when english >= 60 then "pass" else "fail" end) as english from grade; 5.請用一個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 ------------------------------------------ select t1.dep, sum(case when mon = 1 then yj else 0 end) as jun, sum(case when mon = 2 then yj else 0 end) as feb, sum(case when mon = 3 then yj else 0 end) as mar from t1 right join t2 on t1.dep = t2.dep group by t1.dep; 題目1、 有兩個表: TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; 2、請寫出SQL,取出計算機科考成績不及格的學生; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; 題目2、 有兩個表定義以下: create tableindividual ( firstname varchar2(20) not null lastname vatchar2(20) not null birthdate date gender varchar2(1) initial number(2) farorite varchar2(6) type varchar2(8) ); 在此表中建惟一索引 firstname + lastname create table chile_detail( firstname varchar2(20) lastname varchar2(20) cname varchar2(8) coment varchar2(2) type varchar2(8) ); 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; select * from TableX where name like '張%' order by age 2、請寫出SQL,取出計算機科考成績不及格的學生; select * from tableX where code in (select code from tableY WEHRE class='計算機' and score <60) 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 select a.name,b.class,b.score from tableX full join tableY on a.code=b.code 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); insert into tablex values('97005','趙六',20) 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; update tablex set age=21 where code='97004' 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; delete tablex where code not in (select code from tabley) DELETE TABLEX WHERE CODE IN ( SELECT CODE FROM TABLEX WHERE CODE NOT IN(SELECT Y.CODE FROM TABLEY)) 但看了其它人的寫法,感受本身寫的不簡潔,學習一下. 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; SELECT * FROM TableX WHERE Name LIKE '張%' ORDER BY Age; 2、請寫出SQL,取出計算機科考成績不及格的學生; SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = '計算機' AND Score < 60; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 Left Out:SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code(+) Right Out: SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code(+) = y.Code Full Out:Left join union all right join 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); INSERT INTO TableX(Code, Name, Age) VALUES('97005','趙六',20); COMMIT; 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = '李五') 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; DELETE FROM TableX WHERE Code Not in (SELECT Code FROM TableY WHERE NVL(Score,0) = 0) 在此表中建惟一索引 firstname + lastname CREATE UNIQUE INDEX NAME_UNINDEX ON individual(firstname,lastname) 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 DELETE FROM individual WHERE TO_CHAR(birthdate,'YYYY-MM-DD') = '1990-10-02'; COMMIT; 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 UPDATE chile_detail SET Cname = 'declear', coment = '02' WHERE type = 'kkd'; COMMIT; http://www.51testing.com/?uid-165528-action-viewspace-itemid-99563 http://www.cnblogs.com/zemliu/archive/2012/10/09/2717629.html http://bbs.csdn.NET/topics/270058476 [sql] view plain copy 一 單詞解釋(2分/個) 34 Data 數據Database 數據庫RDBMS 關係數據庫管理系統GRANT 受權 REVOKE取消權限DENY 拒絕權限DECLARE 定義變量PROCEDURE存儲過程 Transaction事務TRIGGER觸發器繼續 continue惟一 unqiue 主鍵 primary key標識列 identity外鍵 foreign kdy 檢查 check 約束 constraint 二 編寫SQL語句(5分/題)50 1) 建立一張學生表,包含如下信息,學號,姓名,年齡,性別,家庭住址,聯繫電話 Create table stu (學號 int , 姓名 varchar(8), 年齡 int, 性別 varchar(4), 家庭地址 varchar(50), 聯繫電話 int ); 2) 修改學生表的結構,添加一列信息,學歷 Alter table stu add 學歷 varchar(6); 3) 修改學生表的結構,刪除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向學生表添加以下信息: 學號 姓名年齡性別聯繫電話學歷 1A22男123456小學 2B21男119中學 3C23男110高中 4D18女114大學 Insert into stu values(1,’A’,22,’男’,123456,’小學’) Insert into stu values(2,’B’,21,’男’,119,’中學’) Insert into stu values(3,’C’,23,’男’,110,’高中’) Insert into stu values(4,’D’,18,’女’,114,’大學’) 修改學生表的數據,將電話號碼以11開頭的學員的學歷改成「大專」 Update stu set 學歷=’大專’ where 聯繫電話 like ‘11%’ 6) 刪除學生表的數據,姓名以C開頭,性別爲‘男’的記錄刪除 Delect from stu where 性別=’男’ and 姓名 like ‘c%’ 7) 查詢學生表的數據,將全部年齡小於22歲的,學歷爲「大專」的,學生的姓名和學號示出來 Select 姓名,學號 from stu where 年齡<22 and 學歷=’大專’ 8) 查詢學生表的數據,查詢全部信息,列出前25%的記錄 Select top 25 percent * from stu 9) 查詢出全部學生的姓名,性別,年齡降序排列 Select 姓名,性別 from stu order by 年齡 desc 10) 按照性別分組查詢全部的平均年齡 Select avg(年齡) from stu group by 性別 三 填空(3分/題) 36 1) 索引分爲__彙集索引___和__非彙集索引__在一張表上最多能夠建立1個 彙集索引_索引。可是能夠建立_249個非 彙集索引 索引。 2) 系統存儲過程_sp-helptext__是用來顯示規則,默認值,未加密的存儲過程,用戶定義函數,觸發或視圖的文本 3) 事務開始:begin Transction 提交事務:commit Transction 回滾事務:rollback Transction 四 問答題(5分/題)60 1) 數據庫包含哪些那幾種後綴名的文件必須,這些文件分別存放在什麼的信息? 主要數據文件(.mdf) 包含數據用戶收集的信息,還有數據庫其餘相關的信息, 日誌數據文件(.ndf) 存放用戶對數據庫的增刪改查的信息,用於備份恢復使用 2) TRUNCATE TABLE 命令是什麼含義?和Delete from 表名有什麼區? TRUNCATE TABLE: 提供了一種刪除表中全部記錄的快速方法 Delete from 表名:能夠刪除表的一個或多條記錄 3) 說出如下聚合數的含義:avg ,sum ,max ,min , count ,count(*) AVG:求平均值 SUM:求和 MAX:求最大值 MIN:求最小值 COUNT(*):返回全部行數 COUNT返回知足指定條件的記錄值 inner join 是什麼意思?做用是什麼?寫出基本語法結構 INNER JOIN 內聯接,用於返回兩個表中要查詢的列數據通訊 Select * from 表名1 inner join 表名2 on 條件表達式 5) 左向外聯接,右向外聯接,全聯接的關健字如何寫? Left outer join 左向外聯接 Right outer join 右向外聯接 Full outer join 全聯接 6) 子查詢分爲幾類,說明相互之間的別 了查詢分三種基本子查詢: 1.使用in 查詢返回一列或更多值 2.比較運算符,返回單個值勤作爲外查詢的參數 3.用exists 查詢時至關於進行一次數據測試 7) 實現實體完整性,實現域完整性,實現 完整性(引用完整性),實現自定義完整性分別使用什麼手段? 實現實體完整性: 主鍵約束 惟一約束 標識列 實現域完整性: 默認值約束 檢查約束 非空屬性 引和完整性: 外鍵引用 8) 視圖能夠更新嗎?會影響到實際表嗎? 視圖是能夠更新的,視圖只是基於基本表上的虛擬表,對視圖的更新會直接影響到實際表 9) 談談這樣幾個角色, dbo , Sysadmin public Dbo : 是數據庫的擁有者,對數據庫擁有全部操做的權限 Sysadmin : 能夠對SQL SERVER執行任何活動 Public : 自動建立的,能捕獲數據庫中用戶的全部默認權限 10) 何爲動態遊標?何爲靜態遊標? 動態遊標與靜態遊標相對,反映結果集中所作的全部更改, 靜態遊標的結果集在遊標打開時,創建在tempdb中,總按照遊標打開時的原樣顯示 11) 什麼是存儲過程?爲何存儲過程要比單純的Sql 語句執行起來要快? 存儲過程:是一組預先編譯好的T-SQL代碼 在建立存儲過程時通過了語法和性能優化,執行沒必要重複的步驟,使用存儲過程可提升運行效率 12)什麼是Inserted 表 ?什麼是Deleted 表? Inserted表用於存儲inserted和update語句影響的副本 Deleted 表用於存儲delect 和 update語句影響的行的副本
(1)表名:購物信息 購物人 商品名稱 數量 A 甲 2 B 乙 4 C 丙 1 A 丁 2 B 丙 5 …… 給出全部購入商品爲兩種或兩種以上的購物人記錄 答:select * from 購物信息 where 購物人 in (select 購物人 from 購物信息 group by 購物人 having count(*) >= 2); (2)表名:成績表 姓名 課程 分數 張三 語文 81 張三 數學 75 李四 語文 56 李四 數學 90 王五 語文 81 王五 數學 100 王五 英語 49 給出成績所有合格的學生信息(包含姓名、課程、分數),注:分數在60以上評爲合格 答:select * from 成績表 where 姓名 not in (select distinct 姓名 from 成績表 where 分數 < 60) 或者: select * from 成績表 where 姓名 in (select 姓名 from 成績表 group by 姓名 having min(分數) >=60) (3)表名:商品表 名稱 產地 進價 蘋果 煙臺 2.5 蘋果 雲南 1.9 蘋果 四川 3 西瓜 江西 1.5 西瓜 北京 2.4 …… 給出平均進價在2元如下的商品名稱 答:select 名稱 from 商品表 group by 名稱 having avg(進價) < 2 (4)表名:高考信息表 准考證號 科目 成績 2006001 語文 119 2006001 數學 108 2006002 物理 142 2006001 化學 136 2006001 物理 127 2006002 數學 149 2006002 英語 110 2006002 語文 105 2006001 英語 98 2006002 化學 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 600 (5)表名:高考信息表 准考證號 數學 語文 英語 物理 化學 2006001 108 119 98 127 136 2006002 149 105 110 142 129 …… 給出高考總分在600以上的學生准考證號 答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600 (四部分) (一)表名:club id gender age 67 M 19 68 F 30 69 F 27 70 F 16 71 M 32 …… 查詢出該俱樂部裏男性會員和女性會員的總數 答:select gender,count(id) from club group by gender (二)表名:team ID(number型) Name(varchar2型) 1 a 2 b 3 b 4 a 5 c 6 c 要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的 例如:刪除後的結果應以下: ID(number型) Name(varchar2型) 1 a 2 b 5 c 請寫出SQL語句。 delete from team where id not in (select min(id) from team group by name) (三)表名:student name course score 張青 語文 72 王華 數學 72 張華 英語 81 張青 物理 67 李立 化學 98 張燕 物理 70 張青 化學 76 查詢出「張」姓學生中平均成績大於75分的學生信息 答:select * from student where name in (select name from student where name like '張%' group by name having avg(score) > 75) 1.一道SQL語句面試題,關於group by表內容: info 表 date result 2005-05-09 win 2005-05-09 lose 2005-05-09 lose 2005-05-09 lose 2005-05-10 win 2005-05-10 lose 2005-05-10 lose 若是要生成下列結果, 該如何寫sql語句? win lose 2005-05-09 2 2 2005-05-10 1 2 答案: (1) select date, sum(case when result = "win" then 1 else 0 end) as "win", sum(case when result = "lose" then 1 else 0 end) as "lose" from info group by date; (2) select a.date, a.result as win, b.result as lose from (select date, count(result) as result from info where result = "win" group by date) as a join (select date, count(result) as result from info where result = "lose" group by date) as b on a.date = b.date; 2.表中有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 else c end) from table; 3.請取出tb_send表中日期(SendTime字段)爲當天的全部記錄? (SendTime字段爲datetime型,包含日期與時間) select * from tb where datediff(dd,SendTime,getdate())=0 4.有一張表,裏面有3個字段:chinese,math,english。其中有一條記錄chinese 70分,math 80分,english 58分,請用一條sql語句查詢出全部記錄並按如下條件顯示出來(並寫出您的思路): 大於或等於80表示excellent,大於或等於60表示pass,小於60分表示fail。 顯示格式: 以上面的chinese 70分,math 80分,english 58分 chinese math english pass excellent fail select (case when chinese >= 80 then "excellent" when chinese >= 60 then "pass" else "fail" end) as chinese, (case when math >= 80 then "excellent" when math >= 60 then "pass" else "fail" end) as math, (case when english >= 80 then "excellent" when english >= 60 then "pass" else "fail" end) as english from grade; 5.請用一個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 ------------------------------------------ select t1.dep, sum(case when mon = 1 then yj else 0 end) as jun, sum(case when mon = 2 then yj else 0 end) as feb, sum(case when mon = 3 then yj else 0 end) as mar from t1 right join t2 on t1.dep = t2.dep group by t1.dep; 題目1、 有兩個表: TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; 2、請寫出SQL,取出計算機科考成績不及格的學生; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; 題目2、 有兩個表定義以下: create tableindividual ( firstname varchar2(20) not null lastname vatchar2(20) not null birthdate date gender varchar2(1) initial number(2) farorite varchar2(6) type varchar2(8) ); 在此表中建惟一索引 firstname + lastname create table chile_detail( firstname varchar2(20) lastname varchar2(20) cname varchar2(8) coment varchar2(2) type varchar2(8) ); 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 TableX有三個字段Code、 Name、 Age、 其中Code爲主鍵; TableY有三個字段Code、 Class、Score, 其中Code + Class 爲主鍵。兩表記錄以下: Code Name Age Code Class Score 97001 張三 22 97001 數學 80 97002 趙四 21 97002 計算機 59 97003 張飛 20 97003 計算機 60 97004 李五 22 97004 數學 55 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; select * from TableX where name like '張%' order by age 2、請寫出SQL,取出計算機科考成績不及格的學生; select * from tableX where code in (select code from tableY WEHRE class='計算機' and score <60) 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 select a.name,b.class,b.score from tableX full join tableY on a.code=b.code 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); insert into tablex values('97005','趙六',20) 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; update tablex set age=21 where code='97004' 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; delete tablex where code not in (select code from tabley) DELETE TABLEX WHERE CODE IN ( SELECT CODE FROM TABLEX WHERE CODE NOT IN(SELECT Y.CODE FROM TABLEY)) 但看了其它人的寫法,感受本身寫的不簡潔,學習一下. 1、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列; SELECT * FROM TableX WHERE Name LIKE '張%' ORDER BY Age; 2、請寫出SQL,取出計算機科考成績不及格的學生; SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = '計算機' AND Score < 60; 3、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果 SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code 4、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果 Left Out:SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code(+) Right Out: SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code(+) = y.Code Full Out:Left join union all right join 5、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20); INSERT INTO TableX(Code, Name, Age) VALUES('97005','趙六',20); COMMIT; 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新; UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = '李五') 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件; DELETE FROM TableX WHERE Code Not in (SELECT Code FROM TableY WHERE NVL(Score,0) = 0) 在此表中建惟一索引 firstname + lastname CREATE UNIQUE INDEX NAME_UNINDEX ON individual(firstname,lastname) 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄 DELETE FROM individual WHERE TO_CHAR(birthdate,'YYYY-MM-DD') = '1990-10-02'; COMMIT; 2、寫一修改語句實現: 將表child_detail 中的type 爲 「kkd」 的記錄的Cname 值爲「declear」,coment的值爲「02」 UPDATE chile_detail SET Cname = 'declear', coment = '02' WHERE type = 'kkd'; COMMIT; http://www.51testing.com/?uid-165528-action-viewspace-itemid-99563 http://www.cnblogs.com/zemliu/archive/2012/10/09/2717629.html http://bbs.csdn.NET/topics/270058476 [sql] view plain copy 一 單詞解釋(2分/個) 34 Data 數據Database 數據庫RDBMS 關係數據庫管理系統GRANT 受權 REVOKE取消權限DENY 拒絕權限DECLARE 定義變量PROCEDURE存儲過程 Transaction事務TRIGGER觸發器繼續 continue惟一 unqiue 主鍵 primary key標識列 identity外鍵 foreign kdy 檢查 check 約束 constraint 二 編寫SQL語句(5分/題)50 1) 建立一張學生表,包含如下信息,學號,姓名,年齡,性別,家庭住址,聯繫電話 Create table stu (學號 int , 姓名 varchar(8), 年齡 int, 性別 varchar(4), 家庭地址 varchar(50), 聯繫電話 int ); 2) 修改學生表的結構,添加一列信息,學歷 Alter table stu add 學歷 varchar(6); 3) 修改學生表的結構,刪除一列信息,家庭住址 Alter table stu drop column 家庭地址 4) 向學生表添加以下信息: 學號 姓名年齡性別聯繫電話學歷 1A22男123456小學 2B21男119中學 3C23男110高中 4D18女114大學 Insert into stu values(1,’A’,22,’男’,123456,’小學’) Insert into stu values(2,’B’,21,’男’,119,’中學’) Insert into stu values(3,’C’,23,’男’,110,’高中’) Insert into stu values(4,’D’,18,’女’,114,’大學’) 修改學生表的數據,將電話號碼以11開頭的學員的學歷改成「大專」 Update stu set 學歷=’大專’ where 聯繫電話 like ‘11%’ 6) 刪除學生表的數據,姓名以C開頭,性別爲‘男’的記錄刪除 Delect from stu where 性別=’男’ and 姓名 like ‘c%’ 7) 查詢學生表的數據,將全部年齡小於22歲的,學歷爲「大專」的,學生的姓名和學號示出來 Select 姓名,學號 from stu where 年齡<22 and 學歷=’大專’ 8) 查詢學生表的數據,查詢全部信息,列出前25%的記錄 Select top 25 percent * from stu 9) 查詢出全部學生的姓名,性別,年齡降序排列 Select 姓名,性別 from stu order by 年齡 desc 10) 按照性別分組查詢全部的平均年齡 Select avg(年齡) from stu group by 性別 三 填空(3分/題) 36 1) 索引分爲__彙集索引___和__非彙集索引__在一張表上最多能夠建立1個 彙集索引_索引。可是能夠建立_249個非 彙集索引 索引。 2) 系統存儲過程_sp-helptext__是用來顯示規則,默認值,未加密的存儲過程,用戶定義函數,觸發或視圖的文本 3) 事務開始:begin Transction 提交事務:commit Transction 回滾事務:rollback Transction 四 問答題(5分/題)60 1) 數據庫包含哪些那幾種後綴名的文件必須,這些文件分別存放在什麼的信息? 主要數據文件(.mdf) 包含數據用戶收集的信息,還有數據庫其餘相關的信息, 日誌數據文件(.ndf) 存放用戶對數據庫的增刪改查的信息,用於備份恢復使用 2) TRUNCATE TABLE 命令是什麼含義?和Delete from 表名有什麼區? TRUNCATE TABLE: 提供了一種刪除表中全部記錄的快速方法 Delete from 表名:能夠刪除表的一個或多條記錄 3) 說出如下聚合數的含義:avg ,sum ,max ,min , count ,count(*) AVG:求平均值 SUM:求和 MAX:求最大值 MIN:求最小值 COUNT(*):返回全部行數 COUNT返回知足指定條件的記錄值 inner join 是什麼意思?做用是什麼?寫出基本語法結構 INNER JOIN 內聯接,用於返回兩個表中要查詢的列數據通訊 Select * from 表名1 inner join 表名2 on 條件表達式 5) 左向外聯接,右向外聯接,全聯接的關健字如何寫? Left outer join 左向外聯接 Right outer join 右向外聯接 Full outer join 全聯接 6) 子查詢分爲幾類,說明相互之間的別 了查詢分三種基本子查詢: 1.使用in 查詢返回一列或更多值 2.比較運算符,返回單個值勤作爲外查詢的參數 3.用exists 查詢時至關於進行一次數據測試 7) 實現實體完整性,實現域完整性,實現 完整性(引用完整性),實現自定義完整性分別使用什麼手段? 實現實體完整性: 主鍵約束 惟一約束 標識列 實現域完整性: 默認值約束 檢查約束 非空屬性 引和完整性: 外鍵引用 8) 視圖能夠更新嗎?會影響到實際表嗎? 視圖是能夠更新的,視圖只是基於基本表上的虛擬表,對視圖的更新會直接影響到實際表 9) 談談這樣幾個角色, dbo , Sysadmin public Dbo : 是數據庫的擁有者,對數據庫擁有全部操做的權限 Sysadmin : 能夠對SQL SERVER執行任何活動 Public : 自動建立的,能捕獲數據庫中用戶的全部默認權限 10) 何爲動態遊標?何爲靜態遊標? 動態遊標與靜態遊標相對,反映結果集中所作的全部更改, 靜態遊標的結果集在遊標打開時,創建在tempdb中,總按照遊標打開時的原樣顯示 11) 什麼是存儲過程?爲何存儲過程要比單純的Sql 語句執行起來要快? 存儲過程:是一組預先編譯好的T-SQL代碼 在建立存儲過程時通過了語法和性能優化,執行沒必要重複的步驟,使用存儲過程可提升運行效率 12)什麼是Inserted 表 ?什麼是Deleted 表? Inserted表用於存儲inserted和update語句影響的副本 Deleted 表用於存儲delect 和 update語句影響的行的副本