sql что возвращает select если ничего не найдено

Возвращает значение, если строки не найдены SQL

вот мой простой запрос. Если я запрошу запись, которая не существует, то я ничего не получу. Я бы предпочел, чтобы false (0) возвращался в этом сценарии. Ищу метод с учета нет записей.

9 ответов:

это похоже на Адама Робинсона, но использует ISNULL вместо COUNT.

Если внутренний запрос имеет соответствующую строку, то возвращается 1. Внешний запрос (с помощью функции isnull), а затем возвращает это значение на 1. Если внутренний запрос не имеет соответствующей строки, то он ничего не возвращает. Внешний запрос обрабатывает это как NULL, и поэтому ISNULL возвращает 0.

Я прочитал все ответы здесь, и потребовалось некоторое время, чтобы понять, что происходит. Следующее основано на ответе от МЧС Сиско и некоторые связанные с этим исследования

Если ваш SQL-запрос не возвращает никаких данных, нет поля с нулевым значением, поэтому ни ISNULL, ни COALESCE не будут работать так, как вы хотите. С помощью подзапроса запрос верхнего уровня получает поле с нулевым значением, и оба ISNULL и COALESCE будут работать так, как вы хотите / ожидаете их к.

мой запрос с комментариями

нет совпадения записей означает, что запись не возвращается. Там нет места для «значение» 0, чтобы пойти, если нет записей не найдены. Вы можете создать сумасшедший запрос объединения, чтобы сделать то, что вы хотите, но гораздо, гораздо, гораздо лучше просто проверить количество записей в результирующем наборе.

вам нужно только заменить WHERE на левое соединение:

такое решение позволяет вернуть значения по умолчанию для каждого столбца, например:

Источник

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Страниц: 1

#1 25.09.2013 15:43:01

Можно ли в запросе вернуть какое-то значение, если данные не найдены?

К примеру, есть запрос: SELECT `field` FROM `table`LIMIT 1
Если данные есть, возвращется значение `field`, если данных нет, надо чтобы запрос вернул допустим ‘ololo’.
Запрос вида SELECT IF(`field`, `field`, ‘ololo’) FROM `table` не дал нужного результата, `field`IS NOT NULL также не спас ситуацию.

Понимаю, что можно сделать подзапрос, джоин на саму себя и т.п., но интересует можно ли провернуть такой фокус простым запросом?

#2 25.09.2013 15:59:06

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

Neval написал:

К примеру, есть запрос: SELECT `field` FROM `table`LIMIT 1
Если данные есть, возвращется значение `field`, если данных нет, надо чтобы запрос вернул допустим ‘ololo’.
Запрос вида SELECT IF(`field`, `field`, ‘ololo’) FROM `table` не дал нужного результата, `field`IS NOT NULL также не спас ситуацию.

Понимаю, что можно сделать подзапрос, джоин на саму себя и т.п., но интересует можно ли провернуть такой фокус простым запросом?

Одним запросов без подзапросов, думаю, что точно нет.
И смысла в этом тоже нет. Легче проверить запрос пустой или нет уже программно.

#3 25.09.2013 16:07:35

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

Программно не получится, ибо там чёрный ящик без доступа к коду, по сему надо вернуть из БД.

#4 25.09.2013 16:46:13

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

Хм, что-то у меня и подзапрос с джоинами организовать не удалось)) Ану подсобите, уважаемые знатоки))

#5 25.09.2013 17:44:29

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

Извращенные варианты возможны:

#6 25.09.2013 17:46:16

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

Пример выше работает только для LIMIT 1. Если его нет, то лучше всего INFORMATION_SCHEMA.TABLES заменить на заранее приготовленную таблицу с 1 нужной записью.

#7 25.09.2013 17:56:14

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

А для чего нужна INFORMATION_SCHEMA.TABLES или другая таблица? Можно ведь

#8 25.09.2013 18:22:24

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

vasya, согласен, для LIMIT 1 твое решение лучше

#9 25.09.2013 19:23:32

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

То, что нужно, огромное спасибо sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

#10 29.10.2013 19:13:58

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

Может лучше поправить таблицу

Отредактированно IDX (29.10.2013 19:14:16)

#11 29.10.2013 21:26:47

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

IDX написал:

Может лучше поправить таблицу

MariaDB [ test ] > create table test ( id varchar ( 255 ) DEFAULT ‘ololo’ ) ;
Query OK, 0 rows affected ( 0.23 sec )

MariaDB [ test ] > select id from test;
Empty set ( 0.00 sec )

#12 31.10.2013 11:07:00

Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?

vasya написал:

IDX написал:

Может лучше поправить таблицу

MariaDB [ test ] > create table test ( id varchar ( 255 ) DEFAULT ‘ololo’ ) ;
Query OK, 0 rows affected ( 0.23 sec )

MariaDB [ test ] > select id from test;
Empty set ( 0.00 sec )

почему?
Если заносятся данные, но по каким либо причинам в один из столбцов данные не заносились ни кодом ни тригерами, то при последующей выборке данных, будет вылетать ошибка, ну а если как писали выше, инстркция с UNION отрабатывает только при лимите, то это уже амба.

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

Источник

Возвращает значение, если строки не найдены SQL

вот мой простой запрос. Если я запрошу запись,которая не существует, я ничего не получу. Я бы предпочел, чтобы false (0) возвращался в этом сценарии. Ищу метод с учета нет записей.

9 ответов

это похоже на Адама Робинсона, но использует ISNULL вместо COUNT.

Если внутренний запрос имеет соответствующую строку, возвращается 1. Внешний запрос (с ISNULL) затем возвращает это значение 1. Если внутренний запрос не имеет соответствующей строки, он ничего не возвращает. Внешний запрос обрабатывает это как NULL, и поэтому ISNULL возвращает 0.

Я прочитал все ответы здесь, и потребовалось некоторое время, чтобы понять, что происходит. Следующее основано на ответе МЧС Сиско и некоторые связанные исследования

Если ваш SQL-запрос не возвращает никаких данных, нет поля с нулевым значением, поэтому ни ISNULL, ни COALESCE не будут работать так, как вы хотите. С помощью подзапроса запрос верхнего уровня получает поле с нулевым значением, и оба ISNULL и COALESCE будут работать так, как вы хотите/ожидаете их к.

мой запрос с комментариями

нет записи соответствовали означает нет записи возвращаются. Нет места для» значения » 0, если записи не найдены. Вы можете создать сумасшедший запрос объединения, чтобы сделать то, что вы хотите, но гораздо, гораздо, гораздо лучше просто проверить количество записей в результирующем наборе.

вам нужно только заменить WHERE на левое соединение:

такое решение позволяет вернуть значения по умолчанию для каждого столбца, например:

Источник

Вернуть значение, если в Microsoft tSQL не найдено строк

15 ответов

Это похоже на Адама Робинсона, но использует ISNULL вместо COUNT.

Если во внутреннем запросе есть соответствующая строка, возвращается 1. Внешний запрос (с ISNULL) затем возвращает это значение 1. Если внутренний запрос не имеет соответствующей строки, он ничего не возвращает. Внешний запрос обрабатывает это как NULL, поэтому ISNULL возвращает 0.

Я прочитал здесь все ответы, и потребовалось время, чтобы понять, что происходит. Следующее основано на ответе Мо Сиско и некоторые исследования по теме

Если ваш SQL-запрос не возвращает никаких данных, значит, нет поля с нулевым значением, поэтому ни ISNULL, ни COALESCE не будут работать так, как вы хотите. Используя подзапрос, запрос верхнего уровня получает поле с нулевым значением, и оба ISNULL и COALESCE будут работать так, как вы хотите / ожидаете.

Мой запрос с комментариями

Вам нужно только заменить WHERE на LEFT JOIN:

Это решение позволяет вам также возвращать значения по умолчанию для каждого столбца, например:

Это может быть одним из способов.

Нет сопоставленной записи означает, что запись не возвращена. Нет места для «значения» 0, если записи не найдены. Вы можете создать сумасшедший запрос UNION, чтобы делать то, что вы хотите, но гораздо, намного, намного лучше, просто проверяя количество записей в наборе результатов.

А как насчет галстуков?

Ответ @hai-phan с использованием LEFT JOIN является ключевым, но, возможно, будет немного сложно уследить за ним. У меня был сложный запрос, который тоже может ничего не вернуть. Я просто упростил его ответ для своих нужд. Его легко применить к запросу с большим количеством столбцов.

Следует избегать использования дорогих методов. Вам не нужен столбец для TBL2.

Мое решение работает

Можно проверить путем изменения, где 1 = 2, где 1 = 1

Мне понравился ответ Джеймса Дженкинса с проверкой ISNULL, но я думаю, что он имел в виду IFNULL. ISNULL не имеет второго параметра, как его синтаксис, но IFNULL имеет второй параметр после проверяемого выражения для замены, если обнаружен NULL.

Источник

Условия отбора в операторе SELECT в запросах SQL на практике

sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

Vovan_ST

ИТ специалист со стажем. Автор статьи. Профиль

В SQL используется множество условий отбора, позволяющих эффективно и естественно создавать различные типы запросов. Ниже рассматриваются пять основных условий отбора (в стандарте ANSI/ISO они называются предикатами):

Наиболее распространенным условием отбора в SQL является сравнение. При сравнении SQL вычисляет и сравнивает значения двух SQL-выражений для каж­дой строки данных. Выражения могут быть как очень простыми, например содер­жать одно имя столбца или константу, так и более сложными, например содер­жать арифметические операции. В SQL имеется шесть различных способов срав­нения двух выражений, показанных на рис. 6.

sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

Рис. 6. Синтаксическая диаграмма сравнения

Ниже приведены типичные примеры сравнения.

Найти имена всех служащих, принятых на работу до 2006 года.

Вывести список офисов, фактические объемы продаж в которых составили менее 80 процентов от плановых.

Вывести список офисов, менеджером которых не является служащий с идентифика­тором 108.

Когда СУБД сравнивает значения двух выражений, могут быть получены три результата:

Выборка одной строки

Чаще всего используется сравнение, в котором определяется, равно ли значе­ние столбца некоторой константе. Если этот столбец представляет собой первич­ный ключ, то запрос возвращает всего одну строку, как в следующем примере.

Узнать имя и лимит кредита клиента с идентификатором 2107.

Значения NULL

Использование значений NULL в запросах может привести к »очевидным» предположениям, которые истинны только на первый взгляд, но на самом деле та­ковыми не являются. Например, можно предположить, что каждая строка из таб­лицы SALESREPS будет содержаться в результатах только одного из двух следую­щих запросов.

Вывести список служащих, превысивших плановый объем продаж.

Вывести список служащих, не выполнивших план.

Проверка на принадлежность диапазону (BETWEEN)

sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

Рис. 7. Синтаксическая диаграмма проверки на принадлежность диапазону (between)

Следующий пример иллюстрирует типичную процедуру проверки на принад­лежность диапазону.

Найти все заказы, сделанные в последнем квартале 2007 года.

При проверке на принадлежность диапазону верхняя и нижняя границы счи­таются частью диапазона, поэтому в результаты запроса вошли заказы, сделанные 1 октября и 31 декабря. Далее приведен другой пример проверки на принадлеж­ность диапазону.

Найти заказы, стоимости которых попадают в различные диапазоны.

Инвертированная версия проверки на принадлежность диапазону ( NOT between ) позволяет выбрать значения, которые лежат за пределами диапа­зона, как в следующем примере.

Вывести список служащих, фактические объемы продаж которых не попадают в диапазон от 80 до 720 процентов плана.

Однако прежде чем полагаться на эти правила, неплохо было бы поэкспери­ментировать со своей СУБД.

Необходимо отметить, что проверка на принадлежность диапазону не расширяет возможности SQL, поскольку ее можно выразить в виде двух сравнений. Проверка

полностью эквивалентна сравнению

Тем не менее проверка BETWEEN является более простым способом выразить ус­ловие отбора в терминах диапазона значений.

Проверка наличия во множестве (IN)

Еще одним распространенным условием отбора является проверка на наличие во множестве (in), схематически изображенная на рис. 8. В этом случае выполня­ется проверка, соответствует ли значение какому-либо элементу заданного списка. Ниже приведен ряд запросов с использованием проверки наличия во множестве.

sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

Рис. 8. Синтаксическая диаграмма проверки наличия во множестве (IN)

Вывести список служащих, которые работают в Нью-Йорке, Атланте или Денвере.

Найти все заказы, сделанные в пятницы в январе 2008 года.

Найти все заказы, полученные четырьмя конкретными служащими.

полностью эквивалентно условию

Однако проверка IN предлагает гораздо более эффективный способ выражения условия отбора, особенно если множество содержит большое число элементов.

В стандарте ANSI/ISO не определено максимальное количество элементов множе­ства, и в большинстве СУБД явный верхний предел не задан. По соображениям переносимости, лучше избегать множеств, содержащих один элемент.

Их следует заменять простым сравнением:

Проверка на соответствие шаблону (LIKE)

Для выборки строк, в которых содержимое некоторого текстового столбца сов­падает с заданным текстом, можно использовать простое сравнение. Например, следующий запрос извлекает строку из таблицы CUSTOMERS по имени.

Показать лимит кредита для Smithson Corp.

