Проблем:
Искате да създадете нова таблица с данни, копирани от друга таблица.
Пример:
Нашата база данни има таблица с име product
с данни в следните колони:id
(първичен ключ), name
, category
и price
.
id | име | категория | цена |
---|---|---|---|
105 | роза | цвете | 5,70 |
108 | бюро | мебели | 120,00 |
115 | лале | цвете | 6,50 |
123 | слънчоглед | цвете | 7,50 |
145 | китара | музика | 300,00 |
155 | орхидея | цвете | 9,50 |
158 | флейта | музика | 156,00 |
В базата данни нека създадем нова таблица с име florist
който ще съхранява следните колони:id
, name
и price
. Тези колони идват от таблицата product
но само от категорията цвете .
Важно е да отбележим, че създаваме нова таблица. Масата florist
не съществува в тази база данни.
Структурата CREATE TABLE AS SELECT
За да създадете нова таблица от друга таблица, можете да използвате CREATE TABLE AS SELECT
. Тази конструкция е стандартен SQL. Вижте SQL кода по-долу:
Решение 1:
CREATE TABLE florist AS SELECT * FROM product WHERE category = ’flower’;
Ето резултата от заявката:
id | име | категория | цена |
---|---|---|---|
105 | роза | цвете | 5,70 |
115 | лале | цвете | 6,50 |
123 | слънчоглед | цвете | 7,50 |
155 | орхидея | цвете | 9,50 |
Използване на CREATE TABLE
, можете да създадете нова таблица, като копирате данни от друга таблица. В този случай първо използваме CREATE TABLE
клауза с името за нова таблица (в нашия пример:florist
), след това пишем AS
и SELECT
заявка с имената на колоните (в нашия пример:*
), и след това пишем FROM
последвано от името на таблицата, от която се събират данните (в нашия пример:product
). След това можете да използвате всяка SQL клауза:WHERE
, GROUP BY
, HAVING
и др.
Новата маса florist
ще съдържа дефиницията на колоните от product
таблица (id
, name
, category
и price
). Броят на редовете е ограничен чрез използване на клауза WHERE, филтриране на записите за извличане на данни само от категорията цвете .
Структурата SELECT INTO
Друго решение е да използвате SELECT INTO
. Този синтаксис е нестандартен SQL, но се поддържа от много популярни бази данни.
Решение 2:
SELECT id, name, price INTO florist FROM product WHERE category=’flower’;
Ето резултата:
id | име | цена |
---|---|---|
105 | роза | 5,70 |
115 | лале | 6,50 |
123 | слънчоглед | 7,50 |
155 | орхидея | 9,50 |
Дискусия:
Ако искате да създадете нова таблица въз основа на структурата и данните от друга таблица, можете да използвате SELECT INTO
клауза. Първо напишете SELECT
клауза, последвана от списък с колони (в нашия пример:id
, name
и price
) от съществуващата таблица (в нашия пример:product
).
Обърнете внимание, че в таблицата product
. Избрахме само колоните, които ни интересуват.
След това използвайте ключовата дума INTO
с името на новата таблица, която искате да създадете (в нашия пример:florist
). След това напишете ключовата дума FROM с името на съществуващата таблица (в нашия пример:product
).
Ако искате да изберете филтрирани редове от таблицата, използвайте WHERE
клауза. След WHERE
, напишете условията за филтриране на данните (в нашия пример:WHERE category=’flower’
).
В този пример създаваме нова таблица florist
която има по-малко колони от таблицата product
(разликата е категорията на колоната). Тази нова таблица също има по-малко редове – само редовете с категорията цвете .
Разбира се, ако искате да създадете таблица, използвайки всички колони в другата таблица, можете да използвате *
вместо изброяване на колоните след SELECT
. Вижте примера по-долу:
Решение 2:
SELECT * INTO florist FROM product WHERE category=’flower’;
Ето резултата:
id | име | категория | цена |
---|---|---|---|
105 | роза | цвете | 5,70 |
115 | лале | цвете | 6,50 |
123 | слънчоглед | цвете | 7,50 |
155 | орхидея | цвете | 9,50 |
Използване на SELECT INTO
е лесен начин за създаване на нова таблица въз основа на съществуваща таблица в базата данни.