
Рабочий стол / Laba_1_BD
.docМіністерство освіти і науки України
Черкаський політехнічний технікум
Лабораторна робота
з дисципліни: «Бази даних»
на тему: «Використання запитів в БД на мові SQL»
Виконав:
студент групи ПС 3-1
Ошовський Б.С.
Перевірив: викладач
Трембовецька Т.В.
2013
Мета: Виробити навички використання з’єднань та підзапитів.
Порядок виконання лабораторної роботи:
1. Ознайомитись та створити таблиці БД Example.
Використовувана БД складається з наступних таблиць:
ТАБЛИЦЯ
2: Customers
Поля
таблиці:
cnum
cname city rating snum
2001
Hoffman London 100
1001
2002
Giovanni Rome 200
1003
2003
Liu SanJose 200
1002
2004
Grass Berlin 300
1002
2006
Clemens London
100
1001
2008
Cisneros SanJose
300
1007
2007
Pereira Rome 100 1004
ТАБЛИЦЯ 1: Salespeople
Поля таблиці:
snum sname city comm
1001 Peel London 0.12
1002 Serres San Jose 0.13
1004 Motika London 0.11
1007 Rifkin Barcelona 0.15
1003 Axelrod New York 0.10
ТАБЛИЦЯ 3: Orders
Поля таблиці:
onum amt odate cnum snum
3001 18.69 10/03/1990 2008 1007
3003 767.19 10/03/1990 2001 1001
3002 1900.10 10/03/1990 2007 1004
3005 5160.45 10/03/1990 2003 1002
3006 1098.16 10/03/1990 2008 1007
3009 1713.23 10/04/1990 2002 1003
3007 75.75 10/04/1990 2004 1002
3008 4723.00 10/05/1990 2006 1001
3010 1309.95 10/06/1990 2004 1002
3011 9891.88 10/06/1990 2006 1001
2. Створити запити:
1. Напишіть запит, який би вивів список номерів замовлень, з ім'ям замовника, який зробив ці замовлення.
2. Напишіть запит, який би видавав імена продавця і замовника для кожного номера продавця після номера замовлення.
3. Напишіть запит, який би виводив всіх замовників, обслуговуваних продавцем з комісійними вище 12% . Виведіть ім’я замовника, ім’я продавця, і ставку комісійних продавця.
4
snum
-
номер
продавця
sname
- ім’я продавця
city
- місто проживання продавця і
замовника
comm
- комісійні продавця
cnum
- номер замовника
cname
- ім’я замовника
rating
- рейтинг (оцінка)
onum
- номер (ордер) замовлення
amt
- сума замовлення
odate
- дата замовлення
5. Напишіть запит, який би вивів всі пари продавців які живуть в одному і тому ж місті. Виключіть комбінації продавців з ними ж самими, а також дублікати рядків, які виводяться в зворотному порядку.
6. Напишіть запит, який вивів би всі замовлення по номеру замовника, імена цих замовників, виключавши дублікати.
7. Напишіть запит, який вивів би імена і міста всіх замовників з такою ж оцінкою як у Hoffmanа. Напишіть запит, що використовує поле cnum Hoffmanа, а не його оцінку, так щоб воно могло бути використане, якщо його оцінка раптом зміниться.
8. Напишіть запит з підзапитом для отримання всіх номерів для замовника з ім'ям Cisneros. Припустимо, що ви не знаєте номера цього замовника, указуваного в полі cnum.
9. Напишіть запит, який вивів би імена і оцінки всіх замовників які мають усереднені суми замовлень.
10. Напишіть запит, який би вибрав загальну суму всіх замовлень для кожного продавця, у якого ця загальна сума більша, ніж сума найбільшого замовлення в таблиці.
11. Напишіть запит, який би використовував оператор EXISTS для відбору всіх продавців, які мають замовників з оцінкою 300.
12. Виконати попереднє завдання, використовуючи об'єднання ?
13. Напишіть запит з оператором EXISTS, який вибере всіх продавців, що мають замовників у своїх містах, але їх не обслуговують.
14. Напишіть запит, який витягував би з таблиці Замовників кожного замовника, призначеного до продавця, який в даний момент має принаймні ще одного замовника (крім замовника якого ви виберете ) з замовленнями в таблиці Orders.
Реалізовані запити :
Запит 1:
SELECT cname, onum
FROM Customers INNER JOIN Orders ON Customers.cnum = Orders.cnum
ORDER BY onum;
Запит 2:
SELECT onum, sname, cname
FROM (Customers INNER JOIN Orders ON Customers.cnum = Orders.cnum) INNER JOIN Salespeople ON Orders.snum = Salespeople.snum
ORDER BY onum;
Запит 3:
SELECT sname, cname, comm
FROM (Customers INNER JOIN Orders ON Customers.cnum = Orders.cnum) INNER JOIN Salespeople ON Orders.snum = Salespeople.snum
WHERE comm > 0.12;
Запит 4:
SELECT Customers.cnum, cname, amt * comm AS [Сума комісійних]
FROM (Customers INNER JOIN Orders ON Customers.cnum = Orders.cnum) INNER JOIN Salespeople ON Orders.snum = Salespeople.snum
WHERE Rating > 100;
Запит 5:
SELECT first.sname AS [Ім’я 1], second.sname AS [Ім’я 2], first.city AS Місто
FROM Salespeople AS [first], Salespeople AS [second]
WHERE first.city = second.city
AND first.sname < second.sname;
Запит 6:
SELECT DISTINCT Orders.cnum, cname, onum
FROM (Customers INNER JOIN Orders ON Customers.cnum = Orders.cnum) INNER JOIN Salespeople ON Orders.snum = Salespeople.snum;
Запит 7:
SELECT cname, city
FROM Customers
WHERE rating = (SELECT rating FROM Customers WHERE cnum = 2001);
Запит 8:
SELECT onum, Customers.cname
FROM Customers INNER JOIN Orders ON Customers.cnum = Orders.cnum
WHERE (((Orders.cnum)=(SELECT cnum FROM Customers WHERE cname = "Cisneros")));
Запит 9:
SELECT cname, rating
FROM Customers INNER JOIN Orders ON Customers.cnum=Orders.cnum
GROUP BY cname, rating
HAVING SUM(amt) = (SELECT AVG(amt) FROM Orders);
Запит 10:
SELECT cname, SUM(Orders.amt) AS [Сума замовлень], MAX(Orders.amt) AS [Максимальна сума]
FROM Customers INNER JOIN Orders ON Customers.cnum = Orders.cnum
GROUP BY cname
HAVING SUM(Orders.amt) > (SELECT MAX(amt) FROM Orders);
Запит 11:
SELECT Salespeople.sname
FROM Customers, Salespeople
WHERE Exists (SELECT snum FROM Customers WHERE Salespeople.snum = Customers.snum AND rating = 300)
GROUP BY Salespeople.sname;
Запит 12:
SELECT Salespeople.sname
FROM Customers, Salespeople
WHERE Salespeople.snum = (SELECT snum FROM Customers WHERE Salespeople.snum = Customers.snum AND rating = 300)
GROUP BY Salespeople.sname;
Запит 13:
SELECT *
FROM Salespeople
WHERE EXISTS (SELECT *
FROM Customers
WHERE Customers.city = Salespeople.city
AND Salespeople.snum <> Customers.snum);
Запит 14:
SELECT *
FROM Customers AS a
WHERE EXISTS (SELECT * FROM Orders b WHERE a.snum = b.snum AND a.cnum <> b.cnum);
Результати запитів:
Запит 1:
Запит 2:
Запит 3:
Запит 4:
Запит 5:
Запит 6:
Запит 7:
Запит 8:
Запит 9:
Запит 10:
Запит 11:
Запит 12:
Запит 13:
Запит 14:
ВИСНОВОК
В даній лабораторній роботі я вдосконалив навички використання з’єднань та підзапитів, використовуючи їх у створюваних запитах.