Perintah SELECT

Setelah anda sudah menguasai penggunaan MySQL Query Browser sebagai tempat ‘belajar’ bahasa SQL, di artikel ini saya ingin mendiskusikan dengan anda tentang perintah SELECT ini kemungkinan besar akan kita gunakan sebanyak sebesar 75% dari total kegiatan ber-SQL kita nanti. Dengan perintah SELECT inilah yang memungkinkan kita bisa melihat dan memanipulasi data-data table di MySQL server nantinya.
OK, langsung saja. Misal saja kita mempunyai 4 table yaitu:

  1. tbl_master_pelanggan, yang terdiri dari field-field: kode_pelanggan, nama_pelanggan, alamat, kota, kode_pos, tanggal_masuk.
  2. tbl_penjualan, yang terdiri dari field-field: kode_transaksi, tanggal_penjualan, kode_pelanggan, keterangan, modified_date, modified_by.
  3. tbl_detail_penjualan, yang terdiri dari field-field: id_trans, kode_penjualan, kode_barang, jumlah, harga_jual, discount.
  4. tbl_master_barang, yang terdiri dari field-field: kode_barang, nama_barang, satuan, min_stock, keterangan, lokasi_gambar.

Di sini kita akan membahas bagaimana menampilkan data dari table-table tersebut dengan menggunakan perintah SELECT. Untuk syntax perintah dasar SELECT sendiri sebagai berikut:

SELECT nama_kolom_1, nama_kolom_2 FROM nama_table;

Kasus 1, saya ingin menampilkan semua data master pelanggan yang terletak di table tbl_master_pelanggan, maka perintah yang saya ketik di Query Edit adalah sebagai berikut:

SELECT * FROM tbl_master_pelanggan;

Tapi jika saya hanya ingin menampilkan kolom nama_pelanggan dan alamat saja, ketik seperti ini:

SELECT nama_pelanggan, alamat FROM tbl_master_pelanggan;

Anda bisa melihat data dengan kriteria tertentu, untuk melakukan itu anda bisa menggunakan tambahan perintah WHERE. Misal anda ingin melihat nama barang (field: nama_barang) yang kata depannya cover, maka perintah yang harus anda ketik adalah sebagai berikut:

SELECT * FROM tbl_master_pelanggan WHERE nama_barang LIKE 'cover%'

Karena type data dari kolom nama_barang adalah VarChar maka anda harus menambahkan karakter petik tunggal (‘) di dalam keyword nya. Kalau type data-nya adalah integer dan type angka yang lainnya, petik tunggal tidak diperlukan. Untuk mencari semua karakter setelah nama barang cover, saya menggunakan tanda wildcard % supaya MySQL mencari semua data yang kata depannya cover. Dan jika anda menggunakan wil card character, operator yang anda gunakan adalah LIKE. Jika tidak anda bisa menggunakan operator sama dengan (=). Untuk manipulasi data angka anda bisa menggunakan operator <, >, =, BETWEEN, <=, >=.

Kasus 2, saya ingin menampilkan data 2 table yang saling berkaitan. Ini dalam ilmu-nya sering disebutan normalisasi. Dengan normalisasi anda tidak perlu menyimpan data nama-nama pelanggan di dalam transaksi penjualan, cukup kode pelanggan nya saja yang perlu anda simpan, hal ini juga untuk menghindari duplikasi. Untuk menghubungkan dua table atau lebih yang dihubungkan dengan satu kode transaksi yang sudah kita tentukan tadi kita akan menggunakan perintah INNER JOIN. Perlu diingat bahwa kode yang akan dipakai untuk normalisasi ini adalah kode transaksi yang tidak terdapat duplikasi data di dalamnya atau sering disebut primary key. Dalam contoh ini saya akan menghubungkan tabel penjualan dan detail item penjualan. Kalau di contoh table saya, menghubungkan table 2 dan 3. Perintah yang kita ketikkan adalah sebagai berikut:

SELECT tp.kode_transaksi, tp.tanggal_transaksi, tp.kode_pelanggan, tp, keterangan, dtp.kode_barang, dtp.jumlah, dtp.harga_jual, dtp.discount FROM tbl_penjualan AS tp INNER JOIN tbl_detail_penjualan AS dtp ON tp.kode_transaksi=dtp.kode_penjualan;

