Похожие презентации:
Структурированный язык запросов
1.
Структурированный языкзапросов
2.
SQLSQL (Structured Query Language) – символизирует
собой Структурированный Язык Запросов.
SQL – это язык, который дает Вам возможность
создавать и работать в реляционных базах данных.
3.
Состав языка SQL• DDL – язык определения данных;
• DML – язык манипулирования данными;
• DQL – язык запросов;
• DCL – язык управления данными;
• команды администрирования данных;
• команды управления транзакциями;
• процедурный SQL.
4.
КомандаОбъект
Описание
DDL (определение данных)
create
Table (таблица)
View (представление)
Создание
alter
Изменение структуры
drop
Удаление
DML (манипулирование данными внутри одного объекта)
Update
Вставка одной строки в
таблицу
Обновление значений таблицы
Delete
Удаление кортежа из таблицы
Insert
5.
КомандаОбъект
Описание
DQL (язык запросов к данным – выборка данных в соответствии с
критериями)
Select
Конструирование
запросов
любой
сложности
DCL (язык управления данными – контроль над возможностью доступа к
данным внутри БД, назначение пользователю подходящих привилегий – прав доступа)
Alter
Database
Изменение набора основных объектов и
Dbarea
ограничений всей БД
Password
Изменение области хранения
Изменение пароля для всей БД
Create
Drop
Database
Dbarea
Создать БД/область хранения
Удалить …
Grant
Предоставление прав доступа
Revoke
Лишение прав доступа
6.
КомандаОбъект
Описание
Команды администрирования БД
Start audit
Начало анализа операций внутри БД
Stop audit
Завершение анализа операций внутри БД
Команды управления транзакциями
Commit
Сохранение транзакции
RollBack
Отмена транзакции
Save point
Set translation
Создание точки отката внутри групп
транзакций
Назначение имени транзакции
7.
DDL – язык определенияданных
8.
ЗадачаСоздание таблиц и объектов в базе данных, в которых будет
храниться информация о сущностях предметной области.
Вход: логическая модель базы данных
Выход: скрипт для создания таблиц на языке определения данных
DDL (Data Definition Language).
9.
Числовые типы данных• BIT: хранит значение от 0 до 16. Может выступать аналогом булевого типа в
языках программирования.
• TINYINT: хранит числа от 0 до 255.
• SMALLINT: хранит числа от –32 768 до 32 767.
• INT: хранит числа от –2 147 483 648 до 2 147 483 647.
• BIGINT: хранит очень большие числа от -9 223 372 036 854 775 808 до 9 223
372 036 854 775 807.
• DECIMAL: хранит числа c фиксированной точностью. Может принимать два
параметра precision и scale: DECIMAL(precision, scale).
Precision представляет максимальное количество цифр, которые может
хранить число. Это значение должно находиться в диапазоне от 1 до 38. По
умолчанию оно равно 18.
Scale представляет максимальное количество цифр, которые может
содержать число после запятой. Это значение должно находиться в
диапазоне от 0 до значения параметра precision. По умолчанию оно равно 0.
10.
Числовые типы данных• NUMERIC: данный тип аналогичен типу DECIMAL.
• SMALLMONEY: хранит дробные значения от -214 748.3648 до 214 748.3647.
Предназначено для хранения денежных величин.
• MONEY: хранит дробные значения от -922 337 203 685 477.5808 до 922 337
203 685 477.5807.
• FLOAT: хранит числа от –1.79E+308 до 1.79E+308.
Может иметь форму определения в виде FLOAT(n), где n представляет число
бит, которые используются для хранения десятичной части числа. По
умолчанию n = 53.
• REAL: хранит числа от –3.40E+38 до 3.40E+38.
11.
Типы данных, представляющие дату и время• DATE: хранит даты от 0001-01-01 (1 января 0001 года) до 9999-12-31 (31 декабря 9999 года).
• TIME: хранит время в диапазоне от 00:00:00.0000000 до 23:59:59.9999999.
Может иметь форму TIME(n), где n представляет количество цифр от 0 до 7 в дробной части
секунд.
• DATETIME: хранит даты и время от 01/01/1753 до 31/12/9999.
• DATETIME2: хранит даты и время в диапазоне от 01/01/0001 00:00:00.0000000 до 31/12/9999
23:59:59.9999999.
Может иметь форму DATETIME2(n), где n представляет количество цифр от 0 до 7 в
дробной части секунд.
• SMALLDATETIME: хранит даты и время в диапазоне от 01/01/1900 до 06/06/2079, то есть
ближайшие даты.
• DATETIMEOFFSET: хранит даты и время в диапазоне от 0001-01-01 до 9999-12-31.
Сохраняет детальную информацию о времени с точностью до 100 наносекунд.
12.
Строковые типы данных• CHAR: хранит строку длиной от 1 до 8 000 символов. Количество символов,
которое может хранить столбец, передается в скобках. Например, для
столбца с типом CHAR(10) будет выделено 10 байт. И если мы сохраним в
столбце строку менее 10 символов, то она будет дополнена пробелами.
• VARCHAR: хранит строку. Не подходит для многих языков, так как хранит
символы не в кодировке Unicode. В отличие от типа CHAR если в столбец с
типом VARCHAR(10) будет сохранена строка в 5 символов, то в столбце
будет сохранено именно пять символов.
• NCHAR: хранит строку в кодировке Unicode длиной от 1 до 4 000 символов.
• NVARCHAR: хранит строку в кодировке Unicode. На каждый символ
выделяется 2 байта. Можно задать конкретный размер от 1 до 4 000
символов. Если строка должна иметь больше 4000 символов, то задается
размер MAX, а на хранение строки может выделяться до 2 Гб.
13.
Определение таблиц14.
Создание таблицыCREATE TABLE имя_таблицы (
имя_столбца тип_данных [,
имя_столбца тип_данных] …
);
15.
Создание таблицы заказовCREATE TABLE [Order]
[id_order] INT,
[o_date] DATE,
[o_cost] MONEY,
[o_status] NVARCHAR(30)
);
16.
Создать таблицу products• id_product,
• id_category,
• p_name,
• p_price
17.
Клонирование таблицSELECT клонируемые_столбцы
INTO название_новой_таблицы
FROM название_исходной_таблицы;
SELECT *
INTO [New_products]
FROM [Products];
18.
Модификация таблиц19.
Переименование таблицMySQL:
ALTER TABLE Order RENAME Orders
RENAME TABLE Order TO Orders
TSQL:
EXEC sp_rename 'Order', 'Orders’;
Переименование столбцов таблицы:
EXEC sp_rename 'Orders.o_date', 'order_date', 'COLUMN';
20.
Добавление столбцовALTER TABLE имя_таблицы
ADD имя_столбца тип_данных [,
имя_столбца тип_данных]…;
ALTER TABLE [Products]
ADD [id_buyer] INT, [id_seller] INT;
21.
Удаление столбцовALTER TABLE имя_таблицы
DROP COLUMN имя_столбца[,
имя_столбца]…;
ALTER TABLE [Products]
DROP COLUMN [id_buyer], [id_seller];
22.
Изменение определения столбцаALTER TABLE имя_таблицы
ALTER COLUMN имя_столбца тип_данных;
ALTER TABLE [New_products]
ALTER COLUMN [p_price] INT;
23.
Удаление таблицDROP TABLE имя_таблицы [, имя_таблицы]…;
DROP TABLE [New_products], [New_Orders];
24.
Ограничения целостности25.
Типы ограничений целостности1. PRIMARY KEY
2. [NOT] NULL
3. DEFAULT
4. UNIQUE
5. FOREIGN KEY
6. CHECK
26.
Свойства первичного ключа• отношение (таблица) может иметь только один
первичный ключ;
• первичный ключ должен быть уникальным;
• первичный ключ должен быть минимальным, т.е.
включать минимальное число атрибутов, необходимых
для однозначной идентификации кортежа;
• первичный ключ не может содержать нулевых значений;
• значение первичного ключа не должно меняться при
смене состояний базы данных.
27.
Ограничения первичных ключейимя_столбца тип_данных PRIMARY KEY;
имя_столбца тип_данных PRIMARY KEY IDENTITY(1, 1);
CREATE TABLE [Customers] (
[id_customer] INT PRIMARY KEY IDENTITY(1, 1),
[c_age] INT,
[c_first_name] NVARCHAR(30),
[c_last_name] NVARCHAR(30),
[c_email] VARCHAR(30),
[c_phone] VARCHAR(18)
);
28.
Добавление первичного ключаALTER TABLE имя_таблицы
ADD PRIMARY KEY(имя_столбца);
CREATE TABLE [Orders] (
[id_order] INT IDENTITY(1, 1),
[customer_id] INT,
[o_date] DATE
);
ALTER TABLE [Orders]
ADD PRIMARY KEY([id_order]);
29.
Добавление ограничений с именамиALTER TABLE имя_таблицы
ADD CONSTRAINT имя_ограничения PRIMARY KEY (имя_столбца);
CREATE TABLE [Products] (
[id_product] INT IDENTITY(1, 1),
[p_price] INT,
);
ALTER TABLE [Products]
ADD CONSTRAINT [PK_Products_Id] PRIMARY KEY ([id_product]);
30.
Ограничение на отсутствие значенийимя_столбца тип_данных [NOT] NULL;
CREATE TABLE [Categories] (
[id_category] INT PRIMARY KEY IDENTITY(1, 1),
[c_name] NVARCHAR(25) NOT NULL,
[c_description] NVARCHAR(25) NULL
);
31.
Определение значений по умолчаниюимя_столбца тип_данных
DEFAULT значение_по_умолчанию;
ALTER TABLE [Orders]
ADD [o_status] NVARCHAR(25) NOT NULL
DEFAULT N'В обработке’;
ALTER TABLE [Categories]
ADD DEFAULT N'Описание' FOR [c_description];
32.
Ограничение уникальностиимя_столбца тип_данных UNIQUE;
ALTER TABLE [Customers]
ADD UNIQUE([c_email], [c_phone]);
33.
Свойства внешних ключей• Внешний ключ должен содержать такое же число колонок,
такого же типа и в том же порядке следования, что и
соответствующий первичный ключ.
• Имена колонок внешнего ключа и их значения по
умолчанию могут отличаться от используемых в
соответствующем первичном ключе (в том числе иметь
NULL-значения).
• Таблица может иметь любое число внешних ключей.
34.
Ограничения внешних ключейFOREIGN KEY REFERENCES имя_родительской_таблицы
(имя_столбца)
CREATE TABLE [Orders] (
[id_order] INT PRIMARY KEY IDENTITY(1, 1),
[customer_id] INT FOREIGN KEY REFERENCES
[Customers]([id_customer]),
[product_id] INT,
[o_date] DATE NOT NULL
);
35.
Добавление внешнего ключаFOREIGN KEY(имя_столбца_дочерней_таблицы)
REFERENCES имя_родительской_таблицы (имя_столбца);
ALTER TABLE [Orders]
ADD FOREIGN KEY([product_id])
REFERENCES [Products]([id_product]);
36.
Добавление ограничений с именамиALTER TABLE имя_таблицы
ADD CONSTRAINT имя_ограничения
FOREIGN KEY(имя_столбца_дочерней_таблицы)
REFERENCES имя_родительской_таблицы (имя_столбца);
ALTER TABLE [Products]
ADD CONSTRAINT [FK_Category_Id]
FOREIGN KEY ([id_category])
REFERENCES [Categories]([id_category]);
37.
Ограничение на значениеимя_столбца тип_данных CHECK (условие);
CREATE TABLE [Users] (
[id_user] INT PRIMARY KEY IDENTITY(1, 1),
[u_name] NVARCHAR(25) NOT NULL,
[u_phone] NVARCHAR(18) CHECK([u_phone] LIKE '+_ (___) ___-__-__')
);
ALTER TABLE [Customers]
ADD [c_age] INT
CONSTRAINT CHK_Age CHECK([c_age] >= 18);
38.
Удаление ограниченийALTER TABLE имя_таблицы
DROP ограничение_целостности;
ALTER TABLE [Customers]
DROP [CHK_Age];
39.
DQL – язык запросов кданным
40.
Создать базу данныхProducts(id_product, p_name, p_description, p_price,
p_photo, category_id)
Characteristic(id_feature, f_name, f_type)
Values(id_value, product_id, feature_id, value)
Categories(id_category, c_name, c_description,
id_parent)
41.
Типы операций• Выборка (Restriction)
• Проекция (Projection)
• Соединение (Join)
• Объединение (Union)
42.
Операции выборкиОперация выборки позволяет получить все строки
(записи) либо часть строк одной таблицы.
SELECT *
FROM имя_таблицы;
SELECT *
FROM имя_таблицы
WHERE условие_выборки;
SELECT *
FROM [Products];
SELECT *
FROM [Products]
WHERE [p_price]=1000;
43.
Операции проекцииОперация проекции позволяет выделить
подмножество столбцов таблицы.
SELECT название_столбца, …
FROM имя_таблицы;
SELECT [p_name]
FROM [Products];
SELECT [p_name], [p_price]
FROM [Products];
44.
Операция выборки и проекцииSELECT название_столбца, …
FROM имя_таблицы;
WHERE условие_выборки;
SELECT [p_name], [p_description], [p_price]
FROM [Products]
WHERE [p_price]=250;
45.
Использование квалификатора ASSELECT название_столбца AS псевдоним, …
FROM имя_таблицы;
WHERE условие_выборки;
SELECT [f_name] AS [Название характеристики],
[f_type] AS [Тип характеристики]
FROM [Characteristic]
WHERE [f_name]=N'Характеристика 4';
46.
Агрегирующие функцииК агрегирующим функциям относятся:
1. функции вычисления суммы (SUM);
2. максимального (МАХ) и минимального (MIN)
значений столбцов;
3. арифметического среднего (AVG);
4. количества строк, удовлетворяющих заданному
условию (COUNT).
47.
Правила работы агрегатных функций• Если в результате выполнения запроса не получено ни одной
строки, то исходные данные для вычисления любой из агрегатных
функций отсутствуют. В этом случае результатом выполнения
функций COUNT будет нуль, а результатом всех других функций NULL.
• Аргумент агрегатной функции не может сам содержать
агрегатные функции (функция от функции). Т.е. в одном запросе
нельзя, скажем, получить максимум средних значений.
• Результат выполнения функции COUNT есть целое
число (INTEGER). Другие агрегатные функции наследуют типы
данных обрабатываемых значений.
• Если при выполнении функции SUM был получен результат,
превышающий максимальное значение используемого типа
данных, возникает ошибка.
48.
Агрегирующие функцииSELECT COUNT(*) AS [Количество строк в таблице],
SUM([p_price]) AS [Суммарная цена продуктов],
MIN([p_price]) AS [Минимальная цена продуктов],
MAX([p_price]) AS [Максимальная цена продуктов],
AVG([p_price]) AS [Средняя цена продуктов]
FROM [Products];
49.
Оператор WHERE• сравнение с использованием реляционных операторов
=
равно
<> не равно
!=
не равно
>
больше
<
меньше
>= больше или равно
<= меньше или равно
• BETWEEN
• IN
• LIKE
• IS NULL
50.
Операторы сравненияПродукты, которые стоят 200 рублей.
SELECT [p_name] AS [Название продукта], [p_price] AS [Цена продукта]
FROM [Products]
WHERE [p_price]=200;
Продукты, которые стоят больше 200 рублей.
SELECT [p_name] AS [Название продукта], [p_price] AS [Цена продукта]
FROM [Products]
WHERE [p_price]>200;
Описание и цена продукта, с названием ‘название 1’
SELECT [p_price] AS [Цена продукта], [p_description] AS [Описание продукта]
FROM [Products]
WHERE [p_name]=N'название 1';
51.
Операторы сравненияПродукты, относящиеся к категории ‘Категория 5’.
SELECT [p_name] AS [Название продукта],
[p_description] AS [Описание продукта]
FROM [Products]
WHERE [category_id] = (
SELECT [id_category]
FROM [Categories]
WHERE [c_name] = N'Категория 5'
);
52.
Оператор BETWEENСписок продуктов с ценами от 200 до 300
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта],
[p_description] AS [Описание продукта]
FROM [Products]
WHERE [p_price]>=200 AND [p_price]<=300;
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта],
[p_description] AS [Описание продукта]
FROM [Products]
WHERE [p_price] BETWEEN 200 AND 300;
53.
Оператор BETWEENСписок продуктов с ценами менее 200 и более 300
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта],
[p_description] AS [Описание продукта]
FROM [Products]
WHERE [p_price] NOT BETWEEN 200 AND 300;
54.
Оператор LIKEСписок продуктов, названия которых начинается на букву ‘н’
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта]
FROM [Products]
WHERE [p_name] LIKE N'н%’;
Список продуктов, названия которых начинается на любую букву кроме ‘к’
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта]
FROM [Products]
WHERE [p_name] NOT LIKE N'к%';
55.
Оператор LIKEСписок продуктов, 2 и 4 буква которых ‘а’
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта]
FROM [Products]
WHERE [p_name] LIKE N'_а__а%';
56.
Оператор IS NULLВсе корневые категории продуктов
SELECT [c_name] AS [Название категории]
FROM [Categories]
WHERE [id_parent] IS NULL;
Все категории с заполненным описанием
SELECT [c_name] AS [Название категории],
[c_description] AS [Описание категории]
FROM [Categories]
WHERE [c_description] IS NOT NULL;
57.
Комбинации операторовВсе продукты, которые стоят больше 200 рублей, имеют заполненное описание и 2 буква названия – ‘а’
SELECT [p_name]
[p_price]
AS [Название продукта],
AS [Цена продукта],
[p_description] AS [Описание продукта]
FROM [Products]
WHERE [p_price] > 200
AND
[p_description] IS NOT NULL
AND
[p_name] LIKE N'_а%’;
Все продукты, цена которых не равна 200 рублей, или описание которых заполнено
SELECT [p_name]
[p_price]
AS [Название продукта],
AS [Цена продукта],
[p_description] AS [Описание продукта]
FROM [Products]
WHERE [p_price] != 200 OR
[p_description] IS NOT NULL;
58.
Оператор INВсе продукты относящиеся к 1, 3 или 5 категории
SELECT [p_name]
[p_price]
AS [Название продукта],
AS [Цена продукта],
[p_description] AS [Описание продукта]
FROM [Products]
WHERE [category_id] IN (1, 3, 5);
Все продукты не относящиеся к 1, 3 или 5 категории
SELECT [p_name]
[p_price]
AS [Название продукта],
AS [Цена продукта],
[p_description] AS [Описание продукта]
FROM [Products]
WHERE [category_id] NOT IN (1, 3, 5);
59.
Оператор INВсе продукты относящиеся к категориям с заполненным описанием
[p].[p_name]
AS [Название продукта],
[p].[p_price]
AS [Цена продукта],
[p].[p_description] AS [Описание продукта],
[c].[c_name]
AS [Категория продукта]
FROM [Products] AS [p],
(
SELECT [id_category], [c_name]
FROM [Categories]
WHERE [c_description] IS NOT NULL
) AS [c]
WHERE [p].[category_id] IN ([c].[id_category]);
SELECT
60.
Оператор DISTINCTВывести все названия продуктов, исключив дублирование
SELECT DISTINCT [p_name] AS [Название продукта]
FROM [Products];
DISTINCT исключает дублирование всех атрибутов проекции
SELECT DISTINCT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта]
FROM [Products];
61.
Оператор ORDER BYВсе продукты отсортированные по возрастанию цены
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта]
FROM [Products]
ORDER BY [p_price] ASC;
Все продукты отсортированные по убыванию цены
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта]
FROM [Products]
ORDER BY [p_price] DESC;
62.
Оператор ORDER BYВсе продукты отсортированные с начала по цене, потом по названию
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта]
FROM [Products]
ORDER BY [p_price] DESC, [p_name] ASC;
SELECT [p_name] AS [Название продукта],
[p_price] AS [Цена продукта]
FROM [Products]
ORDER BY [p_price] DESC, [p_name] DESC;
63.
ЗаданиеСоздайте в базе данных таблицу для хранения информации о пользователях.
Users (id_user, u_first_name, u_last_name, u_email, u_login,
u_password)
Ограничения:
1) Атрибут id_user является первичным ключом.
2) Атрибуты для хранения имени, логина и пароля должны быть
обязательно заполнены.
3) Атрибуты для хранения почты, логина и пароля не должны
содержать одинаковых значений
Заполните таблицу данными.
64.
Оператор CONCATВывести полное имя пользователя и его почту.
SELECT CONCAT([u_first_name], [u_last_name], [u_middle_name]) AS [Полное имя],
[u_email] AS [Почта]
FROM [Users];
SELECT CONCAT([u_first_name], ' ', [u_last_name], ' ', [u_middle_name]) AS [Полное имя],
[u_email] AS [Почта]
FROM [Users];
SELECT [u_first_name] + ' ' + [u_last_name] + ' ' + [u_middle_name] AS [Полное имя],
[u_email] AS [Почта]
FROM [Users];
65.
Оператор GROUP BYВывести коды категорий продуктов, количество продуктов в категории и суммарную цену всех
продуктов в категории.
SELECT [category_id]
COUNT(*)
AS [Код категории],
AS [Количество продуктов в категории],
SUM([p_price]) AS [Суммарная цена продуктов в категории]
FROM [Products]
WHERE [category_id] IS NOT NULL
GROUP BY [category_id];
SELECT COUNT(*)
AS [Количество продуктов в категории],
SUM([p_price]) AS [Суммарная цена продуктов в категории]
FROM [Products]
WHERE [category_id] IS NOT NULL
GROUP BY [category_id];
66.
Оператор HAVINGВывести коды категорий продуктов, количество продуктов в категории и
суммарную цену всех продуктов в категории, при условии что в категории
более 1 продукта.
SELECT [category_id]
AS [Код категории],
COUNT(*)
AS [Количество продуктов в категории],
SUM([p_price]) AS [Суммарная цена продуктов в категории]
FROM [Products]
WHERE [category_id] IS NOT NULL
GROUP BY [category_id]
HAVING COUNT(*)>1;
67.
Общая структура запросаSELECT [DISTINCT | ALL] {* | [<выражение для столбца> [[AS]
<псевдоним>]] [,…]}
FROM <имя таблицы> [[AS] <псевдоним>] [,…]
[WHERE <предикат>]
[[GROUP BY <список столбцов>]
[HAVING <условие на агрегатные значения>] ]
[ORDER BY <список столбцов>]
68.
Задание[c].[c_name]
AS [Название категории],
COUNT(*)
AS [Количество продуктов в категории],
AS [Средняя
продуктов вкатегорий,
категории]
Написать AVG([p].[p_price])
запрос, который
выводитценаназвания
FROM
[Products]продуктов
AS [p],
количество
в категории и среднюю цену
(
продуктов
в
категории,
при
условии,
что
в
категории
есть
SELECT [id_category], [c_name]
как минимум
2 товара, сгруппировать результат по
FROM [Categories]
названиям
) AS [c]категорий, отсортировать по средней цене по
WHERE [p].[category_id]=[c].[id_category]
возрастанию.
GROUP BY [c].[c_name]
HAVING COUNT(*) >= 2
ORDER BY [Средняя цена продуктов в категории] ASC;
SELECT
69.
DML – языкманипулирования данными
70.
Вставка новых данныхINSERT таблица(перечень_полей) VALUES
(перечень_значений1),
(перечень_значений2),
…
(перечень_значенийN);
INSERT [Categories]([c_name], [c_description], [id_parent]) VALUES
(N'Категория 1', N'Описание 1', NULL),
(N'Категория 2', N'Описание 2', 1),
(N'Категория 3', NULL, 1),
(N'Категория 4', N'Описание 3', 2),
(N'Категория 5', NULL, NULL);
71.
Вставка значений со счетчикомSET IDENTITY_INSERT имя_таблицы ON
SET IDENTITY_INSERT имя_таблицы OFF
SET IDENTITY_INSERT [Characteristic] ON
INSERT [Characteristic]([id_feature], [f_name], [f_type]) VALUES
(1, N'Характеристика 1', N'Тип 1'),
(2, N'Характеристика 2', N'Тип 2'),
(3, N'Характеристика 3', N'Тип 3'),
(4, N'Характеристика 4', NULL),
(5, N'Характеристика 5', NULL);
SET IDENTITY_INSERT [Characteristic] OFF
72.
Добавить таблицыOrders(id_order, o_date, o_cost, o_status, buyer_id)
Order_history(id_history, order_id, o_date, o_cost)
73.
Вставка значений с условиемДобавить в архив все заказы со статусом ‘Закрыт’
SELECT * FROM [Order_history];
INSERT INTO [Order_history]([order_id], [o_date], [o_cost])
SELECT [id_order], [o_date], [o_cost]
FROM [Orders]
WHERE [o_status]=N'Закрыт’;
SELECT * FROM [Order_history];
74.
Обновление данныхUPDATE имя_таблицы
SET имя_столбца=новое_значение, имя_столбца=новое_значение, …
WHERE условие_выборки
SELECT * FROM [Products];
UPDATE [Products]
SET [p_price]=1000, [p_description]=N'Новое описание продукта'
WHERE [p_name]=N'название 3’;
SELECT * FROM [Products];
75.
Обновление данныхUPDATE псевдоним
SET имя_столбца=новое_значение
FROM имя_таблицы AS псевдоним;
SELECT * FROM [Values];
UPDATE [V]
SET
[feature_id]=(SELECT [id_feature] FROM [Characteristic] WHERE [f_name]=N'Характеристика 2'),
[value]=N'Новое значение характеристики'
FROM [Values] AS [V]
WHERE [id_value]=10;
SELECT * FROM [Values];
76.
Обновление данныхДобавить в таблицу новый столбец – цена продукта со скидкой.
Рассчитать стоимость всех продуктов со скидкой, если считать, что
стандартная скидка – 5%.
ALTER TABLE [Products]
ADD [p_cost_discount] MONEY;
UPDATE [Products]
SET [p_cost_discount]=[p_price]*0.95;
77.
Обновление данныхДобавить наценку в 15% на все продукты, принадлежащие категории – ‘Категория 1’.
SELECT * FROM [Products];
UPdATE [Products] SET
[p_price]=[p_price]*1.15
WHERE [category_id]=(
SELECT [id_category]
FROM [Categories]
WHERE [c_name]=N'Категория 1'
);
UPDATE [Products]
SET [p_cost_discount]=[p_price]*0.95;
SELECT * FROM [Products];
78.
Удаление данныхDELETE FROM имя_таблицы WHERE условие_выборки;
Удалить заказы из таблицы заказов, у которых статус заказа –
‘Закрыт’
SELECT * FROM [Orders];
DELETE FROM [Orders]
WHERE [o_status]=N'Закрыт’;
SELECT * FROM [Orders];
Запрос выдаст ошибку, потому что мы пытаемся удалить заказы, на
которые есть ссылка в таблице истории заказов.
79.
Удаление данныхОчищаем таблицу истории заказов.
SELECT * FROM [Order_history];
-- DELETE FROM [Order_history]; -TRUNCATE TABLE [Order_history];
SELECT * FROM [Order_history];