Міністерство Освіти і Науки України
Національний університет «Львівська Політехніка»
Отримання даних та статистичної інформації з бази даних за допомогою запитів мовою T-SQL
Звіт до лабораторної роботи №2
з курсу: «Бази даних та знань»
Варіант 15
Мета роботи: ознайомитися зі структурованою мовою запитів SQL на основі її діалекту Transact-SQL для СКБД Microsoft SQL Server 2005 та отримати навики написання SQL – запитів для здійснення вибірки даних та отримання статистичної інформації за допомогою інструментарію Management Studio.
Варіант завдання №15
15
Варіант 15.
1. БД «Комп. фірма». Вивести моделі ноутбуків із кількістю RAM рівною 64 Мб. Вивести: model, ram, price. Вихідні дані впорядкувати за зростанням за стовпцем screen.
2. БД «Кораблі». З таблиці Ships вивести назви кораблів, що починаються на 'W' та закінчуються літерою 'n'.
3. БД «Комп. фірма». Знайдіть пари моделей ПК, що мають однакові швидкість та RAM (таблиця PC). У результаті кожна пара виводиться лише один раз. Порядок виведення: модель із більшим номером, модель із меншим номером, швидкість та RAM.
4. БД «Кораблі». Знайдіть кораблі, «збережені для майбутніх битв», тобто такі, що були виведені з ладу в одній битві ('damaged'), а потім (пізніше в часі) знову брали участь у битвах. Вивести: ship, battle, date.
5. БД «Комп. фірма». Знайдіть виробників, які б випускали ПК зі швидкістю 750 МГц та вище. Виведіть: maker.
6. БД «Фірма прий. вторсировини». З таблиці Income виведіть дати в такому форматі: рік.число_місяця.день, наприклад, 2001.02.15 (без формату часу).
7. БД «Комп. фірма». Знайдіть виробників, що випускають, по крайній мірі, дві різні моделі ПК. Вивести: maker, число моделей. (Підказка: використовувати підзапити в якості обчислювальних стовпців та операцію групування)
8. БД «Комп. фірма». Знайдіть виробників, які б випускали ноутбуки з мінімальною швидкістю не менше 600 МГц. Вивести: maker, мінімальна швидкість. (Підказка: використовувати підзапити в якості обчислювальних стовпців)
9. БД «Аеропорт». Для кожного рейсу (таблиця Trip) визначити тривалість його польоту. Вивести: trip_no, назва компанії, plane, town_from, town_to, тривалість польоту. (Підказка: використати для перевірки умов оператор CASE)
10. БД «Кораблі». Знайти назви всіх кораблів у БД, що складаються із двох та більше слів (наприклад, 'King George V'). Вважати, що слова в назвах розділяються одиничними пробілами, та немає кінцевих пробілів. Вивести: назву кораблів. (Підказка: використовувати оператор UNION )
Короткі теоретичні відомості
Відомості про Transact-SQL
Мова Transact-SQL (чи скорочено T-SQL) – це власний діалект мови структурованих запитів (Structured Query Language – SQL), що використовується в системі керування базами даних (СКБД) Microsoft SQL Server. Мова T-SQL призначена виключно для роботи з СКБД Microsoft SQL Server, хоча і є сумісною на початковому рівні зі стандартом ANSI SQL-92. Це означає, що основні базові оператори є такими ж, як і для інших відомих СКБД: Oracle, Sybase, DB2, MySQL, PostgreSQL. Тому отримані навики написання SQL-запитів за допомогою T-SQL можуть бути використані й при роботі із цими переліченими серверами баз даних. Але при цьому слід враховувати, що в кожній реляційній СКБД використовуються різні розширення та способи підвищення продуктивності, що доповнюють вказаний стандарт та навіть виходять далеко за його рамки. Це такі засоби, як умовна обробка (IF … THEN), керуючі оператори (наприклад, цикли WHILE), змінні, засоби оброблення помилок тощо.
У загальному мова SQL поділяється на три частини:
Оператори визначення даних – DDL (Data Definition Language). Призначені для опису структури баз даних. Це такі як: CREATE (створити), ALTER (змінити), DROP (видалити).
Оператори маніпулювання даними – DML (Data Manipulation Language). Призначені для отримання, вставки, видалення чи зміни даних у базі даних. Це такі як: SELECT (вибрати), INSERT (вставити), UPDATE (обновити), DELETE (видалити).
Оператори керування доступом до даних – DCL (Data Control Language). Це такі як: GRANT (надати доступ), REVOKE (анулювати попередні права).
Цей «кістяк» є загальним для всіх існуючих діалектів мови SQL. Найбільшим по своїй структурі та можливостям серед них є оператор вибірки SELECT. Саме тому ця лабораторна робота і є зорієнтованою на написання SQL-запитів на основі оператора SELECT.
Оператор вибірки SELECT
SELECT [ DISTINCT ]
< * | перелік стовпців | формули | статистичні функції >
FROM < перелік таблиць [ псевдоніми ] >
[ WHERE < умова відбору даних > ]
[ GROUP BY < ім’я стовпця(ів) > [ HAVING < умова для групи > ] ]
[ ORDER BY < перелік стовпців | порядкові № стовпців > ] [ ; ]
SELECT – основний оператор. Після нього перераховуються стовпці, які необхідно отримати від сервера.
FROM – у цій секції вказуються таблиці, з яких необхідно отримати певні дані.
WHERE – у цій секції можна задати параметри пошуку та обмеження для вихідних даних.
GROUP BY – у цій секції можна вказати перелік стовпців, за якими необхідно згрупувати дані.
HAVING – у цій секції можна задати додаткові обмеження пошуку для створених груп.
ORDER BY – у цій секції можна вказати параметри сортування, а точніше, стовпці, за якими буде відсортований результат.
Зауваження: згідно негласного правила, прийнято писати команди та ключові слова мови SQL великими літерами, а назви імен таблиць, стовпців та відмінних від констант змінних – змішаним регістром літер, хоча така вимога для СКБД не є обов’язковою.
Повний шлях
Повний формат звертання до таблиці виглядає так :
БазаДаних.Схема.Таблиця (Labor_SQL.Pavelchak.Classes )
Якщо вже існує підключення до потрібної бази даних, то її можна не вказувати, а вказати лише схему та таблицю :
Схема.Таблиця ( Pavelchak.Classes )
Якщо таблиця створена для схеми dbo, тоді можна пропустити й цей параметр.
Таблиця ( Ships )
Тому рекомендується створювати таблиці саме із цими правами. Якщо необхідно звернутися до іншої БД, але відомо, що таблиця належить dbo, тоді до таблиці можна звернутися так :
БазаДаних. . Таблиця ( Labor_SQL. .Ships )
Проста вибірка
SELECT * FROM Students;
Буде виведено таблицю з усіма даними. Груповий символ * замінює перелік з усіма стовпцями таблиці.
Створені SQL-запити до БД та результати їхнього виконання:
/* 1 */
SELECT model, ram, price FROM Laptop
WHERE ram=64
ORDER BY screen ASC
/* 2 */
SELECT name FROM Ships
WHERE name LIKE 'w%n'
/* 3 */
SELECT C1.model model1, C2.model model2, C1.ram, C1.speed
FROM PC C1, PC C2
WHERE C1.ram = C2.ram AND C1.speed = C2.speed AND C1.model > C2.model
/* 4 */
SELECT ship, battle, date
FROM Battles JOIN Outcomes ON battle=name
WHERE result LIKE 'damaged'
/* 5 */
SELECT maker
FROM Product
WHERE model IN (SELECT model FROM PC WHERE speed>=750)
/* 6 */
SELECT date,
CONVERT(VARCHAR(10), date, 102) AS [YYYY.MM.DD]
FROM Income
/* 7 */
SELECT PC.maker FROM (
SELECT maker FROM Product
WHERE type='PC' GROUP BY maker
HAVING COUNT(*)>=2) PC
/* 8 */
SELECT maker
FROM laptop INNER JOIN product ON laptop.model = product.model WHERE laptop.speed >= 600
/* 9 */
SELECT trip_no,plane, (
CASE
WHEN time_out > time_in THEN '12:00:00'-time_out+time_in+'12:00:00'
ELSE time_in - time_out
END ) airtime
FROM trip
/* 10 */
SELECT name FROM ships WHERE name like '% % %'
UNION
SELECT ship FROM outcomes WHERE ship like '% % %'
/
/
Висновки: при виконанні даної лабораторної роботи було проведено ознайомлення зі структурованою мовою запитів SQL на основі її діалекту Transact-SQL для СКБД Microsoft SQL Server 2005 та отримані навики написання SQL-запитів для здійснення вибірки даних та отримання статистичної інформації за допомогою інструментарію Management Studio.