av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL高級(jí)查詢示例詳細(xì)介紹

瀏覽:147日期:2023-02-18 16:43:28
目錄
  • 1.左關(guān)聯(lián)
  • 2.右關(guān)聯(lián)
  • 3.子查詢
  • 4.聯(lián)合查詢
  • 5.分組查詢

1.左關(guān)聯(lián)

MySQL中的左關(guān)聯(lián)(Left Join)是一種基于共同列的連接操作,

它將左側(cè)表中的所有行與右側(cè)表中匹配的行結(jié)合在一起,

如果右側(cè)表中沒(méi)有匹配的行,則結(jié)果集中右側(cè)表中的所有列將顯示為NULL。

左側(cè)表是指在關(guān)鍵字LEFT JOIN中出現(xiàn)在關(guān)鍵字左側(cè)的表。

下面是一個(gè)使用MySQL的LEFT JOIN進(jìn)行連接操作的簡(jiǎn)單示例:

假設(shè)我們有兩個(gè)表,一個(gè)是學(xué)校表(school),包含學(xué)校的ID和名稱:

另一個(gè)是年級(jí)表(grade),包含年級(jí)的ID、學(xué)校ID和年級(jí)名稱:

編程目標(biāo):我們可以使用以下代碼來(lái)獲取所有學(xué)校及其年級(jí)信息:

SELECT school.school_name as "學(xué)校名稱", grade.grade_name as "年級(jí)名稱"FROM school LEFT JOIN grade ON school.id = grade.school_id;

運(yùn)行結(jié)果:

這將返回一個(gè)結(jié)果集,其中包含所有學(xué)校及其年級(jí)信息,

如果學(xué)校沒(méi)有年級(jí),則年級(jí)名稱將顯示為NULL。

左關(guān)聯(lián)操作確保我們可以獲取所有學(xué)校的信息,即使它們沒(méi)有年級(jí)數(shù)據(jù)。

2.右關(guān)聯(lián)

MySQL中的右關(guān)聯(lián)(Right Join)是一種基于共同列的連接操作,

它將右側(cè)表中的所有行與左側(cè)表中匹配的行結(jié)合在一起,

如果左側(cè)表中沒(méi)有匹配的行,則結(jié)果集中左側(cè)表中的所有列將顯示為NULL。

右側(cè)表是指在關(guān)鍵字RIGHT JOIN中出現(xiàn)在關(guān)鍵字右側(cè)的表。

右關(guān)聯(lián)與左關(guān)聯(lián)的區(qū)別在于哪個(gè)表是主表和次要表,

即右關(guān)聯(lián)的主表是右側(cè)表,次要表是左側(cè)表,

而左關(guān)聯(lián)的主表是左側(cè)表,次要表是右側(cè)表。

假設(shè)有兩個(gè)表,一個(gè)是學(xué)校表(school),包含學(xué)校的ID和名稱,

另一個(gè)是年級(jí)表(grade),包含年級(jí)的ID、學(xué)校ID和年級(jí)名稱。

編程目標(biāo):我們可以使用以下代碼來(lái)獲取所有學(xué)校及其年級(jí)信息:

select school.school_name as "學(xué)校名稱", grade.grade_name as "年級(jí)名稱"from school right join gradeon school.id = grade.school_id;

運(yùn)行結(jié)果:

這將返回一個(gè)結(jié)果集,其中包含所有年級(jí)及其所屬學(xué)校信息,

如果年級(jí)沒(méi)有對(duì)應(yīng)的學(xué)校信息,則學(xué)校名稱將顯示為NULL。

右關(guān)聯(lián)操作確保我們可以獲取所有年級(jí)的信息,即使它們沒(méi)有對(duì)應(yīng)的學(xué)校數(shù)據(jù)。

注意:右關(guān)聯(lián)和左關(guān)聯(lián)的區(qū)別在于哪個(gè)表是主表和次要表,即

右關(guān)聯(lián)的主表是年級(jí)表,次要表是學(xué)校表,

而左關(guān)聯(lián)的主表是學(xué)校表,次要表是年級(jí)表。

3.子查詢

MySQL中的子查詢(Subquery)是一種在SELECT語(yǔ)句中使用的嵌套查詢,用于從另一個(gè)查詢的結(jié)果集中檢索數(shù)據(jù)。子查詢可以用作WHERE或HAVING語(yǔ)句中的條件,或者用作SELECT語(yǔ)句中的列。子查詢可以返回單個(gè)值、一列值或一組行。

現(xiàn)在,我們假設(shè)有兩個(gè)表,

一個(gè)是學(xué)校表(school),包含學(xué)校的ID和名稱,

另一個(gè)是年級(jí)表(grade),包含年級(jí)的ID、學(xué)校ID和年級(jí)名稱。

編程目標(biāo):以下是一個(gè)使用子查詢的示例,用于檢索包含特定年級(jí)名稱的學(xué)校列表:

SELECT school_nameFROM schoolWHERE id IN (  SELECT school_id  FROM grade  WHERE grade_name = "三年級(jí)");

運(yùn)行結(jié)果:

這將返回一個(gè)結(jié)果集,其中包含所有包含名為"三年級(jí)"的年級(jí)的學(xué)校的名稱。

子查詢用于獲取包含特定年級(jí)的學(xué)校ID,

主查詢用于從學(xué)校表中檢索對(duì)應(yīng)的學(xué)校名稱。

另一個(gè)示例是使用子查詢和聚合函數(shù)檢索每個(gè)學(xué)校的年級(jí)數(shù)。

例如,以下查詢使用子查詢和COUNT函數(shù)從"年級(jí)表"中獲取每個(gè)學(xué)校的年級(jí)數(shù),

