Fungsi Text SQL
Fungsi Text SQL
Syntax:
Keterangan:
ColumnName --> nama kolom yang akan diganti isi tiap record/barisnya berdasarkan
string/karakter tertentu
Gunakan fungsi UPPER() untuk mengubah kolom FirstName menjadi seluruhnya kapital dan gunakan
LOWER() untuk mengubah kolom LastName menjadi seluruhnya non-kapital. Gunakan kedua fungsi
tersebut dalam satu SELECT-Statement.
Fungsi Aggregate
“Seperti yang sudah dijelaskan bahwa fungsi aggregate ini digunakan untuk melakukan
perhitungan pada sekelompok nilai. Biar lebih jelas kita akan mempraktikkan penggunaan
fungsi aggregate di SQL dengan menggunakan fungsi - fungsi aggregate yang umum
digunakan. Tapi sebelumnya, kamu simak saja dulu tabel fungsinya ini.”
Fungsi Aggregate - SUM()
Pengenalan GROUP BY
“Nja, kamu perlu bilang kalau kita akan mengolah data penjualan tahun lalu bukan?”
“Kalau sudah ada datanya, kita pasti butuh mengelompokkannya dan menghitungnya
berdasarkan penjualan setiap provinsi maupun dikelompokkan per bulan. Kalau kayak begitu
kasusnya, pakai SQL bagaimana caranya ya?”
“Gambaranmu bagus sekali, Aksara. Saya bantu jelaskan ya. Untuk mengelompokkan data di
SQL kita menggunakan GROUP BY Statement. GROUP BY statement akan
mengelompokkan data yang bernilai sama ke dalam satu group, dan dengan menggunakan
fungsi aggregate seperti (COUNT, MAX, MIN, SUM, AVG) kita bisa melakukan agregasi
untuk untuk setiap group atau kelompok yang terbentuk. Biar lebih jelas, coba pelajari
penulisan syntax-nya,” jelas Senja.
“Tentu saja bisa. Group by bisa dilakukan dengan single column ataupun multiple column.
Seperti ini contohnya:”
Group by Single Column, data dikelompokkan menggunakan kriteria dari satu kolom saja,
misalnya mengelompokkan data berdasarkan provinsi saja.
Group by Multiple Column, data dikelompokkan menggunakan kriteria dari dua kolom atau
lebih, misalnya mengelompokkan data berdasarkan province dan brand.
Fungsi Aggregate dengan Grouping
“Tambahan lagi, Aksara. Kamu masih ingatkan fungsi agregasi yang kita pelajari dan
praktikkan sebelumnya? Pada fungsi itu kita belum menggunakan group by sehingga hasil
SUM dan COUNT kita adalah hasil SUM dan COUNT dari seluruh baris yang ada di tabel
data penjualan.”
“Ada data penjualannya kah, Nja? Biar lebih mudah membayangkan dan
mempraktikkannya,” usulku.
“Kalau begitu, kita praktik langsung saja. Sekarang coba kamu gunakan fungsi agregasi dan
GROUP BY untuk menghitung total penjualan dari setiap provinsi di tahun 2019, dan kita
bandingkan dengan hasil fungsi agregasi tanpa menggunakan group by,” pinta Senja.
“Itu mudah saja, Aksara. Itu bisa kamu lakukan dengan CASE - statement di SQL. CASE -
statement ini sama dengan IF - THEN - ELSE di pemrograman pada umumnya. Syntax dari
CASE – statement seperti ini. Coba lihat.”
CASE-statement akan mengevaluasi kondisi yang sudah ditentukan, dimulai dari condition1,
dan akan mengembalikan hasil (result1), jika condition1 terpenuhi (TRUE). Jika tidak, maka
condition2 akan dievaluasi, dan akan mengembalikan result2 jika condition2 terpenuhi, dst.
Apabila tidak ada kondisi yang terpenuhi, maka result pada bagian ELSE yang akan
dikembalikan.
Nah, silahkan praktikkan penggunaan CASE-Statement untuk membuat remark pada data
aggregasi penjualan.
Tugas Praktek
Tugas:
Aksara, saya senang dengan perkembanganmu belakangan ini. Saya mau minta tolong agar
kamu melakukan analisis penjualan di suatu store. Adapun laporan yang diminta sebagai
berikut:
(lanjutan ...)
Saya mau minta tolong agar kamu melakukan analisis penjualan di suatu store. Adapun
laporan yang diminta sebagai berikut:
Penggunaan fungsi skalar dan fungsi aggregate dalam operasi string dan numerik di
SQL database
Penggunaan GROUP BY dalam mengelompokkan data dan memahami konsep
menggabungkan GROUP BY dengan fungsi aggregate
Penggunaan CASE Statement untuk struktur pengambilan keputusan.
Mengerjakan mini project yang merupakan integrasi keseluruhan materi dan tentunya
materi-materi pada modul-modul sebelumnya untuk menyelesaikan persoalan bisnis.
Dengan kemampuan ini, aku lebih pede untuk mengolah data dengan SQL. Keterampilan ini
sendiri adalah 60% aktivitas awal yang akan dilakukan seorang analis. Keep Fighting!
Tabel pertama: ms_item_warna
“Oke, contoh tabel pertama yang akan kita gunakan sebagai bahan latihan adalah tabel
ms_item_warna seperti terlihat berikut ini,” bimbing Senja sambil memperlihatkan layar
laptopnya padaku:
“Tabel ini terdiri dari dua kolom yang berisi informasi nama buah atau sayuran dengan
warnanya, dan memiliki delapan baris data,” ujar Senja.
“Selanjutnya, jika permasalahan kita adalah ingin mengetahui informasi tidak hanya
mengenai warna tetapi juga jenis/kategori dari setiap nama barang apakah tergolong sayuran
atau buah, maka kita tidak dapat memperoleh informasi tersebut jika hanya berdasarkan
tablel ms_item_warna. Oleh karena itu, kita perlu menghubungkan tabel tersebut dengan
tabel lain yang berisi informasi tersebut, yaitu tabel ms_item_kategori.”
Jika query yang ditunjukkan dengan benar diketikkan maka akan mendapatkan hasil berikut
setelah menekan tombol .
Dapat dilihat hasil dari penggabungan dua tabel tersebut yaitu berupa tabel baru dengan
empat kolom dan enam baris data. Perlu diketahui bahwa penggabungan ini bersifat
sementara artinya tabel asli di database tidak mengalami perubahan, dan tabel baru hasil
penggabungan ini juga tidak serta merta tersimpan di database.
menuliskan dua nama tabel yang akan digunakan dengan dipisahkan operator koma
(,).
menuliskan pasangan key columns dengan penghubung operator sama dengan (=) di
bagian filter atau kondisi.
Cara join seperti ini disebut dengan cara join menggunakan operator koma.
“Nja, aku mau nanya. Jika aku amati, penggabungan tabel menghasilkan enam baris data.
Sedangkan di kedua tabel asal masing-masing memiliki delapan baris data. Lalu, kenapa bisa
berkurang dua baris data?” tanyaku penasaran.
“Untuk menjawab pertanyaan tersebut, cobalah perhatikan gambar berikut,” jawab Senja
lugas langsung memberi penjelasan lengkap bersama visualnya
Dua tabel di bagian atas yaitu tabel ms_item_kategori dan tabel ms_item_warna
merupakan tabel sumber data, dan bagian bawah adalah tabel hasil penggabungan dari kedua
tabel tersebut.
Dari tabel hasil penggabungan terlihat bahwa baris data yang muncul hanyalah baris data
yang isi datanya terdapat di kedua key columns, dan data yang isinya cocok untuk kedua tabel
jumlahnya hanya enam dari total delapan baris data yang ada. Sedangkan baris data yang
berisi belimbing, jamur, apel dan daun bawang, tidak terdapat di kedua tabel, sehingga baris
data ini akan di-exclude dan tidak akan muncul di tabel hasil penggabungan.
Pencocokan dengan pencarian ini berdasarkan bagian kondisi (conditional clause) pada query
yang ditandai dengan warna kuning berikut.
Setelah seluruh data ditemukan dengan kondisi ini, dan jika tidak menentukan spesifik kolom
maka seluruh kolom data dari kedua tabel akan dimunculkan dengan isi/baris data yang sama
dan terdapat di kedua key column digabungkan menjadi satu baris pada tabel baru.
Isi data yang ditandai dengan warna merah adalah data yang tidak memiliki pasangan
sehingga tidak bisa digabungkan, dan dengan demikian tidak memiliki data gabungan pada
hasil akhir.
Cara pencocokan dan penggabungan disebut dengan INNER JOIN - dimana isi dari key
column kedua tabel harus cocok satu sama lain baru dapat digabungkan.
Penjelasan Senja selalu lengkap seperti biasa. Aku mengintip buku catatan dari sudut mataku,
tak terasa sudah sekitar tiga halaman habis oleh coretan tanganku. Malam ini harus kurapikan
nih!
“Satu lagi, Aksara. Saya perhatikan kamu suka sekali mencatat, jangan kelewat soal ini: jika
kamu biasa bekerja dengan Excel, proses ini hampir menyerupai penggunaan fungsi vlookup.
Jadi harusnya sudah terbiasa.”
Ketikkan query yang terakhir ini pada code editor dan jalankan dengan menekan tombol
. Jika berhasil maka akan menampilkan hasil berikut.
Terlihat jumlah data yang dihasilkan tetap 6 baris data, namun dengan urutan kolom yang
berbeda.
Dimana dua kolom pertama adalah dari tabel ms_item_warna, dan dua kolom berikutnya
dari tabel ms_item_barang. Hal ini sesuai dengan urutan nama tabel yang diketikkan setelah
FROM
Menggunakan Prefix Nama Tabel
Seperti yang dijelaskan sebelumnya, jika akan menggunakan wildcard (*), dan tidak
menentukan spesifik nama kolom yang akan dimunculkan di bagian SELECT, maka secara
default urutan kolom dimulai dengan kolom dari tabel yang dinyatakan pertama di bagian
FROM. Akan tetapi, bisa juga memanfaatkan wildcard dengan menambahkan prefix nama
tabel, dimana dengan merinci prefix nama tabel ini, dimungkinkan untuk menentukan urutan
kolom dari tabel mana yang muncul duluan.
Jika lupa dapat mengacu kembali ke Modul: Fundamental SQL Using SELECT
Statement, Chapter: Prefix dan Alias.
Sebagai contoh, jika akan menggabungkan kedua tabel, dengan menyatakan tabel
ms_item_warna terlebih dahulu di bagian FROM, tetapi yang ingin dimunculkan kolomnya
di awal hasil adalah dari yang ms_item_kategori, maka querynya akan menjadi sebagai
berikut.
Jika query yang diketikkan sesuai dengan yang ditunjukkan dan berhasil dijalankan maka
akan diperoleh hasil berikut ini:
Terlihat urutan kolom yang muncul adalah dari tabel ms_item_kategori terlebih dahulu.
Senja memicingkan matanya pada layar laptop yang kutunjuk sebelum menjawab.
“Pertanyaan bagus. Penjelasan dan praktek yang kita dilakukan pada materi sebelumnya
adalah penggabungan dua tabel dengan menggunakan kondisi, yaitu terdapat data yang sama
pada key kolom dari kedua tabel. Akan tetapi, memang benar, dalam beberapa case di real
problem, sering kali terdapat permasalahan tertentu dimana kita ingin menggabungkan tabel
tanpa ada kondisi. Proses penggabungan ini juga dapat dilakukan dengan metode koma dan
tanpa menggunakan kondisi relasi antar kolom.”
Aku mencoba mencerna penjelasan Senja. Sebelum aku sempat memahami semuanya. Senja
sudah mengajakku untuk melihat contoh.
“Terlihat pada query kita hanya menyertakan nama dua tabel yang akan diambil datanya, tapi
tidak ada informasi kondisi bagaimana kedua tabel tersebut berelasi satu dengan yang lainnya
melalui key column. Lalu apa hasilnya?” tanya Senja retoris.
“Kamu hanya butuh untuk mengetik query ini pada code editor dan jalankan, jika berhasil
dengan baik maka akan muncul hasil dengan enam puluh empat baris data seperti berikut.”
+-----------+----------+-------------+--------------+
| nama_item | kategori | nama_barang | warna |
+-----------+----------+-------------+--------------+
| bayam | sayuran | apel | merah |
| belimbing | buah | apel | merah |
| duku | buah | apel | merah |
| durian | buah | apel | merah |
| gandum | buah | apel | merah |
| jamur | sayuran | apel | merah |
| jambu air | buah | apel | merah |
| jeruk | buah | apel | merah |
| bayam | sayuran | bayam | hijau |
| belimbing | buah | bayam | hijau |
| duku | buah | bayam | hijau |
| durian | buah | bayam | hijau |
| gandum | buah | bayam | hijau |
| jamur | sayuran | bayam | hijau |
| jambu air | buah | bayam | hijau |
| jeruk | buah | bayam | hijau |
| bayam | sayuran | daun bawang | hijau |
| belimbing | buah | daun bawang | hijau |
| duku | buah | daun bawang | hijau |
| durian | buah | daun bawang | hijau |
| gandum | buah | daun bawang | hijau |
| jamur | sayuran | daun bawang | hijau |
| jambu air | buah | daun bawang | hijau |
| jeruk | buah | daun bawang | hijau |
| bayam | sayuran | duku | kuning pekat |
| belimbing | buah | duku | kuning pekat |
| duku | buah | duku | kuning pekat |
| durian | buah | duku | kuning pekat |
| gandum | buah | duku | kuning pekat |
| jamur | sayuran | duku | kuning pekat |
| jambu air | buah | duku | kuning pekat |
| jeruk | buah | duku | kuning pekat |
| bayam | sayuran | durian | kuning |
| belimbing | buah | durian | kuning |
| duku | buah | durian | kuning |
| durian | buah | durian | kuning |
| gandum | buah | durian | kuning |
| jamur | sayuran | durian | kuning |
| jambu air | buah | durian | kuning |
| jeruk | buah | durian | kuning |
| bayam | sayuran | gandum | coklat |
| belimbing | buah | gandum | coklat |
| duku | buah | gandum | coklat |
| durian | buah | gandum | coklat |
| gandum | buah | gandum | coklat |
| jamur | sayuran | gandum | coklat |
| jambu air | buah | gandum | coklat |
| jeruk | buah | gandum | coklat |
| bayam | sayuran | jambu air | merah |
| belimbing | buah | jambu air | merah |
| duku | buah | jambu air | merah |
| durian | buah | jambu air | merah |
| gandum | buah | jambu air | merah |
| jamur | sayuran | jambu air | merah |
| jambu air | buah | jambu air | merah |
| jeruk | buah | jambu air | merah |
| bayam | sayuran | jeruk | oranye |
| belimbing | buah | jeruk | oranye |
| duku | buah | jeruk | oranye |
| durian | buah | jeruk | oranye |
| gandum | buah | jeruk | oranye |
| jamur | sayuran | jeruk | oranye |
| jambu air | buah | jeruk | oranye |
| jeruk | buah | jeruk | oranye |
+-----------+----------+-------------+--------------+
Aku menggumam mengerti. Terlihat banyak sekali hasil yang keluar, ini dikarenakan setiap
baris data pada kedua tabel akan dihubungkan satu sama lain - tanpa ada hubungan.
Jumlah enam puluh empat baris data ini adalah hasil perkalian dari jumlah data dari kedua
tabel, dimana masing-masing memiliki delapan baris data. Cara menggabungkan kedua
tabelseperti ini disebut dengan mekanisme cross join.
Jika kedua table tersebut digabungkan tanpa kondisi dengan query berikut
Kesimpulan
Bahasa SQL diciptakan untuk sistem database relasional atau RDBMS. Dan aspek relasional
inilah yang menjadi fitur paling penting dan unggul, dimana beberapa tabel dapat
digabungkan menjadi satu sumber data baru.
Cara menggabungkan antar tabel disebut sebagai mekanisme join. Pada bab ini telah
dicontohkan bagaimana dua tipe join, yaitu inner join dan cross join diterapkan dengan dua
contoh tabel sederhana.
Inner join terjadi jika kedua tabel digabungkan melalui kolom kunci atau key column. Syarat
penggabungan adalah dimana Isi data dari key column tabel yang satu harus dapat
dicocokkan dengan isi data dari key column tabel yang lain.
Sedangkan cross join terjadi dari penggabungan tabel tanpa kondisi, dan menghasilkan
seluruh penggabungan data seperti proses perkalian.
Untuk bab ini, inner join maupun cross join dilakukan dengan cara menggunakan operator
koma dan pengkondisian where. Pada bab selanjutnya, akan terlihat penggunaan inner join
dengan menggunakan keyword INNER JOIN … ON.
abel tr_penjualan dan tabel ms_produk
Tak kusangka penggunaan INNER JOIN ini banyak sekali langkah per langkahnya.
Untungnya aku sudah diberi modul oleh Senja, kalau tidak, buku catatanku bisa habis diisi
oleh materi ini saja.
“Setelah kita menggunakan tabel ms_item_warna dan ms_item_kategori, sekarang mari kita
gunakan tabel tr_penjualan dan tabel ms_produk yang ada di-database, sehingga kita bisa
lebih paham mengenai penerapan konsep JOIN di real case,” pinta Senja.
“Oke, Nja.”
”Mari kita lihat isi dari tabel tr_penjualan. Silakan ketikkan query berikut pada code editor.”
Jika dijalankan dan tidak ada kesalahan pada sintaks, maka hasilnya akan terlihat sebagai
berikut.
“Sudah tahu kan bahwa tujuan JOIN adalah menggabungkan dua atau lebih tabel yang
berbeda di dalam database. Nah, JOIN ini hanya bisa dilakukan apabila tabel - tabel
tersebut memiliki key kolom yang sama. Di SQL, terdapat beberapa tipe JOIN yaitu : INNER
JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN, dan SELF JOIN. Setiap tipe join memiliki
tujuan dan hasil query yang berbeda. Pada metode INNER JOIN, baris dari kedua atau lebih
tabel akan dibandingkan untuk mengecek baris - baris mana saja yang cocok satu sama lain
berdasarkan kondisi JOIN yang ditentukan,” jelas Senja fasih.
“Memang JOIN itu sendiri ada berapa tipe sih, Nja?” “Untuk materi ini, kita akan ke tipe
pertama, yaitu INNER JOIN. Namun demikian, pembahasan akan makin mendalam dengan
memberikan konsep pengantar terlebih dahulu agar memudahkan dalam memahami tipe-
tipe JOIN lainnya.”
“Oh oke, Nja.”
Jika masing-masing tabel tersebut dianalogikan sebagai dua himpunan maka proses INNER
JOIN ekivalen dengan INTERSECTION (IRISAN) antara dua himpunan.
Proses INNER JOIN memiliki konsep penggabungan untuk records pada kedua tabel yang
bernilai sama.
Tugas Praktek: Menggunakan INNER JOIN (1/3)
Sejauh ini aku belum memiliki pertanyaan berarti dan semoga saja tidak ada. Dalam hati
kuberdoa kelancaran pembelajaran ini juga sampai ke kuis dan tugasnya, hehehe.
“Kita lanjut penjelasannya ya, Aksara,” ujar Senja menarikku kembali ke materi.
“Nah, sebelumnya kan kita sudah menerapkan penggunaan … WHERE …; dari perintah
SELECT … dan operator koma, untuk penggabungan tabel ms_item_warna dan
ms_item_kategori. Selanjutnya, ini kita akan menggunakan klausa INNER JOIN … ON …;
untuk menggabungkan kedua ms_item_warna dan ms_item_kategori berdasarkan sintaks
INNER JOIN yang telah dijelaskan sebelumnya.”
Jika dijalankan dan tidak ada kesalahan pada penulisan query-nya, maka hasilnya akan
terlihat sebagai berikut.
Aku mengecek lagi beberapa coretan penting materi tadi dan mulai mengerjakan kode-nya.
Jika dijalankan berikutlah hasilnya
Aku pun kembali serius menekuri layar laptop dan isi modul.
“Perhatikan tabel hasil query pada tugas praktek sebelumnya, apakah perbedaan antara tabel
sebelum penggabungan dengan INNER JOIN dan setelah penggabungan?”
“Sekarang seluruh kolom dari kedua tabel berada di satu tabel dan berisi seluruh kolom -
kolom dari kedua tabel. Jadi, Aku juga dapat dengan mudah mengidentifikasi nama produk
dari setiap kode produk yang dibeli oleh customer.”
“Iya, benar sekali, Aksara. Sekarang perhatikan lebih lanjut dan bandingkan antara kolom
kode_produk pada hasil query dengan INNER JOIN di atas, dengan kolom kode_produk
pada tabel ms_produk. Menurutmu apa yang berbeda?”
“Hm, aku tidak menemukan prod-06 di tabel hasil query, padahal di tabel ms_produk
terdapat data prod-06 yaitu pulpen multifunction + laser DQLAB.”
“Tepat sekali, selanjutnya bandingkan dengan tabel tr_penjualan, apakah kamu menemukan
data prod-06 di tabel tr_penjualan?” tanya Senja kembali menguji kepemahamanku.Dan,
untungnya aku tak pernah mengantuk saat mendengar penjelasan Senja sepanjang materi.
Kalau iya, habislah sudah!
Bibir Senja melengkung. Aku bisa mendapati senyum puas Senja atas jawabanku. Senyum
apresiasi dari Senja selalu mampu menghangatkan hatiku. Senangnya! Walau sederhana tapi
bermakna.
“Tepat Sekali, Aksara. Sepertinya kamu sudah paham dengan penggunaan INNER JOIN.
Silahkan lanjutkan materinya di modul. Oh iya, pada bagian SELECT, kamu boleh memilih
kolom mana saja yang ingin kamu tampilkan setelah kedua tabel di-JOIN.”
menghendaki pemilihan kolom mana saja dari kedua tabel yang akan digabungkan. Disini
diperlukan penggunaan prefix nama tabelnya.
ON tabel_1.nama_kolom1 = tabel2.nama_kolom1;
adalah acuan penggabungan tabel1 dan tabel2 berdasarkan kolom yang memiliki tingkat
kecocokan yang tinggi. Kedua kolom dengan tingkat kecocokan yang tinggi pada masing-
masing tabel disebut juga dengan key column.
Catatan:
Perlu diperhatikan jika menampilkan kolom dengan nama yang sama di kedua tabel, maka
pada bagian Select, tidak bisa hanya mengetikkan nama kolom saja, tetapi juga harus
didahului oleh prefix nama tabel dimana kolom itu berasal untuk menghindari error karena
ambiguitas," Senja mengingatkanku sekali lagi.
Tugas Praktek: Menggunakan INNER JOIN (3/3)
“Oke, semua dariku sudah. Sekarang silakan dipraktikkan pada code editor untuk
menggabungkan tabel tr_penjualan dan ms_produk dengan kolom yang ditampilkan dari
tabel tr_penjualan adalah kode_transaksi, kode_pelanggan, kode_produk, qty. Untuk
tabel ms_produk tampilkan kolom nama_produk dan harga."
Aku mengangguk mantap. Senja sudah membekaliku sampai di sini. Ini saatnya aku mandiri.
Kemudian aku membentuk kolom total yang merupakan hasil perkalian setiap baris pada
kolom harga di tabel ms_produk dengan kolom qty di tabel tr_penjualan.
Kesimpulan
Pada chapter INNER JOIN ini kita telah mempelajari bagaimana menggabungkan dua tabel
berdasarkan key column-nya.
Pada tahap awal kita menggunakan INNER JOIN untuk menggabungkan keseluruhan
kolom yang dimiliki oleh kedua tabel tersebut.
Selanjutnya, kita menerapkan INNER JOIN dengan menggunakan prefix nama tabel
untuk memilih kolom-kolom mana saja yang akan ditampilkan pada tabel hasil
penggabungan.
Untuk chapter selanjutnya kita akan menggabungkan tabel dengan menggunakan UNION.
Pendahuluan
Aku sedang mengerjakan kuis-kuis kecil ketika Senja datang membawa dua gelas minuman
hangat. Dari aromanya bisa kutebak kalau itu kopi.
“Kopi saya. Ini teh susu buatmu.” Pagi di ruangan kantor yang masih sejuk-sejuk dingin
memang paling pas minum yang anget! Dan, Senja masih ingat kalau aku enggak ngopi.
“Hari ini masih lanjut belajarnya, Aksara. Masih semangat kan?” tanya Senja sambil
menyeruput kopinya lagi.
“Saya melihat prosesmu bagus. Jadi kita sudah bisa lanjut ke bagian yang lebih kompleks,
yaitu mengakses data dalam database dengan SQL (Structure Query Language).” Senja
mengatakannya dengan begitu santai, padahal aku yang mendengarnya pun sudah
mengerutkan alis.
“Pembelajaran kita hari ini akan dimulai dengan studi kasus praktik jadi learning by doing.
Ini ada data berupa analisis hasil penjualan suatu store. Akan tetapi ketika kita coba cek di
database, terdapat 2 tabel penjualan, yaitu :
Tabel A berisi data transaksi untuk kode transaksi ‘tr-001’ sampai ‘tr-003’, dan
Tabel B berisi data data transaksi untuk kode transaksi ‘tr-004’ sampai ‘tr-006’," buka
Senja.
“Lalu, bagaimana cara yang cepat dan efektif untuk membuat analisis dari kedua tabel
tersebut menggunakan SQL? Apakah bisa menggunakan metode JOIN seperti yang
kupelajari sebelumnya?”
“UNION itu apa dan bagaimana mengoperasikannya?” tanyaku penuh rasa ingin tahu.
“UNION adalah operator SQL yang digunakan untuk menggabungkan hasil dari 2 atau lebih
SELECT - statement secara “Vertikal”, dengan catatan,” Senja membuka buku catatannya
dan menggesernya padaku untuk dicerna.
Setiap hasil dari SELECT statement yang akan digabungkan (UNION) memiliki
jumlah kolom yang sama
Kolom tersebut juga harus memiliki tipe data yang sama, dan
Kolom tersebut memiliki urutan posisi yang sama.
“Biar lebih mudah dipahami, mari kita praktekkan dengan tabel yang ingin dianalisis ini.
Kamu bisa perhatikan ya langkah per langkahnya, Aksara.”
Sesuai dengan syarat untuk penggabungan dengan UNION yang telah dijelaskan tadi bahwa:
Melalui pengecekan pada tabel_A dan tabel_B pastikan bahwa ketiga syarat penggabungan
dengan UNION yang dinyatakan di atas terpenuhi. Langkah ini kita lakukan sebelum
melanjutkan pada praktek berikutnya menggunakan UNION.
Menggunakan UNION
Kedua tabel_A dan tabel_B sudah memiliki jumlah kolom yang sama, dan juga urutan posisi
kolom juga sama, jadi bisa langsung menggabungkan kedua kolom tersebut dengan
menambahkan UNION.
Jika query yang ku ketikkan benar dan kemudian dijalankan tabel penggabungan yang ku
peroleh ditujukkan sebagai berikut :
Aku bertanya pada Senja, “Terus, kalo ada kondisi WHERE, syntaxnya bagaimana?
Misalnya aku hanya ingin menggabungkan tabel yang isinya data penjualan untuk kode
produk prod-04 saja?”
”Mudah saja, tinggal tambahkan WHERE di kedua SELECT-statement, seperti berikut ini,”
Jika query-nya dengan benar dituliskan dan kemudian dijalankan maka akan diperoleh:
Tugas Praktek:
Lakukanlah hal yang sama dengan yang dicontohkan, akan dipilih kode_pelanggan =
'dqlabcust03' sebagai kondisinya.
Jika query-nya diketikkan dengan benar maka tabel penggabungan yang tampil dengan
kondisi kode_pelanggan = 'dqlabcust03' adalah:
“Hmm, aku masih bingung, Nja. Kebetulan data penjualan ini berada di kedua tabel A & B
jumlah kolom dan posisinya sama serta nama kolomnya sama. Bagaimana kalau posisi kolom
dari kedua tabelnya tidak sama? Apa tidak bisa di-UNION-kan?”
“Tentu saja bisa, kamu bisa menyelaraskan kolom dari kedua tabel di SELECT-statement.
Mari kita contohkan dengan data dari tabel berikut ini.”
tabel Customers
dan tabel Supplier
Jumlah kolom dari kedua tabel tersebut sama - sama 7 kolom, tetapi kolom posisi kolom
ContactName dari kedua tabel tidak sama. Di tabel Customer, posisi kolom ContactName
berada di Kolom ke - 3 sedangkan di tabel supplier berada di kolom ke-2.
Jika langsung menggabungkan keduanya, tanpa menyelaraskan kolom hasilnya akan sebagai
berikut:
Tentunya, ini hasil UNION yang tidak diinginkan, oleh karena itu, urutkan posisi kolom
tersebut di SELECT-Statement dan juga pilih kolom yang ingin digabungkan, sehingga tidak
perlu semua kolom dari kedua tabel di-UNION-kan, seperti berikut ini :
Jika terdapat perbedaan nama kolom antara SELECT-statement pertama dan SELECT-
statement kedua, maka secara default akan digunakan nama kolom dari SELECT-statement
yang pertama.
Ketikkan syntax query di atas pada Code Editor, untuk melihat hasil dari penggabungan tabel
(UNION) dengan menyelaraskan kolom.
“ Nja, aku sudah paham bagaimana menggunakan UNION tetapi aku masih belum mengerti
bedanya dengan metode JOIN, bukankah keduanya sama – sama untuk menggabungkan data
dari 2 tabel? Lalu, kapan aku perlu pakai JOIN dan kapan aku perlu pakai UNION?”
“Memang benar UNION dan JOIN digunakan untuk menggabungkan data dari dua atau lebih
tabel. Tapi yang membedakan adalah bagaimana tabel - tabel itu digabungkan. Kita
menggunakan JOIN ketika akan menggabungkan tabel secara horizontal, sehingga hasil join
akan memuat kolom - kolom dari kedua atau lebih tabel yang digabungkan. Berikut
gambaran penggabungan tabel dengan metode JOIN,” Senja menampilkan contoh tabel di
layar laptop.
Pada metode JOIN, penggabungan dilakukan berdasarkan key/kolom tertentu yang terdapat
di tabel-tabel yang akan digabungkan dan key/kolom ini memiliki nilai yang saling terkait.
Seperti yang terlihat pada gambar, Kolom A dan Kolom E merupakan key/kolom yang saling
terkait sehingga kedua tabel dapat digabungkan dengan mencocokan nilai dari kedua kolom
ini. Proses JOIN tidak dapat dilakukan jika tidak terdapat key/kolom yang saling terkait di
kedua atau lebih tabel yang akan digabungkan.
Untuk UNION seperti yang sudah dijelaskan, digunakan ketika ingin menggabungkan tabel
secara secara vertikal yaitu menggabungkan baris/row dari dua atau lebih tabel. Tidak seperti
JOIN, untuk penggabungan dengan UNION, tidak diperlukan key/kolom yang saling terkait
tetapi UNION mensyaratkan bahwa jumlah kolom dari tabel - tabel yang akan
digabungkankan adalah sama dan berada diposisi yang sama pula. Berikut ilustrasi
penggabungan dengan UNION:
Pada proses penggabungan UNION, tidak terdapat penambahan kolom tetapi jumlah
baris/rows yang akan bertambah.
Kesimpulan
Pada chapter UNION ini telah dipelajari bagaimana menggabungkan dua tabel secara
vertikal (bertambah barisnya). Tentunya ada syarat yang harus dipenuhi oleh kedua tabel
yang digabungkan dengan UNION, yaitu:
Setiap hasil dari SELECT statement yang akan digabungkan (UNION) memiliki
jumlah kolom yang sama
Kolom tersebut juga harus memiliki tipe data yang sama, dan
Kolom tersebut memiliki urutan posisi yang sama.
Selain itu, mempelajari bagaimana penyelerasan kolom sehingga record/baris yang
ditampilkan pada tabel hasil penggabungan memiliki arti.
Perbedaan mendasar dari JOIN dan UNION adalah JOIN menggabungkan 2 tabel atau lebih
berdasarkan baris yang saling berelasi/terkait sedangkan UNION menggabungkan 2 tabel
secara vertikal.
Suatu hari, departemen marketing & promotion meminta bantuan untuk meng-query data-
data pelanggan yang membeli produk Kotak Pensil DQLab, Flashdisk DQLab 32 GB, dan
Sticky Notes DQLab 500 sheets.
Buatlah query menggunakan tabel ms_pelanggan dan tr_penjualan untuk mendapatkan data
- data yang diminta oleh marketing yaitu kode_pelanggan, nama_customer, alamat.
Tabel ms_pelanggan
Tabel tr_penjualan
Project UNION
Siapkan data katalog mengenai mengenai nama - nama produk yang dijual di suatu store.
Data tersebut akan digunakan dalam meeting untuk mereview produk mana saja yang akan
dilanjutkan penjualannya dan mana yang akan di diskontinu.
Siapkan hanya data produk dengan harga di bawah 100K untuk kode produk prod-1 sampai
prod-5; dan dibawah 50K untuk kode produk prod-6 sampai prod-10.
Saat mengecek data produk di database, terdapat 2 tabel yang sama - sama berisi data
katalog, yaitu :
Tabel ms_produk_1
Tabel ms_produk_2
Hasil Belajarku
Wah, tidak terasa aku telah menyelesaikan modul Fundamental SQL Using INNER JOIN
and UNION. Selama belajar dengan modul ini, aku sudah dapat memahami dan mampu
mempraktikkan:
Penggabungan dua tabel dengan menggunakan WHERE clause dan teknik cross join.
Penggabungan dua tabel relasi dengan menggunakan INNER JOIN.
Penggabungan dua tabel secara vertikal dengan menggunakan UNION.
Mengerjakan mini project yang merupakan integrasi keseluruhan materi dan tentunya
materi-materi pada modul-modul sebelumnya untuk menyelesaikan persoalan bisnis.
Dengan kemampuan ini, aku lebih pede untuk mengolah data dengan SQL. Keterampilan ini
sendiri adalah 60% aktivitas awal yang akan dilakukan seorang analis. Keep Fighting!
Untuk apa Having digunakan dalam query
HAVING digunakan untuk menggantikan WHERE ketika menggunakan Group BY
yang datanya di aggregasi.
Secara umum HAVING digunakan setelah melakukan GROUP BY berikut sintaks yang
digunakan:
SELECT nama_kolom
FROM nama_table
GROUP BY nama_kolom
HAVING kondisi
+-------------+
| customer_id |
+-------------+
| 1 |
| 7 |
| 12 |
| 20 |
| 31 |
| 40 |
+-------------+
Dari hasil resultnya ada 6 konsumen yang mengubah langgganannya, dari query tersebut
hanya menampilkan customer_id yang di grouping dengan customer_id yang memiliki
jumlah lebih dari 1.
Sekarang teman-teman melengkapi query yang ada di code editor dengan menampilkan:
1. customer_id
2. product_id
3. subscription_date
Tugas Praktek
Isikan bagian yang kosong dengan melakukan JOIN table subscription dan customer
dengan menggabungkan
customer_id dari table subscription dan id dari table customer
Penggunaan Fungsi MAX pada Having
Dalam klausa kondisi Having dapat menggunakan fungsi MAX sebagai filter hasil dari
aggregasi dari GROUP BY.
Penggunaannya sama dengan fungsi max dengan yang digunakan pada Select secara umum,
tetapi ini digunakan untuk melakukan filter data.
Tugas Praktek
Tambahkanlah baris berikutnya (baris ketiga) setelah kamu menuliskan kedua baris di atas.
Perintah di baris ketiga ini ditujukan untuk menentukan nilai maksimal dari pinalty.
Gunakanlah filter untuk nilai MAX pinalty di atas 30000
Mini Quiz
Sekarang untuk lebih mengerti tentang penggunaan Having, mari kita coba selesaikan soal
berikut.
Lakukan query untuk dapat mengeluarkan product_id, rata-rata nilai pinalty dan jumlah
customer_id yang di group by berdasarkan product_id
yang memiliki jumlah customer_id diatas nilai 20.
Hasil yang diharapkan akan seperti dibawah ini:
+------------+--------------------+-------+
| product_id | AVG(pinalty) | total |
+------------+--------------------+-------+
| 10002 | 26136.363636363636 | 86 |
| 10003 | 31500 | 51 |
| 10004 | 52000 | 34 |
+------------+--------------------+-------+
Penutup
Congratulation!
Kali ini kamu sudah berhasil mendapatkan ilmu pengetahuan baru dan juga mempelajari
materi yang baru lagi mengenai Having serta contoh penggunaannya.
Tetap semangat belajar data science di DQLab, karena akan selalu ada modul-modul baru
yang akan dirilis.
Jangan lupa tunjukkan semangat belajarmu dengan mengupload sertifikat yang kamu
dapatkan ke LinkedIn atau bangun portfolio datamu dan juga tag ke social media DQLab.