powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с темой ключевых слов ANY и ALL
25 сообщений из 27, страница 1 из 2
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032092
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет!

Сейчас разбираю тему "Использование ключевых слов SOME (ANY) и ALL с предикатами сравнения"
В данной теме приведено 2 примера:

1. С использованием ANY

"Найти поставщиков компьютеров, моделей которых нет в продаже (то есть модели этих поставщиков отсутствуют в таблице PC)"
SELECT DISTINCT maker
FROM Product
WHERE type = 'pc' AND
NOT model = ANY (SELECT model
FROM PC
);

2. С использованием ALL

"Найти модели и цены портативных компьютеров, стоимость которых превышает стоимость любого ПК"
SELECT DISTINCT model, price
FROM Laptop
WHERE price > ALL (SELECT price
FROM PC
);

Дело в том, что я вроде как понимаю частично что происходит, но никак не могу отличить выполнение первого ключевого слова ANY, от использования ключевого слова ALL.
Помогите разобраться пожалуйста, примеров там очень мало, а в использовании первого примера приводится слишком сложная запись с отрицанием NOT. Из-за этого отрицания никак не могу сравнить первый пример со вторым. Возможно потому что уже 4 часа). Темы изучаю по мере прохождения заданий на сайте, по этому сильно заумных примеров пожалуйста не приводите)

Если вдруг нужен источник, то вот он: http://www.sql-tutorial.ru/ru/book_using_any_all_keywords_with_comparison_predicates.html
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032097
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80
Дело в том, что я вроде как понимаю частично что происходит, но никак не могу отличить выполнение первого ключевого слова ANY, от использования ключевого слова ALL.
Помогите разобраться пожалуйста, примеров там очень мало, а в использовании первого примера приводится слишком сложная запись с отрицанием NOT. Из-за этого отрицания никак не могу сравнить первый пример со вторым.

Я вообще не помню, чтобы где-то было это нужно. Если запросы сложные, то надо понимать, что потом их еще придётся поддерживать.
Первый пример делается обычно через not exists или left join, второй через
Код: sql
1.
where price > (select max(price) from pc)


Зачем городить что-то с any/all, кроме как запутать следующего программиста или завалить на экзамене/собеседовании, решительно не понятно.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032111
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ANY == хоть какой-нибудь

Соответственно WHERE x = ANY (y) эквивалентно WHERE x IN (y) .

ALL == все (любой)

Соответственно WHERE x > ALL (y) эквивалентно WHERE x > MAX(y) .

crutchmaster
Зачем городить что-то с any/all, ..., решительно не понятно.
+100500

Их бы вообще в deprecated - жаль, стандарт не позволяет.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032143
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
...

Соответственно WHERE x > ALL (y) эквивалентно WHERE x > MAX(y) .

...


Нет .
Только в рамках а) двузначной логики и б) при непустом множестве y

Интересно, что Дейт постулирует неправильную по определению работу MIN/MAX в SQL.
MAX по его мысли для пустого множества должен быть равен минимально допустимому значению в домене значений y.
Тогда, при запрете Null-значений для использования реляционных базах и при изменении определения MAX
x > ALL (y) окажется эквивалентным x > MAX(y)
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032152
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
booby , я ж даю применительно к показанным запросам.

Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT maker
FROM Product
WHERE type = 'pc' AND
NOT model = ANY (SELECT model
                 FROM PC);

эквивалентно
Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT maker
FROM Product
WHERE type = 'pc' AND
NOT model IN (SELECT model
              FROM PC);


и
Код: sql
1.
2.
3.
4.
SELECT DISTINCT model, price
FROM Laptop
WHERE price > ALL (SELECT price
                   FROM PC);

эквивалентно
Код: sql
1.
2.
3.
4.
SELECT DISTINCT model, price
FROM Laptop
WHERE price > (SELECT MAX(price)
               FROM PC);



А насчёт непустого множества и отсутствия NULL в PC - да, есть такое дело.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032164
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster, я понимаю что ты хотел упростить задачу, но я ввел твой запрос и он вывел на 3 строки больше, чем в ответе который был в примере. Там в каждом из примеров можно вводить свой вариант ответа, попробуй если не веришь.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032165
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina,
частный случай.

кстати, в техническом плане чаще рассуждают о
замене x op All(y)
на Not Exists( not op(x, y(i)))
в смысле потенциалной эквивалентности.

Это покрывает случай пустого y, но на Null-значениях все равно не даёт эквивалентного результата
из-за третьего логического значения.

Из-за чего Дейту очень сильно хочется поправить в этом месте Кодда.
Но поезд уже очень давно как ушел. Невероятно, что из этого желания что-то получится хоть когда-нибудь.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032184
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80
я понимаю что ты хотел упростить задачу, но я ввел твой запрос и он вывел на 3 строки больше, чем в ответе который был в примере

Это не упрощение задачи, запросы почти эквивалентные, разница только в работе с null, который и так не должен торчать из каждой дырки, чтобы не приходилось потом с ним героически бороться. За 10 лет работы с базами ANY/ALL нигде не видел и он не разу не понадобился, что там и зачем придумали умники в своём туториале - вопрос отдельный.

Dante80
попробуй если не веришь

Не могу, там надо регаться.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032185
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Я все равно не понимаю, почему я не могу тогда здесь поставить тоже ALL?

SELECT DISTINCT maker
FROM Product
WHERE type = 'pc' AND
NOT model IN (SELECT model
FROM PC);

Он же получается проверит все значения которые соответствуют NOT model?
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032186
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

Понимаю, что ты имеешь ввиду о null, но я второй пример из сайта тестил, где был уже твой готовый пример который ты скинул.
Я пример с null и не трогал.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032188
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80
Он же получается проверит все значения которые соответствуют NOT model?

Что такое NOT model? Ты уверен, что такое условие вообще отработает? not x in (...) и x not in (...) не эквивалентны?
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032190
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80
Я пример с null и не трогал.

Какой пример с null? О чём речь?
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032191
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster,

Ну на сайте работает. И под NOT model подразумевается null
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032192
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
crutchmaster
Dante80
Я пример с null и не трогал.

Какой пример с null? О чём речь?


Речь о первом примере, а ты ответ дал на второй

"второй через
where price > (select max(price) from pc)" - так ты писал в первом своем ответе на мою тему. Я сказал, что второй пример выдает совершенно иной результат. Ты ответил, что они почти эквивалентны и зачем то стал говорить про null из первого примера.

Я в этой теме задал вопрос лишь по теме ANY и ALL, я не знаю как там спустя 10 лет все происходит, но кто мешает мне использовать эти ключевые слова самому?
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032196
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80,

Кстати, в оракле:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SELECT count(1) FROM dual WHERE NOT 1 = ANY (3,4, null) 
>> 0
SELECT count(1) FROM dual WHERE NOT 1 = ANY (3,4)
>> 1
SELECT count(1) FROM dual WHERE 5 > all (3,4, null)
>> 0
SELECT count(1) FROM dual WHERE 5 > all (3,4) 
>> 1

SELECT max(x) FROM (
SELECT 1 x FROM dual UNION ALL
SELECT 2 x FROM dual UNION ALL
SELECT NULL x FROM dual) a
>> 2


Делаем выводы о нужности.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032204
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80,


Dante80
И под NOT model подразумевается null

Под not model подразумевается not ( model = ANY (SELECT model FROM PC ) )

Dante80
Ну на сайте работает

На сайте - это не интересно. Интересно когда на живой бд что-то работает и воспроизводится.

Dante80
Речь о первом примере

Нужны доказательства: исходные данные и запрос.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032208
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80,

вы математику в школе проходили?
там где-то вводят кванторы существования и всеобщности.
SOME (ANY) - это квантор существования
записывают в SQL так:
x op SOME (Y)
где x - сравниваемое значение
op - какой-то из операторов сравнения - >, <, =, <>, >=, <=
Y - множество элементов, с которыми сравнивается значение x
---------------
Пусть x == 5, op == =, а Y - множество значений - (1,0,3,null,77)
предикат, записанный так: 5 = SOME (1,0,3,null,77)
читается так: в множестве значений (1,0,3,null,77) существует такое значение, которое равно 5.
Его истинностное значение - False
Если заменить операцию сравнения на <
5 < SOME (1,0,3,null,77) , то истинностное значение станет True, поскольку в множестве Y==(1,0,3,null,77)
существует элемент 77, который больше 5.
SOME (ANY) эквивалентен набору сравнений через или - OR
истинностное значение 5 < SOME (1,0,3,null,77) точно эквивалентно значению выражения
(5<1 OR 5<0 OR 5<3 OR 5<null OR 5 <77)
-------------------------
ALL - квантор всеобщности, обозначает "для всех" - для всех элементов из Y операция сравнения op
выполняется с истинностным значением true.
Если оставить x = 5, Y заменить на Y=(1,2,3,4), в качестве op выбрать >
то утверждение
5 > ALL (1,2,3,4) истинно, для всех элементов из Y, 5 > каждого из них
Но, если Y = (1,null,3,4), значение предиката становится False, поскольку сравнение со вторым элементов из Y не дает true.
Т.е. 5 > ALL (1,2,3,4) это

