mysql練習題

来源:https://www.cnblogs.com/linzetong/archive/2018/01/21/8324807.html
-Advertisement-
Play Games

表結構和數據:http://www.cnblogs.com/wupeiqi/articles/5748496.html 題目:2、查詢“生物”課程比“物理”課程成績高的所有學生的學號;1)select A.student_id,生物分數,物理分數 from (select student_id,nu ...


表結構和數據:http://www.cnblogs.com/wupeiqi/articles/5748496.html

題目:
2、查詢“生物”課程比“物理”課程成績高的所有學生的學號;
1)
select A.student_id,生物分數,物理分數 from
(select student_id,num as 生物分數
from score
where course_id=(select cid from course where cname='生物')) as A
left join
(select student_id,num as 物理分數
from score
where course_id=(select cid from course where cname='物理')) as B
on A.student_id = B.student_id where 生物分數 > if(isnull(物理分數),0,物理分數);
2)
select A.student_id,生物分數,物理分數 from
(select student_id,num as 生物分數 from score left join course on score.course_id = course.cid where course.cname = '生物') as A
left join
(select student_id,num as 物理分數 from score left join course on score.course_id = course.cid where course.cname = '物理') as B
on A.student_id = B.student_id where 生物分數 > if(isnull(物理分數),0,物理分數);


3、查詢平均成績大於60分的同學的學號和平均成績;
select student_id,avg(num) as 平均成績 from score group by student_id having 平均成績 > 60;


4、查詢所有同學的學號、姓名、選課數、總成績;
select student.sid,sname,count(student_id),sum(num)
from score right join student
on student.sid=student_id
group by student_id;


5、查詢姓“李”的老師的個數;
select count(*) from teacher where tname like '李%';



6、查詢沒學過“李平老師”老師課的同學的學號、姓名;
select distinct student.sid,sname from student where sid not in (
select distinct student_id
from score
where course_id in(
select cid
from course left join teacher
on course.teacher_id=teacher.tid
where tname = '李平老師')
);

7、查詢學過“001”並且也學過編號“002”課程的同學的學號、姓名;
1)
select A.sid,A.sname from
(select student.sid,sname from score right join student
on student.sid=student_id
where course_id='001') as A
inner join
(select student.sid,sname from score right join student
on student.sid=student_id
where course_id='002') as B
on A.sid=B.sid
2)
select student_id,sname from
(select student_id,course_id from score where course_id = 1 or course_id = 2) as B
left join student on B.student_id = student.sid group by student_id HAVING count(student_id) > 1


8、查詢學過“葉平”老師所教的所有課的同學的學號、姓名;
select student.sid,sname from score right join student
on student.sid=student_id
where course_id in(
select cid from course left join teacher
on course.teacher_id=teacher.tid
where tname='李平老師'
) group by student.sid HAVING count(student.sid) = (
select count(cid) from course left join teacher
on course.teacher_id=teacher.tid
where tname='李平老師'
);

9、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名;
select sname,sid from student inner join (
select A.student_id from
(select student_id,num as s1 from score left join course on score.course_id = course.cid where course.cid = '001') as A
left join
(select student_id,num as s2 from score left join course on score.course_id = course.cid where course.cid = '002') as B
on A.student_id = B.student_id where s1 > if(isnull(s2),0,s2)
) as C
on C.student_id=student.sid;

10、查詢有課程成績小於60分的同學的學號、姓名;
select distinct student.sid,sname from student left join score
on student.sid=score.student_id
where num<60;

11、查詢沒有學全所有課的同學的學號、姓名;
select student.sid,sname from score right join student
on student.sid=score.student_id
group by student_id
having count(student_id) != (
select count(*) from course
);

12、查詢至少有一門課與學號為“001”的同學所學相同的同學的學號和姓名;
select student.sid,sname,count(sname) from score right join student
on student.sid=student_id
where student_id !='001' and course_id in (
select course_id from score where student_id='001'
) group by student_id;

13、查詢至少學過學號為“001”同學所有課的其他同學學號和姓名;
select student.sid,sname from score right join student
on student.sid=student_id
where student_id !='001' and course_id in (
select course_id from score where student_id='001'
) group by student_id
having count(sname) >= (
select count(*) from score
where student_id='001');

14、查詢和“002”號的同學學習的課程完全相同的其他同學學號和姓名;

