數據庫題目解答

 在網上看到這些題但是沒有答案,所以自己解答了一下,

1.用一條SQL語句 查詢出每門課都大於80分的學生姓名(表名:score)

name  kecheng   fenshu
張三    語文       81
張三    數學      75
李四    語文      76
李四    數學      90
王五    語文      81
王五    數學      100
王五    英語      90

答:

select distinct name
from test
where name not in(
 select name
 from test
 where fenshu<80
)


2.學生表(student) 如下:
自動編號   學號 姓名  課程編號 課程名稱 分數
1        2005001 張三   0001       數學        69
2        2005002 李四    0001      數學        89
3        2005001 張三    0001      數學        69
刪除除了自動編號不同,其他都相同的學生冗餘信息
答:

delete a
from table_name a
inner join(
 select 學號, 姓名  ,課程編號 ,課程名稱 ,分數,min(自動編號) 自動編號
 from table_name
 group by 學號, 姓名,  課程編號 ,課程名稱 ,分數
) b on a.學號=b.學號 and a.姓名=b.姓名 and a.課程名稱=b.課程名稱 and a.分數=b.分數 and a.自動編號>b.自動編號

3.一個叫department的表,裏面只有一個字段name,一共有4條紀錄,分別是a,b,c,d,對應四個球隊,現在四個球隊進行比賽,用一條sql語句顯示所有可能的比賽組合。

解:

select a.name,b.name
from departmen a
inner join departmen b on a.name<b.name

 

4.請用SQL語句實現:從TestDB數據表中查詢出所有月份的發生額都比101科目相應月份的發生額高的科目。請注意:TestDB中有很多科目,都有1-12月份的發生額。
AccID:科目代碼,Occmonth:發生額月份,DebitOccur:發生額。

答:

select a.*
from table_name a
inner join(
 select Occmonth,DebitOccur
 from table_name
 where AccID=101
) b on a.Occmonth=b.Occmonth and a.DebitOccur>b.DebitOccur
where AccID<>101

 

5.怎麼把這樣一個表(aaa)
year   month amount
1991   1     1.1
1991   2     1.2
1991   3     1.3
1991   4     1.4
1992   1     2.1
1992   2     2.2
1992   3     2.3
1992   4     2.4
查成這樣一個結果
year  m1   m2   m3   m4
1991 1.1  1.2   1.3   1.4
1992 2.1  2.2   2.3   2.4

解法一:
select year,max(m1) as m1
,max(m2) as m2,max(m3) as m3,max(m4) as m4,max(m5) as m5
,max(m6) as m6,max(m7) as m7,max(m8) as m8,max(m9) as m9
,max(m10) as m10,max(m11) as m11,max(m12) as m12
from(
 select [year]
 ,m1=case when [month]=1 then amount else 0 end
 ,m2=case when [month]=2 then amount else 0 end
 ,m3=case when [month]=3 then amount else 0 end
 ,m4=case when [month]=4 then amount else 0 end
 ,m5=case when [month]=5 then amount else 0 end
 ,m6=case when [month]=6 then amount else 0 end
 ,m7=case when [month]=7 then amount else 0 end
 ,m8=case when [month]=8 then amount else 0 end
 ,m9=case when [month]=9 then amount else 0 end
 ,m10=case when [month]=10 then amount else 0 end
 ,m11=case when [month]=11 then amount else 0 end
 ,m12=case when [month]=12 then amount else 0 end
 from aa
)a
group by year

 

解法二:
SELECT year, [1] AS Emp1, [2] AS Emp2, [3] AS Emp3, [4] AS Emp4, [5] AS Emp5
FROM(
 SELECT year,month,amount
 FROM aa
) p
PIVOT
(
 max (amount)
 FOR [month] IN
 ( [1], [2], [3], [4], [5] )
) AS pvt
ORDER BY year;





6.複製表(只複製結構,源表名:a 新表名:b)
答:select top 0 * into bb from aa

7.拷貝表(拷貝數據,源表名:a 目標表名:b)

答:select   * into bb from aa

 

8.表a有字段:title(文章標題)、username(提交人)、adddate(回覆時間),請寫出顯示“文章、提交人和最後回覆時間”的語句

答:題意我覺得有歧義。
select title,username,max(adddate) as adddate
from table_name
group by title,username

 

9.寫一個外連接查詢語句(表名1:a 表名2:b)
select *
from table_name a
FULL JOIN table_name b on  a.year=b.month

 

10.“日程安排”表,其中有個字段“會議開始時間”,請寫一個查詢五分鐘以後開會的日程安排記錄語句。
答:
select *
from table_name
where 會議開始時間>dateadd(mi,5,會議開始時間)

 

11.兩張關聯表(a,b),刪除主表中已經存在而副表中沒有的信息
答:假設a的主鍵爲ID,b的外鍵爲ID和a的ID關聯

delete from a where id not in (select idfrom b)

12.有兩個表A和B,均有key和value兩個字段,如果B的key在A中也有,就把B的value換爲A中對應的value,這道題的SQL語句怎麼寫?

答:
update bb set bb.value=aa.value
from A aa
inner join B bb on a.key=b.key

13.課程得分表course:
courseid coursename score
-------------------------------------
1 java 70
2 oracle 90
3 xml 40
4 jsp 30
5 servlet 80
-------------------------------------
爲了便於閱讀,查詢此表後的結果顯式如下(及格分數爲60):
courseid coursename score mark
---------------------------------------------------
1 java 70 pass
2 oracle 90 pass
3 xml 40 fail
4 jsp 30 fail
5 servlet 80 pass
---------------------------------------------------
寫出此查詢語句

答:

select courseid ,coursename ,score, mark =case when score>=60 then 'pass' else 'fail' end
from course


 

 

 

發佈了19 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章