鑰匙要點
- >本文解釋了左JOIN,右JOIN,INTER JOIN和外部加入SQL的用法,使用一個簡單的書籍貸款數據庫,帶有兩個表:客戶和書籍。 SQL連接中“左”和“右”的概念 澄清的概念無非是來源順序。聯接關鍵字之前提到的表是“左”表,而後面的表則是“右”表。
- >文章介紹了與排除的概念,這些概念對於包括“不要”或“不”的查詢很有用。這些連接使用Where子句來排除數據,特別是在尋找null值時。
- > 具有排除的外部連接被描述為在表之間沒有連接的情況下選擇數據,儘管它在mysql中不支持。
- 。 >強調,應始終將其子句用於不能將其作為其實際價值的字段使用。另外,注意到Cross Join是一個唯一的聯接,與表A中的每個行與表B中的每個行匹配
- 有很多方法可以從兩個數據庫表中加入數據並過濾所需的信息。克雷格·巴克勒(Craig Buckler)寫了一篇關於理解加入的流行文章。即內部,左,右和全外部。本文是該文章的擴展。
>讓我們快速回顧一下。圖片兩張桌子,一張適合客戶的桌子,一個用於建立圖書貸款數據庫的書籍。
>客戶表
id
>標題
1 星際大戰 2 侏羅紀公園 3 小女人 4 湯姆·索耶(Tom Sawyer)>
在這里左JON會在您想提出一個問題的情況下,例如“向我展示所有客戶,包括任何借來的書籍。
>您可以在圖像中看到結果集中包含左圓或表中的所有數據。從右表中包含了從書籍表中重疊的數據。這意味著,在左聯接時,右表中的某些數據可能被排除在外。 > 正確的加入就像問“
>向我展示我的圖書館中的所有書籍,以及借用它們的任何客戶。
>
一個外部聯盟就像問“向我展示所有貸款和所有書籍,無論它們之間有什麼聯繫。
在此圖像中,您可以看到將包括兩個表中的所有數據,而不管某些數據是否重疊。完成此類查詢後,您將在結果中有不重疊的數據,這些字段將設置為null。
內在的加入就像問“
>在這裡,您可以看到數據可以從左右表中排除。如果沒有書,您將不會看到任何客戶,如果沒有借錢,您將不會看到任何書! >
>這是最常見的數據類型,是使用關鍵字自身加入時的默認行為。通常不需要添加的“內部”單詞。>
“左”和“右”是什麼意思?
>您可以將“左”和“右”視為源訂單。查看此查詢:
請注意,在使用JOIN關鍵字之前,我提到了表客戶。這意味著客戶是我的“左”桌子。考慮它的另一種思考方式是詢問Join關鍵字的哪個表格,哪個是在其右邊。
幾個警告:
<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>僅僅是因為一個表是“左”,並不意味著您正在選擇其所有記錄。這是左聯接或右鍵的功能,而不是源訂單!
>
左右的表將首先在結果集中列出其列,除非您在選擇部分中專門選擇列。。
在關鍵字之後表的順序無關緊要,如果交換了,它將返回相同的結果。- >
- >足夠的審查。這些新加入是什麼?
- 好吧,它們不是“新”,它們只是查詢其他問題的一種方式。您如何在查詢中使用“不要”或“不”一詞的問題找到問題的答案?
- > >
> 左將與排除
看一下此圖形。注意與上述連接在陰影區域中的區別。
>這看起來像是左聯接,但不再包含“重疊”數據。為什麼?這與“向我展示沒有租借書籍的客戶”的詢問一樣。 如果您很聰明,您可能會認為您只需在客戶表中搜索一個book_id的0 book_id即可完成同樣的事情。在此示例中,這將起作用,但是大多數情況下都不會。這取決於您的桌子的設計。 >
查詢看起來像這樣:
>現在我們包含了一個Were子句。每當您有一個子句時,您都將排除
數據或過濾它,幾乎像搜索一樣。那麼,為什麼我們要搜索books.id是無效的?為什麼這是無效的?讓我們運行左鍵的標準並查看其返回的數據,我們將有答案:<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>左加入返回數據
id
> lastname
向我展示沒有借書的書籍
的客戶”,那麼現在要尋找的是很有意義。我們只需要選擇“讀取null”的客戶。 ID列(加入後,將標記為ID1,因為有兩個名為“ ID”的列)。如果我們添加books.id為null,我們將使用標準條款來執行此操作。現在,結果被過濾到以下內容:
id
> lastname
book_id正常的權利加入將返回每本書,無論其是否借貸,結果集看起來像這樣:
id
> firstName
> lastname
book_id
> id1
>標題
1
喬
吹
1
1
星際大戰
2
簡
母鹿
2
2
侏羅紀公園
3
哈利
烏鴉
2
2
侏羅紀公園
無效的
無效的
無效的
無效的
3
小女人
無效的
無效的
無效的
無效的
4
湯姆·索耶(Tom Sawyer)
這看起來有些不同。首先,您可能會注意到侏羅紀公園被列為兩次。這是因為兩個人借來了這本書,並且數據庫正在為每場比賽返回一行。
請注意,來自客戶表的所有相應列對於小女性和湯姆·索耶(Tom Sawyer)來說都是無效的,因為沒有人藉這些標題,因此沒有重疊的數據。
如果我們想選擇所有未借出的書籍,我們只使用Where子句在客戶中找到“ null”。該結果應該是可以預測的。我們只會得到未借出的書籍。
>
<span>SELECT * </span><span>FROM customers </span><span>LEFT JOIN books </span><span>ON customers.book_id = books.id </span>id
> firstName
> lastname此加入不是很有用,但從本質上講,這兩個客戶都沒有貸款和未借貸的書籍。
>這樣的奇怪加入可能在您需要在表之間沒有連接的情況下選擇數據的情況下可能很有用。也許您正在尋找孤兒數據或在您轉換的某些舊數據庫中尋找不一致之處。
實際上,這種加入是如此奇怪,以至於您甚至無法在MySQL中進行,它不支持外部加入。常規SQL確實可以,並且查詢看起來像這樣(MSSQL不是mysql):
此查詢的結果將返回像這樣的數據:
>
id
<span>SELECT *
</span><span>FROM customers
</span><span>LEFT JOIN books
</span><span>ON customers.book_id = books.id
</span>WHERE books.id IS NULL
> lastname
book_id其他想法
>您應該始終將您的Where子句用於無法將其null作為其實際值的字段!我們總是針對無法將其作為值的ID字段進行測試。想像一下,如果我們的書籍桌有一個允許空的ISBN字段。如果我們使用該字段測試了null,則包括我們可能不想要的行! >
>還有另一個稱為“十字聯接”的聯接,這也是奇怪而獨特的。想像一下,不僅將一個用戶與一本書匹配,而是每個用戶都與每本書匹配!是的,這意味著,如果您有20本書和30個客戶,交叉加入將產生30*20行數據!有關如何有用的示例,請查看本文。
結論
我希望這些額外的幾加入對您有意義。考慮在您要求在表“不”匹配另一個表格之間的表之間的數據時,請考慮使用它們。
>“找到所有以前從未訂購過的客戶”。
>
“找到所有不在黑名單中的所有客戶”。- >
- “查找所有尚未出售的產品”。 >
- “找到所有客戶都不借書”。
- “找到最近沒有走路的所有狗”。 >
- “找到從未發送過支持票的員工”。 >
-
總而言之,根據如何定義數據庫和表格,您可能需要使用Where子句來檢查null值為
dubl - >
以正常的聯接行為。 >所以……您是否需要十字架加入?您想告訴我們或想讓我們覆蓋的其他特定用例嗎?讓我們知道! 經常詢問有關SQL加入
的問題(常見問題解答)>基於它們之間的相關列,使用了什麼類型的SQL連接,它們彼此之間有何不同? SQL連接的基本類型有四種:內部加入,左連接,右JOIN和FULL JOIN。內部加入返回記錄,這些記錄在兩個表中都具有匹配值。左JOIN從左表返回所有記錄,以及右表的匹配記錄。右JOIN從右表返回所有記錄,以及左表的匹配記錄。左或右表有匹配時,Full Join返回所有記錄。
>>如何在SQL中使用多個加入?
>可以在SQL中使用多個加入,只需在您的SQL查詢中添加更多JOIN語句即可。每個加入語句都必須有自己的條款,以指定加入條件。查詢中的加入語句的順序可能會影響結果,因此在使用多個加入時仔細考慮查詢的邏輯很重要。什麼是SQL中的三個桌子連接,它如何工作? >在SQL中的三個桌子連接是一種基於它們之間的相關列組合的連接類型。這是通過在SQL查詢中使用兩個加入語句來完成的。第一個加入語句結合了前兩個表,第二個加入語句結合了第一個聯接的結果與第三個表。 JOIN語句的順序以及ON子句中指定的條件確定表如何組合。
>
>左JOIN與SQL的右JOIN之間有什麼區別?左連接和SQL中的右JOIN之間的區別是將表加入和返回結果的順序。左聯接從左表返回所有記錄,以及右表中匹配的記錄。如果沒有匹配,則結果在右側為無效。另一方面,右連接將返回右表和左表中匹配的記錄的所有記錄。如果沒有匹配,結果在左側為無效。 >如何可視化SQL連接? 可以使用Venn圖可視化SQL結合。圖中的每個圓都代表一個表。圓圈重疊的區域表示聯接返回的記錄。對於內部連接,僅顯示重疊區域。對於左連接,顯示了所有左圓和重疊區域。對於正確的連接,顯示了所有正確的圓和重疊區域。為了完整的聯接,顯示了兩個圓圈的整個區域。>
什麼是SQL中的完整加入,什麼時候應該使用它?
>在SQL中的完整加入SQL時返回所有記錄是左表或右表中的匹配。如果沒有匹配,則結果在兩側為無效。當您要保留兩個表中的所有記錄時,這種類型的加入也很有用,即使列之間沒有匹配。 🎜>是的,您可以使用SQL連接兩個以上的表。這是通過在您的SQL查詢中使用多個加入語句來完成的。每個加入語句都結合了兩個表,因此要加入三個表,您將使用兩個加入語句,以加入四個表,您將使用三個加入語句,依此類推。
>>在SQL中使用多個連接的性能影響是什麼?在SQL中使用多個JONINS中的多個連接可以對查詢性能產生重大影響,尤其是在加入的表格上有大量記錄。每個加入操作都需要處理能力和內存,因此您在查詢中擁有的加入越多,執行查詢所需的資源就越多。但是,可以通過使用索引,優化查詢並使用適當的硬件來減輕性能的影響。
>>如何優化使用加入的SQL查詢?您使用加入的SQL查詢。一種方法是在正在連接的列上使用索引。這可以大大加快聯接操作。另一種方法是限制查詢返回的記錄數量,使用WHERE子句。另外,查詢中的加入語句的順序可能會影響性能,因此仔細考慮查詢的邏輯很重要。
>>使用SQL JON時,
有什麼常見的錯誤? >使用SQL加入時要避免的一些常見錯誤包括忘記指定“ ON子句”,這可能會導致笛卡爾產品,加入非索引列,這可以減慢查詢性能,並使用錯誤的類型的JOIN類型,可以結果結果不正確。同樣重要的是要記住,查詢中的加入語句的順序可能會影響結果,因此仔細考慮查詢的邏輯很重要。
>以上是3再加入您應該熟悉的詳細內容。更多資訊請關注PHP中文網其他相關文章!

TheSecretTokeEpingAphp-PowerEdwebSiterUnningSmoothlyShyunderHeavyLoadInVolvOLVOLVOLDEVERSALKEYSTRATICES:1)emplactopCodeCachingWithOpcachingWithOpCacheToreCescriptexecution Time,2)使用atabasequercachingCachingCachingWithRedataBasEndataBaseLeSendataBaseLoad,3)

你應該關心DependencyInjection(DI),因為它能讓你的代碼更清晰、更易維護。 1)DI通過解耦類,使其更模塊化,2)提高了測試的便捷性和代碼的靈活性,3)使用DI容器可以管理複雜的依賴關係,但要注意性能影響和循環依賴問題,4)最佳實踐是依賴於抽象接口,實現鬆散耦合。

是的,優化papplicationispossibleandessential.1)empartcachingingcachingusedapcutorediucedsatabaseload.2)優化的atabaseswithexing,高效Quereteries,and ConconnectionPooling.3)EnhanceCodeWithBuilt-unctions,避免使用,避免使用ingglobalalairaiables,並避免使用

theKeyStrategiestosigantificallyBoostPhpaPplicationPerformenCeare:1)UseOpCodeCachingLikeLikeLikeLikeLikeCacheToreDuceExecutiontime,2)優化AtabaseInteractionswithPreparedStateTementStatementStatementAndProperIndexing,3)配置

aphpdepentioncontiveContainerIsatoolThatManagesClassDeptions,增強codemodocultion,可驗證性和Maintainability.itactsasaceCentralHubForeatingingIndections,因此reducingTightCightTightCoupOulplingIndeSingantInting。

選擇DependencyInjection(DI)用於大型應用,ServiceLocator適合小型項目或原型。 1)DI通過構造函數注入依賴,提高代碼的測試性和模塊化。 2)ServiceLocator通過中心註冊獲取服務,方便但可能導致代碼耦合度增加。

phpapplicationscanbeoptimizedForsPeedAndeffificeby:1)啟用cacheInphp.ini,2)使用preparedStatatementSwithPdoforDatabasequesies,3)3)替換loopswitharray_filtaray_filteraray_maparray_mapfordataprocrocessing,4)conformentnginxasaseproxy,5)

phpemailvalidation invoLvesthreesteps:1)格式化進行regulareXpressecthemailFormat; 2)dnsvalidationtoshethedomainhasavalidmxrecord; 3)


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Linux新版
SublimeText3 Linux最新版

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中