大學生春季運動會的數據庫,保存了比賽信息的三個表以下: 運動員 sporter(運動員編號 sporterid,姓名name,性別 sex,所屬系號 department), 項目 item(項目編號 itemid,名稱 itemname,比賽地點 location), 成績 grade(運動員編號 id,項目編號 itemid,積分 mark)。sql
用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;
某打車公司將駕駛里程(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
有兩張表,以下圖所示.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 |
用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
請取出 BORROW表中日期(RDATE字段)爲當天的全部記錄?(RDATE字段爲datetime型,包含日期與時間)。
select * from BORROW where datediff(dd,RDATE,getdate())=0
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 |
一張學生成績表score,部份內容以下:
name | course | grade |
---|---|---|
張三 | 操做系統 | 67 |
張三 | 數據結構 | 86 |
李四 | 軟件工程 | 89 |
用一條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、七題是同款題目,都是
Date | Win |
---|---|
2017-07-12 | 勝 |
2017-07-12 | 負 |
2017-07-15 | 勝 |
2017-07-15 | 負 |
要生成下列結果 :
比賽日期 | 勝 | 負 |
---|---|---|
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
有一張學生成績表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