Потихоньку мы созреваем до создания сложных запросов. Сегодня мы научимся формировать выходные данные в группы. Это очень удобная вещь, и если ты её поймёшь, то будешь использовать очень часто, потому что она очень сильно облегчает жизнь.
Представим, что у нас есть две таблицы User1 и User2:
Мы хотим получить список всех пользователей Unix из двух таблиц сразу. Для этого нужно выполнить запрос выбора к первой таблице, а потом ко второй. Результатом будет две выходные таблицы. А если мы хотим получить одну? Для этого можно воспользоваться объединением - оператор UNION. Вот как это будет выглядеть:
SELECT *
FROM User1.db
WHERE OC LIKE 'Unix'
UNION
SELECT *
FROM User2.db
WHERE OC LIKE 'Unix';
Чтобы запрос не завершился ошибкой, он должен удовлетворять следующим условиям:
Количество и типы полей должны быть одинаковыми.
Символьные поля должны иметь одинаковое число символов.
Если одного поля в одном из запросов нет, то его можно заменить. Например:
SELECT Key1, OC, LastName
FROM User1.db
WHERE OC LIKE 'Unix'
UNION
SELECT Key1, OC, 'NO FOUND'
FROM User2.db
WHERE OC LIKE 'Unix';
результатом будет одна таблица:
User1.db
Key1 OC LastName
-------------------------
2 Unix Петров
6 Unix Амаров
2 Unix NO NAME
Здесь мы вместо поля LastName подсовываем текст 'NO FOUND', чтобы количество и тип полей совпадали.
Таким образом можно украсить запрос вот до такого вида:
SELECT Key1, OC, LastName, 'Table 1'
FROM User1.db
WHERE OC LIKE 'Unix'
UNION
SELECT Key1, OC, 'NO FOUND', 'Table 2'
FROM User2.db
WHERE OC LIKE 'Unix';
Результатом будет одна таблица:
User1.db
Key1 OC LastName
---------------------------------
2 Unix Петров Table 1
6 Unix Амаров Table 1
2 Unix NO NAME Table 2
И на последок упорядочим наш вывод:
SELECT Key1, OC, LastName, 'Table 1'
FROM User1.db
WHERE OC LIKE 'Unix'
UNION
SELECT Key1, OC, 'NO FOUND', 'Table 2'
FROM User2.db
WHERE OC LIKE 'Unix';
ORDER BY 3
ORDER BY 3 - говорит, что надо упорядочить вывод по третьему столбцу. Результатом будет одна таблица:
User1.db
Key1 OC LastName
---------------------------------
2 Unix NO NAME Table 2
6 Unix Амаров Table 1
2 Unix Петров Table 1
На сегодня всё. В следующий раз я познакомлю тебя с изменением таблицы. До сих пор мы только получали данные, пора научиться и модифицировать их. Удачи!!!