Tutorial Belajar MySQL Part 21: Cara Menampilkan Data dari Tabel MySQL (SELECT)

Pada tutorial kali ini kita akan membahas cara menampilkan data dari tabel MySQL dengan query SELECT. Perintah SELECT akan dibahas lengkap dengan opsi query WHERE, ORDER BY, dan LIMIT.

Menampilkan data dari sebuah tabel merupakan hal paling sering kita lakukan dalam menangani database. Pembuatan tabel MySQL hanya perlu di lakukan sekali di awal implementasi, namun input data (INSERT) dan menampilkannya kembali (SELECT) dalam format yang diinginkan merupakan rutinitas selama database masih digunakan.


Mempersiapkan Tabel Contoh: mata_kuliah dan daftar_dosen

Karena pembahasan query SELECT memiliki banyak variasi yang membuatnya memiliki banyak fitur, dalam tutorial kali ini saya akan membuat 2 buah tabel dengan nama mata_kuliah dan daftar_dosen. Tabel ini juga akan digunakan untuk beberapa tutorial selanjutnya.

Berikut adalah query yang digunakan untuk merancang tabel mata_kuliah dan daftar_dosen:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mahasiswa          |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.13 sec)

mysql> USE mahasiswa;
Database changed

mysql> CREATE TABLE daftar_dosen (NIP CHAR(10) PRIMARY KEY,
nama_dosen VARCHAR(50) NOT NULL, no_hp CHAR(13),
alamat VARCHAR(100));
Query OK, 0 rows affected (0.10 sec)

mysql> DESC daftar_dosen;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| NIP        | char(10)     | NO   | PRI | NULL    |       |
| nama_dosen | varchar(50)  | NO   |     | NULL    |       |
| no_hp      | char(13)     | YES  |     | NULL    |       |
| alamat     | varchar(100) | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
4 rows in set (0.08 sec)

mysql> CREATE TABLE mata_kuliah (kode_matkul CHAR(6) PRIMARY KEY,
nama_matkul VARCHAR(50) NOT NULL,
jumlah_SKS TINYINT UNSIGNED DEFAULT '2',
semester TINYINT,NIP_dosen CHAR(10));
Query OK, 0 rows affected (0.04 sec)

mysql> DESC mata_kuliah;
+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| kode_matkul | char(6)             | NO   | PRI | NULL    |       |
| nama_matkul | varchar(50)         | NO   |     | NULL    |       |
| jumlah_SKS  | tinyint(3) unsigned | YES  |     | 2       |       |
| semester    | tinyint(4)          | YES  |     | NULL    |       |
| NIP_dosen   | char(10)            | YES  |     | NULL    |       |
+-------------+---------------------+------+-----+---------+-------+
5 rows in set (0.00 sec)

Berikutnya adalah mengisi tabel tersebut dengan data sample. Dalam contoh ini saya menggunakan data sample seperti pada tabel dibawah ini:

Data input untuk tabel daftar_dosen:

NIP Nama Dosen No HP Alamat
0160436012 Sabrina Sari 0812349900 Pekanbaru
0260432002 Maya Ari Putri 0812345234 Palembang
0275430005 Susi Indriani 0812656532 Bogor
0480432066 Tia Santrini 0812451177 Padang
0576431001 M. Siddiq 0812979005 Jakarta
0770435006 Rubin Hadi 0812567678 Papua
0869437003 Mustalifah 0812338877 Aceh
1080432007 Arif Budiman 0812456345 Makasar

Data input untuk tabel mata_kuliah:

Kode Mata Kuliah Nama Matakuliah Jumlah SKS Semester Nip Dosen
MATDAS Matematika Dasar 4 1 0160436012
FISDAS Fisika Dasar 2 1 0480432066
TEKKOM Teknik Kompilasi 2 6 0480432066
JARKOM Jaringan Komputer 3 3 0770435006
DTBASE Database 4 4 0275430005
SISOPR Sistem Operasi 2 4 0160436012
MIKROP Mikro Prosesor 2 5 0480432066

Anda boleh menginputnya satu per satu dengan perintah INSERT seperti yang telah kita pelajari pada Tutorial Cara Menambahkan data ke dalam Tabel dengan query INSERT.

Selain itu saya juga menyediakan file text untuk diinput melalui query LOAD DATA INFILE, seperti pada Tutorial Menambahkan data dari File (LOAD DATA INFILE), file text tersebut dapat diambil dari link berikut: sample data tabel daftar_dosen dan mata_kuliah.

Khusus untuk yang mencoba menginput data melalui perintah LOAD DATA INFILE, berikut query yang diperlukan (saya berasumsi anda meletakkan file mata_kuliah.txt dan daftar_dosen.txt pada folder D:\MySQL )

mysql> LOAD DATA INFILE 'D:\\MySQL\\daftar_dosen.txt'
INTO TABLE daftar_dosen
FIELDS TERMINATED BY ','  LINES TERMINATED BY '\r\n';
Query OK, 8 rows affected (0.06 sec)
Records: 8  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

mysql> LOAD DATA INFILE 'D:\\MySQL\\mata_kuliah.txt'
INTO TABLE mata_kuliah
FIELDS TERMINATED BY ','  LINES TERMINATED BY '\r\n';
Query OK, 7 rows affected (0.04 sec)
Records: 7  Deleted: 0  Skipped: 0  Warnings: 0

mysql> SELECT * FROM mata_kuliah;
+-------------+-------------------+------------+----------+------------+
| kode_matkul | nama_matkul       | jumlah_SKS | semester | NIP_dosen  |
+-------------+-------------------+------------+----------+------------+
| DTBASE      | Database          |          4 |        4 | 0275430005 |
| FISDAS      | Fisika Dasar      |          2 |        1 | 0480432066 |
| JARKOM      | Jaringan Komputer |          3 |        3 | 0770435006 |
| MATDAS      | Matematika Dasar  |          4 |        1 | 0160436012 |
| MIKROP      | Mikro Prosesor    |          2 |        5 | 0480432066 |
| SISOPR      | Sistem Operasi    |          2 |        4 | 0160436012 |
| TEKKOM      | Teknik Kompilasi  |          2 |        6 | 0480432066 |
+-------------+-------------------+------------+----------+------------+
7 rows in set (0.00 sec)

Dengan seluruh tabel sample dan isinya selesai dibuat, kita siap untuk menampilkan data dari tabel tersebut dengan query SELECT MySQL.


Format Dasar Penulisan query SELECT

Pada saat ingin menampilkan data, biasanya kita butuh 3 hal:

  • Apa saja kolom yang ingin ditampilkan.
  • Nama tabel yang akan ditampilkan.
  • Kondisi untuk menampilkan data.

Query SELECT pada dasarnya juga terdiri dari 3 hal tersebut. Berikut adalah format dasar penulisan query SELECT MySQL:

SELECT apa_yang_akan_ditampilkan FROM tabel_apa
WHERE kondisi_apa_data_ditampilkan;

Ketiga faktor tersebut akan kita bahas dalam tutorial kali ini, dan karena kebutuhan menampilkan data sangat beragam, MySQL memiliki banyak opsi yang dapat digunakan, berikut adalah format dasar query SELECT yang saya ambil dari manual MySQL:

