1

誰かがOracleDBの以下のクエリの機能と、最後のnull行を返さない理由を説明できますか?また、null値の場合の機能ではないことを説明してください。

Table Store_Information
store_name    Sales  Date
Los Angeles   $1500  Jan-05-1999
San Diego      $250  Jan-07-1999
San Francisco  $300  Jan-08-1999
Boston         $700  Jan-08-1999
(null)         $600  Jan-10-1999


SELECT *
FROM scott.Store_Information
WHERE store_name IN (null)

STORE_NAME           SALES                DATE                      
-------------------- -------------------- ------------------------- 

0 rows selected
4

5 に答える 5

6
SELECT *
FROM scott.Store_Information
WHERE store_name IS null;

NULLは、他の(実際の)値と「比較」することはできません。そのため、IS NULLまたはを使用する必要がありIS NOT NULLます。

このトピックに関する一連のブログ投稿は次のとおりです。http://momjian.us/main/blogs/pgblog/2012.html#December_26_2012

于 2013-01-11T21:15:57.517 に答える
1

探している値がnull値の場合、クエリは次のようになります。

SELECT *
FROM scott.Store_Information
WHERE store_name IS NULL;
于 2013-01-11T21:16:13.087 に答える
0

Null は、文字列または数値比較の通常の規則に従わない特別な値です。これらの一般的なメソッドを使用して null を評価すると、特別な組み込み関数を使用しない限り、常に FALSE と評価されます。

Select * from Store_Information
where nvl(store_name,'') in ('')

Select * from store_information
where coalesce(store_name, 'Missing') in ('Missing')

Select * from store_information 
where store_name is null
于 2013-01-11T21:21:35.643 に答える
0

Oracle NULLS は特別です。

null と等しいもの
は何もありませんnull と等しくないものはありません

inは に相当するため、にも= any適用されinます。

inそのため、not inOR 句でNULL を使用して適切な結果を期待することはできません。

于 2013-01-11T21:19:22.173 に答える
0

クエリ選択フィールドに null 値が必要な場合は、次のことができます。ソリューション 1: where ... IS NULL ... を使用します。

解決策 2: または、絶対に IN を使用する場合は、NVL を使用できます。

SELECT * FROM scott.Store_Information WHERE NVL(store_name, 'NULL_STORE_NAME') IN ('NULL_STORE_NAME')

しかし、2 番目のケースでは、'NULL_STORE_NAME' という名前のストア名を使用できないと仮定します... したがって、通常は解決策 1 を使用する方が良いと思います...

于 2013-01-12T22:14:13.450 に答える