并將其與"學(xué)校表"中的學(xué)校名稱一起返回:

SELECT school.school_name,   (SELECT COUNT(*)    FROM grade    WHERE grade.school_id = school.school_id) as grade_countFROM school;

運(yùn)行結(jié)果:

這將返回一個(gè)結(jié)果集,

其中包含每個(gè)學(xué)校的名稱和年級(jí)數(shù)。

子查詢?cè)趦?nèi)部查詢中使用COUNT函數(shù)從年級(jí)表中檢索與學(xué)校ID匹配的行數(shù)。

主查詢用于從學(xué)校表中檢索學(xué)校名稱,并將子查詢返回的年級(jí)數(shù)作為附加列一起返回。

4.聯(lián)合查詢

MySQL中的聯(lián)合查詢(UNION)用于將多個(gè)SELECT語(yǔ)句的結(jié)果組合成一個(gè)結(jié)果集。

每個(gè)SELECT語(yǔ)句必須具有相同的列數(shù)和相似的數(shù)據(jù)類型,

而聯(lián)合查詢將自動(dòng)對(duì)結(jié)果進(jìn)行排序和去重。

可以使用UNION ALL來(lái)保留重復(fù)的行。

假設(shè)有兩個(gè)表,一個(gè)是學(xué)校表(school),包含學(xué)校的ID和名稱,

另一個(gè)是年級(jí)表(grade),包含年級(jí)的ID、學(xué)校ID和年級(jí)名稱。

以下是一個(gè)使用UNION查詢的示例,用于檢索所有學(xué)校的名稱和所有年級(jí)的名稱,這些學(xué)校和年級(jí)存儲(chǔ)在不同的表中:

SELECT school_name FROM schoolUNIONSELECT grade_name FROM grade;

運(yùn)行結(jié)果:

這將返回一個(gè)結(jié)果集,其中包含所有學(xué)校的名稱和所有年級(jí)的名稱。UNION操作將自動(dòng)對(duì)結(jié)果集進(jìn)行去重,并按名稱排序。

如果要將學(xué)校和年級(jí)的名稱分開(kāi),可以使用別名將兩個(gè)SELECT語(yǔ)句的結(jié)果列重命名:

SELECT school_name, NULL AS grade_name FROM schoolUNIONSELECT NULL AS school_name, grade_name FROM grade;

運(yùn)行結(jié)果:

這將返回一個(gè)結(jié)果集,其中包含學(xué)校名稱和年級(jí)名稱的兩個(gè)列。

注意,由于兩個(gè)表中的名稱列位于不同的位置,因此必須使用NULL作為占位符,以確保SELECT語(yǔ)句中的列數(shù)相同。

5.分組查詢

MySQL中的分組查詢(GROUP BY)用于將查詢結(jié)果按照一個(gè)或多個(gè)列進(jìn)行分組,并對(duì)每個(gè)分組應(yīng)用聚合函數(shù)。GROUP BY子句必須跟在SELECT語(yǔ)句之后,并指定要分組的列名稱。

假設(shè)有兩個(gè)表,一個(gè)是學(xué)校表(school),包含學(xué)校的ID和名稱,

另一個(gè)是年級(jí)表(grade),包含年級(jí)的ID、學(xué)校ID和年級(jí)名稱。

以下是一個(gè)使用分組查詢的示例,用于檢索每個(gè)學(xué)校的年級(jí)數(shù):

SELECT school_name, COUNT(g.id) AS grade_countFROMschool s LEFT JOIN grade g ON s.id = g.school_idGROUP BY s.id;

運(yùn)行結(jié)果:

這將返回一個(gè)結(jié)果集,其中包含每個(gè)學(xué)校的名稱和年級(jí)數(shù)。

在這個(gè)查詢中,使用LEFT JOIN將兩個(gè)表連接起來(lái),并使用GROUP BY子句按學(xué)校ID分組。

注意,在GROUP BY子句中使用了學(xué)校表的ID列,而不是名稱列。

使用COUNT函數(shù)計(jì)算每個(gè)學(xué)校的年級(jí)數(shù)。

到此這篇關(guān)于MySQL高級(jí)查詢示例詳細(xì)介紹的文章就介紹到這了,更多相關(guān)MySQL高級(jí)查詢內(nèi)容請(qǐng)搜索以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持!

標(biāo)簽: MySQL
主站蜘蛛池模板: 国产精品久久一区二区三区 | 亚洲视频精品 | 韩国理论在线 | 538精品视频 | 精品久久91 | 日韩不卡一区 | 五月婷婷丁香综合 | 蜜桃视频成人 | 日韩成人中文字幕 | 日韩一级免费视频 | 精品日韩一区二区三区 | 一区二区三区影视 | 一区二区国产精品 | 久久国产影院 | 福利视频二区 | 在线播放亚洲 | 国产一区二区三区免费播放 | 精品国产乱码久久久久久蜜臀网站 | 好色网站 | 色综合视频 | 色综合天天综合网国产成人网 | 国产女人高潮毛片 | 久久久不卡 | 日韩免费在线 | 天天躁日日躁狠狠很躁 | 四虎色播 | 精品少妇一区二区三区免费观 | 国产福利在线播放 | 一级做a爱片性色毛片 | 天天夜夜操 | 欧美精品三区 | 美女网站视频在线观看 | 亚洲一区二区精品视频 | 日韩欧美黄色 | 中文字幕亚洲精品 | 成人午夜视频在线观看 | 超碰在线国产 | 成人黄色av | 香蕉伊人网 | 亚洲人成在线播放 | 丨国产丨调教丨91丨 |