Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Приоритет операторов AND и OR / 20 сообщений из 20, страница 1 из 1
03.06.2003, 15:02:40
    #32175262
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
Встретился вот такой вот вопрос в тестах, ИМХО, правильный ответ не верен или у меня все еще недопонимания в булевой логике!

You want to display item prices from inventory with these desired results:

1. The price of each item is increased by 25 percent.
2. The original price must be over $25.
3. The item manufacturer number must be 25001 or 25050.
4. The original price when multiplied by 25% equals $4.

You query the database with this SQL statement:

Код: plaintext
1.
2.
3.
4.
5.
    SELECT  price
    FROM  inventory
    WHERE price * . 25  =  4 . 00 
    AND    manufacturer_id = '25001'
    OR    manufacturer_id = '25050'
    OR    price >  25 . 00 ;


How many results are covered by this query?

Only two of the desired results are achieved when the script is executed. Desired result #3 which specifies that the item manufacturer number be 25001 or 25050, and desired result #4 which specifies that the price, when multiplied by 25%, equal $4. The statement does not specify that the price of each item be increased by 25 percent or that the price must be over $25 (since the OR logical operator is used instead of the AND operator).

ИМХО, ответ ни одного! Это условие ведь эквивалентно

Код: plaintext
1.
2.
3.
4.
    SELECT  price
    FROM  inventory
    WHERE (price * . 25  =  4 . 00  AND manufacturer_id = '25001')
    OR    manufacturer_id = '25050'
    OR    price >  25 . 00 ;


А это означает что если у некоторго inventory price > 25, то он показан в любом случае, так что требования manufacturer number must be 25001 or 25050 и original price when multiplied by 25% equals $4 тоже не выполнены.
...
Рейтинг: 0 / 0
03.06.2003, 15:06:56
    #32175271
AI
AI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
AND имеет более высокий приоритет по сравнению с OR.
...
Рейтинг: 0 / 0
03.06.2003, 15:09:53
    #32175277
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
to Al

Из этого я и исходила см. поставленные мною скобки. И тогда ни одно требование не удовлетворено в запросе.
...
Рейтинг: 0 / 0
03.06.2003, 15:11:04
    #32175280
Delerium
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
Violina, nado ponjatj, shto ( TRUE or FALSE ) = ( TRUE ) ...
...
Рейтинг: 0 / 0
03.06.2003, 15:13:50
    #32175285
Delerium
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
ilji to, shto:

The original price when multiplied by 25% equals $4. = price * 0.25
...
Рейтинг: 0 / 0
03.06.2003, 15:33:36
    #32175306
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
А какие ответы предлагаются? Оговариватся ли начальное значение PRICE? Есть ли зависимость PRICE<=>MANIFACTURED_ID? А то большой разброс результатов получается.

Код: plaintext
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.
create table inventory (
    inventory_id  number( 9 )
  , manufacturer_id number( 9 )
  , price number( 15 ,  4 )
  , constraint pk_inventory primary key (inventory_id)
)
/
declare i binary_integer :=  2 ;
begin
  delete inventory;
  for j in  1 .. 20  loop
    insert into inventory (inventory_id, manufacturer_id, price)
    select j, decode(mod(j,  2 ),  0 ,  25001 ,  25050 ), i from dual;
    i := i *  1 . 25 ;
  end loop;
  commit;
end;
/
SELECT *
    FROM  inventory
    WHERE price * . 25  =  4 . 00 
    AND    manufacturer_id = '25001'
    OR    manufacturer_id = '25050'
    OR    price >  25 . 00 
/


Кстати, исключительный случай, начальное значение PRICE = 0 или 1.
...
Рейтинг: 0 / 0
03.06.2003, 15:37:46
    #32175318
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
Это мне все понятно.

То есть если ты утверждаешь что условие price * .25 = 4.00 выполнено. Допустим есть запись

price = 1.00
manufacturer_id = 25050

Она попадает в выборку согласно (OR manufacturer_id = '25050') хотя этому требованию price * .25 = 4.00 не удовлетворяет!

Допустим есть запись

price = 840.00
manufacturer_id = 88769

Она попадает в выборку согласно (OR price > 25.00) и таким образом требование manufacturer number must be 25001 or 25050 и price * .25 = 4.00 тоже не выполняются.

Вывод - для любого требования этим запросом могут быть выбраны записи нарушающие его!
...
Рейтинг: 0 / 0
03.06.2003, 15:46:17
    #32175330
Delerium
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
Violina, a razve tam napisano, shto mezhdu 1., 2., 3. i 4. definicijami rezultatov nado stavitj AND i jeslji nje vipoljajetsja 1. to vesj rezultat njepraviljnij ?

Takzhe tam njeskazano, shto selekt dolzhen vernutj hotj adnu strochku.
...
Рейтинг: 0 / 0
03.06.2003, 15:49:28
    #32175333
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
to Denis

Содержания таблицы не приводится.
...
Рейтинг: 0 / 0
03.06.2003, 15:55:22
    #32175340
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
to Delirium

Явно не сказано, но в таком контексте всегда имеется ввиду скольким или каким из приведенных требований будут удовлетворять результаты сего запроса.

Например неудовлетворение требования 1 как раз и объясняется использованием OR вместо AND.

The statement does not specify that the price of each item be increased by 25 percent or that the price must be over $25 (since the OR logical operator is used instead of the AND operator).
...
Рейтинг: 0 / 0
03.06.2003, 16:10:09
    #32175359
raven13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
2Violina
Что-то я не понимаю твоих рассуждений.
Во-первых написано How many results are covered by this query?
Очевидно, что 3 и 4 (см. свой эквивалент). Думаю элемент множество тебе знаком?

1. The price of each item is increased by 25 percent.
Отпадает сразу.
2. Не удовлетворяет условию 4 (The original price when multiplied by 25% equals $4) да и прикручен при помощи OR
...
Рейтинг: 0 / 0
03.06.2003, 16:10:28
    #32175360
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
Что-бы утверждать, что будут выполняться условия 3 и 4, должен быть такой запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
   price
  FROM
   inventory
  WHERE 
    price * . 25  =  4 . 00  AND
    (manufacturer_id = '25001' OR manufacturer_id = '25050') OR
    price >  25 . 00 ;


или такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT
   price
  FROM
   inventory
  WHERE 
    price * . 25  =  4 . 00  AND
    manufacturer_id IN ('25001','25050') OR
    price >  25 . 00 ;


Я думаю, что это просто ошибка теста.
...
Рейтинг: 0 / 0
03.06.2003, 16:50:28
    #32175445
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
to raven13

По 1 сомнений нет, там все ясно.

То что требования 2 и 4 взаимоисключающие тоже ясно.

То что требование 2 прикручено с помощью OR означает что могут быть возвращены записи ему не удовлетворяющие. Но верно и следующее - остальные требования прикручены к 2 через OR. То есть если оно выполнено, то могут быть возвращены записи не удовлетворяющие ВСЕМ другим

Например

price = 840.00
manufacturer_id = 88769

В общем правильный ответ - запрос вернет множество записей, для которых выполняется либо требование 2 либо 3 и 4.

Если смотреть на ситуацию что требование 2 прикручено с помощью OR и поэтому может быть и false, то понятно почему ответ таков. Но если посмотреть на ситуацию с позиции что остальные требования прикручены к 2 через OR ...

В общем мораль, не лезть в дебри при анализе вопросов:-)

Ладно закрываем тему.
...
Рейтинг: 0 / 0
03.06.2003, 16:59:09
    #32175456
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
Я посмотрел, твой вопрос взят из старого теста Self Test. Я тебе советую взять более новый.
...
Рейтинг: 0 / 0
03.06.2003, 17:08:57
    #32175475
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
to softbuilder

Спасибо за то что ты уделяешь много внимания и усилий для ответа на мои вопросы:-)

Тесты действительно старые, я их взяла с рекомендованной тобой ссылке

http://www.insoft.ru/alexey/oracle.asp

А новые я не знаю где взять. Все ссылки которые я находила ссылаются на китайцев там тоже старые:-(
...
Рейтинг: 0 / 0
03.06.2003, 17:10:16
    #32175479
softy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
В новой версии вопрос сформулирован так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Click the EXHIBIT button and examine the table instance chart for the INVENTORY 
table.

You want to display item prices from inventory with these desired results:

 1 .   The price displayed for each item is increased by  25  percent.
 2 .   The original price must be over $ 25 .
 3 .   The item manufacturer number must be  25001  or  25050 .
 4 .   The original price when multiplied by  25 % equals $ 4 .

You query the database with this SQL statement:

    SELECT	description, price *  1 . 25 
    FROM		inventory
    WHERE	 price * . 25  =  4 . 00 
    AND		manufacturer_id IN ('25001','25050');
    
What does the statement provide?


Ответ:
Код: plaintext
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.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Question:
Click the EXHIBIT button and examine the table instance chart for the INVENTORY
 table.

You want to display item prices from inventory with these desired results:

 1 .   The price displayed for each item is increased by  25  percent.
 2 .   The original price must be over $ 25 .
 3 .   The item manufacturer number must be  25001  or  25050 .
 4 .   The original price when multiplied by  25 % equals $ 4 .

You query the database with this SQL statement:

    SELECT	description, price *  1 . 25 
    FROM		inventory
    WHERE	price * . 25  =  4 . 00 
    AND		manufacturer_id IN ('25001','25050');
    
What does the statement provide?

Answer:
(C) three of the desired results only



Reference:
Introduction to Oracle:  SQL and PL/SQL - Restricting and Sorting Data
Oracle SQL: Basic SELECT Statements - TBT - Unit  3 , Lesson  1 , Topic  2 : WHERE 
Clause

Three of the desired results are achieved when the script is executed.  Desired 
result # 1  which specifies that the price displayed be increased by  25  percent, and
 desired result # 3  which specifies that the item manufacturer number be  25001  or 
 25050  are both achieved.  Desired result # 4  which specifies that the price, when 
multiplied by  25 %, equal $ 4  is also achieved.  The statement does not specify that
 the price must be over $ 25 .
...
Рейтинг: 0 / 0
03.06.2003, 17:44:02
    #32175528
raven13
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
2Violina

[Quote]
То что требование 2 прикручено с помощью OR означает что могут быть возвращены записи ему не удовлетворяющие. Но верно и следующее - остальные требования прикручены к 2 через OR. То есть если оно выполнено, то могут быть возвращены записи не удовлетворяющие ВСЕМ другим

Например

price = 840.00
manufacturer_id = 88769

В общем правильный ответ - запрос вернет множество записей, для которых выполняется либо требование 2 либо 3 и 4.
[/Quote]

А как же "ИМХО, ответ ни одного" :-) ?
[Quote]
В общем мораль, не лезть в дебри при анализе вопросов:-)
[/Quote]
Это верно

2Soft
Что-бы утверждать, что будут выполняться условия 3 и 4, должен быть такой запрос:

Хм... они и так выполняются :-)
...
Рейтинг: 0 / 0
03.06.2003, 18:00:03
    #32175552
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
to raven13

В общем правильный ответ - запрос вернет множество записей, для которых выполняется либо требование 2 либо 3 и 4.
А как же "ИМХО, ответ ни одного" :-) ?


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

Что-бы утверждать, что будут выполняться условия 3 и 4, должен быть такой запрос:
Хм... они и так выполняются :-)


Не всегда! я же приводила пример, запись

price = 840.00
manufacturer_id = 88769

попадает в результат но требования 3 и 4 не выполняются. Таким образом нельзя сказать что результат запроса удовлетворяет требованиям 3 и 4.
...
Рейтинг: 0 / 0
03.06.2003, 18:12:27
    #32175564
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
Я еще сумятицу внесу, Al же правильно заметил: "AND имеет более высокий приоритет по сравнению с OR." Сравни результаты:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
dan@oraspb>; select * from dual where  1 = 2  or  1 = 1  and  1 = 2 ;

no rows selected

dan@oraspb>; select * from dual where  1 = 2  and  1 = 2  or  1 = 1 ;

D
-
X


Всего-то переставил 2 условия. Т.е. следует, учитывая порядок условий в запросе, раскручивать их слева направо, держа мысль про приоритетность AND, как "плюс" и "умножить".
...
Рейтинг: 0 / 0
03.06.2003, 18:17:44
    #32175571
Violina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приоритет операторов AND и OR
to Denis

Ты не поверишь, но я именно такой тест провела чтобы приоритет проверить прежде чем топик создать:-)

Поэтому и переформатировала запрос для наглядности, см. первый постинг.

Код: plaintext
1.
2.
3.
4.
SELECT  price
    FROM  inventory
    WHERE (price * . 25  =  4 . 00  AND manufacturer_id = '25001')
    OR    manufacturer_id = '25050'
    OR    price >  25 . 00 ;


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


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