eМІНІСТЕРСТВО ОСВІТИІ НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА
Лабораторна робота №2
з дисципліни
"Бази даних та знань"
Отримання даних та статистичної інформації
з бази даних за допомогою запитів мовою T-SQL
Варіант №12
Львів – 2012
Мета роботи: ознайомитися зі структурованою мовою запитів SQL на основі її діалекту Transact-SQL для СКБД Microsoft SQL Server 2005 та отримати навики написання SQL-запитів для здійснення вибірки даних та отримання статистичної інформації за допомогою інструментарію Management Studio.
Порядок виконання роботи
Вдома детально вивчити поданий у інструкції довідковий теоретичний матеріал до лабораторної роботи.
Згідно варіанту (порядкового номера в журналі викладача) завдання (таблиця 4.1), вдома написати SQL-запити для вибірки необхідних даних та статистичної інформації з баз даних, що вказані в додатку, а в лабораторії виконати ці запити до БД у графічному інструменті Management Studio, перевірити на працездатність та правильність отримуваних даних.
Отримані результати на комп’ютері продемонструвати викладачу.
За результатами виконаної роботи оформити звіт та здати його.
Завдання
Варіант 12.
1. БД «Комп. фірма». Знайти модель, частоту процесора та об’єм жорсткого диску для тих комп’ютерів, що комплектуються накопичувачами 10 або 20 Мб та випускаються виробником 'A'. Вивести: model, speed, hd. Вихідні дані впорядкувати за зростанням за стовпцем speed.
2. БД «Фірма прий. вторсировини». З таблиці Outcome_o вивести всю інформацію за 14 число будь-якого місяця.
3. БД «Комп. фірма». Знайдіть виробників ПК із процесором не менше 600 МГц. Вивести: maker.
4. БД «Комп. фірма». Знайти виробників ПК, моделей яких немає в продажу (тобто відсутні в таблиці PC).
5. БД «Комп. фірма». Знайти тих виробників ПК, усі моделі ПК яких є в наявності в таблиці PC (використовуючи операцію EXISTS). Вивести maker.
6. БД «Кораблі». Вивести значення таблиці Ships із коментарями, наприклад, 'name: California', 'class: Tennessee', 'launched: 1921'.
7. БД «Комп. фірма». Знайти тих виробників ПК, для яких не всі моделі ПК є в наявності в таблиці PC (використовувати засоби групової статистики). Вивести maker.
8. БД «Кораблі». Вкажіть назву та країну кораблів, що були потоплені в битвах, але лише для тих кораблів, для яких ця інформація є відомою. Вивести: ship, country. (Підказка: використовувати підзапити в якості обчислювальних стовпців та перевірку на NULL)
9. БД «Комп. фірма». Для таблиці Product отримати підсумковий набір у вигляді таблиці зі стовпцями maker, pc, у якій для кожного виробника необхідно вказати, чи виробляє він ('yes'), чи ні ('no') відповідний тип продукції. У першому випадку ('yes') додатково вказати поруч у круглих дужках загальну кількість наявної (тобто, що знаходиться в таблиці PC) продукції, наприклад, 'yes(2)'. (Підказка: використовувати підзапити в якості обчислювальних стовпців та оператор CASE)
10. БД «Комп. фірма». Для кожної моделі продукції з усієї БД виведіть її найвищу ціну. Вивести: type, model, максимальна ціна. (Підказка: використовувати оператор UNION)
Короткі теоретичні відомості, що необхідні
для виконання лабораторної роботи
1. Відомості про 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 – основний оператор. Після нього перераховуються стовпці, які необхідно отримати від сервера.
FROM – у цій секції вказуються таблиці, з яких необхідно отримати певні дані.
WHERE – у цій секції можна задати параметри пошуку та обмеження для вихідних даних.
GROUP BY – у цій секції можна вказати перелік стовпців, за якими необхідно згрупувати дані.
HAVING – у цій секції можна задати додаткові обмеження пошуку для створених груп.
ORDER BY – у цій секції можна вказати параметри сортування, а точніше, стовпці, за якими буде відсортований результат.
Запити мовою T-SQL
/*1*/ SELECT PC.model,speed,hd FROM PC JOIN Product ON (Pc.model=Product.model)
WHERE hd=10 or hd=20 and maker='A'
ORDER BY speed ASC;
/*2*/SELECT * FROM Outcome_o WHERE DAY (date) =14;
/*3*/ SELECT DISTINCT maker FROM Product JOIN PC ON (Product.model=PC.model) WHERE speed>=600;
/*4*/SELECT maker FROM Product WHERE NOT EXISTS (Select*FROM PC WHERE PC.model=Product.model) AND type= 'PC';
/*5*/ SELECT distinct maker FROM Product Where Type='PC' AND maker not in
(SELECT maker FROM Product WHERE NOT EXISTS (Select*FROM PC WHERE PC.model=Product.model) AND type= 'PC')
/*6*/SELECT 'name: ' + name name, 'class: '+class class, 'launched: '+cast(launched AS NCHAR) launched
FROM Ships
/*7*/ SELECT Pl.maker FROM product Pl
WHERE type ='PC' --AND NOT EXISTS (SELECT PC.model FROM PC WHERE PC.model=Pl.model)
GROUP BY Pl.maker
HAVING count(*)!=
(SELECT COUNT(*) FROM (select distinct P2.model from Product P2,PC WHERE P2.maker=Pl.maker AND P2.model=PC.model) aa)
/*8*/SELECT ship,
(SELECT country FROM Classes WhERE class =
(SELECT class From ships WHERE name = ship))country
FROM Outcomes WHERE result = 'sunk' AND
(SELECT country FROM Classes WHERE class =
(SELECT class FROM ships WHERE name=ship )) is not null
/*9*/SELECT DISTINCT P.maker,
CASE
WHEN (SELECT count(model)FROM PC WHERE model IN (SELECT P2.model FROM product P2
WHERE P2.maker=P.maker ) ) <>0
THEN 'YES('+ CAST ((SELECT count (model)FROM PC WHERE model IN (SELECT P2.model
FROM product P2 WHERE P2.maker = P.maker)) AS nvarchar)+')'
ELSE 'NO'
END pc
FROM product P
--GROUP BY P.maker
/*10*/ SELECT 'PC' type, model, MAX(price) maxprice FROM PC
GROUP BY model
UNION
SELECT 'Printer' type, model, MAX(price) maxprice FROM Printer
GROUP BY model
UNION
SELECT 'Laptop' type, model, MAX(price) maxprice FROM Laptop
GROUP BY model
Отриманий результат
model speed hd
---------- ------ -------------
1232 450 10
1260 500 10
1232 500 10
1233 750 20
(строк обработано: 4)
point date out
----- ----------------------- ---------------------
1 2001-03-14 00:00:00.000 15348,00
3 2001-09-14 00:00:00.000 2300,00
(строк обработано: 2)
maker
----------
A
B
(строк обработано: 2)
maker
----------
E
E
(строк обработано: 2)
maker
----------
A
B
(строк обработано: 2)
name class launched
-------------------------- --------------------------- ----------------------------------------
name: California class: Tennessee launched: 1921
name: Haruna class: Kongo launched: 1916
name: Hiei class: Kongo launched: 1914
name: Iowa class: Iowa launched: 1943
name: Kirishima class: Kongo launched: 1915
name: Kongo class: Kongo launched: 1913
name: Missouri class: Iowa launched: 1944
name: Musashi class: Yamato launched: 1942
name: New Jersey class: Iowa launched: 1943
name: North Carolina class: North Carolina launched: 1941
name: Ramillies class: Revenge launched: 1917
name: Renown class: Renown launched: 1916
name: Repulse class: Renown launched: 1916
name: Resolution class: Renown launched: 1916
name: Revenge class: Revenge launched: 1916
name: Royal Oak class: Revenge launched: 1916
name: Royal Sovereign class: Revenge launched: 1916
name: South Dakota class: North Carolina launched: 1941
name: Tennessee class: Tennessee launched: 1920
name: Washington class: North Carolina launched: 1941
name: Wisconsin class: Iowa launched: 1944
name: Yamato class: Yamato launched: 1941
(строк обработано: 22)
maker
----------
E
(строк обработано: 1)
ship country
-------------------- --------------------
Kirishima Japan
(строк обработано: 1)
maker pc
---------- -----------------------------------
A YES(7)
B YES(3)
C NO
D NO
E YES(1)
(строк обработано: 5)
type model maxprice
------- ---------- ---------------------
Laptop 1298 1050,00
Laptop 1321 970,00
Laptop 1750 1200,00
Laptop 1752 1150,00
PC 1121 850,00
PC 1232 600,00
PC 1233 980,00
PC 1260 350,00
Printer 1276 400,00
Printer 1288 400,00
Printer 1401 150,00
Printer 1408 270,00
Printer 1433 270,00
Printer 1434 290,00
(строк обработано: 14)
Висновок:
На цій лабораторній роботі я ознайомилась зі структурованою мовою запитів SQL на основі її діалекту Transact-SQL для СКБД Microsoft SQL Server 2005 та отримати навики написання SQL-запитів для здійснення вибірки даних та отримання статистичної інформації за допомогою інструментарію Management Studio.