sql綜合練習題

一、表關系
年級表:class_grade
create table class_grade(gid int primary key auto_increment,gname varchar(20) not null);
insert into class_grade(gname) values('一年級'),('二年級'),('三年級');
班級表:class
create table class(cid int primary key auto_increment,caption varchar(30) not null,grade_id int not null,constraint class_name foreign key(grade_id)references class_grade(gid)on delete cascadeon update cascade);
insert into class(caption,grade_id) values('一年一班',1),('二年一班',2),('三年二班',3);學生表:student
create table student(sid int primary key auto_increment,sname varchar(20) not null,gender enum('',''),class_id int not null,constraint student_name foreign key(class_id)references class(cid)on delete cascadeon update cascade);
insert into student(sname,gender,class_id) values('喬丹','',1),('艾弗森','',1),('科比','',2);老師表:teacher
create table teacher(tid int primary key auto_increment,tname varchar(30) not null);
insert into teacher(tname) values('張三'),('李四'),('王五');課程表:course
create table course(cid int primary key auto_increment,cname varchar(30) not null,teacher_id int not null,constraint teacher_name foreign key(teacher_id)references teacher(tid)on delete cascadeon update cascade
);
insert into course(cname,teacher_id) values('生物',1),('體育',1),('物理',2);成績表:score
create table score(sid int primary key auto_increment,student_id int not null,course_id int not null,score int not null,foreign key(student_id) references student(sid)on delete cascadeon update cascade,foreign key(course_id) references course(cid)on delete cascadeon update cascade
);insert into score(student_id,course_id,score) values(1,1,60),(1,2,59),(2,2,99);班級任職表:teach2cls
create table teach2cls(tcid int primary key auto_increment,tid int not null,cid int not null,foreign key(tid) references teacher(tid)on delete cascadeon update cascade,foreign key(cid) references class(cid)on delete cascadeon update cascade
);insert into teach2cls(tid,cid) values(1,1),(1,2),(2,1),(3,2);2、查詢學生總人數
select count(sname) 總人數 from student;3、查詢’生物‘課程和’物理‘課程成績都及格的學生id和姓名
select sid,sname
fromstudent
inner join(select student_idfrom scorewherecourse_id in (selectcidfromcoursewherecname in ('生物','物理')) and  score >= 60) as t1 on t1.student_id = student.sid;4、查詢每個年級的班級數,取出班級數最多的前三個年級;
selectclass_grade.gid,class_grade.gname
fromclass_grade
inner join
(select grade_id,count(cid)fromclassgroup by grade_idorder by grade_id desclimit 3
) as t1 on t1.grade_id = class_grade.gid;5、查詢平均成績最高和最低的學生的id和姓名以及平均成績;
selectstudent.sid,student.sname,avg_score
fromstudent
inner join(selectstudent_id,avg(score) as avg_scorefromscoregroup bystudent_idhaving avg(score) in((selectavg(score) as max_scorefromscoregroup by student_idorder byavg(score) desclimit 1),(selectavg(score) as min_scorefromscoregroup bystudent_idorder byavg(score)limit 1))) as t1 on t1.student_id = student.sid;6、查詢每個年級的學生人數
select class_grade.gname,count_cid
from class_grade
inner join(selectgrade_id,count(cid) as count_cidfromclass,studentwhereclass.cid = class_idgroup by grade_id) as t1 on t1.grade_id = class_grade.gid;7、查詢每位學生的學號、姓名、選課數、平均成績;
selectstudent.sid,student.sname,course_count,avg_score
fromstudent
left join(selectstudent_id,count(course_id) as course_count,avg(score) as avg_scorefromscoregroup by student_id) as t1 on t1.student_id = student.sid;8、查詢學生編號為‘2’的學生的姓名,該學生成績最高的課程名、成績最低的課程名及分數;
selectstudent.sname,student.sid,t1.score
from
(selectstudent_id,course_id,scorefrom scorewhere student_id = 2 and score in((selectmax(score)fromscorewhere student_id = 2),(select min(score)fromscorewhere student_id =2)) 
)as t1
inner join student on t1.student_id = student.sid
inner join course on t1.course_id = course.cid;9、查詢‘李’的老師的個數和所帶班級數;
selectcount(teacher.tname) as '李%個數',count(teach2cls.cid) as '班級數量'
from teacher left join teach2cls on teach2cls.tid = teacher.tid
where teacher.tname like '李%';10、查詢班級數小于5年級的id和年級名;
selectgid,gname,count(cid)
fromclass_grade
inner join class on gid = grade_id
group bygid
havingcount(cid) < 5
11、查詢班級信息,包括班級id、班級名稱、年級、年級級別(12
為低年級,34為中年級,56為高年級)
selectclass.cid as '班級id',class.caption as '班級名稱',class_grade.gid as '年級',
casewhen class_grade.gid between 1 and 2 then ''when class_grade.gid between 3 and 4 then ''when class_grade.gid between 5 and 6 then '' else 0 end as '年級級別'
fromclass
left join class_grade on class_grade.gid=class.grade_id;12、查詢學過“張三”老師2門課以上的同學的學號、姓名;
select sid,sname
fromstudent
where sid in 
(
selectstudent_id
fromscore
left join course on course_id = course.cid
where course.teacher_id in (    select tidfrom teacherwhere tname = '張三')
group bystudent_id
having count(course.cid)>=2
)13、查詢教授課程超過2門的老師的id和姓名;
selecttid,tname
fromteacher
inner join (selectteacher_id,count(cid)fromcoursegroup byteacher_idhaving count(cid) >=2
) as t1 on t1.teacher_id = teacher.tid;14、查詢學過編號‘1’課程和編號2課程的同學的學號、姓名;
selectsid,sname
fromstudent
where sid in 
(
select course_id
fromscore
group bycourse_id
havingcourse_id in (1,2)
)15、查詢沒有帶過高年級的老師id和姓名;
selecttid,tname
fromteacher
where tid  in
(
select tid
fromteach2cls
where tid in 
(selectcid
fromclass
where grade_id in (5,6)));16、查詢學過'張三'老師所教的所有課的同學的學號、姓名;
selectsid,sname
fromstudent
where sid in (selectstudent_idfromscorewhere course_id in (    selectcidfromcourseinner join teacher on teacher_id = teacher.tidwhere teacher.tname ='張三'));17、查詢帶過超過2個班級的老師的id和姓名;
selecttid,tname
fromteacher
where tid in (
selecttid
fromteach2cls
group bytid
havingcount(cid) >2);18、查詢課程編號’2‘的成績比課程’1‘課程低的所有同學的學號、姓名
select sid,sname
fromstudent
where sid in (
select t1.student_id
from
(selectstudent_id,scorefromscorewhere course_id =2
) as t1
inner join
(selectstudent_id,scorefromscorewhere course_id =1
) as t2 on t1.student_id = t2.student_id
where t1.score < t2.score);19、查詢所帶班級數最多的老師id和姓名;
selecttid,tname
fromteacher
where tid =
(selecttid
fromteach2cls
group bytid
order by count(cid) desc
limit 1);
20、查詢有課程成績小于60分的同學的學號、姓名;
selectsid,sname
fromstudent
where sid in (
selectstudent_id
fromscore
where score <60);
21、查詢沒有學全所有課的同學的學號、姓名;
selectsid,sname
fromstudent
where sid not in (
selectstudent_id
fromscore
group bystudent_id
havingcount(course_id) = (select count(cid) from course));
22、查詢至少有一門課與學號為“1”的同學所學相同的同學的學號和姓名;
selectsid,sname
fromstudent
where sid in 
(
selectstudent_id
fromscore
where course_id in 
(selectcourse_id
fromscore
where student_id = 1));23、查詢至少學過學號為“1”同學所選課程中任意一門課的其他同學學號和姓名;
selectsid,sname
fromstudent
where sid in 
(
selectstudent_id
fromscore
where course_id in 
(selectcourse_id
fromscore
where student_id = 1)
havingstudent_id !=1
);24、查詢和‘2’號同學學習的課程完全相同的其它同學的學號和姓名
selectsid,sname
fromstudent
where sid in 
(selectstudent_idfromscore,(select course_id fromscorewhere student_id = 2) as t1where score.course_id = t1.course_id and score.student_id !=2group byscore.student_idhavingcount(score.course_id)=(select count(course_id) from scorewhere student_id =2)
);
25、刪除學習‘張三’老師課的score表記錄;
delete
fromscore
where course_id in (
select cid
fromcourse
where course.teacher_id = (
select tid
from teacher
where teacher.tname = '張三'));26、向score表中插入一些記錄,這些記錄要求符合以下條件:
1、沒有上過編號‘2’課程的同學學號
2、插入’2‘號課程的平均成績insert into score(student_id,course_id,score) select t1.sid,2,t2.avg from (select sid from student where sid not in (select student_id from score where course_id = 2)) as t1,(select avg(score) as avg from score group by course_id having course_id =2) as t2;27、按平均成績從低到高顯示所有學生的“語文”、“數學”、“英語”三門的課程成績,按如下形式顯示: 學生ID,語文,數學,英語,有效課程數,有效平均分;select sc.student_id as  學生ID,(select score.score from score left join course on score.course_id = course.cid where course.cname = '生物' and score.student_id = sc.student_id) as 生物,(select score.score from score left join course on score.course_id = course.cid where course.cname = '體育' and score.student_id = sc.student_id) as 體育,(select score.score from score left join course on score.course_id = course.cid where course.cname = '物理' and score.student_id = sc.student_id) as 物理,count(sc.course_id) as '有效課程數',avg(sc.score) as '有效平均分'from score as sc group by sc.student_id order by avg(sc.score);28、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,高低分;select course_id as "課程ID",max(score) as "最高分",min(score) as "最低分" from scoregroup by course_id29、按各科平均成績從低到高和及格率的百分數從高到低順序;SELECT course_id as '課程ID',AVG(score) as '平均成績',sum(CASE WHEN score > 60 then 1 ELSE 0 END)/COUNT(1)*100 as '及格率'from scoreGROUP BY course_id ORDER BY '平均成績' ASC,'及格率' desc;30、課程平均分從高到低顯示(現實任課老師);
SELECT score.course_id as '課程ID',avg(score) as '平均分' from score
inner join course on score.course_id = course.cid
GROUP BY course_id
ORDER BY avg(score) DESC31、查詢各科成績前三名的記錄(不考慮成績并列情況)
SELECT score.sid,score.course_id,score.score,t1.first_score,t1.sencond_score,t1.third_score from score LEFT JOIN
(SELECT sid,(select  score from score as s2 where s2.course_id=s1.course_id ORDER BY score desc LIMIT 0,1) as first_score,(select  score from score as s2 where s2.course_id=s1.course_id ORDER BY score desc LIMIT 1,1) as sencond_score,(select  score from score as s2 where s2.course_id=s1.course_id ORDER BY score desc LIMIT 2,1) as third_score
from score as s1)as t1 on score.sid = t1.sid
WHERE score.score in (t1.first_score,t1.sencond_score,t1.third_score)32、查詢每門課程被選修的學生數;
SELECT score.course_id as '課程ID',count(student_id) as '學生數' from score
GROUP BY course_id33、查詢選修了2門以上課程的全部學生的學號和姓名;
SELECT student.sid,student.sname from student WHERE sid in (
SELECT score.student_id from score
GROUP BY student_id
HAVING count(course_id) >=2);34、查詢男生、女生的人數,按倒序排列;
select gender,count(sid) as sum from student
group by gender
order by sum desc35、查詢姓“張”的學生名單;
SELECT sname from student WHERE sname like '張%'36、查詢同名同姓學生名單,并統計同名人數;
SELECT sname as '名字',count(sname) as '同名人數' from student
GROUP BY sname
HAVING count(sname) >137、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列;
select score.course_id,avg(score) as avg from score
INNER JOIN course on course.cid = course_id
GROUP BY course_id
ORDER BY avg ASC,course_id DESC;38、查詢課程名稱為“數學”,且分數低于60的學生姓名和分數;
SELECT sid,sname from student
where sid in (
SELECT score.student_id  from score
INNER JOIN course on course.cid = score.course_id
WHERE course.cname = '體育' and score.score <60);39、查詢課程編號為“3”且課程成績在80分以上的學生的學號和姓名;
SELECT sid,sname from  student
WHERE sid in (
SELECT score.student_id  from score
INNER JOIN course on course.cid = course_id
WHERE course_id = 3 and score.score > 80);40、求選修了課程的學生人數
select course_id as '課程ID',count(student_id) as '學生人數' from score group by course_id;41、查詢選修“王五”老師所授課程的學生中,成績最高和最低的學生姓名及其成績;
SELECT student.sname,max(score),min(score) from score
INNER JOIN student on score.student_id = student.sid
WHERE course_id in (
SELECT cid from course
WHERE teacher_id in (
SELECT tid FROM teacher
WHERE tname = '王五'))
GROUP BY student_id
ORDER BY max(score) DESC,MIN(score) ASC
LIMIT 242、查詢各個課程及相應的選修人數;
SELECT score.course_id as 'ID',course.cname as '課程',count(student_id) as '人數' from score
LEFT JOIN course on score.course_id = course.cid
GROUP BY course_id43、查詢不同課程但成績相同的學生的學號、課程號、學生成績;
select DISTINCT s1.course_id,s2.course_id,s1.score,s2.score from score as s1, score as s2 where s1.score = s2.score and s1.course_id != s2.course_id;44、查詢每門課程成績最好的前兩名學生id和姓名;
SELECT score.sid,score.course_id,score.score,t1.first_score,t1.sencond_score from score LEFT JOIN
(SELECT sid,(select  score from score as s2 where s2.course_id=s1.course_id ORDER BY score desc LIMIT 0,1) as first_score,(select  score from score as s2 where s2.course_id=s1.course_id ORDER BY score desc LIMIT 1,1) as sencond_score
from score as s1)as t1 on score.sid = t1.sid
WHERE score.score <= t1.first_score and score.score >= t1.sencond_score45、檢索至少選修兩門課程的學生學號;
SELECT score.student_id as '學生ID',count(course_id) as '課程ID' from score
GROUP BY student_id
HAVING count(course_id)>=246、查詢沒有學生選修的課程的課程號和課程名;
SELECT cid,cname from course
WHERE cid not IN(
SELECT score.course_id from score
GROUP BY score.course_id)47、查詢沒帶過任何班級的老師id和姓名;
SELECT tid,tname from teacher
WHERE tid not in(
SELECT teach2cls.cid from teach2cls
GROUP BY teach2cls.cid)48、查詢有兩門以上課程超過80分的學生id及其平均成績;
SELECT score.student_id as '學生ID',avg(score) as '平均成績' from score
WHERE score > 30 
GROUP BY student_id
HAVING count(course_id) >=249、檢索“3”課程分數小于60,按分數降序排列的同學學號;
select score.student_id from score
WHERE score < 60 and course_id = 3
ORDER BY score DESC50、刪除編號為“2”的同學的“1”課程的成績
delete from score where score.student_id = 2 and score.course_id = 1;51、查詢同時選修了物理課和生物課的學生id和姓名;
SELECT sid,sname from student
WHERE sid in(
SELECT score.student_id from score
WHERE course_id in (
SELECT cid from course
WHERE course.cname in ('生物','物理'))
GROUP BY student_id
HAVING count(course_id) =2)

