Gördüğüm SQL
kullanımları hem o !=
ve <>
için eşit değildir . Tercih edilen sözdizimi nedir ve neden?
Seviyorum !=
, çünkü <>
bana hatırlatıyor Visual Basic
.
NOT (A = B)
.
Gördüğüm SQL
kullanımları hem o !=
ve <>
için eşit değildir . Tercih edilen sözdizimi nedir ve neden?
Seviyorum !=
, çünkü <>
bana hatırlatıyor Visual Basic
.
NOT (A = B)
.
Yanıtlar:
SQL Server AKA T-SQL kullanıyorsanız teknik olarak aynı işlevi görürler. Saklı yordamlarda kullanıyorsanız, birini diğerinin üzerinde kullanmak için performans nedeni yoktur. Daha sonra kişisel tercihlere iner. ANSI uyumlu olduğu için <> kullanmayı tercih ediyorum.
Çeşitli ANSI standartlarına bağlantılar bulabilirsiniz ...
!=
Kullandığım C'den etkilenen her dilde olması nedeniyle her zaman kullanmayı tercih etmiştim ve Python belgeleri şöyle diyor: “Formlar <>
ve !=
eşdeğerdir; C ile tutarlılık !=
tercih edilir; !=
aşağıda belirtilen yerler <>
de kabul edilir. <>
yazım eskimiş olarak kabul edilir." Ama SQL Python değil!
<>
üzerinde kullanmanızı öneririz !=
, örneğin 70-461 sınavı için Microsoft Press eğitim seti, "Microsoft SQL Server Sorgulama", diyorlar "Standart formu ne zaman bir örnek olarak, T-SQL iki destekler" eşittir ”operatörler: <> ve! =. Birincisi standart, ikincisi değil.
Çoğu veritabanı !=
(popüler programlama dilleri) ve <>
(ANSI) desteği sunar.
Her ikisini de destekleyen veritabanları !=
ve <>
:
!=
ve<>
!=
ve<>
!=
ve<>
!=
ve<>
!=
ve<>
!=
ve<>
!=
ve<>
!=
ve<>
!=
ve<>
ANSI standart operatörünü destekleyen veritabanları, yalnızca :
NOT (a = b)
yerine eşlenir . Dahili olarak aynı mı? (a <> b)
(a != b)
'<>'
dan SQL-92 standardı ve '!='
a, özel bir T-SQL operatörü. Diğer veritabanlarında da kullanılabilir, ancak standart olmadığından, duruma göre almanız gerekir.
Çoğu durumda, hangi veritabanına bağlandığınızı bilirsiniz, bu gerçekten bir sorun değildir. En kötüsü SQL'de bir arama yapmanız ve değiştirmeniz gerekebilir.
!=
bunun bir parçası değil. Tüm pratik amaçlar için bir defacto standardı olmasına rağmen, standart özellikler olan ve olmayan şeyleri karıştırmamalıyız.
ANSI SQL Standardı <>
"eşit değil" operatörü,
http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt ( 5.2 <token> and <separator>
)
!=
ANSI / SQL 92 standardına göre operatör yoktur .
<>
SQL-92 standardına göre geçerli SQL'dir.
http://msdn.microsoft.com/en-us/library/aa276846(SQL.80).aspx
SQL Server açısından ikisi de geçerlidir ve aynıdır ,
https://docs.microsoft.com/en-us/sql/t-sql/language-elements/not-equal-to-transact-sql-exclamation
Microsoft kendilerinin tercih ettiği görülüyor <>
için !=
kendi masa kısıtlamaları içinde kanıtladığı gibi. Ben şahsen kullanmayı tercih ediyorum, !=
çünkü bunu açıkça "eşit değil" olarak okudum, ama [field1 != field2]
bir constrait olarak girip kaydederseniz, bir dahaki sefere sorguladığınızda, olarak görünecektir [field1 <> field2]
. Bu bana bunu yapmanın doğru yolunun olduğunu söylüyor <>
.
!=
ANSI olmamasına rağmen, okunabilir bir dil olarak gerçek SQL ruhundadır. Eşit değil bağırır.
<>
bana göre (daha az, daha büyük) ki bu sadece garip. Niyetinin bu yüzden eşit olmadığından daha az veya daha büyük olduğunu biliyorum, ama bu gerçekten basit bir şey söylemenin gerçekten karmaşık bir yolu.
Ben sadece bazı uzun SQL sorguları almak ve sevgisiz bir XML dosyasına içine içine gitmek olmaz aptal nedenleri bir sürü yerleştirmek zorunda kaldı.
XML'in hiç <>
de !=
başarısız olmadığını ve kendimi harap olmadan önce onları değiştirmek ve kendimi kontrol etmek zorunda olduğumu söylemek yeterli.
Alternatiflerden biri , iki bağımsız değişken Microsoft Docs uygulamasında eşit NULLIF ise NULL döndüren <>
veya !=
NULL döndüren başka bir NULLIF işleci kullanmak olacaktır . Bu yüzden WHERE maddesinin aşağıdaki gibi ve aşağıdaki şekilde değiştirilebileceğine inanıyorum :<>
!=
NULLIF(arg1, arg2) IS NOT NULL
Bulduğum gibi, bazı durumlarda kullanmak <>
ve !=
bugüne kadar çalışmıyor. Dolayısıyla yukarıdaki ifadeyi kullanmak gerekeni yapar.
<>
, tüm köşe durumlarında dizin kullanımı ile ilgili olarak performans gösterip göstermeyeceğinden emin değilim . Ayrıca, okunabilirlik kesinlikle çok daha kötü ...
Bunun !=
yerine kullanmayı tercih ettim <>
çünkü bazen <s></s>
SQL komutlarını yazmak için sözdizimini kullanıyorum . !=
Bu durumda sözdizimi hatalarını önlemek için kullanmak daha kullanışlıdır.
Her ikisi de T-SQL'de kabul edilir. Ancak, kullanım <>
daha hızlı çalışıyor!=
gibi görünüyor . Ben sadece kullanarak karmaşık bir sorgu koştu !=
ve çalıştırmak için ortalama 16 saniye sürdü. Bunları değiştirdim <>
ve şimdi sorgu çalıştırmak ortalama 4 saniye sürüyor. Bu büyük bir gelişme!
Aynı şekilde işlev görseler de, !=
tam olarak "eşit değil" anlamına gelir.<>
anlamına , depolanan değerden daha büyük ve daha küçük anlamına gelir.
Düşünün >=
ya da <=
, dizinlerinizdeki sorguları çarpanlarına ayırırken bu mantıklı olacaktır ...<>
olacaktır bazı durumlarda (doğru dizinle) daha hızlı çalışacaktır, ancak diğer bazı durumlarda (dizinsiz) aynı şekilde çalışacaktır.
Bu aynı zamanda veri tabanı sisteminizin değerleri !=
ve değerlerini nasıl okuduğuna da bağlıdır <>
. Veritabanı sağlayıcısı sadece kısayol yapabilir ve aynı şekilde çalışmasını sağlayabilir, bu nedenle her iki şekilde de bir faydası yoktur.PostgreSQL ve SQL Server bunu kısayol yapmaz; yukarıda göründüğü gibi okunur.