21 April 2013,
 60

Pada tutorial kali ini kita akan membahas cara menampilkan data dari tabel MySQL dengan query SELECT. Perintah SELECT akan dibahas secara 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:

NIPNama DosenNo HPAlamat
0160436012Sabrina Sari0812349900Pekanbaru
0260432002Maya Ari Putri0812345234Palembang
0275430005Susi Indriani0812656532Bogor
0480432066Tia Santrini0812451177Padang
0576431001M. Siddiq0812979005Jakarta
0770435006Rubin Hadi0812567678Papua
0869437003Mustalifah0812338877Aceh
1080432007Arif Budiman0812456345Makasar

Data input untuk tabel mata_kuliah:

Kode Mata KuliahNama MatakuliahJumlah SKSSemesterNip Dosen
MATDASMatematika Dasar410160436012
FISDASFisika Dasar210480432066
TEKKOMTeknik Kompilasi260480432066
JARKOMJaringan Komputer330770435006
DTBASEDatabase440275430005
SISOPRSistem Operasi240160436012
MIKROPMikro Prosesor250480432066

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, tetapi 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 meninput 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

Biasanya pada saat ingin menampilkan data, kita butuh setidaknya 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:

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 anda lihat, MySQL menyediakan banyak sekali perintah opsional yang dapat dipilih untuk membantu kita menampilkan data dari database. Sebagian besar kita tidak akan membutuhkan kebanyakan opsi tersebut, namun setidaknya MySQL menyediakan banyak pilihan untuk menampilkan hasil query SELECT. Kita akan membahas 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 kita ingin menampilkan hanya sebahagian 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 kita tampilkan. Misalkan 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 hal ini dapat dilakukan dengan menambahkan perintah WHERE pada query SELECT.

Kondisi WHERE pada perintah SELECT digunakan untuk menyeleksi data yang diinginkan, 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, dapat 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 juga bisa menggunakan kondisi operasi slain eperti lebih besar (>), lebih kecil (<), tidak sama (<>), dan lain-lain. List lengkap dari penggunaan kondisi yang dapat digunakan pada SELECT…WHERE adalah:

Operasi Aritmatik

OperatorPenjelasan
+Penambahan
-Pengurangan
*Pengalian
/Pembagian
%Sisa hasil bagi (modulus)

Operasi Logika

OperatorPenjelasan
NOT atau !Logika bukan
AND atau &&Logika dan
OR atau ||Logika atau
XORLogika bukan atau (XOR)

Operasi Perbandingan

OperatorPenjelasan
=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
BETWEENBerada pada batas tertentu
INBerada di dalam
IS NULLPengecekan apakah berisi NULL
IS NOT NULLPengecekan apakah bukan berisi NULL
LIKEPencarian menggunakan wildcard
REGEXP atau RLIKEPencarian menggunakan Regular Expression

Contohnya jika kita ingin menampilkan seluruh mata kuliah yang diajarkan di semester 4 keatas, 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, contohnya kita 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 ututkan. 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 menggunakan ASC.

Contohnya jika kita menginginkan tampilan mata kuliah dengan jumlah SKS lebih dari 2 secara berurutan dari yang paling kecil, maka querynya:

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 memberikan 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. Salah satunya adalah menampilkan hasil pencarian di dalam MySQL dengan query LIKE. Kita akan membahas ini dalam tutorial selanjutnya.

60 responses on “Tutorial Belajar MySQL Part 21: Cara Menampilkan Data dari Tabel MySQL (SELECT)

  1. Agus says:

    Yang sintaks like dong gan kasih contohnya terimakasih.

  2. arief says:

    dari awal bab 1 sampe bab 20 saya mengerti dengan mudah… anda hebat dalam memberikan teori dan keterngannya… seandainy saya bisa belajar lebih, saya pengen bisa kursus dgn anda.. tp dgn segini setidakny sudah menjadi dasar pengenalan saya terhadap program database MySQL.. terima kasih banyak..

    • Duniailkom says:

      Terimakasih komentarnya mas Arief, jadi tambah semangat ni melanjutkan tutorial MySQL. Ilmu saya belum seberapa untuk buat kursus mas, hehe.. Tp saya senang tutorial ini ternyata mudah diikuti, mudah-mudahan bermanfaat juga bagi rekan-rekan yang lain :)

  3. arief says:

    Super sekali Ơm… (Y) bahasanya mudah dicerna oleh saya yg newbie banget ttg dbms khususnya mysql. Saya harap website ini kedepannya lebih maju lg. Dan website ini jg sdh saya bookmark spy gk lupa.

  4. ainun16 says:

    maaf sbelumnya.. saya pengen buat query yg dikirim via sms, isinya berupa nilai siswa..
    misal keyword sms= nilai#nis => reply sms= nim 123 nilai mtk:90,bhs=75,ipa=87 (semua mapel keluar)
    logika select nya gimana.. sama sebaiknya tabel nilai tiap mapel sendiri2 ato 1tabel nilai untuk beberapa mapel..
    sya udah lama pusing karena ini.. maklum sya belajarnya loncat2 :)
    klo reply nya hanya nilai dari 1 mapel udah bisa… kalo yg reply nya semua nilai dari semua mapel ini yg saya masih bingung.. thx sebelumnya.. maaf klo banyak nanya..

  5. bayu says:

    tutorialnya lengkap banget..niat banget buat ngajarinnya…n gampang dipahamin..kebetulan lagi ngerjain tugas yang pake mysql..thanks banget infonya…

  6. yue says:

    pagi mas
    mas saya mau tanya kalau perintah Mysqlnya mengambil 3 kriteria dari satu tabel bisa ndak mas????
    saya coba pakai script ini kok ndak bisa…..
    “SELECT * FROM soal WHERE id_mapel=’$id_mapel’, id_kelas=’$id_kelas’ AND level=1 ORDER BY RAND() LIMIT 0,10″
    bingunggg
    mohon penjelasannya
    terima kasihhh,,,,

    • Andre says:

      Pagi juga mas yue, jawabannya: bisa mas, malah bisa lebih dari 3 kriteria jika tabel kita memang membutuhkannya. Tinggal mengkombinasikan logika AND dan OR.

      Dari query yang saya lihat,sepertinya kurang operator perbandingannya 1 lagi mas. Karena kalau untuk 3 kriteria, harusnya ada query ‘… where a=1 and b=2 and c=3′,

      kalau dari contohnya, boleh dicoba:
      “SELECT * FROM soal WHERE id_mapel=’$id_mapel’ AND id_kelas=’$id_kelas’ AND level=1 ORDER BY RAND() LIMIT 0,10″

      Mudah2an bisa membantu…

  7. taufik says:

    Pagi bang, saya punya masalah menampikan 2 tabel yg tidak memiliki hubungan bisa di bilang tabel satu dan dua.
    tabel satu memiliki field id nama, umur dan tanggal lahir sedangkan tabel dua memiliki field nomor,a dan b.

    Record dari tabel satu dengan field id = 1,2,3 dan field nama= a,b,c dan filed umur=27,23,25 tanggal lahir = 1991-01-01,1992-01-01,1993-01-01.

    Record dari tabel dua dengan field nomor=7,8,9 dan field a=adhi,taufik,hidayat dan field b= c,d,e.
    disini saya akan menampilkan field id,nama dari tabel satu bersama field b tabel dua dengan perintah select id,nama,b from satu,dua, namun hasilnya berulang.

    Jadi menurut abang bisa tidak hasilnya tidak berulang – ulang yaitu dengan hasil field id =1,2,3 dan field nama=a,b,c dan field b=c,d,f dari penggabungan tabel tersebut??
    bagaima bentuk perintahnya bang??
    mohon bantuannya!!

    • Andre says:

      Kalau menggunakan perintah SELECT tersebut, hasilnya akan sama dengan perintah JOIN. Syarat untuk perintah SELECT..JOIN adalah harus ada salah satu kolom yang menjadi penghubung kedua tabel. Namun jika tidak ada kolom yang menjadi penghubung, hasilnya akan berulang.

      Terlepas dari desain database dan tabel yang mungkin sebaiknya dirubah agar ada hubungan, cara alternatif menurut saya bisa dengan membuat tabel laporan sementara untuk menampung hasil query. Contoh querynya: CREATE TABLE report SELECT * from a;

      Perintah query untuk membuat tabel dari hasil query ini rencananya juga akan saya bahas pada materi MySQL selanjutnya, semoga berkenan menunggu…

  8. Mus K. Tunaro says:

    Ribuan terima kasih telah berbagi. Semoga duniailkom semakin maju, dan berkahnya mengalir terus. Aamiin !!! Izinkan saya sedot utk belajar!

  9. miqdar says:

    Permisi mau tanya tentang limit kalo kaya gini artinya apa ya?
    LIMIT 30 , 300″
    trims

    • Andre says:

      Penjelasan tentang perintah limit sudah saya jelaskan dalam tutorial ini, LIMIT 30,300 berarti membatasi hasil tampilan data dari tabel dimulai dari hasil baris ke 30, dan ambil sebanyak 300 baris data setelahnya.

  10. james says:

    Mas, saya mau tanya ni, bagaimana caranya menampilkan data dari 3 tabel? kemudian bagaimana kalau kita mau memasukan field kuncinya data-data dari field tersebut bisa tampil?

  11. ucok says:

    tanya mas.. tiap tabel itu PK nya harus berbentuk id(int) ya? kalau berbentuk varchar gimana bisa gak?
    contoh ada 2 tabel (1 tabel PK nya integer) & (1 tabel lainnya varchar) di relasi bisa gk?
    trus kalau mau menampilkan data di tabel (PK varchar) itu gimana ya (query sql nya)?

    • Andre says:

      Primary Key (PK) di dalam tabel tidak harus bertipe data int kok, tapi bisa juga berupa tipe data lainnya seperti varchar, atau bahkan gabungan dari 2 kolom.

      Untuk menggabungkan tabel (di relasi-kan), keduanya harus memiliki tipe data yang sama, atau dalam teori database, Primary Key dan Foreign Key harus bertipe sama agar bisa digabung.

      Untuk menampilkan data dari tabel dengan primary key tidak ada perbedaan dengan tabel yang tanpa primary key, bisa menggunakan query SELECT yang kita bahas pada halaman ini.

      Semoga bisa membantu :)

  12. ucok says:

    tanya lagi mas. saya punya 2 tabel. sebut saja tabel A dan tabel B. ke2 tabel saling berhubungan.

    Saya ingin menampilkan data di tabel B, nah bagaimana menampilkan data di tabel B, sekaligus menampilkan 1 data dari tabel A? kalau tabel B langsung ditampilkan, maka akan ada data yg berbentuk angka karena itu FK dari tabel A. saya ingin FK nya itu berbentuk data dari tabel A bukan angka. thanksss

  13. marjum badarudin says:

    master mau tanya
    querynya gmn? kalau pengen menampilakan siswa yang belum dapat kelas?? aq pny tabel siswa, kelas dan ruang.. kita menampilkan data dari siswa yang belum pernah diinputkan di ruang. itu carana gimana terimakasih

    • Andre says:

      Untuk kasus ini, bisa menggunakan query NOT IN.

      Misalkan dari tabel siswa dan ruang ada kolom ‘nama’ yang menghubungkan kedua tabel, sehingga query untuk menampilkan seluruh nama yang tidak ada di tabel ruang adalah : SELECT * FROM siswa WHERE nama NOT IN (SELECT * FROM RUANG).

      Saya memang belum sempat membuat tutorialnya, mudah2an nanti kesampaian untuk membuat tutorial yang lebih detail. Semoga bisa membantu :)

  14. Alhamdulillah sob… sungguh sangat membantu… tutorialnya sungguh sangat mudah dicerna… ini yang ane cari selama ini… sukses selalu buat admin blog ini… aminnn ya rabb…

    • Andre says:

      Amiin… terima kasih atas doa dan dukungannya mas Firman, saya juga senang bisa membantu rekan-rekan yang lain, mudah-mudahan apa yang saya bagi bisa bermanfaat..

  15. Anonymous says:

    terimakasih sangat membantu sekali :DD

  16. arya says:

    bagus sekali mas web tutorialnya hehe
    sistematis dan langsung nyantol
    saya jadi cepet keinget lagi, g usah buka buku yg gede
    maturnuwun …..

  17. Edwin says:

    Akhirnya… Ada juga Tutorial yang Lengkap..setelah berlama-lama stres di php database…ketemu juga solusinya disini…thx ya tutorialnya,,..

  18. min,saya mau nannya
    kalo sql untuk menampilkan data yang paling awal gimana ya?
    soalnya saya lagi bikin program aplikasi metode fifo
    mohon bantuannya ya..

    • Andre says:

      MySQL menyimpan data tidak memperhitungkan kapan data tersebut di input. Namun jika Winda ingin menampilkan data dengan cara ‘First in First out’, bisa diakali dengan menambahkan 1 kolom untuk ‘tanggal input’.

      Kolom tanggal_input ini bisa di rancang secara otomatis (misalnya dengan PHP) sehingga pada saat ada penambahan data baru, kolom tanggal_input bisa langsung terisi dengan waktu saat itu. Untuk menampilkan data, kita tinggal mengurutkannya berdasarkan tanggal_input.

      • oiya saya ngerti,
        tapi yg bikin saya bingung tuh saya bikin sistem pembelian dan penjualan obat metode fifo,
        misal saya beli obat A pada tgl 01/08/2014 = 10 buah
        terus saya beli obat A lagi pada tgl 02/08/2014 = 3 buah

        pada tgl 03/08/2014 ada penjualan sbanyak 12 buah, sehingga datanya diambil pada tgl 01/08/2014 sebanyak 10 buah dan tgl 02/08/2014 sebanyak 2 buah.
        kira-kira formulanya gimana yah?

        • Andre says:

          Kalau menurut saya, prosesnya akan banyak dilakukan melalui bahasa pemograman induknya. Misalkan winda menggunakan PHP MySQL, maka prosesnya akan banyak dilakukan di sisi PHP.

          Misalkan tabel obat berisi kolom nama_obat, tgl_input, dan jumlah. Maka jika terjadi penjualan obat A, kita query terlebih dahulu seluruh isi tabel obat dengan nama_obat=A dan diurutkan berdasarkan tgl_input.

          Kemudian dengan PHP kita kurangi jumlah penjualan dengan jumlah kolom pertama, dan jika masih belum cukup, masuk ke kolom berikutnya, dst.

          Sebagai langkah terakhir lakukan update jumlah sisa obat A kedalam tabel.

  19. Desta says:

    mas klo select data dari 3 tabel caranya gmn ya??

  20. Jamal says:

    Makasih info nya. sangat membantu :cheers

  21. irfan says:

    Thank !

  22. Ekho saputra lubis says:

    Mau nanyak mas, kalau menambahkan field lebih dari 1 gimana? sama mengisi kolom pada field ny? Thanks

  23. alung says:

    Mas tanya lagi dong . . . .
    Pada field alamat di atas isinya :

    Pekanbaru
    Palembang
    Bogor
    Padang
    Jakarta
    Papua
    Aceh
    Makasar

    Saya mau munculkan alamat yg 2 huruf di depannya Pa,
    (Palembang-Padang-Papua)
    Saya uda coba dengan :
    select alamat from nm_tabel WHERE substr(alamat,0,2)=’Pa’
    tapi gak bisa, salahnya di mana ya Mas ?

  24. ery says:

    makasih kk atas postinganya. mbantu banget….

  25. Arie says:

    mau tanya nih mas..
    kalau misal id buku nya ada 5 digit.
    “SELECT * FROM buku WHERE idbuku=’…’”
    kita memanggil id buku dengan input 1 digit saja paling kiri, trus nilai tengah, dan nilai kanan aja gimana ya mas tanpa harus 5 digit sesuai dengan id bukunya tapi hanya dengan nilai kiri,tengah,dan kanan saja..
    mohon pencerahannya mas :D

  26. Arie says:

    oke mas,, makasih udah bisa..
    kalo kita input suatu nilai di textbox kemudian nilai dari inputan itu kita ambil dan kita pisah (misal : 12345)kita pisah untuk mendapatkatn nilai 1, nilai 12, dan nilai 13 dan nilai itu akan kita
    gunakan untuk memanggil tabel itu gmn ya mas ..
    cth :

    <?php
    //$kode 5 digit
    $kode = $_GET['kode'];

    if ($kode == " disini pecahan kode 1 digit dari kiri hasil get kode")
    {
    //disini mysql query nya dari tabel pertama
    $tipe=$hasil['…'];
    $model=$hasil['…'];
    }
    else
    if ($kode == " disini pecahan kode 2 digit dari kiri hasil get kode")
    {
    //disini mysql query nya dari tabel kedua
    $tipe=$hasil['…'];
    $model=$hasil['…'];
    }

    else
    if ($kode == " disini pecahan kode 3 digit dari kiri hasil get kode")
    {
    //disini mysql query nya dari tabel ketiga
    $tipe=$hasil['…'];
    $model=$hasil['…'];
    }
    else
    {

    $tipe=$hasil['…'];
    $model=$hasil['…'];
    }

    header("content-type: text/xml");
    echo "

    $tipe
    $model

    “;
    ?>

    udah begadang 5 hari gk nemu2 x_x

    • Andre says:

      Oh, kode PHP y gan? berarti variabel $kode sudah berisi 5 angka itu y? Untuk mengambil sebagian karakter dari sebuah string di dalam PHP, kita bisa menggunakan fungsi substr(). Fungsi ini membutuhkan 3 argumen, yakni: variabel yang menampung string, index posisi karakter yang akan diambil, dan berapa jumlah karakter yang ingin diambil (dihitung dari nilai index posisi pada argumen kedua).

      Untuk mengambil 1 digit pertama, perintahnya: substr($kode, 0,1);

      Untuk mengambil 2 digit berikutnya, perintahnya: substr($kode, 1,2);

      Untuk mengambil 3 digit terakhir, perintahnya: substr($kode, 2,3);

      Untuk lebih jelasnya, bisa dibaca di manual PHP di : http://php.net/manual/en/function.substr.php.

      Semoga bisa membantu :)

  27. Elhajary says:

    pagi bang, kalo mau shortir tanggal gimana yaaa
    misalnya : 2001-02-9, 2001-09-08, 2001-09-12,2002-01-04,2001,2002-08-07 jadi misal yg pengen ditampilin cuma tahun 2002 doang gitu gimana caranya bang
    terima kasih

    • Andre says:

      Pagi Elhajary,..

      Sebagai solusinya, kita bisa menggunakan query SELECT … WHERE… dengan menambahkan kondisi BETWEEN. Sebagai contoh, jika kita memiliki kolom tgl_lahir dalam tabel mahasiswa, maka contoh querynya:

      SELECT * FROM mahasiswa WHERE tgl_lahir BETWEEN ‘2002-01-01′ AND ‘2002-12-31′;

      Query diatas akan menampilkan seluruh baris dengan kolom tgl_lahir bernilai antara 01-01-2002 sampai dengan 31-12-2002, yang berarti cuma tahun 2002 saja.

      Mudah2an bisa membantu :)

  28. el says:

    terima kasih mas blog nya sangat membantu :) oh ya mau tanya juga skalian hehe kalo mau menambahkan kolom dr 3 gabungan tabel gimana ya?
    misalnya ada tabel barang, pembeli, dan transaksi.. trus ke-3 tabel itu digabungin, tabel yg suda digabung itu mau ditambah lagi dengan jumlah harga.. itu gimana caranya ya??
    terima kasih sebelumnya ^^

    • Andre says:

      Kalau kolom yang mau ditambah itu cuma sekedar untuk ditampilkan, dan berasal dari kolom yang sudah ada (menggunakan rumus), maka kita tinggal menambahkannya di dalam query, seperti contoh berikut:

      SELECT nama_matkul, jumlah_SKS, nama_dosen
      FROM mata_kuliah INNER JOIN daftar_dosen USING (NIP_dosen);

      Query diatas digunakan untuk menampilkan hasil dari dua buah tabel: mata_kuliah dan daftar_dosen menggunakan INNER JOIN (akan dibahas pada Tutorial MySQL Menggabungkan Tabel dengan INNER JOIN), saya akan menambahkan 1 kolom lagi yang akan menampilkan harga_sks, dimana kolom ini dihasilkan dari perkalian jumlah_SKS * 20000. Berikut querynya:

      SELECT nama_matkul, jumlah_SKS, nama_dosen,jumlah_SKS*20000
      FROM mata_kuliah INNER JOIN daftar_dosen USING (NIP_dosen);

      • el says:

        terima kasih mas udah bisa :D oh ya mas mau nanya lagi nama tabel yg didapat dr hasil perkalian itu bisa dirubah atau tidak?

  29. Arie says:

    sore om..
    ma tanya nih..
    saya mau buat laporan peminjaman buku..
    ada tabel “buku”, “pustaka” dan tabel “detailpustaka”
    isi tabel pustaka : idpustaka, idmember, tglpinjam
    isi tabel detailpustaka : idpustaka, idbuku, tglkembali, denda, statusbuku
    isi tabel buku : idbuku, judul, pengarang, penerbit, gambar.

    bagaimana cara buat laporan dengan tidak ada data yang sama.. sedangkan 1 member bisa meminjam sampai 3 buku..
    misal spt ini :

    |ID Pustaka | ID Member | Jumlah buku dipinjam |ID buku| Judul buku | Denda|
    123 22 2 732 judul1 0
    733 judul2 0

    mohon bantuannya om :D

Leave a Reply

Your email address will not be published.

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>