2012-03-22 19 views
14

SQL için Wikipedia sayfasında SQL'de boole mantığı hakkında bazı doğru tabloları vardır. [1] Wikipedia sayfası, SQL: 2003 standardını kaynak olarak görünüyor. 2003 taslak: eşittir operatörü (=) içinStandart SQL boole işleci IS ve eşittir (=) işleci

doğruluk tablosu SQL IS operatörü farklıdır.

Ayrıca Wikipedia makalesi (< boş yüklem>) özel bir vaka "IS NULL" belirtiyor. SQL

: 2003 düzenli operatör AND, NOT ve OR gibidir "OLDUĞU" operatörünüz olduğu görülmektedir. Ancak, < boş yüklem> hala var. IS düzenli boole operatör olduğunda

Neden orada> < boş yüklem nedir? "IS NULL" yapısını, tür dağıtma olmadan boolean olmayan değerlerle kullanabildiğinizden emin olmak ister mi? "= NULL" kullanmaktan vazgeçtiniz mi? farklı 2011 standart çalışmaları:

SQL mu? [1]

: Wikipedia on SQL

[2]: SQL:2011 draft PDF sayfa 335

[3]: SQL:2003 draft PDF sayfa

+4

Hiçbir şey tersine

+---------+-------+-------+---------+ | IS | TRUE | FALSE | UNKNOWN | +---------+-------+-------+---------+ | TRUE | TRUE | FALSE | FALSE | | FALSE | FALSE | TRUE | FALSE | | UNKNOWN | FALSE | FALSE | TRUE | +---------+-------+-------+---------+ 

bile BOŞ değil, NULL eşittir. Yani 'NULL = NULL', 'NULL = 1' ve '1 = NULL' hepsi yanlış (Pekala, hepsi "NULL"/"Bilinmiyor", bu * doğru değil * ve bu yüzden yanlış olmaya çok yakın.). Ama 'NULL IS NULL' doğrudur. – MatBailie

+0

Henüz bağlantılarınızı okumadım. 'SQLite'' '' 'ile değiştirilebilen bir' IS' operatörüne sahiptir, çünkü 'NULL = NULL' semantiği vardır. –

+0

Sayfa 335'e bakmamız gereken ne? Doğru sayfa numarasını aldığına emin misin? Bu, ' –

cevap

10

Bu benim için yeni bir tane.

Doğru <boolean value expression> gramer yalnızca boolean veri türü IS TRUE, IS FALSE, IS UNKNOWN ile kullanılmak üzere üç yüklemler tanımlar okursanız.

Bunlar, yalnızca True veya False için değerlendirdikleri eşitlik muadillerinden farklıdır. Asla Unknown'a. UNKNOWN = TRUE, UNKNOWN'a değerlendirir, ancak UNKNOWN IS TRUE, False olarak değerlendirir. IS ve = için

gerçeğin bütünüyle tablolar aşağıda belirtilmiştir.

+---------+---------+---------+---------+ 
| = | TRUE | FALSE | UNKNOWN | 
+---------+---------+---------+---------+ 
| TRUE | TRUE | FALSE | UNKNOWN | 
| FALSE | FALSE | TRUE | UNKNOWN | 
| UNKNOWN | UNKNOWN | UNKNOWN | UNKNOWN | 
+---------+---------+---------+---------+ 
+0

Operatörlerin 'IS TRUE', 'FALSE', 'NULL' ve 'UNKNOWN' olduğunu unutmayın. Bunlar, RHS koşuluna karşı LHS ifadesini değerlendiren tek operatörlerdir. IS tablosu 'üst kısımdaki operatör, işlenen taraf aşağı' olarak okunmalıdır; BİLİNMİYOR UNKNOWN DOĞRU değerlendirir. Ayrıca LHS'nin 'sıra tipi' olabileceğine (muhtemelen doğru teknik terim değil) dikkat edin ve daha sonra değerlendirme LHS'deki öğelerin her birinin üzerine gider. Ayrıca, operatörler 'DEĞİL DEĞİL', 'DOĞRU DEĞİL', 'YANLIŞ DEĞİL', 'BİLMİYOR DEĞİL' olabilir. Bu büyük baş ağrılarına yol açabilir. (Devam) –

+0

(Devam): Bir satır ile IIRC, 'satır IS NOT NULL' ve 'NOT (satır IS NULL)' mutlaka aynı cevap değildir. Fark ediyorum ki, '' (NULL OLDUĞU) '' '' '' '' '' '' '' '' sütun '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '. 'Sıradaki' tek bir değer için bunlar aynıdır; Birden çok değer için, bunlar mutlaka aynı değildir. –

+0

@JonathanLeffler Standartlar (2003 ve 2011) "IS boolean işleci" terimini kullanır. Bağımsız tekli operatörler olsaydı, çoğul kullanmazlar mı? Bkz. Bölüm 6.34 '' '' yazdırılmış sayfa numarası 281 üzerinde. –

0

yukarıdaki posteri söylediği gibi 397, null = null doğru değil. NULL (false)

Null karşılaştırması için IS NULL veya IS NOT NULL kullanmanız gerekir.

+0

*** NULL (false) *** döndürecek geçerli bir ifade değil. 'NULL! == FALSE',' NULL! == DOĞRU ', 'NULL! == NULL'. Bu sadece * tanımsız *. – Fr0zenFyr