PostgreSQL Съединение, Съединение ВСИЧКИ с примери

⚡ Умно обобщение

PostgreSQL UNION комбинира резултатите от два или повече SELECT оператора в един набор от резултати и премахва дублиращите се редове, докато UNION ALL запазва всеки ред, което е по-бърз вариант, когато дублиранията нямат значение.

  • 🔗 Комбинирайте: UNION обединява редове от множество SELECT оператори в един резултатен набор.
  • 🧹 дубликати: UNION премахва дублиращи се редове, докато UNION ALL запазва всеки съвпадащ ред.
  • 📐 Правила: Всеки SELECT трябва да върне един и същ брой колони със съвместими типове данни.
  • ↕️ ПОДРЕДЕНИ ПО: Един единствен ORDER BY в края сортира комбинирания набор от резултати.
  • Изпълнение: UNION ALL работи по-бързо, защото пропуска стъпката за премахване на дубликати.
  • 🤖 Помощ за изкуствен интелект: Асистентите с изкуствен интелект подравняват колоните и избират между UNION и UNION ALL.

PostgreSQL СЪЮЗ и СЪЮЗ ВСИЧКИ

Какво е PostgreSQL съюз?

- PostgreSQL Операторът UNION се използва за комбиниране на набори от резултати от повече от един израз SELECT в един набор от резултати. Всички дублиращи се редове от резултатите от изразите SELECT се елиминират. Операторът UNION работи при две условия:

  • Заявките SELECT трябва да връщат един и същ брой колони.
  • Типовете данни на всички съответни колони трябва да са съвместими.

Операторът UNION обикновено се използва за комбиниране на данни от свързани таблици, които не са нормализирани перфектно.

Синтаксис

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

Ето обяснение за горните параметри:

Изразът_1, изразът_2, … изразът_n са изчисленията или колоните, които трябва да извлечете.

Таблиците са таблиците, от които трябва да извличате записи.

Условието(ята) WHERE са условията, които трябва да бъдат изпълнени, за да могат записите да бъдат извлечени.

Забележка: Тъй като операторът UNION не връща дубликати, използването на UNION DISTINCT няма да окаже влияние върху резултатите.

PostgreSQL съюз

Операторът UNION премахва дубликати по същия начин, както ИЗБЕРЕТЕ РАЗЛИЧЕН прави. Нека демонстрираме това. Имаме база данни с име Demo със следните таблици:

Книга:

PostgreSQL съюз

Цена:

PostgreSQL съюз

Нека изпълним следната команда:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

Командата ще върне следното:

PostgreSQL съюз

Колоната за id се появява както в таблицата „Книга“, така и в таблицата „Цена“. Той обаче се появява само веднъж в резултата. Причината е, че PostgreSQL Операторът UNION не връща дубликати.

PostgreSQL съюз всички

Този оператор комбинира набори от резултати от повече от един оператор SELECT, без да премахва дубликати. Операторът изисква всеки оператор SELECT да има подобен брой полета в набори с резултати от подобни типове данни.

Синтаксис:

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION ALL
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

Ето обяснение за горните параметри:

Изразът_1, изразът_2, … изразът_n са изчисленията или колоните, които трябва да извлечете.

Таблиците са таблиците, от които трябва да извличате записи.

Условието(ята) WHERE са условията, които трябва да бъдат изпълнени, за да могат записите да бъдат извлечени.

Забележка: И двата SELECT оператора трябва да имат равен брой изрази.

Ще използваме следните таблици:

Книга:

PostgreSQL съюз всички

Цена:

PostgreSQL съюз всички

Изпълнете следната команда:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Трябва да върне следното:

PostgreSQL съюз всички

Дубликатите не са премахнати.

ПОДРЕДЕНИ ПО

- PostgreSQL Операторът UNION може да се използва заедно с клаузата ORDER BY за подреждане на резултатите от заявката. За да демонстрираме това, ще използваме следните таблици:

Цена:

ПОДРЕДЕНИ ПО

Цена2:

ПОДРЕДЕНИ ПО

Ето командата, която демонстрира как да използвате оператора UNION заедно с клаузата ORDER BY:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price;

Командата ще върне следното:

ПОДРЕДЕНИ ПО

Записите бяха подредени по ценовата колона. Клаузата подрежда записите във възходящ ред по подразбиране. За да ги подредите в низходящ ред, добавете клаузата DESC, както е показано по-долу:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

Командата ще върне следното:

ПОДРЕДЕНИ ПО

Записите са подредени въз основа на ценовата колона в низходящ ред.

Кога да използваме Union и кога Union All?

Използвайте оператора UNION, когато имате няколко таблици с подобна структура, но разделени по някаква причина. Той е добър, когато трябва да премахнете или елиминирате дублиращи се записи.

Използвайте оператора UNION ALL, когато не е необходимо да премахвате или елиминирате дублиращи се записи.

Използване на pgAdmin

Сега нека видим как се изпълняват и трите действия с помощта на pgAdmin.

Как да използваме PostgreSQL Обединение с помощта на pgAdmin

Следва стъпка по стъпка процес за това как да го използвате PostgreSQL СЪЮЗ чрез pgAdmin:

Стъпка 1) Влезте във вашия pgAdmin акаунт.

Стъпка 2) От навигационната лента вляво щракнете върху Бази данни, след което щракнете върху Демо.

употреба PostgreSQL Обединение с помощта на pgAdmin

Стъпка 3) Въведете заявката в редактора на заявки:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

Стъпка 4) Щракнете върху бутона Изпълнение.

употреба PostgreSQL Обединение с помощта на pgAdmin

Трябва да върне следното:

употреба PostgreSQL Обединение с помощта на pgAdmin

съюз всички

Стъпка 1) Влезте във вашия pgAdmin акаунт.

Стъпка 2) От навигационната лента вляво щракнете върху Бази данни, след което щракнете върху Демо.

употреба PostgreSQL Обединяване на всички чрез pgAdmin

Стъпка 3) Въведете заявката в редактора на заявки:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

Стъпка 4) Щракнете върху бутона Изпълнение.

употреба PostgreSQL Обединяване на всички чрез pgAdmin

Трябва да върне следното:

употреба PostgreSQL Обединяване на всички чрез pgAdmin

ПОДРЕДЕНИ ПО

Операторът UNION ALL може да се комбинира с клаузата ORDER BY, за да подредите резултатите в набора от резултати. Например:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price
ORDER BY id;

Командата ще върне следното:

употреба PostgreSQL ПОРЪЧАЙТЕ С помощта на pgAdmin

Резултатите са подредени.

Изтеглете базата данни, използвана в този урок

Въпроси и Отговори

UNION ALL е по-бърз, защото просто конкатенира редове. UNION трябва да сортира или хешира комбинираните редове, за да премахне дубликатите, което добавя допълнителни разходи. Когато дубликатите нямат значение, UNION ALL е по-ефективният избор.

Да. Всеки SELECT в UNION трябва да върне един и същ брой колони, а съответстващите колони трябва да имат съвместими типове данни в един и същи ред. В противен случай PostgreSQL повдига грешка и заявката е неуспешна.

Да. Имената на колоните могат да се различават, защото UNION съпоставя колоните по позиция, а не по име. Типовете данни трябва да са съвместими и резултатният набор използва имената на колоните от първия SELECT оператор.

UNION подрежда редовете от два резултатни набора вертикално в един списък с колони, премахвайки дубликатите. JOIN комбинира колони от различни таблици хоризонтално въз основа на свързан ключ, така че разширява редовете, вместо да ги добавя.

ORDER BY сортира крайния комбиниран резултат, така че PostgreSQL позволява само един ORDER BY, поставен след последния SELECT. Сортирането на отделните заявки първо би било безсмислено, след като редовете им бъдат обединени.

Асистенти с изкуствен интелект, като GitHub Copilot, подравняват списъците с колони на всеки SELECT, маркират несъответстващи типове данни и препоръчват UNION или UNION ALL въз основа на това дали трябва да се запазят дубликати, намалявайки често срещаните грешки в заявките.

Да. Чрез анализ на вашите таблици и цел, асистент с изкуствен интелект може да определи дали дублиращите се редове са възможни и смислени, след което да предложи UNION ALL, когато дубликатите са приемливи за ускоряване, или UNION, когато трябва да бъдат премахнати.

UNION връща редове, намерени в която и да е от заявките. INTERSECT връща само редове, присъстващи и в двете заявки, а EXCEPT връща редове в първата заявка, но не и във втората. И трите премахват дубликатите по подразбиране.

Обобщете тази публикация с: