PostgreSQL - JOINS

Здравствуйте,unkerуждающиеся в базах данных энтузиасты! Сегодня мы отправимся в увлекательное путешествие по миру объединений (JOINs) в PostgreSQL. Как ваш доброжелательный邻居-преподаватель компьютера, я здесь, чтобы провести вас через это приключение шаг за шагом. Не волнуйтесь, если вы никогда раньше не писали ни строчки кода - мы начнем с самых азов и будем подниматься постепенно. Так что надевайте свои виртуальные каски, и давайте окунемся в это!

PostgreSQL - Joins

Что такое объединения (JOINs)?

Прежде чем мы перейдем к различным типам объединений, давайте поймем, что же такое объединение (JOIN) на самом деле. Представьте, что вы планируете большой праздник (потому что кто не любит хорошую вечеринку с базами данных, правда?). У вас есть два списка: один с именами ваших друзей, а другой с их любимыми напитками. Объединения (JOINs) resemble магические планировщики вечеринок, которые помогают вам combining эти списки различными способами, чтобы создать идеальный список гостей с любимыми напитками каждого.

В терминах баз данных, объединения (JOINs) позволяют нам combine строки из двух или более таблиц на основе связанной колонки между ними. Теперь давайте рассмотрим различные типы объединений, которые предлагает нам PostgreSQL.

CROSS JOIN

Что такое CROSS JOIN?

CROSS JOIN resembles inviting everyone on both of your lists to the party, regardless of whether you know their drink preference or not. It combines every row from the first table with every row from the second table.

Пример CROSS JOIN

Давайте создадим два простых стола для нашего примера:

CREATE TABLE friends (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);

CREATE TABLE drinks (
id SERIAL PRIMARY KEY,
drink VARCHAR(50)
);

INSERT INTO friends (name) VALUES ('Alice'), ('Bob'), ('Charlie');
INSERT INTO drinks (drink) VALUES ('Cola'), ('Juice'), ('Water');

Теперь давайте выполним CROSS JOIN:

SELECT f.name, d.drink
FROM friends f
CROSS JOIN drinks d;

Результат:

name drink
Alice Cola
Alice Juice
Alice Water
Bob Cola
Bob Juice
Bob Water
Charlie Cola
Charlie Juice
Charlie Water

Как вы видите, каждый друг сочетается с каждым напитком. Это resembles saying, "Hey, everyone can try all the drinks!" Это может быть не всегда praktically, но это отличный способ generate все возможные комбинации.

INNER JOIN

Что такое INNER JOIN?

INNER JOIN resembles более избирательный. Это resembles matching ваши друзья с их любимыми напитками, но только включая тех друзей, у кого есть известное предпочтение напитка.

Пример INNER JOIN

Давайте модифицируем наши таблицы немного:

CREATE TABLE friends (
id SERIAL PRIMARY KEY,
name VARCHAR(50)
);

CREATE TABLE favorite_drinks (
id SERIAL PRIMARY KEY,
friend_id INTEGER,
drink VARCHAR(50)
);

INSERT INTO friends (name) VALUES ('Alice'), ('Bob'), ('Charlie'), ('David');
INSERT INTO favorite_drinks (friend_id, drink) VALUES (1, 'Cola'), (2, 'Juice'), (3, 'Water');

Теперь давайте выполним INNER JOIN:

SELECT f.name, fd.drink
FROM friends f
INNER JOIN favorite_drinks fd ON f.id = fd.friend_id;

Результат:

name drink
Alice Cola
Bob Juice
Charlie Water

Обратите внимание, что David не появляется в результате, потому что у него нет указанного любимого напитка.

LEFT OUTER JOIN

Что такое LEFT OUTER JOIN?

LEFT OUTER JOIN resembles ensuring все ваши друзья на списке гостей, даже если вы не знаете их предпочтение напитка. Те, у кого нет известного предпочтения, могут получить default напиток или не получить напиток вовсе.

Пример LEFT OUTER JOIN

Используя те же таблицы, что и в примере INNER JOIN:

SELECT f.name, fd.drink
FROM friends f
LEFT OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;

Результат:

name drink
Alice Cola
Bob Juice
Charlie Water
David NULL

См. как David включен теперь, но с NULL напитком? Это магия LEFT OUTER JOIN!

RIGHT OUTER JOIN

Что такое RIGHT OUTER JOIN?

RIGHT OUTER JOIN resembles反面 LEFT OUTER JOIN. Это resembles ensuring все напитки в меню, даже если никто не chose их как любимые.

Пример RIGHT OUTER JOIN

Давайте добавим напиток, который никто не chose как любимый:

INSERT INTO favorite_drinks (drink) VALUES ('Lemonade');

SELECT f.name, fd.drink
FROM friends f
RIGHT OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;

Результат:

name drink
Alice Cola
Bob Juice
Charlie Water
NULL Lemonade

Lemonade появляется в списке, даже если никто не chose его как любимый.

FULL OUTER JOIN

Что такое FULL OUTER JOIN?

FULL OUTER JOIN resembles мечта планировщика вечеринок. Он включает всех друзей и все напитки, matching их где возможно и используя NULL где нет соответствия.

Пример FULL OUTER JOIN

SELECT f.name, fd.drink
FROM friends f
FULL OUTER JOIN favorite_drinks fd ON f.id = fd.friend_id;

Результат:

name drink
Alice Cola
Bob Juice
Charlie Water
David NULL
NULL Lemonade

Это дает нам полную картину: всех друзей (даже David без любимого напитка) и все напитки (даже Lemonade без друга, который его предпочитает).

Заключение

И вот мы и добрались до конца, друзья! Мы совершили путешествие по земле объединений (JOINs) в PostgreSQL, от всеохватывающего CROSS JOIN до всестороннего FULL OUTER JOIN. Помните, что выбор правильного объединения resembles подбирание идеальной смеси для вашей вечеринки - это все зависит от того, какую информацию вам нужно и как вы хотите combine ваши данные.

Практикуйте эти объединения, экспериментируйте с различными сценариями, и скоро вы станете душой вечеринки с базами данных! Кто знал, что управление данными может быть так весело, правда? До下一次 встречи, счастливого запроса!

Credits: Image by storyset