2010-10-07 6 views
8

Possible en double:
Why does NULL = NULL evaluate to false in SQL serverPourquoi column = NULL ne renvoie aucune ligne?

Si vous générez une requête pour insérer les données dans le tableau "MyTab" pour la colonne --- âge, le sexe, date de naissance, ID

INSERT INTO MyTab 
VALUES (22, '', '', 4) 

Quelle sera la valeur dans la colonne Sexe & DOB? Est-ce NULL?

Si la valeur est NULL, ---

SELECT * FROM MyTab 
WHERE Sex=NULL 

ci-dessus donne requête de sortie ---- Aucune ligne sélectionnée --- pourquoi ??

si la valeur est NULL alors ---

SELECT * FROM Mytab 
WHERE Sex IS NULL 

ci-dessus donne la requête de sortie ---- comment ??

+1

NULL ne fait rien pas également. So = NULL renvoie toujours false. Et c'est pourquoi il existe une syntaxe spéciale pour tester la nullité. Cela est vrai pour toutes les bases de données ANSI SQL. – APC

+0

"Quelle sera la valeur dans la colonne Sexe & Date de naissance? Cela dépend du SGBDR. Dans Oracle, oui ce serait null. Dans SQL Server, non, la valeur serait une chaîne vide, '' ''. –

Répondre

2

De Null (SQL)

Malentendu de la façon dont Null œuvres est la cause d'un grand nombre d'erreurs dans le code SQL, aussi bien dans les instructions SQL norme ISO et dans le SQL spécifiques dialectes pris en charge par réel monde systèmes de gestion de base de données. Ces erreurs sont habituellement le résultat de confusion entre Null et soit 0 (zéro) ou une chaîne vide (une valeur de chaîne avec une longueur de zéro, représenté dans SQL comme « »). Null est défini par la norme ISO ISO comme différent à la fois d'une chaîne vide et de la valeur numérique 0, cependant. Alors que Null indique l'absence de n'importe quelle valeur, la chaîne vide et le zéro numérique représentent tous deux des valeurs réelles.

également de SET ANSI_NULLS

Lorsque SET ANSI_NULLS est OFF, Egaux (=) et non comparaison égal à (<>) opérateurs ne suivent pas la norme SQL-92 . Une instruction SELECT utilisant WHERE nom_colonne = NULL renvoie les lignes avec des valeurs nulles dans nom_colonne. Une instruction SELECT utilisant WHERE nom_colonne <> NULL renvoie les lignes avec des valeurs non nulles dans la colonne. Dans en outre, une instruction SELECT utilisant WHERE nom_colonne <> valeur_XYZ renvoie toutes les lignes qui ne sont pas la valeur XYZ et qui ne sont pas NULL.

10

NULL est une valeur spéciale dans SQL indiquant l'absence de données . En tant que tel, vous ne pouvez pas faire des requêtes telles que:

SELECT fields FROM table WHERE column = NULL 

NULL ne peut être comparé à quoi que ce soit, y compris NULL lui-même. , Vous aurez besoin à la place:

SELECT fields FROM table WHERE column IS NULL 

Cependant, dans votre cas, vous insérez vraiment une valeur vide dans Sex et DOB.
valeur Et vide n'est pas NULL. Il faudrait interroger pour:

SELECT fields FROM table WHERE column = '' 
0

NULL signifie qu'aucune donnée (même pas stuff vierge ou vide), alors Column = NULL ne va pas travailler même si Column IS NULL doit retourner les lignes avec cette colonne comme NULL. Mais vous insérez '' value pour comparer avec NULL ne retournera aucune ligne.

2

'' - il s `signifie une chaîne vide. Si vous souhaitez insérer NULL, vous devez utiliser yo

INSERT INTO MyTab 
      VALUES (22, '', NULL, 4) 
0

Comme d'autres ont dit, la première requête ne renvoie aucune sortie parce que vous ne pouvez pas vérifier NULL avec opérateur égal. La deuxième requête est plus déroutante - mon seul doute est que vous utilisez Oracle qui traite les chaînes vides comme des valeurs NULL.

La réponse à la question sur les valeurs dans les champs de sexe et date de naissance serait fonction du type de ces champs et le moteur de base de données que vous travaillez.

Questions connexes