① 多表聯合查詢sql語句
我來講一下多表聯合查詢SQL語句:
A、B兩表
A表:idd name2 image2 tag2
1 長城 。 長城
2 故宮 。 故宮
3 天安門 。 天安門B表:id name image tag
1 愛情1 。 長城
2 天空 。 故宮
3 23愛 。 長城當tag2=tag,輸出
查詢結果:idd name2 image2 name image
1 長城 。 愛情1、23愛 。、。註:(A表記錄1條,B表相關記錄2條)以此展開循環
② sql語句面試50題@20211219
Student(s_id,s_name,s_birth,s_sex) --學生編號,學生姓名, 出生年月,學生性別
–2.課程表
Course(c_id,c_name,t_id) – --課程編號, 課程名稱, 教師編號
–3.教師表
Teacher(t_id,t_name) --教師編號,教師姓名
–4.成績表
Score(s_id,c_id,s_score) --學生編號,課程編號,分數
1、查詢"01"課程比"02"課程成績高的學生的信息及課程分數
2、查詢"01"課程比"02"課程成績低的學生的信息及課程分數
3、查詢平均成績大於等於60分的同學的學生編號和學生姓名和平均成績
4、查詢平均成績小於60分的同學的學生編號和學生姓名和平均成績
5、查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績
6、查詢"李"姓老師的數量
7、查詢學過"張三"老師授課的同學的信息
8、查詢沒學過"張三"老師授課的同學的信息
9、查詢學過編號為"01"並且也學過編號為"02"的課程的同學的信息
10、查詢學過編號為"01"但是沒有學過編號為"02"的課程的同學的信息
11、查詢沒有學全所有課程的同學的信息
*12、查詢至少有一門課與學號為"01"的同學所學相同的同學的信息 **
13、查詢和"01"號的同學學習的課程完全相同的其他同學的信息 (不會)
14、查詢沒學過"張三"老師講授的任一門課程的學生姓名
-- [分析] 方法一:瘋狂子查詢
方法二:子查詢+內聯結
15、查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
16、檢索"01"課程分數小於60,按分數降序排列的學生信息
17、按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績(重要!)
-- 18.查詢各科成績最高分、最低分和平均分:以如下形式顯示:課程ID,課程name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率--及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90(重要!)
19、按各科成績進行排序,並顯示排名(涉及到TopN問題,重要!!!)
20、查詢學生的總成績並進行排名
21、查詢不同老師所教不同課程平均分從高到低顯示
22、查詢所有課程的成績第2名到第3名的學生信息及該課程成績
23、統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[0-60]及所佔百分比
24、查詢學生平均成績及其名次
25、查詢各科成績前三名的記錄(重要!!!!!)
26、查詢每門課程被選修的學生數
27、查詢出只有兩門課程的全部學生的學號和姓名
28、查詢男生、女生人數
29、查詢名字中含有"風"字的學生信息
-- [分析] 考察字元串模糊查詢,之前我的sql學習筆記中有詳細記錄 https://zhuanlan.hu.com/p/128093194
30、查詢同名同性學生名單,並統計同名人數(重要!!!!!)
31、查詢1990年出生的學生名單
32、查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列
33、查詢平均成績大於等於85的所有學生的學號、姓名和平均成績
34、查詢課程名稱為"數學",且分數低於60的學生姓名和分數
35、查詢所有學生的課程及分數情況;
36、查詢任何一門課程成績在70分以上的姓名、課程名稱和分數;
37、查詢不及格的課程
38、查詢課程編號為01且課程成績在80分以上的學生的學號和姓名;
39、求每門課程的學生人數
40、查詢選修"張三"老師所授課程的學生中,成績最高的學生信息及其成績
41、查詢不同課程成績相同的學生的學生編號、課程編號、學生成績 (重要!!!!)
42、查詢每門功成績最好的前兩名
43、統計每門課程的學生選修人數(超過5人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列
44、檢索至少選修兩門課程的學生學號
45、查詢選修了全部課程的學生信息
46、查詢各學生的年齡 按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一
47、查詢本周過生日的學生
48、查詢下周過生日的學生
49、查詢本月過生日的學生
50、查詢下月過生日的學生
③ SQL多表查詢語句怎麼寫
SQL多表查詢語句的步驟如下:
我們需要准備的材料分別是:電腦、sql查詢器。
1、首先,打開sql查詢器,連接上相應的資料庫表,例如m1表和m2表。
④ sql經典50題
一、查詢課程編號為「01」的課程比「02」的課程成績高的所有學生的學號(重點)
一刷:
excel思路:
觀察原始表格數據,在excel中想得到01比02高,我們需要將原始表格拆分成兩個表,課程01表和課程02表,再進行vlookup得到c表,根據if條件判斷篩出最終數據。
重點是:1.拆表 2.匹配
轉成SQL語言:
1.拆表語言:
2.關聯加匹配語言 :
3.完整語言:
----到這里其實就可以結束了;
4.若想加student的信息,則需要以上所有結果再作為c表再關聯匹配:
若想讓欄位1和2為上下結果,即重復前面的信息,則語言如下:
二刷:
擴展一:查詢成績小於60分的學生的學號和姓名
1、先反向找出大於等於60分的學號 :
2、匹配:
擴展二:查詢平均成績小於60分的學生的學號、姓名和平均成績
第一種
1、先找出小於60分和空的作為c表:
2、匹配:
三、查詢所有學生的學號、姓名、選課數、總成績(不重要)
四、查詢姓「李」的老師的個數(不重要)
五、查詢沒學過「張三」老師課的學生的學號、姓名(重點)
六、查詢學過「張三」老師所教的所有課的同學的學號、姓名(重點)
七、查詢學過編號為「01」的課程並且也學過編號為「02」的課程的學生的學號、姓名(重點)
八、查詢課程編號為「02」的總成績(不重點)
九、查詢成績小於60分的學生的學號和姓名(同題目二)
十、查詢沒有學全所有課的學生的學號、姓名(重點)
十一、查詢至少有一門課與學號為「01」的學生所學課程相同的學生的學號和姓名(重點)
十二、查詢和「01」號同學所學課程完全相同的其他同學的學號(重點)
十五、查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績(重點)
十六、檢索"01"課程分數小於60,按分數降序排列的學生信息(和34題重復,不重點
十七、按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績(重重點與35一樣)
十八、查詢各科成績最高分、最低分和平均分:以如下形式顯示:課程ID,課程name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率
-- 及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90 (超級重點)
十九、按各科成績進行排序,並顯示排名
二十、查詢學生的總成績並進行排名(不重點)
二十一、查詢不同老師所教不同課程平均分從高到低顯示(不重點)
二十二、查詢所有課程的成績第2名到第3名的學生信息及該課程成績(重要 25類似
二十三、 使用分段[100-85],[85-70],[70-60],[<60]來統計各科成績,分別統計各分數段人數:課程ID和課程名稱(重點和18題類似)
二十四、查詢學生平均成績及其名次(同19題,重點)
二十五、查詢各科成績前三名的記錄(不考慮成績並列情況)(重點 與22題類似)
二十六、查詢每門課程被選修的學生數(不重點)
二十七、查詢出只有兩門課程的全部學生的學號和姓名(不重點)
二十八、查詢男生、女生人數(不重點)
二十九、查詢名字中含有"風"字的學生信息(不重點)
三十一、 查詢1990年出生的學生名單(重點year)
三十二、查詢平均成績大於等於85的所有學生的學號、姓名和平均成績(不重要)
三十三、查詢每門課程的平均成績,結果按平均成績升序排序,平均成績相同時,按課程號降序排列(不重要)
三十四、查詢課程名稱為"數學",且分數低於60的學生姓名和分數(不重點)
三十五、查詢所有學生的課程及分數情況(重點)
三十六、 查詢任何一門課程成績在70分以上的姓名、課程名稱和分數(重點)
三十七、 查詢不及格的課程並按課程號從大到小排列(不重點)
三十八、 查詢課程編號為03且課程成績在80分以上的學生的學號和姓名(不重要)
三十九、求每門課程的學生人數(不重要)
四十、查詢選修「張三」老師所授課程的學生中成績最高的學生姓名及其成績(重要top)
四十一、查詢不同課程成績相同的學生的學生編號、課程編號、學生成績 (重點)
四十二、查詢每門功課成績最好的前兩名(同22和25題)
四十三、統計每門課程的學生選修人數(超過5人的課程才統計)。要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列(不重要)
四十四、檢索至少選修兩門課程的學生學號(不重要)
四十五、查詢選修了全部課程的學生信息(重點劃紅線地方)
四十六、查詢各學生的年齡(精確到月份)
四十七、 查詢沒學過「張三」老師講授的任一門課程的學生姓名(還可以,自己寫的,答案中沒有)
四十八、 查詢兩門以上不及格課程的同學的學號及其平均成績
四十九、查詢本月過生日的學生(無法使用week、date(now())
五十、 查詢下月過生日的學生
⑤ 多表聯合查詢SQL語句
1,Cab.scoreleftc;as科目名稱.subname .nob;b;asfromas= .nobleft學生名字。
2,a;joinB ,a;joinA ,onas ,c.name學生ID;= select學生成績on .subida.no 。
⑥ SQL50題及答案
習題來源於網路,sql語句是自己的答案,部分有參考。歡迎指正及探討。
1. 查詢" 01 "課程比" 02 "課程成績高的學生的信息及課程分數
1.1 查詢同時存在" 01 "課程和" 02 "課程的情況
1.2 查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null)
null提示:使用left join
1.3 查詢不存在" 01 "課程但存在" 02 "課程的情況
2. 查詢平均成績大於等於 60 分的同學的學生編號和學生姓名和平均成績
3. 查詢在 SC 表存在成績的學生信息
4. 查詢所有同學的學生編號、學生姓名、選課總數、所有課程的總成績(沒成績的顯示為 null)
4.1 查有成績的學生信息
5. 查詢「李」姓老師的數量
6. 查詢學過「張三」老師授課的同學的信息
7. 查詢沒有學全所有課程的同學的信息
8. 查詢至少有一門課與學號為" 01 "的同學所學相同的同學的信息
9. 查詢和" 01 "號的同學學習的課程 完全相同的其他同學的信息
10. 查詢沒學過"張三"老師講授的任一門課程的學生姓名
11. 查詢兩門及其以上不及格課程的同學的學號,姓名及其平均成績
12. 檢索" 01 "課程分數小於 60,按分數降序排列的學生信息
13. 按平均成績從高到低顯示所有學生的所有課程的成績以及平均成績
14. 查詢各科成績最高分、最低分和平均分:以如下形式顯示:課程 ID,課程 name,最高分,最低分,平均分,及格率,中等率,優良率,優秀率(及格為>=60,中等為:70-80,優良為:80-90,優秀為:>=90
14.1要求輸出課程號和選修人數,查詢結果按人數降序排列,若人數相同,按課程號升序排列
15. 按各科成績進行排序,並顯示排名, Score 重復時保留名次空缺
15.1 按各科成績進行排序,並顯示排名, Score 重復時合並名次
16. 查詢學生的總成績,並進行排名,總分重復時保留名次空缺
16.1 查詢學生的總成績,並進行排名,總分重復時不保留名次空缺
17. 統計各科成績各分數段人數:課程編號,課程名稱,[100-85],[85-70],[70-60],[60-0] 及所佔百分比
18. 查詢各科成績前三名的記錄
19. 查詢每門課程被選修的學生數
20. 查詢出只選修兩門課程的學生學號和姓名
21. 查詢男生、女生人數
22. 查詢名字中含有「風」字的學生信息
23. 查詢同名同性學生名單,並統計同名人數
24. 查詢 1990 年出生的學生名單
25. 查詢每門課程的平均成績,結果按平均成績降序排列,平均成績相同時,按課程編號升序排列
26. 查詢平均成績大於等於 85 的所有學生的學號、姓名和平均成績
27. 查詢課程名稱為「數學」,且分數低於 60 的學生姓名和分數
28. 查詢所有學生的課程及分數情況(存在學生沒成績,沒選課的情況)
29. 查詢任何一門課程成績在 70 分以上的姓名、課程名稱和分數
30. 查詢不及格的課程
31. 查詢課程編號為 01 且課程成績在 80 分以上的學生的學號和姓名
32. 求每門課程的學生人數
33. 成績不重復,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績
34. 成績有重復的情況下,查詢選修「張三」老師所授課程的學生中,成績最高的學生信息及其成績
35. 查詢不同課程成績相同的學生的學生編號、課程編號、學生成績
36. 查詢每門功成績最好的前兩名
37. 統計每門課程的學生選修人數(超過 5 人的課程才統計)
38. 檢索至少選修兩門課程的學生學號
39. 查詢選修了全部課程的學生信息
40. 查詢各學生的年齡,只按年份來算
41. 按照出生日期來算,當前月日 < 出生年月的月日則,年齡減一
42. 查詢本周過生日的學生
43. 查詢下周過生日的學生
44. 查詢本月過生日的學生
45. 查詢下月過生日的學生
1.1 查詢同時存在" 01 "課程和" 02 "課程的情況
1.2 查詢存在" 01 "課程但可能不存在" 02 "課程的情況(不存在時顯示為 null )
1.3 查詢不存在" 01 "課程但存在" 02 "課程的情況
4.1 查有成績的學生信息
15.1 按各科成績進行排序,並顯示排名, Score 重復時合並名次
16.1 查詢學生的總成績,並進行排名,總分重復時不保留名次空缺
⑦ Sql2000資料庫多表查詢【這個問題值50分】
其實這個sql語句還不麻煩。寫sql我都是按照以下幾步來做(對於比較麻煩的)
1.列出所有需要的欄位
select crname,cyear,score from tabcour,tabstu_cour,tabstu
2.找它們之間的關系
where tabstu.sid = tabstu_cour.sid and tabstu_cour.crid = tabcour.crid
3.寫條件 and tabstu.user_id='Tom'
其實關鍵是第2步,上面寫法的思路是這樣:從tabstu中找到Tom,然後到tabstu_cour中找他的成績(用sid關聯);後面還要列出其課程名稱,而這又存在tabcour中,它跟tabstu-cour有關聯,所以它們之間根據crid關聯。
當然,還有另外一種更直觀的寫法,就是反過來考慮。從tabstu_cour向兩邊考慮,要顯示crname,它在tabstu中於是關聯,要使用查詢條件user_id='Tom'而user_id在tabstu中於是關聯。
最後:現在多數人在開發時用join on的寫法。也可以改成:
select crname,cyear,score
from tabstu_cour
join tabcour on tabstu_cour.crid = tabcour.crid
join tabstu on tabstu.sid = tabstu_cour.sid
where tabstu.user_id like 'Tom'
注意:Tom應該用單引號
⑧ 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()
答案:
⑨ sql語句多表查詢
select A.name from A where (select count(C.CS) from C where c.cs not in (select B.CS from B where B.NO=A.NO))=0
⑩ SQL語句多表多條件查詢查詢(三表)。各位前輩幫忙。
1、打開Microsoft SQL Server 2012,選中需要查詢所有表的資料庫。