#sql
#sql
Вопрос:
Я практиковал SQL в w3resource.com » у нас с веб-сайтом была проблема с пониманием решения этого упражнения;
ссылка : https://www.w3resource.com/sql-exercises/sql-boolean-operator-exercise-6.php
проблема: напишите инструкцию SQL для отображения либо тех заказов, которые не выданы на дату 2012-09-10 и выданы продавцом с идентификатором 5005 и ниже, либо тех заказов, сумма покупки которых составляет 1000,00 и ниже.
Примерная таблица: заказы
ord_no purch_amt ord_date customer_id salesman_id
---------- ---------- ---------- ----------- -----------
70001 150.5 2012-10-05 3005 5002
70009 270.65 2012-09-10 3001 5005
70002 65.26 2012-10-05 3002 5001
70004 110.5 2012-08-17 3009 5003
70007 948.5 2012-09-10 3005 5002
70005 2400.6 2012-07-27 3007 5001
70008 5760 2012-09-10 3002 5001
70010 1983.43 2012-10-10 3004 5006
70003 2480.4 2012-10-10 3009 5003
70012 250.45 2012-06-27 3008 5002
70011 75.29 2012-08-17 3003 5007
70013 3045.6 2012-04-25 3002 5001
мое решение:
select * from orders where (ord_date <> '2012-09-10' and salesman_id <= '5005') or purch_amt <= '1000';
их решение:
SELECT * FROM orders WHERE NOT ((ord_date ='2012-09-10'AND salesman_id > 5005) OR purch_amt > 1000.00);
вопрос: в их решении утверждение «NOT» применяется к «ИЛИ» это приемлемо? и какое решение является правильным?
Спасибо
Комментарии:
1. Практический вопрос неоднозначен, любой ответ может быть интерпретацией
Ответ №1:
NOT
принимает один операнд. В этом выражении:
WHERE NOT ((ord_date ='2012-09-10'AND salesman_id > 5005) OR purch_amt > 1000.00);
Операндом является все заключенное в скобки выражение. Ваше выражение не эквивалентно, но приведенное выше эквивалентно следующему, поскольку NOT (A OR B)
эквивалентно (NOT A AND NOT B)
и NOT (A AND B)
эквивалентно (NOT A OR NOT B)
:
WHERE NOT (ord_date = '2012-09-10' AND salesman_id > 5005) AND
NOT (purch_amt > 1000.00)
WHERE NOT (ord_date = '2012-09-10' AND salesman_id > 5005) AND
purch_amt <= 1000.00
WHERE (NOT (ord_date = '2012-09-10') OR NOT (salesman_id > 5005)) AND
purch_amt <= 1000.00
WHERE (ord_date <> '2012-09-10' OR salesman_id <= 5005) AND
purch_amt <= 1000.00
Комментарии:
1. спасибо за ваш ответ, но соответствует ли их ответ тексту?
2. @GuissousAllaeddine . , , Английский неоднозначен, потому что неясно, к чему
not
именно относится. Я думаю, что ваша интерпретация ближе к английской. Этоnot
подпунктeither
/or
, поэтому значениеor
— to может быть прочитано — не должно быть отменено.