Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Рабочий стол / Laba_1_BD

.doc
Скачиваний:
24
Добавлен:
22.02.2016
Размер:
190.46 Кб
Скачать

Міністерство освіти і науки України

Черкаський політехнічний технікум

Лабораторна робота

з дисципліни: «Бази даних»

на тему: «Використання запитів в БД на мові 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 - дата замовлення

. Напишіть запит, який обчислив би суму комісійних продавця для кожного номеру замовника з оцінкою вище 100.

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:

ВИСНОВОК

В даній лабораторній роботі я вдосконалив навички використання з’єднань та підзапитів, використовуючи їх у створюваних запитах.

Соседние файлы в папке Рабочий стол