SQL筆試題(牛客網)

Describetion 1:

大學生春季運動會的數據庫,保存了比賽信息的三個表以下: 運動員 sporter(運動員編號 sporterid,姓名name,性別 sex,所屬系號 department), 項目 item(項目編號 itemid,名稱 itemname,比賽地點 location), 成績 grade(運動員編號 id,項目編號 itemid,積分 mark)。sql

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:

有兩張表,以下圖所示.net

表A(僅列出部分數據做參考)code

Order_id User_id Add_time
11701245001 10000 1498882474
11701245002 10001 1498882475

表B:(僅列出部分數據做參考)blog

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()ip

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'

注意第三條語句,用的是左外鏈接get

Description 4:

請取出 BORROW表中日期(RDATE字段)爲當天的全部記錄?(RDATE字段爲datetime型,包含日期與時間)。

select * from BORROW where datediff(dd,RDATE,getdate())=0

datadiff 的用法:

DATEDIFF() 函數返回兩個日期之間的時間。

語法DATEDIFF(datepart,startdate,enddate)

startdateenddate 參數是合法的日期表達式。

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 字句中。
注意第6、七題是同款題目,都是

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
相關文章
相關標籤/搜索