Dari contoh di atas bisa di lihat bahwa nama table bisa di alias-kan untuk memperpendek nama table, deklarasi alias bisa ditentukan di asal table setelah FROM. Untuk penggunaan INNER JOIN jika dilihat dari contoh tersebut juga sangatlah mudah, tinggal ketik table1 INNER JOIN table 2 ON kode_table1=kode_table2. Usahakan dalam syntax SQL yang menggunakan INNER JOIN sertakan juga alias-nya selain untuk memperpendek nama table, hal itu juga dapat menghindarkan kita dari ‘tabrakan’ nama field/kolom yang sama. Misalnya, table 1 mempunyai field kode_pelanggan dan table 2 juga mempunyai field kode_pelanggan dan jika anda tidak menyertakan aliasnya dengan format alias.nama_kolom, anda akan mendapat masalah di kemudian waktu.

Nah, sekarang saya akan menggabungkan 4 table yang saya perlihatkan diatas. Jika anda melihat dari 4 table tersebut makan korelasi-nya adalah tbl_penjualan dihubungkan dengan tbl_detail_penjualan, lalu 2 table tersebut dihubungkan dengan table tbl_master_pelanggan dan tbl_master_barang. Syntax yang akan saya tulis adalah sebagai berikut:

SELECT tp.kode_transaksi, tp.tanggal.transaksi, tp.kode_pelanggan, mp.nama_pelanggan, dtp.kode_barang, mb.nama_barang, dtp.jumlah, dtp.harga_jual, dtp.discount, (dtp.jumlah*dtp.harga_jual)-((dtp.jumlah*dtp.harga_jual)-discount) AS sub_total
FROM tbl_penjualan AS tp INNER JOIN tbl_detail_penjualan AS dtp ON tp.kode_transaksi=dtp.kode_penjualan
INNER JOIN tbl_master_pelanggan AS mp ON tp.kode_pelanggan=mp.kode_pelanggan
INNER JOIN tbl_master_barang AS mb ON dtp.kode_barang=mb.kode_barang;


Cukup mudah kan? Kita akan belajar lagi untuk perintah-perintah SQL yang lainnya.

22 comments

  1. Wah…asyiknya belajar bahasa pemrograman, masalahnya saya masih awam dalam bidang ini. Kebetulan saat ini saya sedang mempelajari VB6 dan SQL sebagai databasenya, saya juga sedang membuat proyek kecil2an utk mempermudah saya dalam menyelesaikan pekerjaan saya karena kebetulan juga saya adalah seorang Admin. Saya ingin bertanya kalau boleh Pa’, seperti apakah syntax di vb jika saya ingin menampilkan data yang ada pada database agar dapat ditampilkan seluruhnya dalam ComboBox? Btw, saya memakai syntax sbb :

    Private Sub Form_Load()
    data_masterBB.RecordSource = “SELECT * FROM tb_SatuanBB”
    data_masterBB.Refresh

    With data_masterBB.Recordset
    cmbSatuanBB.Text = !Satuan
    End With
    End Sub

    Cuma masalahnya adalah data yang ditampilkan pada ComboBox hanya data pada baris pertamanya saja,sedangkan data pada baris-baris selanjutnya tidak ditampilkan,saya sadar kalau saya salah dalam menginput syntaxnya, karenanya saya butuh penjelasannya tentang ini Pa’.
    Terima kasih

  2. Saya sangat mengharapkan bantuan anda tentang programing VB Acces.

    Private Sub Jnilai_Change()
    Dim MSQL As String
    If CbNisn.Value “” Then
    MSQL = “SELECT*FROM NILAI_SISWA” & _
    ” WHERE NISN= ‘” & CbNisn.Value & “‘” & _
    ” ORDER BY NISN”
    Set rs = CNN.Execute(MSQL)
    If Not rs.EOF Then
    NILAI.Value = rs.Fields(“NILAI”)
    End If
    End If
    End Sub[/blockquote]

    Kode tersebut saya buat untuk menampilkan Nilai dari tabel NILAI_SISWA.

    Pada tabel nilai siswa tersebut, terdapat fields NISN, JN (Jenis Nilai), dan Nilai. Data setiap kolom bisa ganda (duplicate). Tabel tersebut tidak memiliki kode unik tersendiri, sehingga saya tidak memiliki kode utama untuk membaca seluruh baris data. Dan saya bermaksud menampilkan Nilai dimana NISN & JN sebagai order / kunci utama. Kode yang saya buat diatas tadi, hanya menampilkan nilai pertama dari fieds Nilai, yaitu NU1, tapi tidak dapat menampilkan nilai lainya. Pertanyaan saya, bagaimana cara melakukan hal tersebut?

    Saya coba jelaskan dengan cara lain :
    Saya membuat sebuah form, dimana saya memasang tiga buah textbox. Text1 berisi NISN. Text2 berisi JN (Jenis Nilai). Sedangkan Text3 berisi Nilai. Data yang akan ditampillkan pada semua textbox tersebut berasal dari tabel Nilai_Siswa. Saya menginginkan, ketika setelah saya mengisi Text1 & Text2, maka data pada kolom Nilai dapat ditampilkan secara otomatis. Bagaimanakah caranya?

    Hal tersebut dapat saya atasi bila saya membuat kode unik pada tabel, sehingga cukup dengan menulis kode unik tersebut pada kolom kode, maka semua nilai pada kolom berikutnya dapat ditampilkan. Tapi, saya ingin tahu, dapatkah nilai ditampilkan tanpa kode unik? Atau dapatkah satu milai ditampilkan dengan syarat dua kondisi, yaitu terpenuhinya nilai NISN dan JN?

    Terimas kasih sebelumnya.

  3. makasih banyak atas ilmunya….
    blog anda sangat membantu….
    sekali lagi terima kasih…

  4. mas.. kalo where digunakan untuk statmen tanggal atau waktu syntaxnya gmana y?? teerimakasih

  5. @agung: kalo di MySQL seperti ini karena MySQL mempunyai format tanggal YYYY-MM-DD -> SELECT * FROM tbl_transaksi WHERE tgl_transaksi BETWEEN ‘2009-01-01’ AND ‘2010-01-01’

  6. kalo cara penggunaan
    mysql> SELECT IF(1 ‘yes’

    untuk kasus ini
    “SELECT AttendanceDateTime,F1 FROM t_HrmAttendanceLog ” _
    & “WHERE idBusinessPartner='” & FString(idBP) & “‘ AND idCompany='” & db.CompanyID & “‘ and ” _
    & “DATE(AttendanceDateTime)='” & FDateOnly(attDate) & “‘ AND isDelete=’N’ ” _
    & “ORDER BY AttendanceDateTime ASC”)
    gimana ya?

  7. @Wendy Afreza: apakah maksudnya seperti ini SELECT IF(nilai_kolom=1, ‘Yes’, ‘No’) AS ketr_hadir FROM t_Hrm…. ?

  8. saya br belajar Mysql dari dasar,bisa enggak di kirim tutorialnya mas dari 0 sampai level sedang,saya mau banget belajar Mysql.
    OS saya linux XAMPP sdh sy install
    yg br sy pelajari :
    create
    drop
    insert
    update
    alter
    select, nah di SELECT ini banyak yg harus sy pelajari mohon tutorialnya

  9. Select lb.no, lb.nama, lb.department, lb.tanggal , lb.jenis_lembur, lb.jam_masuk ,lb.jam_pulang ,lb.lembur1, lb.lembur2, pc.PersonalCalendarID, pc.PersonalCalendarDate, pc.Lembur , pc.Lbr1, pc.Lbr2 From T_Lembur AS lb INNER JOIN PersonalCalendar AS pc ON lb.tanggal=pc.PersonalCalendarDate; ”

    Tapi data yang tampilnya dalam datagrid jadi dober-dobel padahal dalam databasenya cuma ada 2 data saja…mohon masukannya

  10. gimana bila combo box di rubah maka secara otomatis text box ikut berubah sesuai data pada combo box, mohon penjelasannya trims

  11. pada ms access 2007 sudah saya tuliskan seperti ini tapi nggak mau muncul juga pada text boxnya

    Private Sub Kodecombo_AfterUpdate()
    ‘ Manampilkan nama kota
    Me.nama_kota.Value = Me.Kodecombo.Column(1)

    End Sub

  12. Seperti ini juga nggak mau muncul pussing mohon pencerahnnya mas

    Private Sub Kodecombo_AfterUpdate()
    ‘ Manampilkan nama kota
    Me.[nama_kota] = Kodecombo.Column(1)

    End Sub

Leave a Reply

Your email address will not be published. Required fields are marked *

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