最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL高級查詢示例詳細介紹

 更新時間:2023年02月16日 08:58:55   作者:代碼寫注釋  
這篇文章主要介紹了MySQL高級查詢示例,在面試過程中經(jīng)常會遇到sq查詢問題,今天小編通過本文給大家介紹下MySQL高級查詢語法分析,感興趣的朋友跟隨小編一起看看吧

1.左關聯(lián)

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

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

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

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

下面是一個使用MySQL的LEFT JOIN進行連接操作的簡單示例:

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

另一個是年級表(grade),包含年級的ID、學校ID和年級名稱:

編程目標:我們可以使用以下代碼來獲取所有學校及其年級信息:

SELECT school.school_name as "學校名稱", grade.grade_name as "年級名稱"
FROM 
school LEFT JOIN grade ON school.id = grade.school_id;

運行結果:

這將返回一個結果集,其中包含所有學校及其年級信息,

如果學校沒有年級,則年級名稱將顯示為NULL。

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

2.右關聯(lián)

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

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

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

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

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

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

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

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

另一個是年級表(grade),包含年級的ID、學校ID和年級名稱。

編程目標:我們可以使用以下代碼來獲取所有學校及其年級信息:

select school.school_name as "學校名稱", grade.grade_name as "年級名稱"
from 
school right join grade
on school.id = grade.school_id;

運行結果:

這將返回一個結果集,其中包含所有年級及其所屬學校信息,

如果年級沒有對應的學校信息,則學校名稱將顯示為NULL。

右關聯(lián)操作確保我們可以獲取所有年級的信息,即使它們沒有對應的學校數(shù)據(jù)。

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

右關聯(lián)的主表是年級表,次要表是學校表,

而左關聯(lián)的主表是學校表,次要表是年級表。

3.子查詢

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

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

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

另一個是年級表(grade),包含年級的ID、學校ID和年級名稱。

編程目標:以下是一個使用子查詢的示例,用于檢索包含特定年級名稱的學校列表:

SELECT school_name
FROM school
WHERE id IN (
  SELECT school_id
  FROM grade
  WHERE grade_name = '三年級'
);

運行結果:

這將返回一個結果集,其中包含所有包含名為"三年級"的年級的學校的名稱。

子查詢用于獲取包含特定年級的學校ID,

主查詢用于從學校表中檢索對應的學校名稱。

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

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

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

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

運行結果:

這將返回一個結果集,

其中包含每個學校的名稱和年級數(shù)。

子查詢在內(nèi)部查詢中使用COUNT函數(shù)從年級表中檢索與學校ID匹配的行數(shù)。

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

4.聯(lián)合查詢

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

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

而聯(lián)合查詢將自動對結果進行排序和去重。

可以使用UNION ALL來保留重復的行。

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

另一個是年級表(grade),包含年級的ID、學校ID和年級名稱。

以下是一個使用UNION查詢的示例,用于檢索所有學校的名稱和所有年級的名稱,這些學校和年級存儲在不同的表中:

SELECT school_name FROM school
UNION
SELECT grade_name FROM grade;

運行結果:

這將返回一個結果集,其中包含所有學校的名稱和所有年級的名稱。UNION操作將自動對結果集進行去重,并按名稱排序。

如果要將學校和年級的名稱分開,可以使用別名將兩個SELECT語句的結果列重命名:

SELECT school_name, NULL AS grade_name FROM school
UNION
SELECT NULL AS school_name, grade_name FROM grade;

運行結果:

這將返回一個結果集,其中包含學校名稱和年級名稱的兩個列。

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

5.分組查詢

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

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

另一個是年級表(grade),包含年級的ID、學校ID和年級名稱。

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

SELECT school_name, COUNT(g.id) AS grade_count
FROM
school s LEFT JOIN grade g ON s.id = g.school_id
GROUP BY s.id;

運行結果:

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

在這個查詢中,使用LEFT JOIN將兩個表連接起來,并使用GROUP BY子句按學校ID分組。

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

使用COUNT函數(shù)計算每個學校的年級數(shù)。

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

相關文章

最新評論

临武县| 汾阳市| 瑞金市| 修武县| 鹰潭市| 巴中市| 安乡县| 哈尔滨市| 天津市| 永丰县| 阳曲县| 本溪市| 湾仔区| 泾源县| 蛟河市| 乌苏市| 福鼎市| 乐昌市| 特克斯县| 丰县| 大宁县| 始兴县| 灵武市| 宜昌市| 通渭县| 静安区| 双峰县| 普兰店市| 长宁县| 当涂县| 河北区| 鞍山市| 门头沟区| 涡阳县| 新化县| 寿光市| 汉寿县| 珲春市| 莒南县| 家居| 湖口县|