Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 39

Лабораторна робота № 3

Тема. Оператори DDL, Transact SQL, вибірка даних в СКБД MS SQL.


Мета роботи: вивчити можливості мови SQL.
Короткі теоретичні відомості
Дуже важливою особливість реляційних бази даних, в тому що результатом
будь якого запиту до таблиці бази даних завжди буде результат у вигляді таблиці.
SQL – це абревіатура виразу Structured Query Language (мова
структурованих запитів).
Мова SQL являє собою сукупність операторів, які можна розділити на
чотири групи:

- DDL (Data Definition Language) – оператори визначення даних

- DML (Data Manipulation Language) – оператори маніпуляції даними

- DCL (Data Control Language) – оператори визначення доступу до даних

- TCL (Transaction Control Language) – оператори управління транзакціями

Порядок звіту лабораторної роботи:

1) Відповідно до обраного варіанта з лабораторної роботи №1 та на основі


розробленої фізичної моделі необхідно виконати запити до бази даних за
наступною групою операторів(прості та складні запити):
– Проста вибірка (вибір всіх значень з таблиці).
SELECT * FROM WaterProducts;
+-----------+--------------+--------+--------+-------+
| ProductID | Name | TypeID | Volume | Price |
+-----------+--------------+--------+--------+-------+
|1 | Aquafina |1 | 500 | 1.50 |
|2 | Perrier |2 | 750 | 2.50 |
|3 | Dasani Lemon | 3 | 330 | 1.75 |
|4 | Evian |1 | 1000 | 3.00 |
|5 | San Pellegrino| 2 | 500 | 2.00 |
+-----------+--------------+--------+--------+-------+
SELECT * FROM Customers;
+------------+-----------+----------+--------------------------+--------------------------+-------------+
| CustomerID | FirstName | LastName | Address | Email | Phone |
+------------+-----------+----------+--------------------------+--------------------------+-------------+
|1 | John | Doe | 321 Oak St, Suburbia | john.doe@email.com | 555-1111 |
|2 | Jane | Smith | 456 Pine St, Urbanville | jane.smith@email.com | 555-2222 |
|3 | Bob | Johnson | 789 Elm St, Countryside | bob.johnson@email.com | 555-3333 |
|4 | Alice | Williams | 987 Maple St, Metrocity | alice.williams@email.com | 555-4444 |
|5 | Eva | Miller | 654 Birch St, Townville | eva.miller@email.com | 555-5555 |
+------------+-----------+----------+--------------------------+--------------------------+-------------+
SELECT * FROM Manufacturers;
+----------------+-----------+--------------------------+-------------+
| ManufacturerID | Name | Address | Phone |
+----------------+-----------+--------------------------+-------------+
|1 | PepsiCo | 123 Main St, Cityville | 555-1234 |
|2 | Nestle | 456 Oak St, Townsville | 555-5678 |
|3 | Coca-Cola | 789 Pine St, Villageton | 555-9012 |
+----------------+-----------+--------------------------+-------------+

– Вибірка обчислюваних значень (множення/ додання/ віднімання/


ділення).

Щоб отримати ціну і відняти від неї 5% (знижка) для продукту з ProductID 3 в
таблиці WaterProducts:

SELECT Price, Price * 0.95 AS DiscountedPrice FROM WaterProducts


WHERE ProductID = 3;
+-------+------------------+
| Price | DiscountedPrice |
+-------+------------------+
| 1.75 | 1.6625 |
+-------+------------------+
Щоб отримати різницю цін між продуктами з ProductID = 2 та ProductID = 4

SELECT Price AS Price_Product2, (SELECT Price FROM WaterProducts WHERE ProductID


= 4) AS Price_Product4, Price - (SELECT Price FROM WaterProducts WHERE ProductID =
4) AS PriceDifference
FROM WaterProducts
WHERE ProductID = 2;

+-----------------+----------------+-------------------+
| Price_Product2 | Price_Product4 | PriceDifference |
+-----------------+----------------+-------------------+
| 2.50 | 3.00 | -0.50 |
+-----------------+----------------+-------------------+
Щоб отримати суму трьох одиниць продукту
SELECT Price * 3 AS TripledPrice
FROM WaterProducts
WHERE ProductID = 4;
+--------------+
| TripledPrice |
+--------------+
| 9.00 |
+--------------+

– Вибір з умовою (WHERE).

Запит до таблиці WaterProducts де ціна більше 2

SELECT *
FROM WaterProducts
WHERE Price > 2;
Запит до таблиці Employees де ідентифікатор працівника менше або рівне 3

SELECT *
FROM Employees
WHERE EmployeeID <= 3;
+------------+-----------+----------+-------------+--------+------------+
| EmployeeID | FirstName | LastName | PositionID | Salary | HireDate |
+------------+-----------+----------+-------------+--------+------------+
|1 | Michael | Smith |1 | 50000.00| 2023-01-15 |
|2 | Emily | Jones |2 | 35000.00| 2023-02-20 |
|3 | David | Brown |3 | 25000.00| 2023-03-10 |
+------------+-----------+----------+-------------+--------+------------+

Запит до таблиці Orders де сума дорівнює 8.75


SELECT * FROM Orders WHERE TotalAmount = 8.75;

+---------+------------+-------------+
| OrderID | OrderDate | TotalAmount |
+---------+------------+-------------+
|4 | 2023-12-04 | 8.75 |
+---------+------------+-------------+

– Вибір з упорядкуванням (ORDER BY).

Запит до таблиці WaterProducts з сортуванням за ціною

SELECT * FROM WaterProducts ORDER BY Price;

+-----------+----------------+--------+--------+-------+
| ProductID | Name | TypeID | Volume | Price |
+-----------+----------------+--------+--------+-------+
|1 | Aquafina |1 | 500 | 1.50 |
|3 | Dasani Lemon | 3 | 330 | 1.75 |
|5 | San Pellegrino | 2 | 500 | 2.00 |
|2 | Perrier |2 | 750 | 2.50 |
|4 | Evian |1 | 1000 | 3.00 |
+-----------+----------------+--------+--------+-------+
Запит до таблиці Orders з сортуванням дати та суми від більшої до меншої

SELECT * FROM Orders


ORDER BY OrderDate DESC, TotalAmount DESC;
+---------+------------+-------------+
| OrderID | OrderDate | TotalAmount |
+---------+------------+-------------+
|2 | 2023-12-02 | 10.25 |
|4 | 2023-12-04 | 8.75 |
|5 | 2023-12-05 | 6.00 |
|1 | 2023-12-01 | 7.25 |
|3 | 2023-12-03 | 5.50 |
+---------+------------+-------------+

Запит до таблиці EmployeeOrders з сортуванням за іменами


SELECT * FROM Employees ORDER BY FirstName;

– Вибірка з використання оператора BETWEEN.

Запит до таблиці Employees із зарплатою між 23000 та 30000

SELECT *
FROM Employees
WHERE Salary BETWEEN 23000 AND 30000;

+------------+-----------+----------+------------+--------+------------+
| EmployeeID | FirstName | LastName | PositionID | Salary | HireDate |
+------------+-----------+----------+------------+--------+------------+
|3 | David | Brown |3 | 25000.00| 2023-03-10 |
|4 | Olivia | Taylor | 4 | 30000.00| 2023-04-05 |
+------------+-----------+----------+------------+--------+------------+
Запит до таблиці Orders із зарплатою між датами 02.12 та 04.12

SELECT *
FROM Orders
WHERE OrderDate BETWEEN '2023-12-02' AND '2023-12-04';

+---------+------------+--------------+
| OrderID | OrderDate | TotalAmount |
+---------+------------+--------------+
|1 | 2023-12-01 | 7.25 |
|2 | 2023-12-02 | 10.25 |
+---------+------------+--------------+

Запит до таблиці WaterProducts для обрання продуктів між з цінами 1.5 та 2.5
SELECT * FROM WaterProducts
WHERE Price BETWEEN 1.5 AND 2.5;

– Вибірка з допомогою оператора UNION.

На жаль у цій базі немає відповідних таблиць для об'єднання


тому робляться вибірки як демонстрації

-- Запит для отримання даних з таблиці WaterProducts


SELECT ProductID, Name, TypeID, Volume, Price FROM WaterProducts

-- Додаємо UNION для об'єднання з даними з таблиці WaterTypes


UNION

-- Запит для отримання даних з таблиці WaterTypes (з деякими відповідними NULL-


стовпцями)
SELECT NULL AS ProductID, TypeName AS Name, TypeID, NULL AS Volume, NULL AS
Price FROM WaterTypes;

