必會SQL筆試題


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(進價) < 24)表名:高考信息表  
准考證號   科目       成績  
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(成績) > 6005)表名:高考信息表  
准考證號        數學        語文        英語        物理        化學  
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;  
  
題目一、  
有兩個表:  
  
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條件;  
  
  
題目二、  
有兩個表定義如下:  
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(進價) < 24)表名:高考信息表  
准考證號   科目       成績  
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(成績) > 6005)表名:高考信息表  
准考證號        數學        語文        英語        物理        化學  
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;  
  
題目一、  
有兩個表:  
  
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條件;  
  
  
題目二、  
有兩個表定義如下:  
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(進價) < 24)表名:高考信息表  
准考證號   科目       成績  
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(成績) > 6005)表名:高考信息表  
准考證號        數學        語文        英語        物理        化學  
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;  
  
題目一、  
有兩個表:  
  
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條件;  
  
  
題目二、  
有兩個表定義如下:  
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(進價) < 24)表名:高考信息表  
准考證號   科目       成績  
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(成績) > 6005)表名:高考信息表  
准考證號        數學        語文        英語        物理        化學  
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;  
  
題目一、  
有兩個表:  
  
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條件;  
  
  
題目二、  
有兩個表定義如下:  
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(進價) < 24)表名:高考信息表  
准考證號   科目       成績  
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(成績) > 6005)表名:高考信息表  
准考證號        數學        語文        英語        物理        化學  
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;  
  
