欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql中的自連接問題

 更新時間:2023年05月31日 15:17:57   作者:華妃  
這篇文章主要介紹了Mysql中的自連接問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Mysql自連接

1、在日常對數(shù)據(jù)庫的操作中,我們很熟悉使用INNER JOIN,LEFT JOIN 把一個表和另外一個表連接起來,潛意識里會認(rèn)為只有兩個表才可以連接,有一個特殊情況,需要將表自身連接,這被稱為自連接。

2、想將表中行與同一表中的其他行組合時,可以使用自連接。要執(zhí)行自聯(lián)接操作必須使用表別名來幫助MySQL在單個查詢中區(qū)分左表與同一張表的右表。

DEMO

1、比如組織機構(gòu)的樹形的,數(shù)據(jù)會有上下級區(qū)分,當(dāng)需要展示組織機構(gòu)的父級機構(gòu)名稱時,我們可以使用自連接。

2、表結(jié)構(gòu)如圖所示:

3、sql

select a.id, a.party_org_name, a.parent_id,b.party_org_name as parent_name FROM sinosoft_party_org a left join sinosoft_party_org b on a.parent_id=b.id

MySQL自連接和內(nèi)連接和外連接_左外連接+右外連接

自連接:將一張表看作兩張表

練習(xí):查詢員工id,員工姓名及其管理者的id和姓名

select emp.employee_id,
?? ? ? emp.last_name,
?? ? ? mgr.employee_id,
?? ? ? mgr.last_name
from employees emp,employees mgr
where emp.manager_id = mgr.employee_id;

內(nèi)連接

只是把左表和右表滿足連接條件的數(shù)據(jù)查出來,其它的數(shù)據(jù)都沒有要?。?!

select employee_id,department_name
from employees e join departments d
on e.`department_id`=d.`department_id`

外連接

JOIN … ON

左外連接 left join…on

左外連接,左表和右表滿足條件的數(shù)據(jù),和左表中不滿足條件的數(shù)據(jù)?。?!

練習(xí):查詢所有員工的last_name,department_name信息

select last_name,department_name?
from employees e left join departments d
on e.`department_id`=d.`department_id`;

右外連接 right join … on

右外連接,右表和左表滿足條件的數(shù)據(jù),和右表中不滿足條件的數(shù)據(jù)!??!

練習(xí):查詢所有員工的last_name,department_name信息

select last_name,department_name?
from departments d right join employees e
on e.`department_id`=d.`department_id`;

七種 SQL JOINS 的實現(xiàn)

UNION的使用

合并查詢結(jié)果

  • 利用UNION關(guān)鍵字,可以給出多條SELECT語句,并將它們的結(jié)果組合成單個結(jié)果集。
  • 合并時,兩個表對應(yīng)的列數(shù)和數(shù)據(jù)類型必須相同,并且相互對應(yīng)。
  • 各個SELECT語句之間使用UNION或UNION ALL關(guān)鍵字分隔。

UNION操作符

UNION 操作符返回兩個查詢的結(jié)果集的并集,去除重復(fù)記錄。

UNION ALL操作符

UNION ALL操作符返回兩個查詢的結(jié)果集的并集。對于兩個結(jié)果集的重復(fù)部分,不去重。

注意:執(zhí)行UNION ALL語句時所需要的資源比UNION語句少。

如果明確知道合并數(shù)據(jù)后的結(jié)果數(shù)據(jù)不存在重復(fù)數(shù)據(jù),或者不需要去除重復(fù)的數(shù)據(jù),則盡量使用UNION ALL語句,以提高數(shù)據(jù)查詢的效率。

1、內(nèi)連接(兩表只要滿足條件的)

SELECT employee_id,last_name,department_name
FROM employees e JOIN departments d
ON e.`department_id` = d.`department_id`;

2、左外連接(左和右滿足條件的,和左中不滿足條件的)

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`;

3、右外連接(右和左滿足條件的,和右中不滿足條件的)

SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;

4、在左外連接的基礎(chǔ)上,右表取null值(滿足條件的肯定不是null,我們不?。?/strong>

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL

5、在右外連接的基礎(chǔ)上,我們?nèi)∽蟊淼膎ull值

SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL

6、右外連接取左表null值,和左外連接合并UNION ALL

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL #沒有去重操作,效率高
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`;

7、

SELECT employee_id,last_name,department_name
FROM employees e LEFT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE d.`department_id` IS NULL
UNION ALL
SELECT employee_id,last_name,department_name
FROM employees e RIGHT JOIN departments d
ON e.`department_id` = d.`department_id`
WHERE e.`department_id` IS NULL

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux環(huán)境下mysql5.7.13安裝教程

    Linux環(huán)境下mysql5.7.13安裝教程

    這篇文章主要為大家詳細(xì)介紹了Linux環(huán)境下mysql5.7.13安裝教程,感興趣的小伙伴們可以參考一下
    2016-07-07
  • MySQL表的碎片整理和空間回收的方法

    MySQL表的碎片整理和空間回收的方法

    本文主要介紹了MySQL表的碎片整理和空間回收的方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • MySQL中的REPLACE?INTO語法詳解

    MySQL中的REPLACE?INTO語法詳解

    REPLACEINTO是MySQL中的一種特殊語句,用于在插入數(shù)據(jù)時檢測是否存在沖突,如果目標(biāo)表中已存在與新插入行的主鍵(PRIMARYKEY)或唯一鍵(UNIQUEKEY)沖突的記錄,則會刪除舊記錄并插入新記錄
    2025-02-02
  • MySQL索引詳細(xì)解析

    MySQL索引詳細(xì)解析

    索引是有雙面性的,合理的建立索引可以提高數(shù)據(jù)庫的效率。但是如果沒有合理的構(gòu)建索引和使用索引,可能會導(dǎo)致索引失效或者影響數(shù)據(jù)庫性能,這篇文章主要介紹了MySql索引原理與操作
    2022-10-10
  • MySQL數(shù)據(jù)庫優(yōu)化推薦的編譯安裝參數(shù)小結(jié)

    MySQL數(shù)據(jù)庫優(yōu)化推薦的編譯安裝參數(shù)小結(jié)

    這篇文章主要介紹了MySQL數(shù)據(jù)庫優(yōu)化推薦的編譯安裝參數(shù)小結(jié),需要的朋友可以參考下
    2015-04-04
  • mysql如何設(shè)置不區(qū)分大小寫

    mysql如何設(shè)置不區(qū)分大小寫

    在本篇文章里小編給大家整理了關(guān)于mysql設(shè)置不區(qū)分大小寫的方法,需要的朋友們跟著學(xué)習(xí)下。
    2020-06-06
  • mysql遠(yuǎn)程登錄出錯的解決方法

    mysql遠(yuǎn)程登錄出錯的解決方法

    mysql遠(yuǎn)程登錄出錯的情況,先比很多朋友都有遇到過吧,下面有個不錯的解決方法,大家可以參考下
    2014-01-01
  • MySQL校對規(guī)則(COLLATION)的具體使用

    MySQL校對規(guī)則(COLLATION)的具體使用

    本文主要介紹了MySQL校對規(guī)則(COLLATION)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • Mysql 過濾和排序查詢結(jié)果的操作代碼

    Mysql 過濾和排序查詢結(jié)果的操作代碼

    過濾和排序查詢結(jié)果在數(shù)據(jù)庫中是非常常見和重要的操作,這篇文章主要介紹了Mysql 過濾和排序查詢結(jié)果的操作代碼,需要的朋友可以參考下
    2024-04-04
  • Linux安裝MySQL教程(二進(jìn)制分發(fā)版)

    Linux安裝MySQL教程(二進(jìn)制分發(fā)版)

    這篇文章主要為大家詳細(xì)介紹了Linux安裝MySQL教程,二進(jìn)制分發(fā)版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論