MS SQL Server 2018 МЕТОДИЧЕСКИЕ УКАЗАНИЯ к выполнению лабораторных работ по теме «Базы данных»
26
MS SQL Server 2018
МЕТОДИЧЕСКИЕ УКАЗАНИЯ
к выполнению лабораторных работ в разделе «Базы данных»
Оглавление
Введение ………………………………………………….……………………......................... | 4 |
Лабораторная работа №1. Создание баз данных в среде MS SQL Server 2018……………. | 4 |
Лабораторная работа № 2. Манипуляция данными в среде MS SQL Server 2018……….... | 7 |
Лабораторная работа №3. Создание запросов на языке TRANSACT-SQL………………... | 14 |
Лабораторная работа № 4. Итоговая работа………………………………………………… | 17 |
Краткий справочник по операциям T-SQL.………………..………………………………… | 23 |
Библиографический список ……..……………………………………………........................ | 28 |
Введение
Данные методические указания представляют собой руководство к лабораторным занятиям по информатике по разделу «Базы данных». В него включены четыре лабораторные работы по теме «MS SQL Server 2018» раздела БД.
В описаниях лабораторных работ содержится краткий теоретический материал для подготовки к работе, приводятся примеры листинга на языке запросов SQL. Описание каждой лабораторной работы содержит задания для самостоятельного выполнения, требования к отчету и контрольные вопросы.
ВАЖНО!!!
Перед выполнением лабораторных работ следует создать рабочую папку для хранения файлов, получаемых при выполнении лабораторных работ. Эта папка должна располагаться в папке \Базы данных\Группа\Ученик и соответствовать номеру выполняемой практической работы (Lab1, Lab2, Lab3, Lab4)
Лабораторная работа № 1
«СОЗДАНИЕ БАЗ ДАННЫХ В СРЕДЕ MS SQL SERVER 2018»
Цель работы: с помощью операторов языка Transact - SQL научиться создавать базы данных и совокупность связанных таблиц, принадлежащих указанной базе данных.
Дополнительные сведения:
Создание таблицы в БД реализуется оператором CREATE TABLE, который имеет синтаксис: CREATE TABLE имя_табл (с_спецификация, ...);
где с_спецификация имеет разнообразный синтаксис.
Описание столбца таблицы: имя_столбца тип_данных [NULL]
где имя_столбца – имя столбца таблицы, а тип_данных – спецификация одного из типов данных. (Необязательное ключевое слово NULL означает, что ячейкам данного столбца разрешено быть пустыми (т.е. не содержать какого-либо значения).
Описание столбца таблицы: имя_столбца тип_данных NOT NULL [DEFAULT по_умолч] [PRIMARY KEY], где конструкция NOT NULL запрещает иметь в таблице пустые ячейки в данном столбце. Конструкция PRIMARY KEY указывает, что содержимое столбца будет играть роль первичного ключа для создаваемой таблицы. Конструкция
DEFAULT по_умолч переопределяет имеющееся для столбцов каждого типа данных значение по умолчанию (например, 0 для числовых типов), используемое при добавлении в таблицу оператором INSERT INTO строк, не содержащих значений в этом столбце.
Описание первичного ключа: PRIMARY KEY имя_ключа (имя_столбца, ...)
Эта спецификация позволяет задать первичный ключ для таблицы в виде композиции содержимого нескольких столбцов.
Описание вторичного ключа: KEY имя_ключа (имя_столбца, ...)
Внешние ключи позволяют установить связи между таблицами. Внешний ключ устанавливается для столбцов из зависимой, подчиненной таблицы, и указывает на один из столбцов из главной таблицы. Как правило, внешний ключ указывает на первичный ключ из связанной главной таблицы.
Описание внешнего ключа: FOREIGN KEY (столбец1, столбец2, ... столбецN)
REFERENCES главная_таблица (столбец_главной_таблицы1, столбец_главной_таблицы2, ... столбец_главной_таблицыN)
Требования к отчету: по результатам работы представить набор SQL-скриптов, решающих задачи из раздела «Задания для самостоятельного выполнения», скриншот диаграммы БД и ответы, на контрольные вопросы, оформленные в MS Word.
Ход работы:
В среде SQL Server Management Studio работать с базой данных можно, используя операторы языка SQL. Для этого необходимо создать один или несколько запросов. Каждый запрос может содержать произвольное количество операторов языка SQL. Рассмотрим последовательность действий при создании запроса, с помощью которого будут созданы таблицы БД и связи между ними.
Для этого нужно выполнить следующее:
Открыть консоль MS SQL Managment Studio 18 (Пуск - MS SQL Server Tools 18 - MS SQL Managment Studio 18).
Подключиться к нужному серверу, нажав на кнопку Connekt.
Создать новую Базу Данных (БД). Для этого нужно:
В окне Object Explorer выбрать пункт Databases.
Нажать правую кнопку мыши и в появившемся меню выбрать пункт New Database…
На экране появится окно, позволяющее ввести основные параметры новой БД.
Ввести имя новой БД – БД1 и определить место размещения файлов – \Базы данных\Группа\Студент\Lab1.
после ввода данных нажать кнопку ОК.
Новая БД появится в списке баз данных в окне Object Explorer.
На панели инструментов нажать кнопку New Query.
В открывшееся окно ввести текст запроса:
USE БД1
CREATE TABLE Поставщики (КодПоставщика int PRIMARY KEY,
Адрес text NOT NULL,
Примечание text NOT NULL)
CREATE TABLE ФизическиеЛица (КодПоставщика int Primary KEY,
Фамилия char(20) NOT NULL,
Имя char(20) NOT NULL,
Отчество char(20) NOT NULL,
НомерСвидетельства char(10)
FOREIGN KEY (КодПоставщика) REFERENCES Поставщики(КодПоставщика))
CREATE TABLE ЮридическиеЛица (КодПоставщика int PRIMARY KEY,
Название char(20) NOT NULL,
НалоговыйНомер char(20),
FOREIGN KEY (КодПоставщика) REFERENCES Поставщики(КодПоставщика))
CREATE TABLE Договоры (НомерДоговора int IDENTITY (1,1) PRIMARY KEY,
ДатаДоговора datetime,
КодПоставщика int NOT NULL,
Комментарий text
FOREIGN KEY (КодПоставщика) REFERENCES Поставщики(КодПоставщика))
CREATE TABLE Поставлено (НомерДоговора int,
Товар char(20),
Количество decimal(4,0) NOT NULL CHECK (Количество>0),
Цена decimal(8,2) NOT NULL CHECK (Цена>0)
FOREIGN KEY (НомерДоговора) REFERENCES Договоры(НомерДоговора)
PRIMARY KEY (НомерДоговора, Товар)
Выполнить запрос. Для этого:
На панели инструментов нажать кнопку Execute.
В том случае, если текст запроса не содержит ошибок, на экране появится окно Messages с сообщением Command(s) completed successfully. В противном случае будет выведена информация об имеющихся в тексте запроса ошибках.
Проверить наличие объектов БД. Если список таблиц сразу не отобразился, нужно щелкнуть правой кнопкой мыши по имени БД и в появившемся меню выбрать пункт Refresh.
Созданный запрос закрыть и сохранить под именем SQLQuery_БД1.sql
В разделе диаграмм создать новую диаграмму, в которую добавить из списка пять
таблиц: Поставлено, Договоры, ЮридическиеЛица, ФизическиеЛица, Поставщики.
Диаграмма базы данных – это графическое представление таблиц БД с визуальным отображением связей между таблицами по внешним ключам.
Для того, чтобы в MS SQL Server построить диаграмму БД необходимо:
Открыть консоль MS SQL Managment Studio 18.
Подключиться к нужному серверу, нажав на кнопку Connekt.
Раскрыть список Databases — Наименование БД (в данном случае БД1).
На каталоге Database Diagrams нажать правой кнопкой мыши и выбрать New Database Diagram.
В окне Add table выбрать таблицы, которые необходимо включить в диаграмму для отображения.
Нажать кнопку Add.
Задания для самостоятельного выполнения
Задание 1. Создать БД «КомпьютерныйМагазин»
БД состоит из пяти таблиц:
НаименованиеПродукта (Производитель, НомерМодели, ТипПродукта).
Персональный компьютер (КодТовара, НомерМодели, ТЧ, ОЗУ, HD, Цена).
Ноутбук (КодТовара, НомерМодели,ТЧ, ОЗУ, HD, Диагональ, Цена).
Моноблок (КодТовара, НомерМодели, ТЧ, ОЗУ, HD, Диагональ, Цена).
Принтер (КодТовара, НомерМодели, Ц/Ч, ТипПринтера, Цена).
Таблица НаименованиеПродукта представляет производителя (Производитель), номер модели (НомерМодели) и тип компьютерной единицы (ПК – персональный компьютер), Ноутбук, Моноблок или Принтер). Предполагается, что в этой таблице
номера моделей уникальны для всех производителей и типов продуктов.
В таблице ПерсональныйКомпьютер для каждого номера модели, обозначающего ПК,
указаны скорость процессора – ТЧ, общий объем оперативной памяти – ОЗУ, размер
диска – НD, цена – Цена. КодТоваров являются уникальными для каждой модели ПК.
Таблица Ноутбук аналогична таблице Персональный компьютер за исключением того, что добавляется размер экрана – Диагональ (в дюймах).
Таблица Моноблок аналогична таблице Ноутбук.
В таблице Принтер для каждой модели принтера указывается, является ли он цветным – Ц/Ч (цветной; черно-белый ), тип принтера – ТипПринтера (лазерный,
струйный или матричный) и цена – Цена.
ВАЖНО!!!
НомерМодели – главный ключ в таблице НаименованиеПродукта
КодТовара – главный ключ для таблиц ПерсональныйКомпьютер, Ноутбук, Моноблок, Принтер, а НомерМодели – внешний ключ к таблице НаименованиеПродукта
Задание 2. Создать диаграмму БД «КомпьютерныйМагазин»
Контрольные вопросы:
Как с помощью операторов SQL создать новую базу данных? Как создать новую таблицу?
Как задать первичный ключ таблицы? Для чего используются диаграммы базы данных?
Как создать и сохранить новую диаграмму базы данных?
Сколько диаграмм можно создать для одной базы данных?
Укажите последовательность действий по включению в диаграмму новой таблицы?
Что такое “Ограничение внешнего ключа” ? Укажите последовательность действий
по созданию на диаграмме базы данных ограничения внешнего ключа.
Лабораторная работа № 2
«МАНИПУЛЯЦИЯ ДАННЫМИ В СРЕДЕ MS SQL SERVER 2018»
Цель: с помощью операторов языка Transact - SQL научиться вводить информацию в таблицы БД.
Дополнительные сведения:
Добавление строк в таблицу
Для добавления строк в таблицу SQL базы данных используется оператор INSERT INTO. Основные его синтаксические формы описываются следующим образом:
Добавление строки перечислением значений всех ее ячеек: INSERT INTO имя_табл VALUES (знач, ...); где знач – константное значение ячейки строки. Значения ячеек в списке должны соответствовать порядку перечисления спецификаций столбцов таблицы в операторе CREATE TABLE. Допустимо в качестве знач указывать ключевое слово NULL, что означает отсутствие значения для соответствующей ячейки строки.
Перед добавлением новой строки в таблицу СУБД проверяет допустимость перечисленных значений, используя описание столбцов таблицы из оператора CREATE TABLE.
Добавление строки с использованием списка имен столбцов: INSERT INTO имя_табл (имя_столбца, ...) VALUES (знач, ...);
Здесь списки имен столбцов и значений ячеек добавляемой строки должны быть согласованы, хотя нет никаких требований к их порядку. Допустимо опускать в списках информацию о некоторых ячейках строки, при этом ячейки, соответствующие столбцам со спецификацией NULL в операторе CREATE TABLE, будут пустыми; ячейки, соответствующие столбцам со спецификацией NOT NULL в операторе CREATE TABLE, заполняются значениями по умолчанию.
Добавление строк по результатам запроса к БД: INSERT INTO имя_табл [(имя_столбца, ...)] SELECT ...
Такой оператор дает возможность добавить в таблицу 0, 1 или сразу несколько новых строк, полученных в результате запроса к базе данных, реализуемого оператором SELECT.
Требования к отчету: по результатам работы представить набор SQL-скриптов, решающих задачи из раздела «Задания для самостоятельного выполнения», скриншоты и ответы на контрольные вопросы, оформленные в MS Word.
Ход работы:
Запросы могут содержать не только операторы DDL, но и операторы DМL.
Это позволяет реализовать основные операции манипулирования данными.
Рассмотрим последовательность действий при создании запроса, с помощью которого в таблицы созданной БД будет введена информация.
Для этого нужно выполнить следующее:
Открыть консоль MS SQL Managment Studio 18 (Пуск - MS SQL Server Tools 18 - MS SQL Managment Studio 18).
Подключиться к нужному серверу, нажав на кнопку Connekt.
На панели инструментов нажать кнопку New Query.
В открывшееся окно ввести текст запроса:
USE БД1
INSERT INTO Поставщики (КодПоставщика,Адрес,Примечание)
VALUES (1, 'г.Город1, ул.Первая,кв.1','тел. 11-11-11 ');
INSERT INTO Поставщики (КодПоставщика,Адрес,Примечание)
VALUES (2, 'г.Город2, ул.Вторая,кв.2',' ');
INSERT INTO Поставщики (КодПоставщика,Адрес,Примечание)
VALUES (3, 'г.Город3, ул.Третья,кв.4','тел. 33-33-33, 12-34-56, факс 12-33-33 ');
INSERT INTO Поставщики (КодПоставщика,Адрес,Примечание)
VALUES (4, 'г.Город4, ул.Четвертая,кв.4',' ');
INSERT INTO Поставщики (КодПоставщика,Адрес,Примечание)
VALUES (5, 'г.Город5, ул.Пятая,кв.5',' ');
INSERT INTO ФизическиеЛица VALUES (3, 'Иванов','Илья', 'Ильич', '00123897');
INSERT INTO ФизическиеЛица VALUES (1, 'Петров','Павел', 'Петрович', '12345678');
INSERT INTO ФизическиеЛица VALUES (5, 'Сидоров','Сергей', 'Степанович', '09876541');
INSERT INTO ЮридическиеЛица VALUES (2,'ООО "Интерфрут"','00123897','19848521');
INSERT INTO ЮридическиеЛица VALUES (4,'ЗАО "Транссервис"','39345678','25912578');
INSERT INTO Договоры (ДатаДоговора, КодПоставщика, Комментарий)
VALUES ('2018.09.01', 1, 'Основание - накладная № 34');
INSERT INTO Договоры (ДатаДоговора, КодПоставщика, Комментарий)
VALUES ('2018.09.01', 1, 'Основание - счет-фактура № 08-78');
INSERT INTO Договоры (ДатаДоговора, КодПоставщика, Комментарий)
VALUES ('2018.09.10', 3, 'Основание - счет-фактура № 08-178');
INSERT INTO Договоры (ДатаДоговора, КодПоставщика, Комментарий)
VALUES ('2018.09.23',3, 'Основание - заказ № 56');
INSERT INTO Договоры (ДатаДоговора, КодПоставщика, Комментарий)
VALUES ('2018.09.24', 2, 'Основание - накладная № 74');
INSERT INTO Договоры (ДатаДоговора, КодПоставщика, Комментарий)
VALUES ('2018.10.01', 1, 'Основание - счет-фактура № 09-12');
INSERT INTO Договоры (ДатаДоговора, КодПоставщика, Комментарий)
VALUES ('2018.10.02', 2, 'Основание - накладная № 85');
INSERT INTO Поставлено VALUES (1, 'Телевизор', 10, 1253.45);
INSERT INTO Поставлено VALUES (1, 'Магнитофон', 25, 655.12);
INSERT INTO Поставлено VALUES (1, 'Видеомагнитофон', 12, 722.33);
INSERT INTO Поставлено VALUES (2, 'Стереосистема', 11, 511.43);
INSERT INTO Поставлено VALUES (2, 'Магнитофон', 5, 455.14);
INSERT INTO Поставлено VALUES (2, 'Видеомагнитофон', 8, 450.67);
INSERT INTO Поставлено VALUES (1, 'Стереосистема', 12, 220.45);
INSERT INTO Поставлено VALUES (1, 'Компьютер', 24, 1554.22);
INSERT INTO Поставлено VALUES (2, 'Компьютер', 43, 1453.18);
INSERT INTO Поставлено VALUES (3, 'Телевизор', 52, 899.99);
INSERT INTO Поставлено VALUES (3, 'Магнитофон', 11, 544.00);
INSERT INTO Поставлено VALUES (3, 'Монитор', 85, 545.32);
INSERT INTO Поставлено VALUES (4, 'Телевизор', 56, 990.56);
INSERT INTO Поставлено VALUES (4, 'Магнитофон', 22, 323.19);
INSERT INTO Поставлено VALUES (4, 'Принтер', 41, 350.77);
INSERT INTO Поставлено VALUES (5, 'Телевизор', 14, 860.33);
INSERT INTO Поставлено VALUES (5, 'Магнитофон', 33, 585.67);
INSERT INTO Поставлено VALUES (5, 'Видеомагнитофон', 17, 850.12);
INSERT INTO Поставлено VALUES (4, 'Стереосистема', 27, 330.55);
INSERT INTO Поставлено VALUES (5, 'Монитор', 44, 590.23);
INSERT INTO Поставлено VALUES (6, 'Телевизор', 34, 810.15);
INSERT INTO Поставлено VALUES (6, 'Компьютер', 32, 1850.24);
INSERT INTO Поставлено VALUES (6, 'Монитор', 51, 520.95);
INSERT INTO Поставлено VALUES (7, 'Телевизор', 62, 900.58);
INSERT INTO Поставлено VALUES (7, 'Компьютер', 15, 1234.65);
INSERT INTO Поставлено VALUES (7, 'Монитор', 22, 389.75);
Выполнить запрос. Для этого:
На панели инструментов нажать кнопку Execute.
В том случае, если текст запроса не содержит ошибок, на экране появится окно Messages с сообщением Command(s) completed successfully. В противном случае будет выведена информация об имеющихся в тексте запроса ошибках.
Проверить наличие объектов БД. Если список таблиц сразу не отобразился, нужно щелкнуть правой кнопкой мыши по имени БД и в появившемся меню выбрать пункт Refresh.
Созданный запрос закрыть и сохранить под именем SQLQuery_БД2.sql
Задание для самостоятельного выполнения:
Задание. Заполните БД «КомпьютерныйМагазин» данными, приведенными в таблицах.
Таблица НаименованиеПродукта
Производитель | НомерМодели | ТипПродукта |
Т | 7200U | Ноутбук |
Т | 6300HQ | Ноутбук |
РП | 7500U | Ноутбук |
А | 7700HQ | Ноутбук |
В | Z0SL0003F | Ноутбук |
В | 7300HQ | Ноутбук |
П | 8550U | Ноутбук |
АВ | 5005U | Ноутбук |
В | E1 6010 | ПК |
В | 10400F | ПК |
А | XC-895 | ПК |
А | XC-830 | ПК |
П | F1030ur | ПК |
Р | Z12N0002R | ПК |
О | 53 600 | ПК |
ЛД | aF0016ur | ПК |
ВА | aF0002ur | ПК |
Е | C24-420 | Моноблок |
Е | J2335 | Моноблок |
НН | BA047T | Моноблок |
А | C24-1650 | Моноблок |
А | MXWT2RU | Моноблок |
А | 107r | Лазерный |
А | b210v | Лазерный |
А | P2335dw | Лазерный |
В | 150a | Лазерный |
В | TS704 | Струйный |
В | 155998 | Струйный |
С | C301W | Лазерный |
С | 0608c009 | Струйный |
С | 155997 | Струйный |
К | LX350 | Матричный |
К | LQ630 | Матричный |
К | ML5100FB | Матричный |
А | DFX-8500 | Матричный |
Таблица Моноблок
КодТовара | ТЧ | ОЗУ | Объѐм диска | Диагональ | Цена |
1450674 | 3.7ГГц | 32ГБ | 240Гб | 23.8" | 42300 |
1212485 | 3.3ГГц | 32ГБ | 120Гб | 23.8" | 40990 |
1503729 | 2.6ГГц | 32Гб | 128Гб | 21.5" | 42390 |
1480370 | 2.6ГГц | 16Гб | 256Гб | 21.5" | 42890 |
1404781 | 2.6ГГц | 4ГБ | 128Гб | 21.5" | 34990 |
Таблица Ноутбук
КодТовара | Модель | ТЧ | ОЗУ | Объѐм | Диагональ | Цена |
1214764 | 7200U | 2500МГц | 32Гб | 1000Гб | 15.6" | 43830 |
1399244 | 6300HQ | 2300МГц | 16Гб | 1000Гб | 15.6" | 63900 |
1486367 | 7500U | 2700МГц | 12Гб | 1000Гб | 15.6" | 52520 |
1449346 | 7700HQ | 2800МГц | 32 Гб | 1000Гб | 17.3" | 75900 |
1200863 | Z0SL0003F | 2200МГц | 8 Гб | 512Гб | 13.3" | 88792 |
1175132 | 7300HQ | 2500МГц | 8 Гб | 1000Гб | 15.6" | 51590 |
1473250 | 8550U | 1800МГц | 16Гб | 1000Гб | 15.6" | 72410 |
1442113 | 5005U | 2000МГц | 8 Гб | 500Гб | 15.6" | 26342 |
Таблица ПерсональныйКомпьютер
КодТовара | Модель | ТЧ | ОЗУ | Объѐм | Цена |
1526137 | E1 6010 | 2.9 ГГц | 8ГБ | 1024Гб | 36590 |
1529865 | 10400F | 2.9 ГГц | 16ГБ | 1024Гб | 42990 |
1405408 | XC-895 | 2.9 ГГц | 16ГБ | 1024Гб | 47490 |
1481482 | XC-830 | 4 ГГц | 4ГБ | 1024Гб | 25590 |
1531638 | F1030ur | 4 ГГц | 4ГБ | 1024Гб | 52160 |
1451460 | Z12N0002R | 3.5 ГГц | 32ГБ | 1024Гб | 398900 |
1498866 | 53 600 | 3.6 ГГц | 32 ГБ | 1024Гб | 132990 |
1422131 | aF0016ur | 2.3 ГГц | 4ГБ | 1024Гб | 22990 |
1380590 | aF0002ur | 2.7 ГГц | 16ГБ | 1024Гб | 126090 |
Таблица Принтер
КодТовара | Модель | Ц/Ч | Цена |
1156160 | 107r | черно-белый | 7950 |
1168526 | b210v | черно-белый | 10800 |
1108163 | P2335dw | черно-белый | 18940 |
1365725 | 150a | цветной | 15999 |
1124228 | TS704 | цветной | 7460 |
1542238 | 155998 | цветной | 26080 |
1409808 | C301W | цветной | 30690 |
1498761 | 0608c009 | цветной | 156680 |
1542232 | 155997 | цветной | 26080 |
1411866 | LX350 | черно-белый | 16899 |
19443 | LQ630 | черно-белый | 34569 |
10043787 | ML5100FB | черно-белый | 55000 |
10055758 | DFX-8500 | черно-белый | 86990 |
Контрольные вопросы:
1. Основные категории команд языка SQL?
2. Для чего используется язык определения данных?
3. Основные команды языка DDL?
4. К каким объектам применяются команды языка DDL?
5. Какие действия выполняет команда CREATE?
6. К каким объектам применяются команда CREATE?
7. Какие действия выполняет команда ALTER?
Лабораторная работа № 3
«СОЗДАНИЕ ЗАПРОСОВ НА ЯЗЫКЕ TRANSACT-SQL»
Цель: изучение особенностей использования оператора SELECT-SQL при разработке запросов в среде SQL Server Management Studio 18, рассмотрение некоторых особенностей реализации оператора SELECTSQL в языке Transact-SQL (T-SQL).
Дополнительные сведения:
Выборка данных из таблиц
Для извлечения данных, содержащихся в таблицах SQL БД, используется оператор SELECT, имеющий в общем случае сложный и многовариантный синтаксис.
Упрощенно оператор SELECT выглядит следующим образом:
SELECT [ALL | DISTINCT] в_выражение, ...
FROM имя_табл [син_табл], ...
[WHERE сложн_условие]
[GROUP BY полн_имя_столбца|ном_столбца, ...]
[ORDER BY полн_имя_столбца|ном_столбца [ASC|DESC], ...]
[HAVING сложн_условие];
Результатом работы оператора является выводимая на экран дисплея вновь построенная таблица, для которой количество и смысл столбцов определяется списком элементов в_выражение;
содержимое строк определяется содержимым исходных таблиц из списка FROM и критерием выборки, задаваемым сложн_условие.
При описании синтаксиса оператора SELECT использованы следующие обозначения:
син_табл – необязательный синоним имени таблицы, используемый для сокращения длины записи выражений и условий в операторе SELECT.
полн_имя_столбца – полное имя столбца в виде [имя_табл|син_табл.]имя_столбца
Конкретизирующий таблицу префикс в имени столбца необходим только для различения столбцов, имеющих одинаковое имя в разных таблицах из списка FROM.
ном_столбца – номер столбца результирующей таблицы.
Ход работы:
Рассмотрим последовательность действий по созданию и выполнению
запроса, позволяющего обрабатывать данные с помощью оператора SELECTSQL.
Запрос 1. Вывести на экран список товаров, поставленных поставщиком 1 (ЧП
Иванов И.И.) по договору 1.
Для этого нужно выполнить следующее:
Открыть консоль MS SQL Managment Studio 18 (Пуск - MS SQL Server Tools 18 - MS SQL Managment Studio 18).
Подключиться к нужному серверу, нажав на кнопку Connekt.
На панели инструментов нажать кнопку New Query.
В открывшееся окно ввести текст запроса 1:
USE БД1
SELECT Поставлено.НомерДоговора, Поставлено.Товар, Поставщики.*, Договоры.ДатаДоговора
FROM Поставлено, Договоры, Поставщики
WHERE Договоры.НомерДоговора = Поставлено.НомерДоговора AND Поставщики.КодПоставщика = Договоры.КодПоставщика AND (Договоры.НомерДоговора = 1 AND Договоры.КодПоставщика = 1)
Нажать кнопку Execute. Если в тексте запроса нет ошибок, будет выведен результат запроса.
Текст запроса сохранить в виде файла SQLQueryБД1_З1.sql.
При необходимости можно открыть файл запроса и выполнить повторно или изменить данный запрос. Для этого в главном меню нужно выбрать пункт File, а затем в вертикальном меню выбрать пункт Open и выбрать соответствующий файл.
ВАЖНО!!! Все остальные запросы 2 – 12 выполняются аналогично Запрос 1 и сохраняются соответственно SQLQueryБД1_З2.sql, SQLQueryБД1_З3.sql и т.д.
Запрос 2. Вывести на экран список товаров, поставленных поставщиком 1 (ЧП
Иванов И.И.) в период с 01/09/2018 по 10/09/2018.
Текст запроса:
use БазаПроба
select Договоры.НомерДоговора, Договоры.ДатаДоговора, Поставлено.Товар, Поставлено.Цена, Поставщики.*
from (Поставщики inner join Договоры on Поставщики.КодПоставщика = Договоры.КодПоставщика) inner join Поставлено on Договоры.НомерДоговора = Поставлено.НомерДоговора
where Договоры.ДатаДоговора between '20180901' and '20180910' and Поставщики.КодПоставщика = 1
Запрос 3. Вывести на экран список товаров, поставленных в 9 месяце 2018 года с
выводом наименования поставщика и даты поставки.
Текст запроса:
use БазаПроба
select Договоры.НомерДоговора, Договоры.ДатаДоговора, Поставлено.Товар, Поставлено.Цена, Поставщики.*
from (Поставщики inner join Договоры on Поставщики.КодПоставщика = Договоры.КодПоставщика) inner join Поставлено on Договоры.НомерДоговора = Поставлено.НомерДоговора
where month (Договоры.ДатаДоговора) = 9 and year(Договоры.ДатаДоговора) = 2018
Запрос 4. Вывести на экран список договоров (номер, дата, название) и общую сумму
по каждому договору (размер партии умножить на цену за штуку и
просуммировать по договору). Список должен быть отсортирован в порядке
возрастания номеров договоров.
Текст запроса:
use БазаПроба
select Договоры.НомерДоговора, Договоры.ДатаДоговора, Договоры.КодПоставщика, sum (Цена*Количество) as Сумма
from Договоры inner join Поставлено
on Договоры.НомерДоговора = Поставлено.НомерДоговора
group by Договоры.НомерДоговора, Договоры.ДатаДоговора, Договоры.КодПоставщика
order by Договоры.НомерДоговора
Запрос 5. Вывести на экран список договоров (номер, дата, название) и общую сумму по каждому договору (размер партии умножить на цену за штуку и просуммировать по договору). Список должен быть отсортирован в порядке возрастания общих сумм по каждому договору. После этого на список должно быть наложено условие фильтрации, состоящее в исключении из результата запроса записей, для которых номер договора больше 3.
Текст запроса:
use БазаПроба
select Договоры.НомерДоговора, Договоры.ДатаДоговора, Договоры.КодПоставщика, sum (Цена*Количество) as Сумма
from Договоры inner join Поставлено
on Договоры.НомерДоговора = Поставлено.НомерДоговора
where Договоры.НомерДоговора > 3
group by Договоры.НомерДоговора, Договоры.ДатаДоговора, Договоры.КодПоставщика
order by Договоры.НомерДоговора
Запрос 6. Вывести на экран сведения о наибольшей по размеру партии товара во
всех договорах с указанием поставщика, а также номера и даты договора.
Текст запроса:
use БазаПроба
select Договоры.НомерДоговора, Договоры.ДатаДоговора, Договоры.Комментарий, Поставщики.*, Поставлено.Цена
from Договоры, Поставлено, Поставщики
where Договоры.НомерДоговора = Поставлено.НомерДоговора and Договоры.КодПоставщика = Поставщики.КодПоставщика and Поставлено.Цена = (select max(Поставлено.Цена) from Поставлено)
Запрос 7. Вывести на экран список поставщиков (наименование и код), с которыми
не было заключено ни одного договора.
Текст запроса:
use БазаПроба
select * from Поставщики
where КодПоставщика not in (select КодПоставщика from Договоры)
Запрос 8. Вывести на экран список наименований поставленных товаров с указанием средней цены поставки за единицу (вне зависимости от поставщика)
Текст запроса:
use БазаПроба
select Товар, AVG (Цена) as СредняяЦена
from Поставлено
group by Товар
Запрос 9. Вывести на экран список товаров (наименование, количество и цена, поставщик), для которых цена за единицу больше средней.
Текст запроса:
use БазаПроба
select Товар, Количество, Цена, Поставщики.*
from (Поставщики inner join Договоры on Поставщики.КодПоставщика = Договоры.КодПоставщика)
inner join Поставлено on Договоры.НомерДоговора = Поставлено.НомерДоговора
where Цена > (select AVG(Цена) from Поставлено)
Запрос 10. Вывести на экран сведения о пяти самых дорогих товарах (наименование, цена за единицу, поставщик).
Текст запроса:
use БазаПроба
select top 5 Товар, Цена, Поставщики.*
from (Поставщики inner join Договоры on Поставщики.КодПоставщика = Договоры.КодПоставщика) inner join Поставлено on Договоры.НомерДоговора = Поставлено.НомерДоговора order by Цена desc
Запрос 11. Сформировать список поставщиков с указанием кода, адреса и данных
поставщика. При формировании данных поставщика для поставщиков –
физических лиц вывести фамилию и инициалы, для поставщиков – юридических лиц – название.
Текст запроса:
use БазаПроба
select Поставщики.КодПоставщика, Поставщики.Адрес,
isnull(ЮридическиеЛица.Название, rtrim(ФизическиеЛица.Фамилия)+' '+
substring (ФизическиеЛица.Имя,1,1)+'.'+
substring (ФизическиеЛица.Отчество,1,1)+'.') as Поставщик
from (Поставщики left join ФизическиеЛица on Поставщики.КодПоставщика = ФизическиеЛица.КодПоставщика)
left join ЮридическиеЛица on Поставщики.КодПоставщика=ЮридическиеЛица.КодПоставщика
Запрос 12. Сформировать список договоров (с указанием номера, даты поставки и
данных о поставщике), общее количество поставленных товаров и общую сумму по каждому договору. Для поставщиков – физических лиц вывести фамилию и инициалы, для поставщиков – юридических лиц – ОГРН. В результат запроса должны быть включены только те договоры, на основании которых товары действительно поставлялись (т.е. в результат запроса не должны попасть так называемые «пустые» договоры).
Текст запроса:
use БазаПроба
select Договоры.НомерДоговора, Договоры.ДатаДоговора,
isnull(ЮридическиеЛица.Название, rtrim(ФизическиеЛица.Фамилия)+' '+
substring (ФизическиеЛица.Имя,1,1)+'.'+
substring (ФизическиеЛица.Отчество,1,1)+'.') as Поставщик,
sum(Поставлено.Количество) as ОбъемПоставки,
sum(Количество*Цена) as СуммаПоставки
from (((Поставщики left join ФизическиеЛица on Поставщики.КодПоставщика = ФизическиеЛица.КодПоставщика)
left join ЮридическиеЛица on Поставщики.КодПоставщика=ЮридическиеЛица.КодПоставщика)
inner join Договоры on Договоры.КодПоставщика = Поставщики.КодПоставщика)
inner join Поставлено on Договоры.НомерДоговора=Поставлено.НомерДоговора
group by Договоры.НомерДоговора, Договоры.ДатаДоговора,
isnull(ЮридическиеЛица.Название, rtrim(ФизическиеЛица.Фамилия)+' '+
substring (ФизическиеЛица.Имя,1,1)+'.'+
substring (ФизическиеЛица.Отчество,1,1)+'.')
order by НомерДоговора
Задания для самостоятельного выполнения:
Выполните запросы к БД «КомпьютерныйМагазин».
Запрос 1. Найдите номер модели, скорость и размер жесткого диска для всех ПК
стоимостью менее 3500 руб. Вывести: НомерМодели, ТЧ и HD.
Запрос 2. Найдите производителей принтеров. Вывести: Производитель.
Запрос 3. Найдите номер модели, объем памяти и размеры экранов ноутбуков, цена которых превышает 7000 руб.
Запрос 4. Найдите модели принтеров, имеющих самую высокую цену. Вывести:
НомерМодели, Цена.
Контрольные вопросы:
Что такое условие поиска и где оно применяется?
Объясните правила применения шаблонов в условиях поиска.
Как выполняется проверка на неопределённое значение?
Как формулируется условие поиска для проверки на диапазон допустимых значений?
Как формулируется условие поиска для проверки на перечень конкретных значений?
Объясните правила управления порядком вычисления логических условий.
Лабораторная работа № 4
«ИТОГОВАЯ РАБОТА»
Цель: Создать БД по номеру варианта в SQL Server Management Studio 18.
САМОСТОЯТЕЛЬНО используя команды языка SQL!!!:
Создайте все таблицы базы данных, ключи, ограничения и связи.
Каждая таблица должна иметь ограничение первичного ключа.
С помощью ограничений внешнего ключа должны быть заданы все имеющиеся связи между таблицами.
В зависимости от условий выданного задания в некоторых таблицах могут быть наложены дополнительные ограничения целостности на столбцы или должны быть разработаны вычисляемые поля.
Создайте диаграмму базы данных.
Заполните таблицы данными не менее 5 записей в каждой.
Создать не менее 5 различных запросов к БД.
Создать текстовый отчет, в котором отобразить скриншоты результатов работы в SQL Server Management Studio 18 (окно с базой данных с перечнем всех таблиц, проекты таблиц с перечнем столбцов, окна ограничений внешних ключей (создание), окно с перечнем ключей для каждой таблицы, окна с данными для каждой таблицы, диаграмма базы данных, запросы).
Варианты заданий для итоговой лабораторной работы
Вариант 1.
БД «Супермаркет»
БД состоит из следующих таблиц: отделы, сотрудники, товары, продажа товаров,
должности.
Таблица Отделы имеет следующие атрибуты: название отдела, количество прилавков, кол-во продавцов, номер зала.
Таблица Сотрудники имеет следующие атрибуты: фамилия, имя, отчество, отдел, год рождения, год поступления на работу, стаж, должность, пол, адрес, город, телефон.
Таблица Должности имеет следующие атрибуты: название должности, сумма ставки.
Таблица Товары имеет следующие атрибуты: название товара, отдел, страна производитель, условия хранения, сроки хранения.
Таблица Продажа товаров имеет следующие атрибуты: сотрудника, являющегося продавцом товара, дата, время, количество, цена, сумма.
Вариант 2.
БД «Военный округ»
БД состоит из следующих таблиц: Вид войск, Места дислокации, Части, Роты, Личный
состав.
Таблица Вид войск имеет следующие атрибуты: название.
Таблица Места дислокации имеет следующие атрибуты: страна, город, адрес, занимаемая площадь.
Таблица Части имеет следующие атрибуты: номер части, место дислокации, вид войск, количество рот.
Таблица Роты имеет следующие атрибуты: название роты, количество служащих.
Таблица Личный состав имеет следующие атрибуты: фамилия, рота, должность, год рождения, год поступления на службу, выслуга лет, награды, участие в военных мероприятиях.
Вариант 3.
БД «Библиотеки»
БД состоит из следующих таблиц: Библиотеки, Фонд библиотеки, Тип литературы, Сотрудники, Пополнение фонда.
Таблица Библиотеки имеет следующие атрибуты: название, адрес, город.
Таблица Фонд библиотеки имеет следующие атрибуты: название фонда, библиотека, количество книг, количество журналов, количество газет, количество сборников, количество диссертаций, количество рефератов.
Таблица Тип литературы имеет следующие атрибуты: название типа.
Таблица Сотрудники имеет следующие атрибуты: фамилия сотрудника, библиотека, должность, год рождения, год поступления на работу, образование, зарплата.
Таблица Пополнение фонда имеет следующие атрибуты: фонд, сотрудник, дата, название источника литературы, тип литературы, издательство, дата издания, количество экземпляров.
Вариант 4
БД «Туристическое агентство»
БД состоит из следующих таблиц: Пансионаты, Вид жилья, Туры, Клиенты, Путевки,
Таблица Пансионаты имеет следующие атрибуты: название пансионата, адрес, город, страна, телефон, описание территории, количество комнат, наличие бассейна, наличие медицинских услуг, наличие спа-салона, уровень пансионата, расстояние до моря.
Таблица Вид жилья имеет следующие атрибуты: название (дом, бунгало, квартира, 1-я комната, 2-я комната и т.д.), категория жилья (люкс, полулюкс, и т.д.), пансионат, описание условий проживания, цена за номер в сутки.
Таблица Туры имеет следующие атрибуты: название тура (Европа, Средняя Азия, Тибет и т.д.), вид транспорта, категория жилья на ночь (гостиница, отель, палатка и т.д.), вид питания (одноразовое, двухразовое, трехразовое, завтраки), цена тура в сутки.
Таблица Клиенты имеет следующие атрибуты: фамилия, имя, отчество, паспортные данные, дата рождения, адрес, город, телефон.
Таблица Путевки имеет следующие атрибуты: клиент, пансионат, вид жилья, дата заезда, дата отъезда, наличие детей, наличие мед. страховки, кол-во человек, цена, сумма.
Вариант № 5
БД «Автопредприятия города»
БД состоит из следующих таблиц: Автотранспорт, Маршруты, Водители, Обслуживающий персонал, Гаражное хозяйство.
Таблица Автотранспорт имеет следующие атрибуты: название транспорта (автобусы, такси, маршрутные такси, прочий легковой транспорт, грузовой транспорт и т.д.), количество наработки, пробег, количество ремонтов, характеристика.
Таблица Маршруты имеет следующие атрибуты: название маршрута, транспорт, водитель, график работы.
Таблица Водители имеет следующие атрибуты: фамилия, имя, отчество, год рождения, год поступления на работу, стаж, должность, пол, адрес, город, телефон.
Таблица Обслуживающий персонал имеет следующие атрибуты: должность (техники, сварщики, слесари, сборщики и др.), фамилия, имя, отчество, год рождения, год поступления на работу, стаж, пол, адрес, город, телефон.
Таблица Гаражное хозяйство имеет следующие атрибуты: название.
Вариант 6
БД «Поликлиники»
БД состоит из следующих таблиц: Отделения, Врачи, Пациенты, Диагнозы, История болезни, Обслуживающий персонал.
Таблица Отделения имеет следующие атрибуты: название отделения (хирургия, терапия, неврология и т.д.), этаж, номера комнат, ФИО заведующего.
Таблица Врачи имеет следующие атрибуты: фамилия, имя, отчество, должность, стаж работы, научное звание, адрес, номер отделения, в котором он работает.
Таблица Пациенты имеет следующие атрибуты: фамилия, имя, отчество, адрес, город, возраст, пол.
Таблица Диагнозы имеет следующие атрибуты: название диагноза, признаки болезни, период лечения, назначения.
Таблица история болезни имеет следующие атрибуты: пациент, врач, диагноз, лечение, дата заболевания, дата вылечивания, вид лечения (амбулаторное, стационарное).
Таблица Обслуживающий персонал имеет следующие атрибуты: должность (техники, сварщики, слесари, сборщики и др.), фамилия, имя, отчество, год рождения, год поступления на работу, стаж, пол, адрес, город, телефон.
Таблица гаражное хозяйство имеет следующие атрибуты: название гаража, транспорт на ремонте, вид ремонта, дата поступления, дата выдачи после ремонта, результат ремонта, персонал, производящего ремонт.
Вариант 7
БД «Проектная организация»
БД состоит из следующих таблиц: Отделы, Сотрудники, Организации, Договора, Проектные работы.
Таблица Отделы имеет следующие атрибуты: название отдела, этаж, телефон, начальник отдела.
Таблица Сотрудники имеет следующие атрибуты: ФИО, должность (конструкторы, инженеры, техники, лаборанты, прочий обслуживающий персонал), номер отдела, в котором работает, пол, адрес, дата рождения.
Таблица Организации имеет следующие атрибуты: название организации, тип деятельности, страна, город, адрес, ФИО директора.
Таблица Договора имеет следующие атрибуты: номер договора, дата заключения договора, организация, стоимость договора.
Таблица Проектные работы имеет следующие атрибуты: дата начала проектной работы, дата завершения проектной работы, номер договора, отдел, осуществляющий разработку.
Вариант 8
БД «Военно-морской флот»
БД состоит из следующих таблиц: Базы, Части, Личный состав, Корабли, Учения.
Таблица Базы Военно-морского флота имеет следующие атрибуты: название базы, географическое расположение, количество частей.
Таблица Части имеет следующие атрибуты: номер части, база флота, место базирования, вид войск (морская авиация, морская пехота и т.д.).
Таблица Личный состав имеет следующие атрибуты: фамилия, часть, должность, год рождения, год поступления на службу, выслуга лет, награды.
Таблица Корабли имеет следующие атрибуты: идентификационный номер корабля, название корабля, тип корабля, дата создания, наработка, количество посадочных мест, устройство двигателя (парусное, гребное, пароход, теплоход, турбоход, и т.д. ), тип привода (самоходное, несамоходное), размещение корпуса (подводная лодка, ныряющее,
полупогружное и т.д.)
Таблица Учения: часть, корабль, дата учения, место проведения, оценка.
Вариант 9
БД «Туристическая фирма»
БД состоит из следующих таблиц: Туристы, Туры, Туристическая группа, Состав групп, Гостиницы, Ведомости продаж.
Таблица Туристы имеет следующие атрибуты: ФИО, паспортные данные, пол, возраст, дети.
Таблица Туры имеет следующие атрибуты: название, страна, города, тип передвижения, тип питания, цена тура, тип проживания.
Таблица Туристическая группа имеет следующие атрибуты: название, дата отправления, дата прибытия, тур, количество туристов.
Таблица Состав групп имеет следующие атрибуты: дата продажи, турист, группа, цена билета.
Таблица Гостиницы имеет следующие атрибуты: название гостиницы, страна, город, адрес, количество мест, тип гостиницы.
Таблица Ведомость продаж имеет следующие атрибуты: дата, туристическая группа, гостиница, общая стоимость.
Вариант 10
БД «Цирк»
БД состоит из следующих таблиц: Работники цирка, Представления, Расписание гастролей, Труппа цирка, Программа цирка.
Таблица Работники цирка имеет следующие атрибуты: фамилия, имя, отчество, год рождения, год поступления на работу, стаж, должность (акробат, клоун, гимнаст, музыкант, постановщик, служащий и т.д.), пол, адрес, город, телефон.
Таблица Представления имеет следующие атрибуты: название, режиссер-постановщик, художник-постановщик, дирижер-постановщик, автор, жанр, тип.
Таблица Расписание гастролей имеет следующие атрибуты: представление, дата начала, дата окончания, места проведения гастролей.
Таблица Труппа цирка имеет следующие атрибуты: представление, актер цирка, название роли.
Таблица Программа цирка имеет следующие атрибуты: представление, дата премьеры, период проведения, дни и время, цена билета.
Вариант 11
БД «Аптека»
БД состоит из следующих таблиц: Лекарства, Покупатели, Продавцы, Рецепты, Продажа лекарств.
Таблица Лекарства имеет следующие атрибуты: название, тип (готовое, изготовляемое), вид (таблетки, мази, настойки), цена.
Таблица Покупатели имеет следующие атрибуты: фамилия, имя, отчество, адрес, город, телефон.
Таблица Продавцы имеет следующие атрибуты: фамилия, имя, отчество, дата поступления, дата рождения, образование.
Таблица Рецепты имеет следующие атрибуты: номер рецепта, дата выдачи, ФИО больного (покупатель), ФИО врача, диагноз пациента.
Таблица Продажа лекарств имеет следующие атрибуты: дата, лекарство, количество, рецепт, продавец.
Вариант 12
БД «Городская телефонная сеть»
БД состоит из следующих таблиц: АТС, Абоненты, Ведомость звонков, Прайс АТС, Ведомость абонентской платы.
Таблица АТС имеет следующие атрибуты: название АТС, вид (городские, ведомственные и учрежденческие), адрес, город, количество абонентов.
Таблица Абоненты имеет следующие атрибуты: фамилия, имя, отчество, вид телефона (основной, параллельный или спаренный), номер телефона, межгород (открыт/закрыт), льгота (да/нет), адрес: индекс, район, улица, дом, квартира.
Таблица Ведомость звонков имеет следующие атрибуты: абонент, дата звонка, время начала, время окончания, межгород (да/нет).
Таблица Прайс АТС имеет следующие атрибуты: АТС, цена на городские, цена на межгород.
Таблица Ведомость абонентской платы имеет следующие атрибуты: абонент, месяц, год, количество минут на городские, количество минут на межгород, стоимость, сумма льготы, общая стоимость.
Вариант 13
БД «Аэропорт»
БД состоит из следующих таблиц: Работники аэропорта, Расписание вылетов, Самолеты, Бригады самолетов, Ведомость продажи билетов.
Таблица Работники аэропорта имеет следующие атрибуты: фамилия, имя, отчество, год рождения, год поступления на работу, стаж, должность (пилотов, диспетчеров, техников, кассиров, работников службы безопасности, справочной службы и других), пол, адрес, город, телефон.
Таблица Расписание вылетов имеет следующие атрибуты: самолет, дата вылета, время вылета, место выбытия, место прибытия, маршрут (начальный и конечный пункты назначения, пункт пересадки), стоимость билета.
Таблица Самолеты имеет следующие атрибуты: номер, год выпуска, количество посадочных место, грузоподъемность.
Таблица Бригады самолетов имеет следующие атрибуты: номер бригады, самолет, работник аэропорта (пилоты, техники и обслуживающий персонал).
Таблица Ведомость продажи билетов имеет следующие атрибуты: дата и время продажи, ФИО пассажира, паспортные данные, номер рейса, количество билетов, наличие льгот (пенсионеры, дети-сироты и т.д.), багаж (да/нет), стоимость.
Вариант 14
БД «Театр»
БД состоит из следующих таблиц: Работники театра, Спектакли, Расписание гастролей, Труппа спектакля, Репертуар театра.
Таблица Работники театра имеет следующие атрибуты: фамилия, имя, отчество, год рождения, год поступления на работу, стаж, должность (актеров, музыкантов, постановщиков и служащих), пол, адрес, город, телефон.
Таблица Спектакли имеет следующие атрибуты: название, режиссер, постановщик, художник-постановщик, дирижер-постановщик, автор, жанр (музыкальная комедия, трагедия, оперетта и пр.), тип (детские, молодежные и пр.).
Таблица Расписание гастролей имеет следующие атрибуты: название, дата начала, дата окончания, места проведения гастролей, спектакль.
Таблица Труппа спектакля имеет следующие атрибуты: спектакль, актер, название роли.
Таблица Репертуар театра имеет следующие атрибуты: спектакль, дата премьеры, период проведения, дни и время, цена билета.
Вариант 15
БД «Железнодорожный вокзал»
БД состоит из следующих таблиц: Работники железнодорожного вокзала, Расписание движения поездов, Поезда, Бригады поездов, Ведомость продажи билетов.
Таблица Работники железнодорожного вокзала имеет следующие атрибуты: фамилия, имя, отчество, год рождения, год поступления на работу, стаж, должность (машинист, диспетчер, проводник, ремонтник подвижного состава, путей, кассир, работник службы подготовки составов, справочная служба и другие,), пол, адрес, город, телефон.
Таблица Расписание движения поездов имеет следующие атрибуты: поезд, дата отправления, время отправления, место отправления, дата прибытия, время прибытия, место прибытия, маршрут ((начальный и конечный пункты назначения, основные узловые станции), стоимость билета.
Таблица Поезда имеет следующие атрибуты: номер, год выпуска, количество вагонов, тип поезда (общий, скоростной, высокоскоростной).
Таблица Бригады поездов имеет следующие атрибуты: номер бригады, поезд, работник железнодорожного вокзала (машинисты, техники, проводники и обслуживающий персонал).
Таблица Ведомость продажи билетов имеет следующие атрибуты: дата и время продажи, ФИО пассажира, паспортные данные, номер рейса, количество билетов, наличие льгот (пенсионеры, дети-сироты и т.д.), стоимость.
КРАТКИЙ СПРАВОЧНИК ПО ОПЕРАЦИЯМ T-SQL
Выборка отдельных столбцов
SELECT [Description]
FROM Product
Выборка нескольких столбцов
SELECT [Description], InStock
FROM Product
Выборка всех столбцов
SELECT *
FROM Product
Сортировка данных
SELECT IdProd, [Description], InStock
FROM Product
ORDER BY InStock
SELECT IdProd, [Description], InStock
FROM Product
ORDER BY InStock, [Description]
Сортировка данных по убыванию
SELECT IdProd, [Description], InStock
FROM Product
ORDER BY InStock DESC, [Description]
Фильтрация данных
SELECT IdProd, [Description], InStock
FROM Product
WHERE InStock = 0
ORDER BY должно следовать после WHERE.
SELECT FName, LName, Phone
FROM Customer
WHERE PHONE IS NULL
SELECT IdProd, [Description], InStock
FROM Product
WHERE InStock BETWEEN 5 AND 10
SELECT IdProd, [Description], InStock
FROM Product
WHERE (InStock >= 5) AND (InStock <= 10)
SELECT IdCity, CityName
FROM City
WHERE (CityName = 'Москва') OR (CityName = 'Казань')
SELECT FName, LName, Phone
FROM Customer
WHERE (LName = 'Иванов' OR LName = 'Петров') AND PHONE IS NULL
SELECT FName, LName, Phone
FROM Customer
WHERE LName IN ('Иванов','Петров') AND PHONE IS NULL
SELECT FName, LName, Phone
FROM Customer
WHERE NOT PHONE IS NULL
SELECT *
FROM Product
WHERE [Description] LIKE 'Т%'
Создание вычисляемых полей
SELECT IdCust AS 'Номер клиента', FName + ' ' +LName AS 'Фамилия и имя клиента'
FROM Customer
SELECT IdProd, Qty, Price, Qty * Price AS 'Стоимость'
FROM OrdItem
WHERE IdOrd = 1
Исключение дублирующих записей
SELECT DISTINCT LName
FROM Customer
Использование агрегатных функций
SELECT COUNT(*) AS 'Количество видов продукции'
FROM Product Количество видов продукции, информация о которых есть в БД
SELECT COUNT(DISTINCT FNAME)
FROM Customer Количество различных имен, содержащихся в таблице Customer
SELECT MAX(OrdDate)
FROM [Order]
WHERE OrdDate<'1.09.2019' Дата последнего заказа до 1 сентября 2019 года
Запросы с группировкой строк
Команда GROUP BY должна располагаться вслед за фразой WHERE (если она
отсутствует, то за фразой FROM).
При наличии GROUP BY команда SELECT применяется к каждой группе,
сформированной группировкой.
SELECT IdCity, COUNT(*) AS 'Кол-во клиентов'
FROM Customer
GROUP BY IdCity Количество клиентов по городам
SELECT IdCity, COUNT(*) AS 'Кол-во клиентов'
FROM Customer
WHERE LName = 'Иванов'
GROUP BY IdCity Количество клиентов по городам с фамилией ‘Иванов’
SELECT LName, FName, COUNT(*)
FROM Customer
GROUP BY LName, FName Количество клиентов по каждой фамилии и имени
SELECT IdCity
FROM Customer
GROUP BY IdCity
HAVING COUNT(*)>10 Список городов, количество клиентов в которых больше 10
Подзапросы
Подзапрос – запрос на выборку данных, вложенный в другой запрос. Подзапрос всегда заключается в круглые скобки и выполняется до содержащего выражения. Сначала
выполняется подзапрос, имеющий самый глубокий уровень вложения.
Подзапросы, возвращающие единственное значение
Из таблицы Customer выбираются данные обо всех клиентах из Казани.
SELECT *
FROM Customer
WHERE IdCity = (SELECT idCity FROM City WHERE CityName = 'Казань')
Подзапросы, возвращающие список значений из одного столбца таблицы
Список всех клиентов, проживающих в городах Казань или Елабуга.
SELECT *
FROM Customer
WHERE IdCity = SOME(SELECT IdCity FROM City WHERE CityName IN ('Казань',
'Елабуга'))
Или
SELECT *
FROM Customer
WHERE IdCity IN (SELECT IdCity FROM City WHERE CityName IN ('Казань', 'Елабуга'))
Противоположный запрос
SELECT *
FROM Customer
WHERE IdCity != ALL(SELECT IdCity FROM City WHERE CityName IN ('Казань',
'Елабуга'))
Связанные (коррелированные) подзапросы
Связанный подзапрос для подсчета количества заказов у каждого клиента. Затем
основной запрос выбирает тех клиентов, у которых больше одного заказа.
SELECT *
FROM Customer c
WHERE 1 < (SELECT COUNT(*) FROM [Order] r WHERE r.IdCust = c.IdCust)
Список всех товаров, которые когда-либо заказывали
SELECT IdProd, [Description]
FROM Product p
WHERE EXISTS (SELECT * FROM OrdItem oi WHERE oi.IdProd = p.IdProd)
Список товаров, которые ни разу не заказывались
SELECT IdProd, [Description]
FROM Product p
WHERE NOT EXISTS (SELECT * FROM OrdItem oi WHERE oi.IdProd = p.IdProd)
Операции соединения
Список всех клиентов с указанием названий городов, в которых они проживают
SELECT FName, LName, CityName
FROM Customer, City
WHERE Customer.IdCity = City.IdCity
Список всех клиентов из Казани с фамилией Иванов
SELECT K.IdCust, k.FName
FROM Customer k, City c
WHERE k.IdCity = c.IdCity AND k.LName = 'Иванов' AND c.CityName = 'Казань'
Список всех клиентов, которые когда-либо заказывали товар с кодом 1.
SELECT DISTINCT c.IdCust, c.FName, c.LName
FROM Customer c, [Order] o, OrdItem oi
WHERE c.IdCust = o.IdCust AND o.IdOrd = oi.IdOrd AND oi.IdProd = 1
Соединения с использованием FROM
Внутреннее соединение
Список всех клиентов с указанием названий городов, в которых они проживают
SELECT FName, LName, CityName
FROM Customer k JOIN
City c ON k.IdCity = c.IdCity
Список всех клиентов из Казани с фамилией Иванов
SELECT K.IdCust, k.FName
FROM Customer k INNER JOIN
City c ON k.IdCity = c.IdCity
WHERE k.LName = 'Иванов' AND c.CityName = 'Казань'
Внешнее соединение
Список городов с указанием количества клиентов из каждого из них
SELECT c.CityName, a.CountCity
FROM City c LEFT OUTER JOIN
(SELECT IdCity, COUNT(*) AS CountCity
FROM Customer
GROUP BY IdCity) a ON c.IdCity = a.IdCity
ORDER BY c.CityName
Множественные операции
Объединение наборов записей
Объединение с исключением дублирующих строк
SELECT 1, 'Один'
UNION
SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
Объединение с сохранением дубликатов
SELECT 1, 'Один'
UNION ALL
SELECT 1, 'Один'
UNION ALL
SELECT 2, 'Два'
Пересечение наборов записей
Список записей, в котором содержатся одновременно в двух наборах:
(SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
UNION
SELECT 3, 'Три')
INTERSECT
(SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
UNION
SELECT 4, 'Четыре')
Разность наборов записей
Список записей, содержащихся в одном наборе и отсутствующих в другом
(SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
UNION
SELECT 3, 'Три')
EXCEPT
(SELECT 1, 'Один'
UNION
SELECT 2, 'Два'
UNION
SELECT 4, 'Четыре')
Библиографический список
Современные технологии баз данных и анализа информации: учебно-методическое пособие по выполнению практических работ/ С.В. Мкртычев. – Тольятти, 2018.
Microsoft SQL Server 2008: Лабораторный практикум и контрольные задания для студентов магистров очной формы обучения специальности 220201.68 «Управление и информатика в технических системах» / сост.: Ю.В. Ильюшин, Санкт-Петербургский горный ин-т. - СПб.: СПбГИ, 2012. - 31 с.
Прикладное программирование и базы данных: учебно-методическое пособие для практических работ / О.В. Игнатьева; ФГБОУ ВО РГУПС. – Ростов н/Д: Изд-во «Феникс», 2017.