?

轉載于:https://www.cnblogs.com/yjiu1990/p/9263395.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/390156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/390156.shtml
英文地址,請注明出處:http://en.pswp.cn/news/390156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

javascript原型_在JavaScript中凍結原型時會發生什么

javascript原型Have you wondered what happens when you freeze the prototype of an object? Lets find out together.您是否想過凍結對象的原型時會發生什么&#xff1f; 讓我們一起找出答案。 對象 (Objects) In JavaScript, objects are dynamic collections of propert…

遲來的2017總結

明天就是年后第一天上班了&#xff08;過年期間請了6天假&#xff09;&#xff0c; 打算今天寫一下2017的總結&#xff0c;本來還想寫2018的愿景的&#xff0c;不過想想還是算了&#xff0c;現在沒什么想法&#xff0c;不想敷衍了事。 先貼一個2017的提升計劃&#xff1a; http…

tomcat啟動卡住

新部署的項目啟動tomcat后一直停在org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.16&#xff0c;卡在了org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory [/opt/tomcat/web…

怎樣準備阿里技術面試_如何準備技術面試

怎樣準備阿里技術面試In June 2020 I watched an inspiring talk by Anthony D. Mays, a technical coach and founder at Morgan Latimerco. He came on a Facebook Developer Circles Benin live session and talked about how to prepare for a technical interview. 2020年…

