MYSQL的JOIN、GROUP BY实胸、HAVING荣德、DISTINCT的用法小記

首先闷煤,我們先來(lái)構(gòu)造數(shù)據(jù):

# 創(chuàng)建數(shù)據(jù)庫(kù)
CREATE DATABASE Test;
USE TEMP;

# 創(chuàng)建表
CREATE TABLE student(id int (11) primary key auto_increment,name char(255),sex char(255),age int(11))charset utf8;
CREATE TABLE student_score(id int (11) primary key auto_increment,class char(255),score char(255),student_id int(11))charset utf8;

# 插入學(xué)生信息
INSERT INTO student(name,sex,age) VALUES('學(xué)生1','男','12');
INSERT INTO student(name,sex,age) VALUES('學(xué)生2','女','13');
INSERT INTO student(name,sex,age) VALUES('學(xué)生3','男','15');
INSERT INTO student(name,sex,age) VALUES('學(xué)生4','女','14');
INSERT INTO student(name,sex,age) VALUES('學(xué)生5','男','11');
INSERT INTO student(name,sex,age) VALUES('學(xué)生6','女','12');
INSERT INTO student(name,sex,age) VALUES('學(xué)生7','男','11');
INSERT INTO student(name,sex,age) VALUES('學(xué)生8','女','15');
INSERT INTO student(name,sex,age) VALUES('學(xué)生9','男','16');
INSERT INTO student(name,sex,age) VALUES('學(xué)生10','女','12');

# 插入學(xué)科及分?jǐn)?shù)信息
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','100',1);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','100',1);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','100',1);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','90',2);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','70',2);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','60',2);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','89',3);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','65',3);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','32',3);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','100',4);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','89',4);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','98',4);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','50',5);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','34',5);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','56',5);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','100',6);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','89',6);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','98',6);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','80',7);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','89',7);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','78',7);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','90',8);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','89',8);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','78',8);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','100',9);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','99',9);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','98',9);
INSERT INTO student_score(class,score,student_id) VALUES('語(yǔ)文','0',100);
INSERT INTO student_score(class,score,student_id) VALUES('數(shù)學(xué)','0',100);
INSERT INTO student_score(class,score,student_id) VALUES('英語(yǔ)','0',100);

構(gòu)造完數(shù)據(jù),結(jié)果如下:

student表
student表
student_score表
student_score表

可以看到兩個(gè)表里各有和對(duì)方匹配不上的數(shù)據(jù)涮瞻,student表中的學(xué)生10和student_score表中的student_id 100鲤拿,這些是為了之后講JOIN時(shí)用的。

下面我們就來(lái)看具體的實(shí)驗(yàn)事件吧:

1. 獲取各科目分?jǐn)?shù)平均值(GROUP BY使用)

# 獲取各科目分?jǐn)?shù)平均值
SELECT class AS '課程', AVG(score) AS '平均數(shù)' FROM student_score GROUP BY class;

結(jié)果:


獲取各科目分?jǐn)?shù)平均值

2. 獲取語(yǔ)文分?jǐn)?shù)大于60分的學(xué)生分?jǐn)?shù)的數(shù)量分布(GROUP BY + HAVING使用)

# 獲取語(yǔ)文分?jǐn)?shù)大于60分的學(xué)生分?jǐn)?shù)的數(shù)量分布
SELECT
    class AS '課程',
    score AS '分?jǐn)?shù)',
    count(*) AS '數(shù)量'
FROM
    student_score
WHERE
    class = '語(yǔ)文'
GROUP BY
    score
HAVING
    score >= 60;

結(jié)果:


獲取語(yǔ)文分?jǐn)?shù)大于60分的學(xué)生分?jǐn)?shù)的數(shù)量分布

3. 獲取兩個(gè)表中共有學(xué)生的全部信息(INNER JOIN使用)

# 獲取兩個(gè)表中共有學(xué)生的全部信息(INNER JOIN使用)
SELECT * FROM student A INNER JOIN student_score B ON A.id = B.student_id;

結(jié)果:


獲取兩個(gè)表中共有學(xué)生的全部信息(INNER JOIN使用)

4. 獲取存在于student表中學(xué)生的全部信息(LEFT JOIN使用)

# 獲取存在于student表中學(xué)生的全部信息(LEFT JOIN使用)
SELECT * FROM student A LEFT JOIN student_score B ON A.id = B.student_id;

結(jié)果:


獲取存在于student表中學(xué)生的全部信息(LEFT JOIN使用)

5. 獲取只存在于student表中學(xué)生的全部信息(LEFT JOIN使用)

# 獲取只存在于student表中學(xué)生的全部信息(LEFT JOIN使用)
SELECT * FROM student A LEFT JOIN student_score B ON A.id = B.student_id WHERE B.student_id IS NULL;

結(jié)果:


獲取只存在于student表中學(xué)生的全部信息(LEFT JOIN使用)

6. 獲取存在于student_score表中學(xué)生的全部信息(RIGHT JOIN使用)

# 獲取存在于student_score表中學(xué)生的全部信息(RIGHT JOIN使用)
SELECT * FROM student A RIGHT JOIN student_score B ON A.id = B.student_id;

結(jié)果:


獲取存在于student_score表中學(xué)生的全部信息(RIGHT JOIN使用)

7. 獲取只存在于student_score表中學(xué)生的全部信息(RIGHT JOIN使用)

# 獲取只存在于student_score表中學(xué)生的全部信息(RIGHT JOIN使用)
SELECT * FROM student A RIGHT JOIN student_score B ON A.id = B.student_id WHERE A.id IS NULL;

