Создание таблицы из другой таблицы

Команда CREATE TABLE позволяет создать пустую таблицу, которую необходимо в дальнейшем заполнить данными. Oracle SQL предоставляет дополнительную возможность определения таблицы, позволяющую создать таблицу и сразу заполнить ее строками из другой таблицы. Для этого используется ключевое слово AS.

CREATE TABLE [схема.]таблица [(определение_столбцов)] AS подзапрос;

определение_столбцов – определяет имена, значения по умолчанию и правила целостности для столбцов создаваемой таблицы

подзапрос – возвращает строки, которые должны быть добавлены в создаваемую таблицу.

Эта команда создает таблицу с указанными столбцами и вставляет туда строки, возвращенные подзапросом.

Столбцы создаваемой таблицы можно не описывать, в этом случае они будут совпадать со столбцами подзапроса. Если в списке выбора подзапроса используются выражения, а столбцы вновь создаваемой таблицы Вы не описываете, обязательно укажите псевдонимы столбцов в предложении SELECT подзапроса, именно так будут называться столбцы в новой таблице.

Если столбцы в новой таблице описаны, количество столбцов должно совпадать с количеством столбцов подзапроса. Для столбцов создаваемой таким образом таблицы можно указать только имя, значение по умолчанию и правила целостности (кроме FOREIGN KEY).

Новая таблица наследуется только ограничение NOT NULL у таблицы подзапроса.

В примере показано создание таблицы project_1 из таблицы project. В таблице project имеется два ограничения целостности: PRIMARY KEY на колонку id и NOT NULL на колонку name. Вновь созданная таблица project_1 унаследовала только одно ограничение целостности: NOT NULL на колонку name.

SQL> CREATE TABLE project_1 AS SELECT * FROM project;

Table created.

SQL> DESC project

Name Null? Type

--------------------- -------- -------------

ID NOT NULL NUMBER(7)

NAME NOT NULL VARCHAR2(20)

COST NUMBER(10)

SQL> DESC project_1

Name Null? Type

--------------------- -------- -------------

ID NUMBER(7)

NAME NOT NULL VARCHAR2(20)

COST NUMBER(10)