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

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
Приоритет операторов AND и OR
    #32175271
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AND имеет более высокий приоритет по сравнению с OR.
...
Рейтинг: 0 / 0
Приоритет операторов AND и OR
    #32175277
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Al

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

The original price when multiplied by 25% equals $4. = price * 0.25
...
Рейтинг: 0 / 0
Приоритет операторов AND и OR
    #32175306
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какие ответы предлагаются? Оговариватся ли начальное значение 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
Приоритет операторов AND и OR
    #32175318
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это мне все понятно.

То есть если ты утверждаешь что условие 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
Приоритет операторов AND и OR
    #32175330
Delerium
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Приоритет операторов AND и OR
    #32175333
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Denis

Содержания таблицы не приводится.
...
Рейтинг: 0 / 0
Приоритет операторов AND и OR
    #32175340
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Приоритет операторов AND и OR
    #32175359
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Приоритет операторов AND и OR
    #32175360
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-бы утверждать, что будут выполняться условия 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
Приоритет операторов AND и OR
    #32175445
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Приоритет операторов AND и OR
    #32175456
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я посмотрел, твой вопрос взят из старого теста Self Test. Я тебе советую взять более новый.
...
Рейтинг: 0 / 0
Приоритет операторов AND и OR
    #32175475
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to softbuilder

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

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

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

А новые я не знаю где взять. Все ссылки которые я находила ссылаются на китайцев там тоже старые:-(
...
Рейтинг: 0 / 0
Приоритет операторов AND и OR
    #32175479
Фотография softy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В новой версии вопрос сформулирован так:
Код: 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
Приоритет операторов AND и OR
    #32175528
raven13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Violina

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

Например

price = 840.00
manufacturer_id = 88769

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

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

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

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

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


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

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


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

price = 840.00
manufacturer_id = 88769

попадает в результат но требования 3 и 4 не выполняются. Таким образом нельзя сказать что результат запроса удовлетворяет требованиям 3 и 4.
...
Рейтинг: 0 / 0
Приоритет операторов AND и OR
    #32175564
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я еще сумятицу внесу, 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
Приоритет операторов AND и OR
    #32175571
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Приоритет операторов AND и OR
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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