SELECT
   [ALL | DISTINCT | DISTINCTROW ]
      [HIGH_PRIORITY]
      [STRAIGHT_JOIN]
      [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
   select_expr [, select_expr ...]
   [FROM table_references
   [WHERE where_condition]
   [GROUP BY {col_name | expr | position}
      [ASC | DESC], ... [WITH ROLLUP]]
   [HAVING where_condition]
   [ORDER BY {col_name | expr | position}
      [ASC | DESC], ...]
   [LIMIT {[offset,] row_count | row_count OFFSET offset}]
   [PROCEDURE procedure_name(argument_list)]
   [INTO OUTFILE 'file_name'
      [CHARACTER SET charset_name]
      export_options
      | INTO DUMPFILE 'file_name'
      | INTO var_name [, var_name]]
   [FOR UPDATE | LOCK IN SHARE MODE]]

Seperti yang terlihat, MySQL menyediakan banyak sekali perintah opsional yang dapat dipilih untuk membantu kita menampilkan data dari database.

Sebagian besar tidak akan kita butuhkan, namun setidaknya MySQL menyediakan banyak pilihan untuk menampilkan hasil query SELECT. Kita akan bahas beberapa diantaranya.


Cara Menampilkan Seluruh Isi Tabel MySQL

Mungkin inilah query SELECT yang paling mudah diingat dan paling populer, yaitu bagaimana cara menampilkan seluruh data dari sebuah tabel.

Format dasar query select untuk menampilkan seluruh isi tabel adalah sebagai berikut:

SELECT * FROM nama_tabel

Tanda bintang (*) adalah wildcard sebagai pengganti 'pilih semua kolom'.

Sebagai contoh, berikut adalah query untuk menampilkan seluruh isi tabel daftar_dosen :

mysql> SELECT * FROM daftar_dosen;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

Cara Menampilkan Kolom Tertentu dari Tabel MySQL (SELECT … FROM)

Jika ingin menampilkan hanya sebagian kolom saja dari dalam tabel, kita dapat menentukan kolom mana saja yang akan ditampilkan.

Format dasarnya adalah sebagai berikut:

SELECT nama_kolom1, nama_kolom2,... FROM nama_tabel

nama_kolom1 dan nama_kolom2 adalah nama kolom yang ingin ditampilkan. Misalnya kita ingin menampilkan kolom nama_dosen dan alamat dari tabel daftar_dosen, maka querynya adalah sebagai berikut:

mysql> SELECT nama_dosen, alamat FROM daftar_dosen;
+----------------+-----------+
| nama_dosen     | alamat    |
+----------------+-----------+
| Sabrina Sari   | Pekanbaru |
| Maya Ari Putri | Palembang |
| Susi Indriani  | Bogor     |
| Tia Santrini   | Padang    |
| M. Siddiq      | Jakarta   |
| Rubin Hadi     | Papua     |
| Mustalifah     | Aceh      |
| Arif Budiman   | Makasar   |
+----------------+-----------+
8 rows in set (0.05 sec)

Cara Menfilter/Menyeleksi data dari Tabel MySQL (SELECT…WHERE…)

Jika kita ingin menampilkan hanya data yang memenuhi kriteria tertentu saja, maka dapat dilakukan dengan menambah perintah WHERE pada query SELECT.

Kondisi WHERE pada perintah SELECT dipakai untuk menyeleksi data yang diinginkan saja, sedangkan data yang tidak memenuhi kriteria tidak akan ditampilkan.

Format dasar query SELECT…WHERE adalah:

SELECT nama_kolom1, nama_kolom2,... FROM nama_tabel WHERE kondisi

Contohnya untuk menampilkan data dosen yang beralamat di Padang, bisa menggunakan query berikut:

mysql> SELECT NIP,nama_dosen FROM daftar_dosen WHERE alamat='Padang';
+------------+--------------+
| NIP        | nama_dosen   |
+------------+--------------+
| 0480432066 | Tia Santrini |
+------------+--------------+
1 row in set (0.00 sec)

Kondisi WHERE sangat fleksibel dan kita bisa menggunakan berbagai operasi kondisi seperti lebih besar (>), lebih kecil (<), tidak sama (<>), dan lain-lain.

List lengkap dari penggunaan kondisi yang dapat digunakan pada SELECT…WHERE adalah:

Operasi Aritmatika

Operator Penjelasan
+ Penambahan
Pengurangan
* Pengalian
/ Pembagian
% Sisa hasil bagi (modulus)

Operasi Logika

Operator Penjelasan
NOT atau ! Logika bukan
AND atau && Logika dan
OR atau || Logika atau
XOR Logika bukan atau (XOR)

Operasi Perbandingan

Operator Penjelasan
= Sama dengan
<> atau != Tidak sama dengan
<=> sama dengan (null safe)
< kurang dari
<= kurang dari atau sama dengan
> lebih besar dari
>= lebih besar atau sama dengan
BETWEEN Berada pada batas tertentu
IN Berada di dalam
IS NULL Pengecekan apakah berisi NULL
IS NOT NULL Pengecekan apakah bukan berisi NULL
LIKE Pencarian menggunakan wildcard
REGEXP atau RLIKE Pencarian menggunakan Regular Expression

Contohnya jika ingin menampilkan seluruh mata kuliah yang diajarkan di semester 4 ke atas, maka querynya adalah:

mysql> SELECT * FROM mata_kuliah WHERE semester >= 4;
+-------------+------------------+------------+----------+------------+
| kode_matkul | nama_matkul      | jumlah_SKS | semester | NIP_dosen  |
+-------------+------------------+------------+----------+------------+
| DTBASE      | Database         |          4 |        4 | 0275430005 |
| 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)

Penggabungan beberapa kondisi juga dapat dilakukan, misalnya ingin menampilkan seluruh mata kuliah dengan jumlah SKS=2 dan diajarkan pada semester dibawah 5, maka querynya:

mysql> SELECT * FROM mata_kuliah WHERE jumlah_SKS=2 AND semester < 5;
+-------------+----------------+------------+----------+------------+
| kode_matkul | nama_matkul    | jumlah_SKS | semester | NIP_dosen  |
+-------------+----------------+------------+----------+------------+
| FISDAS      | Fisika Dasar   |          2 |        1 | 0480432066 |
| SISOPR      | Sistem Operasi |          2 |        4 | 0160436012 |
+-------------+----------------+------------+----------+------------+
2 rows in set (0.07 sec)

Cara Mengurutkan hasil tampilan data MySQL (SELECT…ORDER BY)

MySQL menyediakan perintah opsional ORDER BY untuk mengurutkan data yang di hasilkan. Query dasar untuk SELECT…ORDER BY adalah:

SELECT nama_kolom1,... FROM nama_tabel WHERE kondisi ORDER BY nama_kolom_urut

nama_kolom_urut adalah kolom yang akan kita urutkan. Pengurutan bisa dari paling kecil ke besar, ataupun besar ke kecil.

Pilihan ini dapat diatur dengan penambahan instruksi ASC (singkatan dari ascending) untuk pengurutan dari kecil ke besar, dan DESC (singkatan dari descending) untuk urutan dari besar ke kecil. Jika tidak di dijelaskan, secara default bawaan MySQL perintah ORDER BY akan memakai ASC.

Contohnya jika kita ingin menampilkan mata kuliah dengan jumlah SKS lebih dari 2 secara berurutan dari yang paling kecil, querynya adalah:

mysql> SELECT * FROM mata_kuliah WHERE jumlah_SKS > 2 ORDER BY jumlah_SKS;
+-------------+-------------------+------------+----------+------------+
| kode_matkul | nama_matkul       | jumlah_SKS | semester | NIP_dosen  |
+-------------+-------------------+------------+----------+------------+
| JARKOM      | Jaringan Komputer |          3 |        3 | 0770435006 |
| DTBASE      | Database          |          4 |        4 | 0275430005 |
| MATDAS      | Matematika Dasar  |          4 |        1 | 0160436012 |
+-------------+-------------------+------------+----------+------------+
3 rows in set (0.06 sec)

Jika kita ingin menampilkan seluruh dosen pada tabel daftar_dosen dan diurutan kolom alamat secara abjad, maka querynya adalah sebagai berikut:

mysql> SELECT * FROM daftar_dosen ORDER BY alamat ASC;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 0869437003 | Mustalifah     | 0812338877 | Aceh      |
| 0275430005 | Susi Indriani  | 0812656532 | Bogor     |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0480432066 | Tia Santrini   | 0812451177 | Padang    |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
| 0770435006 | Rubin Hadi     | 0812567678 | Papua     |
| 0160436012 | Sabrina Sari   | 0812349900 | Pekanbaru |
+------------+----------------+------------+-----------+
8 rows in set (0.00 sec)

Cara Membatasi Hasil query SELECT (SELECT…LIMIT)

MySQL menyediakan pilihan opsional LIMIT untuk membatasi hasil query SELECT. Format dasar query SELECT…LIMIT adalah sebagai berikut:

SELECT nama_kolom1 FROM nama_tabel WHERE kondisi LIMIT baris_awal, jumlah_baris

Dimana baris_awal adalah awal nomor baris yang ingin ditampilkan, dan jumlah_baris adalah jumlah baris yang diurutkan dari baris_awal. Nomor baris pada MySQL diawali dengan nomor 0.

Misalkan kita ingin menampilkan data 3 nama dosen paling atas yang dirutkan berdasarkan nama, maka querynya adalah:

mysql> SELECT * FROM daftar_dosen ORDER BY nama_dosen ASC LIMIT 0,3;
+------------+----------------+------------+-----------+
| NIP        | nama_dosen     | no_hp      | alamat    |
+------------+----------------+------------+-----------+
| 1080432007 | Arif Budiman   | 0812456345 | Makasar   |
| 0576431001 | M. Siddiq      | 0812979005 | Jakarta   |
| 0260432002 | Maya Ari Putri | 0812345234 | Palembang |
+------------+----------------+------------+-----------+
3 rows in set (0.00 sec)

Jika kita hanya menulis 1 angka saja di belakang instruksi LIMIT, maka MySQL menganggap bahwa angka dihitung dari baris teratas (baris ke 0). Contohnya jika kita ingin menampilkan 5 baris teratas mata kuliah yang diurutkan berdasarkan nama, maka querynya:

mysql> SELECT * FROM mata_kuliah ORDER BY nama_matkul LIMIT 5;
+-------------+-------------------+------------+----------+------------+
| kode_matkul | nama_matkul       | jumlah_SKS | semester | NIP_dosen  |
+-------------+-------------------+------------+----------+------------+
| DTBASE      | Database          |          4 |        4 | 0275430005 |
| FISDAS      | Fisika Dasar      |          2 |        1 | 0480432066 |
| JARKOM      | Jaringan Komputer |          3 |        3 | 0770435006 |
| MATDAS      | Matematika Dasar  |          4 |        1 | 0160436012 |
| MIKROP      | Mikro Prosesor    |          2 |        5 | 0480432066 |
+-------------+-------------------+------------+----------+------------+
5 rows in set (0.00 sec)

Dalam Tutorial MySQL cara menampilkan data dari tabel ini kita telah membahas query dasar SELECT.

Query SELECT masih memiliki banyak perintah-perintah lain yang digunakan untuk mendapatkan hasil yang lebih spesifik. Kita akan membahasnya dalam tutorial-tutorial MySQL lain.

Berikutnya akan lanjut membahas Cara Pencarian Data dari Tabel MySQL dengan Query LIKE.

218 Comments

  1. jamalludin
    25 Nov 16
    • Andre
      26 Nov 16
  2. Ramdhan ega
    29 Nov 16
    • Andre
      29 Nov 16
  3. Leviathan
    31 Jan 17
  4. Richard
    20 Feb 17
  5. Richard
    22 Feb 17
  6. Anonymous
    21 Mar 17
    • Andre
      22 Mar 17
  7. akhmadi
    04 Apr 17
  8. MarchelTheo
    14 Apr 17
  9. Rudi
    25 Apr 17
    • Rudi
      25 Apr 17
    • Andre
      26 Apr 17
  10. Arrosi
    15 Jun 17
    • Andre
      17 Jun 17
  11. yokka
    05 Sep 17
    • Andre
      05 Sep 17
      • Anonymous
        17 Oct 21
  12. Hanif
    03 Oct 17
  13. minarki
    01 Nov 17
  14. Abdul Rozak
    07 Nov 17
    • Andre
      22 Nov 17
  15. Rahmita
    09 Nov 17
  16. Efendi
    22 Nov 17
  17. ica
    22 Nov 17
    • Andre
      22 Nov 17
      • Ica
        22 Nov 17
        • Andre
          22 Nov 17
  18. candra
    05 Feb 18
    • Andre
      05 Feb 18
  19. Agus Tonny
    20 Feb 18
  20. Vicky
    26 Feb 18
    • Andre
      27 Feb 18
  21. Anonymous
    07 Mar 18
    • Andre
      08 Mar 18
  22. Junsabildin
    03 Apr 18
    • Junsabildin
      03 Apr 18
      • Andre
        05 Apr 18
  23. wahyu
    09 Jun 18
  24. ilmi azhar
    11 Oct 18
    • Andre
      11 Oct 18
  25. Mas Saputra
    23 Oct 18
    • Andre
      23 Oct 18
  26. frederik
    23 Oct 18
  27. Farisz Akbar
    04 Dec 18
    • Andre
      04 Dec 18
  28. Anonymous
    03 Jan 19
  29. Anonymous
    07 May 19
  30. yong
    20 May 19
  31. namikaze
    27 May 19
  32. Riswandi
    19 Jul 19
  33. alya
    01 Aug 19
  34. rina
    09 Sep 19
  35. andin
    25 Oct 19
  36. Lily
    03 Jan 20
    • Andre
      04 Jan 20
  37. Andreas
    03 Mar 20
  38. Anonymous
    18 Mar 20
  39. Anak rajin
    05 Apr 20
  40. Anonymous
    11 Dec 20
  41. hoby ngoding
    13 Dec 20
  42. amel
    17 Dec 20
    • Andre
      18 Dec 20
  43. faisal
    16 Mar 21
    • Andre
      17 Mar 21
  44. Abank
    25 Mar 21
  45. dimas
    14 Jun 21
    • Andre
      14 Jun 21
  46. lucy
    03 Feb 23
  47. Nugrawan
    11 Aug 23

Add Comment