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