題目一、  
有兩個表:  
  
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條件;  
  
  
題目二、  
有兩個表定義如下:  
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. (1)表名:購物信息  
  2. 購物人      商品名稱     數量  
  3. A            甲          2  
  4. B            乙          4  
  5. C            丙          1  
  6. A            丁          2  
  7. B            丙          5  
  8. ……  
  9.   
  10. 給出所有購入商品為兩種或兩種以上的購物人記錄  
  11.   
  12. 答:select * from 購物信息 where 購物人 in (select 購物人 from 購物信息 group by 購物人 having count(*) >= 2);  
  13.   
  14. (2)表名:成績表  
  15. 姓名   課程       分數  
  16. 張三     語文       81  
  17. 張三     數學       75  
  18. 李四     語文       56  
  19. 李四     數學       90  
  20. 王五     語文       81  
  21. 王五     數學       100  
  22. 王五     英語       49  
  23.   
  24.   
  25. 給出成績全部合格的學生信息(包含姓名、課程、分數),注:分數在60以上評為合格  
  26.   
  27. 答:select * from 成績表 where 姓名 not in (select distinct 姓名 from 成績表 where 分數 < 60)  
  28. 或者:  
  29. select * from 成績表 where 姓名 in (select 姓名 from 成績表 group by 姓名 having min(分數) >=60)  
  30.   
  31.   
  32. (3)表名:商品表  
  33. 名稱   產地             進價  
  34. 蘋果   煙台                2.5  
  35. 蘋果   雲南                1.9  
  36. 蘋果   四川                3  
  37. 西瓜   江西                1.5  
  38. 西瓜   北京                2.4  
  39. ……  
  40.   
  41. 給出平均進價在2元以下的商品名稱  
  42.   
  43. 答:select 名稱 from 商品表 group by 名稱 having avg(進價) < 2  
  44.   
  45. (4)表名:高考信息表  
  46. 准考證號   科目       成績  
  47. 2006001     語文       119  
  48. 2006001     數學       108  
  49. 2006002     物理       142  
  50. 2006001     化學       136  
  51. 2006001     物理       127  
  52. 2006002     數學       149  
  53. 2006002     英語       110  
  54. 2006002            語文       105  
  55. 2006001            英語        98  
  56. 2006002     化學       129  
  57. ……  
  58.   
  59. 給出高考總分在600以上的學生准考證號  
  60.   
  61. 答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 600  
  62.   
  63. (5)表名:高考信息表  
  64. 准考證號        數學        語文        英語        物理        化學  
  65. 2006001                108         119         98        127         136  
  66. 2006002                149         105        110        142         129  
  67. ……  
  68.   
  69. 給出高考總分在600以上的學生准考證號  
  70.   
  71. 答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600  
  72.   
  73.   
  74.   
  75. (四部分)  
  76. (一)表名:club  
  77.   
  78. id gender age  
  79. 67 M      19  
  80. 68 F      30  
  81. 69 F      27  
  82. 70 F      16  
  83. 71 M      32  
  84. ……  
  85.   
  86. 查詢出該俱樂部里男性會員和女性會員的總數  
  87.   
  88. 答:select gender,count(id) from club group by gender  
  89.   
  90. (二)表名:team  
  91. ID(number型) Name(varchar2型)  
  92. 1                  a  
  93. 2                  b  
  94. 3                  b  
  95. 4                  a  
  96. 5                  c  
  97. 6                  c  
  98. 要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的  
  99. 例如:刪除后的結果應如下:  
  100. ID(number型) Name(varchar2型)  
  101. 1                  a  
  102. 2                  b  
  103. 5                  c  
  104. 請寫出SQL語句。  
  105.   
  106. delete from team where id not in (select min(id) from team group by name)  
  107.   
  108. (三)表名:student  
  109.   
  110. name course score  
  111. 張青 語文     72  
  112. 王華 數學     72  
  113. 張華 英語     81  
  114. 張青 物理     67  
  115. 李立 化學     98  
  116. 張燕 物理     70  
  117. 張青 化學     76  
  118.   
  119. 查詢出“張”姓學生中平均成績大於75分的學生信息  
  120.   
  121. 答:select * from student where name in (select name from student  
  122. where name like '張%' group by name having avg(score) > 75)  
  123.   
  124.   
  125.   
  126. 1.一道SQL語句面試題,關於group by表內容:  
  127.   
  128. info 表  
  129.   
  130. date result  
  131.   
  132. 2005-05-09 win  
  133.   
  134. 2005-05-09 lose  
  135.   
  136. 2005-05-09 lose  
  137.   
  138. 2005-05-09 lose  
  139.   
  140. 2005-05-10 win  
  141.   
  142. 2005-05-10 lose  
  143.   
  144. 2005-05-10 lose  
  145.   
  146. 如果要生成下列結果, 該如何寫sql語句?  
  147.   
  148.               win lose  
  149.   
  150. 2005-05-09 2 2  
  151.   
  152. 2005-05-10 1 2  
  153.   
  154. 答案:  
  155.   
  156. (1) select datesum(case when result = "win" then 1 else 0 endas "win"sum(case when result = "lose" then 1 else 0 endas "lose" from info group by date;  
  157.   
  158. (2) select a.date, a.result as win, b.result as lose  
  159.   
  160.   from  
  161.   
  162.   (select datecount(result) as result from info where result = "win" group by dateas a  
  163.   
  164.   join  
  165.   
  166.   (select datecount(result) as result from info where result = "lose" group by dateas b  
  167.   
  168.   on a.date = b.date;  
  169.   
  170.    
  171.   
  172. 2.表中有A B C三列,用SQL語句實現:當A列大於B列時選擇A列否則選擇B列,當B列大於C列時選擇B列否則選擇C列  
  173.   
  174. select (case when a > b then a else b end), (case when b > c then b else c endfrom table;  
  175.   
  176. 3.請取出tb_send表中日期(SendTime字段)為當天的所有記錄? (SendTime字段為datetime型,包含日期與時間)  
  177.   
  178. select * from tb where datediff(dd,SendTime,getdate())=0  
  179.   
  180. 4.有一張表,里面有3個字段:chinese,math,english。其中有一條記錄chinese 70分,math 80分,english 58分,請用一條sql語句查詢出所有記錄並按以下條件顯示出來(並寫出您的思路):   
  181.   
  182.    大於或等於80表示excellent,大於或等於60表示pass,小於60分表示fail。   
  183.   
  184.        顯示格式: 以上面的chinese 70分,math 80分,english 58分  
  185.   
  186.        chinese              math                english   
  187.   
  188.        pass                  excellent           fail  
  189.   
  190.    
  191.   
  192. select (case when chinese >= 80 then "excellent" when chinese >= 60 then "pass" else "fail" endas chinese,  
  193.   
  194.   (case when math >= 80 then "excellent" when math >= 60 then "pass" else "fail" endas math,  
  195.   
  196.   (case when english >= 80 then "excellent" when english >= 60 then "pass" else "fail" endas english  
  197.   
  198.   from grade;  
  199.   
  200.    
  201.   
  202. 5.請用一個sql語句得出結果  
  203.   
  204. 從table1,table2中取出如table3所列格式數據,注意提供的數據及結果不准確,只是作為一個格式向大家請教。  
  205.   
  206. 如使用存儲過程也可以。  
  207.   
  208. table1  
  209.   
  210. 月份mon 部門dep 業績yj  
  211.   
  212. -------------------------------  
  213.   
  214. 一月份      01      10  
  215.   
  216. 一月份      02      10  
  217.   
  218. 一月份      03      5  
  219.   
  220. 二月份      02      8  
  221.   
  222. 二月份      04      9  
  223.   
  224. 三月份      03      8  
  225.   
  226.    
  227.   
  228. table2  
  229.   
  230. 部門dep      部門名稱dname  
  231.   
  232. --------------------------------  
  233.   
  234.       01      國內業務一部  
  235.   
  236.       02      國內業務二部  
  237.   
  238.       03      國內業務三部  
  239.   
  240.       04      國際業務部  
  241.   
  242. table3 (result)  
  243.   
  244. 部門dep 一月份      二月份      三月份  
  245.   
  246. --------------------------------------  
  247.   
  248.       01      10        null      null  
  249.   
  250.       02      10         8        null  
  251.   
  252.       03      null       5        8  
  253.   
  254.       04      null      null      9  
  255.   
  256. ------------------------------------------  
  257.   
  258. select t1.dep,  
  259.   
  260. sum(case when mon = 1 then yj else 0 endas jun,  
  261.   
  262. sum(case when mon = 2 then yj else 0 endas feb,  
  263.   
  264. sum(case when mon = 3 then yj else 0 endas mar  
  265.   
  266. from  
  267.   
  268. t1 right join t2 on t1.dep = t2.dep  
  269.   
  270. group by t1.dep;  
  271.   
  272. 題目一、  
  273. 有兩個表:  
  274.   
  275. TableX有三個字段Code、 Name、 Age、 其中Code為主鍵;  
  276. TableY有三個字段Code、 Class、Score, 其中Code + Class 為主鍵。兩表記錄如下:  
  277.   
  278. Code Name Age Code Class Score  
  279. 97001 張三 22 97001 數學 80  
  280. 97002 趙四 21 97002 計算機 59  
  281. 97003 張飛 20 97003 計算機 60  
  282. 97004 李五 22 97004 數學 55  
  283.   
  284.   
  285. 1、請寫出SQL,找出所有姓張的學生,並按年齡從小到大排列;  
  286.   
  287.   
  288. 2、請寫出SQL,取出計算機科考成績不及格的學生;  
  289.   
  290.   
  291. 3、通過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果  
  292.   
  293.   
  294. 4、通過外聯接,取出每個學生的Name、Class、Score、請寫SQL輸出結果  
  295.   
  296.   
  297. 5、請寫SQL,在TableX 表中增加一條學生記錄(學號:97005 姓名:趙六 年齡:20);  
  298.   
  299.   
  300. 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;  
  301.   
  302.   
  303. 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件;  
  304.   
  305.   
  306. 題目二、  
  307. 有兩個表定義如下:  
  308. create tableindividual (  
  309. firstname  varchar2(20) not null  
  310. lastname    vatchar2(20) not null  
  311. birthdate  date  
  312. gender      varchar2(1)  
  313. initial    number(2)  
  314. farorite    varchar2(6)  
  315. type        varchar2(8)  
  316. );  
  317.   
  318. 在此表中建唯一索引 firstname + lastname  
  319.   
  320. create table chile_detail(  
  321. firstname  varchar2(20)  
  322. lastname    varchar2(20)  
  323. cname      varchar2(8)  
  324. coment      varchar2(2)  
  325. type        varchar2(8)  
  326. );  
  327.   
  328.   
  329. 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)為 1990年10月2日 出生的人的記錄  
  330.   
  331. 2、寫一修改語句實現: 將表child_detail 中的type 為 “kkd” 的記錄的Cname 值為“declear”,coment的值為“02”  
  332. TableX有三個字段Code、 Name、 Age、 其中Code為主鍵;  
  333. TableY有三個字段Code、 Class、Score, 其中Code + Class 為主鍵。兩表記錄如下:  
  334.   
  335. Code Name Age Code Class Score  
  336. 97001 張三 22 97001 數學 80  
  337. 97002 趙四 21 97002 計算機 59  
  338. 97003 張飛 20 97003 計算機 60  
  339. 97004 李五 22 97004 數學 55  
  340.   
  341.   
  342. 1、請寫出SQL,找出所有姓張的學生,並按年齡從小到大排列;  
  343. select * from TableX where name like '張%' order by age  
  344.   
  345. 2、請寫出SQL,取出計算機科考成績不及格的學生;  
  346. select * from tableX where code in (select code from tableY WEHRE class='計算機' and score <60)  
  347.   
  348. 3、通過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果  
  349. select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code   
  350.   
  351. 4、通過外聯接,取出每個學生的Name、Class、Score、請寫SQL輸出結果  
  352. select a.name,b.class,b.score from tableX full join tableY on a.code=b.code  
  353.   
  354. 5、請寫SQL,在TableX 表中增加一條學生記錄(學號:97005 姓名:趙六 年齡:20);  
  355. insert into tablex values('97005','趙六',20)  
  356.   
  357.   
  358. 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;  
  359. update tablex set age=21 where code='97004'  
  360.   
  361. 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件;  
  362. delete tablex where code not in (select code from tabley)  
  363.    
  364. DELETE TABLEX WHERE CODE IN (  
  365. SELECT CODE FROM TABLEX WHERE CODE NOT IN(SELECT Y.CODE FROM TABLEY))  
  366. 但看了其它人的寫法,感覺自己寫的不簡潔,學習一下.  
  367.    
  368. 1、請寫出SQL,找出所有姓張的學生,並按年齡從小到大排列;  
  369. SELECT * FROM TableX WHERE Name LIKE '張%' ORDER BY Age;  
  370.   
  371.   
  372. 2、請寫出SQL,取出計算機科考成績不及格的學生;  
  373. SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = '計算機' AND Score < 60;  
  374.   
  375.   
  376. 3、通過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果  
  377. SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code  
  378.   
  379.   
  380. 4、通過外聯接,取出每個學生的Name、Class、Score、請寫SQL輸出結果  
  381. Left Out:SELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code = y.Code(+)  
  382. Right OutSELECT x.Name, y.Class, y.Score FROM TableX x, TableY y WHERE x.Code(+) = y.Code  
  383. Full Out:Left join union all right join  
  384.   
  385.   
  386. 5、請寫SQL,在TableX 表中增加一條學生記錄(學號:97005 姓名:趙六 年齡:20);  
  387. INSERT INTO TableX(Code, Name, Age) VALUES('97005','趙六',20);  
  388. COMMIT;  
  389.   
  390. 6、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;  
  391. UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = '李五')  
  392.   
  393.   
  394. 7、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件;  
  395. DELETE FROM TableX WHERE Code Not in (SELECT Code FROM TableY WHERE NVL(Score,0) = 0)  
  396.   
  397.   
  398. 在此表中建唯一索引 firstname + lastname  
  399. CREATE UNIQUE INDEX NAME_UNINDEX ON individual(firstname,lastname)  
  400.   
  401.   
  402. 1、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)為 1990年10月2日 出生的人的記錄  
  403. DELETE FROM individual WHERE TO_CHAR(birthdate,'YYYY-MM-DD') = '1990-10-02';  
  404. COMMIT;  
  405.   
  406. 2、寫一修改語句實現: 將表child_detail 中的type 為 “kkd” 的記錄的Cname 值為“declear”,coment的值為“02”  
  407. UPDATE chile_detail SET Cname = 'declear', coment = '02'  
  408. WHERE type = 'kkd';  
  409. COMMIT;  
  410.   
  411.   
  412.   
  413.   
  414. http://www.51testing.com/?uid-165528-action-viewspace-itemid-99563  
  415.   
  416. http://www.cnblogs.com/zemliu/archive/2012/10/09/2717629.html  
  417. http://bbs.csdn.NET/topics/270058476  
  418.    

 

 

[sql]  view plain  copy
 
  1. 一 單詞解釋(2分/個) 34  
  2. Data 數據Database 數據庫RDBMS 關系數據庫管理系統GRANT 授權  
  3. REVOKE取消權限DENY 拒絕權限DECLARE 定義變量PROCEDURE存儲過程  
  4. Transaction事務TRIGGER觸發器繼續 continue唯一 unqiue  
  5. 主鍵 primary key標識列 identity外鍵 foreign kdy 檢查 check  
  6. 約束 constraint  
  7. 二 編寫SQL語句(5分/題)50  
  8. 1) 創建一張學生表,包含以下信息,學號,姓名,年齡,性別,家庭住址,聯系電話  
  9. Create table stu (學號 int ,  
  10. 姓名 varchar(8),  
  11. 年齡 int,  
  12. 性別 varchar(4),  
  13. 家庭地址 varchar(50),  
  14. 聯系電話 int  
  15. );  
  16. 2) 修改學生表的結構,添加一列信息,學歷  
  17. Alter table stu add 學歷 varchar(6);  
  18. 3) 修改學生表的結構,刪除一列信息,家庭住址  
  19. Alter table stu drop column 家庭地址  
  20. 4) 向學生表添加如下信息:  
  21. 學號 姓名年齡性別聯系電話學歷  
  22. 1A22男123456小學  
  23. 2B21男119中學  
  24. 3C23男110高中  
  25. 4D18女114大學  
  26. Insert into stu values(1,’A’,22,’男’,123456,’小學’)  
  27. Insert into stu values(2,’B’,21,’男’,119,’中學’)  
  28. Insert into stu values(3,’C’,23,’男’,110,’高中’)  
  29. Insert into stu values(4,’D’,18,’女’,114,’大學’)  
  30.  修改學生表的數據,將電話號碼以11開頭的學員的學歷改為“大專”  
  31. Update stu set 學歷=’大專’ where 聯系電話 like ‘11%’  
  32. 6) 刪除學生表的數據,姓名以C開頭,性別為‘男’的記錄刪除  
  33. Delect from stu where 性別=’男’ and 姓名 like ‘c%’  
  34. 7) 查詢學生表的數據,將所有年齡小於22歲的,學歷為“大專”的,學生的姓名和學號示出來  
  35. Select 姓名,學號 from stu where 年齡<22 and 學歷=’大專’  
  36. 8) 查詢學生表的數據,查詢所有信息,列出前25%的記錄  
  37. Select top 25 percent * from stu  
  38. 9) 查詢出所有學生的姓名,性別,年齡降序排列  
  39. Select 姓名,性別 from stu order by 年齡 desc  
  40. 10) 按照性別分組查詢所有的平均年齡  
  41. Select avg(年齡) from stu group by 性別  
  42. 三 填空(3分/題) 36  
  43. 1) 索引分為__聚集索引___和__非聚集索引__在一張表上最多可以創建1個 聚集索引_索引。但是可以創建_249個非 聚集索引 索引。  
  44. 2) 系統存儲過程_sp-helptext__是用來顯示規則,默認值,未加密的存儲過程,用戶定義函數,觸發或視圖的文本  
  45. 3) 事務開始:begin Transction  
  46. 提交事務:commit Transction  
  47. 回滾事務:rollback Transction  
  48. 四 問答題(5分/題)60  
  49. 1) 數據庫包含哪些那幾種后綴名的文件必須,這些文件分別存放在什么的信息?  
  50. 主要數據文件(.mdf) 包含數據用戶收集的信息,還有數據庫其他相關的信息,  
  51. 日志數據文件(.ndf) 存放用戶對數據庫的增刪改查的信息,用於備份恢復使用  
  52. 2) TRUNCATE TABLE 命令是什么含義?和Delete from 表名有什么區?  
  53. TRUNCATE TABLE: 提供了一種刪除表中所有記錄的快速方法  
  54. Delete from 表名:可以刪除表的一個或多條記錄  
  55. 3) 說出以下聚合數的含義:avg ,sum ,max ,min , count ,count(*)  
  56. AVG:求平均值  
  57. SUM:求和  
  58. MAX:求最大值  
  59. MIN:求最小值  
  60. COUNT(*):返回所有行數  
  61. COUNT返回滿足指定條件的記錄值  
  62.  inner join 是什么意思?作用是什么?寫出基本語法結構  
  63. INNER JOIN 內聯接,用於返回兩個表中要查詢的列數據通信  
  64. Select * from 表名1 inner join 表名2 on 條件表達式  
  65. 5) 左向外聯接,右向外聯接,全聯接的關健字如何寫?  
  66. Left outer join 左向外聯接  
  67. Right outer join 右向外聯接  
  68. Full outer join 全聯接  
  69. 6) 子查詢分為幾類,說明相互之間的別  
  70. 了查詢分三種基本子查詢: 1.使用in 查詢返回一列或更多值  
  71. 2.比較運算符,返回單個值勤做為外查詢的參數  
  72. 3.用exists 查詢時相當於進行一次數據測試  
  73. 7) 實現實體完整性,實現域完整性,實現 完整性(引用完整性),實現自定義完整性分別使用什么手段?  
  74. 實現實體完整性: 主鍵約束 唯一約束 標識列  
  75. 實現域完整性: 默認值約束 檢查約束 非空屬性  
  76. 引和完整性: 外鍵引用  
  77. 8) 視圖可以更新嗎?會影響到實際表嗎?  
  78. 視圖是可以更新的,視圖只是基於基本表上的虛擬表,對視圖的更新會直接影響到實際表  
  79. 9) 談談這樣幾個角色, dbo , Sysadmin public  
  80. Dbo : 是數據庫的擁有者,對數據庫擁有所有操作的權限  
  81. Sysadmin : 可以對SQL SERVER執行任何活動  
  82. Public : 自動創建的,能捕獲數據庫中用戶的所有默認權限  
  83. 10) 何為動態游標?何為靜態游標?  
  84. 動態游標與靜態游標相對,反映結果集中所做的所有更改,  
  85. 靜態游標的結果集在游標打開時,建立在tempdb中,總按照游標打開時的原樣顯示  
  86. 11) 什么是存儲過程?為什么存儲過程要比單純的Sql 語句執行起來要快?  
  87. 存儲過程:是一組預先編譯好的T-SQL代碼  
  88. 在創建存儲過程時經過了語法和性能優化,執行不必重復的步驟,使用存儲過程可提高運行效率  
  89. 12)什么是Inserted 表 ?什么是Deleted 表?  
  90. Inserted表用於存儲inserted和update語句影響的副本  
  91. Deleted 表用於存儲delect 和 update語句影響的行的副本 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM