Материал: BD_Laboratornyi_774_praktikum

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

/* выборка данных с формированием вычисляемого столбца Стоимость */

SELECT Товар.Наименование, Товар.Цена, Заказ.Количество,

Товар.ЕдиницаИзм, Товар.Цена * Заказ.Количество AS Стоимость

FROM Товар

INNER JOIN Заказ ON Товар.КодТовара = Заказ.КодТовара

ORDER BY Стоимость

/* подсчет итоговых данных для столбца Количество в таблице Заказ */

SELECT

SUM(Количество) AS [Общее кол-во], AVG(Количество) AS Среднее,

MAX(Количество) AS Максимум, MIN(Количество) AS Минимум

FROM Заказ

/* выборка данных с их группировкой по столбцу КодТовара и подсчетом для

каждой группы итоговых данных */

SELECT КодТовара,

SUM(Количество) AS [Общее кол-во], AVG(Количество) AS Среднее,

MAX(Количество) AS Максимум, MIN(Количество) AS Минимум

FROM Заказ

GROUP BY КодТовара

/* предыдущая операция выборки данных c группировкой, дополненная условием отбора данных (предложение WHERE) и условием отбора итоговых данных (предложение HAVING) */

SELECT КодТовара,

SUM(Количество) AS [Общее кол-во], AVG(Количество) AS Среднее,

MAX(Количество) AS Максимум, MIN(Количество) AS Минимум

FROM Заказ

WHERE Количество > 5

GROUP BY КодТовара

HAVING SUM(Количество) < 30

/* выборка данных из представления Запрос1 */

SELECT *

FROM Запрос1

WHERE ЕдиницаИзм = 'штука'

Примеры выборки некоторых системных данных:

/* Список учетных записей, которым разрешен доступ к серверу */

USE master -- переключаемся на системную базу данных master

SELECT name, dbname, password, language

FROM syslogins

USE Склад_ХХХ -- переключаемся обратно на базу данных Склад_ХХХ

/* Список учетных записей, включенных в фиксированные роли сервера */

EXEC sp_helpsrvrolemember

/* Список пользователей базы данных Склад_ХХХ */

EXEC sp_helpuser

/* Список ролей (как фиксированных, так и пользовательских) базы данных Склад_ХХХ */

EXEC sp_helprole

/* Членство ролей и пользователей в ролях базы данных Склад_ХХХ */

EXEC sp_helprolemember

Раздел II. Обновление данных в таблицах и представлениях.

Синтаксис команды обновления данных в таблице или представлении (см. [1], стр. 1130):

UPDATE         { table_name WITH ( < table_hint_limited > [ ...n ] )          | view_name | rowset_function_limited }         SET         { column_name = { expression | DEFAULT | NULL }         | @variable = expression | @variable = column = expression } [ ,...n ]     { { [ FROM { < table_source > } [ ,...n ] ]    [ WHERE  < search_condition > ] }         | [ WHERE CURRENT OF { { [ GLOBAL ] cursor_name } | cursor_variable_name } ] }         [ OPTION ( < query_hint > [ ,...n ] ) ]

< table_source > ::=     table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]     | view_name [ [ AS ] table_alias ]     | rowset_function [ [ AS ] table_alias ]     | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]     | < joined_table >

< joined_table > ::=     < table_source > < join_type > < table_source > ON < search_condition >     | < table_source > CROSS JOIN < table_source >     | < joined_table >

< join_type > ::=     [ INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } ]     [ < join_hint > ]     JOIN

< table_hint_limited > ::=     {    FASTFIRSTROW         | HOLDLOCK         | PAGLOCK         | READCOMMITTED         | REPEATABLEREAD         | ROWLOCK         | SERIALIZABLE         | TABLOCK         | TABLOCKX         | UPDLOCK     }

< table_hint > ::=     {    INDEX ( index_val [ ,...n ] )         | FASTFIRSTROW         | HOLDLOCK         | NOLOCK         | PAGLOCK         | READCOMMITTED         | READPAST         | READUNCOMMITTED         | REPEATABLEREAD         | ROWLOCK         | SERIALIZABLE         | TABLOCK         | TABLOCKX         | UPDLOCK     }

< query_hint > ::=     {    { HASH | ORDER } GROUP         | { CONCAT | HASH | MERGE } UNION         | {LOOP | MERGE | HASH } JOIN         | FAST number_rows         | FORCE ORDER         | MAXDOP         | ROBUST PLAN         | KEEP PLAN     }

Например, в таблице Клиент можно заменить все значения NULL в столбце КодРегиона на значение 301 с помощью следующей команды:

UPDATE Клиент SET КодРегиона = 301 WHERE КодРегиона IS NULL

Раздел III. Удаление данных из таблиц и представлений.

Синтаксис команды удаления данных из таблицы или представления (см. [1], стр. 1134):

DELETE     [ FROM ] { table_name WITH ( < table_hint_limited > [ ...n ] )          | view_name | rowset_function_limited }         [ FROM { < table_source > } [ ,...n ] ]

    [ WHERE         { < search_condition >         | { [ CURRENT OF                 { { [ GLOBAL ] cursor_name }                     | cursor_variable_name                 }             ] }         }     ]     [ OPTION ( < query_hint > [ ,...n ] ) ]

< table_source > ::=     table_name [ [ AS ] table_alias ] [ WITH ( < table_hint > [ ,...n ] ) ]     | view_name [ [ AS ] table_alias ]     | rowset_function [ [ AS ] table_alias ]     | derived_table [ AS ] table_alias [ ( column_alias [ ,...n ] ) ]     | < joined_table >

< joined_table > ::=     < table_source > < join_type > < table_source > ON < search_condition >     | < table_source > CROSS JOIN < table_source >     | < joined_table >

