MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

SQL NULLIF() Dijelaskan

Sebagian besar RDBMS utama mendukung NULLIF() operator, yang mengembalikan NULL jika kedua argumennya ekuivalen. Jika argumen tidak setara, NULLIF() mengembalikan argumen pertama.

NULLIF() adalah fitur standar SQL (termasuk dalam spesifikasi ISO/IEC 9075).

Sintaks

Sintaksnya seperti ini:

NULLIF (V1, V2)

Ini setara dengan CASE berikut ekspresi:

CASE WHEN V1=V2 THEN NULL ELSE V1 END

Contoh

Berikut ini contoh untuk didemonstrasikan:

SELECT NULLIF( 12, 12 );

Hasil:

NULL

Dalam hal ini, kedua argumen identik dan hasilnya adalah NULL .

Bergantung pada RDBMS Anda, output aktual untuk nilai NULL mungkin berbeda. Misalnya, saat menggunakan psql (untuk PostgreSQL), string kosong akan dikeluarkan secara default setiap kali nilai NULL dikembalikan (walaupun ini dapat diubah). Sama halnya dengan SQLite (dan ini juga dapat diubah).

Ketika Argumen Tidak Ekuivalen

Inilah yang terjadi jika argumennya tidak setara:

SELECT NULLIF( 12, 13 );

Hasil:

12

Argumennya berbeda dan argumen pertama dikembalikan.

String

Berikut adalah contoh yang membandingkan string:

SELECT 
    NULLIF( 'Gym', 'Gym' ) AS "Same",
    NULLIF( 'Gym', 'Bag' ) AS "Different";

Hasil:

+------+-----------+
| Same | Different |
+------+-----------+
| NULL | Gym       |
+------+-----------+

Tanggal

Berikut ini contoh yang membandingkan tanggal:

SELECT 
    NULLIF( DATE '2045-11-25', DATE '2045-11-25' ) AS "Same",
    NULLIF( DATE '2045-11-25', DATE '1990-08-15' ) AS "Different";

Hasil:

+------+------------+
| Same | Different  |
+------+------------+
| NULL | 2045-11-25 |
+------+------------+

Ekspresi

NULLIF() mengevaluasi nilai ekspresi saat ini. Oleh karena itu, jika kita memberikan ekspresi seperti ini:

SELECT NULLIF( 24, 2 * 12 );

Kami mendapatkan ini:

NULL

2 dikalikan dengan 12 adalah 24, sehingga kedua argumen tersebut setara.

Inilah yang terjadi jika kita mengubah argumen kedua:

SELECT NULLIF( 24, 3 * 12 );

Hasil:

24

Argumen pertama dikembalikan.

Contoh Basis Data

Misalkan kita menjalankan kueri berikut:

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'South America'
ORDER BY Name;

Hasil:

+------------------+-------------------+
| Name             | LocalName         |
+------------------+-------------------+
| Argentina        | Argentina         |
| Bolivia          | Bolivia           |
| Brazil           | Brasil            |
| Chile            | Chile             |
| Colombia         | Colombia          |
| Ecuador          | Ecuador           |
| Falkland Islands | Falkland Islands  |
| French Guiana    | Guyane française  |
| Guyana           | Guyana            |
| Paraguay         | Paraguay          |
| Peru             | Perú/Piruw        |
| Suriname         | Suriname          |
| Uruguay          | Uruguay           |
| Venezuela        | Venezuela         |
+------------------+-------------------+

Di sini, kami memiliki nama negara di kolom kiri, dan nama lokal untuk masing-masing negara di kanan.

Mari tambahkan NULLIF() ke kolom ketiga dari kueri kami:

SELECT
    Name,
    LocalName,
    NULLIF(LocalName, Name) AS "Local Name if Different"
FROM country 
WHERE Region = 'South America'
ORDER BY Name;

Hasil:

+------------------+-------------------+-------------------------+
| Name             | LocalName         | Local Name if Different |
+------------------+-------------------+-------------------------+
| Argentina        | Argentina         | NULL                    |
| Bolivia          | Bolivia           | NULL                    |
| Brazil           | Brasil            | Brasil                  |
| Chile            | Chile             | NULL                    |
| Colombia         | Colombia          | NULL                    |
| Ecuador          | Ecuador           | NULL                    |
| Falkland Islands | Falkland Islands  | NULL                    |
| French Guiana    | Guyane française  | Guyane française        |
| Guyana           | Guyana            | NULL                    |
| Paraguay         | Paraguay          | NULL                    |
| Peru             | Perú/Piruw        | Perú/Piruw              |
| Suriname         | Suriname          | NULL                    |
| Uruguay          | Uruguay           | NULL                    |
| Venezuela        | Venezuela         | NULL                    |
+------------------+-------------------+-------------------------+

Kita dapat melihat bahwa kolom ketiga mengembalikan nama lokal hanya jika berbeda dengan nilai di Name kolom. Jika sama, maka NULL dikembalikan.

Kita juga bisa menggunakan NULLIF() untuk memfilter hasil kueri kami:

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'South America'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;

Hasil:

+---------------+-------------------+
| Name          | LocalName         |
+---------------+-------------------+
| Brazil        | Brasil            |
| French Guiana | Guyane française  |
| Peru          | Perú/Piruw        |
+---------------+-------------------+

Dalam hal ini, kami hanya mengembalikan baris yang nama lokalnya berbeda dengan Name kolom.

NULLIF() vs CASE

Seperti disebutkan, kode berikut:

NULLIF (V1, V2)

setara dengan CASE berikut ini ekspresi:

CASE WHEN V1=V2 THEN NULL ELSE V1 END

Jadi dimungkinkan untuk menggunakan CASE ekspresi alih-alih NULLIF() jika diinginkan. NULLIF() function pada dasarnya adalah pintasan sintaksis untuk CASE ekspresi.

Jadi misalnya, kita bisa mengganti contoh sebelumnya dengan berikut ini:

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'South America'
AND (CASE WHEN LocalName = Name THEN NULL ELSE LocalName END) IS NOT NULL
ORDER BY Name;

Hasil:

+---------------+-------------------+
| Name          | LocalName         |
+---------------+-------------------+
| Brazil        | Brasil            |
| French Guiana | Guyane française  |
| Peru          | Perú/Piruw        |
+---------------+-------------------+

Namun, NULLIF() fungsinya jauh lebih ringkas.

Jumlah Parameter Salah

Melewati jumlah argumen yang salah, menghasilkan kesalahan:

SELECT NULLIF( 'One' );

Hasil di MySQL:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'NULLIF'

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mencetak lebih dari 20 item (dokumen) di shell MongoDB?

  2. Panduan Pengembang untuk MongoDB Sharding

  3. error:parameter tipe `D` harus digunakan sebagai parameter tipe untuk beberapa tipe lokal

  4. Tutorial dasar-dasar MongoDB

  5. Bagaimana cara memeriksa koneksi ke mongodb