+-----------+-----------------+--------+--------+-------+
| ProductID | Name | TypeID | Volume | Price |
+-----------+-----------------+--------+--------+-------+
|1 | Aquafina |1 | 500 | 1.50 |
|2 | Perrier |2 | 750 | 2.50 |
|3 | Dasani Lemon |3 | 330 | 1.75 |
|4 | Evian |1 | 1000 | 3.00 |
|5 | San Pellegrino | 2 | 500 | 2.00 |
| NULL | Still Water |1 | NULL | NULL |
| NULL | Sparkling Water | 2 | NULL | NULL |
| NULL | Flavored Water | 3 | NULL | NULL |
+-----------+-----------------+--------+--------+-------+

-- Запит для отримання даних з таблиці CustomerOrders


SELECT CustomerID, OrderID FROM CustomerOrders
-- Додаємо UNION для об'єднання з даними з таблиці EmployeeOrders
UNION

-- Запит для отримання даних з таблиці EmployeeOrders


SELECT EmployeeID, OrderID FROM EmployeeOrders;

– Вибірка з використанням шаблону (LIKE).

Запит до таблиці Customers де адреса закінчується на lle

SELECT * FROM Customers


WHERE Address LIKE '%lle';
Запит до таблиці Manufacturers де адреса містить Oak St
SELECT * FROM Manufacturers WHERE Address LIKE '%Oak St%';

+-----------------+-----------+------------------------+-------------+
| ManufacturerID | Name | Address | Phone |
+-----------------+-----------+------------------------+-------------+
|2 | Nestle | 456 Oak St, Townsville | 555-5678 |
+-----------------+-----------+------------------------+-------------+

Запит до таблиці WaterProducts де поле Name містить “ri”

SELECT * FROM WaterProducts WHERE Name LIKE '%ri%';


+------------+---------------+--------+--------+-------+
| ProductID | Name | TypeID | Volume | Price |
+------------+---------------+--------+--------+-------+
|3 | Dasani Lemon | 3 | 330 | 1.75 |
|5 | San Pellegrino| 2 | 500 | 2.00 |
+------------+---------------+--------+--------+-------+

– Вибірка з використання групування при організації запита (GROUP BY).

Запит до таблиці WaterProducts з угрупованням по полю TypeID

SELECT TypeID, COUNT(*) AS TotalProducts, AVG(Price) AS AveragePrice FROM


WaterProducts GROUP BY TypeID;

+--------+----------------+--------------+
| TypeID | TotalProducts | AveragePrice |
+--------+----------------+--------------+
|1 |2 | 2.25 |
|2 |2 | 2.25 |
|3 |1 | 1.75 |
+--------+----------------+--------------+
Запит до таблиці WaterProducts з угрупованням по полю TypeID

SELECT TypeID FROM WaterProducts GROUP BY TypeID;

Запит до таблиці OrderDetails з угрупованням по полю OrderID

SELECT
OrderID, COUNT(OrderDetailID) AS NumberOfItems, SUM(Quantity) AS TotalQuantity,
SUM(Subtotal) AS TotalSubtotal FROM OrderDetails
GROUP BY OrderID;
– Оновити запис (UPDATE).

Оновити запис у таблиці WaterProducts поле Volume значенням 800 де поле ProductID
дорівнює 4

UPDATE WaterProducts SET Volume = 800 WHERE ProductID = 4;


Оновити запис у таблиці Employees поле Salary значенням 85000.00 де поле
EmployeeID дорівнює 3

UPDATE Employees SET Salary = 85000.00 WHERE EmployeeID = 3;


Оновити запис у таблиці Manusactures поле Phone значенням 344-45-5554 де поле
ManufacturerID дорівнює 2

UPDATE Manufacturers SET Phone = '344-45-5554' WHERE ManufacturerID = 2;


– Створіть індекс для будь якого поля таблиці (INDEX).
Індекс для поля TypeID таблиці WaterProducts
CREATE INDEX idx_WaterProducts_TypeID ON WaterProducts (TypeID);
Індекс для поля UserID таблиці UserPhones
CREATE INDEX idx_UserPhones_UserID ON UserPhones (UserID);
Індекс для поля PositionID таблиці Employees
CREATE INDEX idx_Employees_PositionID ON Employees (PositionID);
Індекс для поля OrderID таблиці OrderDetails
CREATE INDEX idx_OrderDetails_OrderID ON OrderDetails (OrderID);
Індекс для поля ProductID таблиці OrderDetails
CREATE INDEX idx_OrderDetails_ProductID ON OrderDetails (ProductID);
Індекс для поля CustomerID таблиці CustomerOrders
CREATE INDEX idx_CustomerOrders_CustomerID ON CustomerOrders (CustomerID);
Індекс для поля OrderID таблиці CustomerOrders
CREATE INDEX idx_CustomerOrders_OrderID ON CustomerOrders (OrderID);
Індекс для поля EmployeeID таблиці EmployeeOrders
CREATE INDEX idx_EmployeeOrders_EmployeeID ON EmployeeOrders (EmployeeID);
Індекс для поля OrderID таблиці EmployeeOrders
CREATE INDEX idx_EmployeeOrders_OrderID ON EmployeeOrders (OrderID);

– Використовуючи агрегатні функції виконати вибірку даних (COUNT,


SUM, AVG).

Отримати суму всіх цін у таблиці OrderDetails де поле OrderID дорівнює 1

SELECT SUM(Subtotal) as TotalPrice FROM OrderDetails WHERE OrderID = 1;

+------------+
| TotalPrice |
+------------+
| 4.75 |
+------------+
Отримати суму всіх цін у таблиці WaterProducts

SELECT SUM(Price) AS TotalPrice FROM WaterProducts;

+------------+
| TotalPrice |
+------------+
| 10.75 |
+------------+
Отримати середню ціну в таблиці WaterProducts

SELECT AVG(Price) AS AveragePrice FROM WaterProducts;

Отримати кількість записів у таблиці OrderDetails, де поле OrderID дорівнює 1

-- Кількість записів у таблиці OrderDetails, де поле OrderID дорівнює 1

SELECT COUNT(*) AS NumberOfRecords FROM OrderDetails WHERE OrderID = 1;


– Видалити дані з таблиці використовуючи умову (DELETE).

Видалити з таблиці WaterTypes дані, де поле TypeID дорівнює 4


Спочатку додамо запис, щоб не порушити вміст, пов'язаний між таблицями

INSERT INTO WaterTypes (TypeID, TypeName) VALUES (4, 'Bad Water');

DELETE FROM WaterTypes WHERE TypeID = 4;


Видалити з таблиці Manufacturers дані, де поле ManufacturerID дорівнює 8
Спочатку додаємо запис, щоб не порушити вміст, пов'язаний між таблицями

INSERT INTO Manufacturers VALUES (8, 'Bad Manufacturer','Bad Address','Bad Phone',);

DELETE FROM Manufacturers WHERE ManufacturerID = 8;


Видалити з таблиці Positions дані, де поле PositionID дорівнює 6
Спочатку додамо запис, щоб не порушити вміст, пов'язаний між таблицями

INSERT INTO Positions VALUES (6, 'Bad Positions');

DELETE FROM Positions WHERE PositionID = 6;


– Додайте новий стовбець до таблиці (ALTER).

Додаємо новий текствий стовбець ShortName до таблиці ShortName

Якщо таблиця існує, проводимо зміни

IF OBJECT_ID('WaterTypes', 'U') IS NOT NULL


BEGIN ALTER TABLE WaterTypes ADD ShNam VARCHAR(5) NULL; END
Оновлюємо дані

UPDATE WaterTypes SET ShNam = 'SW' WHERE TypeID = 1;

UPDATE WaterTypes SET ShNam = 'SpW' WHERE TypeID = 2;

UPDATE WaterTypes SET ShNam = 'FW' WHERE TypeID = 3;


Додаємо новий текстовий стовпець ShortName до таблиці Positions

Просте оновлення таблиці без перевірки

ALTER TABLE Positions ADD ShortName VARCHAR(5);


Оновлюємо дані

UPDATE WaterTypes SET ShNam = 'SW' WHERE TypeID = 1;

UPDATE WaterTypes SET ShNam = 'SpW' WHERE TypeID = 2;

UPDATE WaterTypes SET ShNam = 'FW' WHERE TypeID = 3;


Додаємо новий булевий стовпець IsActive до таблиці Customers зі значенням за
умовчанням 0

ALTER TABLE Customers


ADD IsActive BIT DEFAULT 0;
Оновлюємо дані

UPDATE Customers SET IsActive = 1;


2) На кожен запит на використання оператора необхідно створити не менше
3-х різних запитів.
3) Результатом виконання завдання є скрипт та його результат вибірки.

Контрольні питання:

1. Які обмеження ви знаєте, як вони працюють і вказуються?

В SQL існують різноманітні обмеження, які можна застосовувати до таблиць,


колонок, ключів тощо. Деякі з найбільш розповсюджених обмежень включають у себе:

● Primary Key Constraint (Первинний ключ):


○ Опис: Забезпечує унікальність значень у визначеній колонці чи групі
колонок і встановлює цю колонку (або групу) як первинний ключ таблиці.
○ Вказівка: Визначення обмеження PRIMARY KEY також включає
автоматичне створення унікального кластерного індексу.
● Foreign Key Constraint (Зовнішній ключ):
○ Опис: Встановлює зв'язок між колонками в двох таблицях. Значення в
зовнішній ключі повинні відповідати значенням в відповідному
первинному ключі.
○ Вказівка: Забезпечує цілісність даних між пов'язаними таблицями.
● Unique Constraint (Унікальний ключ):
○ Опис: Гарантує унікальність значень в конкретній колонці чи групі
колонок, але не створює кластерний індекс.
○ Вказівка: Дозволяє забезпечити унікальність без використання первинного
ключа.
● Check Constraint (Перевірка обмеження):
○ Опис: Дозволяє вказати вираз, який визначає допустимі значення для
колонки.
○ Вказівка: Застосовується для обмеження діапазону значень у колонці.
● Default Constraint (Обмеження за замовчуванням):
○ Опис: Встановлює значення за замовчуванням для колонки.
○ Вказівка: Забезпечує введення значень, коли значення для колонки не
вказано.
● Identity Property (Властивість ідентифікації):
○ Опис: Використовується для автоматичного збільшення числових значень
в колонці, щоб створювати унікальні ідентифікатори.
○ Вказівка: Зручно для автоматичного створення унікальних ідентифікаторів
для нових записів.
Ці обмеження допомагають забезпечити цілісність даних та здійснювати контроль над
значеннями у базі даних.

2. Для чого потрібен оператор INSERT INTO?

Оператор INSERT INTO використовується в мові SQL для вставки нового рядка
(запису) у вказану таблицю бази даних. Цей оператор дозволяє вам додавати нові дані у
таблицю, надаючи значення для відповідних колонок.
Синтаксис оператора INSERT INTO виглядає наступним чином:

INSERT INTO table_name (column1, column2, column3, ...)


VALUES (value1, value2, value3, ...);

де:
● table_name - назва таблиці, в яку ви хочете вставити дані.
● column1, column2, column3, ... - назви колонок, до яких ви хочете вставити
дані.
● value1, value2, value3, ... - значення, які ви хочете вставити у відповідні
колонки.

Приклад:

INSERT INTO employees (first_name, last_name, job_title, salary)


VALUES ('John', 'Doe', 'Developer', 60000);

У цьому прикладі дані про нового співробітника додаються до таблиці "employees".


Вказуються колонки (first_name, last_name, job_title, salary), а також значення для кожної
колонки.

Оператор INSERT INTO є одним із базових елементів для додавання нових записів до
бази даних і є необхідним для поповнення таблиць інформацією.

3. Що таке нормалізація і денормалізація?

Денормалізація:
● Опис: Денормалізація — це процес зменшення нормалізації для покращення
продуктивності та спрощення запитів до бази даних.
● Мета: Забезпечення швидкодії та ефективності запитів, особливо при великому
обсязі даних.
● Сценарії використання: Зазвичай використовується в ситуаціях, коли швидкодія є
важливішою за повну нормалізацію, наприклад, для оптимізації запитів читання
даних.
Приклад:
Якщо у вас є таблиця "Замовлення" і ви часто виконуєте запити, які потребують
інформації про клієнта, денормалізація може включати в себе повторення інформації про
клієнта безпосередньо в таблиці "Замовлення" для зменшення необхідності об'єднань
таблиць при запитах.

Обираючи між нормалізацією та денормалізацією, слід розглядати конкретні потреби


додатка та враховувати баланс між цілісністю даних та продуктивністю.

4. Як можна перейменувати таблицю?

Для перейменування таблиці в базі даних Microsoft SQL Server використовується


команда sp_rename. Вона дозволяє змінити ім'я таблиці.

Ось приклад використання sp_rename:

