Обычно для большинства реализаций SQL это означает совпадение типов и длин полей, объединяемых столбцов различных таблиц. UNION автоматически исключает из выходных данных повторяющиеся строки, поэтому использование параметра DISTINCT не имеет смысла, хотя это и можно использовать для оптимизации запроса.
Можно вставлять константы и выражения в предложение SELECT, использующее UNION. Это не соответствует стандарту SQL, но часто и оправданно применяется. При этом, применяемые константы и выражения должны быть совместимы по объединению.
Пример:
Получить максимальные и минимальные оценки каждого студента.
SELECT osnum, MIN (ocen), «MIN» FROM оценкаGROUP BY osnum
UNION
SELECT osnum, MAX (ocen), «MAX» FROM оценкаGROUP BY osnum;
Результат:
001 |
5 |
MIN |
002 |
4 |
MIN |
003 |
2 |
MIN |
001 |
5 |
MAX |
002 |
4 |
MAX |
003 |
4 |
MAX |
В приведённом примере минимальная оценка студентов с кодом 001 и 002 совпадают, но строки представлены дважды, т.к. различаются за счёт комментария.
В приводимых примерах данные результата приводились в порядке записи запроса, однако в общем случае, нельзя считать, что будет автоматически получен именно такой порядок. Выходные данные объединённого запроса могут быть отсортированы путём использования предложения ORDERBY в конце объединённого запроса (при этом использовать ORDERBY внутри объединённого запроса нельзя).
Пример:
Отсортировать максимальные и минимальные оценки каждого студента по кодам студента.
SELECT osnnum, MIN (ocen), «MIN» FROM оценкаGROUP BY osnum
UNION
SELECT osnnum, MAX (ocen), «MAX» FROM оценкаGROUP BY osnum
ORDER BY 1, 3 DESC;
Результат:
001 |
5 |
MIN |
001 |
5 |
MAX |
002 |
4 |
MIN |
002 |
4 |
MAX |
003 |
2 |
MIN |
003 |
4 |
MAX |
Может объединяться более двух запросов. Например, обозначим результаты данного запроса как максимальная-минимальная оценка MMOЦ. И обозначим названия столбцов:
osnum |
ocen |
mm |
Получим на основе этой таблицы таблицу кодов студентов с включением столбца признаков: 0 – отличник, 1 – 4,5; 2 – есть 3-ки; 3 – имеющие 2-ки.
Запишем следующий запрос:
SELECT osnnum, MIN (ocen), 0 FROM оценкаММОЦ
WHERE mm = “MIN” AND ocen = 5;
UNION
(SELECT osnnum, MIN (ocen), 1 FROM оценкаММОЦ
WHERE mm = “MIN” AND ocen = 4;
UNION
(SELECT osnnum, MIN (ocen), 2 FROM оценкаММОЦ
WHERE mm = “MIN” AND ocen = 3;
UNION
(SELECT osnnum, MIN (ocen), 3 FROM оценкаММОЦ
WHERE mm = “MIN” AND ocen < 3;))
ORDER BY 2;
Результат:
001 |
0 |
002 |
1 |
003 |
3 |
Вопросы темы:
1. Запросы обновления таблиц.
2. Создание, модификация и уничтожение таблиц. Ограничение на множество допустимых значений данных. Значение по умолчанию.
3. Создание и уничтожение индексов. Поддержка ссылочной целостности.
1. Запросы обновления таблиц.
Обновление таблиц осуществляется путём использования трёх команд SQL: INSERT – вставить, UPDATE – изменить, DELETE – удалить. Эти команды называются командами обновления данных. В простейшем варианте команда INSERTимеет следующий вид:
INSERTINTO имя_таблицы [(список_имени_полей)]
VALUES (список значений);
Если список имён полей не задан, то значения перечисляются в последовательности столбцов таблицы.
Пример 1:
INSERT INTO студент
VALUES (“005”, “C-5”, NULL);
Пример 1:
INSERT INTO оценка
VALUES (“002”, “001”, 13/01/11, 5);
По стандарту SQL вводимые значения не могут быть выражениями, хотя некоторые системы, в том числе MS Acces это допускают:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.