(5>1 AND 5>2 AND 5>3 AND 5>4) - ясно, что здесь оно true.

Чаще для выражения смысла ALL используют такую формулировку: в множестве Y не существует такого элемента y,
для которго сравнение 5 op y (5 > y) могло бы дать логическое значение, не равное true
(то есть, истинным оказалось отрицание op - not op).

Такая формулировака используется, чтобы объяснить поведение ALL для случая, когда множество Y пустое.
Для пустого множества утверждение ALL с любой операцией сравнения истинно, так как в таком множестве нет элементов,
на которых сравнение бы могло дать ложный результат, или его отрицание - истинный.

т.е. Y=()
и 5 > ALL () по определению истина, в Y нет элементов, которые при сравнении с 5 могли бы дать результат, не равный true.
Это приводит к эквивалентности
x op ALL (Y)
и not Exists( x not op SOME (Y)) при условии, что в Y нет пропущенных значений - null.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032209
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80
зачем то стал говорить про null из первого примера.

Там нет null. Я тебе говорю, что они разница в работе их с null, см. пример с ораклом.

Dante80
Я в этой теме задал вопрос лишь по теме ANY и ALL

См. пример с запросами из оракла выше. И проблема у тебя не с ANY/ALL, а с тем, что тебя смутил NOT перед условием.
Dante80
я не знаю как там спустя 10 лет все происходит, но кто мешает мне использовать эти ключевые слова самому?

Нууу, например на mysql in (select id from some_table) был неоптимизирован и чтобы получить вменяемую производительность надо было юзать через обычный join. Как на практике будут работать any/all - хз. Возможно, что никак. Однако РСУБД гарантированно хорошо делают join. Делай всё проще, не суй null куда попало, уважай нормализацию, не делай в таблицах структуры, где важен порядок записей. Тогда будешь здоровый, будет сон и аппетит хороший.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032221
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

Я люблю математику, но у меня с ней большие проблемы. Не помню название "кванторы", но знаю что такое знаки сравнения и для чего они применяются. Спасибо что объяснили тему, да еще и поведали что такое кванторы. Теперь могу отличить ALL от ANY. Я до этого всего очень долго копался в СИ и С++, решил временно сменить род обучения так сказать. SQL по проще будет, да и благодаря этому языку столько много узнаешь и изучаешь, аж приятно становится от пополнения и восстановления знаний.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032223
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80
... по проще будет...

нет не будет
если с математикой проблемы - скорее бросайте SQL.

Бросайте всё и немедленно осваивайте объектно ориентированное программирование.
Оно сейчас не предполагает наличия формального образования.
Надо просто заучить набор волшебных паттернов и уметь расставлять кракозябры аннотации.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032228
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

Спасибо за совет, но мне нравится то чем я сейчас занимаюсь.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032334
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

Я сформулировал свой вопрос по данной теме.
Что если будут сравниваться 2 множества, как в данных примерах которые я указывал в теме? Вы привели пример сравнения переменной с множеством, а в какой последовательности будет происходить сравнение двух множеств?

Приведу первый пример из данной темы:

WHERE type = 'pc' AND
NOT model = ANY (SELECT model
FROM PC
);

Сравнивается множество Product.model с множеством из другой таблицы PC.model. Каким образом происходит взаимодействие между этими двумя множествами? Как я предполагаю, берется первый элемент из Product.model и сравнивается с каждым из элементов PC.model? И так по очереди? Меня сам процесс сравнения между множествами интересует в данном примере.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032352
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80,

извини, глубина твоего интереса к математике превышает мои возможности по обучению.
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032361
Dante80
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby,

Понятно, ну не хочешь, не отвечай
...
Рейтинг: 0 / 0
Помогите разобраться с темой ключевых слов ANY и ALL
    #40032489
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dante80
Меня сам процесс сравнения между множествами интересует в данном примере.

Поставь mysql, сделай таблицы, индексы, сделай explain, покажи, что напишет.
Dante80
И так по очереди?

Это - самый плохой вариант. Можно надеется что бд как-то оптимизирует запрос, но это - не точно.
...
Рейтинг: 0 / 0
25 сообщений из 27, страница 1 из 2
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите разобраться с темой ключевых слов ANY и ALL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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