Вы находитесь на странице: 1из 10

Технический Университет Молдовы

Факультет Вычислительной Техники, Информатики и


Микроэлектроники

Кафедра Автоматики и Информационных Технологий

Отчёт
по лабораторной работе № 6

по дисциплине «BDC»

Тема: «Запросы DML»

Выполнил: студент группы TI-113 Карабаш Артём

Проверила: старший преподаватель Булай Родика

Кишинев 2013
ЛАБОРАТОРНАЯ РАБОТА № 6

Тема: Запросы DML.

Цели работы:

 Создание запросов на основе DML. Изучение подзапросов.

Задания к лабораторной работе:

Задание 1. Реализация вложенных подзапросов


1. Напишите к БД запросы с вложенными подзапросами (по два запроса для каждого из
предикатов IN, ALL, ANY, EXISTS).
2. Напишите два коррелированных подзапроса.
Задание 2. Реализация обобщающих и группирующих запросов

1. Напишите к базе данных запросы, используя обобщающие функции AVG, COUNT, MIN,
MAX, SUM.

2. Напишите к базе данных два группирующих запроса с использованием оператора GROUP


BY. В одном из них используйте условие отбора HAVING.

3. Напишите по одному запросу сведения, используя ключевые слова ROLLUP, GROUPING.

4. Напишите по одному запросу для операторов PIVOT и UNPIVOT.

Задание 3. Ознакомление с операторами актуализации отношений

1. Используя оператор INSERT INTO, заполнить кортежами некоторые отношения БД.

Используйте оператор как для добавления одного кортежа, так и нескольких. (INSERT
VALUES, INSERT с подзапросом SELECT)

2. Записать запрос для добавления кортежей, используя оператор SELECT INTO.

3. Записать по два запроса для изменения и удаления кортежей с помощью операторов

UPDATE и DELETE.

Выполнения задания:

Вывести информацию о спортсменах которые являются владельцами велосипедов Bianchi:


Use [ProCyclingTeam]
SELECT *
FROM спортсмены
WHERE ФамилияИмя IN
(SELECT ФамилияИмя
FROM владельцы_велосипедов
WHERE НаименованиеВелосипеда ='Bianchi');

Вывести информацию тренера у которого машина с номерами CLS-116:


Use [ProCyclingTeam]
SELECT *
FROM тренер
WHERE Авто IN
(SELECT Номер
FROM авто
WHERE Номер ='СLS-116 ');

Вывести информацию об автомобилях у которых пробег больше 25778 км:


Use [ProCyclingTeam]
SELECT *
FROM авто
WHERE Пробег > ALL
(SELECT Пробег = 25778
FROM авто);

Такой же запрос только с другим оператором :


Use [ProCyclingTeam]
SELECT Марка, Номер, Пробег
FROM авто
WHERE Пробег < ALL
(SELECT Пробег = 25778
FROM авто);
Получить информацию всех спортсменов из команды Катюша:
Use [ProCyclingTeam]
SELECT *
FROM спортсмены
WHERE Команда = ANY
(SELECT Название = 'Катюша'
FROM команда);

Вывести информацию о спортсменах с возрастом 25 лет:


Use [ProCyclingTeam]
SELECT *
FROM спортсмены
WHERE Возраст = ANY
(SELECT Возраст = 25
FROM спортсмены);

Запрос который выводит Фамилию, Имя и возраст всех тренеров если существует
спортсмен с фамилией Брайкович

Use [ProCyclingTeam]
SELECT ФамилияИмя, Возраст
FROM тренер
WHERE EXISTS
(SELECT *
FROM спортсмены
WHERE ФамилияИмя LIKE 'Брайкович%');
Запрос который выводит Фамилию, Имя и возраст всех тренеров если существует
спортсмен с фамилией Болонюк

Use [ProCyclingTeam]
SELECT ФамилияИмя, Возраст
FROM тренер
WHERE EXISTS
(SELECT *
FROM спортсмены
WHERE ФамилияИмя LIKE 'Болонюк');

Коррелированый запрос:
Вывести фамилии владельцов и возраст которые являются владельцами какого-либо
велосипеда:
Use [ProCyclingTeam]
SELECT ФамилияИмя, Возраст
FROM спортсмены AS с
WHERE EXISTS
(SELECT *
FROM владельцы_велосипедов AS в
WHERE с.ФамилияИмя = в.ФамилияИмя);

Вывести фамилии владельцов и возраст которые являются владельцами какого-либо


велосипеда и имя у которого Александр:

Use [ProCyclingTeam]
SELECT ФамилияИмя, Возраст
FROM спортсмены AS с
WHERE EXISTS
(SELECT *
FROM владельцы_велосипедов AS в
WHERE с.ФамилияИмя = в.ФамилияИмя AND с.ФамилияИмя LIKE 'Александр%');
Задание 2. Реализация обобщающих и группирующих запросов

1. Напишите к базе данных запросы, используя обобщающие функции AVG, COUNT, MIN,
MAX, SUM.

Вывести информацию о машине у которой самый большой пробег:

Use [ProCyclingTeam]
SELECT *
From авто
Where Пробег = (Select MAX(Пробег) From авто)

Запрос выводящий Фамилию и возраст самого младшего спортсмена:


Use [ProCyclingTeam]
SELECT ФамилияИмя, Возраст
From спортсмены
Where Возраст = (Select MIN(Возраст) From спортсмены)

Вывести количество спортсменов во всех командах:


Use [ProCyclingTeam]
SELECT SUM(КоличествоСпортсменов) AS Всего_спортсменов
From команда

Вывести средний возраст спортсменов:

Use [ProCyclingTeam]
SELECT AVG(Возраст) AS Средний_возраст
From спортсмены
Посчитать количество спортсменов в базе которые числятся в команде Катюша:
Use [ProCyclingTeam]
SELECT COUNT(ФамилияИмя) AS Спортсменов_в_Катюше_в_БД
From спортсмены
WHERE Команда LIKE 'Катюша%'

2. Напишите к базе данных два группирующих запроса с использованием оператора


GROUP BY. В одном из них используйте условие отбора HAVING.

Группировать спортсменов из команды Омега, у которых тренер Бордюков Евгений по


возрасту

Use [ProCyclingTeam]
SELECT Возраст
FROM спортсмены
WHERE Команда LIKE 'Омега%'
OR Тренер LIKE 'Бордюков Евгений%'
GROUP BY Возраст

Группировать тренеров по возрасту у которых возраст от 40 до 65 лет:


Use [ProCyclingTeam]
SELECT Возраст
FROM тренер
GROUP BY Возраст
HAVING Возраст BETWEEN 40 AND 65
Напишите по одному запросу сведения, используя ключевые слова ROLLUP, GROUPING.

Посчитать сколькими велосипедами владеет каждый велосипедист из таблицы


«владельцы», и вывести сколько велосипедов занято всего:
Use [ProCyclingTeam]
SELECT ФамилияИмя , COUNT(*)
AS 'Кол-во велосипедов' FROM владельцы_велосипедов
GROUP BY ROLLUP(ФамилияИмя);

Посчитать количество спортсменов в каждой команде с подведением итогов сколько всего


спортсменов в БД:
USE [ProCyclingTeam]
SELECT
CASE Grouping(Команда)
WHEN 0 THEN Команда
WHEN 1 THEN 'Все спортсмены'
END AS Команды,
Count(*) as Число_спортсменов
FROM спортсмены
GROUP BY Команда
WITH ROLLUP
Задание 3. Ознакомление с операторами актуализации отношений

USE [Test]
CREATE TABLE команда(
Название varchar(50) PRIMARY KEY,
Статус varchar(20) DEFAULT('Continental'),
КоличествоСпортсменов tinyint NOT NULL);

CREATE TABLE авто (


Марка varchar(20) NOT NULL,
Номер varchar(10) PRIMARY KEY,
Пробег int CHECK(Пробег > 0),
ТО date );

CREATE TABLE тренер(


ФамилияИмя varchar(50) PRIMARY KEY,
Возраст tinyint CHECK(Возраст > 0 AND Возраст < 99),
Авто varchar(10)
FOREIGN KEY (Авто) REFERENCES авто(Номер));

CREATE TABLE спортсмены(


ФамилияИмя varchar(50) PRIMARY KEY,
Возраст tinyint NOT NULL,
Команда varchar(50),
Тренер varchar(50),
FOREIGN KEY (Команда) REFERENCES команда(Название),
FOREIGN KEY (Тренер) REFERENCES тренер(ФамилияИмя));

CREATE TABLE велосипеды(


ПолноеНаименование varchar(20) PRIMARY KEY,
СрокЭксплуатации tinyint CHECK(СрокЭксплуатации < 10),
Материал varchar(20) DEFAULT('Carbon'),
ДатаПрофилактики date);

CREATE TABLE владельцы_велосипедов(


ИмяВладельца varchar(50),
НазваниеВелосипеда varchar(20),
PRIMARY KEY (ИмяВладельца, НазваниеВелосипеда),
FOREIGN KEY (ИмяВладельца) REFERENCES спортсмены(ФамилияИмя),
FOREIGN KEY (НазваниеВелосипеда) REFERENCES велосипеды(ПолноеНаименование));

Заполнаяем таблицы:
USE [Test]
INSERT INTO авто
VALUES ('BMW', 'CLE-192', 123141, '12/12/13'),
('ASTON', 'CLA-942',123131, '12/01/12'),
('FIAT', 'CLA-565',1752712, '01/11/12'),
('OPEL', 'CLA-922',123131, '11/05/12'),
('JAGUAR', 'FAA-265',1323131, '3/12/11')

INSERT INTO тренер


VALUES ('Иванов Александр', 54, 'CLE-192'),
('Петров Василий', 51, 'CLA-942'),
('Сидоров Виталий', 49, 'CLA-565'),
('Ионеску Тудор', 35, 'CLA-942')

INSERT INTO велосипеды


VALUES ('BIANCHI', 5, 'Carbon', '12/12/13'),
('FOCUS', 5, 'Carbon', '11/12/13'),
('AUTHOR', 5, 'ALUMINIUM', '10/11/13'),
('Specialized', 5, 'ALUMINIUM', '09/12/12')

INSERT INTO команда


VALUES ('Катюша', 'Continental', 25),
('Omega', 'Continental', 25),
('Euskatel','Pro', 24)

Используем команду UPDATE:


Use [ProCyclingTeam]
UPDATE спортсмены
SET Возраст = Возраст+1
WHERE Команда LIKE 'Катюша%'

Удаляем кортеж со значением Солоненко Иван:


Use [Test]
DELETE FROM спортсмены
WHERE ФамилияИмя LIKE 'Солоненко Иван'

Вывод: В ходе выполнения данной лабораторной работы был изучен процесс построения DML
запросов с помощью Transact-SQL. Были изучены оператор OUTPUT, благодаря которому можно
вывести измененные запросами строки на экран. Были созданы различные запросы. Можно
сделать вывод, что SQL Server 2012 обладает всеми средствами для построения запросов такого
вида.