亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL復合查詢深度解析

 更新時間:2025年08月26日 14:39:39   作者:Ragef  
這篇文章給大家介紹MySQL復合查詢深度解析,文章介紹了多表連接與子查詢的用法,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

多表查詢

內連接

內連接是最常用的多表連接方式,它只返回兩個表中滿足連接條件的行。

語法: 

SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.列 = 表2.列;

例如:

SELECT e.name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.dept_id;

多表內連接

SELECT e.name, d.dept_name, p.project_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.dept_id
INNER JOIN projects p ON e.project_id = p.id;

左外連接

左外連接會返回左表中的所有記錄,即使右表中沒有匹配項,也會保留左表的行,右表沒有對應數據的部分用 NULL 填充。

語法:

SELECT 列名
FROM 左表
LEFT [OUTER] JOIN 右表
ON 左表.列 = 右表.列;

左表寫在FROM子句中,右表寫在JOIN子句中。

例如:

SELECT e.name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.dept_id;

右外連接

右外連接和左外連接相反,以右表為主,把它所有行都留下,左表能匹配就匹配,不能匹配補 NULL。

語法:

SELECT 列列表
FROM 左表
RIGHT [OUTER] JOIN 右表
ON 連接條件;

例如:

SELECT s.id, st.name, s.score
FROM students st
RIGHT JOIN scores s ON st.id = s.student_id;

自連接

自連接是指在同一張表連接查詢。

語法:

SELECT 列
FROM 表名 AS A
JOIN 表名 AS B ON A.某列 = B.某列
[WHERE / GROUP BY / ...];

必須給表起兩個不同的別名(A、B)

SELECT  e.name   AS employee,
        m.name   AS manager
FROM    employees AS e
LEFT JOIN employees AS m
       ON e.manager_id = m.emp_id;

子查詢

子查詢是指嵌入在其他sql語句中的select語句,也叫嵌套查詢。

單行子查詢

返回一行記錄的子查詢。

SELECT ...
FROM 表1
WHERE 列 運算符 (SELECT 單列
                 FROM 表2
                 WHERE 條件
                 LIMIT 1);   -- 確保只返回一行

例如:

SELECT name, salary
FROM   employees
WHERE  salary > (SELECT AVG(salary) FROM employees);

多行子查詢

返回多行記錄的子查詢。

多行子查詢的4大運算符

IN:匹配子查詢結果中的任意一個值

SELECT stu_name
FROM   students
WHERE  stu_id IN (SELECT stu_id FROM enroll WHERE course = '數學');

ANY:與子查詢結果中的任意一個值比較即可

SELECT name
FROM   employees
WHERE  salary > ANY (SELECT salary FROM employees WHERE dept_id = 10);

ALL:與所有子查詢結果比較

SELECT name
FROM   employees
WHERE  salary > ALL (SELECT salary FROM employees WHERE dept_id = 10);

EXISTS:子查詢至少返回一行則為真

SELECT name
FROM   students s
WHERE  EXISTS (SELECT 1
               FROM   scores sc
               WHERE  sc.stu_id = s.stu_id
               AND    sc.score > 90);

多列子查詢

單行子查詢是指子查詢只返回單列,單行數據;

多行子查詢是指返回單列多行數據,都是針對單列而言的,而多列子查詢則是指查詢返回多個列數據的子查詢語句。

SELECT name
FROM   employees
WHERE  (dept_id, job_title) IN (
        SELECT dept_id, job_title
        FROM   employees
        WHERE  name = '張三'
);

from子句中使用子查詢

SELECT d.dept_name, t.avg_sal
FROM (
        SELECT dept_id, AVG(salary) AS avg_sal
        FROM   emp
        GROUP  BY dept_id
     ) AS t
JOIN dept d ON d.dept_id = t.dept_id
WHERE t.avg_sal > 8000;

合并查詢

在實際應用中,為了合并多個select的執(zhí)行結果,可以使用集合操作符 union,union all

union(去重合并)

