10.題答案
select 課程號,總分,平均分,最高分,最低分(
select 課程號,
總分=sum(成績),
平均分=sum(成績)/count(*),
最高分=max(成績),
最低分=min(成績)
from 成績
group by 課程號) as kc order by 平均分 desc
11.題答案
select 課程號,
平均分=sum(成績)/count(*)
from 成績
where 課程號='1001' or 課程號='1002'
group by 課程號
12.題答案
select 姓名,xs.學號,kc.平均分
from 學生 as xs
left join (select 學號,
平均分=sum(成績)/count(*)
from 成績
group by 學號) as kc on kc.學號=xs.學號
where kc.平均分>80
2. SQL語句 應用題 專家們 速度解決 答得好另有獎勵
1.SELECT*FROM課程
2.SELECTST.學號,
ST.姓名,
SC.成績
FROM學生ASST
JOIN成績ASSC
ONST.學號=SC.學號
JOIN課程ASCO
ONSC.課程號=CO.課程號
WHERECO.授課教師='劉老師'
3.SELECTCO.課程名,
ST.COUNT(*)
FROM學生ASST
JOIN成績ASSC
ONST.學號=SC.學號
JOIN課程ASCO
橋衫ONSC.課程號=CO.課程號
GROUPBYCO.課程名
4.SELECT*FROM學生
5.SELECTST.學號,
ST.姓名,
敏吵腔SC.成績
FROM學生ASST
JOIN成績ASSC
ONST.學號=SC.學號
JOIN課程ASCO
ONSC.課程號=CO.課程號
WHERECO.課程名='資料庫應用'
6.SELECTCOUNT(*),
性別
FROM學生
GROUPBY性別
7.SELECTST.學號,
ST.姓名,
SC.成績
FROM學生ASST
JOIN成績ASSC
ONST.學號=SC.學號
JOIN課程ASCO
ONSC.課程號=CO.課程號
WHERECO.課程名='Access'
ANDSC.成績>70
8.同6
9.SELECTST.學號,
ST.姓名
FROM學生ASST
JOIN成績ASSC
ONST.學號=SC.學號
JOIN課程ASCO
ON碰唯SC.課程號=CO.課程號
WHERECO.課程名='計算機應用'
ANDST.性別='男'
10.SELECT*FROM學生
WHERE年齡>18AND姓名LIKE'王%'
同學給分吧,不明白的追問。
3. SQL經典50題題解
本篇文章主要是對SQL經典50題進行詳細解析。
解析包含:1、解題思路,2、考核知識點,3、答案;
首先,表結構用腦圖輸出出來,如下所示:
先進行數據准備,建表以及插入數據。
1.查詢"01"課程比"02"課程成績高的學生的信息及課程分數
解題思路:
第一步:關鍵詞有「課程編號」、「課程成績」、「學生信息」,鎖定使用表:學生表、成績表。
第二步:給出學生信息及課程分數,通過主鍵sid關聯學生表和課程表。
第三步:比較同一個學生不同課程的成績,再關聯一次課程表,利用sid、cid進行關聯。
第四步:根據題目,用where比較分數篩選結果。
考核知識點: join,where
答案:
1.1 查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null )
解題思路:
第一步:關鍵詞有「課程編號」、「學生編號」,鎖定使用表:成績表。
第二步:分別查詢出存在" 01 "課程的學生和存在" 02 "課程的學生。
第三步:對兩個子查詢進行關聯,用sid進行左聯接。
考核知識點: where, 子查詢,left join
答案:
1.2 查詢同時存在01和02課程的情況
解題思路: 同1.1,把left join改為join
考核知識點: where, 子查詢,join
答案:
1.3 查詢選擇了02課程但沒有01課程的情況
解題思路: 類似1.1,把left join改為right join
考核知識點: where, 子查詢,right join
答案:
小結: 上面的題主要考察join、left join、right join。
2.查詢平均成績大於等於 60 分的同學的學生編號和學生姓名和平均成績
解題思路:
第一步:關鍵詞有「平均成績」、「學生編號」、「學生姓名」,鎖定使用表:成績表、學生表。
第二步:給出學生信息及課程分數,通過主鍵sid關聯學生表和課程表。。
第三步:根據題目,用group by聚合計算出平均成績,然後篩選出大於等於60分的學生。
考核知識點: join、group by、avg()
答案:
3.查詢在 SC 表存在成績的學生信息
解題思路:
第一步:關鍵詞有「SC」、「學生信息」,鎖定使用表:成績表、學生表。
第二步:用EXISTS判斷在SC表存在成績的學生信息
考核知識點: EXISTS語句
答案:
4.查詢所有同學的學生編號、學生姓名、選課總數、所有課程的成績總和
解題思路:
第一步:關鍵詞有「學生編號」、「學生姓名」、「選課總數」、「課程成績」,鎖定使用表:成績表、學生表。
第二步:通過主鍵sid關聯學生表成績表,得到學生信息、學生成績的寬表
第三步:根據題目,用group by聚合計算選課總數和總成績
考核知識點: left join、group by、count()、sum()、ifnull()
答案:
5.查詢「李」姓老師的數量
解題思路:
第一步:關鍵詞有「老師的數量」,鎖定使用表:教師表。
第二步:先篩選出「李」姓老師,再匯總統計「李」姓老師的數量
考核知識點: like、where、%、count()
答案:
6.查詢學過「張三」老師授課的同學的信息
解題思路:
第一步:關鍵詞有「老師」、「學生信息」,鎖定使用表:教師表、學生表、成績表、課程表。
第二步:通過sid關聯學生表、成績表,再通過cid關聯課程表,最後通過tid關聯教師表。
第三步:用where篩選出「張三」老師授課的同學的信息。
考核知識點: 多重連接join
答案:
7.查詢沒有學全所有課程的同學的信息。
解題思路:
第一步:關鍵詞有「課程」、「學生信息」,鎖定使用表:學生表、成績表、課程表。
第二步:先統計學生的課程數量,再篩選出小於所有課程數量的學生。
考核知識點: left join、group by、count()
答案:
8.查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信息。
解題思路:
第一步:關鍵詞有「課程」、「學生信息」,鎖定使用表:學生表、成績表。
第二步:先查詢學號「01」的同學學習的課程。
第三步:通過sid關聯學生表和成績表,獲取所有學生信息、課程信息。
第四步:用EXISTS篩選出至少1門課相同的同學信息。
考核知識點: left join、子查詢、EXISTS
答案:
9.查詢和" 01 "號的同學學習的課程完全相同的其他同學的信息
解題思路:
第一步:關鍵詞有「課程」、「學生信息」,鎖定使用表:學生表、成績表。
第二步:用「01」號的同學學習的課程左關聯學生課程表,篩選出關鏈課程數一致的其他同學的sid
第三步:通過sid關聯學生表和成績表,獲取完整的學生信息。
考核知識點: left join、子查詢、group by
答案:
10.查詢沒學過"張三"老師講授的任一門課程的學生姓名
解題思路:
第一步:關鍵詞有「老師」、「學生姓名」,鎖定使用表:學生表、成績表、課程表、教師表。
第二步:反向求解。先查詢至少學過「張三」老師講授的課程的學生sid
第三步:用NOT EXISTS篩選出不在第二步查詢結果的學生信息,。
考核知識點: 多重連接join、NOT EXISTS、子查詢
答案:
11.查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
解題思路:
第一步:關鍵詞有「姓名」、「平均成績」,鎖定使用表:學生表、成績表。
第二步:通過sid關聯學生表和成績表,得到學生成績信息寬表
第三步:用group by聚合統計,having對聚合的結果進行篩選。
考核知識點: join、group by、having、case when語句、avg()
答案:
12.檢索" 01 "課程分數小於 60,按分數降序排列的學生信息
解題思路:
第一步:關鍵詞有「課程分數」、「學生信息」,鎖定使用表:學生表、成績表。
第二步:通過sid關聯學生表和成績表,得到學生成績信息寬表
第三步:用where篩選" 01 "課程分數小於 60的記錄,並按照分數降序排列。
考核知識點: join、where、order by
答案:
13.按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
解題思路:
第一步:關鍵詞有「平均成績」,鎖定使用表:成績表。
第二步:用group by將學生課程的成績由行轉換為列並計算平均成績。
第三步:按照平均成績降序顯示學生的所有課程的成績以及平均成績。
考核知識點: join
答案:
14.查詢各科成績最高分、最低分和平均分,以如下形式顯示:
以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,
優良率,優秀率
及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90
要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列
解題思路:
第一步:關鍵詞有「課程name」、「最高分」,鎖定使用表:課程表、成績表。
第二步:用group by聚合計算課程最高分、最低分、平均分。
第三步:用case語句判斷及格、中等、優良、優秀,並結合group by計算。
考核知識點: join、group by、max()、min()、avg()、sum()、case when語句
答案:
15.按各科成績進行排序,並顯示排名, Score 重復時保留名次空缺
解題思路:
第一步:關鍵詞有「各科成績」,鎖定使用表:成績表。
第二步:用rank()排名。
考核知識點: rank() over(partition by)
答案:
15.1 按各科成績進行行排序,並顯示排名, Score 重復時合並名次
解題思路:
第一步:關鍵詞有「各科成績」,鎖定使用表:成績表。
第二步:用dense_rank()排名。
考核知識點: dense_rank() over(partition by)
答案:
16.查詢學生的總成績,並進行排名,總分重復時保留名次空缺
解題思路:
第一步:關鍵詞有「總成績」,鎖定使用表:成績表。
第二步:用group by統計學生的總成績。
第三步:用left join自關聯進行排名。
考核知識點: group by、 left join
答案:
16.1 查詢學生的總成績,並進行排名,總分重復時不保留名次空缺
解題思路:
第一步:關鍵詞有「總成績」,鎖定使用表:成績表。
第二步:用group by統計學生的總成績。
第三步:用變數進行排名。
考核知識點: group by、變數
答案:
17. 統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[60-0] 及所佔百分比
解題思路:
第一步:關鍵詞有「各科成績」、「課程名稱」,鎖定使用表:成績表、課程表。
第二步:通過cid關聯課程表和成績表,得到課程、成績信息寬表。
第三步:用group by聚合統計各分段的人數及百分比。
考核知識點: join、group by、case when條件語句
答案:
18.查詢各科成績前三名的記錄
解題思路:
第一步:關鍵詞有「各科成績」,鎖定使用表:成績表。
第二步:篩選出各科比當前成績高的人數小於3的學生記為各科的前三名。
考核知識點: 子查詢
答案:
19.查詢每門課程被選修的學生數
解題思路:
第一步:關鍵詞有「每門課程」、「學生數」,鎖定使用表:課程表、成績表。
第二步:用left join關聯課程表和成績表,再用group by分組匯總各科的學生數。
考核知識點: left join、group by
答案:
20.查詢出只選修兩門課程的學生學號和姓名
解題思路:
第一步:關鍵詞有「選修課程」、「學生姓名」,鎖定使用表:學生表、成績表。
第二步:用join關聯學生表和成績表,再用group by分組匯總每個學生的選修課程數,最後用having對分組匯總結果篩選出選修兩門課程的學生。
考核知識點: join、group by、having
答案:
21. 查詢男生、女生人數
解題思路:
第一步:關鍵詞有「男生、女生」,鎖定使用表:學生表。
第二步:通過ssex學生表用group by分組匯總男生、女生人數。
考核知識點: group by
答案:
22. 查詢名字中含有「風」字的學生信息
解題思路:
第一步:關鍵詞有「學生信息」,鎖定使用表:學生表。
第二步:用like匹配姓名中含有風」字的學生。
考核知識點: like、%
答案:
23查詢同名同性學生名單,並統計同名人數
解題思路:
第一步:關鍵詞有「學生名單」,鎖定使用表:學生表。
第二步:使用group by,匯總同名同性人數,再用having篩選出大於1的記錄
考核知識點: group by、having
答案:
24.查詢 1990 年出生的學生名單
解題思路:
第一步:關鍵詞有「學生名單」,鎖定使用表:學生表。
第二步:用where篩選出1990年出生的學生名單
考核知識點: where、year
答案:
25.查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編
號升序排列。
解題思路:
第一步:關鍵詞有「平均成績」,鎖定使用表:成績表。
第二步:用group by分組計算各科平均成績,再用order by完成多列排序
考核知識點: group by、order by
答案:
26.查詢平均成績大於等於 85 的所有學生的學號、姓名和平均成績
解題思路:
第一步:關鍵詞有「平均成績」、「學生姓名」,鎖定使用表:成績表、學生表。
第二步:用join關聯學生表和成績表
第三步:用group by分組匯總計算每個學生的平均成績,再用having篩選平均成績>=85的記錄
考核知識點: join、group by、having
答案:
27.查詢課程名稱為「數學」,且分數低於 60 的學生姓名和分數
解題思路:
第一步:關鍵詞有「課程名稱」、「分數」、「學生姓名」,鎖定使用表:課程表、成績表、學生表。
第二步:用join關聯學生表、成績表、課程表,再用where篩選
考核知識點: 多重join、where
答案:
28. 查詢所有學生的課程及分數情況(存在學生沒成績,沒選課的情況)
解題思路:
第一步:關鍵詞有「所有學生」、「分數」,鎖定使用表:學生表、成績表
第二步:用left join關聯學生表、成績表
考核知識點: left join
答案:
29.查詢任何一門課程成績在 70 分以上的姓名、課程名稱和分數
解題思路:
第一步:關鍵詞有「課程成績」、「姓名」、「課程名稱」,鎖定使用表:學生表、成績表、課程表
第二步:用join關聯學生表、成績表、課程表,再篩選出課程成績在70分以上的。
考核知識點: 多重join
答案:
30.查詢不及格的課程
解題思路:
第一步:關鍵詞有「不及格的課程」,鎖定使用表:成績表、課程表
第二步:關聯課程表和成績表,再條件篩選出不及格的課程信息。
考核知識點: join、where、去重
答案:
31.查詢課程編號為 01 且課程成績在 80 分以上的學生的學號和姓名
解題思路:
第一步:關鍵詞有「課程編號」、「課程成績」、「姓名」,鎖定使用表:成績表、學生表
第二步:關聯成績表和學生表,再條件篩選出結果。
考核知識點: join、where
答案:
32.求每門課程的學生人數
解題思路:
第一步:關鍵詞有「課程」、「學生人數」,鎖定使用表:成績表
第二步:用group by分組匯總各科的學生人數。
考核知識點: group by
答案:
33.成績不重復,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績
解題思路:
第一步:關鍵詞有「成績」、「「張三」老師」、「學生信息」,鎖定使用表:成績表、課程表、學生表、教師表
第二步:關聯所有表,篩選出選修「張三」老師所授課程的學生。
第三步:因為成績不重復,對學生成績由高到低排序,篩選出第一行記錄。
考核知識點: 多重join、order by、limit
答案:
34.成績有重復的情況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生
信息及其成績
解題思路:
第一步:關鍵詞有「成績」、「「張三」老師」、「學生信息」,鎖定使用表:成績表、課程表、學生表、教師表
第二步:關聯所有表,篩選出選修「張三」老師所授課程的學生。
第三步:因為成績有重復,先求出最高成績,再匹配最高成績對應的學生信息。
考核知識點: 多重join、max()
答案:
35.查詢不同課程成績相同的學生的學生編號、課程編號、學生成績
解題思路:
第一步:關鍵詞有「成績」,鎖定使用表:成績表
第二步:自聯接,篩選出不同課程成績相同的記錄
考核知識點: 自聯接join
答案:
36. 查詢每門成績最好的前兩名
解題思路:
第一步:關鍵詞有「成績」,鎖定使用表:成績表
第二步:自聯接,篩選出各科低於自身成績的人數為2的。
考核知識點: left join
答案:
37. 統計每門課程的學生選修人數(超過 5 人的課程才統計)。
解題思路:
第一步:關鍵詞有「選修人數」,鎖定使用表:成績表
第二步:先用group by分組匯總各科的選修人數,再條件篩選出超過5人的課程。
考核知識點: group by、having
答案:
38.檢索至少選修兩門課程的學生學號
解題思路:
第一步:關鍵詞有「兩門課程」,鎖定使用表:成績表
第二步:先用group by分組匯總每個學生的選修課程數,再用having篩選出至少2門課程的學生學號
考核知識點: group by、having
答案:
39.查詢選修了全部課程的學生信息
解題思路:
第一步:關鍵詞有「全部課程」、「學生信息」,鎖定使用表:成績表、課程表、學生表
第二步:關聯學生表和成績表,再用group by分組統計每個學生的選修課程數
第三步:最後用having篩選出等於全部課程數的學生信息。
考核知識點: join、 group by、having、子查詢
答案:
40.查詢各學生的年齡,只按年份來算
解題思路:
第一步:關鍵詞有「學生的年齡」,鎖定使用表:學生表
第二步:用year和now來統計
考核知識點: year、now
答案:
41. 按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一
解題思路:
第一步:關鍵詞有「出生日期」,鎖定使用表:學生表
第二步:用timestampdiff()統計年齡
考核知識點: timestampdiff()
答案:
42.查詢本周過生日的學生
解題思路:
第一步:關鍵詞有「過生日」,鎖定使用表:學生表
第二步:用week函數
考核知識點: week()
答案:
43. 查詢下周過生日的學生
解題思路:
第一步:關鍵詞有「過生日」,鎖定使用表:學生表
第二步:用week函數
考核知識點: week()
答案:
44.查詢本月過生日的學生
解題思路:
第一步:關鍵詞有「過生日」,鎖定使用表:學生表
第二步:用month函數
考核知識點: month()
答案:
45.查詢下月過生日的學生
解題思路:
第一步:關鍵詞有「過生日」,鎖定使用表:學生表
第二步:用month函數
考核知識點: month()
答案:
4. 關於SQL綜合應用題(學生選課系統)
3、寫出SQL語句。
①查詢所有選SQL課程的學生學號,姓名和專業
select 學生學號,姓名,專業 from 學生基本信息表 where 學號 in (select 學號 from 選課表 where 課程號 in (select 課程號 from 課程表 where 課程名='SQL課程'))
②刪除所有選擇數學的同學的選課記錄
delete from 選課表 where 課程號 in (select 課程號 from 課程表 where 課程名='數學')
③查詢有哪些課程沒有被任何同學報選
select 課程名 from 課程表 where 課程號 not in (select 課程號 from 選課表)
5. SQL的應用題,求答案
貌似回答過一次
上面那個題目沒有拍全吧,只針對下面那個題:
1.SC(學號,課程號,課程名,教師名,教師地址,成績);
函數依賴集:課程號〈--〉課程名,課程號-〉教師名,教師名-〉教師地址,(學號,課程號)-〉成績;
部分函數依賴:(課程號,課程名)-〉教師名,(學號,課程號,課程名)-〉成績,等等很多……;
傳遞函數依賴:課程號-〉教師名,教師名-〉教師地址。
2.第一範式(1NF),存在插入、刪除異常。
3.插入異常,增加未授課巧胡教師,無人教授的課程等會有異常;
刪除異常,當好汪希望刪除某位教師、某個地址、某個課程、某個學生時,相關的信息都會被不期望的刪除掉,例如刪除操作系統課程 s1、王平都會被刪除掉。
4.可部分解決,2NF:
成績(學號,課程號,成績),
課程教師(課程號,課程名,教師名,教師地址)。
5.仍存在,可分解為3NF:
成績(學號,課孝襪攔程號,成績),
課程(課程名,教師名),
教師(教師名,教師地址),
課程教師(課程名,教師名)。
回答的不是很專業,希望有幫助。
6. SQL 觸發器應用題 不勝感激~O(∩_∩)O謝謝
CREATE TRIGGER my_insupd
ON Student
FOR INSERT
AS
RAISERROR ('歡迎新同學', 16, 1)
7. 請求解題 要求用SQL語句完成下列題目
按圖中問題和需求,以下會使用mysql環境的sql進行解答。
第一題: 考察主鍵和外鍵的創建表語句,以及基本的創建語句格式。這里提供兩種,其餘可以查閱相關資料。
mysql 插入數據
8. SQL DB應用題
1、select 姓名,S.學號,課程號 from SC,S where 籍貫='福建' and S.學號=SC.學號
2、select 姓名,年齡 from S,C,SC where C.課程號=SC.課程號 and S.學號=SC.學號
3、alter table S
(
學號 int primary key,
年齡 int check(年齡>=12 and 年齡<=25),
性別 char(4) check(stugender='男' or stugender='女'),
)
4、select avg(成績) from C,SC where C.課程號=SC.課程號 and 課程名='高等數學'
5、select 姓名,年齡,性別 from S where 姓名='李四' and 年齡>李四的年齡
6、create view STA
as
select SC.學號,C.課程名,C.教師姓名 from C,SC where SC.課程號=C.課程號