結(jié)果:


獲取只存在于student_score表中學(xué)生的全部信息(RIGHT JOIN使用)

8. 獲取兩個(gè)表中出現(xiàn)的所有學(xué)生的全部信息(FULL JOIN使用署咽,Mysql中沒(méi)有FULL JOIN近顷,只能用union來(lái)實(shí)現(xiàn))

# 獲取兩個(gè)表中出現(xiàn)的所有學(xué)生的全部信息(FULL JOIN使用,Mysql中沒(méi)有FULL JOIN宁否,只能用union來(lái)實(shí)現(xiàn))
SELECT
    *
FROM
    student A
LEFT JOIN student_score B ON A.id = B.student_id
UNION
    SELECT
        *
    FROM
        student A
    RIGHT JOIN student_score B ON A.id = B.student_id;

結(jié)果:


獲取兩個(gè)表中出現(xiàn)的所有學(xué)生的全部信息(FULL JOIN使用窒升,Mysql中沒(méi)有FULL JOIN,只能用union來(lái)實(shí)現(xiàn))

9. 獲取數(shù)學(xué)分?jǐn)?shù)為第3~5名的學(xué)生名單(DISTINCT慕匠、嵌套SQL使用)

# 獲取數(shù)學(xué)分?jǐn)?shù)為第3~5名的學(xué)生名單
SELECT
    A.student_id,
    B. NAME,
    A.class,
    A.score
FROM
    student_score A
RIGHT JOIN student B ON A.student_id = B.id
WHERE
    score IN (
        SELECT
            score
        FROM
            (
                SELECT DISTINCT
                    score
                FROM
                    student_score
                WHERE
                    class = '數(shù)學(xué)'
                ORDER BY
                    score DESC
                LIMIT 2,
                3
            ) AS T
        WHERE
            class = '數(shù)學(xué)'
    )
ORDER BY
    A.score DESC;

結(jié)果:


獲取數(shù)學(xué)分?jǐn)?shù)為第3~5名的學(xué)生名單
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末饱须,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子台谊,更是在濱河造成了極大的恐慌蓉媳,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,080評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件锅铅,死亡現(xiàn)場(chǎng)離奇詭異酪呻,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)盐须,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,422評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門玩荠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人贼邓,你說(shuō)我怎么就攤上這事阶冈。” “怎么了塑径?”我有些...
    開(kāi)封第一講書人閱讀 157,630評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵女坑,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我晓勇,道長(zhǎng)堂飞,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 56,554評(píng)論 1 284
  • 正文 為了忘掉前任绑咱,我火速辦了婚禮绰筛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘描融。我一直安慰自己铝噩,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,662評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布窿克。 她就那樣靜靜地躺著骏庸,像睡著了一般毛甲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上具被,一...
    開(kāi)封第一講書人閱讀 49,856評(píng)論 1 290
  • 那天玻募,我揣著相機(jī)與錄音,去河邊找鬼一姿。 笑死七咧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叮叹。 我是一名探鬼主播艾栋,決...
    沈念sama閱讀 39,014評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼蛉顽!你這毒婦竟也來(lái)了蝗砾?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,752評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤携冤,失蹤者是張志新(化名)和其女友劉穎悼粮,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體噪叙,經(jīng)...
    沈念sama閱讀 44,212評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矮锈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,541評(píng)論 2 327
  • 正文 我和宋清朗相戀三年霉翔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了睁蕾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,687評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡债朵,死狀恐怖子眶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情序芦,我是刑警寧澤臭杰,帶...
    沈念sama閱讀 34,347評(píng)論 4 331
  • 正文 年R本政府宣布,位于F島的核電站谚中,受9級(jí)特大地震影響渴杆,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宪塔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,973評(píng)論 3 315
  • 文/蒙蒙 一磁奖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧某筐,春花似錦比搭、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,777評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春载佳,著一層夾襖步出監(jiān)牢的瞬間颤陶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,006評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工穴亏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留仪糖,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,406評(píng)論 2 360
  • 正文 我出身青樓迫肖,卻偏偏與公主長(zhǎng)得像锅劝,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蟆湖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,576評(píng)論 2 349

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

  • 50個(gè)常用的sql語(yǔ)句Student(S#,Sname,Sage,Ssex) 學(xué)生表Course(C#,Cname...
    哈哈海閱讀 1,227評(píng)論 0 7
  • Student(S#,Sname,Sage,Ssex) 學(xué)生表 Course(C#,Cname,T#) 課程表 S...
    忘了呼吸的那只貓閱讀 2,853評(píng)論 0 8
  • 說(shuō)明:以下五十個(gè)語(yǔ)句都按照測(cè)試數(shù)據(jù)進(jìn)行過(guò)測(cè)試故爵,最好每次只單獨(dú)運(yùn)行一個(gè)語(yǔ)句。 問(wèn)題及描述: --1.學(xué)生表 Stud...
    lijun_m閱讀 1,294評(píng)論 0 1
  • 筆記: 一隅津、聚合函數(shù):計(jì)數(shù) 最大值 最小值 平均數(shù) 求和 1.計(jì)數(shù) COUNT() 忽略NULL值 方式1:COU...
    鳳之鳩閱讀 5,197評(píng)論 0 1
  • 老婆在公司抽獎(jiǎng),中了兩張電影票充蓝。 10:30專場(chǎng)隧枫,《馬戲之王》。 之前沒(méi)有看過(guò)簡(jiǎn)介谓苟,也無(wú)人劇透官脓,心無(wú)旁騖地盯著屏幕...
    莞湘往來(lái)閱讀 239評(píng)論 0 1