select student.sid,sname from score right join student
on student.sid=student_id where student_id in(
select student_id from score where student_id != 2 group by student_id HAVING count(course_id) = (select count(course_id) from score where student_id = 2))
and course_id in (
select course_id from score where student_id='002'
) group by student_id
having count(course_id) = (
select count(course_id) from score
where student_id='002');

15、刪除學習“葉平”老師課的score表記錄;
delete from score where course_id in (
select cid from course left join teacher on course.teacher_id=tid where tname='李平老師'
)

16、向SC表中插入一些記錄,這些記錄要求符合以下條件:①沒有上過編號“002”課程的同學學號;②插入“002”號課程的平均成績;
insert into score(student_id, course_id, num) select sid,2,(select avg(num) from score where course_id = 2)
from student where sid not in (
select student_id from score where course_id = 2
)

17、按平均成績從低到高 顯示所有學生的“生物”、“物理”、“體育”、“美術”4門的課程成績,按如下形式顯示:學生ID,生物,物理,體育,美術,有效課程數,有效平均分;(不會這種查詢語法)
select student_id,
(select num from score s left join course c on s.course_id=c.cid where cname='生物' and sc.student_id=s.student_id) as 生物分數,
(select num from score s left join course c on s.course_id=c.cid where cname='物理' and sc.student_id=s.student_id) as 物理分數,
(select num from score s left join course c on s.course_id=c.cid where cname='體育' and sc.student_id=s.student_id) as 體育分數,
(select num from score s left join course c on s.course_id=c.cid where cname='美術' and sc.student_id=s.student_id)as 美術分數,
count(course_id),avg(num)
from score sc
group by student_id
order by avg(num);


18、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分;
select course_id,max(num),min(num) from score group by course_id;

19、按各科平均成績從低到高和及格率的百分數從高到低順序;
1)
select avg(num),score.course_id,課程人數,課程及格人數,(課程及格人數/課程人數*100) as 及格率 from score left join
(select course_id,count(student_id) as 課程人數 from score group by course_id order by course_id) as A
on score.course_id=A.course_id
left join
(select course_id,count(student_id) as 課程及格人數 from score where num >=60 group by course_id order by course_id) as B
on A.course_id=B.course_id
group by score.course_id
having
order by avg(num),及格率 desc;
2)
select course_id, avg(num) as avgnum,sum(case when score.num > 60 then 1 else 0 END)/count(1)*100 as percent from score group by course_id order by avgnum asc,percent desc;

20、課程平均分從高到低顯示(現實任課老師);
select tname,avg(課程平均分) from
(select tname,c.cid from teacher t right join course c on t.tid=c.teacher_id) as A
left join
(select avg(num) as 課程平均分,course_id from score group by course_id order by avg(num) desc) as B
on A.cid=B.course_id
group by tname
order by avg(課程平均分) desc;

21、查詢各科成績前5名的記錄:(不考慮成績併列情況);
select distinct cname,course_id,
(select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1) as first_num,
(select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 1,1) as second_num,
(select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 2,1) as third_num,
(select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 3,1) as fourth_num,
(select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 4,1) as fifth_num
from score s1 left join course c on c.cid=s1.course_id;

22、查詢每門課程被選修的學生數;
select course_id,count(student_id) from score group by course_id;

23、查詢出只選修了一門課程的全部學生的學號和姓名;
select student_id,sname from student st left join score sc on st.sid=sc.student_id
group by student_id
having count(course_id)=1;

27、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列;
select course_id,avg(if(isnull(num),0,num)) from score group by course_id order by avg(num),course_id desc;

28、查詢平均成績大於85的所有學生的學號、姓名和平均成績;
select student_id,sname,avg(num) from score sc left join student st on sc.student_id=st.sid group by student_id;

29、查詢課程名稱為“生物”,且分數低於60的學生姓名和分數;
select sname,num from score sc left join student st on sc.student_id=st.sid
left join course c on c.cid=sc.course_id
where c.cname='生物' and num<60;

31、求選了課程的學生人數
select count(distinct student_id) from score


32、查詢選修“張磊老師”老師所授課程的學生中,成績最高的學生姓名及其成績;
select sname,max(num) from score sc
left join student st on sc.student_id=st.sid
where course_id in (
select cid from course c
left join teacher t on c.teacher_id=t.tid
where tname='張磊老師'
);

