МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ "ЛЬВІВСЬКА ПОЛІТЕХНІКА"
ІНСТИТУТ ПІСЛЯДИПЛОМНОЇ ОСВІТИ
/
ЗВІТ ДО ЛАБОРАТОРНОЇ РОБОТИ №3
на тему:
«Основні інструкції мови SQL. Однотабличні запити»
з курсу:
"Бази даних"
Львів – 2014
Мета: Вивчення синтаксису інструкції SELECT, отримання практичних навиків написання однотабличних запитів.
Хід роботи
Вправа 1. Модифікуйте запит з прикладу 1, щоб результатом було повернення лише даних про ім’я замовника та його розміщення.
SELECT
*
FROM Customers
Результатом буде запит:
SELECT
cname, city
FROM Customers
Виконання зображено на рис. 1.
/
Рис. 1. Запит до вправи 1
Вправа 2. Модифікуйте запит з прикладу 2, так щоб результатом було повернення списку замовників розміщених у Лондоні або Римі.
SELECT
cname,
city,
rating
FROM Customers
WHERE
city = 'London'
Результатом буде запит:
SELECT
cname,
city,
rating
FROM Customers
WHERE
city = 'London' or city = 'Rome'
Виконання зображено на рис. 2.
/
Рис. 2. Запит до вправи 2
Вправа 3. Модифікуйте запит з прикладу 2, так щоб результатом було повернення списку замовників розміщених за межами Лондона та із рівнем переваги понад 200.
Результатом буде запит:
SELECT
cname,
city,
rating
FROM Customers
WHERE
city <> 'London' and rating > 200
Виконання зображено на рис. 3.
/
Рис. 3. Запит до вправи 3
Вправа 4. Модифікуйте запит з прикладу 2, так щоб результатом було повернення списку замовників імена, яких починаються на “Gr” .
Результатом буде запит:
SELECT
cname,
city,
rating
FROM Customers
WHERE
cname like 'Gr%'
Виконання зображено на рис. 4.
/
Рис. 4. Запит до вправи 4
Вправа 5. Модифікуйте запит з прикладу 2, так щоб результатом було повернення списку замовників у іменах, яких більше 5-ти букв.
Результатом буде запит:
SELECT
cname,
city,
rating
FROM Customers
WHERE
LEN(cname) > 5
Виконання зображено на рис. 5.
/
Рис. 5. Запит до вправи 5
Вправа 6. Модифікуйте запит з прикладу 3, так щоб результатом було повернення списку замовників, що не співпрацюють із продавцем Peel, а також із продавцями, у яких комісія перевищує 0,13 .
SELECT cname,city,rating
FROM Customers
WHERE snum NOT IN
(
SELECT snum
FROM Salers
WHERE sname = 'Peel')
Результатом буде запит:
SELECT
cname,
city,
rating
FROM Customers
WHERE
snum NOT IN (
SELECT
snum
FROM Salers
WHERE
sname = 'Peel' or comm > 0.13
)
Виконання зображено на рис. 6.
/
Рис. 6. Запит до вправи 6
Вправа 7. Модифікуйте запит з прикладу 3, так щоб результатом було повернення списку замовників, що не здійснювали операцію купівлі продажу після 04-09-2013.
Результатом буде запит:
SELECT
cname,
city,
rating
FROM Customers
WHERE
cnum NOT IN (
SELECT
cnum
FROM Orders
WHERE
odate > '2013-09-04'
)
Виконання зображено на рис. 7.
/
Рис. 7. Запит до вправи 7
Вправа 8. Реалізуйте запит, результатом якого є об’єднаний список замовників із вправи 6 та вправи 7 (підказка: для об’єднання результатів двох запитів застосуйте оператор UNION).
Результатом буде запит:
SELECT
cname,
city,
rating
FROM Customers
WHERE
snum NOT IN (
SELECT
snum
FROM Salers
WHERE
sname = 'Peel' or comm > 0.13
)
union
SELECT
cname,
city,
rating
FROM Customers
WHERE
cnum NOT IN (
SELECT
cnum
FROM Orders
WHERE
odate > '2013-09-04'
)
Виконання зображено на рис. 8.
/
Рис. 8. Запит до вправи 8
Вправа 9. Спробуйте виконати запиит, поясніть помилку, що виникла.
SELECT
snum,
cname,
COUNT(cnum)
FROM Customers
GROUP BY
Snum
При виконанні виникла помилка: Column 'Customers.cname' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause. Це пояснюється тим, що ми не вказали назву агрегатної функції. В запит потрібно внести наступні зміни:
SELECT
snum,
cname,
COUNT(cnum) as N
FROM Customers
GROUP BY
snum,
cname
Виконання зображено на рис. 9.
/
Рис. 9. Запит до вправи 9
Вправа 10. Реалізуйте запит, котрий підрахує кількість операцій купівлі продажу за кожен з днів.
Результатом буде запит:
SELECT
odate,
COUNT(odate) as N
FROM Orders
GROUP BY
Odate
Виконання зображено на рис. 10.
/
Рис. 10. Запит до вправи 10
Вправа 11. Розширте запит із вправи 10, так щоб було враховано лише продавців із комісійними неменшими, аніж 0,12.
Результатом буде запит:
SELECT
odate,
COUNT(odate) as N
FROM Orders
WHERE snum in
(
SELECT snum
FROM Salers
WHERE comm >= 0.12
)
GROUP BY
Odate
Виконання зображено на рис. 11.
/
Рис. 11. Запит до вправи 11
Вправа 12. Модифікуйте запит з прикладу 6, так щоб при підрахунку кількості замовників були враховані лише замовники із кодом переваги вищим за 200.
SELECT
snum,
COUNT(cnum)
FROM Customers
GROUP BY
snum
HAVING
COUNT(cnum) > 2
Результатом буде запит:
SELECT
rating,
COUNT(cnum) AS N
FROM Customers
GROUP BY
rating
HAVING (rating) > 200
Виконання зображено на рис. 12.
/
Рис. 12. Запит до вправи 12
Вправа 13. Реалізуйте запит, що видасть результати про сумарну суму усіх операцій купівлі продажу для кожного дня і по кожному продавцю. У результуючий набір повинні увійти лише ті дні, коли сума операцій перевищила 3000, а до розгляду було прийнято лише операції купівлі-продажу на суму вищу за 100.
Результатом буде запит:
SELECT
odate,
snum,
SUM(amt) as SumOfSales
FROM Orders
WHERE amt > 100
GROUP BY
odate,
snum
HAVING SUM(amt) > 3000
Виконання зображено на рис. 13.
/
Рис. 13. Запит до вправи 13
Висновки:
В результаті виконання роботи я ознайомився та вивчив синтаксис інструкції SELECT, отримав практичні навики написання однотабличних запитів.