【SQL入門必練】SQL經(jīng)典50題及答案
一、數(shù)據(jù)庫(kù)Mysql和Navicat安裝
Mysql安裝參考鏈接:https://blog.csdn.net/qq_54796785/article/details/125215507
Navicat 15 安裝教程參考鏈接:https://www.bilibili.com/read/cv18531953/
二、數(shù)據(jù)表介紹及Navicat中插入數(shù)據(jù)源
1、學(xué)生表
Student(s_id,s_name,s_birth,s_sex) :學(xué)生編號(hào)、姓名、年月、性別
CREATE TABLE
IF NOT EXISTS `Student` (
`s_id` VARCHAR (20),
`s_name` VARCHAR (20) NOT NULL DEFAULT '',
`s_birth` VARCHAR (20) NOT NULL DEFAULT '',
`s_sex` VARCHAR (10) NOT NULL DEFAULT '',
PRIMARY KEY (`s_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;
-- 插入數(shù)據(jù)
INSERT INTO Student VALUES ('01', '趙雷', '1990-01-01', '男');
INSERT INTO Student VALUES ('02', '錢電', '1990-12-21', '男');
INSERT INTO Student VALUES ('03', '孫風(fēng)', '1990-05-20', '男');
INSERT INTO Student VALUES ('04', '李云', '1990-08-06', '男');
INSERT INTO Student VALUES ('05', '周梅', '1991-12-01', '女');
INSERT INTO Student VALUES ('06', '吳蘭', '1992-03-01', '女');
INSERT INTO Student VALUES ('07', '鄭竹', '1989-07-01', '女');
INSERT INTO Student VALUES ('08', '王菊', '1990-01-20', '女');
2、課程表
Course(c_id,c_name,t_id) :課程編號(hào)、 課程名稱、 教師編號(hào)
CREATE TABLE
IF NOT EXISTS `Course` (
`c_id` VARCHAR (20),
`c_name` VARCHAR (20) NOT NULL DEFAULT '',
`t_id` VARCHAR (20) NOT NULL,
PRIMARY KEY (`c_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;
-- 插入數(shù)據(jù)
INSERT INTO Course VALUES ('01', '語文', '02');
INSERT INTO Course VALUES ('02', '數(shù)學(xué)', '01');
INSERT INTO Course VALUES ('03', '英語', '03');
3、教師表
Teacher(t_id,t_name) :教師編號(hào)、教師姓名
CREATE TABLE
IF NOT EXISTS `Teacher` (
`t_id` VARCHAR (20),
`t_name` VARCHAR (20) NOT NULL DEFAULT '',
PRIMARY KEY (`t_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;
-- 插入數(shù)據(jù)
INSERT INTO Teacher VALUES ('01', '張三');
INSERT INTO Teacher VALUES ('02', '李四');
INSERT INTO Teacher VALUES ('03', '王五');
4、成績(jī)表
Score(s_id,c_id,s_score) :學(xué)生編號(hào)、課程編號(hào)、分?jǐn)?shù)
CREATE TABLE
IF NOT EXISTS `Score` (
`s_id` VARCHAR (20),
`c_id` VARCHAR (20),
`s_score` INT (3),
PRIMARY KEY (`s_id`, `c_id`)
) ENGINE = INNODB DEFAULT CHARSET = utf8;
-- 插入數(shù)據(jù)
INSERT INTO Score VALUES ('01', '01', 80);
INSERT INTO Score VALUES ('01', '02', 90);
INSERT INTO Score VALUES ('01', '03', 99);
INSERT INTO Score VALUES ('02', '01', 70);
INSERT INTO Score VALUES ('02', '02', 60);
INSERT INTO Score VALUES ('02', '03', 80);
INSERT INTO Score VALUES ('03', '01', 80);
INSERT INTO Score VALUES ('03', '02', 80);
INSERT INTO Score VALUES ('03', '03', 80);
INSERT INTO Score VALUES ('04', '01', 50);
INSERT INTO Score VALUES ('04', '02', 30);
INSERT INTO Score VALUES ('04', '03', 20);
INSERT INTO Score VALUES ('05', '01', 76);
INSERT INTO Score VALUES ('05', '02', 87);
INSERT INTO Score VALUES ('06', '01', 31);
INSERT INTO Score VALUES ('06', '03', 34);
INSERT INTO Score VALUES ('07', '02', 89);
INSERT INTO Score VALUES ('07', '03', 98);
三、50道SQL題
參考鏈接:https://blog.csdn.net/qq_40216188/article/details/118670474?
(包含答案,自行參考,哪道題不會(huì),請(qǐng)私聊Up主)
?題目1:查詢"01"課程比"02"課程成績(jī)高的學(xué)生的信息、課程分?jǐn)?shù)
?題目2:查詢平均成績(jī)大于等于60分且總分大于200分的同學(xué)且必須考3門的學(xué)生編號(hào)和學(xué)生姓名和平均成績(jī)
?題目3:查詢平均成績(jī)小于60分的同學(xué)的學(xué)生編號(hào)、學(xué)生姓名、平均成績(jī)(包括有成績(jī)的和無成績(jī))
?題目4:查詢所有同學(xué)的學(xué)生編號(hào)、學(xué)生姓名、選課總數(shù)、所有課程的總成績(jī)
?題目5:查詢“李”姓老師的數(shù)量
?題目6:查詢學(xué)過張三老師授課的同學(xué)信息
?題目7:找出沒有學(xué)過張三老師課程的學(xué)生
?題目8:查詢學(xué)過編號(hào)為01,并且學(xué)過編號(hào)為02課程的學(xué)生信息
?題目9:查詢學(xué)過01課程,但是沒有學(xué)過02課程的學(xué)生信息
?題目10:查詢沒有學(xué)完全部課程的同學(xué)的信息
?題目11:查詢至少有一門課與學(xué)號(hào)為01的同學(xué)所學(xué)相同的同學(xué)的信息
?題目12:查詢和01同學(xué)學(xué)習(xí)的課程完全相同的同學(xué)的信息
?題目13:查詢沒有修過張三老師講授的任何一門課程的學(xué)生姓名
?題目14:查詢兩門及其以上不及格課程的同學(xué)的學(xué)號(hào),姓名及其平均成績(jī)
?題目15:LeetCode-for-SQL的第二題:第二高的薪水
?題目16:求出第n高的成績(jī)(找出語文科目第2高的成績(jī)和學(xué)號(hào))
?題目17:LeetCode-SQL-596-超過5名學(xué)生的課程
?題目18:LeetCode-SQL-181-超過經(jīng)理收入的員工
?題目19:檢索01課程分?jǐn)?shù)小于60,按分?jǐn)?shù)降序排列的學(xué)生信息
?題目20:按平均成績(jī)從高到低(降序)顯示所有學(xué)生的所有課程的成績(jī)以及平均成績(jī)
?題目21:查詢各科成績(jī)最高分、最低分和平均分:以如下形式顯示:課程ID,課程name,最高分,最低分,平均分,及格率(及格:>=60),中等率(中等為:70-80),優(yōu)良率(優(yōu)良為:80-90),優(yōu)秀率(優(yōu)秀為:>=90);
?題目22:按照各科成績(jī)進(jìn)行排序,并且顯示排名
?題目23:查詢學(xué)生的總成績(jī),并進(jìn)行排名
?題目24:LeetCode-SQL-182-查找重復(fù)的電子郵箱,從給定的表Person中找出重復(fù)的電子郵箱
?題目25:LeetCode-SQL-595-大的國(guó)家
?題目26:LeetCode-SQL-184-部門工資最高/N高的員工
?題目27:查詢不同老師所教不同課程平均分從高到低顯示
?題目28:查詢所有課程的成績(jī)第2名到第3名的學(xué)生信息及該課程成績(jī)
?題目29:統(tǒng)計(jì)各科成績(jī)各分?jǐn)?shù)段人數(shù):課程編號(hào),課程名稱,[100-85],[85-70],[70-60],[0-60]及所占百分比
?題目30:查詢學(xué)生的平均成績(jī)及名次---比較綜合,多看,定義變量,實(shí)現(xiàn)rank函數(shù)
?題目31:查詢各科成績(jī)前三名的記錄---比較綜合,多看
?題目32:查詢每門課被選修的學(xué)生數(shù)
?題目33:查詢出只有兩門課程的全部學(xué)生的學(xué)號(hào)和姓名
?題目34:查詢男女生人數(shù)
?題目35:查詢名字中含有風(fēng)字的學(xué)生信息
?題目36:查詢同名同性的學(xué)生名單,并統(tǒng)計(jì)同名人數(shù)
?題目37:查詢每門課程的平均成績(jī),結(jié)果按平均成績(jī)降序排列;平均成績(jī)相同時(shí),按課程編號(hào)c_id升序排列
?題目38:查詢平均成績(jī)大于等于85的所有學(xué)生的學(xué)號(hào)、姓名和平均成績(jī)
?題目39:查詢所有學(xué)生的課程及分?jǐn)?shù)(均分、總分)情況
?題目40:查詢選修"張三"老師所授課程的學(xué)生中,成績(jī)最高的學(xué)生信息及其成績(jī)
?題目41:查詢不同課程成績(jī)相同的學(xué)生的學(xué)生編號(hào)、課程編號(hào)、學(xué)生成績(jī)
?題目42:題目的要求就是找出每門課的前2名同學(xué)
題目43:統(tǒng)計(jì)每門課程的學(xué)生選修人數(shù)(超過5人的課程才統(tǒng)計(jì))。要求輸出課程號(hào)和選修人數(shù),查詢結(jié)果按人數(shù)降序排列,若人數(shù)相同,按課程號(hào)升序排列
?題目44:檢索至少選修兩門課程的學(xué)生學(xué)號(hào)
?題目45:查詢選修了全部課程的學(xué)生信息
?題目46:查詢各學(xué)生的年齡:按照出生日期來算,當(dāng)前月日 < 出生年月的月日則,年齡減1
?題目47:查詢本周過生日的學(xué)生
?題目48:查詢下周過生日的學(xué)生
?題目49:查詢本月過生的同學(xué)
?題目50:查詢下月過生的同學(xué)