Pada kesempatan kali ini kita akan membahas query untuk menampilkan data dari beberapa tabel MySQL. Pada tutorial ini sobat juga akan belajar bagaimana menggunakan JOIN
pada MySQL.
Ketika menampilkan data yang disimpan dari database, seringnya kita akan mengambil data dari beberapa tabel untuk diolah sehingga menjadi satu keluaran, misal pada laporan penjualan.
Pada model database relasional RDBMS termasuk MySQL, bentuk pengambilan data ini dapat dilakukan dengan mudah karena masing masing tabel saling berelasi/berhubungan, bentuk hubungan ini bermacam macam, bisa one-to-one relationship, one-to-many, dan many-to-many
Persiapan
Sebelum melangkah lebih jauh, kita perlu menyiapkan tabel yang akan kita gunakan dalam tutorial ini.
Pada contoh kali ini, saya menggunakan empat tabel, yaitu: tabel pelanggan
, produk
, transaksi
, dan transaksi_detail
. struktur dan hubungan keempat tabel tersebut tampak seperti pada gambar berikut:
Dari keempat tabel tersebut, kita hanya menggunakan beberapa diantaranya. Adapun contoh datanya adalah sebagai berikut:
Tabel barang
:
+-----------+-------------+-------------+---------+------+
| id_barang | id_kategori | nama_barang | harga | stok |
+-----------+-------------+-------------+---------+------+
| 1 | 1 | RAM | 230000 | 4 |
| 2 | 1 | Mainboard | 1250000 | 7 |
| 3 | 1 | Mouse | 80000 | 6 |
| 4 | 3 | Mousepad | 35000 | 3 |
| 5 | 3 | Keyboard | 80000 | 5 |
+-----------+-------------+-------------+---------+------+
Tabel pelanggan:
+--------------+---------+-------------------+ | id_pelanggan | nama | email | +--------------+---------+-------------------+ | 1 | Alfa | alfa@yahoo.com | | 2 | Beta | beta@yahoo.com | | 3 | Charlie | charlie@gmail.com | | 4 | Delta | delta@gmail.com | +--------------+---------+-------------------+
Tabel penjualan:
+--------------+--------------+---------------+-----------------+ | id_transaksi | id_pelanggan | tgl_transaksi | total_transaksi | +--------------+--------------+---------------+-----------------+ | 1 | 1 | 2017-02-22 | 230000 | | 2 | 3 | 2017-02-22 | 195000 | | 3 | 2 | 2017-01-01 | 1710000 | | 4 | 1 | 2017-02-04 | 310000 | | 5 | NULL | 2017-02-10 | 80000 | +--------------+--------------+---------------+-----------------+
I. JOIN Pada MySQL
Untuk menggabungkan tabel pada MySQL, kita gunakan klausa JOIN.
Pada MySQL terdapat dua macam bentuk join, yaitu INNER JOIN
, LEFT OUTER JOIN
, dan RIGHT OUTER JOIN
. Format penulisannya adalah sebagai berikut:
SELECT nama_kolom
FROM tabel
INNER JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN tabel ON kondisi
Selain menggunakan klausa ON
untuk mendefinisikan kondisi, kita dapat menggunakan klausa USING
, format penulisannya adalah:
SELECT nama_kolom
FROM tabel
INNER JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN tabel USING(nama_kolom)
Klausa USING
ini akan menggunakan nama kolom yang ada di dalam tanda kurung untuk menghubungkan kedua tabel, kolom ini harus ada pada tabel yang ingin dihubungkan dan harus memiliki nama yang sama.
Biasanya kolom yang berhubungan didefinisikan sebagai Primary Key
dan Foreign Key
, namun tidak masalah jika keduanya bukan primary key maupun foreign key.
II. INNER atau CROSS JOIN
Cara pertama untuk menggabungkan tabel adalah menggunakan inner join. Dengan inner join, tabel akan digabungkan berdasarkan data yang sama, yang ada pada kedua tabel, jika di gambarkan dalam bentuk diagram venn, bentuk inner join seperti tampak pada gambar berikut:
Pada MySQL, penulisan INNER JOIN dapat dilakukan dengan dua cara yaitu (1) menggunakan klausa INNER JOIN
(2) menggunakan klausa CROSS JOIN
(3) cukup menggunakan klausa JOIN
saja. Sobat bebas menggunakan keduanya asal konsisten, saya pribadi lebih prefer menggunakan JOIN
saja, karena lebih simpel.
Sebagai contoh kita akan menampilkan data pelanggan yang melakukan pesanan, query yang kita jalankan:
SELECT pl.id_pelanggan, nama, tgl_transaksi, total_transaksi
FROM pelanggan pl
JOIN penjualan pn ON pl.id_pelanggan = pn.id_pelanggan
Jika menggunakan klausa USING
, maka query akan berbentuk seperti berikut:
SELECT pl.id_pelanggan, nama, tgl_transaksi, total_transaksi
FROM pelanggan pl
JOIN penjualan pn USING(id_pelanggan)
Hasil:
+--------------+---------+---------------+-----------------+ | id_pelanggan | nama | tgl_transaksi | total_transaksi | +--------------+---------+---------------+-----------------+ | 1 | Alfa | 2017-02-22 | 230000 | | 3 | Charlie | 2017-02-22 | 195000 | | 2 | Beta | 2017-01-01 | 1710000 | | 1 | Alfa | 2017-02-04 | 310000 | +--------------+---------+---------------+-----------------+
Pada contoh diatas, terlihat bahwa
- Pelanggan dengan nama Delta tidak muncul, hal ini disebabkan pelanggan tersebut tidak pernah melakukan transaksi.
- Transaksi dengan id_trx 5 tidak muncul, karena transaksi tersebut memiliki nilai id_transaksi
NULL
, sehingga tidak terhubung ke pelanggan manapun.
II. OUTER JOIN
Cara kedua untuk menggabungkan tabel pada MySQL adalah menggunakan outer join. Pada outer join, data pada salah satu tabel akan ditampilkan semua, sedangkan data pada tabel yang lain hanya akan ditampilkan jika data tersebut ada pada tabel pertama.
Pada MySQL, OUTER JOIN dibagi menjadi dua, yaitu LEFT OUTER JOIN
dan RIGHT OUTER JOIN
.
1 LEFT OUTER JOIN
Pada LEFT OUTER JOIN
, semua data pada tabel sebelah kiri akan ditampilkan, sedangkan data pada tabel disebelah kanan hanya akan ditampilkan jika data terkait pada tabel tersebut muncul di tabel sebelah kiri.
Jika di gambarkan dalam bentuk diagram venn, bentuk LEFT OUTER JOIN
tampak pada gambar berikut:
LEFT OUTER JOIN
dapat ditulis menggunakan dua cara, yaitu (1) dengan klausa LEFT OUTER JOIN
, (2) cukup dengan klausa LEFT JOIN
saja, sobat bebas memilih salah satu yang penting konsisten, saya sendiri prefer menggunakan bentuk kedua karena lebih simpel.
Contoh kita tampilkan semua data pelanggan beserta data transaksinya, jalankan query berikut:
SELECT pl.id_pelanggan, nama, tgl_transaksi, total_transaksi
FROM pelanggan pl
LEFT JOIN penjualan USING(id_pelanggan)
Hasil:
+--------------+---------+---------------+-----------------+ | id_pelanggan | nama | tgl_transaksi | total_transaksi | +--------------+---------+---------------+-----------------+ | 1 | Alfa | 2017-02-22 | 230000 | | 3 | Charlie | 2017-02-22 | 195000 | | 2 | Beta | 2017-01-01 | 1710000 | | 1 | Alfa | 2017-02-04 | 310000 | | 4 | Delta | NULL | NULL | +--------------+---------+---------------+-----------------+
Pada contoh diatas, terlihat bahwa dengan LEFT JOIN
, data pada tabel sebelah kiri, yaitu tabel pelanggan
akan ditampilkan semua, sedangkan data pada tabel sebelah kanan hanya akan ditampilkan jika nilai kolom id_pelanggan nya muncul pada tabel pertama, yaitu id_pelanggan 1, 2, dan 3
2 RIGHT OUTER JOIN
Kebalikan dari LEFT OUTER JOIN
, pada RIGHT OUTER JOIN
, data pada tabel sebelah kanan akan ditampilkan semua, sedangkan data pada sebelah kiri hanya ditampilkan jika data terkait pada tabel tersebut muncul pada tabel sebelah kanan.
Jika digambarkan dalam bentuk diagram venn, maka, bentuk right outer join akan tampak seperti gambar berikut:
Sama seperti LEFT OUTER JOIN
, RIGHT OUTER JOIN
juga dapat ditulis menggunakan dua cara, yaitu ditulis secara utuh atau cukup RIGHT JOIN
saja. Saya sendiri lebih prefer menggunakan RIGHT JOIN
saja.
Contoh kita tampilkan semua data transaksi beserta data pelanggannya, jalankan query berikut:
SELECT pl.id_pelanggan, nama, tgl_transaksi, total_transaksi
FROM pelanggan pl
RIGHT JOIN penjualan USING(id_pelanggan)
Hasil:
+--------------+---------+--------------+---------------+-----------------+ | id_pelanggan | nama | id_transaksi | tgl_transaksi | total_transaksi | +--------------+---------+--------------+---------------+-----------------+ | 1 | Alfa | 1 | 2017-02-22 | 230000 | | 1 | Alfa | 4 | 2017-02-04 | 310000 | | 2 | Beta | 3 | 2017-01-01 | 1710000 | | 3 | Charlie | 2 | 2017-02-22 | 195000 | | NULL | NULL | 5 | 2017-02-10 | 80000 | +--------------+---------+--------------+---------------+-----------------+
Pada contoh diatas, terlihat bahwa semua data pada tabel disebelah kanan, yaitu tabel penjualan
akan ditampilkan semua, sedangkan pada tabel sebelah kiri hanya ditampilkan yang data id_pelanggan
nya muncul pada tabel penjualan.
Perlukah RIGHT JOIN?
Jika kita teliti lebih lanjut, sebenarnya right join hanya memindah posisi tabel, dari kiri ke kanan, contoh query pada right join dapat kita ubah dengan menjadi LEFT JOIN
dengan mengubah posisi tabel, perhatikan contoh berikut:
SELECT pl.id_pelanggan, nama, id_transaksi, tgl_transaksi, total_transaksi
FROM penjualan pl
LEFT JOIN pelanggan USING(id_pelanggan)
Perhatikan pada contoh diatas, kita balik posisi tabel penjualan
dan tabel pelanggan
. Jika query terebut dijalankan, hasil yang kita peroleh adalah:
+--------------+---------+--------------+---------------+-----------------+ | id_pelanggan | nama | id_transaksi | tgl_transaksi | total_transaksi | +--------------+---------+--------------+---------------+-----------------+ | 1 | Alfa | 1 | 2017-02-22 | 230000 | | 1 | Alfa | 4 | 2017-02-04 | 310000 | | 2 | Beta | 3 | 2017-01-01 | 1710000 | | 3 | Charlie | 2 | 2017-02-22 | 195000 | | NULL | NULL | 5 | 2017-02-10 | 80000 | +--------------+---------+--------------+---------------+-----------------+
Perhatikan bahwa hasil diatas sama persis dengan hasil pada contoh right join, jadi kesimpulannya, agar memudahkan, cukup gunakan salah satu bentuk outer join saja, LEFT JOIN
atau RIGHT JOIN
, saya sendiri prefer menggunakan LEFT JOIN
.
III. IMPLISIT JOIN
Sejauh ini, kita menampilkan data dari beberapa tabel MySQL dengan menggunakan klausa JOIN.
Selain menggunakan klausa JOIN
, terdapat satu cara lagi untuk menggabungkan tabel MySQL, yaitu menggunakan implisit join, disebut implisit join karena kita tidak menggunakan klausa JOIN
, pada implisit join, kriteria hubungan antar tabel di definisikan pada klausa WHERE
.
Sebagai contoh, mari kita gabungkan tabel pelanggan dan penjualan, jalankan query berikut:
SELECT pl.id_pelanggan, nama, id_transaksi, tgl_transaksi, total_transaksi
FROM pelanggan pl, penjualan pn
WHERE pl.id_pelanggan = pn.id_pelanggan
Hasil yang kita peroleh:
+--------------+---------+--------------+---------------+-----------------+ | id_pelanggan | nama | id_transaksi | tgl_transaksi | total_transaksi | +--------------+---------+--------------+---------------+-----------------+ | 1 | Alfa | 1 | 2017-02-22 | 230000 | | 3 | Charlie | 2 | 2017-02-22 | 195000 | | 2 | Beta | 3 | 2017-01-01 | 1710000 | | 1 | Alfa | 4 | 2017-02-04 | 310000 | +--------------+---------+--------------+---------------+-----------------+
Perhatikan bahwa hasil tersebut sama persis dengan hasil pada contoh INNER JOIN
, sehingga dapat disimpulkan bahwa implisit join = inner join.
Implisit join mensyaratkan kedua tabel memiliki data yang sama ( WHERE pl.id_pelanggan = pn.id_pelanggan
), sehingga implisit join ini hanya berlaku pada INNER JOIN
, dan tidak bisa digunakan untuk OUTER JOIN
.
Implisit JOIN ini merupakan cara lama ketika pertama kali standar SQL dibuat, setelah muncul standar yang lebih baru (SQL2) maka mulai digunakanlah klausa JOIN
. Saya sendiri prefer menggunakan klausa JOIN
karena lebih mudah dibaca dan dipahami, terutama hubungan antara tabel yang digabungkan.
Pada bentuk klausa JOIN
, hubungan antar tabel dinyatakan pada klausa ON
atau USING
, sedangkan filter datanya dilakukan pada klausa WHERE
, misal:
SELECT pl.id_pelanggan, nama, id_transaksi, tgl_transaksi, total_transaksi
FROM pelanggan pl
LEFT JOIN penjualan pn USING (id_pelanggan)
WHERE pl.id_pelanggan = 2 OR pl.id_pelanggan = 1
sedangkan pada implisit JOIN
, hubungan antar tabel dan filter datanya, semua didefinisikan pada klausa WHERE
, misal:
SELECT pl.id_pelanggan, nama, id_transaksi, tgl_transaksi, total_transaksi
FROM pelanggan pl, penjualan pn
WHERE pl.id_pelanggan = pn.id_pelanggan
AND (pl.id_pelanggan = 2 OR pl.id_pelanggan = 1)
Demikian pembahasan mengenai cara menampilkan data dari beberapa tabel MySQL, semoga bermanfaat.
Subscibe Now
Suka dengan artikel di Jagowebdev.com? jangan sampai ketinggalan, segera join ke milis kami untuk update informasi terbaru dari Jagowebdev.com
121 Feedback dari pembaca
Link download-nya gak bisa dibuka
Terima kasih mas infonya, sudah kami perbaiki
terimakasih pa, sangat bermanfaat..
Sama sama mas…
mohon bantuanya mas Agus
contoh kasus saya mempunyai 5 tabel yaitu barang,supplier,detail,admin,transaksi dan saya mau menampilkannya ternyata eror .
saya coba query “SELECT transaksi.notrans, supplier.id_supplier, barang.id_barang, transaksi.tanggal, transaksi.harga, detail.jumlah, transaksi.status, admin.id_admin, detail.jumlah*barang.harga as total from transaksi,barang,detail,supplier,admin WHERE barang.id_barang=detail.id_barang=transaksi.notrans=detail.notrans=admin.id_admin=transaksi.id_admin=supplier.id_supplier=transaksi.id_supplier”;
Pesan errornya seperti apa ya mas?
Atau coba dibagian WHERE ditambahkan AND atau OR
terima kasih untuk tutorialnya.
saya Punya Masalah dengan menampilkan select jual.kdbrg, jual.tglfak, sum(jual.realisasi), sum(jual.rptotal), stok.nmbrg, stok.glbrg, stok.subgol, count(stok.kdbrg) from jual
left join stok ON JUAL.kdbrg=STOK.KDBRG group by kdbrg having jual.tglfak >= ‘2017-06-01’ and jual.tglfak <= '2017-06-30' order by kdbrg; (file stok dan file transaksi), dan waktu eksekusinya cukup lama. tq
Masalahnya dinama mas?
Jika eksekusinya lama, bisa dicoba menggunakan index atau subquery mas
Mas saya mengalami kesuliatan pembuatan view arus barang masuk & keluar. tolong dibantu
v_barang_masuk (tb_barang_masuk.tanggal, tb_detil_barang_masuk.kode_barang, tb_detil_barang_masuk.qty)
v_barang_keluar (tb_barang_keluar.tanggal, tb_detil_barang_keluar.kode_barang, tb_detil_barang_keluar.qty)
saya ingin buat v_arus_barang yg terdiri dari tb_barang.kode_barang, v_barang_masuk.tanggal as tgl1, v_barang_masuk.qty as qty1, v_barang_keluar.tanggal as tgl2, v_barang_keluar.tanggal as tgl2
saya udah coba berbagai left outer join dll, hasil viewnya keluar tapi ada beberapa record di v_barang_keluar yg duplicate. mohon pencerahannya
Untuk record yang duplicate itu karene record yang di join dobel mas, memang seperti itu karakteristik join
mas mau tanya..
saya melakukan left join spt ini
select barang.kodebarang,barang.qty from barang
left join dbeli using (kodebarang)
dan hasilnya error
—
Msg 321, Level 15, State 1, Line 2
“kodebarang” is not a recognized table hints option. If it is intended as a parameter to a table-valued function or to the CHANGETABLE function, ensure that your database compatibility mode is set to 90.
apa ada kesalahan dalam query saya ya? mohon jawabannya
Database yang dipakai apa ya mas?
Mas saya mengalami kesulitan dalam pembuatan view arus barang masuk – keluar.
v_barang_masuk (tb_barang_masuk.tanggal, tb_detil_barang_masuk.kode_barang, tb_detil_barang_masuk.qty)
v_barang_keluar (tb_barang_keluar.tanggal, tb_detil_barang_keluar.kode_barang, tb_detil_barang_keluar.qty)
yg ingin dibuat adalah v_persediaan_barang yg terdiri dari kedua view diatas dengan null. mohon pencerahannya
Ada contoh bentuk tabelnya seperti apa mas?
Untuk menggabungkannya tinggal di query biasa mas pakai join
Bentuk table nya sama percis dengan yg mas buat diatas. Bedanya saya barang_masuk dan barang_keluar
Bisa di tampilkan bentuknya disini mas?
kalau LEFT JOIN/RIGHT JOIN pakai WHERE yang benar mana gan =>
1. LEFT JOIN nama_table ON kolom = kolom AND nama_kolom_where = isi_where
2. LEFT JOIN nama_table ON kolom = kolom WHERE nama_kolom_where = isi_where
Mohon pencerahannya, karena seringkali salah dalam penggunaan hal2 tsb
Yang betul yang kedua mas, jangan pernah, sekali lagi jangan pernah menempatkan where pada ON
Apakah bisa menggabungkan tabel berdasarkan tgl yang ada pada kedua tabel?
Bisa mas, pada kriteria join tinggal gunakan kolom tanggal tersebut…
Mas saya mau nanya, saya punya table transaksi yg isinya id transaksi, tgl, nama, mekanik, service, dll. Untuk input nama di form datanya pake combobox, karna ngambil data dari table member, dimana di table member itu ada id motor, yg udah saya join sama tbl motor, itu udah bisa kan, namanya siapa motor nya apa, sesuai id yg diinput di form member. Nah yg saya mau tanyakan gimana caranya pas input transaksi, udah pilih nama kan, pas dihasilnya ada namq motor nya? Terimakasih sebelumnya.
Maaf belum faham saya mas? apakah di transaksi itu ada combo box nama motor? jika ya tinggal diisikan di value tiap tiap options mas:
pa saya mau tanya,
disni saya mempunyai 2 tabel
1. barang (kdbarang (PK) , namabarang, jumlah)
2. permintaan (idpermintaan (PK) ,jumlah, kdbarang (FK) )
jika user meminta barang saya menggunakan permintaan tetapi jika saya select permintaan user tersebut akan muncul datanya.
tapi kdbarang tersebut mau saya ganti dengan nama barang apakah bisa ?
jika bisa bagaimana query ny saya butuh pencerahan nya pak. Terimakasih sebelumnya pa.
Coba pakai join mas untuk menampilkan nama baranngnya:
terimakasih pa udah bisa tampil pda saat di tampilkan, tetapi kdbarng masih ada bagaimana untuk menampilkan kd barang itu di gantikan dengan nama barang jadi kd barng tersebut nggk tampil
tampilan ny yng sekarang ada kd barng namabarang sama jumlah
tetapi yang sya ingin kan seperti ini : namabarang jumlah
jadi kdabarng tersebut tidak di tampilkan bagaimana saran bpa untuk while nya
terimakasih
Di whilenya tinggal di hilanggkan kode barangnya mas:
Misal:
alhamdulillah bisa pak. terimakasih bnyk pa saya sangat tertolong.
pak saya minta saran saya di berikan membuat aplikasi monitoring alat tulis kantor, dan saya masih pemula sekali jadi masih bnyk yang belum saya bisa dalam ngoding.
saya mau nanykan untuk pencatatan barang masuk dan keluar itu bagus ny menggunakan cara ap ya maaf saya bertnya lagi hehe,
Terimakasih sebelumnya pak 🙂
Sama sama mas.
Untuk atk tergantung proses bisnis di masing masing perusahaan mas, biasanya ada pihak yang mengajukan permohonan dan ada pihak yang menyetujui, yang penting tentukan stok awal terlebih dahulu, karena akan mempengaruhi reliabilitas data
iya benar ap yng bpa bilang proses ny seperti itu. saya minta tolong koreksi untuk database saya benar nggk seperti ini :
barang : kdbarang (PK), namabarang, stok, satuan, harga, status
permintaan : idpermintaan, tangglpinjam, tanggldibutuhkan, jumlah, user, confir, kdbarng (FK)
pencatatan : idpencatatan(PK), namabarang, masuk, keluar, user, stok awal, sisa
pencatatan tersebut digunakan untuk laporan nanti nya.
bagaiman menurut bpa apkh benar database yang saya buat seperti itu. atau harus ad FK barang atau permintaan yng di buat ke pencatatan tersebut.
fungsi FK yng ada di permintaan untuk mengurangi data stok yang ada di barang jika telah di confirmasi dari admin.
Disesuaikan sama kebutuhan mas, untuk permintaan sudah bener menggunakan FK dan diberi restriksi ON DELETE RESTRICT untuk mencegah barang terhapus dari database barang
Untuk pencatatan, saya lihat ada kolom namabarang, jika kolom tersebut mengacu pada tabel barang, maka wajib menggunakan FK kdbarang dan tidak perlu menggunakan kolom namabarang, kolom namabarang bisa diambilkan dari tabel barang dengan join
terimakasih pak sarana yang di berikan sangat bermanfaat
Sama sama mas…
halo salam kenal.
sya ada data penjualan sebut saja trans..
ada field, kode (ada ekor 2), nama barang qty dan harga serta kode faktur, dan tgl transaksi.
di master brarang ada field, kode (tanpa ekor 2) nama barang, stok, harga.
saya ingin buat rekap penjualan transaksi jual dari tanggal x sampai y, ada informasi berapa stoknya diambil dari stok barang. sebelumnya saya ucapkan trims.
Ada contoh tabel awalnya seperti apa mas? sama tabel hasil akhir yang diinginkan seperti apa?
nama database back_ttrans (penjualan)
plu : desc : jual : no bon : tgl trans:
——————â€‗———————-
2012 mi indo 1 0001 1/1/17
2012 mi indo 1 0002 2/1/17
2022 mi kare 2 0002 2/1/17
——————â€‗———————-
master (master stok) setelah dikurangi penjualan(plu nya tanpa ekor angka 2) katanya dulu menandakan pcs dan grosisr..
adalh sbb
plu : desc :qty
——————â€‗———————-
201 mi indomi 2
202 mi kare 5
hasil yg diinginkan rekap penjualan filter tgl dari tg 1 sampai 2 hasilnya
plu desc jual stok
——————â€‗———————-
2012 : mi indomi : 2 :2
2022 : mi kare :1 :5
saya ada buat sederhana mysqlnya rekap jual aja maklum otak terbatas sbb
USE apps;
SELECT plu AS “kode”,
descp AS”nama barang”,
SUM(jual) AS “jual”
FROM back_ttrans
WHERE
DATE(tgl_trans) >= ‘2017-12-01’ AND DATE(tgl_trans) <= '2017-12-31'
GROUP BY plu
Itu tabel back_ttrans tidak ngelink dengan master_stok mas, karena kode plu nya beda sehingga keduanya tidak berelasi
Agar berelasi isikan kode di back_ttrans dengan master_stok mas, baru di joinkan
jadi isikan kode 2012 dan 2022 ke tabel master_stok, baru di joinkan….
Bisa si… menggabunggakan keduanya menggunakan trik tertentu, tapi desain tabel seperti ini tidak benar dan akan sangat menyulitkan kedepannya
iya. ini dia didesain ada ekor. maksudnya untuk jual pcs ekornya 2 grosir ekornya 1
jadi misalnyanya 2012 itu artinya pcs. 2011 itu artinya grosir. selam ini triknya saya rekap dulu backttrn. dan master di sql yog. disimpan masing masing menjadi csv fo excel. lalu dengan prosedure macro excel yg amat panjang. baru dapt menghasilkan laporan yg sy inginkan. triknya saya dimakro. master barang saya tambahin angka 2 di setiap kode. baru bisa di vlookup. hehe he
tolong donk kalo ada trik query..
Sama saja mas, memang harus di tambahkan angka 2 di master stok. Kalau SQL kita buat temporary tabel (dengan subquery) terlebih dahulu dari master_stok, yang isinya sudah ada ekor angka duanya, selanjutnya tinggal di joinkan dengan tabel penjualan
itu dah. gimana caranya. buat database sementara. yang menambahkan angka 2 di setiap plu master. kemudian hasilnya itu di join ke rekap backtrans..
tolong dong kasih contekan prosedurenya. buta masalah sql. cuman pengen laporan rekap aja.
Gambarannya seperti ini mas:
USE apps;
SELECT plu, /*ini kode back_ttrans*/
master.descp, /*ini keterengan dari master stok ya?*/
SUM(qty) /*ini ngerekap back_trans ya? */
FROM back_ttrans
LEFT JOIN (
SELECT CONCAT(plu, “2”), /*ini nambahkan angka 2 di kode master ya?*/
descp, /*ini keterangan di master ya?*/
on_hand1 /*ini field stok mas*/
FROM MASTER
) AS MASTER USING plu
hasilnya ..
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘plu
LIMIT 0, 1000’ at line 10
saya coba buat juga rekap menurut rentang penjualan
USE apps;
SELECT plu, /*ini kode back_ttrans*/
master.descp, /*ini keterengan dari master stok ya?*/
SUM(qty) /*ini ngerekap back_trans ya? */
FROM back_ttrans
WHERE
DATE(tgl_trans) >= ‘2017-12-01’ AND DATE(tgl_trans) <= '2017-12-31'
GROUP BY plu
LEFT JOIN (
SELECT CONCAT(plu, "2"), /*ini nambahkan angka 2 di kode master ya?*/
descp, /*ini keterangan di master ya?*/
on_hand1 /*ini field stok mas*/
FROM MASTER
) AS MASTER USING plu
hasilnya gini pak…
Error Code: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN (
SELECT CONCAT(plu, "2"), /*ini nambahkan angka 2 di kode master y' at line 8
Yang pertama, USING nya pakai kurung mas, USING(plu)
Yang kedua WHERE dan GROUP BY tidak bisa mendahului JOIN
USE apps;
dan hasilnya sbb:
berhasil pak!!!!! txxuuuuu…, kemana nih ngirim biaya konsultasinya… he he,
Wah, selamat mas, saya ikut senang….
Gratis mas…..
Id | idtransaksi | id barang
1 | 1 | 5
2 | 1 | 10
3 | 1 |13
4 | 2 | 5
5 | 2 | 13
6 | 3 | 7
pak gimana caranya supaya menjadi :
ID id_barang| hasil
1 | 5,10 | 1
2 | 5,13 | 2
id barang 5,13 ada 2 dari total transaksi
id barang 5,10 ada 1 dari total transaksi .
Untuk seperti itu tidak bisa murni SQL mas, coba pakai bantuan php
kalau bantuan php gimana caranya mas . thnx
Hasil querynya sedikit diolah dengan PHP mas, waktu melakukan loop seperti:
while($row = mysqli_fetch_array($query)) {
… dada di olah lagi disini…
}
jadi pakai if mas ?
while($row = mysqli_fetch_array($query)) {
ex : if ($query[totaltransaksi==$query[totaltransaksi){
echo “$query “;
}
ah pusing mas . bantu dong mas T_T
https://stackoverflow.com/questions/52037820/result-data-from-multiple-table-codeigniter
Mohon bantuannya gan, saya stuck join table menggunakan where clause. Makasih.
Saya lihat sudah solved mas…
Mantap sangat lengkap dan sangat membantu
Terima kasih mas…
gan untuk menampilkan data dari penjualan detail gmna ?
Maksudnya menampilkan seperti apa mas?
pl.idpelanggan
pl itu apanya gan?
Sebelum nama kolom itu nama database / nama alias dari database, pl disini maksudnya nama alias dari database
pak saya mau tanya
jangan tampilkan data yang ada di table kiri, jika data itu terdapat di table kanan. jadi selebihnya di tampilkan.
untuk diagram ven nya ada di link ini pak
https://i.ibb.co/k0CJLfN/venn.jpg
mohon bantuannya
terimakasih
Bisa menggunakan filer where mas,misal
Select * from tabel kiri where kolom not in (select kolom from tabel kanan)
sangat jelas mas ….ditunggu tutorial lainya mas
terimakasih
Terima kasih mas..
Cara buat menghapus row dari kedua tabel yang dihubungkan dengan inner join gimana ya mas? puyeng 🙁
kalau pake 5 tabel gimana caranya pak
Sama saja mas, query SQL nya saja yang perlu disesuaikan
selamat malam mas, saya mau bertanya saya lagi buat app pendaftaran beasiswa basis web nah pas di DBnya saya menggunakan tabel user utk login dan tabel mahasiswa utk data mahasiswa, permasalahanya pas 2 data mahasiswa di masukan ditabel mahasiswa, 2 mahasiswa ini bisa melihat data mereka, yang saya ingin kan ketika mahasiswa login dia hanya bisa melihat datanya saja, mohon bantuan nya mas, Terimakasih…
Itu pas pengambilan data bisa dicocokkan dengan user mahasiswa yang login…
Mas saya butuh bantuan ,
saya ada 6 tabel dan 1 file html home
– saya sudah bisa membuat dan memfungsikan menu search pada setiap tabel yg saya punya
– nah , saya inginnya membuat menu search pada home saya dan fungsi search nya itu mengacu kepada 6 tabel yg saya punya
semoga mengerti
Harus menggunakan bahasa serverside mas, seperti PHP
mas klo ingin menampilkan mutasi barang bagaimana mas?
tabel produk (id, nama, keterangan)
tabel masuk (id, produk_id, jumlah, tanggal_masuk, keterangan)
tabel keluar (id, produk_id, jumlah, tanggal keluar, keterangan)
ingin hasilnya,
id Barang : 1
Nama Barang : Ballpoint
————————————————————————————–
No | Masuk | Keluar | Tanggal | Keterangan
————————————————————————————–
1 | 100 | |20 Oktober 2019 | Barang Baru
2 | | 10 | 25 Okrober 2019 | Keluar001
3 | | 5 | 26 Okrober 2019 | Keluar002
4 | 50 | |27 Oktober 2019 | Tambah Stock
————————————————————————————–
Sisa Stok 135
————————————————————————————–
Memisahkan baris dan kolom untuk masuk dan keluar nya bagaimana mas?
Terima kasih
Coba pelajari ini mas, termasuk bagian comment nya: Menghitung Field (Kolom) Pada Tabel MySQL Dengan Kondisi Tertentu Menggunakan COUNT IF
misal pada implisit join ditambah satu kolom lagi misal kolom status yg isinya closed
SELECT pl.id_pelanggan, nama, id_transaksi, tgl_transaksi, total_transaksi
FROM pelanggan pl, penjualan pn
WHERE pl.id_pelanggan = pn.id_pelanggan
Seperti ini mas?
SELECT pl.id_pelanggan, nama, id_transaksi, tgl_transaksi, total_transaksi, status
FROM pelanggan pl, penjualan pn
WHERE pl.id_pelanggan = pn.id_pelanggan AND pd.status = “closed”
Mas mau nanya misalnya saya mau nampilkan tabel menggunakan join, nah salah satu datanya ada kolom emg gak ada, bagaimana qury nya jika row tersebut masih bisa nampil walaupun kolomnya ada yang kosong.
Ada contoh datanya dan hasil yang ddiinginkan mas?
selamat siang,
maaf mo nanya, bisa tidak utuk right join, left join, outer join digunakan untuk lebih dari 2 table?
kalo bisa, tahapan eksekusinya seperti apa?
Siang mas, bisa mas…
Mas saya mau nanya, itukan untuk proses select, nah bagaiman dengan proses insert, update, dan deletenya mas. Bisakah melakukan insert dengan lebih dr 2 tabel sekaligus? ataupun update, bahkan delete?
Bisa diberikan contoh kasusnya seperti apa mas?
mas, mau nanya, saya mau menampilkan jumlah barang yang terjual berdasarkan tanggal transaksi, tapi seluruh nama barang juga di tampilkan,
ini yang sudah saya buat, loading nya lama, apakah bisa di sederhanakan lagi?
https://pastebin.com/bYTDSrTA
tabel tb_penjualan, tb_penjualan_2 dst itu datanya dari cabang toko, tpi sudah disimpan di server pusat.
terimakasih sebelumnya mas 😀
Tabel penjualan dijadikan satu mas
maksudnya jadikan satu gimana mas?
kalo data nya sudah banya apa juga pengaruh bikin lambat mas? walaupun sudah di filter menampilkan datany
Dijadikan satu tabel, agar integritas data lebih dapat terjaga
Data banyak, pada batas tertentu akan menyababkan lambat, tergantung query dan kekuatan server, bisa jadi 3jt data sudah bikin lambat
Apakah ada contoh web dari database ini mas untuk dipelajari?mohon bantuannya mas
Maksudnya bagaimana ya mas?
Saya mau tanya ni untuk inner join.. saya sudah berhasil joinkan tabel pertama dan tabel ke dua tapi saat menampilkan tabel pertama saya ingin hanya tampil kondisi tertentu.. jika cara sederhananya kan (select*from tabel_pertama where namacolum=’value’). Nah jika tabel itu bentuk inner join bagaimana soalnya saya menambahkan kondisi where setelah on tapi data tidak mau tampil.. bagaimana ya kak?
Seharusnya bisa mbak, WHERE setelah ON sesuai kondisi pada tabel pertama
SELECT pl.id_pelanggan, nama, tgl_transaksi, total_transaksi
FROM pelanggan pl
JOIN penjualan pn ON pl.id_pelanggan = pn.id_pelanggan
pl dengan pn itu dapat darimana mas? Saya masih bingung soal join di query
pl dan pn hanya sebagai tabel alias mas bebas diberi nama apa saja, untuk memudahkan penulisan saja, misal pelanggan.id_pelanggan cukup ditulis pl.id_pelanggan
mas mohon bantuannya, sya memliki data seperti ini :
kd_prd a b c d e
————————————————
00003869 1 0 0 0 0
00003869 0 0 0 0 1
00003741 1 0 0 0 0
00003741 0 0 0 0 1
00003741 0 1 0 0 0
————————————————
dan querry sya :
SELECT
abod.kd_prd,
(case when asbo.jam between ’05:00′ and ’09:59′ then ‘1’ else ‘0’ end) as PAGI,
(case when asbo.jam between ’10:00′ and ’14:59′ then ‘1’ else ‘0’ end) as SIANG,
(case when asbo.jam between ’15:00′ and ’17:59′ then ‘1’ else ‘0’ end) as SORE,
(case when asbo.jam between ’18:00′ and ’18:59′ then ‘1’ else ‘0’ end) as PETANG,
(case when asbo.jam between ’19:00′ and ’24:00′ then ‘1’ else ‘0’ end) as MALAM
FROM
apt_barang_out_detail abod
RIGHT OUTER JOIN apt_signa_barang_out asbo ON
abod.no_out = asbo.no_out AND
abod.tgl_out = asbo.tgl_out AND
abod.no_urut = asbo.no_urut
WHERE abod.no_out = ‘6001’ AND abod.tgl_out = ’10/Feb/2020′
GROUP BY abod.kd_prd, asbo.jam, asbo.no_urut
supaya hasilnya sperti ini gimna ya mas ???
contoh :
kd_prd a b c d e
———————————————-
00003869 1 0 0 0 1
00003741 1 1 0 0 1
Coba ditambahkan GROUP BY mas…
Sudah sya tambahkan groub by tp hasilx tetap sama mas… Mohon pencerahanx mas
Halo mas ak mau tanya kalau menampilkan data dari beda table gimana ya, saya sudah buat sprti ini :
SELECT project_code, project_name, emp_name, total_revenue, account_name, customer_billing, internal_order, contract_order, sales_order
FROM trn01project tp
LEFT JOIN m_employee ON tp.am_id = m_employee.emp_id
LEFT JOIN m_opt_project ON tp.segment_id = m_opt_project.opt_id
LEFT JOIN m_account ON tp.account_no = m_account.account_no
UNION SELECT opr_division, opr_department,
FROM trn01project_charter
Lalu ada saran gak ya??
Maksudnya bagaimana ya mas?
Mas…, Tolong soal Tampilkan data produk yang belum pernah dipesan oleh pelanggan manapun!, Bagaimana ?
Coba di joinkan mas antara tabel produk dan tabel transaksi kemudian filter yang transaksinya nol, misal:
SELECT * FROM transaksi_detail LEFT JOIN produk USING(produk_id) WHERE tgl_transaksi IS NULL
Mau tanya syntax apa yg di pakai untuk menampilkan 3 kolom yg berbeda dari 3 tabel yg berbeda ? Kalo bisa sertakan contohnya
Standar SQL mas, misal:
bagaimana caranya menggabungkan 5 table sekaligus..
Tinggal di joinkan mas, join tidak ada batasan jumlah tabel…
min saya mau tanya.
coba tampilkan id_transaksi, nama pelanggan, email pelanggan, total_trx dari tabel penjualan_detail gimana ya?
ini kasusnya sama dengan saya. saya kurang begitu paham karna pada tabel penjualan_detail tidak berelasi dengan tabel pelanggan.
trimakasih atas jawabannya.
Berarti harus dihubungkan dulu dengan tabel penjualan mas
penjualan_detil -> penjualan -> pelanggan
bagaimana kalau mau join / inner join table penjualan detail, penjualan dan tabel pelanggan ?
Tinggal di join biasa saja mas di sql nya bisa dicoba di database manager dulu seperti phpmyadmin baru hasilnya ditampilkan di tabel
Maaf pak mau bertanya,
Tabel saya ada 2 tb_prodi dan tb_mahasiswa,
Perintahnya di suruh nampilkan data yang memiliki prodi dan agama sama..
Syntaknya bagaimana ya pak?
Terimakasih
Bisa dicontohkan tabelnya seperti apa mas?
mas mau tanyak cara gabungkan 2 databases server berbeda menjadi satu caranya bagaimana ?
Bisa mencoba menggunakan federated tabel mas, tapi terdapat beberapa keterbatasan, lebih lanjut: https://dev.mysql.com/doc/refman/8.0/en/federated-storage-engine.html
Pak mau nanyak cara bedain left outer join sama right outer join gimana ya pak
Left outer join / Left join akan menampilkan semua data disebelah kiri, sebaliknya, right outer join atau right join akan menampilkan semua data disebelah kanan
Pak Agus, mau nanya
Aku menggunakan mysql workbench
gimana caranya menampilkan data
show databases;
use
show tables;
SELECT pl.id_pelanggan, nama, tgl_transaksi, total_transaksi
FROM pelanggan pl
JOIN penjualan pn ON pl.id_pelanggan = pn.id_pelanggan
Bagian use aku ga tau caranya gimana.
Aku ketik use pelanggan, penjualan ga bisa.
Bagaimana caranya supaya bisa tampil data?
Dengan database manager seperti workbench, kita cukup mengetikkan querynya saja, seperti SELECT dsb, untuk query show database dan use database sudah di handle oleh database manager tersebut
Pak Agus,
Pl dan Pn artinya apa?
Saya kurang paham pertanyaannya mas
Boleh nanya mas?
Silakan mas
Terimakasih Pak Agus, sangat bermanfaat sekali, khususnya bagi saya pribadi
Sama sama mas…
pak saya mau bertanya jika saya ingin membuat tabel berelasi dimana tabel C ini memiliki semua atribut dan id pada tabel A dan B serta memiliki berfungsi Cascade update dan delete..
Terimakasih..
Sama saja mas, bisa dicoba menggunakan join
mas saya mau nanya bole ???
coding MYSQL DATABASE menggunakan CMD
” SELECT nota.no_nota, nota.tgl_pembelian, nota.jam_pembelian, nota.nama_kasir, pesanan.jumlah_pesanan, pesanan.nama_pesanan, pembayaran.harga_pesanan, pembayaran.total_tagihan, pembayaran.total_bayar FROM nota RIGHT JOIN pesanan ON nota.no_nota=pesanan.kode_pesanan RIGHT JOIN pembayaran ON nota.no_nota=pembayaran.kode_pembayaran; ” untuk tampilanya kok NULL di bagian “no_nota | tgl_pembelian | jam_pembelian | nama_kasir | jumlah_pesanan | nama_pesanan”
NULL berarti tidak ada data di tabel yang berelasi mas