當前位置:首頁 » 編程語言 » 關於sql的題目
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

關於sql的題目

發布時間: 2023-02-26 19:28:30

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資料庫幾個題目,100分懸賞!高手請進!

1、 select eno, ename,age from emp where job_title=『高級』 and gender=1

2、
∏eno, ename,age (φjob_title=『高級』 and gender=1 (emp))
注:其中的∏表示投影,φ表示選擇.

4、create index 索引名 on emp (eno)

5、select dept.dname ,count(emp .eno) from dept ,emp
where emp.dno=dept.dno
group by dename

6、select dept.dno ,dept.dname, avg(salary) from dept ,emp
where emp.dno=dept.dno and salary>3000
group by dename ,dno

⑶ 經典面試題-大廠SQL題目

正確答案:

正確答案:

給定 Employee 表,編寫一個 SQL 查詢,該查詢可以獲取收入超過他們經理的員工的姓名。在上面的表格中,Joe 是唯一一個收入超過他的經理的員工。

正確答案:

Customers 表:

Orders 表:

例如給定上述表格,你的查詢應返回:

正確答案:

例如,給定上面的 Logs 表, 1 是唯一連續出現至少三次的數字。

正確答案:

或者

例如,根據上述給定的 Scores 表,你的查詢應該返回(按分數從高到低排列):

正確答案:

例如上述 Employee 表,n = 2 時,應返回第二高的薪水 200。如果不存在第 n 高的薪水,那麼查詢應返回 null。

正確答案:

示例:

假如數據輸入的是上表,則輸出結果如下:

注意:
如果學生人數是奇數,則不需要改變最後一個同學的座位。
正確答案:

例如,根據上述給定的 Weather 表格,返回如下 Id:

正確答案:

Employee 表包含所有員工信息,每個員工有其對應的 Id, salary 和 department Id。

Department 表包含公司所有部門的信息。

編寫一個 SQL 查詢,找出每個部門工資最高的員工。例如,根據上述給定的表格,Max 在 IT 部門有最高工資,Henry 在 Sales 部門有最高工資。

正確答案:

表1: Person

PersonId 是上表主鍵

表2: Address

AddressId 是上表主鍵

編寫一個 SQL 查詢,滿足條件:無論 person 是否有地址信息,都需要基於上述兩表提供 person 的以下信息:

FirstName, LastName, City, State

正確答案:

注意,您必只能寫一個 Update 語句,請不要編寫任何 Select 語句。
例如:

運行你所編寫的更新語句之後,將會得到以下表:

正確答案:

這里有張 World 表

如果一個國家的面積超過300萬平方公里,或者人口超過2500萬,那麼這個國家就是大國家。
編寫一個SQL查詢,輸出表中所有大國家的名稱、人口和面積。
例如,根據上表,我們應該輸出:

正確答案:

Id 是這個表的主鍵。

例如,在運行你的查詢語句之後,上面的 Person 表應返回以下幾行:

正確答案:

Employee 表包含所有員工信息,每個員工有其對應的 Id, salary 和 department Id 。

Department 表包含公司所有部門的信息。

編寫一個 SQL 查詢,找出每個部門工資前三高的員工。例如,根據上述給定的表格,查詢結果應返回:

正確答案

例如上述 Employee 表,SQL查詢應該返回 200 作為第二高的薪水。如果不存在第二高的薪水,那麼查詢應返回 null。

正確答案:

例如,下表 cinema:

對於上面的例子,則正確的輸出是為:

正確答案:

請列出所有超過或等於5名學生的課。
例如,表:

應該輸出:

Note:
學生在每個課中不應被重復計算。

正確答案:

Users 表存所有用戶。每個用戶有唯一鍵 Users_Id。Banned 表示這個用戶是否被禁止,Role 則是一個表示(『client』, 『driver』, 『partner』)的枚舉類型。

寫一段 SQL 語句查出 2013年10月1日 至 2013年10月3日 期間非禁止用戶的取消率。基於上表,你的 SQL 語句應返回如下結果,取消率(Cancellation Rate)保留兩位小數。

正確答案

示例:

根據以上輸入,你的查詢應返回以下結果:

說明:所有電子郵箱都是小寫字母。

正確答案:

請編寫一個查詢語句,找出高峰期時段,要求連續三天及以上,並且每天人流量均不少於100。
例如,表 stadium:

對於上面的示例數據,輸出為:

Note:
每天只有一行記錄,日期隨著 id 的增加而增加。

正確答案:

⑷ SQL語言的題目

1.一共有 4 個表。
2.customer表中有 0 記錄。
3.staff關系中有 3 個屬性。
4.一共執行了 5 條SQL命令。
5.deposit表中的amount欄位是 NUMBER(14, 2) 數據類型。
6.account表中的 ACCOUNT_NO 欄位被設置為了主鍵(主碼)。
7.在customer關系中,不把cust_name屬性設置為主鍵的原因是,客戶的 cust_name(姓名)可能重復。
8.customer表和 account 表有公共屬性。
9.insert命令中的 (STAFF_ID,STAFF_NAME,STAFF_PWD) 子句可以被省略。
10.deposit 表中沒有設置主鍵。

⑸ SQL的題目,最基礎的~等~~

1. 從職工關系中檢索所有工資值。
答:select 工資 from 職工表
2. 檢索倉庫關系中的所有記錄
答:select * from 倉庫表
3. 檢索工資多於1230元的職工號
答:select 職工號 from 職工表 where 工資>1230
4.檢索哪些倉庫有工資多於1210元的職工。
答:select distinct 倉庫號 from 職工表 where 工資>1210
5. 給出在倉庫「wh1」或「wh2」工作,並且工資少於1250元的職工號。
答:select 職工號 from 職工表 where 工資<1250 ;
and (倉庫號="wh1" or 倉庫號="wh2")
注意:邏輯運算符的優先順序從高到低依次為not、and、or。運算符的優先順序:括弧 算術運算 關系運算 邏輯運算.
說明:前面的幾個例子在from之後只指定了一張表,也就是說這些檢索只基於一張表。如果有where子句,系統首先根據指定的條件依次檢驗關系中的每條記錄,然後選出滿足條件的記錄(相當於關系的選擇操作),並顯示select子句中指定屬性的值(相當於關系的投影操作)。
6. 找出工資多於1230元的職工號和他們所在的城市。
答:select 職工表.職工號, 倉庫表.城市 from 職工表,倉庫表 ;
where 職工表.倉庫號=倉庫表.倉庫號 and 工資>1230
7. 找出工作在面積大於400的倉庫的職工號以及這些職工工作所在的城市。
答:select 職工表.職工號, 倉庫表.城市, 倉庫表.面積 ;
from 職工表,倉庫表 where 職工表.倉庫號=倉庫表.倉庫號 ;
and 倉庫表.面積>400
說明:以上兩題為簡單的聯接查詢.
8. 哪些城市至少有一個倉庫的職工工資為1250元
答:
方法一:
Select 倉庫表.城市 from 職工表,倉庫表 where 職工表.倉庫號=倉庫表.倉庫號 and 職工表.工資=1250
方法二:
select 倉庫號 from 職工表 where 工資=1250 into dbf abc.dbf
select 倉庫表.城市 from 倉庫表,abc where 倉庫表.倉庫號=abc.倉庫號
方法三:
select 城市 from 倉庫表 where 倉庫號 in (select 倉庫號 from 職工表 where 工資=1250)
說明: 這屬於嵌套查詢. 這類查詢所要求的結果出自一個關系,但相關的條件卻涉及多個關系.
可以看到,方法三的命令中含有兩個select-from-where查詢塊,即內層查詢塊和外層查詢塊,內層查詢塊檢索到的倉庫值是wh1和wh2,這樣就可以寫出等價命令:
select 城市 from 倉庫表 where 倉庫號 in ("wh1","wh2")
或者
select 城市 from 倉庫表 where 倉庫號="wh1" or 倉庫號="wh2"
9. 查詢所有職工的工資都多於1210元的倉庫的信息。
答:
方法一:
select 倉庫號,min(工資) as 工資 from 職工表 group by 倉庫號 into dbf 倉庫min工資.dbf
select 倉庫表.* from 倉庫表,倉庫min工資 where 倉庫表.倉庫號=倉庫min工資.倉庫號 and 倉庫min工資.工資>1210
方法二:
select * from 倉庫表 where 倉庫表.倉庫號 not in (select 倉庫號 from 職工表 where 工資<=1210 ) and 倉庫表.倉庫號 in (select 倉庫號 from 職工表)
(錯誤方法)
select * from 倉庫表 where 倉庫表.倉庫號 not in (select 倉庫號 from 職工表 where 工資<=1210 )
注意:上述檢索結果錯誤,會將沒有職工的倉庫檢索出來.如果要求排除那些還沒有職工的倉庫,檢索要求可以敘述為:檢索所有職工的工資都大於1210元的倉庫的信息,並且該倉庫至少要有一名職工.
(錯誤方法)
select * from 倉庫表 where 倉庫表.倉庫號 in (select 倉庫號 from 職工表 where 工資>1210 )
注意:上述查詢結果錯誤。它會查出倉庫號為wh1的信息,但wh1的職工工資並不都大於1210。
10. 找出和職工e4掙同樣工資的所有職工。
答: Select 職工號 from 職工表 where 工資 in (select 工資 from 職工表 where 職工號="e4")
說明:7、9、10題都是基於多個關系的查詢,這類查詢所要求的結果出自一個關系,但相關的條件卻涉及多個關系.我們稱之為嵌套查詢。嵌套查詢優選含有兩個select-from-where查詢塊的查詢結構。
11. 檢索出工資在1220元到1240元范圍內的職工信息。
答:select * from 職工表 where 工資 between 1220 and 1240
說明: "工資 between 1220 and 1240"等價於"工資>=1220 and 工資<=1240"
如果要求查詢工資不在1220元到1240元范圍內的職工信息
說明: select * from 職工表 where 工資 not between 1220 and 1240
12. 從供應商關系中檢索出全部公司的信息,不要工廠或其他供應商的信息。
Select * from 供應商表 where "公司" $ 供應商名
13. 找出不在北京的全部供應商信息。
Select * from 供應商表 where 地址!="北京"
或者
Select * from 供應商表 where not(地址="北京")
14. 按職工的工資值升序檢索出全部職工信息。
答:select * from 職工表 order by 工資
如果需要將結果按降序排列,只要加上desc
select * from 職工表 order by 工資 desc
說明:使用SQL SELECT可以將查詢結果排序,排序的短語是order by ,具體格式如下:
order by order_item [ASC|DESC] [,order_item [ASC|DESC]……]
15. 先按倉庫號排序,再按工資排序並輸出全部職工信息。
答:Select * from 職工表 order by 倉庫號,工資
16. 找出供應商所在地的數目。
答:select count(distinct 地址) from 供應商表
注意:除非對表中的記錄數進行計數,一般count函數應該使用distinct
比如: select count(*) from 供應商表
查詢結果是供應商表中的記錄數.
說明:可用於計算檢索的函數有:count——計數 sum——求和
avg——計算平均值 max——求最大值 min——求最小值
17. 求支付的工資總數
答:select sum(工資) from 職工表
18. 求北京和上海的倉庫職工的工資總和
答: select sum(工資) from 職工表,倉庫表 where 職工表.倉庫號=倉庫表.倉庫號 and (城市="北京" or 城市="上海")
方法二:
select sum(工資) from 職工表 where 倉庫號 in (select 倉庫號 from 倉庫表 where 城市="北京" or 城市="上海")
19. 求所有職工的工資都多於1210元的倉庫的平均面積
答:Select avg(面積) from 倉庫表 where 倉庫號 not in(select 倉庫號 from 職工表 where 工資<=1210) and 倉庫號 in(select 倉庫號 from 職工表)
20. 求在wh2倉庫工作的職工的最高工資值
答:select max(工資) from 職工表 where 倉庫號="wh2"
21. 求每個倉庫的職工的平均工資
答:select 倉庫號,avg(工資) from 職工表 group by 倉庫號
說明:可以利用group by 子句進行分組計算查詢.group by短語的格式如下:group by groupcolumn[,groupcolumn……][having filtercondition]
可以按一列或多列分組,還可以用having 進一步限定分組的條件.
注意:where /group by等子句都不能放在from子句之前.
22. 求至少有兩個職工的每個倉庫的平均工資。
答: select 倉庫號,count(*),avg(工資) from 職工表 group by 倉庫號 having count(*)>=2
說明:having子句總是跟在group by 子句之後,不可以單獨使用.having子句用於限定分組.
23. 找出尚未確定供應商的訂購單
答:select * from 訂購單表 where 供應商號 is null
24. 列出已經確定了供應商的訂購單信息
答:select * from 訂購單表 where 供應商號 is not null

⑹ 關於資料庫SQL的一些簡單題

1.select 班級名稱,班級代碼 from 班級 where 系部代碼='02' or 系部代碼='03';
2.在'學生'表中查詢姓'李'學員的學號,姓名,年齡;
3.在'讀者表' 表中查詢名稱中含有'紅'的所有內容;
5.select 姓名,年齡 from 教師 where 姓名 like '?梅%';
4.在'圖書表'表中查詢圖書編號為'100111'的所有內容;
6.在'讀者表'表中查詢'系部名稱'為'自動化'的讀者的最小年齡;
7.在'用戶表'表中查詢姓名,年齡欄位,並按年齡,姓名升序排列;
8.select * from 學生 where 姓名 like '張%' or 姓名 like '羅%' or 姓名 like '劉%' order by 姓名
9.在'讀者表'表中查詢年齡大於60或小於1810的讀者姓名;
10.將編號為'115',姓名為'王梅',性別為'女'的記錄插入'讀者表'表;
11.select 姓名 as name,出生日期 as 'Birthday' from 學生 where 性別='女'.

排版沒排好,看起來有點費力;順序有點亂,不過我都按照你的順序寫了.

⑺ sql的4道題目.要正確答案

回如下,希望對您有幫助.
1.Inner Join 把兩個表連接在一起,返回兩個表中相匹配的記錄

Left outer join,左側表所有的記錄都返回,右側匹配的記錄返回,沒有匹配的返回Null

Right outer join 與Left outer join相反,右側的記錄返回,左側返回匹配的記錄,沒有匹配返回Null

Cross join 兩個表的笛卡兒積,返回所有可能的值,不允許有連接條件!

2.select 科目,avg(成績) from 成績表 group by 科目
order by 科目

3.建立索引是提高select語句最好的方法
(1).使用exists關鍵字檢查結果集:不要用count(*)來檢查結果集中是否包含行。
(2).使用標准聯接代替嵌套查詢:在執行嵌套查詢時,SQL server將先執行內部的子查詢,然後將查詢結果返回給外部查詢的作為檢索的數據源,最後執行外部的主查詢。而在執行包含標准聯接的查詢時,SQL server將要執行的僅僅是一個查詢。
(3).有效避免整表掃描,使用索引。
(4).在like子句的匹配條件的開始使用了%,若在like子句的匹配條件的開始使用了%,那麼包含這個like分句的查詢將會調用整表掃描。

4.這個..簡單的select * from table 結果這個是根據不同資料庫不同類型表而有所區別的,要分情況來說的,一般認為是記錄在資料庫裡面的物理位置吧,不過這樣答也不完全正確,表是分有索引和無索引的,不同類型在不同資料庫也有不同的處理方法 .
如果一次查詢出來多個數據集,那麼可以減少對資料庫的連接和查詢(這是很耗時的)

那麼如果你想要一次查詢出多個數據集,如果這些數據集與檢索出的一批數據相關,因此可能用臨時表將那些ID抽出來,然後再根據這些ID查其他的記錄。
這里需要臨時表。
臨時表一般存在tempdb里,不會有大問題的。

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

答案: