Can anyone point out how to check if a select query returns non empty result set?
For example I have next query:
SELECT * FROM service s WHERE s.service_id = ?;
Should I do something like next:
ISNULL(SELECT * FROM service s WHERE s.service_id = ?)
to test if result set is not empty?
asked May 21, 2010 at 19:30
3
IF EXISTS(SELECT * FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
answered May 21, 2010 at 19:33
Ed BEd B
5,9883 gold badges26 silver badges35 bronze badges
5
Use @@ROWCOUNT:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT > 0
-- do stuff here.....
According to SQL Server Books Online:
Returns the number of rows affected by
the last statement. If the number of
rows is more than 2 billion, use
ROWCOUNT_BIG.
answered May 21, 2010 at 19:37
marc_smarc_s
729k174 gold badges1327 silver badges1455 bronze badges
5
I agree with Ed B. You should use EXISTS method but a more efficient way to do this is:
IF EXISTS(SELECT 1 FROM service s WHERE s.service_id = ?)
BEGIN
--DO STUFF HERE
END
HTH
answered May 21, 2010 at 19:36
RajaRaja
3,5983 gold badges28 silver badges39 bronze badges
5
You can do it in a number of ways.
IF EXISTS(select * from ....)
begin
-- select * from ....
end
else
-- do something
Or you can use IF NOT EXISTS , @@ROW_COUNT
like
select * from ....
IF(@@ROW_COUNT>0)
begin
-- do something
end
answered Dec 6, 2017 at 21:20
try:
SELECT * FROM service s WHERE s.service_id = ?;
IF @@ROWCOUNT=0
BEGIN
PRINT 'no rows!'
END
answered May 21, 2010 at 19:38
KM.KM.
101k34 gold badges178 silver badges212 bronze badges
0
SELECT COUNT(1) FROM service s WHERE s.service_id = ?
answered May 21, 2010 at 19:44
ovais.tariqovais.tariq
2,62717 silver badges12 bronze badges
2
To summarize the below posts a bit:
If all you care about is if at least one matching row is in the DB then use exists
as it is the most efficient way of checking this: it will return true as soon as it finds at least one matching row whereas count
, etc will find all matching rows.
If you actually need to use the data for processing or if the query has side effects, or if you need to know the actual total number of rows then checking the ROWCOUNT
or count
is probably the best way on hand.
answered May 21, 2010 at 19:40
DonnieDonnie
45.5k10 gold badges64 silver badges86 bronze badges
SELECT * FROM service s WHERE s.service_id = ?;
IF @@rowcount = 0
begin
select 'no data'
end
answered Jun 9, 2014 at 8:19
SELECT count(*) as count FROM service s WHERE s.service_id = ?;
test if count == 0 .
More baroquely:
select case when (SELECT count(*) as count FROM service s WHERE s.service_id = ?) = 0
then ‘No rows, bro!’ else ‘You got data!» end as stupid_message;
answered May 21, 2010 at 19:34
tpditpdi
34.5k11 gold badges80 silver badges120 bronze badges
In my sql use information function
select FOUND_ROWS();
it will return the no. of rows returned by select query.
answered Feb 16, 2015 at 12:07
Sunil KumarSunil Kumar
6551 gold badge7 silver badges12 bronze badges
SELECT count(*) as CountThis ....
Then you can compare it as string like so:
IF CHECKROW_RS("CountThis")="0" THEN ...
CHECKROW_RS
is an object
answered Feb 11, 2019 at 14:24
csandreas1csandreas1
2,0061 gold badge26 silver badges47 bronze badges
well there is a way to do it a little more code but really effective
$sql = "SELECT * FROM messages"; //your query
$result=$connvar->query($sql); //$connvar is the connection variable
$flag=0;
while($rows2=mysqli_fetch_assoc($result2))
{ $flag++;}
if($flag==0){no rows selected;}
else{
echo $flag." "."rows are selected"
}
answered May 20, 2019 at 7:44
When selecting data from a table, there might be some NULL values that you don’t want to show, or you want to replace it with 0 for the aggregate functions. Then you can use COALESCE to replace the NULL with 0.
For example, we have the table salaries with 5 columns: emp_no
, from_date
, to_date
, salary
, bonus
. But the bonus
column is optional and may contain NULL values.
emp_no | salary | from_date | to_date | bonus |
---|---|---|---|---|
10001 | 60117 | 1986-06-26 | 1987-06-26 | 2000 |
10001 | 62102 | 1987-06-26 | 1988-06-25 | NULL |
10001 | 66074 | 1988-06-25 | 1989-06-25 | NULL |
10001 | 66596 | 1989-06-25 | 1990-06-25 | 3000 |
10001 | 66961 | 1990-06-25 | 1991-06-25 | 1500 |
10001 | 71046 | 1991-06-25 | 1992-06-24 | NULL |
10001 | 74333 | 1992-06-24 | 1993-06-24 | NULL |
10001 | 75286 | 1993-06-24 | 1994-06-24 | 2000 |
Run this SELECT … COALESCE … statement to return 0 as the alternative value when bonus value is NULL:
SELECT
emp_no,
salary,
from_date,
to_date,
COALESCE(bonus, 0)
FROM
salaries;
In MySQL you can also use IFNULL function to return 0 as the alternative for the NULL values:
SELECT
emp_no,
salary,
from_date,
to_date,
IFNULL(bonus, 0)
FROM
salaries;
In MS SQL Server, the equivalent is ISNULL function:
SELECT
emp_no,
salary,
from_date,
to_date,
ISNULL(bonus, 0)
FROM
salaries;
In Oracle, you can use NVL function:
SELECT
emp_no,
salary,
from_date,
to_date,
NVL(bonus, 0)
FROM
salaries;
Same result:
emp_no | salary | from_date | to_date | bonus |
---|---|---|---|---|
10001 | 60117 | 1986-06-26 | 1987-06-26 | 2000 |
10001 | 62102 | 1987-06-26 | 1988-06-25 | 0 |
10001 | 66074 | 1988-06-25 | 1989-06-25 | 0 |
10001 | 66596 | 1989-06-25 | 1990-06-25 | 3000 |
10001 | 66961 | 1990-06-25 | 1991-06-25 | 1500 |
10001 | 71046 | 1991-06-25 | 1992-06-24 | 0 |
10001 | 74333 | 1992-06-24 | 1993-06-24 | 0 |
10001 | 75286 | 1993-06-24 | 1994-06-24 | 2000 |
Need a good GUI tool for databases? TablePlus provides a native client that allows you to access and manage Oracle, MySQL, SQL Server, PostgreSQL and many other databases simultaneously using an intuitive and powerful graphical interface.
Download TablePlus for Mac.
Not on Mac? Download TablePlus for Windows.
Need a quick edit on the go? Download for iOS
Прочитав название темы, можно задать вопрос: «А зачем вообще вводить в БД поля, не содержащие значений?» Ответ на этот вопрос кроется в тексте ниже.
Что такое база данных? Это информация, которая формируется и развивается на протяжении всего времени своего существования. Постоянно приходится что-то добавлять, что-то убирать. И так на протяжении всего жизненного цикла БД. Однако, есть такие периоды, точней моменты в жизни БД, когда есть часть информации об объекте и предполагается, что остальная часть будет добавлена по истечении какого-то периода времени.
Для примера возьмём таблицу должников.
Debtors
Num | Month | Year | Sname | City | Address | Debt |
0001 | Июль | 2012 | Иванов | Ставрополь | Ставропольская, 1 | 50000 |
0002 | Декабрь | 2019 | Кононов | Татарка | Загородная, 254 | 684068 |
0003 | Май | 2013 | Ямшин | Михайловск | Сельская, 48 | 165840 |
0004 | Август | 2012 | Прени | Ставрополь | Центральная, 16 | 46580 |
… | … | … | … | … | … | … |
9564 | Март | 2015 | Улиева | Дёмино | Международная, 156 | 435089 |
9565 | Октябрь | 2012 | Павлова | Ставрополь | Вокзальная, 37 | 68059 |
9566 | Январь | 2012 | Урюпа | Михайловск | Фонтанная, 19 | 51238 |
9567 | Ноябрь | 2017 | Вальетов | Татарка | Выездная, 65 | 789654 |
Предположим, что появился очередной кандидат по долгу, но сумма его задолженности пока не сформирована, но известны остальные его данные — дата, до которой он должен погасить задолженность, его фамилия и адрес проживания. В этом случае, столбец Debt для данного должника останется пустым, а чтобы это подтвердить, поле будет назначено как пустое — NULL
Debtors
Num | Month | Year | Sname | City | Address | Debt |
0001 | Июль | 2012 | Иванов | Ставрополь | Ставропольская, 1 | 50000 |
0002 | Декабрь | 2019 | Кононов | Татарка | Загородная, 254 | 684068 |
0003 | Май | 2013 | Ямшин | Михайловск | Сельская, 48 | 165840 |
0004 | Август | 2012 | Прени | Ставрополь | Центральная, 16 | 46580 |
… | … | … | … | … | … | … |
9564 | Март | 2015 | Улиева | Дёмино | Международная, 156 | 435089 |
9565 | Октябрь | 2012 | Павлова | Ставрополь | Вокзальная, 37 | 68059 |
9566 | Январь | 2012 | Урюпа | Михайловск | Фонтанная, 19 | 51238 |
9567 | Ноябрь | 2017 | Вальетов | Татарка | Выездная, 65 | 789654 |
9568 | Февраль | 2015 | Ялтинов | Спицевка | Степная, 43 | NULL |
Как говорилось выше, значение NULL подразумевает, что поле с таким значением не содержит каких-либо данных, которыми могли бы оперировать SQL-запросы. То есть, если проводить какие-либо отборы по используя данный оператор, результат будет таким же, как и при указании неверной неверной строки. Другими словами, любой запрос типа
SELECT *
FROM Debtors
WHERE любой столбец NULL;
Приведёт к тому, что программа работы с БД выдаст ошибку.
Для выхода из такой ситуации в SQL существует специальный оператор, который используется с ключевым словом NULL — это оператор IS. Теперь можно задать запрос, который смог бы отобрать строки, содержащие, точней не содержащие никаких значений
SELECT *
FROM Debtors
WHERE Debts IS NULL;
Результатом будет следующее
Debtors
Num | Month | Year | Sname | City | Address | Debt |
9568 | Февраль | 2015 | Ялтинов | Спицевка | Степная, 43 | NULL |
Если перевести ключевые слова строки запроса «WHERE Debts IS NULL» с английского, то получится буквально следующее: «ГДЕ Debts ЕСТЬ ПУСТОЕ»
Можно ли сделать, чтобы запрос с ключевым словом NULL игнорировался? Можно! Достаточно перед ним поставить Булево выражение NOT.
Есть несколько вариантов размещения ключевого слова NOT в запросе, да бы игнорировалось значение NULL
SELECT *
FROM Debtors
WHERE Debt NOT IS NULL;
Или же использовать
SELECT *
FROM Debtors
WHERE NOT Debt IS NULL;
Результат обоих запросов будет один
Debtors
Num | Month | Year | Sname | City | Address | Debt |
0001 | Июль | 2012 | Иванов | Ставрополь | Ставропольская, 1 | 50000 |
0002 | Декабрь | 2019 | Кононов | Татарка | Загородная, 254 | 684068 |
0003 | Май | 2013 | Ямшин | Михайловск | Сельская, 48 | 165840 |
0004 | Август | 2012 | Прени | Ставрополь | Центральная, 16 | 46580 |
… | … | … | … | … | … | … |
9564 | Март | 2015 | Улиева | Дёмино | Международная, 156 | 435089 |
9565 | Октябрь | 2012 | Павлова | Ставрополь | Вокзальная, 37 | 68059 |
9566 | Январь | 2012 | Урюпа | Михайловск | Фонтанная, 19 | 51238 |
9567 | Ноябрь | 2017 | Вальетов | Татарка | Выездная, 65 | 789654 |
То есть данные запросы попросту убрали из табличной части БД строки, содержащие в столбце Debt пустые ячейки.
Эта запись была посвящена тому, как ведёт себя БД, если в её состав входят ячейки с отсутствующими данными. Так же было сказано о том, как можно исключать такие ячейки при помощи операторов NULL и IS NULL.
Страниц: 1
- Список
- » Раздел для начинающих
- » Можно ли в запросе вернуть какое-то значение, если данные не найдены?
#1 25.09.2013 15:43:01
- Neval
- Гуру
- Откуда: Киев
- Зарегистрирован: 11.03.2008
- Сообщений: 449
Можно ли в запросе вернуть какое-то значение, если данные не найдены?
К примеру, есть запрос: 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
- Александр Трофимов
- Завсегдатай
- Откуда: Юрмала
- Зарегистрирован: 19.09.2011
- Сообщений: 95
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
- Neval
- Гуру
- Откуда: Киев
- Зарегистрирован: 11.03.2008
- Сообщений: 449
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
Программно не получится, ибо там чёрный ящик без доступа к коду, по сему надо вернуть из БД.
Человек без чувства юмора — не серьёзный человек
Неактивен
#4 25.09.2013 16:46:13
- Neval
- Гуру
- Откуда: Киев
- Зарегистрирован: 11.03.2008
- Сообщений: 449
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
Хм, что-то у меня и подзапрос с джоинами организовать не удалось)) Ану подсобите, уважаемые знатоки))
Человек без чувства юмора — не серьёзный человек
Неактивен
#5 25.09.2013 17:44:29
- rgbeast
- Администратор
- Откуда: Москва
- Зарегистрирован: 21.01.2007
- Сообщений: 3876
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
Извращенные варианты возможны:
select id from `mytable` UNION (select ‘ololo’ FROM INFORMATION_SCHEMA.TABLES where (select count(*) from `mytable`)=0) LIMIT 1;
Тут надо следить за одинаковым числом полей в UNION и учитывать, что тип будет приведен к общему. Например в примере выше id будет преобразован в VARCHAR.
Неактивен
#6 25.09.2013 17:46:16
- rgbeast
- Администратор
- Откуда: Москва
- Зарегистрирован: 21.01.2007
- Сообщений: 3876
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
Пример выше работает только для LIMIT 1. Если его нет, то лучше всего INFORMATION_SCHEMA.TABLES заменить на заранее приготовленную таблицу с 1 нужной записью.
Неактивен
#7 25.09.2013 17:56:14
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5817
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
А для чего нужна INFORMATION_SCHEMA.TABLES или другая таблица? Можно ведь
select id from `mytable` UNION (select ‘ololo’) LIMIT 1;
Неактивен
#8 25.09.2013 18:22:24
- rgbeast
- Администратор
- Откуда: Москва
- Зарегистрирован: 21.01.2007
- Сообщений: 3876
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
vasya, согласен, для LIMIT 1 твое решение лучше
Неактивен
#9 25.09.2013 19:23:32
- Neval
- Гуру
- Откуда: Киев
- Зарегистрирован: 11.03.2008
- Сообщений: 449
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
То, что нужно, огромное спасибо
Человек без чувства юмора — не серьёзный человек
Неактивен
#10 29.10.2013 19:13:58
- IDX
- Участник
- Зарегистрирован: 25.10.2013
- Сообщений: 11
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
Может лучше поправить таблицу
id varchar(255) DEFAULT ‘ololo’
Отредактированно IDX (29.10.2013 19:14:16)
Неактивен
#11 29.10.2013 21:26:47
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5817
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
IDX написал:
Может лучше поправить таблицу
id varchar(255) DEFAULT ‘ololo’
Вы не правы
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)
MariaDB [test]> select id from test UNION (select ‘ololo’) LIMIT 1;
+——-+
| id |
+——-+
| ololo |
+——-+
1 row in set (0.08 sec)
Неактивен
#12 31.10.2013 11:07:00
- IDX
- Участник
- Зарегистрирован: 25.10.2013
- Сообщений: 11
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
vasya написал:
IDX написал:
Может лучше поправить таблицу
id varchar(255) DEFAULT ‘ololo’
Вы не правы
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)MariaDB [test]> select id from test UNION (select ‘ololo’) LIMIT 1;
+——-+
| id |
+——-+
| ololo |
+——-+
1 row in set (0.08 sec)
почему?
Если заносятся данные, но по каким либо причинам в один из столбцов данные не заносились ни кодом ни тригерами, то при последующей выборке данных, будет вылетать ошибка, ну а если как писали выше, инстркция с UNION отрабатывает только при лимите, то это уже амба.
Я сталкивался с проблемой когда конект сталкивался с пустышками, тем самым ни есть гуд. Вот и взял за основу дефолты писать.
Неактивен
#13 31.10.2013 12:13:31
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5817
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
Ну вот вам пример приведен с дефолтным значением как вы и хотели и чем оно помогло?
IDX написал:
Если заносятся данные, но по каким либо причинам в один из столбцов данные не заносились ни кодом ни тригерами,
то в этом столбце данные будут, случае отсутствия дефолта там будет null (а по условию задачи данных нет, это совсем другая история)
IDX написал:
то при последующей выборке данных, будет вылетать ошибка,
Я сталкивался с проблемой когда конект сталкивался с пустышками, тем самым ни есть гуд. Вот и взял за основу дефолты писать.
А если там по логике приложения нужен null?
Неактивен
#14 31.10.2013 13:43:10
- IDX
- Участник
- Зарегистрирован: 25.10.2013
- Сообщений: 11
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
vasya написал:
IDX написал:
то при последующей выборке данных, будет вылетать ошибка,
Я сталкивался с проблемой когда конект сталкивался с пустышками, тем самым ни есть гуд. Вот и взял за основу дефолты писать.А если там по логике приложения нужен null?
что мешает произвести замену в одной функции??? чем в последствии в коде свыше 1 функции?
простая замена.
тут двоякое мнение. кому как удобно.
P.S. Был у меня человек, не ставил дефолты. кода много. править не реально. вот и пришлось глобально изменить то на что будет меняться. просто в дефолте ставили на int(11) 99999999999
Отредактированно IDX (31.10.2013 13:43:54)
Неактивен
#15 31.10.2013 13:45:08
- IDX
- Участник
- Зарегистрирован: 25.10.2013
- Сообщений: 11
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
просто реплейсили эти девятки в ноль
Неактивен
#16 31.10.2013 13:49:00
- IDX
- Участник
- Зарегистрирован: 25.10.2013
- Сообщений: 11
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
ах да, а если идёт выборка >100500 строк, а на юнионе лимит в 1 как предлагали выше?
это типа как бэ каждый раз селеккты писать для обращение с лимитированием в 1 строку???
Неактивен
#17 01.11.2013 07:00:44
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5817
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
Что-то я теряю нить рассуждений. Каким образом default может помочь в решении задачи ТС?
Неактивен
#18 28.11.2016 17:40:48
- jon48
- Участник
- Зарегистрирован: 28.11.2016
- Сообщений: 3
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
Люди добрые помогите, я в этом вообще не шарю, но путем догадок попытаюсь задать вопрос! В microsoft word стоит команда {SQLSelect ValueUser From Cam16 (NoLock) where Cam16.D270=888 and Cam16.r_id=1576870}. Когда есть такая строка в таблице и есть данные в таблице то вместо команды подставляется число из базы данных. Но что сюда добавить на тот случай если строки 1576870 в колонке r_id в таблице Cam16 нет вообще. Мicrosoft word выдает в таком случае надпись «ОШИБКА!!!ОШИБКА!!!ОШИБКА!!!», а мне нужно что бы подставился 0.
Неактивен
#19 28.11.2016 17:49:26
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5817
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
в MySQL (которому посвящен этот форум) можно
select ValueUser from
((Select ValueUser, 1 From ..)
union all
(select 0, 2)
order by 2 limit 1) t;
Неактивен
#20 28.11.2016 18:42:01
- jon48
- Участник
- Зарегистрирован: 28.11.2016
- Сообщений: 3
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
vasya написал:
в MySQL (которому посвящен этот форум) можно
select ValueUser from
((Select ValueUser, 1 From ..)
union all
(select 0, 2)
order by 2 limit 1) t;
Куда это влепить в моём случае, если можно по подробнее, а то From .. мне вообще не понятно ? База данных у меня на MySQL.
Отредактированно jon48 (28.11.2016 18:44:22)
Неактивен
#21 28.11.2016 18:43:47
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5817
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
заменить один запрос на другой
Неактивен
#22 28.11.2016 18:55:57
- jon48
- Участник
- Зарегистрирован: 28.11.2016
- Сообщений: 3
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
vasya написал:
заменить один запрос на другой
Извиняюсь за тупость, я поставил {SQLSelect ValueUser From ((Select ValueUser, 1 From Cam16 (NoLock) where Cam16.D270=888 and Cam16.r_id=1576870) union all (select 0, 2) order by 2 limit 1) t} в результате ОШИБКА!!! Что не так? Помогите.
Неактивен
#23 29.11.2016 00:15:32
- vasya
- Архат
- Откуда: Орел
- Зарегистрирован: 07.03.2007
- Сообщений: 5817
Re: Можно ли в запросе вернуть какое-то значение, если данные не найдены?
В MySQL нет такого синтаксиса как (NoLock).
Запрос
Select ValueUser From
((Select ValueUser, 1 From Cam16 where Cam16.D270=888 and Cam16.r_id=1576870)
union all (select 0, 2) order by 2 limit 1) t;
возвращает 0, если не существует строки с Cam16.D270=888 and Cam16.r_id=1576870.
Неактивен
Страниц: 1
- Список
- » Раздел для начинающих
- » Можно ли в запросе вернуть какое-то значение, если данные не найдены?
SELECT NULL-значение
Достаточно часто встречаются такие случаи, когда в таблице имеются записи с не заданными значениями какого-либо из полей, потому что значение поля неизвестно или его просто нет. В таких случаях SQL позволяет указать в поле NULL-значение. Строго говоря, NULL-значение вовсе не представлено в поле. Когда значение поля есть NULL — это значит, что программа базы данных специальным образом помечает поле, как не содержащее какого-либо значения для данной строки (записи).
Дело обстоит не так в случае простого приписывания полю значения «нуль» или «пробел», которые база данных трактует как любое другое значение. Поскольку NULL не является значением как таковым, он не имеет типа данных. NULL может размещаться в поле любого типа. Тем не менее, NULL, как NULL-значение, часто используется в SQL.
Предположим, появился покупатель, которому еще не назначен продавец. Чтобы констатировать этот факт, нужно ввести значение NULL в поле snum, а реальное значение включить туда позже, когда данному покупателю будет назначен продавец.
SQL IS NULL
Поскольку NULL фиксирует пропущенные значения, результат любого сравнения при наличии NULL-значений неизвестен. Когда NULL-значение сравнивается с любым значением, даже с NULL-значением, результат просто неизвестен. Булево значение «неизвестно» ведет себя также, как «ложь» — строка, на которой предикат принимает значение «неизвестно», не включается в результат запроса – при одном важном исключении: NOT от лжи есть истина (NOT (false)=true), тогда как NOT от неизвестного значения есть также неизвестное значение. Следовательно, такое выражение как «city = NULL» или «city IN (NULL)» является неизвестным независимо от значения city.
Часто необходимо различать false и unknown – строки, содержащие значения столбца, не удовлетворяющие предикату, и строки, которые содержат NULL. Для этой цели SQL располагает специальным оператором IS, который используется с ключевым словом NULL для локализации NULL-значения. SQL IS NULL. Пример. Вывести все поля из талицы Customers, значения поля city которых равны NULL:
SELECT * FROM Customers WHERE city IS NULL
В данном случае выходных данных не будет, поскольку в поле city нет NULL-значений.
SQL IS NOT NULL
Условие IS NOT NULL используется в запросах для выборки записей со значениями не равных значению NULL SQL IS NOT NULL. Пример. Вывести все поля из талицы Customers, значения поля city которых НЕ равны NULL:
SELECT * FROM Customers WHERE city IS NOT NULL