Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL NULLIF() Dijelaskan

Di MySQL, NULLIF() adalah fungsi kontrol aliran yang mengembalikan NULL jika kedua argumennya ekuivalen. Jika tidak, ia mengembalikan argumen pertama.

Sintaks

Sintaksnya seperti ini:

NULLIF(expr1,expr2)

Contoh

Berikut ini contoh untuk didemonstrasikan:

SELECT NULLIF( 7, 7 );

Hasil:

NULL

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

Ketika Argumen Tidak Ekuivalen

Inilah yang terjadi jika argumennya tidak setara:

SELECT NULLIF( 7, 8 );

Hasil:

7

Argumennya berbeda dan argumen pertama dikembalikan.

String

Berikut adalah contoh yang membandingkan string:

SELECT 
    NULLIF( 'Bean', 'Bean' ) AS "Same",
    NULLIF( 'Bean', 'Mushroom' ) AS "Different";

Hasil:

Same	Different
----    ---------
NULL	Bean

Tanggal

Berikut ini contoh yang membandingkan tanggal:

SELECT 
    NULLIF( DATE '2030-12-20', DATE '2030-12-20' ) AS "Same",
    NULLIF( DATE '2030-12-20', DATE '2035-08-15' ) AS "Different";

Hasil:

Same	Different
----    ----------
NULL	2030-12-20

Ekspresi

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

SELECT NULLIF( 8, 2 * 4 );

Kami mendapatkan ini:

NULL

2 dikalikan 4 adalah 8, sehingga kedua argumen tersebut ekuivalen.

Inilah yang terjadi jika kita mengubah argumen kedua:

SELECT NULLIF( 8, 2 * 3 );

Hasil:

8

Argumen pertama dikembalikan.

Contoh Basis Data

Misalkan kita menjalankan kueri berikut:

SELECT 
    Name,
    LocalName
FROM country 
WHERE Region = 'Southern Europe'
ORDER BY Name;

Hasil:

+-------------------------------+--------------------------------+
| Name                          | LocalName                      |
+-------------------------------+--------------------------------+
| Albania                       | Shqipëria                      |
| Andorra                       | Andorra                        |
| Bosnia and Herzegovina        | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       |
| Gibraltar                     | Gibraltar                      |
| Greece                        | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         |
| Macedonia                     | Makedonija                     |
| Malta                         | Malta                          |
| Portugal                      | Portugal                       |
| San Marino                    | San Marino                     |
| Slovenia                      | Slovenija                      |
| Spain                         | España                         |
| Yugoslavia                    | Jugoslavija                    |
+-------------------------------+--------------------------------+

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 = 'Southern Europe'
ORDER BY Name;

Hasil:

+-------------------------------+--------------------------------+--------------------------------+
| Name                          | LocalName                      | Local Name if Different        |
+-------------------------------+--------------------------------+--------------------------------+
| Albania                       | Shqipëria                      | Shqipëria                      |
| Andorra                       | Andorra                        | NULL                           |
| Bosnia and Herzegovina        | Bosna i Hercegovina            | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       | Hrvatska                       |
| Gibraltar                     | Gibraltar                      | NULL                           |
| Greece                        | Elláda                         | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         | Italia                         |
| Macedonia                     | Makedonija                     | Makedonija                     |
| Malta                         | Malta                          | NULL                           |
| Portugal                      | Portugal                       | NULL                           |
| San Marino                    | San Marino                     | NULL                           |
| Slovenia                      | Slovenija                      | Slovenija                      |
| Spain                         | España                         | España                         |
| Yugoslavia                    | Jugoslavija                    | Jugoslavija                    |
+-------------------------------+--------------------------------+--------------------------------+

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 = 'Southern Europe'
AND NULLIF(LocalName, Name) IS NOT NULL
ORDER BY Name;

Hasil:

+-------------------------------+--------------------------------+
| Name                          | LocalName                      |
+-------------------------------+--------------------------------+
| Albania                       | Shqipëria                      |
| Bosnia and Herzegovina        | Bosna i Hercegovina            |
| Croatia                       | Hrvatska                       |
| Greece                        | Elláda                         |
| Holy See (Vatican City State) | Santa Sede/Città del Vaticano  |
| Italy                         | Italia                         |
| Macedonia                     | Makedonija                     |
| Slovenia                      | Slovenija                      |
| Spain                         | España                         |
| Yugoslavia                    | Jugoslavija                    |
+-------------------------------+--------------------------------+

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

NULLIF() vs CASE

Kode berikut:

NULLIF(expr1,expr2)

setara dengan CASE berikut ini ekspresi:

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

Jumlah Parameter Salah

Melewati jumlah argumen yang salah, menghasilkan kesalahan:

SELECT NULLIF( 5 );

Hasil:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mysql_real_escape_string() dan mysql_escape_string() cukup untuk keamanan aplikasi?

  2. PDOException "tidak dapat menemukan driver"

  3. Bagaimana cara mendapatkan hari pertama setiap bulan yang sesuai di mysql?

  4. hitungan untuk setiap bergabung - pengoptimalan

  5. Bagaimana cara MEMESAN DENGAN SUM () di MySQL?