Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SOS!Помогите разобраться с задачкой / 25 сообщений из 26, страница 1 из 2
12.03.2018, 15:35
    #39613532
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Привет, ребята!
Помогите , пожалуйста разобраться как решить задачку!
Я начинающий спец по выборке SQL запросов, не все сразу становится понятно, поэтому прошу вас о помощи.
Условия задачки такие :
Select all Employees who did not make any orders before July 8th 1996 (including);
мой половинчатый запрос таков
SELECT LastName,FirstName
FROM Employees JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID
WHERE OrderDate <= '1996-07-08' и понимаю, что нужно применить функцию COUNT на условие (who did not make any orders) но не понимаю как применить? подзапрос делать?
ниже ссылка , где можно посмотреть связи таблиц
https://www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
...
Рейтинг: 0 / 0
12.03.2018, 15:51
    #39613551
Viewer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123 who did not make any orders before July 8th 1996
"нет человека, нет проблемы.."
нет заказа - нет даты заказа (OrderDate is null) - оставьте COUNT в покое..
...
Рейтинг: 0 / 0
12.03.2018, 15:54
    #39613556
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123,


1)

SELECT LastName,FirstName
FROM Employees LEFT JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID
WHERE OrderDate <= '1996-07-08' and Orders.EmployeeID is null


2)
SELECT LastName,FirstName
FROM Employees
WHERE not exists (select 1 from Orders where Employees.EmployeeID = Orders.EmployeeID and OrderDate <= '1996-07-08')

ps
если гугль правильно перевел

Выберите всех сотрудников, которые не делали заказы до 8 июля 1996 года (в том числе);

.....
stax
...
Рейтинг: 0 / 0
12.03.2018, 15:56
    #39613558
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Stax,

ой
... OrderDate <= date '1996-07-08' ...

....
stax
...
Рейтинг: 0 / 0
12.03.2018, 16:02
    #39613567
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Stax, по вашему запросу нет результатов никаких...
было добавлено и date, LEFT,and Orders.EmployeeID is null
...
Рейтинг: 0 / 0
12.03.2018, 16:03
    #39613570
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Viewer, ваша подсказка также не работает(((
...
Рейтинг: 0 / 0
12.03.2018, 16:04
    #39613571
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
database said- no result
...
Рейтинг: 0 / 0
12.03.2018, 16:06
    #39613574
Viewer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123Viewer, ваша подсказка также не работает(((
мне лень смотреть структуру таблиц, так что это была не подсказка а лишь намёк..
...
Рейтинг: 0 / 0
12.03.2018, 16:10
    #39613578
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
понятно)
...
Рейтинг: 0 / 0
12.03.2018, 16:12
    #39613581
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Код: plsql
1.
2.
3.
4.
5.
SELECT * FROM Employees 
WHERE NOT EXISTS (
SELECT * FROM Orders
 WHERE Employees.EmployeeID = Orders.EmployeeID and DATE(Orders.OrderDate) <= DATE("1996-07-08")
);



MySQL такой MySQL...
...
Рейтинг: 0 / 0
12.03.2018, 16:13
    #39613585
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Staxой


Stax, ой тут в плане медитации над разницей между ON и WHERE в OUTER JOIN. Медитируй.

SY.
...
Рейтинг: 0 / 0
12.03.2018, 16:22
    #39613596
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Dshedoo ,благодарю, есть результат))) а почему нельзя обыграть вариант соператорами is null ?
...
Рейтинг: 0 / 0
12.03.2018, 16:27
    #39613600
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123Dshedoo ,благодарю, есть результат))) а почему нельзя обыграть вариант соператорами is null ?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT  Employees.EmployeeID
  FROM      Employees
        LEFT JOIN
            Orders
          ON     Employees.EmployeeID = Orders.EmployeeID 
             AND
                 OrderDate <= date '1996-07-08'
  WHERE Orders.EmployeeID is null
/



Например:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
SQL> with employees as (
  2                     select level EmployeeID from dual connect by level <= 4
  3                    ),
  4          orders as (
  5                     select 1 EmployeeID,date '1996-07-01' OrderDate from dual union all
  6                     select 1,sysdate from dual union all
  7                     select 2,date '1996-07-01' from dual union all
  8                     select 3,sysdate from dual
  9                    )
 10  SELECT  Employees.EmployeeID
 11    FROM      Employees
 12          LEFT JOIN
 13              Orders
 14            ON     Employees.EmployeeID = Orders.EmployeeID 
 15               AND
 16                   OrderDate <= date '1996-07-08'
 17    WHERE Orders.EmployeeID is null
 18  /

EMPLOYEEID
----------
         4
         3

SQL> 



SY.
...
Рейтинг: 0 / 0
12.03.2018, 16:27
    #39613602
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123Stax, по вашему запросу нет результатов никаких...
было добавлено и date, LEFT,and Orders.EmployeeID is null

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> ed
Wrote file afiedt.buf

  1  with EMPLOYEES (EMPLOYEEID,FIRSTNAME) as (
  2  select 100, 'Steven' from dual union all
  3  select 101, 'Neena' from dual union all
  4  select 102, 'Lex' from dual union all
  5  select 103, 'Alexander' from dual)
  6  ,orders (orderId,EmployeeID,OrderDate) as (
  7  select 1,100,date '1996-07-08' from dual union all
  8  select 2,101,date '1997-07-08' from dual union all
  9  select 3,102,date '1995-07-08' from dual union all
 10  select 4,102,date '1999-07-08' from dual)
 11  SELECT FirstName
 12  FROM Employees LEFT JOIN Orders ON Employees.EmployeeID = Orders.EmployeeID and OrderDate <= date '1996-07-08'
 13* WHERE  Orders.EmployeeID is null
SQL> /

FIRSTNAME
---------
Alexander
Neena



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> ed
Wrote file afiedt.buf

  1  with EMPLOYEES (EMPLOYEEID,FIRSTNAME) as (
  2  select 100, 'Steven' from dual union all
  3  select 101, 'Neena' from dual union all
  4  select 102, 'Lex' from dual union all
  5  select 103, 'Alexander' from dual)
  6  ,orders (orderId,EmployeeID,OrderDate) as (
  7  select 1,100,date '1996-07-08' from dual union all
  8  select 2,101,date '1997-07-08' from dual union all
  9  select 3,102,date '1995-07-08' from dual union all
 10  select 4,102,date '1999-07-08' from dual)
 11  SELECT FirstName
 12  FROM Employees
 13* WHERE not exists (select 1 from Orders where Employees.EmployeeID = Orders.EmployeeID and OrderDate <= date'1996-07-08')
SQL> /

FIRSTNAME
---------
Alexander
Neena




.....
stax
...
Рейтинг: 0 / 0
12.03.2018, 16:30
    #39613607
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123Dshedoo ,благодарю, есть результат))) а почему нельзя обыграть вариант соператорами is null ?
Можно. Обыгрывай)
...
Рейтинг: 0 / 0
12.03.2018, 16:51
    #39613627
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
SYStaxой


Stax, ой тут в плане медитации над разницей между ON и WHERE в OUTER JOIN. Медитируй.

SY.

исправил (спешка к добру не приводит)

.....
stax
...
Рейтинг: 0 / 0
12.03.2018, 20:12
    #39613760
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
SY, спасибо! очень помогли))
а можно еще у вас попросить объяснить логику почему именно LEFT JOIN?
...
Рейтинг: 0 / 0
12.03.2018, 20:45
    #39613774
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Stax, благодарю !!
...
Рейтинг: 0 / 0
12.03.2018, 20:52
    #39613777
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123объяснить логику почему именно LEFT JOIN?

LEFT OUTER JOIN возвращает ВСЕ строки левой таблицы даже если в правой таблице соответствующей строки нет. В таком случае строка левой таблицы соединяется с гипотетической строкой правой таблицы где все поля NULL. Посему когда мы делаем LEFT OUTER JOIN по EmployeeID и OrderDate <= date '1996-07-08' то для всех Employee.EmployeeID для которых нет строк в Orders с таким-же EmployeeID и OrderDate <= date '1996-07-08' LEFT OUTER JOIN вернет NULL для всех полей Orders. После чего с помошью WHERE Orders.EmployeeID is NULL мы выбираем именно эти строки.

SY.
...
Рейтинг: 0 / 0
12.03.2018, 21:01
    #39613779
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Еще одно решение через MINUS:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
 SELECT  Employees.EmployeeID
   FROM  Employees
MINUS
 SELECT  EmployeeID
   FROM  Orders
   WHERE OrderDate <= date '1996-07-08'
/



SY.
...
Рейтинг: 0 / 0
12.03.2018, 21:05
    #39613781
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
SY! как для новичка, мне еще тренироваться и тенироваться с такого плана решениями))
может вы еще сможете подсказать что делаю не так в другой уже задаче?)))так свзять с 4 таблицами насколько я верно понимаю...

Вот условие
Display all customers information who ordered "Tofu" product, order results from highest customer id to lowest
вот мое решение
SELECT CustomerName,ContactName,Address,Ci ty,PostalCode,Country
FROM Customers JOIN Orders ON Customers.CustomerID = Orders.CustomerID
WHERE OrderID = (SELECT OrderID FROM OrderDetails JOIN Products ON OrderDetails.ProductID = Products.ProductID WHERE ProductName = 'Tofu')
ORDER BY CustomerID DESC
...
Рейтинг: 0 / 0
12.03.2018, 21:10
    #39613783
nikav123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
БД ругается : "Error 1: could not prepare statement (1 ambiguous column name: CustomerID)"
...
Рейтинг: 0 / 0
12.03.2018, 22:40
    #39613816
IgorSm
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123,
В запросе
Код: plsql
1.
2.
3.
4.
SELECT CustomerName,ContactName,Address,City,PostalCode,Country 
FROM Customers JOIN Orders ON Customers.CustomerID = Orders.CustomerID 
WHERE OrderID = (SELECT OrderID FROM OrderDetails JOIN Products ON OrderDetails.ProductID = Products.ProductID WHERE ProductName = 'Tofu') 
ORDER BY CustomerID DESC


Используется дважды столбец CustomerID , как от таблицы Customers так и Orders
Укажите явно требуемый столбец в конструкции ORDER BY.
Например , в виде ORDER BY Customers.CustomerID desc
...
Рейтинг: 0 / 0
12.03.2018, 23:06
    #39613825
xenix
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
nikav123,
авторDisplay all customers information who ordered "Tofu" product, order results from highest customer id to lowest

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT C.CustomerName,C.ContactName,C.Address,C.City,C.PostalCode,C.Country
 FROM CUSTOMERS C
 WHERE EXISTS
   (
      SELECT 1 FROM PRODUCTS P WHERE P.CUSTOMER_ID=C.CUSTOMER_ID AND 
        P.ProductName = 'Tofu'
   )
  ORDER BY C.CUSTOMER_ID DESC
...
Рейтинг: 0 / 0
13.03.2018, 00:00
    #39613839
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SOS!Помогите разобраться с задачкой
Это в каком таком дизайнe в таблице товаров окажется поле покупатель?

SY.
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / SOS!Помогите разобраться с задачкой / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]