BASIS DATA
PRE TEST
• Sebutkan 4 jenis perintah pengolahan data dengan SQL.
Jelaskan!
• Jelaskan apa yang disebut dengan operator
perbandingan. Berikan contohnya.
• Jelaskan apa yang dimaksud dengan perintah IN dan
NOT IN. Berikan contohnya.
• Jelaskan apa yang dimaksud dengan perintah IS NULL.
Berikan contohnya.
TUJUAN PERKULIAHAN
• Mahasiswa dapat melakukan operasi pengolahan data
dengan JOIN.
• Mahasiswa dapat melakukan operasi pengolahan data
dengan fungsi-fungsi agregasi.
• Mahasiswa dapat mengimplementasikan operasi JOIN
dan fungsi agregasi pada kasus-kasus yang diberikan.
BAHAN KASUS
• Semua materi pada materi ini akan menggunakan basis
data toko makanan.
• Terdiri dari 3 buah tabel, yaitu:
– Pemasok
– Kategori
– Barang
BAHAN KASUS – SKEMA ERD
kd_barang nama_barang stok tgl_kadaluarsa harga_jual
Barang
Memiliki Menyediakan
Kategori Pemasok
2. Fungsi Agregasi
– MAX
– MIN
– COUNT
– SUM
– AVG
3. Studi Kasus
JOIN
• Operasi penggabungan dari beberapa tabel untuk
mendapatkan informasi tertentu.
• Operasi JOIN merupakan cara yang digunakan sebagai
akibat dari adanya tahapan dekomposisi tabel
(normalisasi, atau pemetaan tabel dalam ERD).
JOIN
• CROSS JOIN
• INNER JOIN
• NATURAL JOIN
• OUTER JOIN
– LEFT OUTER JOIN
– RIGHT OUTER JOIN
CROSS JOIN
• Operasi JOIN yang paling dasar. Menghasilkan kombinasi
semua baris yang terdapat pada tabel-tabel yang
digabungkan, baik yang memiliki pasangan maupun yang
tidak.
• Join jenis ini juga disebut dengan istilah cartesian product.
• Format umum:
SELECT kolom FROM tabel_1, tabel_2;
1 2 α 1 α 2
α α
α 1 β 3
α 2 β 3
α 2 α 2
β 1
α 2 β 3
β 1 α 2
β 1 β 3
CROSS JOIN
• Agar setiap data pada tabel pemasok hanya berelasi
terhadap data yang sesuai pada tabel barang, maka
kedua tabel dihubungkan melalui kunci tamu-nya.
• Contoh:
SELECT * FROM pemasok, barang
WHERE pemasok.kd_pemasok=barang.kd_pemasok;
• Atau
SELECT * FROM pemasok
CROSS JOIN barang ON pemasok.kd_pemasok=barang.kd_pemasok;
CROSS JOIN
Latihan!
• Dengan CROSS JOIN, tampilkan data barang dan
kategori yang sesuai.
• Dengan CROSS JOIN, tampilkan data barang, kategori,
dan pemasok.
• Dengan CROSS JOIN, tampilkan data barang, kategori,
dan pemasok yang harga barang > 5000 dan asal
pemasok dari Yogyakarta.
INNER JOIN
• INNER JOIN adalah tipe penggabungan tabel yang dihubungkan
dengan kriteria tertentu berupa persamaan nilai-nilai atribut.
Umumnya, penggabungan tabel didasarkan pada kunci tamu.
• Format umum:
SELECT kolom FROM tabel_1
INNER JOIN tabel_2 ON tabel_1.kolom_kunci=tabel_2.kolom_kunci;
• Atau
SELECT kolom FROM tabel_1
INNER JOIN tabel_2
WHERE tabel_1.kolom_kunci=tabel_2.kolom_kunci;
INNER JOIN
Tabel R Tabel S Tabel R INNER JOIN S ON R.A=S.A
A B A B R.A R.B S.A S.B
1 2 α 1 α 2
α α
2 3 α 2 α 2
α β
β 1 β 3
β 1
INNER JOIN
• Contoh:
SELECT * FROM pemasok
INNER JOIN barang ON pemasok.kd_pemasok=barang.kd_pemasok;
• Atau
SELECT * FROM pemasok
INNER JOIN barang
WHERE pemasok.kd_pemasok=barang.kd_pemasok;
CROSS JOIN VS. INNER JOIN
• Contoh:
SELECT * FROM pemasok
NATURAL JOIN barang;
NATURAL JOIN
Tabel R Tabel S Tabel R NATURAL JOIN S
A B A B R.A R.B S.A S.B
1 2 α 1 α 2
α α
2 3 α 2 α 2
α β
β 1 β 3
β 1
NATURAL JOIN
Latihan!
• Dengan NATURAL JOIN, tampilkan data barang dan
kategori yang sesuai.
• Dengan NATURAL JOIN, tampilkan data barang,
kategori, dan pemasok.
OUTER JOIN
• OUTER JOIN adalah tipe penggabungan tabel yang dihubungkan
dengan kriteria tertentu berupa persamaan nilai-nilai atribut.
Umumnya, penggabungan tabel didasarkan pada kunci tamu.
• Operasi OUTER JOIN memperbolehkan salah anggota tabel untuk
tidak memiliki pasangan pada tabel yang digabungkan.
• OUTER JOIN:
– LEFT OUTER JOIN
– RIGHT OUTER JOIN
LEFT OUTER JOIN
• Menampilkan semua data pada tabel 1 (kiri) meskipun
data tersebut tidak memiliki pasangan pada tabel 2
(kanan).
• Format umum:
SELECT kolom FROM tabel_1
LEFT OUTER JOIN tabel_2 ON tabel_1.kolom_kunci=tabel_2.kolom_kunci;
LEFT OUTER JOIN
• Contoh:
SELECT * FROM kategori
LEFT OUTER JOIN barang
ON kategori.kd_kategori=barang.kd_kategori;
+-------------+---------------+-----------+----------------------+------------+----------------+------------+-------------+
| kd_kategori | nama_kategori | kd_barang | nama_barang | harga_jual | tgl_kadaluarsa | kd_pemasok | kd_kategori |
+-------------+---------------+-----------+----------------------+------------+----------------+------------+-------------+
| K01 | Kue Basah | B003 | Sari Roti Coklat | 12500 | 2017-04-05 | P11 | K01 |
| K02 | Kue Kering | B004 | Biskuat 100 mg | 2000 | 2018-01-23 | P33 | K02 |
| K03 | Minuman | B002 | Aqua 1500 ml | 5000 | 2017-09-14 | P33 | K03 |
| K03 | Minuman | B005 | Fanta 600 ml | 6000 | 2017-08-28 | P44 | K03 |
| K03 | Minuman | B006 | Mizone 600 ml | 6500 | 2017-08-12 | P33 | K03 |
| K04 | Snack | B001 | Kacang Garuda 250 mg | 18000 | 2017-11-22 | P22 | K04 |
| K04 | Snack | B007 | Tao Kae Noi | 15000 | 2018-02-02 | P11 | K04 |
| K05 | Permen | NULL | NULL | NULL | NULL | NULL | NULL |
+-------------+---------------+-----------+----------------------+------------+----------------+------------+-------------+
RIGHT OUTER JOIN
• Menampilkan semua data pada tabel 2 (kanan)
meskipun data tersebut tidak memiliki pasangan pada
tabel 1 (kiri).
• Format umum:
SELECT kolom FROM tabel_1
RIGHT OUTER JOIN tabel_2 ON tabel_1.kolom_kunci=tabel_2.kolom_kunci;
FUNGSI AGREGASI
• Fungsi agregasi adalah sebuah teknik dalam SQL yang
digunakan untuk mendapatkan nilai tertentu dari data
yang telah dikelompokkan.
• Pengelompokan data dapat didasarkan pada satu
kolom atau kombinasi dari beberapa kolom yang dipilih.
FUNGSI AGREGASI
• Jenis-jenis fungsi agregasi.
– MAX, mencari data terbesar dari sekelompok data.
– MIN, mencari data terkecil dari sekelompok data.
– COUNT, mencari cacah data dari sekelompok data.
– SUM, mencari jumlah dari sekumpulan data numerik.
– AVG, mencari nilai rerata dari sekumpulan data numerik.
FUNGSI AGREGASI
• Format umum:
SELECT Fungsi_Agregasi(<kolom>) FROM <tabel>
GROUP BY <kolom>;
• Format umum:
SELECT Fungsi_Agregasi(<kolom>) AS 'Alias',kolom_n FROM <tabel>
GROUP BY <kolom>;
FUNGSI AGREGASI TANPA PENGELOMPOKAN
• Penggunaan fungsi agregasi tanpa pengelompokan
(GROUP BY) dapat diartikan sebagai pengelompokan
terhadap seluruh data pada tabel.
• Contoh:
SELECT MAX(thnakademik) FROM kuliah;
+------------------+
| MAX(thnakademik) |
hasil agregasi +------------------+
| 2014/2015 |
+------------------+
FUNGSI AGREGASI PENGELOMPOKAN 1 KOLOM
• Penggunaan klausa GROUP BY pada kolom tertentu
akan mengelompokkan record yang memiliki nilai sama
menjadi satu kelompok.
• Setelah itu, barulah fungsi agregasi akan dilakukan
untuk masing-masing kelompok data.
• Contoh:
SELECT MAX(thnakademik),nilai FROM kuliah
GROUP BY nilai;
FUNGSI AGREGASI PENGELOMPOKAN 1 KOLOM
Dimiliki data SIAKAD sebagai berikut..
+-----+---------+-------------+-------+
| nim | kodemk | thnakademik | nilai |
+-----+---------+-------------+-------+
| 123 | IF2240R | 2013/2014 | C |
| 123 | IF2240R | 2014/2015 | A |
| 123 | IF3110R | 2014/2015 | A |
| 123 | IF4150R | 2014/2015 | B |
| 456 | IF3110R | 2011/2012 | C |
| 456 | IF3110R | 2012/2013 | C |
| 456 | IF3110R | 2014/2015 | A |
| 456 | IF4150R | 2014/2015 | A |
| 789 | IF2240R | 2011/2012 | D |
| 789 | IF2240R | 2012/2013 | C |
| 789 | IF2240R | 2013/2014 | C |
| 789 | IF2240R | 2014/2015 | A |
+-----+---------+-------------+-------+
FUNGSI AGREGASI PENGELOMPOKAN 1 KOLOM
+-----+---------+-------------+-------+
| nim | kodemk | thnakademik | nilai |
+-----+---------+-------------+-------+
| 789 | IF2240R | 2014/2015 | A |
+------------------+-------+
| 456 | IF4150R | 2014/2015 | A |
| MAX(thnakademik) | nilai |
| 456 | IF3110R | 2014/2015 | A |
+------------------+-------+
| 123 | IF3110R | 2014/2015 | A |
| 2014/2015 | A |
| 123 | IF2240R | 2014/2015 | A |
| 2014/2015 | B |
| 123 | IF4150R | 2014/2015 | B |
| 2013/2014 | C |
| 456 | IF3110R | 2011/2012 | C |
hasil agregasi | 2011/2012 | D |
| 456 | IF3110R | 2012/2013 | C |
+------------------+-------+
| 789 | IF2240R | 2012/2013 | C |
| 789 | IF2240R | 2013/2014 | C |
| 123 | IF2240R | 2013/2014 | C |
| 789 | IF2240R | 2011/2012 | D |
+-----+---------+-------------+-------+
FUNGSI AGREGASI PENGELOMPOKAN 2 KOLOM
• Contoh:
SELECT MIN(thnakademik),nim,kodemk FROM kuliah
GROUP BY nim,kodemk;
FUNGSI AGREGASI PENGELOMPOKAN 2 KOLOM
+-----+---------+-------------+-------+
| nim | kodemk | thnakademik | nilai |
+-----+---------+-------------+-------+
| 123 | IF2240R | 2013/2014 | C |
| 123 | IF2240R | 2014/2015 | A |
| 123 | IF3110R | 2014/2015 | A |
| 123 | IF4150R | 2014/2015 | B |
| 456 | IF3110R | 2011/2012 | C |
| 456 | IF3110R | 2012/2013 | C |
| 456 | IF3110R | 2014/2015 | A |
| 456 | IF4150R | 2014/2015 | A |
| 789 | IF2240R | 2011/2012 | D |
| 789 | IF2240R | 2012/2013 | C |
| 789 | IF2240R | 2013/2014 | C |
| 789 | IF2240R | 2014/2015 | A |
+-----+---------+-------------+-------+
FUNGSI AGREGASI PENGELOMPOKAN 2 KOLOM
+-----+---------+-------------+-------+
| nim | kodemk | thnakademik | nilai |
+-----+---------+-------------+-------+
| 123 | IF2240R | 2013/2014 | C |
+------------------+-----+---------+
| 123 | IF2240R | 2014/2015 | A | | MIN(thnakademik) | nim | kodemk |
| 123 | IF3110R | 2014/2015 | A | +------------------+-----+---------+
| 123 | IF4150R | 2014/2015 | B | | 2013/2014 | 123 | IF2240R |
| 456 | IF3110R | 2011/2012 | C | | 2014/2015 | 123 | IF3110R |
| 456 | IF3110R | 2012/2013 | C | | 2014/2015 | 123 | IF4150R |
| 456 | IF3110R | 2014/2015 | A | | 2011/2012 | 456 | IF3110R |
| 456 | IF4150R | 2014/2015 | A | hasil agregasi | 2014/2015 | 456 | IF4150R |
| 2011/2012 | 789 | IF2240R |
| 789 | IF2240R | 2011/2012 | D |
+------------------+-----+---------+
| 789 | IF2240R | 2012/2013 | C |
| 789 | IF2240R | 2013/2014 | C |
| 789 | IF2240R | 2014/2015 | A |
+-----+---------+-------------+-------+
FUNGSI AGREGASI PENGELOMPOKAN N-KOLOM
• Bagaimana dengan fungsi agregasi dengan
pengelompokan pada N buah kolom?
• Tuliskan perintah SQLnya. Simulasikan!
LATIHAN
Tabel SIAKAD
+-----+---------+-------------+-------+ Pertanyaan
| nim | kodemk | thnakademik | nilai |
+-----+---------+-------------+-------+ 1. Tampilkan nilai terbaik yang didapatkan
| 123 | IF2240R | 2013/2014 | C | oleh seorang mahasiswa untuk mata kuliah
| 123 | IF2240R | 2014/2015 | A | tertentu.
| 123 | IF3110R | 2014/2015 | A |
2. Tampilkan matakuliah dengan nilai-nilai
| 123 | IF4150R | 2014/2015 | B |
terburuk yang pernah ditempuh oleh
| 456 | IF3110R | 2011/2012 | C |
mahasiswa dengan nim 123.
| 456 | IF3110R | 2012/2013 | C |
| 456 | IF3110R | 2014/2015 | A | 3. Tampilkan jumlah cacah nilai yang pernah
| 456 | IF4150R | 2014/2015 | A | diberikan untuk matakuliah tertentu
| 789 | IF2240R | 2011/2012 | D |
| 789 | IF2240R | 2012/2013 | C |
| 789 | IF2240R | 2013/2014 | C |
| 789 | IF2240R | 2014/2015 | A |
+-----+---------+-------------+-------+
KLAUSA HAVING
• Melakukan filter terhadap hasil daripada fungsi
agregasi.
• Format umum:
SELECT Fungsi_Agregasi(<kolom>) FROM tabel
GROUP BY <kolom>
HAVING <kondisi_filter_hasil_agregasi>
KLAUSA HAVING
• Contoh : tampilkan data mahasiswa yang pernah
mengulang sebuah matakuliah.
SELECT COUNT(kodemk) AS jml_mengulang,nim,kodemk FROM kuliah
GROUP BY nim,kodemk
HAVING COUNT(kodemk) >= 2;
KLAUSA HAVING
• Tampilkan data mahasiswa yang pernah mengulang
sebuah matakuliah. Urutkan datanya dari yang paling
banyak mengulang.
SELECT * FROM (
SELECT COUNT(kodemk) AS jml_mengulang,nim,kodemk FROM kuliah
GROUP BY nim,kodemk
HAVING COUNT(kodemk) >= 2
) x
ORDER BY jml_mengulang DESC;
KLAUSA HAVING
• Tampilkan data mahasiswa yang pernah mengulang
sebuah matakuliah. Urutkan datanya dari yang paling
banyak mengulang.
+---------------+-----+---------+
| jml_mengulang | nim | kodemk |
+---------------+-----+---------+
| 4 | 789 | IF2240R |
| 3 | 456 | IF3110R |
| 2 | 123 | IF2240R |
+---------------+-----+---------+
KLAUSA HAVING VS. WHERE
• Klausa HAVING digunakan sebagai kondisi filter dalam
fungsi agregasi.
• Klausa WHERE digunakan sebagai kriteria penentu
dalam filter pada perintah SELECT.
STUDI KASUS
Perhatikan skema ERD berikut ini.
Barang
Memiliki Menyediakan
Kategori Pemasok