Menampilkan Beberapa Baris Data Menjadi Satu Baris pada MySQL


Menampilkan Beberapa Baris Data Menjadi Satu Baris pada MySQL | kangriyanto.net – Tulisan ini akan menunjukkan bagaimana caranya menampilkan beberapa baris data menjadi satu kolom saja pada MySQL yang dipisahkan dengan tanda koma. Studi kasus akan dicontohkan pada database akademik sederhana yang terdiri dari 3 (tiga) tabel yaitu tabel mahasiswa, tabel matakuliah dan tabel krs.

Persiapkan Tabel

Kita akan membuat database dulu, lalu didalamnya terdapat 3 (tiga) tabel tadi. Pastikan servis MySQL sudah berjalan.

Service MySQL telah berjalan

Lalu masuk ke MySQL Command Line lalu buat database akademik.

CREATE DATABASE akademik;
USE akademik;

Lalu buat tabel mahasiswa dengan perintah:

CREATE TABLE mahasiswa (
  nim VARCHAR(10),
  nama_lengkap VARCHAR(25)
  PRIMARY KEY(nim)
);

Kemudian kita akan membuat tabel yang kedua, yaitu tabel matakuliah:

CREATE TABLE matakuliah (
  kode_mk VARCHAR(7),
  nama_mk VARCHAR(100),
  sks INT(1),
  PRIMARY KEY(kode_mk)
);

Kita buat satu tabel lagi yaitu tabel krs:

CREATE TABLE krs (
  nim VARCHAR(10),
  kode_mk VARCHAR(7),
  PRIMARY KEY(nim, kode_mk)
);

Menyiapkan Data

Kita masukkan beberapa sampel data yang akan diinput ke tiap-tiap tabel diatas. Pertama kita input ke tabel mahasiswa yang terdiri dari 2 (dua) mahasiswa:

INSERT INTO mahasiswa VALUES
('2021034100', 'Adi'),
('2021034101', 'Budi');

Masukkan pula beberapa data pada tabel matakuliah:

INSERT INTO matakuliah VALUES
('MKB1111', 'Pendidikan Pancasila', 2),
('MPK1111', 'Algoritma dan Pemrograman', 2),
('MPK1121', 'Pemrograman Web', 3);

Terakhir, masukkan beberapa data ke dalam tabel krs dengan perintah:

INSERT INTO krs VALUES
('2021034100', 'MKB1111'),
('2021034100', 'MPK1121'),
('2021034101', 'MPK1111');

Ketiga tabel sudah terisi dengan beberapa data, untuk melihatnya lakukan perintah berikut:

SELECT * FROM mahasiswa; SELECT * FROM matakuliah; SELECT * FROM krs;
Menampilkan Data pada Tabel Mahasiswa, Matakuliah dan KRS

Menampilkan Mahasiswa yang Mengambil Matakuliah

Untuk menampilkan daftar mahasiswa yang mengambil matakuliah, kita bisa gunakan 3 (tiga) tabel diatas, yaitu tabel mahasiswa, matakuliah dan krs. Ketiganya akan kita gabung dengan menggunakan perintah JOIN (tepatnya INNER JOIN).

SELECT mahasiswa.nim, nama_lengkap, nama_mk
FROM mahasiswa
JOIN krs
ON mahasiswa.nim = krs.nim
JOIN matakuliah
ON matakuliah.kode_mk = krs.kode_mk;

Hasil dari JOIN tiga tabel dapat dilihat pada gambar berikut. Ada 2 (dua) baris data yang memiliki nilai hampir sama yaitu data si Adi. Dalam kasus ini Adi mengambil 2 (dua) matakuliah, yaitu Pendidikan Pancasila dan Pemrograman Web.

Hasil Dari JOIN 3 (tiga) tabel

Lalu bagaimana jika kita hanya ingin menampilan daftar mahasiswa yang unik saja? Dalam hal ini hanya muncul Adi dan Budi saja (tanpa ada Adi lagi)? Jawabnya, kita bisa gunakan GROUP_CONCAT.

SELECT mahasiswa.nim, nama_lengkap, GROUP_CONCAT(nama_mk) as nama_mk
FROM mahasiswa
JOIN krs
ON mahasiswa.nim = krs.nim
JOIN matakuliah
ON matakuliah.kode_mk = krs.kode_mk
GROUP BY mahasiswa.nim;

Perlu diperhatikan, disini saya merubah baris pertama dan menambahkan klausa GROUP BY diakhir perintah. Hasilnya dapat dilihat seperti pada gambar berikut:

Hasil dari JOIN 3 tabel dan GROUP_CONCAT

Sekarang kita telah berhasil menampilkan hanya 2 (dua) baris saja, yaitu data Adi dan Budi. Perhatikan pada field nama_mk, nama matakuliah yang diambil oleh Adi digabung menjadi satu dan dipisahkan dengan tanda koma. Bagaimana, mudah bukan?

Nah, itulah tadi bagaimana menampilkan bebeapa baris data menjadi satu baris saja pada database MySQL studi kasus pada basis data akademik dengan menggunakan GROUP_CONCAT dan GROUP BY. Semoga bermanfaat 🙂

Tinggalkan Komentar

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.