Структурированный язык запросов – SQL, страница 51
1001 5 10/06/1999 3412 2001
1005 5 12/06/1999 3416 2004
Следовательно, будет сделано следующее: все значения, выданные
запросом (информация о студентах, имеющих только отличные оценки).
помещаются в таблицу, названную EXCELLENT. Для того чтобы не
произошло ошибки, таблица EXCELLENT должна уже быть создана
командой CREATE TABLE (о ней речь ниже) и иметь пять столбцов, которые
совпадают с таблицей USP по типу данных.
Таким образом, будет получена независимая таблица с некоторыми
данными из таблицы успеваемости USP. При изменении значений в таблице
USP это ни в коем случае не отразится на таблице EXCELLENT.
В принципе, имеется возможность указывать столбцы по имени, как это уже
было продемонстрировано выше, а значит - переупорядочивать добавляемую
информацию.
Например, при помощи нижеприведенной команды можно вставить
информацию о среднем балле каждого студента:
INSERT INTO AVGRAITING (SNUM, AVGOCENKA) SELECT
SNUM, AVG (OCENKA) FROM USP GROUP BY SNUM;
Следует обратить внимание на то, что указаны имена столбцов таблицы
AVGRAITING, а значит, последовательность данных во вставляемом списке
(т.е. порядок следования полей в предложении SELECT) должна с этим
порядком совпадать.
В INSERT можно использовать подзапросы внутри любого запроса,
который генерирует значения для этой команды аналогично тому, как это
уже делалось при рассмотрении соответствующего материала. Например, для
вставки в уже имеющуюся таблицу STO фамилий, имен и отчеств студентов,
у которых есть хотя бы одна отличная оценка, можно воспользоваться
следующей командой:
INSERT INTO STO (SFAM, SIMA, SOTCH) SELECT
SFAM, SIMA, SOTCH FROM STUDENTS WHERE SNUM =
ANY (SELECT SNUM FROM USP
WHERE OCENKA = 5);
Оба запроса в этой команде функционируют так же, как если бы они не
являлись частью выражения INSERT. Подзапрос находит все строки для
студентов, имеющих отличные оценки, и формирует набор значений SNUM.
Внешний запрос выбирает строки из таблицы STUDENTS, где эти значения
SNUM найдены, a INSERT вставляет найденные данные в таблицу STO.
В команде INSERT допускается использовать соотнесенные
подзапросы. Предположим, что имеется таблица МАХОCENKA. в которой