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

SQL COALESCE() Dijelaskan

Sebagian besar RDBMS utama mendukung COALESCE() operator, yang mengembalikan nilai non-null pertama dari daftar argumennya.

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

Sintaks

Sintaksnya seperti ini:

COALESCE (V1, V2, ..., Vn)

Jadi, setidaknya satu argumen diperlukan, tetapi beberapa argumen dapat (dan biasanya) disediakan.

COALESCE() dianggap sebagai n -operator adik. Dengan kata lain, ini adalah operator yang memiliki sejumlah variabel operan (yaitu n operand).

Contoh

Berikut adalah contoh sederhana untuk ditunjukkan:

SELECT COALESCE(null, 'Papaya', 'Salad');

Hasil:

Papaya

Dalam hal ini, Papaya adalah nilai non-null pertama, jadi COALESCE() mengembalikan nilai tersebut.

Salad juga merupakan nilai bukan nol, tetapi muncul setelah Papaya dan tidak dikembalikan.

COALESCE() vs CASE

COALESCE() biasanya dianggap sebagai pintasan sintaksis untuk CASE ekspresi.

Dengan demikian, pernyataan berikut:

COALESCE (V1, V2) 

setara dengan:

CASE WHEN V1 IS NOT NULL THEN V1 ELSE V2 END

Dan pernyataan berikut:

COALESCE (V1, V2, ..., Vn)

(untuk n 3) Setara dengan:

CASE WHEN V1 IS NOT NULL THEN V1 ELSE COALESCE (V2, ..., Vn) END

Ketika Semua Nilai Null

Jika semua nilai adalah null , COALESCE() mengembalikan null :

SELECT COALESCE( null, null );

Hasil:

null

Bergantung pada RDBMS Anda, keluaran aktual untuk nilai nol 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).

Di SQL Server, jika semua argumen null , maka setidaknya satu dari nilai nol harus diketik null . Oleh karena itu, contoh di atas sebenarnya menghasilkan kesalahan (karena semua argumen null adalah null konstanta).

Ekspresi

COALESCE() mengembalikan nilai saat ini dari ekspresi pertama yang awalnya tidak mengevaluasi ke null . Oleh karena itu, jika kita memberikan ekspresi seperti ini:

SELECT COALESCE( null, 3 * 5 );

Kami mendapatkan ini:

15

Contoh Basis Data

Misalkan kita menjalankan kueri berikut:

SELECT
  name,
  salary
FROM employee;

Dan kita mendapatkan hasil sebagai berikut:

 name  | salary 
-------+--------
 Elise | 100000
 Rohit |  50000
 Homer |   null

Kita dapat melihat bahwa baris terakhir memiliki nilai null di DOB kolom.

Jika kita ingin mengganti nilai null dengan nilai lain, kita bisa menggunakan COALESCE() sebagai berikut:

SELECT
  name,
  COALESCE(salary, 0) AS salary
FROM employee;

Hasil:

 name  | salary 
-------+--------
 Elise | 100000
 Rohit |  50000
 Homer |      0

Dalam hal ini kami mengganti semua nilai null dengan integer 0 .

Perbedaan Antara RDBMS

Secara umum, COALESCE() bekerja hampir sama di seluruh RDBMS.

Tapi ada beberapa perbedaan.

Tipe Data

Kita dapat melakukan hal berikut di MySQL, MariaDB, dan SQLite:

SELECT
  name,
  COALESCE(salary, 'None') AS salary
FROM employee;

Hasil:

name	salary
-----   ------
Elise	100000
Rohit	50000
Homer	None

Dalam hal ini, setiap kali salary kolom berisi nilai nol, outputnya adalah None .

Tetapi kueri itu dapat menyebabkan masalah di SQL Server, PostgreSQL, atau Oracle Database.

Ketika saya menjalankan kueri itu di SQL Server, PostgreSQL, dan Oracle Database, saya mendapatkan kesalahan karena nilai penggantinya adalah tipe data yang salah.

Inilah yang dikembalikan SQL Server ketika saya menjalankan kueri di atas:

Msg 245, Level 16, State 1, Line 15
Conversion failed when converting the varchar value 'None' to data type int.

Inilah yang dikembalikan PostgreSQL:

ERROR:  invalid input syntax for type integer: "None"
LINE 3:   COALESCE(salary, 'None') AS salary
                           ^

Dan inilah yang Oracle Database kembalikan:

ORA-00932: inconsistent datatypes: expected NUMBER got CHAR

Tetapi jika saya menggunakan nilai numerik, saya tidak mendapatkan kesalahan:

SELECT
  name,
  COALESCE(salary, 0) AS salary
FROM employee;

Hasil:

 name  | salary 
-------+--------
 Elise | 100000
 Rohit |  50000
 Homer |      0

Jadi contoh terakhir ini berfungsi di keenam RDBMS di atas.

Argumen Null

Perbedaan lain antara bagaimana RDBMS memproses COALESCE() adalah bagaimana mereka menangani argumen nol.

Seperti yang disebutkan, di SQL Server, jika semua argumen null , maka setidaknya satu dari nilai nol harus diketik null . Dengan kata lain, jika semua argumen ke COALESCE() adalah konstanta nol, maka kita mendapatkan kesalahan. Ini tidak terjadi dengan RDBMS lain, di mana semua argumen dapat berupa konstanta nol, dan outputnya akan menjadi null bukannya error.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara Mengekspor Hasil Kueri MongoDB ke File JSON

  2. Cara Menggabungkan Dokumen saat Mengimpor File ke MongoDB

  3. Cara menggunakan pengubah pembaruan $push di MongoDB dan C#, saat memperbarui array dalam dokumen

  4. .NET praktik terbaik untuk koneksi MongoDB?

  5. spring data grup mongodb oleh