Describetion 1:
大學生春季運動會的數據庫,保存了比賽信息的三個表如下: 運動員 sporter(運動員編號 sporterid,姓名name,性別 sex,所屬系號 department), 項目 item(項目編號 itemid,名稱 itemname,比賽地點 location), 成績 grade(運動員編號 id,項目編號 itemid,積分 mark)。
Request 1:
用SQL語句完成在“體育館”進行比賽的各項目名稱及其冠軍的姓名。
SELECT i.itemname,s.name
FROM grade g,item i,sporter s,
(SELECT itemid iid,MAX(mark) max FROM grade WHERE itemid IN ( SELECT itemid FROM item WHERE location='體育館') GROUP BY itemid) temp
WHERE g.itemid=temp.iid AND g.mark=temp.max AND temp.iid=i.itemid AND s.sporterid=g.sporterid;
Describetion 2:
某打車公司將駕駛里程(drivedistanced)超過5000里的司機信息轉移到一張稱為seniordrivers 的表中,他們的詳細情況被記錄在表drivers 中,正確的sql為()
select * into seniordrivers from drivers where drivedistanced >=5000
INSERT INTO 語句用於向表格中插入新的行
INSERT INTO table_name VALUES (值1, 值2,....)
指定所要插入數據的列:
INSERT INTO table_name (列1, 列2,...) VALUES (值1, 值2,....)
從一個表中選取數據,然后把數據插入另一個表中
把所有的列插入新表
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
只把希望的列插入新表
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Description 3:
有兩張表,如下圖所示
表A(僅列出部分數據作參考)
Order_id | User_id | Add_time |
---|---|---|
11701245001 | 10000 | 1498882474 |
11701245002 | 10001 | 1498882475 |
表B:(僅列出部分數據作參考)
id | Order_id | goods_id | price |
---|---|---|---|
1 | 11701245001 | 1001 | 10 |
2 | 11701245001 | 1002 | 20 |
3 | 11701245002 | 1001 | 10 |
Request 3 :
用SQL查詢 購買過goods_id 為1001的用戶user_id()
1. select a.user_id from A a,B b where a.order_id=b.order_id and b.goods_id='1001'
2. select user_id from A where order_id in (select order_id from B where goods_id = '1001')
3. select A.user_id from A left join B on A.order_id=B.order_id where B.goods_id='1001'
注意第三條語句,用的是左外連接。
Description 4:
請取出 BORROW表中日期(RDATE字段)為當天的所有記錄?(RDATE字段為datetime型,包含日期與時間)。
select * from BORROW where datediff(dd,RDATE,getdate())=0
datadiff 的用法:
DATEDIFF() 函數返回兩個日期之間的時間。
語法:DATEDIFF(datepart,startdate,enddate)
startdate 和 enddate 參數是合法的日期表達式。
datepart 參數可以是下列的值:
datepart | 縮寫 |
---|---|
年 | yy, yyyy |
季度 | qq, q |
月 | mm, m |
年中的日 | dy, y |
日 | dd, d |
周 | wk, ww |
星期 | dw, w |
小時 | hh |
分鍾 | mi, n |
秒 | ss, s |
毫秒 | ms |
微妙 | mcs |
納秒 | ns |
Description 5:
一張學生成績表score,部分內容如下:
name | course | grade |
---|---|---|
張三 | 操作系統 | 67 |
張三 | 數據結構 | 86 |
李四 | 軟件工程 | 89 |
Request 5:
用一條SQL 語句查詢出每門課都大於80 分的學生姓名 。
1.
select distinct s.name from score s
where name not in
(select name from score where grade <=80)
2.
select distinct s.name from score s
group by s.name
having min(s.grade) > 80
注意:
1.where 在分組前過濾,having 在分組后過濾,兩者之間不沖突。
2.在select 子句中,只可以有組函數和分組字段。如果沒有分組字段那就是所有的字段都可以在select 字句中。
注意第六、七題是同款題目,都是
Description 6:
Date | Win |
---|---|
2017-07-12 | 勝 |
2017-07-12 | 負 |
2017-07-15 | 勝 |
2017-07-15 | 負 |
Request 6:
要生成下列結果 :
比賽日期 | 勝 | 負 |
---|---|---|
2017-07-12 | 1 | 1 |
2017-07-15 | 1 | 1 |
select Date as 比賽日期,sum(case when Win ='勝' 1 else 0 end) 勝,sum(case when Win='負' 1 else 0 end ) 負
from result
group by Date
Description 7:
有一張學生成績表sc(sno 學號,class 課程,score 成績),請查詢出每個學生的英語、數學的成績(行轉列,一個學生只有一行記錄)。
select sno , sum(if(class='english',score,0)) english ,sum(if(class='math',score,0)) math
from sc
where class in ('english','math')
group by sno