【筆試必備】常見sql筆試題(30題)


sql是測試從業者必備的技能之一,基本上也是筆試必考內容。

所以,不要讓sql拖了后腿,有些測友一遇到多表關聯查詢就犯暈,甚至連單表的執行順序都沒搞懂,下面簡單介紹下,順便給一些題供大家練習。

單表執行順序

select distinct 字段1,...,字段n from 庫.表
where 條件
group by 分組字段
having 過濾
order by 排序字段
limit n;

執行順序

from
where
group by
having
select
distinct
order by
limit

 

多表關聯的幾個概念

交叉連接:無任何匹配條件,生成笛卡爾積

內連接:共同部分

左連接:在內連接的基礎上保留左表的記錄

右連接:在內連接的基礎上保留右表的記錄

全外連接:在內連接的基礎上保留左右兩表沒有對應關系的記錄

 

練習題表結構

創建表

班級表

DROP TABLE IF EXISTS `class`;
CREATE TABLE `class` (
`cid` int(11) NOT NULL AUTO_INCREMENT,
`caption` varchar(255) NOT NULL,
`grade_id` int(11) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;

年級表

DROP TABLE IF EXISTS `class_grade`;
CREATE TABLE `class_grade` (
`gid` int(11) NOT NULL AUTO_INCREMENT,
`gname` varchar(255) NOT NULL,
PRIMARY KEY (`gid`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

課程表

DROP TABLE IF EXISTS `course`;
CREATE TABLE `course` (
`cid` int(11) NOT NULL,
`cname` varchar(255) NOT NULL,
`teacher_id` int(11) NOT NULL,
PRIMARY KEY (`cid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

成績表

DROP TABLE IF EXISTS `score`;
CREATE TABLE `score` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`student_id` int(11) NOT NULL,
`course_id` int(11) NOT NULL,
`score` varchar(255) DEFAULT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8;

學生表

DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
`sid` int(11) NOT NULL AUTO_INCREMENT,
`sname` varchar(255) NOT NULL,
`gender` enum('女','男') NOT NULL DEFAULT '男',
`class_id` int(11) NOT NULL,
PRIMARY KEY (`sid`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

老師表

DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher` (
`tid` int(11) NOT NULL,
`tname` varchar(255) DEFAULT NULL,
PRIMARY KEY (`tid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

班級任職表

DROP TABLE IF EXISTS `teacher2cls`;
CREATE TABLE `teacher2cls` (
`tcid` int(11) NOT NULL AUTO_INCREMENT,
`tid` int(11) NOT NULL,
`cid` int(11) NOT NULL,
PRIMARY KEY (`tcid`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; 

 

關於表數據,建議自己造,加深對表結構的理解。

 

常見筆試題

01、查詢同時選修了物理課和生物課的學生id和姓名


02、查詢“2”課程分數小於60,按分數降序排列的同學學號


03、查詢有兩門及以上課程超過60分的學生id及其平均成績


04、查詢沒有帶過任何班級的老師id和姓名


05、查詢沒有學生選修的課程的課程號和課程名


06、查詢至少選修兩門課程的學生學號


07、查詢各個課程及相應的選修人數


08、查詢課程編號為“2”且課程成績在80分以上的學生的學號和姓名


09、查詢課程名稱為“生物”,且分數低於60的學生姓名和分數


10、查詢每門課程的平均成績,結果按平均成績升序排列,平均成績相同時,按課程號降序排列


11、查詢同名同姓學生名單,並統計同名人數


12、查詢男生、女生的人數,按倒序排列;


13、查詢選修了2門以上課程的全部學生的學號和姓名


14、查詢每門課程被選修的學生數


15、查詢至少學過學號為“1”同學所選課程中任意一門課的其他同學學號和姓名


16、查詢沒有學全所有課的同學的學號、姓名


17、查詢有課程成績小於60分的同學的學號、姓名


18、查詢所帶班級數最多的老師id和姓名


19、查詢課程編號“2”的成績比課程編號“1”課程低的所有同學的學號、姓名


20、查詢帶過超過2個班級的老師的id和姓名


21、查詢沒有帶過高年級的老師id和姓名


22、查詢學過編號‘1’課程和編號‘2’課程的同學的學號、姓名


23、查詢教授課程超過2門的老師的id和姓名


24、查詢學過‘張老師’老師2門課以上的同學的學號、姓名


25、查詢班級信息,包括班級id、班級名稱、年級、年級級別(12為低年級,34為中年級,56位高年級)


26、查詢班級數小於5的年級id和年級名


27、查詢每位學生的學號,姓名,選課數,平均成績


28、查詢每個年級的學生人數


29、查詢每個年級的班級數,取出班級數最多的前三個年級


30、查詢“生物”課程和“物理”課程成績都及格的學生id和姓名

 

補充:查詢成績表里不同課程的成績倒數5名

 

參考答案

01:

select s.sid,s.sname from student s
where s.sid in(
	select s.student_id from score s
	join course c on c.cid = s.course_id
	where c.cname in ('體育','生物')
	group by s.student_id
	having count(s.student_id)=2
);

 

...

 

最好先自己做一遍,如需要參考答案,請微信聯系作者。

 

【bak】

原文已更新:https://www.cnblogs.com/uncleyong/p/14758383.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM