目錄
何時使用自我加入
語法和示例
解釋:
另一個例子:在同一部門找到員工
筆記:
要記住的要點
首頁 資料庫 SQL 如何在SQL中使用自我加入?

如何在SQL中使用自我加入?

Aug 25, 2025 am 10:45 AM
sql

自我連接用於與自身的表結合,通常用於同一表中的分層,順序或比較分析。 1。在處理諸如員工和管理人員之類的層次數據時使用自我加入。 2。將其應用於在同一表中比較行,例如在同一部門找到員工。 3。利用表別名將表作為兩個獨立實體。 4。使用適當的聯接類型 - 左鍵加入以包括無與倫比的行,僅與匹配對的內在連接。 5。通過添加e1.emp_id

如何在SQL中使用自我加入?

當您想與自己加入表時,使用SQL中的自我加入。這對於比較同一表中的行特別有用,例如層次數據(例如員工及其經理),順序數據(例如日誌或時間序列)或在相似記錄之間找到關係。

如何在SQL中使用自我加入?

何時使用自我加入

通常,您通常會使用自我加入:

  • 該表包含層次數據(例如,每個員工都有經理的員工表,經理也是員工)。
  • 您需要比較同一表中的行(例如,從同一城市找到客戶)。
  • 您正在處理順序或基於時間的記錄,並希望找到模式。

由於表格無法與自己加入,因此您使用表別名將同一表處理與查詢中的兩個獨立實體一樣。

如何在SQL中使用自我加入?

語法和示例

假設您有一個employees表:

僱員
 ------------------------------------------------------------------------------------------------------------------------------- 
| emp_id |名稱| Manager_ID |部門|
 ------------------------------------------------------------------------------------------------------------------------------- 
| 1 |愛麗絲| null |工程|
| 2 |鮑勃| 1 |工程|
| 3 |查理| 1 |銷售|
| 4 |戴安娜| 2 |工程|
 -------------------------------------------------------------------------------------------------------------------------------

在這裡, manager_id指另一名員工的emp_id

如何在SQL中使用自我加入?

獲取員工列表以及經理的姓名:

選擇 
    e.name作為僱員_name,
    M.Name為Manager_name
從 
    員工e
    左加入員工m在e.manager_id上= m.emp_id;

解釋:

  • e是員工的別名。
  • m是經理的別名(同一表)。
  • 我們將employees加入自身,在員工行中的manager_id與管理員行中的emp_id匹配。
  • 使用LEFT JOIN確保沒有經理的員工(例如愛麗絲)仍然出現,而NULL作為經理。

結果:

 ----------------------------------------- 
| Employee_name | Manager_name |
 ----------------------------------------- 
|愛麗絲| null |
|鮑勃|愛麗絲|
|查理|愛麗絲|
|戴安娜|鮑勃|
 -----------------------------------------

另一個例子:在同一部門找到員工

找到在同一部門工作的一對員工(但不是同一個人):

選擇 
    e1.name as僱用1,
    e2.名稱為員工2,
    E1.部門
從 
    員工E1
    內部加入員工E2 
        在e1.department = e2.Department 
        和e1.emp_id <e2.emp_id;

筆記:

  • e1e2是同一表的兩個實例。
  • 條件e1.emp_id < e2.emp_id避免了重複對(例如,鮑勃·夏利(Bob-Charlie)和查理·鮑勃(Charlie-Bob))和自生。

結果:

 --------------------------------------------------------- 
|員工1 |員工2 |部門|
 --------------------------------------------------------- 
|鮑勃|戴安娜|工程|
|愛麗絲|鮑勃|工程|
|愛麗絲|戴安娜|工程|
 ---------------------------------------------------------

要記住的要點

  • 始終使用別名(例如, em )來區分錶的兩個實例。
  • 選擇正確的加入類型
    • 如果您只想匹配記錄, INNER JOIN
    • 如果您想要第一行的所有行,即使沒有匹配, LEFT JOIN
  • 通過添加適當的過濾(例如e1.id )來避免<strong>無限或重複的結果</strong>。
  • 自我加入不是一個特殊的命令- 他們只是定期與同一桌子和別名一起加入。

基本上,一個自我連接使您可以將一個表作為數據的兩個單獨視圖。一旦您掌握了使用別名並匹配正確的列,它就會成為分析單個表中關係的強大工具。

以上是如何在SQL中使用自我加入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP教程
1596
276
如何在SQL中獲得一年中的第一天和最後一天? 如何在SQL中獲得一年中的第一天和最後一天? Aug 11, 2025 pm 05:42 PM

ThefirstdayoftheyearisobtainedbyconstructingortruncatingtoJanuary1stofthegivenyear,andthelastdayisDecember31stofthesameyear,withmethodsvaryingbydatabasesystem;2.Fordynamiccurrentyeardates,MySQLusesDATE_FORMATorMAKEDATE,PostgreSQLusesDATE_TRUNCorDATE_

如何在SQL中找到列的總和? 如何在SQL中找到列的總和? Aug 08, 2025 pm 05:54 PM

tofindthemofacolumninsql,usetheSum()函數,whoturnsthetthetaTaLnumericValuesInaspeCifiedColumnWhileIgnoringNulls; 1.UseBasicSyntax:selectsum(column_name)asaliasfromtable_name; 2.seletheletheletheetecoLumnHasnumerceLemercerectatoRorrorrorrorrorrorrorrorrorrorrorrorrorrorrorrorrorrorrorrorror;

了解SQL執行上下文和權限 了解SQL執行上下文和權限 Aug 16, 2025 am 08:57 AM

SQL執行上下文是指運行SQL語句時的身份或角色,決定能訪問哪些資源及操作權限。權限設置應遵循最小權限原則,常見權限包括SELECT、INSERT、EXECUTE等。排查權限問題需確認登錄名、角色權限、EXECUTEAS設置及schema授權。執行上下文切換可通過EXECUTEAS實現,但需注意用戶存在性、權限授予及性能安全影響。建議避免隨意賦予db_owner或sysadmin角色,應用賬號應僅訪問必要對象,並通過schema統一授權。

如何在SQL中加入桌子 如何在SQL中加入桌子 Aug 16, 2025 am 09:37 AM

Aself-joinisusedtocomparerowswithinthesametable,suchasinhierarchicaldatalikeemployee-managerrelationships,bytreatingthetableastwoseparateinstancesusingaliases,asdemonstratedwhenlistingemployeesalongsidetheirmanagers'nameswithaLEFTJOINtoincludetop-lev

SQL中的Alter表語句是什麼? SQL中的Alter表語句是什麼? Aug 08, 2025 pm 02:13 PM

TheALTERTABLEstatementisusedtomodifyanexistingtable’sstructurewithoutrecreatingit;1.AddanewcolumnusingADDCOLUMN;2.DropacolumnwithDROPCOLUMN,whichalsodeletesitsdata;3.RenameacolumnusingRENAMECOLUMN,withsyntaxconsistentinMySQL,SQLServer,andPostgreSQL;4

如何在SQL中創建視圖 如何在SQL中創建視圖 Aug 11, 2025 pm 12:40 PM

創建視圖的語法是CREATEVIEWview_nameASSELECT語句;2.視圖不存儲實際數據,而是基於底層表的實時查詢結果;3.可使用CREATEORREPLACEVIEW修改視圖;4.通過DROPVIEW可刪除視圖;5.視圖適用於簡化複雜查詢、提供數據訪問控制和保持接口一致性,但需注意性能和邏輯清晰,最終以完整句子結束。

如何在SQL中使用完整的外部連接? 如何在SQL中使用完整的外部連接? Aug 17, 2025 am 12:25 AM

AFULLOUTERJOINreturnsallrowsfrombothtables,withNULLswherenomatchexists;1)Itcombinesmatchingrecordsandincludesunmatchedrowsfrombothleftandrighttables;2)Itisusefulfordatareconciliation,mergereports,andidentifyingmismatches;3)Notalldatabasessupportitnat

從SQL數據庫遷移到MongoDB:挑戰和解決方案 從SQL數據庫遷移到MongoDB:挑戰和解決方案 Aug 16, 2025 pm 01:40 PM

變換DatamodelsbyembeddingorReferencingBasedInAccessPatternsInSteadeDusise joins; 2.HandletleTransactionsByFairingAtomicoperations andEventualConsistimency,reservingMulti-documentTransactionsforrictionsforrications for for for foreverality casse; 3.ewredRiteSqlqueriessqlqueriesSusiessusitusingAggregregregregregationpipipelinetsinea

See all articles