33、查詢各個課程及相應的選修人數;
select cname,count(student_id) from score sc
left join course c on c.cid=sc.course_id
group by course_id;

34、查詢不同課程但成績相同的學生的學號、課程號、學生成績;
select student_id,course_id,num from score where sid in (
select s1.sid from score s1
inner join score s2 on s1.num=s2.num and s1.course_id != s2.course_id)

35、查詢每門課程成績最好的前兩名;
select distinct cname,course_id,
(select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 0,1) as first_num,
(select num from score as s2 where s2.course_id = s1.course_id order by num desc limit 1,1) as second_num
from score s1 left join course c on c.cid=s1.course_id;

36、檢索至少選修兩門課程的學生學號;
select student_id from score sc group by student_id having count(course_id)>1;

37、查詢全部學生都選修的課程的課程號和課程名;
select course_id,cname from score sc
right join course c on c.cid=sc.course_id
group by course_id
having count(student_id)=(
select count(distinct sid) from student
);

38、查詢沒學過“葉平”老師講授的任一門課程的學生姓名;
select dictinct sname from score sc
left join student st on sc.student_id=st.sid
where student_id not in (
select student_id from score where course_id in (
select cid from course c left join teacher t on c.teacher_id=t.tid where tname='張磊老師'
)
);

39、查詢兩門以上不及格課程的同學的學號及其平均成績;
select student_id,avg(num) from score where student_id in (
select student_id from score where num<60 group by student_id having count(course_id)>1
) group by student_id;

40、檢索“004”課程分數小於60,按分數降序排列的同學學號;
select student_id from score where course_id=4 and num<60 order by num desc;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 最近在玩樹莓派接大觸摸屏 發現一個問題,vs 在 iot 上部署應用,使用的是 Universal (Unencrypted Protocol) https://docs.microsoft.com/en-us/windows/iot-core/develop-your-app/appdeploym ...
  • wc: 字數統計命令,輸出文件中的行數、單詞數、位元組數 1. 命令格式: wc [選項列表]... [文件名列表]... 2. 命令功能: 統計指定文件中的位元組數、字數、行數,並將統計結果顯示輸出,如果沒有給出文件名,則從標準輸入讀取,wc同時也給出所指定文件的總統計數 3. 命令參數: wc:顯示 ...
  • 收錄在日常運維雜燴系列 一、概念用途 1、介紹 ngrok是非常流行的反向代理服務,可以進行內網穿透,支持80埠以及自定義tcp埠轉發。這樣你就可以運行本地的程式,而讓別人通過公網訪問了 ngrok 是一個反向代理,通過在公共的端點和本地運行的 Web 伺服器之間建立一個安全的通道。ngrok ...
  • [20180122]列統計與直方圖.txt --//昨天看了https://jonathanlewis.wordpress.com/2018/01/18/column-stats/,提到分析method的各種寫法,自己重覆驗證看看: 1.環境:SCOTT@book> @ ver1PORT_STRIN ...
  • 數據是應用系統的血液,沒有數據的系統應用價值是非常有限的。經過多年的觀察發現,身邊很多的程式開發人員在開發應用系統的時候,都是按照標準SQL語法及應用方法去進行資料庫設計,併進行應用開發的,沒有任何的針對性。這種開發方式往往會引發的一個問題就是:試用階段功能正常,但是業務量一上來後就開始性能問題就遍 ...
  • PostgreSQL=>遞歸查詢 轉載請註明源地址:http://www.cnblogs.com/funnyzpc/p/8232073.html 距上次博客更新剛好兩周,這兩周發生了很多,比如:SFTP服務拉取數據,第三方公共平臺介面邏輯遷移新框架,新框架(Spring Cloud)上手,公司月報和 ...
  • 實驗環境: 系統->Redhat 6.5 Oracle軟體版本->oracle 11.2.0.4.0 系統初始化 設定hosts主機名和對應IP地址 vi /etc/hosts 192.168.139.11 t-redhat-02 t-redhat-02.com 關閉selinux vi /etc/ ...
  • 1. 開啟兩個mongo伺服器(用於一主一從, 沒有加安全驗證相關參數 : 可以使用mongd-help查看) mongod --bind_ip IP --port PORT --dbpath D:\.. --replSet name ....(從類似, 埠不要相同) --bind_ip : 服務 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...