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