2012-03-28 2 views
0

Это был мой Интервью ВопросУмножение с NULL и пустые значения столбцов в SQL

есть две колонки называемые Длина и ширина в таблице Площадь

Length Breadth Length*Breadth 
20  NULL  ? 

30     ? 

21.2  1   ? 

Я попытался запустить тот же вопрос, на MYSQL при вставке, Чтобы вставить пустое значение, я попробовал следующий запрос. Я что-то пропускаю при вставке пустых значений в MYSQL.

Вставить в test.new_table значения (30,);

Ответы: с нулевым результатом является Null. С результатом пополнения и умножения int является float

+0

Как вы ответили? –

+1

Я бы подумал, что это довольно легко узнать для себя, нет? – rikitikitik

+0

мои ответы: 0,0,21.2 @catcall –

ответ

0

Это пустое дыхание (вторая строка) не может произойти, если Дыхание не является VARCHAR. Предполагая, что ответы будут:.

  1. NULL (так как раз NULL ничего NULL)

  2. Выдает ошибку (так как пустая строка не является числом в Sql Server, ошибка "Ошибка преобразования типа данных VARCHAR в числовой. «)

  3. 21,20 (так как в Sql Server, например, преобразование в числовой тип является автоматическим, поэтому SELECT 21.2 * '1' возвращает 21.20).

0

Произведение любых значений и NULL равно NULL. Это называется «NULL распространение», если вы хотите, чтобы Google это. Чтобы набрать очки в интервью, вы можете упомянуть, что NULL не является ценностью; это специальный маркер.

Тот факт, что в столбце Breadth имеется одна запись «NULL» и одна запись, которая является пустой (во втором ряду), вводит в заблуждение. Числовой столбец, который не имеет значения в определенной строке, означает, что строка NULL. Таким образом, вторая колонка также должна показывать «NULL».

Ответ на третий ряд, 21.2 * 1, зависит от типа данных столбца «Длина * Ширина». Если это тип данных типа float, double или numberic (16,2), ответ будет равен 21.2. Если это целочисленный столбец (целочисленный, длинный и т. Д.), Ответ будет равен 21.

Более пристойный ответ может быть «Нет ответа. Строка« Длина * Ширина »не является юридическим именем столбца SQL. "

0

Предполагая, что длина и ширина являются численными типами, вторая запись не содержит возможных значений. Ширина должна быть 0 или NULL.

В любом случае любая математическая операция в SQL, содержащая значение NULL, возвращает значение NULL, указывая на то, что выражение не может быть оценено. Ответ NULL, невозможный и 21.2.

3

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

SELECT LENGTH,BREADTH,LENGTH*BREADTH AS CALC_AREA FROM AREA; 


LENGTH BREADTH CALC_AREA 
20  
30  0   0 
21.2 1   21.2 

Для любого (первого) записи в SQL SERVER, если вы делаете вычисление с NULL ответ будет NULL.

Для любой (второй) записи в SQL SERVER, если вы вычисляете произведение между непустым значением и пустым значением, результат будет равен нулю, так как пустое значение обрабатывается как ноль.

Для любой (третьей) записи в SQL SERVER, если вы выполняете вычисления между двумя непустыми значениями типа данных, ответ будет НЕ-ПУСТОЙ.

Проверка SQL скрипки для справки - http://sqlfiddle.com/#!3/f250a/1

0

В стандартном SQL все они будут генерировать ошибки, потому что вы сравниваете значение (или аннулирует) различных типов:

CAST (20 AS FLOAT) * CAST (NULL AS INTEGER) -- mismatched types error 

CAST ('' AS INTEGER) -- type conversion error 
CAST ( AS INTEGER) -- type conversion error 


CAST (21.2 AS FLOAT) * CAST (2 AS INTEGER) -- mismatched types error 

С другой стороны, большинство SQL продукт будет неявно применять значения при сравнении значений (или нулей) разных типов в соответствии с приоритетом типа, например сравнение значения float с целочисленным значением фактически приводило бы целочисленное значение в float и приводило бы к поплавке. На уровне продукта самым интересным вопросом является то, что происходит, когда вы сравниваете нуль целочисленного типа со значением (или даже нулевым) типа float ...

... но, честно говоря, не очень интересно. В интервью вам представлены рамки (в форме заданных вам вопросов), на которых представлены ваши знания, навыки и опыт. «Ответ» здесь заключается в обсуждении нулей (например, укажите, что nulls сложно определить и вести себя неинтуитивно, что приводит к частым ошибкам и желанию полностью избегать нулей и т. Д.) И неявное литье - это хорошо.

Смежные вопросы