SELECT name FROM employees
UNION
SELECT name FROM contractors;

union all(不去重、速度快)

SELECT name FROM employees
UNION ALL
SELECT name FROM contractors;

到此這篇關于MySQL復合查詢深度解析的文章就介紹到這了,更多相關mysql復合查詢內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • MySQL內存及虛擬內存優(yōu)化設置參數

    MySQL內存及虛擬內存優(yōu)化設置參數

    這篇文章主要介紹了MySQL內存及虛擬內存優(yōu)化設置參數,需要的朋友可以參考下
    2016-05-05
  • Windows服務器下MySql數據庫單向主從備份詳細實現步驟分享

    Windows服務器下MySql數據庫單向主從備份詳細實現步驟分享

    將主服務器中的MySql數據庫同步到從服務器中,使得對主服務器的操作可以即時更新到從服務器,避免主服務器因環(huán)境或者網絡異常一時無法使用,達到備份效果,這篇文章整理的確實挺詳細的
    2012-05-05
  • Windows中MySQL root用戶忘記密碼解決方案

    Windows中MySQL root用戶忘記密碼解決方案

    在實際應用中,經常會出現忘記mysql管理員用戶root的密碼的情況出現,那么我們如何來設置一個新密碼從而登錄數據庫呢,下面我們來探討下
    2014-07-07
  • MySQL刪除外鍵問題小結

    MySQL刪除外鍵問題小結

    mysql刪除外鍵抱錯Error on rename of ./ruler/test2child to ./ruler/#sql2-298-92 (errno: 152),怎么回事,有好的方法可以解決嗎?下面看下腳本之家小編給大家?guī)淼慕鉀Q思路
    2016-08-08
  • PHP中ORDER BY子句的詳細用法教程

    PHP中ORDER BY子句的詳細用法教程

    這篇文章主要介紹了PHP中ORDER BY子句的詳細用法教程,文中提供了PHP腳本下的操作示例,是MySQL入門學習中的基礎知識,需要的朋友可以參考下
    2015-05-05
  • MySQL面試題講解之如何設置Hash索引

    MySQL面試題講解之如何設置Hash索引

    今天研究下mysql中索引,首先我應該知道的是,mysql中不同存儲引擎的索引工作方式不一樣,并且不是所有的存儲引擎都支持所有類型的索引。即使多個存儲引擎支持同一種類型的索引,那么他們的實現原理也是不同的,本文將講解Hash索引該如何設置
    2021-10-10
  • Mysql 實現向上遞歸查找父節(jié)點并返回樹結構的示例代碼

    Mysql 實現向上遞歸查找父節(jié)點并返回樹結構的示例代碼

    通過mysql 8.0以下版本實現,一個人多角色id,一個角色對應某個節(jié)點menu_id,根節(jié)點的父節(jié)點存儲為NULL, 向上遞歸查找父節(jié)點并返回樹結構,今天通過本文給大家介紹Mysql遞歸查找父節(jié)點并返回樹結構,感興趣的朋友一起看看吧
    2022-09-09
  • 解決MySQL報錯1267 - Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPL問題

    解決MySQL報錯1267 - Illegal mix of coll

    這篇文章主要給大家介紹了解決MySQL報錯1267 - Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPL的問題,文中有詳細的解決方案,需要的朋友可以參考下
    2023-09-09
  • mysql中find_in_set()函數的使用詳解

    mysql中find_in_set()函數的使用詳解

    這篇文章主要介紹了mysql中find_in_set()函數的使用,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-05-05
  • MySQL 存儲引擎  MyISAM詳解(最新推薦)

    MySQL 存儲引擎  MyISAM詳解(最新推薦)

    使用 MyISAM 存儲引擎的表占用空間很小,但是由于使用表級鎖定,所以限制了讀/寫操作的性能,通常用于中小型的Web應用和數據倉庫配置中的只讀或主要是讀的場景,這篇文章主要介紹了MySQL 存儲引擎  MyISAM詳解,需要的朋友可以參考下
    2025-05-05

最新評論