powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объясните новичку логику запроса
8 сообщений из 8, страница 1 из 1
Объясните новичку логику запроса
    #39682998
Alexyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день.
Изучаю sql на одном из сайтов.
Даётся следующий пример с запросом:

=============== SQL Execution Log ==============
| |
| SELECT * |
| FROM Orders |
| WHERE NOT ((odate = 10/03/1990 AND snum > 1002) |
| OR amt > 2000.00); |
| =============================================== |
| onum amt odate cnum snum |
| ------ -------- ---------- ----- ----- |
| 3003 767.19 10/03/1990 2001 1001 |
| 3009 1713.23 10/04/1990 2002 1003 |
| 3007 75.75 10/04/1990 2004 1002 |
| 3010 1309.95 10/06/1990 2004 1002 |
=================================================

Я правильно понял, что данный запрос должен исключить из выборки все строки, содержащие в себе odate = 10/03/1990 AND snum > 1002 или amt >2000? Т.е., если один из этих параметров верный, то строка в выборке не отображается?
Но если это так, то почему в выборке отобразилась строка
"onum amt odate cnum snum |
| ------ -------- ---------- ----- ----- |
| 3003 767.19 10/03/1990 2001 1001 |
, содержащая в себе odate = 10/03/1990 AND snum > 1002?

Заранее благодарю за комментарии
...
Рейтинг: 0 / 0
Объясните новичку логику запроса
    #39683002
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexyasВсем добрый день.
Изучаю sql на одном из сайтов.
Даётся следующий пример с запросом:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
 ===============  SQL Execution Log ============== 
              |                                                 | 
              | SELECT *                                        | 
              | FROM  Orders                                    | 
              | WHERE NOT ((odate = 10/03/1990 AND snum > 1002) | 
              | OR amt > 2000.00);                              | 
              | =============================================== | 
              |   onum       amt      odate      cnum     snum  | 
              |  ------   --------  ----------  -----    -----  | 
              |   3003      767.19  10/03/1990   2001     1001  | 
              |   3009     1713.23  10/04/1990   2002     1003  | 
              |   3007       75.75  10/04/1990   2004     1002  | 
              |   3010     1309.95  10/06/1990   2004     1002  | 
               ================================================= 



Я правильно понял, что данный запрос должен исключить из выборки все строки, содержащие в себе odate = 10/03/1990 AND snum > 1002 или amt >2000? Т.е., если один из этих параметров верный, то строка в выборке не отображается?
Но если это так, то почему в выборке отобразилась строка
"onum amt odate cnum snum |
| ------ -------- ---------- ----- ----- |
| 3003 767.19 10/03/1990 2001 1001 |
, содержащая в себе odate = 10/03/1990 AND snum > 1002?

Заранее благодарю за комментариине забывайте, пожалуйста, использовать ТЭГи. Берегите зрение и нервы форумчан :)
...
Рейтинг: 0 / 0
Объясните новичку логику запроса
    #39683005
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexyas,

по теме вопроса - вспомните закон Де-Моргана , раскройте скобки, избавьтесь от отрицания - сразу станет ясно, на каких условиях выбираются данные...
...
Рейтинг: 0 / 0
Объясните новичку логику запроса
    #39683013
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexyasпочему в выборке отобразилась строка
Потому что кто-то сравнивает значение поля `odate` и значение выражения 10/03/1990=0.00167504.
Литералы даты следует обрамлять кавычками или использовать явное приведение типа.
...
Рейтинг: 0 / 0
Объясните новичку логику запроса
    #39683017
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaAlexyasпочему в выборке отобразилась строка
Потому что кто-то сравнивает значение поля `odate` и значение выражения 10/03/1990=0.00167504.
Литералы даты следует обрамлять кавычками или использовать явное приведение типа.да, и про корректное указание строковых литералов - забывать не стОит, конечно же...
...
Рейтинг: 0 / 0
Объясните новичку логику запроса
    #39683069
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexyasНо если это так, то почему в выборке отобразилась строка
"onum amt odate cnum snum |
| ------ -------- ---------- ----- ----- |
| 3003 767.19 10/03/1990 2001 1001 |
, содержащая в себе odate = 10/03/1990 AND snum > 1002?
тут выполняется
Код: sql
1.
WHERE NOT ((odate = 10/03/1990 AND snum > 1002)


показана строка с snum < 1002

но это всё имело бы смысл, если бы были кавычки у '10/03/1990'
откройте для себя тип данных DATE
...
Рейтинг: 0 / 0
Объясните новичку логику запроса
    #39683198
Alexyas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
полудух,
Спасибо.
Т.е. я правильно понял, что данный запрос можно перевести так: "Исключить из вывода запроса строки, которые содержат odate = 10/03/1990 AND snum > 1002 или которые содержать значение snum >1002?
...
Рейтинг: 0 / 0
Объясните новичку логику запроса
    #39683212
Фотография полудух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
показать строки, которые НЕ удовлетворяют условию (odate = 10/03/1990 AND snum > 1002)
ИЛИ (amt > 2000.00)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Объясните новичку логику запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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