Tutorial Belajar MySQL: Cara Membuat Variabel di Dalam Query MySQL

Untuk pembuatan query yang cukup kompleks, kita bisa menggunakan variabel di dalam MySQL. Dalam tutorial belajar MySQL kali ini saya akan membahas tentang cara membuat variabel di dalam MySQL.

Tutorial ini menggunakan database mahasiswa yang dibuat pada tutorial Cara Menjalankan Query MySQL dari File Teks.

Pengertian Variabel dalam MySQL

Secara sederhana, variabel adalah 'penampung nilai'. Nilai dari variabel bisa berubah-ubah dari waktu ke waktu, dan juga bisa dihasilkan ketika program sudah berjalan. Dalam matematika kita juga sering menemui istilah variabel yang sering ditulis sebagai x, y atau z.

Walaupun bukan merupakan 'bahasa pemrograman', MySQL menyediakan fitur untuk membuat variabel. Variabel ini bisa digunakan dalam pembuatan query yang kompleks agar lebih sederhana.

Untuk membuat variabel di dalam MySQL, format dasarnya adalah sebagai berikut:

SET @nama_variabel = nilai_variabel

atau

SET @nama_variabel := nilai_variabel

Perhatikan bahwa kita bisa menggunakan tanda sama dengan ( = ) atau titik dua sama dengan ( := ) dalam mendefinisikan variabel.

Selain itu, MySQL juga membolehkan nilai variabel berasal dari hasil query SELECT, dengan format dasar sebagai berikut:

SELECT @nama_variabel := 'query select disini'.

Kita akan melihat contoh penggunaannya sesaat lagi.


Cara Membuat Variabel di dalam MySQL

Sebagai tabel praktek, saya akan menggunakan database mahasiswa yang dibuat dalam tutorial Cara Menjalankan Query MySQL dari File Teks.

Berikut contoh cara membuat variabel di dalam MySQL:

D:\MySQL 5.6\bin>mysql -u root
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 25
Server version: 5.6.22 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2014, Oracle and/or its affiliates. 
All rights reserved.
 
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clear the current 
input statement.
 
mysql> USE mahasiswa;
Database changed
mysql> set @kota = 'Jakarta';
Query OK, 0 rows affected (0.00 sec)
 
mysql> SELECT * FROM daftar_dosen WHERE alamat = @kota;
+------------+--------------+------------+---------+
| NIP        | nama_dosen   | no_hp      | alamat  |
+------------+--------------+------------+---------+
| 0576431001 | M. Siddiq    | 0812979005 | Jakarta |
| 1080432007 | Arif Budiman | 0812456345 | Jakarta |
+------------+--------------+------------+---------+
2 rows in set (0.00 sec)

Dalam query diatas, saya membuat sebuah variabel @kota yang di-set dengan nilai 'Jakarta', kemudian variabel ini digunakan di dalam kondisi WHERE dari query SELECT.

Selain karakter string (huruf), kita juga bisa mengisi nilai variabel yang berasal dari hitungan matematis, seperti berikut:

mysql> set @jum_sks := 1+1;
Query OK, 0 rows affected (0.11 sec)
 
mysql> SELECT @jum_sks;
+----------+
| @jum_sks |
+----------+
|        2 |
+----------+
1 row in set (0.00 sec)
 
mysql> SELECT * FROM mata_kuliah WHERE jumlah_SKS = @jum_sks;
+-------------+------------------+------------+----------+------------+
| kode_matkul | nama_matkul      | jumlah_SKS | semester | NIP_dosen  |
+-------------+------------------+------------+----------+------------+
| FISDAS      | Fisika Dasar     |          2 |        1 | 0480432066 |
| MIKROP      | Mikro Prosesor   |          2 |        5 | 0480432066 |
| SISOPR      | Sistem Operasi   |          2 |        4 | 0160436012 |
| TEKKOM      | Teknik Kompilasi |          2 |        6 | 0480432066 |
+-------------+------------------+------------+----------+------------+
4 rows in set (0.00 sec)

Kali ini saya membuat variabel @jum_sks dengan nilai 1+1. Kemudian saya melihat isi dari variabel ini menggunakan perintah SELECT @jum_sks. Terakhir saya menggunakan perintah SELECT untuk menampilkan seluruh mata kuliah yang memiliki jumlah SKS = 2.

Yang perlu diingat, variabel ini hanya bisa digunakan pada bagian expression dari sebuah query (seperti pada kondisi WHERE). Kita tidak bisa menggunakan variabel untuk konstanta seperti perintah berikut:

mysql> SET @nama_table = 'jurusan';
Query OK, 0 rows affected (0.00 sec)
 
mysql> CREATE TABLE @nama_table (nama_jur CHAR(25));
ERROR 1064 (42000): You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near '@nama_table (nama_jur CHAR(25))' 
at line 1

Selain menggunakan perintah SET, nilai variabel juga bisa berasal dari hasil query SELECT, seperti contoh berikut:

mysql> SELECT @kota := alamat FROM daftar_dosen WHERE 
nama_dosen = 'Maya Ari Putri';
+-----------------+
| @kota := alamat |
+-----------------+
| Palembang       |
+-----------------+
1 row in set (0.00 sec)
 
mysql> SELECT * FROM daftar_dosen WHERE alamat = @kota;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Palembang |
+------------+----------------+------------+-----------+
2 rows in set (0.00 sec)

Pada perintah pertama, saya mencari hasil dari query SELECT alamat FROM daftar_dosen WHERE nama_dosen = 'Maya Ari Putri', kemudian menyimpan hasilnya kedalam variabel @kota. Dengan demikian, variabel @kota sekarang akan berisi 'Palembang'. Perhatikan cara 'penyisipan' ini.

Kemudian saya menggunakan nilai variabel @kota untuk menampilkan seluruh dosen yang beralamat di Palembang.

Cara pembuatan variabel yang kita bahas disini bukanlah fitur standar bahasa SQL. Dengan demikian penerapannya mungkin berbeda di dalam RDBMS lain seperti MS SQL Server atau Oracle.

Fitur variabel di dalam MySQL mungkin tidak terlalu sering di gunakan, tetapi pada situasi tertentu, ini bisa membantu kita menyederhanakan query yang cukup kompleks.

8 Comments

  1. Imran
    04 Aug 15
    • Andre
      04 Aug 15
  2. Erlangga
    29 Jul 16
    • Andre
      30 Jul 16
  3. Anonymous
    02 Feb 17
    • Andre
      02 Feb 17
  4. Ade
    18 Nov 17
    • Andre
      19 Nov 17

Add Comment

Leave a Reply to Andre Cancel reply