EXEC sp_rename 'старе_ім_таблиці', 'нове_ім_таблиці';


Де:

● 'старе_ім_таблиці' - це поточне ім'я таблиці, яку ви хочете перейменувати.


● 'нове_ім_таблиці' - це нове ім'я, яке ви хочете надати таблиці.

Приклад:

EXEC sp_rename 'employees', 'staff';

Цей запит перейменує таблицю з ім'ям "employees" на "staff". Треба бути обережним при
використанні цієї команди, оскільки вона може вплинути на інші об'єкти бази даних, які
посилаються на цю таблицю (такі як тригери, збережені процедури тощо). Спочатку
треба переконатися, що вірно вказано ім’я, та провести відповідні тести після виконання
операції перейменування.
5. Чим відрізняється VARCHAR від NVARCHAR?
VARCHAR (Variable Character) та NVARCHAR (National Variable Character) є двома
типами даних, які використовуються для зберігання рядків у базах даних. Основна
різниця між ними полягає в тому, як вони обробляють символи та кодування.

VARCHAR:

● Тип даних: VARCHAR використовується для зберігання змінних символьних


рядків.
● Кодування: Використовує кодування, яке залежить від налаштувань бази даних
(наприклад, UTF-8 чи ISO-8859-1).
● Використання пам'яті: Може бути менш ефективним з точки зору використання
пам'яті, оскільки кожен символ займає різну кількість байт.

NVARCHAR:

● Тип даних: NVARCHAR також призначений для зберігання змінних символьних


рядків.
● Кодування: Використовує Unicode (UTF-16), що дозволяє зберігати символи з
різних мов та символи, які включаються до стандарту Unicode.
● Використання пам'яті: Більш ефективний використовує пам'ять для символів
Unicode, але може бути менш ефективним, якщо ви працюєте тільки з символами
однієї мови.

Основний вибір між VARCHAR та NVARCHAR залежить від конкретних потреб


додатка. Якщо треба працювати з однією мовою та не потрібно підтримувати символи
Unicode, то VARCHAR може бути ефективнішим. У випадках, де потрібна підтримка
різних мов чи символів Unicode, NVARCHAR є кращим вибором.

6. Як скопіювати дані з однієї таблиці в іншу?

Є кілька способів копіювання даних з однієї таблиці в іншу в базі даних Microsoft SQL
Server. Один з найпоширеніших методів - використання оператору INSERT INTO разом з
клаузою SELECT.
Ось приклад:

INSERT INTO нова_таблиця (колонка1, колонка2, колонка3, ...)


SELECT колонка1, колонка2, колонка3, ...
FROM стара_таблиця;

У цьому прикладі:

● нова_таблиця - це таблиця, в яку ви хочете скопіювати дані.


● стара_таблиця - це таблиця, з якої ви хочете скопіювати дані.
● колонка1, колонка2, колонка3, ... - це перелік колонок, які ви хочете скопіювати.

Приклад використання:

INSERT INTO NewTable (name, age, address)


SELECT name, age, address
FROM OldTable;

Цей запит скопіює дані з колонок "name", "age" та "address" з таблиці OldTable до
відповідних колонок таблиці NewTable.

Уважно, що обидві таблиці повинні мати однакову структуру (тобто, однакову кількість
та типи колонок), і порядок колонок у списку SELECT повинен відповідати порядку у
списку INSERT INTO.

Способи копіювання даних між таблицями можуть змінюватися в залежності від


системи управління базами даних (СУБД), яку доводиться використовувати. Я розгляну
приклади для двох інших популярних СУБД: MySQL та PostgreSQL.

MySQL:
Треба використовувати команду INSERT INTO ... SELECT для копіювання даних:
INSERT INTO нова_таблиця (колонка1, колонка2, колонка3, ...)
SELECT колонка1, колонка2, колонка3, ...
FROM стара_таблиця;

PostgreSQL:
Повинні використовувати команду INSERT INTO ... SELECT або INSERT INTO ...
VALUES:

-- Варіант 1: Використовуючи SELECT


INSERT INTO нова_таблиця (колонка1, колонка2, колонка3, ...)
SELECT колонка1, колонка2, колонка3, ...
FROM стара_таблиця;

-- Варіант 2: Використовуючи VALUES


INSERT INTO нова_таблиця (колонка1, колонка2, колонка3, ...)
VALUES (значення1, значення2, значення3, ...);

You might also like