< join_type > ::=     [ INNER | { { LEFT | RIGHT | FULL } [OUTER] } ]     [ < join_hint > ]     JOIN

< table_hint_limited > ::=     { FASTFIRSTROW         | HOLDLOCK         | PAGLOCK         | READCOMMITTED         | REPEATABLEREAD         | ROWLOCK         | SERIALIZABLE         | TABLOCK         | TABLOCKX         | UPDLOCK     }

< table_hint > ::=     { INDEX ( index_val [ ,...n ] )         | FASTFIRSTROW         | HOLDLOCK         | NOLOCK         | PAGLOCK         | READCOMMITTED         | READPAST         | READUNCOMMITTED         | REPEATABLEREAD         | ROWLOCK         | SERIALIZABLE         | TABLOCK         | TABLOCKX         | UPDLOCK     }

< query_hint > ::=     { { HASH | ORDER } GROUP         | { CONCAT | HASH | MERGE } UNION         | FAST number_rows         | FORCE ORDER         | MAXDOP         | ROBUST PLAN         | KEEP PLAN     }

Например, в таблице Заказ можно удалить все строки, в которых значение поля СрокПоставки не относится к текущему году, следующим образом:

SET DATEFORMAT dmy -- задаем привычный формат даты: день.месяц.год

DELETE FROM Заказ WHERE СрокПоставки < '01.01.2013' GO

Раздел IV. Изменение структуры таблицы.

Синтаксис команды изменения структуры таблицы (см. [1], стр. 970):

ALTER TABLE table { [ ALTER COLUMN column_name     { new_data_type [ ( precision [ , scale ] ) ]         [ COLLATE < collation_name > ]         [ NULL | NOT NULL ]         | {ADD | DROP } ROWGUIDCOL }     ]     | ADD { [ < column_definition > ] |  column_name AS computed_column_expression } [ ,...n ]     | [ WITH CHECK | WITH NOCHECK ] ADD  { < table_constraint > } [ ,...n ]     | DROP { [ CONSTRAINT ] constraint_name | COLUMN column } [ ,...n ]     | { CHECK | NOCHECK } CONSTRAINT { ALL | constraint_name [ ,...n ] }     | { ENABLE | DISABLE } TRIGGER { ALL | trigger_name [ ,...n ] } }

< column_definition > ::=     { column_name data_type }     [ [ DEFAULT constant_expression ] [ WITH VALUES ]     | [ IDENTITY [ (seed , increment ) [ NOT FOR REPLICATION ] ] ]         ]     [ ROWGUIDCOL ]     [ COLLATE < collation_name > ]     [ < column_constraint > ] [ ...n ]

< column_constraint > ::=     [ CONSTRAINT constraint_name ]     { [ NULL | NOT NULL ]         | [ { PRIMARY KEY | UNIQUE }             [ CLUSTERED | NONCLUSTERED ]             [ WITH FILLFACTOR = fillfactor ]             [ ON { filegroup | DEFAULT } ]             ]         | [ [ FOREIGN KEY ]             REFERENCES ref_table [ ( ref_column ) ]             [ ON DELETE { CASCADE | NO ACTION } ]             [ ON UPDATE { CASCADE | NO ACTION } ]             [ NOT FOR REPLICATION ]             ]         | CHECK [ NOT FOR REPLICATION ]             ( logical_expression )     }

< table_constraint > ::=     [ CONSTRAINT constraint_name ]     { [ { PRIMARY KEY | UNIQUE }         [ CLUSTERED | NONCLUSTERED ]         { ( column [ ,...n ] ) }         [ WITH FILLFACTOR = fillfactor ]         [ ON {filegroup | DEFAULT } ]         ]         |    FOREIGN KEY             [ ( column [ ,...n ] ) ]             REFERENCES ref_table [ ( ref_column [ ,...n ] ) ]             [ ON DELETE { CASCADE | NO ACTION } ]             [ ON UPDATE { CASCADE | NO ACTION } ]             [ NOT FOR REPLICATION ]         | DEFAULT constant_expression             [ FOR column ] [ WITH VALUES ]         |    CHECK [ NOT FOR REPLICATION ]             ( search_conditions )     }

Примеры использования команды изменения структуры таблицы:

/* Добавление новых полей ГОСТ и Размер в таблицу Товар */

ALTER TABLE Товар ADD ГОСТ VARCHAR(20) NULL

ALTER TABLE Товар ADD Размер INT NULL

GO

/* Изменение типа данных поля Размер в таблице Товар с INT на TINYINT */

ALTER TABLE Товар ALTER COLUMN Размер TINYINT NULL

GO

/* Установка проверочного ограничения для поля Размер в таблице Товар */

ALTER TABLE Товар ADD CONSTRAINT CK_Товар_Размер

CHECK (Размер BETWEEN 36 AND 46)

GO

/* Удаление столбца ГОСТ из таблицы Товар */

ALTER TABLE Товар DROP COLUMN ГОСТ

GO

/* Удаление столбца Размер из таблицы Товар (сначала удаляется проверочное

ограничение) */

ALTER TABLE Товар DROP CONSTRAINT CK_Товар_Размер

ALTER TABLE Товар DROP COLUMN Размер

GO

/* Удаление ограничения внешнего ключа FK_Товар_Валюта из таблицы Товар */

ALTER TABLE Товар DROP CONSTRAINT FK_Товар_Валюта

/* Добавление ограничения внешнего ключа FK_Товар_Валюта в таблицу Товар */

ALTER TABLE Товар ADD CONSTRAINT FK_Товар_Валюта FOREIGN KEY

(КодВалюты) REFERENCES Валюта ON UPDATE CASCADE

GO