UNION

Последнее обновление: 30.11.2021

Оператор UNION позволяет объединить две однотипных выборки. Эти выборки могут быть из разных таблиц или из одной и той же таблицы. Формальный синтаксис объединения:

SELECT_выражение1
UNION [ALL] SELECT_выражение2
[UNION [ALL] SELECT_выражениеN]

Например, пусть в базе данных будут две отдельные таблицы для клиентов банка (таблица clients) и для сотрудников банка (таблица employees):

DROP TABLE IF EXISTS clients;
DROP TABLE IF EXISTS employees;

CREATE TABLE clients
(
	id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER,
	account_sum INTEGER NOT NULL
);
CREATE TABLE employees
(
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    age INTEGER
);
 
INSERT INTO clients(name, age, account_sum) 
VALUES
('Tom', 37, 4000), ('Sam', 25, 3000), ('Mark', 29, 3500),
('Bob', 41, 2500), ('Adam', 28, 2900), ('Tim', 34, 4100);
 
INSERT INTO employees(name, age)
VALUES ('Tom', 37), ('Nick', 25), ('Mark', 29), ('Bob', 41), ('Alice', 31);

Здесь мы можем заметить, что обе таблицы, несмотря на наличие различных данных, могут характеризоваться двумя общими атрибутами - именем (name) и возрастом (age). Выберем сразу всех клиентов банка и его сотрудников из обеих таблиц:

SELECT name, age 
FROM clients
UNION SELECT name, age FROM employees;

Здесь из первой таблицы выбираются два значения - имя и возраст клиента. Из второй таблицы employees также выбираются два значения - имя и возраст сотрудников. То есть при объединении количество выбираемых столбцов и их тип совпадают для обеих выборок.

оператор UNION в SQLite

При этом названия столбцов объединенной выборки будут совпадать с названия столбцов первой выборки. Если же в одной выборке больше столбцов, чем в другой, то они не смогут быть объединены. Например, в следующем случае объединение завершится с ошибкой:

SELECT name, age , account_sum
FROM clients
UNION SELECT name, age FROM employees;

Если оба объединяемых набора содержат в строках идентичные значения, то при объединении повторяющиеся строки по умолчанию удаляются. Например, в случае с таблицами clients и employees сотрудники банка могут быть одновременно его клиентами и содержаться в обеих таблицах. Если же необходимо при объединении сохранить все, в том числе повторяющиеся строки, то для этого необходимо использовать оператор ALL:

SELECT name, age 
FROM clients
UNION ALL SELECT name, age FROM employees;
Обединение повторяющихся строк в SQLite с помощью UNION ALL

Объединять выборки можно и из одной и той же таблицы. Например, в зависимости от суммы на счете клиента нам надо начислять ему определенные проценты:

SELECT name, age, account_sum + account_sum * 0.1 AS total_sum 
FROM clients WHERE account_sum < 3000
UNION SELECT name, age, account_sum + account_sum * 0.3 AS total_sum 
FROM clients WHERE account_sum >= 3000;

В данном случае если сумма меньше 3000, то начисляются проценты в размере 10% от суммы на счете. Если на счете больше 3000, то проценты увеличиваются до 30%.

Объединение выборок из той же таблицы в SQLite с помощью UNION
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850