
- •Створення запитів до декількох таблиць бази даних
- •Постановка задачи
- •Исходные данные в таблицах
- •Оператор select, объединяющий две и более таблицы
- •Select, объединяющий две и более таблицы со сложным условием:
- •Оператор select с использованием агрегатных выражений select, который использует агрегатные функции и содержит группировку (group by и having):
- •Оператор select с использованием union select с использованием объединения нескольких запросов вместе (union):
- •Оператор select и самосоединение select, который реализует самосоединение:
- •Оператор select и join Добавим несколько записей в таблицу, нарушая целостность базы данных:
- •Select, реализующий внутреннее и внешнее (левое, правое и полное) объединение таблиц:
- •Select, реализующий перекрестное объединение таблиц:
- •Оператор select и вложенные подзапросы select с использованием вложенных подзапросов:
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний аерокосмічний університет ім. М.Є. Жуковського
“Харківський авіаційний інститут”
Кафедра комп’ютерних систем та мереж
Титульный лист заполняется на украинском языке
Остальная часть отчета может быть как на украинском, так и на русском
Лабораторна робота № 4
з дисципліни “Основи баз даних”
Створення запитів до декількох таблиць бази даних
ХАІ.503.535.14В.050102, 1105079 ПЗ
Виконав студент гр. 535Б Сабельніков І.В.Фамилия И.О.
01.03.2014
(підпис, дата)
Перевірив к.т.н. доцент кафедри 503
(науковий ступінь, вчене звання, посада)
Шостак А.В.
(підпис, дата) (П.І.Б.)
Харків 2014
Постановка задачи
Постановка задачи: на основании таблиц физической модели данных, бизнес-правил предметной области и скриптов создания таблиц БД создать:
Создать оператор SELECT, объединяющий две и более таблицы с простым условием.
Создать оператор SELECT, который связывает две и более таблицы с более сложным условием.
Создать оператор SELECT, который использует агрегатные функции и содержит группировку (GROUP BY и HAVING).
Создать оператор SELECT с использованием объединения нескольких запросов вместе (UNION).
Создать оператор SELECT, который реализует самосоединение.
Создать операторы SELECT, реализующие внешнее объединение таблиц (левое, правое и полное).
Создать оператор SELECT с использованием вложенных подзапросов.
Для создания указанных скриптов и запросов использовать команды языка манипулирования данными DML.
Письменный отчет по лабораторной работе должен содержать:
Титульный лист, содержащий – название лабораторной работы, фамилию, имя, отчество, номер группы исполнителя, дату сдачи.
Диаграмму БД.
Заполненные таблицы БД.
SQL-операторы SELECT для работы с БД.
Привести примеры работы основных операторов в соответствии с постановкой задачи (в виде оператор + результат его работы).
Выводы по лабораторной работе (в выводах отразить особенности занесения и модификации информации в БД, SQL-операторов SELECT и пути дальнейшей модернизации БД).
Исходные данные в таблицах
Физическая модель данных
Таблица dbo.Question
Таблица dbo.Session
Таблица dbo.TestCase
Таблица dbo.Type
Таблица dbo.Account
Оператор select, объединяющий две и более таблицы
Все манипуляции представлены в виде кода команды и результата ее выполнения. Исходные состояния таблиц приведены в предыдущем разделе.
Перед каждой демонстрацией состояние базы данных сбрасывается к исходному!
SELECT, объединяющий две и более таблицы с простым условием:
SELECT a.Nick_Name, b.Name as 'Type', 'Type (case-when)' =
CASE a.Account_Type
WHEN 1 THEN 'Teacher'
WHEN 2 THEN 'Just a student'
WHEN 3 THEN 'Banned User'
WHEN 4 THEN 'Administator'
ELSE 'Unknown type = ' + CONVERT(nvarchar, a.Account_Type)
END,
'Type description' = b.Description, FLOOR((COS(PI()*b.Id/5))*1000)/1000 as 'Just an experiment'
FROM dbo.Account a, dbo.[Type] b -- Type is a keyword, so that's why we put it in brackets
WHERE a.Account_Type = b.Id;
SELECT a.Full_Name, t.Name, q.Name
FROM dbo.Account a, dbo.TestCase t, dbo.Question q
WHERE (a.Id = t.Id_Creator AND t.Id = q.Id_Test)
SELECT a.Full_Name, t.Name, s.Start_Time, 'Start time (Day of week)' = DATENAME(WEEKDAY, s.Start_Time), DATEDIFF(DAY, s.Start_Time, SYSDATETIME()) as 'Days ago'
FROM dbo.Account a, dbo.[Session] s, dbo.TestCase t
WHERE a.Id = s.Id_Account AND s.Id_Test = t.Id;