В такой вставке данных можно задействовать всю мощь оператора выборки SELECT и использовать группировки, агрегатные функции и другие возможности.
Заполнить таблицу данными на основе запроса c помощью команды INSERT.
Синтаксис:
где TABLE2 — таблица, куда осуществляется вставка, а SELECT — произвольный запрос.
Примеры
В таблицу CITY1 будут добавлены те строки из таблицы CITY, где PEOPLES> 1 000 000, и к полю PEOPLES будет добавлено 100.
В таблицу CARNAME в колонку nm добавляем все марки автомобилей, объединенные с цветом.
Допустим и такой способ записи оператора вставки:
То есть в таблицу MAN1 добавляются все записи из таблицы MAN.
Необходимо, чтобы количество, структура и типы колонок таблицы после оператора INSERT соответствовали структуре и типам колонок в операторе вставки SELECT.
Например, CITY1 имеет такую же структуру, как и таблица CITY.
Это неправильный запрос, так как запрос SELECT возвращает больше колонок, чем перечисленные колонки после команды INSERT (CITYCODE, CITYNAME);
Правильные варианты запросов:
Следует помнить, что, как и обычная команда вставки INSERT, INSERT INTO SELECT также должна завершаться оператором COMMIT или ROLLBACK для фиксации изменений или отката изменений.
Что делать, если одна из колонок таблицы имеет другой тип данных, отличный от типа колонки в операторе SELECT?
В этом случае необходимо выполнить преобразование типов с помощью функции CAST, TO_NUMBER, TO_CHAR.
Я пытаюсь вставить тестовые данные указанным способом, но получаю ошибку, что добавляемые данные имеют большую длину, чем длина колонки. Что порекомендуете в этом случае?
Следует воспользоваться функций SUBSTR для усечения записей из запроса до необходимого размера.
В нашей таблице три колонки, я добавляю данные только в две из них, возможно ли такое?
Да, возможно так сделать, но только если третья колонка не является первичным ключом или не имеет ограничения NOT NULL, в данную колонку будет добавлен NULL.
Контрольные вопросы и задания для самостоятельного выполнения
1. Добавить в таблицу MAN1 записи из MAN, где возраст людей больше 33 лет.
2. Добавить в таблицу MAN1 записи из MAN, где возраст людей больше 50 лет, и к фамилии участника добавить количество лет — пример «Петров54».
3. Добавить в таблицу MAN1 записи из MAN, где возраст людей 19, но к полю «возраст» (AGE) необходимо добавить AGE +1.
Шаг 53. Создание таблиц на основе запроса
Язык SQL позволяет создавать таблицы на основе запроса. При этом в таком запросе можно использовать группировки, операторы объединения таблиц, математические расчеты.
Создание таблицы и заполнение таблицы на основе запроса.
Создание таблицы:
Создается таблица по запросу SELECT.
Создание дубликата таблицы AUTO.
Пример:
Создание таблицы AOBJ1 — первые четыре строки из таблицы AUTO.
Пример:
Создание таблицы AOBJ2 — первыми добавлены первые две строки из таблицы AUTO.
Пример:
Также мы можем заполнить таблицу данными на основе запроса.
Для того чтобы скопировать только структуру таблицы, без данных, можно воспользоваться следующим приемом:
CREATE TABLE TAB1 AS SELECT * FROM TAB2 WHERE 1=0
Естественно, такой способ не позволяет создавать ключи и индексы. Их необходимо будет создать отдельным скриптом.
Этот метод работает со всеми типами колонок, в том числе и с колонками BLOB, CLOB.
Нужны ли специальные права для создания таблиц?
Для создания в своей схеме не нужны. Для создания в другой схеме необходима привилегия CREATE ANY TABLE.
Используются соответствующие соединения между базами данных, создание таблицы на основе запроса завершается сообщением об ошибке.
При создании таблицы через соединения DB_LINK подобным способом действительно могут быть определенные сложности. Они связаны с передачей данных в колонках CLOB, BLOB, BFILE. Как решить эту проблему, будет рассказано в одном из следующих шагов.
Контрольные вопросы и задания для самостоятельного выполнения
1. Повторите материалы данного шага.
2. Создайте дубликат таблицы CITY — CITY1.
3. Создайте таблицу на основе запроса к таблице AUTO с полями «цвет автомобиля», «количество автомобилей».
4. Создайте дубликат таблицы AUTO — AUTO1.
Читать дальше
Конец ознакомительного отрывка
Купить книгу