Проблем:
Искате да създадете нова таблица с данни, копирани от друга таблица.
Пример:
Нашата база данни има таблица с име 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 е лесен начин за създаване на нова таблица въз основа на съществуваща таблица в базата данни.