通過一個簡單例子理解 RecyclerView.ItemDecoration

一、前言 RecyclerView 是從5.0推出的 MD 風格的控件。RecyclerView 之前有 ListView、GridView&#xff0c;但是功能很有限&#xff0c;例如 ListView 只能實現垂直方向上的滑動等。但是存在則合理&#xff0c;ListView 卻沒有被官方標記為 Deprecated&#xff0c;有興趣的同學…

Entity Framework Logging and Intercepting Database Operations (EF6 Onwards)

參考官方文檔&#xff1a;https://msdn.microsoft.com/en-us/library/dn469464(vvs.113).aspx轉載于:https://www.cnblogs.com/liandy0906/p/8473110.html

面試題 17.14. 最小K個數

面試題 17.14. 最小K個數 設計一個算法&#xff0c;找出數組中最小的k個數。以任意順序返回這k個數均可。 示例&#xff1a; 輸入&#xff1a; arr [1,3,5,7,2,4,6,8], k 4 輸出&#xff1a; [1,2,3,4] 提示&#xff1a; 0 < len(arr) < 1000000 < k < min(1…

這是您現在可以免費獲得的115張Coursera證書(在冠狀病毒大流行期間)

At the end of March, the world’s largest Massive Open Online Course provider Coursera announced that they are offering 100 free courses in response to the impact of the COVID-19 pandemic. 3月底&#xff0c;全球最大的大規模在線公開課程提供商Coursera 宣布 &a…

