鑰匙要點
- >本文解釋了左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中文網其他相關文章!

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

HTTP緩存頭的關鍵玩家包括Cache-Control、ETag和Last-Modified。 1.Cache-Control用於控制緩存策略,示例:Cache-Control:max-age=3600,public。 2.ETag通過唯一標識符驗證資源變化,示例:ETag:"686897696a7c876b7e"。 3.Last-Modified指示資源最後修改時間,示例:Last-Modified:Wed,21Oct201507:28:00GMT。

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP是一種服務器端腳本語言,用於動態網頁開發和服務器端應用程序。 1.PHP是一種解釋型語言,無需編譯,適合快速開發。 2.PHP代碼嵌入HTML中,易於網頁開發。 3.PHP處理服務器端邏輯,生成HTML輸出,支持用戶交互和數據處理。 4.PHP可與數據庫交互,處理表單提交,執行服務器端任務。

PHP在過去幾十年中塑造了網絡,並將繼續在Web開發中扮演重要角色。 1)PHP起源於1994年,因其易用性和與MySQL的無縫集成成為開發者首選。 2)其核心功能包括生成動態內容和與數據庫的集成,使得網站能夠實時更新和個性化展示。 3)PHP的廣泛應用和生態系統推動了其長期影響,但也面臨版本更新和安全性挑戰。 4)近年來的性能改進,如PHP7的發布,使其能與現代語言競爭。 5)未來,PHP需應對容器化、微服務等新挑戰,但其靈活性和活躍社區使其具備適應能力。

PHP的核心優勢包括易於學習、強大的web開發支持、豐富的庫和框架、高性能和可擴展性、跨平台兼容性以及成本效益高。 1)易於學習和使用,適合初學者;2)與web服務器集成好,支持多種數據庫;3)擁有如Laravel等強大框架;4)通過優化可實現高性能;5)支持多種操作系統;6)開源,降低開發成本。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

記事本++7.3.1
好用且免費的程式碼編輯器

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),