C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Нужна помощ по SQL
nut
Отправлено: 18.04.2006, 19:19


Не зарегистрирован







дали задание в интитуте сделал все кроме 7, уже третий день ломаю голову ни как не соображу.

6. Напишите запрос, который сосчитал бы число заказчиков регистрирующих каждый день свои заказы. Если продавец имел более одного заказа в данный день, он должен учитываться только один раз (запрос пишите в три приема: 1-е выберите всех заказчиков у которых больше одного заказа (коды 2004,2006,2008); 2-е выберите только те заказы которые выполнены в разные дни; 3-е выведите исключив повторения с помощью функции COUNT количество заказов).

10. Напишите запрос, который бы выводил общие заказы на каждый день и помещал результаты в нисходящем порядке.

вот в этих задания нельзя использавать вложенные запросы и использовать несколько таблиц, задания я выполнил но ини неподходят по условию

6 select * from customers where cnum in (select a.cnum from orders a, orders b where a.cnum=b.cnum and a.odate<>b.odate and a.onum>b.onum)

10 select * from orders where odate in (select odate from orders group by odate having count(odate)>1) order by odate desc

и вот еще

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

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

5. Напишите запрос, выбирающий всех продавцов (по их имени и номеру) которые в своих городах имеют заказчиков которых они не обслуживают.

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

8. Напишите запрос который извлекал бы из таблицы Заказчиков каждого заказчика назначенного к продавцу который в данный момент имеет по крайней мере еще одного заказчика (кроме заказчика которого вы выберете) с заказами в таблице Заказов (подсказка: это может быть похоже на структуру в примере с нашим трехуровневым подзапросом).

а вот тут можно использавать что угодно и как угодно
буду очень благодарен если кто поможет

вот таблицы

Продавцы(Salespeople)
snum sname city comm
1001 Peel London 12
1002 Serres San Jose 13
1004 Motika London 11
1007 Rifkin Barcelona 15
1003 Axelrod New York 10

Заказчики(Customers)
cnum cname city rating
2001 Hoffman London 100
2002 Giovanni Rome 200
2003 Liu San Jose 200
2004 Grass Berlin 300
2006 Clemens London 100
2008 Cisneros San Jose 300
2007 Pereira Rome 100

Заказы(Orders)
onum amt odate cnum snum
3001 18.69 03.10.2003 2008 1007
3003 767.19 03.10.2003 2001 1001
3002 1900.10 03.10.2003 2007 1004
3005 5160.45 03.10.2003 2003 1002
3006 1098.16 03.10.2003 2008 1007
3009 1713.23 04.10.2003 2002 1003
3007 75.75 04.10.2003 2004 1002
3008 4723.00 05.10.2003 2006 1001
3010 1309.95 06.10.2003 2004 1002
3011 9891.88 06.10.2003 2006 1001
Grigoriy
Отправлено: 18.04.2006, 20:56


Мастер участка

Группа: Участник
Сообщений: 381



Топай сюда. Тут полно студентов...

http://forum.vingrad.ru/index.php?s=872df5...f0&showforum=98
AVC
Отправлено: 19.04.2006, 08:39


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

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

CODE

Select
 s.*
,c.*
From
 avc.Salespeople s
,avc.Customers   c
Where 1 = 1
 and Upper(c.city) = Upper(s.city)
 and not exists
 (Select o.onum From avc.Orders o
  Where o.snum = s.snum and o.cnum = c.cnum
 )


User Attached Image Скачать файл
nut.sql


nut
Отправлено: 19.04.2006, 22:15


Не зарегистрирован







to AVC спасибо
и вот еще забыл
6. Напишите запрос, который бы использовал оператор EXISTS для извлечения всех продавцов, которые имеют заказчиков с оценкой 300.
AVC
Отправлено: 20.04.2006, 11:18


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE

6. Напишите запрос, который бы использовал оператор EXISTS для извлечения всех продавцов, которые имеют заказчиков с оценкой 300.

CODE

Select s.* From avc.Salespeople s
Where exists
(Select o.onum From avc.Customers c, avc.Orders o
 Where c.cnum = o.cnum and c.Rating >= 300 and o.snum = s.snum
)


PS.
Хоть объемы далеко не те, но в очередной раз убеждаюсь — join лучше.
Хотя ... Это зависит от конкретных условий.
CODE

Трассировка oracle

TKPROF: Release 8.1.7.0.0 — Production on +Єт LяЁ 20 11:06:07 2006

********************************************************************************
count    = number of times OCI procedure was executed
cpu      = cpu time in seconds executing
elapsed  = elapsed time in seconds executing
disk     = number of physical reads of buffers from disk
query    = number of buffers gotten for consistent read
current  = number of buffers gotten in current mode (usually for update)
rows     = number of rows processed by the fetch or execute call
********************************************************************************

Select s.* From avc.Salespeople s
Where exists
(Select o.onum From avc.Customers c, avc.Orders o
 Where c.cnum = o.cnum and c.Rating >= 300 and o.snum = s.snum
)

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.01       0.02          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.00          0         11         44           2
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.01       0.02          0         11         44           2

********************************************************************************

-- без exists
Select distinct s.*
From avc.Salespeople s, avc.Customers c, avc.Orders o
Where o.snum = s.snum and o.cnum = c.cnum and c.Rating >= 300

call     count       cpu    elapsed       disk      query    current        rows
------- ------  -------- ---------- ---------- ---------- ----------  ----------
Parse        1      0.00       0.00          0          0          0           0
Execute      1      0.00       0.00          0          0          0           0
Fetch        1      0.00       0.00          0          3         12           2
------- ------  -------- ---------- ---------- ---------- ----------  ----------
total        3      0.00       0.00          0          3         12           2

********************************************************************************
nut
Отправлено: 20.04.2006, 18:29


Не зарегистрирован







спасибо с остальными вроде разобрался

Вернуться в Работа с базами данных в C++Builder