Команда 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)