2015-05-03 3 views
1
sqlite> select count(*) from authors; 
1274360 
sqlite> select count(*) from authors where length(Name)<1; 
0 
sqlite> select count(*) from authors where length(Name)>=1; 
516738 

Вышеприведенное не имеет смысла. Может ли кто-нибудь объяснить, почему второй и третий запрос не дают мне все строки в таблице?Запросы возвращают результаты, которые не складываются

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

sqlite> select count(*) from authors where Name==NULL; 
0 
+0

1: 'подсчитывать 0' означает, что нет авторов, где длина (Имя) <1 ..... 2 : 'count 0' означает, что нет авторов, где Name == NULL ....... –

ответ

3

Лучше чек на NULL с с:

select count(*) from authors where Name is NULL; 

И читал о трехзначной логике. Вы не можете проверить с оператором ==, потому что NULL <> NULL.

+0

действительно странный OP спросил:' Может кто-нибудь объяснить, почему второй и третий запрос не дают мне все строки в таблице? ' –

+0

@ХуррамАли, что вы здесь странно видели? Если у вас есть 3 строки, (jordan), (null), (null), то фильтрация, где len (name)> = 1 будет возвращать 1, потому что результат len (null) равен null. Подсчеты не суммировались, потому что фильтры OPs не учитывали нулевые значения. –

+0

ОП спрашивал о том, почему второй и третий запросы не дают мне все строки в таблице ?, и вы отвечаете ему о нулевом сравнении, которые используют 'IS NULL' вместо' = NULL' –

1

После запроса дает общее количество Авторов который является 1274360 Авторы в таблице

sqlite> select count(*) from authors; 
1274360 

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

sqlite> select count(*) from authors where length(Name)<1; 
0 

После запроса дает общее количество этих авторов длина, чье имя является больше, чем равное 1, и ваш запрос дает 516738 количество, потому что в таблице авторов у вас есть такие авторы, имена которых длина больше и равна 1

sqlite> select count(*) from authors where length(Name)>=1; 
516738 

После запроса дает общее количество тех авторов, чье имя является нулевым и вы не имеете каких-либо авторов, поэтому вы получите 0

sqlite> select count(*) from authors where Name =NULL; 
0 

Примечание: для Null проверки вы должны сделать что-то вроде этого

sqlite> SELECT COUNT(*) FROM authors WHERE Name IS NULL; 
     /* to get count of all not null name use IS NOT NULL */ 
sqlite> SELECT COUNT(*) FROM authors WHERE Name IS NOT NULL; 
Смежные вопросы