Membatasi Pengambilan Jumlah Row Data Menggunakan LIMIT: Menggunakan Prefix Pada Nama Kolom
Membatasi Pengambilan Jumlah Row Data Menggunakan LIMIT: Menggunakan Prefix Pada Nama Kolom
Sistem database relasional atau Relational Database Management System (RDBMS) sendiri
adalah sistem penyimpanan data dengan struktur hirarki berikut:
Database
Table
Kolom
Dan tiap data yang disimpan pada table disebut sebagai baris data (data row).
DDL (Data Definition Language), yaitu berbagai perintah yang digunakan untuk
membuat, merubah, dan menghapus struktur database. Struktur database ini terdiri
dari database, table, kolom dan tipe data.
DML (Data Manipulation Language), yaitu berbagai perintah yang digunakan untuk
o Memasukkan data dengan perintah INSERT
o Mengambil data atau query dengan perintah SELECT
o Merubah data dengan perintah UPDATE
o Menghapus data dengan perintah DELETE
Dari contoh pada praktek sebelumnya, maka dapat disimpulkan perintah yang kita gunakan
adalah melakukan query dengan SELECT.
Membatasi pengambilan jumlah row data menggunakan LIMIT
Menggunakan Prefix pada Nama Kolom
Penulisan nama kolom yang lengkap sebenarnya perlu mencantumkan nama table di depan
nama kolom tersebut, dengan tanda penyambung berupa tanda titik.
Fungsi scalar matematik: MySQL :: MySQL 8.0 Reference Manual :: 12.6.2 Mathematical
Functions
Fungsi scalar untuk text MySQL :: MySQL 8.0 Reference Manual :: 12.8 String Functions
and Operators
Fungsi Aggregate
fungsi aggregate ini digunakan untuk melakukan perhitungan pada sekelompok nilai
Pengenalan GROUP BY
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.
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.
Penggunaan CASE … WHEN….
PR
Saya mau minta tolong agar kamu melakukan analisis penjualan di suatu store. Adapun
laporan yang diminta sebagai berikut:
Selamat, Aksara! Kamu telah berhasil menyelesaikan rangkaian latihan yang ada pada
module “Fundamental SQL Using FUNCTION and GROUP BY"!
Melihat antusias belajarmu, DQLab ingin memberikan tambahan waktu 1 bulan Belajar Data
Science GRATIS.
Caranya mudah:
1. Upload sertifikat DQLab ‘Fundamental SQL Using FUNCTION and GROUP BY’ di
Linkedin
2. Buatlah caption dengan menceritakan modul yang telah dipelajari dan hal menarik
yang kamu dapatkan
3. Pastikan kamu tag akun Linkedin DQLab dan akun Linkedin Data Mentor @Trisna
Yulia Junita dan tambahkan hashtag #BelajarDataDQLab dan #MulaiBelajarData
4. Batas akhir upload sertifikat: 24 Juni 2020
5. DQLab akan memilih 20 submissions dengan caption paling menarik untuk module
yang dipelajari dan kamu akan mendapatkan email dengan kode voucher untuk dapat
kamu redeem pada akun DQLab Academy tanggal 25 Juni 2020
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.
Penjelasan Proses Penggabungan Tabel
Mari diperhatikan kembali gambar di bawah ini untuk penjelasan proses penggabungan.
Panah berwarna magenta menunjukkan proses pencocokan dan penggabungan data. Sebagai
contoh: Baris data pertama dengan isi “bayam” pada key
column nama_item (tabel ms_item_kategori), akan mencari isi yang sama di key
column nama_barang (tabel ms_item_warna), dan ditemukan pada baris kedua kemudian
dihubungkan menjadi satu baris di tabel baru 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.
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.
Penggabungan Tanpa Kondisi
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.”
“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
Penggunaan prefix pada tabel_1.nama_kolom dan tabel_2.nama_kolom ditujukan agar
terdapat kejelasan (clarity) kolom pada tabel mana yang dijadikan acuan dalam proses
INNER JOIN. Tentunya, penggunaan prefix ini ini sangat bermanfaat jika ingin
menggabungkan beberapa tabel.
Jika masing-masing tabel tersebut dianalogikan sebagai dua himpunan maka proses INNER
JOIN ekivalen dengan INTERSECTION (IRISAN) antara dua himpunan.
Nah, sebelum kita menggunakan INNER JOIN dalam menggabungkan 2 tabel, seperti
yang sudah dijelaskan sebelumnya, kita perlu terlebih dahulu mengetahui kolom mana
yang merupakan key kolom yang akan digunakan dalam JOIN
“Biar lebih mudah dipahami, mari kita praktekkan dengan tabel yang ingin dianalisis ini.
Kamu bisa perhatikan ya langkah per langkahnya, Aksara.”
Aku menekuri layar laptop menunggu Senja beraksi memperlihatkan contoh.
Menggunakan UNION dengan Klausa WHERE
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:
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.
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!
SELECT nama_kolom
FROM nama_table
GROUP BY nama_kolom
HAVING kondisi
Query diatas akan menampilkan daftar nilai maksimum pada kolom tersebut yang
disesuaikan sesuai dengan kolom yang digrouping. Sekarang kita dapat menambahkan di
baris berikutnya tentunya dengan menggunakan fungsi Max untuk mendapatkan jumlah
total_price yang berada di atas 1.000.000.
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
Jawaban:
select product_id, MAX(total_price) AS total FROM invoice GROUP BY product_id;
select product_id, MAX(total_price) AS total FROM invoice GROUP BY product_id
HAVING MAX(total_price) > 1000000;
select product_id, MAX(pinalty) AS total FROM invoice GROUP BY product_id HAVING
MAX(pinalty) > 30000;
Jawaban:
+------------+---------+
| product_id | total |
+------------+---------+
| 10001 | 100000 |
| 10002 | 250000 |
| 10003 | 300000 |
| 10004 | 500000 |
| 10005 | 1200000 |
+------------+---------+
+------------+---------+
| product_id | total |
+------------+---------+
| 10005 | 1200000 |
+------------+---------+
+------------+----------+
| product_id | total |
+------------+----------+
| 10003 | 33000.0 |
| 10004 | 55000.0 |
| 10005 | 132000.0 |
+------------+----------+
Query diatas akan menampilkan daftar nilai minimum pada kolom tersebut yang disesuaikan
sesuai dengan kolom yang di grouping. Sekarang kita tambahkan fungsi Min di Having untuk
memfilter nilai minimum total_price yang dibawah 500.000.
Tugas Praktek
Seperti pada tugas praktek sebelumnya. Sekarang kamu tambahkan baris berikutnya agar
nilai minimal dari pinalty dapat ditentukan. Gunakan filter nilai MIN pinalty di
bawah 50000.
Jawaban:
+------------+---------+
| product_id | total |
+------------+---------+
| 10001 | 100000 |
| 10002 | 250000 |
| 10003 | 300000 |
| 10004 | 500000 |
| 10005 | 1200000 |
+------------+---------+
+------------+--------+
| product_id | total |
+------------+--------+
| 10001 | 100000 |
| 10002 | 250000 |
| 10003 | 300000 |
+------------+--------+
+------------+---------+
| product_id | total |
+------------+---------+
| 10002 | 25000.0 |
| 10003 | 30000.0 |
+------------+---------+
Dari query tersebut mendapatkan list nilai tagihan rata-rata setiap product_id. Sekarang
menggunakan having untuk memfilter nilai rata-rata dari total_price.
Tugas Praktek
Dengan menambahkan baris berikutnya atau baris ketiga kamu dapat menentukan nilai rata-
rata dari pinalty dengan menggunakan filter dapat ditentukan pinalty yang berada di
atas 30000. Silakan lakukan di Code editor.
Jawaban :
+------------+---------+
| product_id | total |
+------------+---------+
| 10001 | 100000 |
| 10002 | 250000 |
| 10003 | 300000 |
| 10004 | 500000 |
| 10005 | 1200000 |
+------------+---------+
+------------+---------+
| product_id | total |
+------------+---------+
| 10002 | 250000 |
| 10003 | 300000 |
| 10004 | 500000 |
| 10005 | 1200000 |
+------------+---------+
+------------+--------+
| product_id | total |
+------------+--------+
| 10003 | 31500 |
| 10004 | 52000 |
| 10005 | 126000 |
+------------+--------+
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 |
+------------+--------------------+-------+
Jawaban
+------------+--------------------+-------+
| product_id | AVG(pinalty) | total |
+------------+--------------------+-------+
| 10002 | 26136.363636363636 | 86 |
| 10003 | 31500 | 51 |
| 10004 | 52000 | 34 |
+------------+--------------------+-------+
Penutup
Kali ini kamu sudah berhasil mendapatkan ilmu pengetahuan baru dan juga mempelajari
materi yang baru lagi mengenai Having serta contoh penggunaannya.
Kesimpulan yang bisa didapatkan adalah :
Menghitung nilai Max, Min dan Avg pada penerapan fungsi HAVING