MySQL 試題

了解SQL語(yǔ)句中關(guān)鍵字的書(shū)寫(xiě)順序與執(zhí)行順序十分重要,這十分有利于我們編寫(xiě)與理解SQL語(yǔ)句。

關(guān)鍵字書(shū)寫(xiě)順序(由上至下):

select
distinct
from
join
on
where
group by
having
union (all)
order by
limit

關(guān)鍵字執(zhí)行順序(由上至下):

from
on
join
where
group by
having
select
distinct
union (all)
order by
limit

筆試一

創(chuàng)建表數(shù)據(jù)

/* 學(xué)生表 */
CREATE TABLE Student(
    s_id VARCHAR(20),                        /* 學(xué)生ID */
    s_name VARCHAR(20) NOT NULL DEFAULT '',  /* 學(xué)生姓名 */
    s_birth VARCHAR(20) NOT NULL DEFAULT '', /* 出生日期 */
    s_sex VARCHAR(10) NOT NULL DEFAULT '',   /* 學(xué)生性別 */
    PRIMARY KEY(s_id) 
);
/* 課程表 */
CREATE TABLE Course(
    c_id VARCHAR(20),                        /* 課程ID */
    c_name VARCHAR(20) NOT NULL DEFAULT '',  /* 課程名稱 */
    t_id VARCHAR(20) NOT NULL,               /* 教師ID */
    PRIMARY KEY(c_id) 
);
/* 教師表 */
CREATE TABLE Teacher(
    t_id VARCHAR(20),                        /* 教師ID */
    t_name VARCHAR(20) NOT NULL DEFAULT '',  /* 教師姓名*/
    PRIMARY KEY(t_id)
);
/* 成績(jī)表 */
CREATE TABLE `Score`(
    s_id VARCHAR(20),                        /* 學(xué)生ID */
    c_id VARCHAR(20),                        /* 課程ID */
    s_score INT(3),                          /* 成績(jī)值 */
    PRIMARY KEY(s_id,c_id)
);
/* 以下為測(cè)試數(shù)據(jù) */

truncate table teacher ;
truncate table student;
truncate table course;
truncate table score ;

insert into teacher values(1, '蒼老師');
insert into teacher values(2, '羅老師');
insert into teacher values(3, '武老師');

insert into student values(1, '李磊', '2001-01-01', '男');
insert into student values(2, '韓梅梅', '2001-01-01', '女');
insert into student values(3, '吉姆', '2001-01-01', '男');
insert into student values(4, '莉莉', '2001-01-01', '女');
insert into student values(5, '露西', '2001-01-01', '女');
insert into student values(6, '李明', '2001-01-01', '男');
insert into student values(7, '王大叔', '2001-01-01', '男');
insert into student values(8, '蘇珊', '2001-01-01', '女');

insert into course values(1, '生理衛(wèi)生', 1);
insert into course values(2, '法外狂徒', 2);
insert into course values(3, '維修電腦', 3);

insert into score values(4, 2, 55);
insert into score values(5, 1, 83);
insert into score values(3, 2, 38);
insert into score values(1, 2, 23);
insert into score values(8, 2, 75);
insert into score values(8, 1, 90);
insert into score values(3, 1, 42);
insert into score values(4, 3, 80);
insert into score values(6, 1, 60);
insert into score values(1, 3, 98);
insert into score values(2, 2, 100);
insert into score values(6, 3, 26);
insert into score values(4, 1, 91);
insert into score values(7, 1, 33);
insert into score values(5, 3, 50);
insert into score values(7, 3, 83);
insert into score values(7, 2, 64);
insert into score values(3, 3, 97);
insert into score values(5, 2, 33);
insert into score values(6, 2, 79);
insert into score values(2, 1, 99);
insert into score values(2, 3, 24);
insert into score values(8, 3, 78);

題目一

查詢兩門以上不及格課程的同學(xué)的學(xué)號(hào),姓名及其平均成績(jī)。

思路:

首先通過(guò)子查詢?cè)诔煽?jī)表(score)中過(guò)濾出有兩門以上不及格課程的同學(xué)的學(xué)號(hào)(s_id),之后通過(guò)學(xué)號(hào)(s_id)完成成績(jī)表(score)與子查詢和學(xué)生表(student)的關(guān)聯(lián),再根據(jù)每個(gè)學(xué)號(hào)(s_id)進(jìn)行分組展示。

SQL語(yǔ)句:

SELECT
    score.s_id AS '學(xué)號(hào)',
    student.s_name AS '姓名',
    AVG( score.s_score ) AS '平均成績(jī)' 
FROM
    score
    JOIN ( SELECT score.s_id FROM score WHERE score.s_score < 60 GROUP BY score.s_id HAVING COUNT( score.s_id ) >= 2 ) AS querySID ON score.s_id = querySID.s_id
    JOIN student ON score.s_id = student.s_id 
GROUP BY
    score.s_id 
ORDER BY
    score.s_id DESC;

結(jié)果:

截屏2023-10-06 20.25.03.png

