MySQL JOIN と LEFT JOIN の違いを理解する
MySQL JOIN は、共通のコラム。デフォルトでは、MySQL は INNER JOIN を実行し、結合されたすべてのテーブルで一致する行のみを返します。
しかし、ユーザーが明示的な結合タイプがないことが LEFT JOIN を意味すると考えると、よくある誤解が生じます。これは当てはまりません。デフォルトの結合タイプは INNER JOIN のままです。
LEFT JOIN と INNER JOIN の例
次のクエリを考えてみましょう。
SELECT `DM_Server`.`Jobs`.*, `DM_Server`.servers.Description AS server, digital_inventory.params, products.products_id, products.products_pdfupload, customers.customers_firstname, customers.customers_lastname FROM `DM_Server`.`Jobs` INNER JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf") JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50
このクエリは実行されます。すべてのテーブルに対して INNER JOIN を実行し、結合されたすべてのテーブルで一致する値を持つ行のみを返します。
次に、LEFT JOIN を使用するようにクエリを変更しましょう。
SELECT `DM_Server`.`Jobs`.*, `DM_Server`.servers.Description AS server, digital_inventory.params, products.products_id, products.products_pdfupload, customers.customers_firstname, customers.customers_lastname FROM `DM_Server`.`Jobs` LEFT JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID LEFT JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name LEFT JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf") LEFT JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50
The LEFTこのクエリの JOIN は、左側のテーブル (「ジョブ」) からすべての行を返し、右側のテーブルからは一致する行のみを返します。これは、右側のテーブルに一致する行がない場合でも、「ジョブ」の行が結果に含まれることを意味します。
結合の視覚的表現
以下は INNER JOIN と LEFT JOIN の視覚的表現です:
INNER JOIN:
TABLE 1 TABLE 2 +-----------+------+ +-----------+------+ | Column 1 | KEY | | Column 3 | KEY | +-----------+------+ +-----------+------+ | ROW 1.1 | 1 | | ROW 2.1 | 1 | | ROW 1.2 | 2 | | | | | | | | ROW 2.2 | 2 | +-----------+------+ +-----------+------+ Result: | Column 1 | Column 3 | +-----------+-----------+ | ROW 1.1 | ROW 2.1 | | ROW 1.2 | ROW 2.2 |
LEFT JOIN:
TABLE 1 TABLE 2 +-----------+------+ +-----------+------+ | Column 1 | KEY | | Column 3 | KEY | +-----------+------+ +-----------+------+ | ROW 1.1 | 1 | | ROW 2.1 | 1 | | ROW 1.2 | 2 | | | | | ROW 1.3 | 3 | | | | +-----------+------+ +-----------+------+ Result: | Column 1 | Column 3 | +-----------+-----------+ | ROW 1.1 | ROW 2.1 | | ROW 1.2 | NULL | | ROW 1.3 | NULL |
以上がMySQL JOIN と LEFT JOIN の主な違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。