{"id":526,"date":"2022-12-17T16:34:54","date_gmt":"2022-12-17T15:34:54","guid":{"rendered":"https:\/\/piotrgabriel.pl\/wiki\/?p=526"},"modified":"2022-12-17T16:49:38","modified_gmt":"2022-12-17T15:49:38","slug":"left-join-i-right-join-kolejne-operatory-laczace-tabele","status":"publish","type":"post","link":"https:\/\/piotrgabriel.pl\/wiki\/left-join-i-right-join-kolejne-operatory-laczace-tabele\/","title":{"rendered":"LEFT JOIN i RIGHT JOIN &#8211; kolejne Operatory \u0142\u0105cz\u0105ce tabele"},"content":{"rendered":"<p>LEFT JOIN i RIGHT JOIN to rodzaje JOIN\u00f3w, kt\u00f3re s\u0142u\u017c\u0105 do \u0142\u0105czenia danych z r\u00f3\u017cnych tabel w bazie danych.<!--more--><\/p>\n<p>LEFT JOIN pozwala na \u0142\u0105czenie dw\u00f3ch tabel tak, aby wynik zawiera\u0142 wszystkie rekordy z lewej (pierwszej) tabeli, nawet je\u015bli nie ma odpowiadaj\u0105cych im rekord\u00f3w w drugiej tabeli. Je\u015bli dla danego rekordu z lewej tabeli nie ma odpowiednika w drugiej tabeli, to w wyniku zostan\u0105 u\u017cyte NULL-owe warto\u015bci dla kolumn z drugiej tabeli.<\/p>\n<p>RIGHT JOIN dzia\u0142a podobnie, ale z t\u0105 r\u00f3\u017cnic\u0105, \u017ce wynik zawiera wszystkie rekordy z prawej (drugiej) tabeli, nawet je\u015bli nie ma odpowiadaj\u0105cych im rekord\u00f3w w lewej tabeli.<\/p>\n<p>Oto przyk\u0142ad zapytania LEFT JOIN:<\/p>\n<p><code>SELECT *<\/code><br \/>\n<code>FROM users LEFT JOIN orders<\/code><br \/>\n<code>ON users.id = orders.user_id;<\/code><\/p>\n<p>W tym przyk\u0142adzie \u0142\u0105czymy tabel\u0119 &#8222;users&#8221; z tabel\u0105 &#8222;orders&#8221; po polu &#8222;id&#8221; z tabeli &#8222;users&#8221; i &#8222;user_id&#8221; z tabeli &#8222;orders&#8221;. Wynik zapytania zawiera wszystkie rekordy z tabeli &#8222;users&#8221;, nawet je\u015bli nie ma dla nich odpowiadaj\u0105cych rekord\u00f3w w tabeli &#8222;orders&#8221;. W takim przypadku, dla kolumn z tabeli &#8222;orders&#8221; zostan\u0105 u\u017cyte NULL-owe warto\u015bci.<\/p>\n<p>Mo\u017cemy r\u00f3wnie\u017c u\u017cy\u0107 RIGHT JOIN w podobny spos\u00f3b:<\/p>\n<p><code>SELECT *<\/code><br \/>\n<code>FROM users RIGHT JOIN orders<\/code><br \/>\n<code>ON users.id = orders.user_id;<\/code><\/p>\n<p>W tym przypadku wynik zapytania zawiera wszystkie rekordy z tabeli &#8222;orders&#8221;, nawet je\u015bli nie ma dla nich odpowiadaj\u0105cych rekord\u00f3w w tabeli &#8222;users&#8221;. Dla kolumn z tabeli &#8222;users&#8221; zostan\u0105 u\u017cyte NULL-owe warto\u015bci.<\/p>\n<h2>Przyk\u0142adowe tabele<\/h2>\n<p>Przyk\u0142ady tabel na kt\u00f3rych mo\u017cna prze\u0107wiczy\u0107 powy\u017csze z\u0142\u0105czenia LEFT i RIGHT JOIN znajdziesz ni\u017cej:<\/p>\n<p><code>CREATE TABLE users (<\/code><br \/>\n<code>id INT PRIMARY KEY,<\/code><br \/>\n<code>name VARCHAR(255) NOT NULL,<\/code><br \/>\n<code>email VARCHAR(255) NOT NULL<\/code><br \/>\n<code>);<\/code><\/p>\n<p><code>CREATE TABLE orders (<\/code><br \/>\n<code>id INT PRIMARY KEY,<\/code><br \/>\n<code>user_id INT NOT NULL,<\/code><br \/>\n<code>total DECIMAL(10,2) NOT NULL,<\/code><br \/>\n<code>FOREIGN KEY (user_id) REFERENCES users(id)<\/code><br \/>\n<code>);<\/code><\/p>\n<p>Tabela &#8222;users&#8221; zawiera informacje o u\u017cytkownikach, takie jak ich identyfikator (pole &#8222;id&#8221;), imi\u0119 (pole &#8222;name&#8221;) i adres email (pole &#8222;email&#8221;). Tabela &#8222;orders&#8221; zawiera informacje o zam\u00f3wieniach, takie jak ich identyfikator (pole &#8222;id&#8221;), identyfikator u\u017cytkownika (pole &#8222;user_id&#8221;), do kt\u00f3rego nale\u017cy zam\u00f3wienie oraz \u0142\u0105czna kwota zam\u00f3wienia (pole &#8222;total&#8221;). Pole &#8222;user_id&#8221; jest po\u0142\u0105czone z polami &#8222;id&#8221; tabeli &#8222;users&#8221; za pomoc\u0105 klucza obcego, co pozwala nam \u0142\u0105czy\u0107 te dwie tabele za pomoc\u0105 JOIN\u00f3w.<\/p>\n<p>I na koniec przyk\u0142adowe rekordy, kt\u00f3re mog\u0105 zosta\u0107 wstawione do tabel &#8222;users&#8221; i &#8222;orders&#8221;:<\/p>\n<p><code>INSERT INTO users (id, name, email)<\/code><br \/>\n<code>VALUES (1, 'John', 'john@example.com'),<\/code><br \/>\n<code>(2, 'Alice', 'alice@example.com'),<\/code><br \/>\n<code>(3, 'Bob', 'bob@example.com');<\/code><\/p>\n<p><code>INSERT INTO orders (id, user_id, total)<\/code><br \/>\n<code>VALUES (1, 1, 99.99),<\/code><br \/>\n<code>(2, 1, 199.99),<\/code><br \/>\n<code>(3, 2, 299.99);<\/code><\/p>\n<p>W tabeli &#8222;users&#8221; mamy teraz trzy rekordy dla trzech r\u00f3\u017cnych u\u017cytkownik\u00f3w o identyfikatorach 1, 2 i 3. W tabeli &#8222;orders&#8221; mamy trzy rekordy, z kt\u00f3rych dwa nale\u017c\u0105 do u\u017cytkownika o identyfikatorze 1, a jeden do u\u017cytkownika o identyfikatorze 2.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>LEFT JOIN i RIGHT JOIN to rodzaje JOIN\u00f3w, kt\u00f3re s\u0142u\u017c\u0105 do \u0142\u0105czenia danych z r\u00f3\u017cnych tabel w bazie danych.<\/p>\n","protected":false},"author":1,"featured_media":155,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[48],"tags":[24,226],"class_list":["post-526","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-bazy-danych","tag-mysql","tag-operatory-laczenia-sql"],"_links":{"self":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts\/526","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/comments?post=526"}],"version-history":[{"count":0,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts\/526\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/media\/155"}],"wp:attachment":[{"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/media?parent=526"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/categories?post=526"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/tags?post=526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}