Однако очень легко можно забыть, какое именно название носит интересую­щая нас компания: «Smith», «Smithson» или «Smithsonian». Проверка на соответст­вие шаблону позволяет выбрать из базы данных строки на основе частичного соот­ветствия имени клиента.

Проверка на соответствие шаблону (оператор LIKE ), схематически изображен­ная на рис. 9, позволяет определить, соответствует ли значение данных в столбце некоторому шаблону. Шаблон представляет собой строку, в которую может вхо­дить один или несколько подстановочных символов. Эти символы интерпретируют­ся особым образом.

sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

Рис. 9. Синтаксическая диаграмма проверки на соответствие шаблону (LIKE)

Подстановочные знаки

Подстановочный знак % совпадает с любой последовательностью из нуля или более символов. Ниже приведена измененная версия предыдущего запроса, в ко­торой используется шаблон, содержащий знак процента.

Оператор like указывает SQL, что необходимо сравнивать содержимое столб­ца NAME с шаблоном «Smith% Corp.». Этому шаблону соответствуют все перечис­ленные ниже имена.

А вот эти имена данному шаблону не соответствуют.

Подстановочный знак _ (символ подчеркивания) совпадает с любым отдельным символом. Например, если вы уверены, что название компании либо «Smithson», либо «Smithsen», то можете воспользоваться следующим запросом.

В таком случае шаблону будет соответствовать любое из представленных ниже имен.

Smithson Corp.

Smithsen Corp.

Smithsun Corp.

А вот ни одно из следующих ему соответствовать не будет.

Подстановочные знаки можно помещать в любое место строки шаблона, и в одной строке может содержаться несколько подстановочных знаков. Следующий запрос допускает как написание «Smithson» и «Smithsen», так и любое другое окончание названия компании, включая «Corp.», «Inc.» или какое-то другое.

Управляющие символы *

При проверке строк на соответствие шаблону может оказаться, что подстано­вочные знаки входят в строку символов в качестве литералов. Например, нельзя проверить, содержится ли знак процента в строке, просто включив его в шаблон, поскольку SQL будет считать этот знак подстановочным. Как правило, это не вы­зывает серьезных проблем, поскольку подстановочные знаки довольно редко встречаются в именах, названиях товаров и других текстовых данных, которые обычно хранятся в базе данных.

В стандарте ANSI/ISO определен способ проверки наличия в строке литералов, использующихся в качестве подстановочных знаков. Для этого применяются управляющие символы. Когда в шаблоне встречается такой символ, то символ, сле­дующий непосредственно за ним, считается не подстановочным знаком, а литера­лом. Непосредственно за управляющим символом может следовать либо один из двух подстановочных символов, либо сам управляющий символ, поскольку он также приобретает в шаблоне особое значение.

Найти товары, коды которых начинаются с четырех букв «A%ВС».

Первый символ процента в шаблоне, следующий за управляющим символом, считается литералом, второй — подстановочным символом.

Проверка на равенство NULL (IS NULL)

sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

Рис. 10. Синтаксическая диаграмма проверки на равенство null (is null)

В следующем запросе проверка на равенство NULL используется для нахожде­ния в учебной базе данных служащего, который еще не был закреплен за офисом.

Найти служащего, который еще не закреплен за офисом.

Вывести список служащих, которые уже закреплены за офисами.

Может показаться странным, что нельзя проверить значение на равенство NULL с помощью операции сравнения, например:

Ключевое слово NULL здесь нельзя использовать, поскольку на самом деле это не настоящее значение; это просто свидетельство того, что значение неизвестно. Даже если бы сравнение

было возможно, правила обработки значений NULL в сравнениях привели бы к то­му, что оно вело бы себя не так, как ожидается. Если бы СУБД обнаружила строку, в которой столбец REP_OFFICE содержит значение null, выполнилась бы сле­дующая проверка.

Составные условия отбора (AND, OR и NOT)

sql что возвращает select если ничего не найдено. Смотреть фото sql что возвращает select если ничего не найдено. Смотреть картинку sql что возвращает select если ничего не найдено. Картинка про sql что возвращает select если ничего не найдено. Фото sql что возвращает select если ничего не найдено

Рис. 11. Синтаксическая диаграмма предложения WHERE

Оператор OR используется для объединения двух условий отбора, из которых или одно, или другое (или оба) должно быть истинным.

И наконец, можно использовать оператор NOT, чтобы выбрать строки, для ко­торых условие отбора ложно.

Лично для меня остается загадкой, зачем может понадобиться такой список имен, однако приведенный пример является иллюстрацией довольно сложного запроса.

Таблица 1. Таблица истинности оператора and

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *