История развития баз данных. Основные понятия и определения. Архитектура базы данных. Физическая и логическая независимость, страница 19

Обычно для большинства реализаций 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

Тема 9.

Вопросы темы:

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 это допускают: