Mengurutkan ENUM - MySQL Dasar #49

Tipe Data ENUM dipandang sebagai tipe kolom string tetapi nilai - nilainya memiliki watak spesial yang disimpan secara numerik. Nilai ENUM akan terurut seperti urutan pertama kali data - data untuk ENUM-nya dimasukan.

Lihat daftar isi query pengurutan : Pengurutan Hasil Query

Misalnya disini Anda memiliki sebuah tabel jurusan yang berisi nama - nama jurusan, dan nama - nama jurusan tersebut disimpan kedalam ENUM

MariaDB [root93]> INSERT INTO jurusan (nama_jurusan) VALUES('Teknik Komputer Jaringan'),('Rekayasa Perangkat Lunak'),('Teknik Kendaraan Ringan')
    -> ,('Administratsi Perkantoran'),('Tata Boga'),('Administrasi Keuangan'),('Multimedia');
Query OK, 7 rows affected (0.06 sec)
Records: 7  Duplicates: 0  Warnings: 0

MariaDB [root93]> select * FROM jurusan;
+---------------------------+
| nama_jurusan              |
+---------------------------+
| Teknik Komputer Jaringan  |
| Rekayasa Perangkat Lunak  |
| Teknik Kendaraan Ringan   |
| Administratsi Perkantoran |
| Tata Boga                 |
| Administrasi Keuangan     |
| Multimedia                |
+---------------------------+
7 rows in set (0.00 sec)

Secara Internal MYSQL akan mendefinisikan data nilai enumerasi dari Teknik Kompter Jaringan sampai dengan Multimedia dengan nilai 1 sampai 7

Anda bisa menampilkan nilai - nilai ENUM sebagai string ataupun nilai numerik internal seperti berikut

MariaDB [root93]> SELECT nama_jurusan, nama_jurusan+0 FROM jurusan;
+---------------------------+----------------+
| nama_jurusan              | nama_jurusan+0 |
+---------------------------+----------------+
| Teknik Komputer Jaringan  |              1 |
| Rekayasa Perangkat Lunak  |              3 |
| Teknik Kendaraan Ringan   |              2 |
| Administratsi Perkantoran |              4 |
| Tata Boga                 |              5 |
| Administrasi Keuangan     |              6 |
| Multimedia                |              7 |
+---------------------------+----------------+
7 rows in set (0.02 sec)

Bila diperhatikan bahwa query diatas tidak menggunakan klausa ORDER by sehingga data - data ditampilkan tidak terurut. Jika Anda menggunakan KLAUSA ORDER by maka Anda akan menyadari bahwasanya ENUM menggunakan nilai numerik internal untuk melakukan pengurutan seperti berikut :

MariaDB [root93]> SELECT nama_jurusan, nama_jurusan+0 FROM jurusan ORDER by nama_jurusan;
+---------------------------+----------------+
| nama_jurusan              | nama_jurusan+0 |
+---------------------------+----------------+
| Teknik Komputer Jaringan  |              1 |
| Teknik Kendaraan Ringan   |              2 |
| Rekayasa Perangkat Lunak  |              3 |
| Administratsi Perkantoran |              4 |
| Tata Boga                 |              5 |
| Administrasi Keuangan     |              6 |
| Multimedia                |              7 |
+---------------------------+----------------+
7 rows in set (0.00 sec)

Jika Anda ingin mengurutkan nilai ENUM secara leksikal Anda bisa menggunakan parameter CONCAT() untuk memaksa nilai enum agar diurutkan secara leksikal

MariaDB [root93]> SELECT nama_jurusan, nama_jurusan+0 FROM jurusan ORDER by CONCAT(nama_jurusan);
+---------------------------+----------------+
| nama_jurusan              | nama_jurusan+0 |
+---------------------------+----------------+
| Administrasi Keuangan     |              6 |
| Administratsi Perkantoran |              4 |
| Multimedia                |              7 |
| Rekayasa Perangkat Lunak  |              3 |
| Tata Boga                 |              5 |
| Teknik Kendaraan Ringan   |              2 |
| Teknik Komputer Jaringan  |              1 |
+---------------------------+----------------+
7 rows in set (0.05 sec)

Jika misalnya nilai yang diurutkan bukan jenis ENUM yang tidak diurutkan secara leksikal maka Anda bisa mengubah tipe kolom menjadi ENUM, dengan nilai - nilai terurut seperti yang diinginkan. Untuk membuktikan bagiamana ini dapat dilakukan, Anda bisa membuat sebuah tabel warna yang nantinya memiliki sebuah kolom strring lalu mengisinya dengan beberapa baris

MariaDB [root93]> INSERT INTO warna (nama) VALUES('blue'),('green'),('indigo'),('orange'),('red'),('violet')
    -> , ('yellow');
Query OK, 7 rows affected (0.11 sec)
Records: 7  Duplicates: 0  Warnings: 0

MariaDB [root93]> SELECT * FROM warna ORDER by nama;
+--------+
| nama   |
+--------+
| blue   |
| green  |
| indigo |
| orange |
| red    |
| violet |
| yellow |
+--------+
7 rows in set (0.00 sec)

Perhatikan bahwa query diatas menampilkan data yang diurutkan secara leksikal

Jika misalnya Anda ingin mengurutkan nilai - nilai diatas sesuai dengan urutan tertentu yang Anda inginkan, maka Anda bisa saja mengubah tipe data CHAR diatas menjadi ENUM dimana nantinya pada ENUM Anda bisa mencantumkan daftar warna sesuai urutan yang Anda inginkan. Untuk merubah nilai CHAR menjadi ENUM Anda bisa menggunakan perintah ALTER TABLE seperti berikut

MariaDB [root93]> ALTER TABLE warna
    -> MODIFY nama
    -> ENUM('red','yellow','violet','blue','green','indigo','orange');
Query OK, 7 rows affected (0.83 sec)
Records: 7  Duplicates: 0  Warnings: 0

MariaDB [root93]> SELECT * FROM warna ORDER by nama;
+--------+
| nama   |
+--------+
| red    |
| yellow |
| violet |
| blue   |
| green  |
| indigo |
| orange |
+--------+
7 rows in set (0.00 sec)

Anda bisa saja mengurutkan dengan tatanan sendiri dengan menggunakan perintah FIELD()

MariaDB [root93]> SELECT * FROM warna
    -> ORDER by FIELD(nama, 'orange','violet','indigo','green','yellow','red','blue');
+--------+
| nama   |
+--------+
| orange |
| violet |
| indigo |
| green  |
| yellow |
| red    |
| blue   |
+--------+
7 rows in set (0.00 sec)

Baca selanjutnya : Menghasilkan Kesimpulan - MySQL Dasar #50

0 Response to "Mengurutkan ENUM - MySQL Dasar #49"

Post a Comment

Komentar yang Anda kirim akan terlebih dahulu di moderasi oleh Admin