由淺入深理解----java反射技術

java反射機制詳解 java反射機制是在運行狀態下&#xff0c;對任意一個類可以獲取該類的屬性和方法&#xff0c;對任意一個對象可以調用其屬性和方法。這種動態的獲取信息和調用對象的方法的功能稱為java的反射機制 class<?>類&#xff0c;在java.lang包下面&#xff0c;…

【VMware vSAN 6.6】5.5.Update Manager:vSAN硬件服務器解決方案

目錄 1. 簡介 1.1.適用于HCI的企業級存儲2. 體系結構 2.1.帶有本地存儲的服務器2.2.存儲控制器虛擬系統套裝的缺點2.3.vSAN在vSphere Hypervisor中自帶2.4.集群類型2.5.硬件部署選項3. 啟用vSAN 3.1.啟用vSAN3.2.輕松安裝3.3.主動測試4. 可用性 4.1.對象和組件安置4.2.重新構建…

5848. 樹上的操作

給你一棵 n 個節點的樹&#xff0c;編號從 0 到 n - 1 &#xff0c;以父節點數組 parent 的形式給出&#xff0c;其中 parent[i] 是第 i 個節點的父節點。樹的根節點為 0 號節點&#xff0c;所以 parent[0] -1 &#xff0c;因為它沒有父節點。你想要設計一個數據結構實現樹里面…

