必會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;  
  
題目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(進價) < 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;  
  
題目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(進價) < 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;  
  
題目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(進價) < 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;  
  
題目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(進價) < 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;  
  
題目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. (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. 題目1、  
  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. 一、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列;  
  286.   
  287.   
  288. 二、請寫出SQL,取出計算機科考成績不及格的學生;  
  289.   
  290.   
  291. 三、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果  
  292.   
  293.   
  294. 四、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果  
  295.   
  296.   
  297. 五、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20);  
  298.   
  299.   
  300. 六、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;  
  301.   
  302.   
  303. 七、請寫SQL,刪除TableX中沒有考試成績的學生記錄,請使用not in條件;  
  304.   
  305.   
  306. 題目2、  
  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. 一、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄  
  330.   
  331. 二、寫一修改語句實現: 將表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. 一、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列;  
  343. select * from TableX where name like '張%' order by age  
  344.   
  345. 二、請寫出SQL,取出計算機科考成績不及格的學生;  
  346. select * from tableX where code in (select code from tableY WEHRE class='計算機' and score <60)  
  347.   
  348. 三、經過等值聯接,取出Name、Class、Score,請寫出SQL即輸出結果  
  349. select a.name,b.class,b.score from tableX a,tableY b where a.code=b.code   
  350.   
  351. 四、經過外聯接,取出每一個學生的Name、Class、Score、請寫SQL輸出結果  
  352. select a.name,b.class,b.score from tableX full join tableY on a.code=b.code  
  353.   
  354. 五、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20);  
  355. insert into tablex values('97005','趙六',20)  
  356.   
  357.   
  358. 六、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;  
  359. update tablex set age=21 where code='97004'  
  360.   
  361. 七、請寫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. 一、請寫出SQL,找出全部姓張的學生,並按年齡從小到大排列;  
  369. SELECT * FROM TableX WHERE Name LIKE '張%' ORDER BY Age;  
  370.   
  371.   
  372. 二、請寫出SQL,取出計算機科考成績不及格的學生;  
  373. SELECT * FROM TableX x, TableY y WHERE x.Code = y.Code AND Class = '計算機' AND Score < 60;  
  374.   
  375.   
  376. 三、經過等值聯接,取出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. 四、經過外聯接,取出每一個學生的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. 五、請寫SQL,在TableX 表中增長一條學生記錄(學號:97005 姓名:趙六 年齡:20);  
  387. INSERT INTO TableX(Code, Name, Age) VALUES('97005','趙六',20);  
  388. COMMIT;  
  389.   
  390. 六、李五的年齡記錄錯了,應該是21,請寫SQL,根據主鍵進行更新;  
  391. UPDATE TableX SET Age = 21 WHERE Code in (SELECT Code FROM TableX WHERE Name = '李五')  
  392.   
  393.   
  394. 七、請寫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. 一、寫一個簡單的SQL語句實現:刪除表individual中一條出生日期(brithdate)爲 1990年10月2日 出生的人的記錄  
  403. DELETE FROM individual WHERE TO_CHAR(birthdate,'YYYY-MM-DD') = '1990-10-02';  
  404. COMMIT;  
  405.   
  406. 二、寫一修改語句實現: 將表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語句影響的行的副本 
相關文章
相關標籤/搜索