Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: 1 2      [все]
 Помогите понять предикаты  [new]
Bugert
Member

Откуда:
Сообщений: 8
Возник такой вопрос.
Допустим есть таблица table. В ней есть поле type. Делаем запрос

SELECT *
FROM table
WHERE type = ‘Pc’ AND type ‘Laptop’;


В итоге получаем ноль строк. Объясните, пожалуйста, почему конъюнкция по одному полю работает таким образом? Казалось бы, выражение истинно и должны выводится принтеры и ПК (1*1=1). Я не понимаю, почему в данном случае работает только оператор дизъюнкции.
19 сен 15, 15:14    [18169709]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
invm
Member

Откуда: Москва
Сообщений: 9442
https://msdn.microsoft.com/ru-ru/library/ms188047(v=sql.120).aspx
< search_condition >

Определяет условия, которые должны быть выполнены для всех возвращаемых строк. Количество предикатов, которое может содержать условие поиска, неограниченно.
19 сен 15, 15:31    [18169755]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
iap
Member

Откуда: Москва
Сообщений: 47009
Bugert
Возник такой вопрос.
Допустим есть таблица table. В ней есть поле type. Делаем запрос

SELECT *
FROM table
WHERE type = ‘Pc’ AND type ‘Laptop’;



В итоге получаем ноль строк. Объясните, пожалуйста, почему конъюнкция по одному полю работает таким образом? Казалось бы, выражение истинно и должны выводится принтеры и ПК (1*1=1). Я не понимаю, почему в данном случае работает только оператор дизъюнкции.
1. Странные кавычки намекают, что это не MSSQL. Может, MySQL?
2. Между type и ‘Laptop’ пропущен оператор сравнения. Это не должно рабатать.
3. Тип на одной и той же строке не может быть одновременно и ‘Pc’ и ‘Laptop’.
Замените хотя бы на OR
19 сен 15, 16:10    [18169852]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
хоть где-то хоть когда-то
Guest
Bugert,

автор
Я не понимаю, почему в данном случае работает только оператор дизъюнкции.

потому что задом наперед все понимаете.

И - И это условие должно выполниться И вот это, оба они
ИЛИ - ИЛИ это условие должно выполниться ИЛИ вот это, хотя бы одно

{И} "PC", {И} "LAPTOP" в одном поле TYPE лежать не может

не к SQL у вас вопрос, а к логическим операторам. к самым базовым вещам.

автор
type = ‘Pc’ AND type ‘Laptop’

что "конъюнкция", что "дизъюнкция"? смысл этих слов понимаем?
глазами на цитату эту еще раз посмотри пожалуйста и подумай, как оно может выдать хоть что-то.
19 сен 15, 16:40    [18169924]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
Bugert
Member

Откуда:
Сообщений: 8
1. Одинарные кавычки используются в учебнике http://sql-tutorial.ru/. На сайте сказано, что в примерах используется Microsoft SQL Server.
2. Я знаю, что я пропустил оператор сравнения, но не нашел на форуме возможности отредактировать сообщение после отправки.
3. Вот теперь, кажется, понятнее. Сервер обращается к каждой ячейке, по отношению к которой проверяет истинность выражения type = "Pc" AND type = "Laptop", но т.к. данное выражение ложно, то ничего не выводит. А если использовать OR, то оно будет истинно для каждой конкретной ячейки.
19 сен 15, 16:49    [18169938]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
Диклевич Александр
Member

Откуда:
Сообщений: 610
Bugert,

не к ячейке.
условие проверяется для каждой строки.
19 сен 15, 17:18    [18170016]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
iap
Member

Откуда: Москва
Сообщений: 47009
Bugert
1. Одинарные кавычки используются в учебнике http://sql-tutorial.ru/.
У вас левая кавычка и правая - разные.
В MSSQL так не бывает.
19 сен 15, 17:45    [18170105]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
по-моему, это школьный курс алгебры, основы логики.
вот попадаются учебники, утверждается, что это 9-ый класс:
элементы алгебры логики (slides)
элементы алгебры логики (pdf)
изучайте.

