Conditional Expressions
Hai semuanya, di materi kali ini kita akan membahas tentang Conditional Expression Seperti biasa karena materinya akan lumayan panjang jadi kita bagi jadi beberapa bagian diantaranya:
- What is Conditional Expression?
CASE-WHEN
expression- Using
CASE-WHEN-ELSE
expression - Using Nested
CASE-WHEN
expression - Using
CASE-WHEN
expression inWHERE
clause
Ok langsung aja kita bahas materi yang pertama
What is Conditional Expression?
Conditional statements/Expression in the SQL help you to define different logics and actions for different conditions. It allows you to perform different actions based on conditions defined within the statement. In real life, you perform many actions dependent on the outcome of some other activity or situation.
Some real-time examples of SQL case statement are:
- If it rains tomorrow, I will plan on a road trip.
- If flight tickets are less than $400 from my city, then I will go on vacation in Europe, else I will prefer some nearby tourist spot.
Di PostgreSQL, kita bisa menggunakan Conditional Statement/Expression dengan beberapa cara
- Case-When
- Coalesce
- NullIF
- Greatest or Least
Karena untuk function Coalesce
, NullIF
sudah pernah kita bahas di artikel sebelumnya jadi kita akan bahas lebih detail untuk Case-When
expressionnya.
Using CASE-WHEN
expression
The SQL CASE expression is a generic conditional expression, similar to if/else statements in other programming languages:
CASE clauses can be used wherever an expression is valid. Each condition is an expression that returns a boolean result. If the condition’s result is true
, the value of the CASE expression is the result that follows the condition, and the remainder of the CASE expression is not processed. If the condition’s result is not true
, any subsequent WHEN
clauses are examined in the same manner. If no WHEN condition yields true
, the value of the CASE expression is the result of the ELSE
clause. If the ELSE
clause is omitted and no condition is true
, the result is null
.
Jika kita gambarkan secara diagram flowchart seperti berikut:
Berikut adalah contoh penggunaan dalam SQL:
Jika dijalankan hasilnya seperti berikut:
hr=# select employee_id as kode_karyawan,
commission_pct as besar_komisi,
case
when commission_pct is null
then 'Tidak memiliki komisi'
end
from employees;
kode_karyawan | besar_komisi | case
---------------+--------------+-----------------------
100 | | Tidak memiliki komisi
101 | | Tidak memiliki komisi
102 | | Tidak memiliki komisi
103 | | Tidak memiliki komisi
104 | | Tidak memiliki komisi
105 | | Tidak memiliki komisi
145 | 0.40 |
146 | 0.30 |
147 | 0.30 |
148 | 0.30 |
149 | 0.20 |
150 | 0.30 |
151 | 0.25 |
152 | 0.25 |
(107 rows)
Using CASE-WHEN-ELSE
expression
Selanjutnya kita akan membahas, CASE-WHEN-ELSE
expression seperti berikut klo kita gambarkan secara diagram flowchart nya:
Jadi disini kita memiliki lebih dari 2 kondisi, dimana ke dua kondisi tersebut memiliki nilai return OK
sedangkan selain itu (else
) return something
. Berikut implementasi pada query sql:
Jika dijalankan hasilnya seperti berikut:
hr=# select employee_id as kode_karyawan,
hr-# commission_pct as besar_komisi,
hr-# case
hr-# when commission_pct is null
hr-# then 'Tidak memiliki komisi'
hr-# when commission_pct >= 0.2
hr-# then 'Memiki komisi lebih besar dari 20%'
hr-# else 'Memiliki komisi lebih kecil dari 10%'
hr-# end
hr-# from employees
hr-# limit 50;
kode_karyawan | besar_komisi | case
---------------+--------------+------------------------------------
100 | | Tidak memiliki komisi
101 | | Tidak memiliki komisi
102 | | Tidak memiliki komisi
103 | | Tidak memiliki komisi
104 | | Tidak memiliki komisi
144 | | Tidak memiliki komisi
145 | 0.40 | Memiki komisi lebih besar dari 20%
146 | 0.30 | Memiki komisi lebih besar dari 20%
147 | 0.30 | Memiki komisi lebih besar dari 20%
148 | 0.30 | Memiki komisi lebih besar dari 20%
149 | 0.20 | Memiki komisi lebih besar dari 20%
(50 rows)
Using Nested CASE-WHEN
expression
Selanjutnya kita akan membahas, Nested CASE-WHEN
expression. Sama halnya seperti bahasa pemograman kita juga bisa menggunakan percabangan dalam percabangan atau istilah kerennya Nested Condition. Jika kita gambarkan flowchart-nya seperti berikut:
Berikut adalah contoh implementasi SQLnya:
Jika dijalankan hasilnya seperti berikut:
hr=# select employee_id as kode_karyawan,
hr-# commission_pct as besar_komisi,
hr-# case
hr-# when commission_pct is not null
hr-# then
hr-# case
hr-# when commission_pct <= 0.1
hr-# then 'Komisi sebesar 10%'
hr-# when commission_pct <= 0.2
hr-# then 'Komisi sebesar 20%'
hr-# when commission_pct <= 0.3
hr-# then 'Komisi sebesar 30%'
hr-# else 'Komisi lebih besar dari 30%'
hr-# end
hr-# else 'Tidak memiliki komisi'
hr-# end
hr-# from employees
hr-# limit 60;
kode_karyawan | besar_komisi | case
---------------+--------------+-----------------------------
100 | | Tidak memiliki komisi
101 | | Tidak memiliki komisi
102 | | Tidak memiliki komisi
103 | | Tidak memiliki komisi
104 | | Tidak memiliki komisi
105 | | Tidak memiliki komisi
106 | | Tidak memiliki komisi
145 | 0.40 | Komisi lebih besar dari 30%
146 | 0.30 | Komisi sebesar 30%
147 | 0.30 | Komisi sebesar 30%
148 | 0.30 | Komisi sebesar 30%
153 | 0.20 | Komisi sebesar 20%
154 | 0.20 | Komisi sebesar 20%
155 | 0.15 | Komisi sebesar 20%
156 | 0.35 | Komisi lebih besar dari 30%
157 | 0.35 | Komisi lebih besar dari 30%
158 | 0.35 | Komisi lebih besar dari 30%
(60 rows)
Using CASE-WHEN
expression in WHERE
clause
Selain pada select statement, CASE-WHEN
Expression bisa juga di terapkan pada where
clause dengan basic syntax seperti berikut:
Jadi selain value kita juga bisa mengkondisikan suatu kondisi dari where clause contoh implementasi dari SQL seperti berikut:
Jika dijalankan hasilnya seperti berikut:
hr=# select employee_id as kode_karyawan,
hr-# commission_pct as besar_komisi,
hr-# salary as gaji_sebulan
hr-# from employees
hr-# where case
hr-# when commission_pct is null and salary <= 2200
hr-# then true
hr-# when commission_pct is null
hr-# then false
hr-# when commission_pct is not null and salary < 8000
hr-# then salary in (7500, 7000, 7200)
hr-# when commission_pct is not null and salary < 12000
hr-# then salary = 11000
hr-# end;
kode_karyawan | besar_komisi | gaji_sebulan
---------------+--------------+--------------
128 | | 2200.00
132 | | 2100.00
136 | | 2200.00
148 | 0.30 | 11000.00
154 | 0.20 | 7500.00
155 | 0.15 | 7000.00
160 | 0.30 | 7500.00
161 | 0.25 | 7000.00
164 | 0.10 | 7200.00
174 | 0.30 | 11000.00
178 | 0.15 | 7000.00
(11 rows)