{"id":528,"date":"2022-12-17T17:10:23","date_gmt":"2022-12-17T16:10:23","guid":{"rendered":"https:\/\/piotrgabriel.pl\/wiki\/?p=528"},"modified":"2022-12-17T17:21:22","modified_gmt":"2022-12-17T16:21:22","slug":"cross-join-czyli-iloczyn-kartezjanski-w-sql","status":"publish","type":"post","link":"https:\/\/piotrgabriel.pl\/wiki\/cross-join-czyli-iloczyn-kartezjanski-w-sql\/","title":{"rendered":"CROSS JOIN &#8211; czyli iloczyn kartezja\u0144ski w SQL"},"content":{"rendered":"<p>Czym jest CROSS JOIN? Jak wygl\u0105da iloczyn kartezja\u0144ski? Na czym polega \u0142\u0105czenie tabel bez kluczy obcych? <!--more--><\/p>\n<p>CROSS JOIN to rodzaj z\u0142\u0105czenia tabel w j\u0119zyku SQL, kt\u00f3ry pozwala na po\u0142\u0105czenie dw\u00f3ch lub wi\u0119cej tabel bez u\u017cycia kluczy obcego. CROSS JOIN tworzy kartezja\u0144skie z\u0142\u0105czenie, co oznacza, \u017ce dla ka\u017cdego wiersza z jednej tabeli tworzy si\u0119 kombinacj\u0119 z ka\u017cdym wierszem z drugiej tabeli. W efekcie otrzymujemy wiele wierszy, kt\u00f3re zawieraj\u0105 dane z obu tabel.<\/p>\n<p>Sk\u0142adnia wygl\u0105da tak:<\/p>\n<p><code>SELECT *<\/code><br \/>\n<code>FROM table1<\/code><br \/>\n<code>CROSS JOIN table2<\/code><br \/>\n<code>WHERE table1.column1 = table2.column2;<\/code><\/p>\n<p>W powy\u017cszym przyk\u0142adzie CROSS JOIN \u0142\u0105czy tabele <code>table1<\/code> i <code>table2<\/code>, a nast\u0119pnie ogranicza wynik do tych wierszy, w kt\u00f3rych warto\u015b\u0107 kolumny <code>column1<\/code> z tabeli <code>table1<\/code> jest r\u00f3wna warto\u015bci kolumny <code>column2<\/code> z tabeli <code>table2<\/code>.<\/p>\n<h2>Przyk\u0142ad CROSS JOIN, do prze\u0107wiczenia<\/h2>\n<p><code>-- Tworzymy tabele products i orders<\/code><br \/>\n<code>CREATE TABLE products (<\/code><br \/>\n<code>product_id INT NOT NULL AUTO_INCREMENT,<\/code><br \/>\n<code>product_name VARCHAR(255) NOT NULL,<\/code><br \/>\n<code>PRIMARY KEY (product_id)<\/code><br \/>\n<code>);<\/code><\/p>\n<p><code>CREATE TABLE orders (<\/code><br \/>\n<code>order_id INT NOT NULL AUTO_INCREMENT,<\/code><br \/>\n<code>product_id INT NOT NULL,<\/code><br \/>\n<code>quantity INT NOT NULL,<\/code><br \/>\n<code>PRIMARY KEY (order_id),<\/code><br \/>\n<code>FOREIGN KEY (product_id) REFERENCES products(product_id)<\/code><br \/>\n<code>);<\/code><\/p>\n<p><code>-- Wstawiamy kilka wierszy do tabel<\/code><br \/>\n<code>INSERT INTO products (product_name) VALUES<\/code><br \/>\n<code>('Komputer'),<\/code><br \/>\n<code>('Monitor'),<\/code><br \/>\n<code>('Drukarka');<\/code><\/p>\n<p><code>INSERT INTO orders (product_id, quantity) VALUES<\/code><br \/>\n<code>(1, 2),<\/code><br \/>\n<code>(2, 3),<\/code><br \/>\n<code>(3, 1);<\/code><\/p>\n<p><code>-- Wykonujemy z\u0142\u0105czenie tabel za pomoc\u0105 CROSS JOIN<\/code><br \/>\n<code>SELECT *<\/code><br \/>\n<code>FROM products<\/code><br \/>\n<code>CROSS JOIN orders;<\/code><\/p>\n<p>W wyniku powy\u017cszego zapytania otrzymamy tabel\u0119 z\u0142o\u017con\u0105 z 9 wierszy (3 x 3), kt\u00f3ra zawiera wszystkie mo\u017cliwe kombinacje wierszy z obu tabel.<\/p>\n<table>\n<thead>\n<tr>\n<th style=\"text-align: center;\">product_id<\/th>\n<th style=\"text-align: center;\">product_name<\/th>\n<th style=\"text-align: center;\">order_id<\/th>\n<th style=\"text-align: center;\">product_id<\/th>\n<th style=\"text-align: center;\">quantity<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">Komputer<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">Komputer<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">Komputer<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">Monitor<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">Monitor<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">Monitor<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">Drukarka<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">Drukarka<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">2<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">Drukarka<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">3<\/td>\n<td style=\"text-align: center;\">1<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Czy CROSS JOIN pokazuje faktyczne relacje pomi\u0119dzy tabelami?<\/h2>\n<p>CROSS JOIN tworzy kartezja\u0144skie z\u0142\u0105czenie, co oznacza, \u017ce dla ka\u017cdego wiersza z jednej tabeli tworzy si\u0119 kombinacj\u0119 z ka\u017cdym wierszem z drugiej tabeli. W efekcie otrzymujemy wiele wierszy, kt\u00f3re zawieraj\u0105 dane z obu tabel, ale nie przedstawiaj\u0105 one faktyczne relacje pomi\u0119dzy tabelami.<\/p>\n<p>Je\u015bli chcesz otrzyma\u0107 wiersze, kt\u00f3re przedstawiaj\u0105 faktyczne relacje pomi\u0119dzy tabelami, musisz u\u017cy\u0107 innego rodzaju z\u0142\u0105czenia, takiego jak INNER JOIN lub OUTER JOIN.<\/p>\n<p><a href=\"https:\/\/piotrgabriel.pl\/wiki\/zlaczenia-tabel-w-mysql-operator-inner-join\/\">INNER JOIN<\/a> pozwala na po\u0142\u0105czenie wierszy z obu tabel tylko wtedy, gdy istnieje odpowiednia warto\u015b\u0107 klucza obcego.<\/p>\n<p><a href=\"https:\/\/piotrgabriel.pl\/wiki\/outer-join-w-sql\/\">OUTER JOIN<\/a> pozwala na po\u0142\u0105czenie wierszy z obu tabel, nawet je\u015bli nie ma odpowiedniej warto\u015bci klucza obcego.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Czym jest CROSS JOIN? Jak wygl\u0105da iloczyn kartezja\u0144ski? Na czym polega \u0142\u0105czenie tabel bez kluczy obcych?<\/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-528","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\/528","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=528"}],"version-history":[{"count":0,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/posts\/528\/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=528"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/categories?post=528"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/piotrgabriel.pl\/wiki\/wp-json\/wp\/v2\/tags?post=528"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}