溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL多表查詢的代碼怎么寫

發(fā)布時間:2023-04-18 15:50:26 來源:億速云 閱讀:78 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“MySQL多表查詢的代碼怎么寫”的相關(guān)知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“MySQL多表查詢的代碼怎么寫”文章能幫助大家解決問題。

    多表查詢

    內(nèi)連接查詢

    • 語法

    -- 隱式內(nèi)連接
    SELECT 字段列表 FROM 表1,表2… WHERE 條件;
    
    -- 顯示內(nèi)連接
    SELECT 字段列表 FROM 表1 [INNER] JOIN 表2 ON 條件;

    內(nèi)連接相當(dāng)于查詢 A B 交集數(shù)據(jù)

    MySQL多表查詢的代碼怎么寫

    • 案例

      • 隱式內(nèi)連接

    SELECT
    	*
    FROM
    	emp,
    	dept
    WHERE
    	emp.dep_id = dept.did;

    執(zhí)行上述語句結(jié)果如下:

    MySQL多表查詢的代碼怎么寫

    • 查詢 emp的 name, gender,dept表的dname

    SELECT
    	emp. NAME,
    	emp.gender,
    	dept.dname
    FROM
    	emp,
    	dept
    WHERE
    	emp.dep_id = dept.did;

    執(zhí)行語句結(jié)果如下:

    MySQL多表查詢的代碼怎么寫

    上面語句中使用表名指定字段所屬有點麻煩,sql也支持給表指別名,上述語句可以改進為

    SELECT
    	t1. NAME,
    	t1.gender,
    	t2.dname
    FROM
    	emp t1,
    	dept t2
    WHERE
    	t1.dep_id = t2.did;
    • 顯式內(nèi)連接

    select * from emp inner join dept on emp.dep_id = dept.did;
    -- 上面語句中的inner可以省略,可以書寫為如下語句
    select * from emp  join dept on emp.dep_id = dept.did;

    執(zhí)行結(jié)果如下:

    MySQL多表查詢的代碼怎么寫

    外連接查詢

    • 語法

    -- 左外連接
    SELECT 字段列表 FROM 表1 LEFT [OUTER] JOIN 表2 ON 條件;
    
    -- 右外連接
    SELECT 字段列表 FROM 表1 RIGHT [OUTER] JOIN 表2 ON 條件;

    左外連接:相當(dāng)于查詢A表所有數(shù)據(jù)和交集部分?jǐn)?shù)據(jù)

    右外連接:相當(dāng)于查詢B表所有數(shù)據(jù)和交集部分?jǐn)?shù)據(jù)

    MySQL多表查詢的代碼怎么寫

    • 案例

      • 查詢emp表所有數(shù)據(jù)和對應(yīng)的部門信息(左外連接)

    select * from emp left join dept on emp.dep_id = dept.did;

    執(zhí)行語句結(jié)果如下:

    MySQL多表查詢的代碼怎么寫

    結(jié)果顯示查詢到了左表(emp)中所有的數(shù)據(jù)及兩張表能關(guān)聯(lián)的數(shù)據(jù)。

    • 查詢dept表所有數(shù)據(jù)和對應(yīng)的員工信息(右外連接)

    select * from emp right join dept on emp.dep_id = dept.did;

    執(zhí)行語句結(jié)果如下:

    MySQL多表查詢的代碼怎么寫

    結(jié)果顯示查詢到了右表(dept)中所有的數(shù)據(jù)及兩張表能關(guān)聯(lián)的數(shù)據(jù)。

    要查詢出部門表中所有的數(shù)據(jù),也可以通過左外連接實現(xiàn),只需要將兩個表的位置進行互換:

    select * from dept left join emp on emp.dep_id = dept.did;

    子查詢

    • 概念

      查詢中嵌套查詢,稱嵌套查詢?yōu)樽硬樵儭?/p>

      什么是查詢中嵌套查詢呢?我們通過一個例子來看:

      需求:查詢工資高于豬八戒的員工信息。

      來實現(xiàn)這個需求,我們就可以通過二步實現(xiàn),第一步:先查詢出來 豬八戒的工資

    select salary from emp where name = '豬八戒'

    第一步:查詢工資高于豬八戒的員工信息

    select * from emp where salary > 3600;

    第二步中的3600可以通過第一步的sql查詢出來,所以將3600用第一步的sql語句進行替換

    select * from emp where salary > (select salary from emp where name = '豬八戒');

    這就是查詢語句中嵌套查詢語句。

    • 子查詢根據(jù)查詢結(jié)果不同,作用不同

      • 子查詢語句結(jié)果是單行單列,子查詢語句作為條件值,使用 = != > < 等進行條件判斷

      • 子查詢語句結(jié)果是多行單列,子查詢語句作為條件值,使用 in 等關(guān)鍵字進行條件判斷

      • 子查詢語句結(jié)果是多行多列,子查詢語句作為虛擬表

    • 案例

      • 查詢 &lsquo;財務(wù)部&rsquo; 和 &lsquo;市場部&rsquo; 所有的員工信息

    -- 查詢 '財務(wù)部' 或者 '市場部' 所有的員工的部門did
    select did from dept where dname = '財務(wù)部' or dname = '市場部';
    
    select * from emp where dep_id in (select did from dept where dname = '財務(wù)部' or dname = '市場部');
    • 查詢?nèi)肼毴掌谑?&lsquo;2011-11-11&rsquo; 之后的員工信息和部門信息

    -- 查詢?nèi)肼毴掌谑?nbsp;'2011-11-11' 之后的員工信息
    select * from emp where join_date > '2011-11-11' ;
    -- 將上面語句的結(jié)果作為虛擬表和dept表進行內(nèi)連接查詢
    select * from (select * from emp where join_date > '2011-11-11' ) t1, dept where t1.dep_id = dept.did;

    關(guān)于“MySQL多表查詢的代碼怎么寫”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI