必會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)表名:高考信息表  
准考證號   科目       成績  
    語文       119  
    數學       108  
    物理       142  
    化學       136  
    物理       127  
    數學       149  
    英語       110  
           語文       105  
           英語        98  
    化學       129  
……  
  
給出高考總分在600以上的學生准考證號  
  
答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 6005)表名:高考信息表  
准考證號        數學        語文        英語        物理        化學  
               108         119         98        127         136  
               149         105        110        142         129  
……  
  
給出高考總分在600以上的學生准考證號  
  
答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600  
  
  
  
(四部分)  
(一)表名:club  
  
id gender age  
M      19  
F      30  
F      27  
F      16  
M      32  
……  
  
查詢出該俱樂部里男性會員和女性會員的總數  
  
答:select gender,count(id) from club group by gender  
  
(二)表名:team  
ID(number型) Name(varchar2型)  
                 a  
                 b  
                 b  
                 a  
                 c  
                 c  
要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的  
例如:刪除后的結果應如下:  
ID(number型) Name(varchar2型)  
                 a  
                 b  
                 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  
  
--------------------------------  
     國內業務一部  
     國內業務二部  
     國內業務三部  
     國際業務部  
  
table3 (result)  
  
部門dep 一月份      二月份      三月份  
  
--------------------------------------  
     10        null      null  
     10         8        null  
     null       5        8  
     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  
張三 22 97001 數學 80  
趙四 21 97002 計算機 59  
張飛 20 97003 計算機 60  
李五 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  
張三 22 97001 數學 80  
趙四 21 97002 計算機 59  
張飛 20 97003 計算機 60  
李五 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)表名:高考信息表  
准考證號   科目       成績  
    語文       119  
    數學       108  
    物理       142  
    化學       136  
    物理       127  
    數學       149  
    英語       110  
           語文       105  
           英語        98  
    化學       129  
……  
  
給出高考總分在600以上的學生准考證號  
  
答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 6005)表名:高考信息表  
准考證號        數學        語文        英語        物理        化學  
               108         119         98        127         136  
               149         105        110        142         129  
……  
  
給出高考總分在600以上的學生准考證號  
  
答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600  
  
  
  
(四部分)  
(一)表名:club  
  
id gender age  
M      19  
F      30  
F      27  
F      16  
M      32  
……  
  
查詢出該俱樂部里男性會員和女性會員的總數  
  
答:select gender,count(id) from club group by gender  
  
(二)表名:team  
ID(number型) Name(varchar2型)  
                 a  
                 b  
                 b  
                 a  
                 c  
                 c  
要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的  
例如:刪除后的結果應如下:  
ID(number型) Name(varchar2型)  
                 a  
                 b  
                 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  
  
--------------------------------  
     國內業務一部  
     國內業務二部  
     國內業務三部  
     國際業務部  
  
table3 (result)  
  
部門dep 一月份      二月份      三月份  
  
--------------------------------------  
     10        null      null  
     10         8        null  
     null       5        8  
     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  
張三 22 97001 數學 80  
趙四 21 97002 計算機 59  
張飛 20 97003 計算機 60  
李五 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  
張三 22 97001 數學 80  
趙四 21 97002 計算機 59  
張飛 20 97003 計算機 60  
李五 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)表名:高考信息表  
准考證號   科目       成績  
    語文       119  
    數學       108  
    物理       142  
    化學       136  
    物理       127  
    數學       149  
    英語       110  
           語文       105  
           英語        98  
    化學       129  
……  
  
給出高考總分在600以上的學生准考證號  
  
答:select 准考證號 from 高考信息表 group by 准考證號 having sum(成績) > 6005)表名:高考信息表  
准考證號        數學        語文        英語        物理        化學  
               108         119         98        127         136  
               149         105        110        142         129  
……  
  
給出高考總分在600以上的學生准考證號  
  
答:select 准考證號 from 高考信息表 where (數學+語文+英語+物理+化學) > 600  
  
  
  
(四部分)  
(一)表名:club  
  
id gender age  
M      19  
F      30  
F      27  
F      16  
M      32  
……  
  
查詢出該俱樂部里男性會員和女性會員的總數  
  
答:select gender,count(id) from club group by gender  
  
(二)表名:team  
ID(number型) Name(varchar2型)  
                 a  
                 b  
                 b  
                 a  
                 c  
                 c  
要求:執行一個刪除語句,當Name列上有相同時,只保留ID這列上值小的  
例如:刪除后的結果應如下:  
ID(number型) Name(varchar2型)  
                 a  
                 b  
                 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  
  
--------------------------------  
     國內業務一部  
     國內業務二部  
     國內業務三部  
     國際業務部  
  
table3 (result)  
  
部門dep 一月份      二月份      三月份  
  
--------------------------------------  
     10        null      null  
     10         8        null  
     null       5        8  
     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  
張三 22 97001 數學 80  
趙四 21 97002 計算機 59  
張飛 20 97003 計算機 60  
李五 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  
張三 22 97001 數學 80  
趙四 21 97002 計算機 59  
張飛 20 97003 計算機 60  
李五 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語句影響的行的副本

 


免責聲明!

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



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