了解如何通過Python使用SQLite數據庫

SQLite is a very easy to use database engine included with Python. SQLite is open source and is a great database for smaller projects, hobby projects, or testing and development.SQLite是Python附帶的非常易于使用的數據庫引擎。 SQLite是開源的&#xff0c;是用于…

32位JDK和64位JDK

32位和64位系統在計算機領域中常常提及&#xff0c;但是仍然很多人不知道32位和64位的區別&#xff0c;所以本人在網上整理了一些資料&#xff0c;并希望可以與大家一起分享。對于32位和64位之分&#xff0c;本文將分別從處理器&#xff0c;操作系統&#xff0c;JVM進行講解。 …

中小企業如何選擇OA協同辦公產品?最全的對比都在這里了

對于中小企業來說&#xff0c;傳統的OA 產品&#xff0c;如泛微、藍凌、致遠、華天動力等存在價格高、使用成本高、二次開發難等特點&#xff0c;并不適合企業的協同管理。 國內OA市場也出現了一批輕便、低價的OA產品&#xff0c;本文針對以下幾款適合中小企業的OA產品在功能、…

python緩沖區_如何在Python中使用Google的協議緩沖區

python緩沖區When people who speak different languages get together and talk, they try to use a language that everyone in the group understands. 當說不同語言的人聚在一起聊天時&#xff0c;他們會嘗試使用小組中每個人都能理解的語言。 To achieve this, everyone …

PowerDesigner16中的對象無效,不允許有擴展屬性 問題的解決

PowerDesigner16中的對象無效&#xff0c;不允許有擴展屬性 消息 15135&#xff0c;級別 16&#xff0c;狀態 1&#xff0c;過程 sp_addextendedproperty&#xff0c;第 37 行 對象無效。XXXXXXX 不允許有擴展屬性&#xff0c;或對象不存在。 把 execute sp_addextendedpropert…

Elasticsearch學習(2)—— 常見術語

為什么80%的碼農都做不了架構師&#xff1f;>>> cluster (集群)&#xff1a;一個或多個擁有同一個集群名稱的節點組成了一個集群。每個集群都會自動選出一個主節點&#xff0c;如果該主節點故障&#xff0c;則集群會自動選出新的主節點來替換故障節點。 node (節點…

67. 二進制求和

67. 二進制求和 給你兩個二進制字符串&#xff0c;返回它們的和&#xff08;用二進制表示&#xff09;。 輸入為 非空 字符串且只包含數字 1 和 0。 示例 1: 輸入: a “11”, b “1” 輸出: “100” 示例 2: 輸入: a “1010”, b “1011” 輸出: “10101” 提示&…

前端開發有哪些技術棧要掌握_為什么要掌握前端開發的這四個主要概念

前端開發有哪些技術棧要掌握After working as a front-end developer for three years, I have been able to summarize what I feel are the four major concepts of front-end development. Knowing and studying these four areas will make you stand out from the crowd.在…

python中的序列化與反序列化

之前&#xff0c;在學習python時&#xff0c;一直弄不明白pickle和json模塊的序列化和反序例化之間的區別和用法&#xff0c;最近閑來有時間&#xff0c;重新研究了這兩個模塊&#xff0c;也算是基本搞明白他們之中的區別了。 用于序列化的兩個模塊&#xff0c; json&#xff0…