題目二

統(tǒng)計(jì)每門課程的學(xué)生選修人數(shù)(超過(guò)2人的課程才統(tǒng)計(jì)),輸出課程號(hào)、課程名和選修人數(shù),查詢結(jié)果按人數(shù)降序排序,若人數(shù)相同,按課程號(hào)升序排序。

思路:

通過(guò)課程號(hào)(c_id)關(guān)聯(lián)成績(jī)表(score)與課程表(course),成績(jī)表(score)中同一課程號(hào)(c_id)出現(xiàn)的次數(shù)代表了蓋課程的選修人數(shù),通過(guò)HAVING過(guò)濾超過(guò)2人的課程并分組展示排序后的結(jié)果。

SQL語(yǔ)句:

SELECT
    course.c_id AS '課程號(hào)',
    course.c_name AS '課程名', 
    COUNT( score.c_id ) AS '選修人數(shù)' 
FROM
    course
    JOIN score ON course.c_id = score.c_id 
GROUP BY
    score.c_id 
HAVING
    COUNT( score.c_id ) > 2 
ORDER BY
    COUNT( score.c_id ) DESC,
    course.c_id ASC;
截屏2023-10-06 20.54.10.png

題目三

使用分段[100-85],[85-70],[70-60],[不及格]來(lái)統(tǒng)計(jì)各科成績(jī),分別統(tǒng)計(jì)各分?jǐn)?shù)段人數(shù)、課程號(hào)和課程名稱。

思路:

首先在成績(jī)表(score)中,通過(guò)課程號(hào)(c_id)分組查詢出該課程每個(gè)分?jǐn)?shù)段的成績(jī)數(shù)量(其中通過(guò)IF函數(shù),以成績(jī)區(qū)間作為判斷條件,并返回指定值0或1,通過(guò)SUM求和),并將該查詢結(jié)果與課程表(course)通過(guò)課程號(hào)(c_id)關(guān)聯(lián)。

SQL語(yǔ)句:

SELECT
    course.c_id AS '課程號(hào)',
    course.c_name AS '課程名稱',
    score_result.`100-85`,
    score_result.`85-70`,
    score_result.`70-60`,
    score_result.`不及格` 
FROM
    course
    JOIN (
    SELECT
        score.c_id,
        SUM(
        IF
        ( score.s_score BETWEEN 85 AND 100, 1, 0 )) AS '100-85',
        SUM(
        IF
        ( score.s_score BETWEEN 70 AND 85, 1, 0 )) AS '85-70',
        SUM(
        IF
        ( score.s_score BETWEEN 60 AND 70, 1, 0 )) AS '70-60',
        SUM(
        IF
        ( score.s_score < 60, 1, 0 )) AS '不及格' 
    FROM
        score 
    GROUP BY
        score.c_id 
    ) AS score_result ON course.c_id = score_result.c_id;
截屏2023-10-06 21.15.42.png

題目四:

查詢不同老師所教不同課程平均分從高到低顯示。

思路:

通過(guò)教師號(hào)(t_id)關(guān)聯(lián)教師表(teacher)與課程表(course),再通過(guò)課課程號(hào)(c_id)關(guān)聯(lián)成績(jī)表(score),之后根據(jù)不同老師所教不同課程分組展示平均成績(jī)并排序。

SQL語(yǔ)句:

SELECT
    teacher.t_name AS '教師',
    course.c_name AS '課程',
    AVG( score.s_score ) AS '平均值' 
FROM
    teacher
    JOIN course ON teacher.t_id = course.t_id
    JOIN score ON course.c_id = score.c_id 
GROUP BY
    teacher.t_name,
    course.c_name
Order BY
    AVG( score.s_score ) DESC;
截屏2023-10-06 21.43.56.png

題目五

查詢平均成績(jī)大于60的所有學(xué)生的學(xué)號(hào)、姓名和平均成績(jī)。

思路:

通過(guò)學(xué)號(hào)(s_id)關(guān)聯(lián)學(xué)生表(student)與成績(jī)表(score),并通過(guò)學(xué)號(hào)分組,通過(guò)HAVING過(guò)濾后,降序展示查詢的數(shù)據(jù)。

SQL語(yǔ)句:

SELECT
    student.s_id AS '學(xué)號(hào)',
    student.s_name AS '姓名',
    AVG( score.s_score ) AS '平均成績(jī)' 
FROM
    student
    JOIN score ON student.s_id = score.s_id 
GROUP BY
    student.s_id 
HAVING
    AVG( score.s_score ) > 60 
ORDER BY
    student.s_id DESC;
截屏2023-10-06 21.53.50.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評(píng)論 6 533
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,570評(píng)論 3 418
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事?!?“怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 176,505評(píng)論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,017評(píng)論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,786評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,219評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評(píng)論 3 441
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,438評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,971評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,796評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,995評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評(píng)論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,230評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,662評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 35,918評(píng)論 1 286
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,697評(píng)論 3 392
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,991評(píng)論 2 374

推薦閱讀更多精彩內(nèi)容