Query Dasar MySQL
12. Menampilkan Data
Tutorial Belajar MySQL Part 21: Cara Menampilkan Data dari Tabel MySQL (SELECT)
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:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | mysql> SHOW DATABASES;+--------------------+| Database|+--------------------+| information_schema || mahasiswa          || mysql              || performance_schema || test               |+--------------------+5 rowsinset(0.13 sec)mysql> USE mahasiswa;Databasechangedmysql> CREATETABLEdaftar_dosen (NIP CHAR(10) PRIMARYKEY,nama_dosen VARCHAR(50) NOTNULL, no_hp CHAR(13),alamat VARCHAR(100));Query OK, 0 rowsaffected (0.10 sec)mysql> DESCdaftar_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 rowsinset(0.08 sec)mysql> CREATETABLEmata_kuliah (kode_matkul CHAR(6) PRIMARYKEY,nama_matkul VARCHAR(50) NOTNULL,jumlah_SKS TINYINT UNSIGNED DEFAULT'2',semester TINYINT,NIP_dosen CHAR(10));Query OK, 0 rowsaffected (0.04 sec)mysql> DESCmata_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 rowsinset(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 )
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | mysql> LOADDATA INFILE 'D:\\MySQL\\daftar_dosen.txt'INTOTABLEdaftar_dosenFIELDS TERMINATED BY','LINES TERMINATED BY'\r\n';Query OK, 8 rowsaffected (0.06 sec)Records: 8  Deleted: 0  Skipped: 0  Warnings: 0mysql> SELECT* FROMdaftar_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 rowsinset(0.00 sec)mysql> LOADDATA INFILE 'D:\\MySQL\\mata_kuliah.txt'INTOTABLEmata_kuliahFIELDS TERMINATED BY','LINES TERMINATED BY'\r\n';Query OK, 7 rowsaffected (0.04 sec)Records: 7  Deleted: 0  Skipped: 0  Warnings: 0mysql> SELECT* FROMmata_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 rowsinset(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:
| SELECTapa_yang_akan_ditampilkan FROMtabel_apaWHEREkondisi_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 ...]   [FROMtable_references   [WHEREwhere_condition]   [GROUPBY{col_name | expr | position}      [ASC| DESC], ... [WITHROLLUP]]   [HAVINGwhere_condition]   [ORDERBY{col_name | expr | position}      [ASC| DESC], ...]   [LIMIT {[offset,] row_count | row_count OFFSET offset}]   [PROCEDUREprocedure_name(argument_list)]   [INTOOUTFILE 'file_name'      [CHARACTERSETcharset_name]      export_options      | INTODUMPFILE 'file_name'      | INTOvar_name [, var_name]]   [FORUPDATE| LOCK INSHARE 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* FROMnama_tabel | 
Tanda bintang (*) adalah wildcard sebagai pengganti ‘pilih semua kolom‘.
Sebagai contoh, berikut adalah query untuk menampilkan seluruh isi tabel daftar_dosen :
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mysql> SELECT* FROMdaftar_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 rowsinset(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:
| SELECTnama_kolom1, nama_kolom2,... FROMnama_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:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mysql> SELECTnama_dosen, alamat FROMdaftar_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 rowsinset(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:
| SELECTnama_kolom1, nama_kolom2,... FROMnama_tabel WHEREkondisi | 
Contohnya untuk menampilkan data dosen yang beralamat di Padang, bisa menggunakan query berikut:
| 1 2 3 4 5 6 7 | mysql> SELECTNIP,nama_dosen FROMdaftar_dosen WHEREalamat='Padang';+------------+--------------+| NIP        | nama_dosen   |+------------+--------------+| 0480432066 | Tia Santrini |+------------+--------------+1 row inset(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:
| 1 2 3 4 5 6 7 8 9 10 | mysql> SELECT* FROMmata_kuliah WHEREsemester >= 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 rowsinset(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:
| 1 2 3 4 5 6 7 8 | mysql> SELECT* FROMmata_kuliah WHEREjumlah_SKS=2 ANDsemester < 5;+-------------+----------------+------------+----------+------------+| kode_matkul | nama_matkul    | jumlah_SKS | semester | NIP_dosen  |+-------------+----------------+------------+----------+------------+| FISDAS      | Fisika Dasar   |          2 |        1 | 0480432066 || SISOPR      | Sistem Operasi |          2 |        4 | 0160436012 |+-------------+----------------+------------+----------+------------+2 rowsinset(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:
| 1 2 3 4 5 6 7 8 9 | mysql> SELECT* FROMmata_kuliah WHEREjumlah_SKS > 2 ORDERBYjumlah_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 rowsinset(0.06 sec) | 
Jika kita ingin menampilkan seluruh dosen pada tabel daftar_dosen dan diurutan kolom alamat secara abjad, maka querynya adalah sebagai berikut:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | mysql> SELECT* FROMdaftar_dosen ORDERBYalamat 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 rowsinset(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:
| SELECTnama_kolom1 FROMnama_tabel WHEREkondisi 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:
| 1 2 3 4 5 6 7 8 9 | mysql> SELECT* FROMdaftar_dosen ORDERBYnama_dosen ASCLIMIT 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 rowsinset(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:
| 1 2 3 4 5 6 7 8 9 10 11 | mysql> SELECT* FROMmata_kuliah ORDERBYnama_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 rowsinset(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.