SQL n'est égal à & null

Nous aimerions écrire cette requête:

select * from table 
where col1 != 'blah' and col2 = 'something'

Nous voulons la requête afin d'inclure les lignes où col1 est nul (et col2 = "quelque chose"). Actuellement, la requête ne sera pas le faire pour les lignes où col1 est null. Est la requête ci-dessous le meilleur et le plus rapide?

select * from table 
where (col1 != 'blah' or col1 is null) and col2 = 'something'

Alternativement, nous pourrions, si nécessaire mettre à jour tous les col1 des valeurs null pour les cordes à vide. Serait-ce une meilleure approche? Alors notre première requête serait de travailler.


Mise à jour: Re: à l'aide de NVL: j'ai lu sur un autre post que ce n'est pas considéré comme une option à partir d'un point de vue performances.

  • NVL: tout dépend de la quantité de données que vous interrogez. Vous avez toujours la possibilité de faire un index sur une fonction si la performance devient un problème.
  • Nous avons un peu de données (100 lignes).
  • Mais vous êtes un rétrécissement vers le bas sur "col2", où un index peut être utilisé. Le nombre de lignes que vous avez pour une valeur donnée sur "col2"?
  • La plupart des 100K lignes ont une valeur pour col2 et col1 (environ 20% de col1 lignes sont nuls). Nous présentons toutes ces informations pour les utilisateurs et ils ont la capacité de filtrer les resultset.
  • Nous sommes à l'aide de nvl sur les requêtes de 10mil+ enregistrements et ne sont pas avoir des problèmes de performances. Comme Thilo dit ci-dessus, vous pouvez utiliser d'autres indices de couper vers le bas avant de la nvl obtient évalué.
  • FWIW, une assez standard SQL expression de vos critères serait WHERE NULLIF(col1, 'blah') IS NOT NULL ... C'est probablement la même incidence sur les performances comme la NVL approche. Il vaut mieux serait de IS DISTINCT FROM, mais, comme @BillKarwin notes, qui n'est pas pris en charge dans Oracle.
  • Il n'y aura pas de différence de performances significative entre les requêtes à l'aide de NVL(col1,'X')!='blah' ou (col1!='blah' OR col1 IS NULL).

InformationsquelleAutor Marcus Leon | 2009-03-12