по поводу кавычек.
в интерктивном учебнике Моисеенко все примеры рабочие и для SQL Server-а.
так что это просто кривой копипаст
19 сен 15, 18:37    [18170274]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
Bugert
Member

Откуда:
Сообщений: 8
Я имел в виду, что в данном случае по сути проверяется условие для строк, состоящих лишь из ячеек поля type. В одной строке одного поля, а в данном случае (type AND type) в одной ячейке поля type не может быть больше одного значения.

С кавычками напутал. Скопировал из другого редактора, где они таким корявым образом прописались.
19 сен 15, 18:51    [18170305]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
Bugert
Я имел в виду, что в данном случае по сути проверяется условие для строк, состоящих лишь из ячеек поля type.

для начала, таблица в любой RDBMS это никакой не "набор ячеек",
но самое интересное это то, как вы себе представляете строку таблицы.
то в ней все столбцы, то только столбец type.
это кошмар и ужас.
надо уже сейчас для себя базовые понятия уяснить.
подождите, поищу что-нибудь базовое.
фундаментальная-то книга вот:
An Introduction to Database Systems by C.J. Date
шестое издание точно переводилось на русский и имеется в печатном виде,
только наверное того, надо бы сперва со школьным курсом разобраться
19 сен 15, 19:06    [18170339]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
наверное, вот оно в сжатом виде:
Отношение (реляционная модель)
19 сен 15, 19:10    [18170350]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
Bugert
Member

Откуда:
Сообщений: 8
"то в ней все столбцы, то только столбец type"
Не очень понимаю, откуда вы это взяли и где я это писал) Я прекрасно представляю себе, что есть столбец (поле), а что есть строка (но я, конечно, познакомлюсь с этими фундаментальными вещами, на которые вы дали ссылки), и что есть конъюнкция и дизъюнкция. Т.к. я только начал изучать SQL, я немного запутался с тем, как происходит выборка WHERE. Поэтому я не сразу понял, почему WHERE type = "Pc" AND type = "Laptop" не выводит данные. Но сейчас все встало на свои места. А в своих сообщениях я написал то же самое, что написал товарищ "хоть где-то хоть когда-то": "Pc" и "Laptop" не могут лежать в одном поле.
19 сен 15, 19:31    [18170416]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
если у вас все уложилось, только радуюсь за вас.
Bugert
"то в ней все столбцы, то только столбец type"
Не очень понимаю, откуда вы это взяли и где я это писал)

а понимаю я все буквально,
и вот что у вас написано:
Bugert
Я имел в виду, что в данном случае по сути проверяется условие для строк, состоящих лишь из ячеек поля type.

строки, состоящие только из type, это как?
(про "ячейки поля" вообще молчу)
19 сен 15, 19:40    [18170439]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
Bugert
Member

Откуда:
Сообщений: 8
Я имел в виду вот что. Допустим есть такая таблица.

type
PC
PC
Laptop
Laptop

Здесь одно поле (столбец) - type. Значения PC и Laptop находятся в ячейках, которые по вертикали соответствуют столбцу type, а строки (по горизонтали) соответствуют данным ячейкам и ограничены столбцом type.
Извиняюсь, если я опять написал что-то непонятное.
19 сен 15, 20:10    [18170498]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
Bugert,

все, идите читать базовые понятия.
таблицы, к-ую вы привели, в теории просто не может быть, а на практике, когда есть,
называется это "безобразие" или "помойка".
по второй моей ссылке найдите
wikipedia
Основные свойства отношения[1][2]:
В отношении нет двух одинаковых элементов (кортежей).

и осознавайте.
то, что вы тут привели, уже не является отношением.
кстати, в базе computer такой таблицы и нет, там во всех таблицах есть ПК.
и фразочка про "проверку только каких-то там строк" -- тоже неверна,
для всех строк условие проверяется.
другое дело, что именно ваше условие вообще проверять бесполезно, оно всегда FALSE
19 сен 15, 20:27    [18170576]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
Bugert
Member

Откуда:
Сообщений: 8
Хоспаде. Ок))

id type
1 PC
2 PC
3 Laptop
4 Laptop


Выше я и не думал приводить реальный случай или случай из учебника)
19 сен 15, 20:52    [18170635]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
Bugert
А в своих сообщениях я написал то же самое, что написал товарищ "хоть где-то хоть когда-то": "Pc" и "Laptop" не могут лежать в одном поле.

ну и?
картинка наглядно показывает, что написана ерунда (выделено жирным),
"Pc" и "Laptop" как раз и лежат в одном поле
19 сен 15, 20:57    [18170657]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
по вашему вопросу ответ примерно такой:
если у сущности какой-то конкретный атрибут
имеет какое-то конкретное значение, то оно именно что одно.
так что если изделие классифицировано как PC,
оно автоматом уже не Laptop и не Printer.
поэтому ваше в условии никогда и ничего не отловит,
и сервер тут ни при чем.
если в магазине просите сыр, вам не должны взвесить яблоки.
а если скажете: мне сырояблоко (type = сыр AND type = яблоко) подавайте,
вас должны послать
19 сен 15, 21:07    [18170691]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
Bugert
Member

Откуда:
Сообщений: 8
Согласен с Вами. Лежат в одном поле) Скопировал текст из чужого ответа не глядя.
19 сен 15, 21:20    [18170732]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
вас смущает наверное дословный перевод этого AND.
когда вы в жизни попросите и сыр, и яблоки,
это НЕ type = сыр AND type = яблоко, потому что своим условием на тип через "и" вы просите то,
что бы являлось *одновременно* и тем, и тем.
в логике, чтобы получить оба вида продуктов, надо просить OR.
примерно так: принесите все то, что является или сыром, или рыбой.
и дожны выдать все, т.к. каждое из принесенного является или тем, или другим.

там в учебнике, к-ый pdf, много примеров, почитайте.
и термины освойте,
вы же на русском четко и грамотно выражаетесь, а плаваете именно в терминологии
19 сен 15, 21:42    [18170803]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
о блин, простите за рыбу, там яблоки:
o-o
...
когда вы в жизни попросите и сыр, и яблоки,
...
примерно так: принесите все то, что является или сыром, или рыбой.
...

+ я прям как современный учебник с огурцами

Картинка с другого сайта.
19 сен 15, 21:51    [18170824]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
lamer yuga
Guest
o-o,

Насколько я помню sql-ex.ru, вопрос звучит так: найти всех производителей, выпускающих И pc, И laptop.
Отсюда и такой своеобразный фильтр в запросе.

Так не парьте мозги не ограничивайтесь плз частичным OR, и разделите пожалуйста таблицу на {pc, laptop}
19 сен 15, 22:23    [18170929]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
ого,
так это уже задание?
тогда я не участвую.
более того, если я увижу, как здесь на форуме
просят решение задачки с sql-ex, я еще и настучу на sql-ex
(потому как нефиг сперва подписываться под правилами сайта,
а потом их нарушать, нагло не уважая чужой труд)
но вроде ТС не просил ничего решать, а просто удивился результату
19 сен 15, 22:38    [18170988]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
lamer yuga
Guest
o-o,

Да ладно, под типовые алгоритмы подписку неразглашения никто не давал
19 сен 15, 22:59    [18171063]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
Bugert
Member

Откуда:
Сообщений: 8
Эм? Я с такой задачей на sql-ex не сталкивался, а вопрос задал, потому что не понял примера из учебника (Предикаты I стр. 2).
19 сен 15, 23:11    [18171111]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
o-o
Guest
вот!
не похож товарищ на списывателя.
давайте, Bugert, продолжайте изучение, мы в вас верим :)
19 сен 15, 23:20    [18171146]     Ответить | Цитировать Сообщить модератору
 Re: Помогите понять предикаты  [new]
lamer yuga
Guest
Bugert
Эм? Я с такой задачей на sql-ex не сталкивался, а вопрос задал, потому что не понял примера из учебника (Предикаты I стр. 2).
А... Я думал, у вас затык с главой реляционное деление. Сорь
19 сен 15, 23:28    [18171173]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2      [все]
Все форумы / Microsoft SQL Server Ответить