Anda di halaman 1dari 52

SQL LANJUT Rajif Agung Yunmar, S.Kom., M.Cs.

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

kd_kategori nama_kategori kd_pemasok nama_pemasok alamat


BAHAN KASUS – FORMAT DATA
Tabel Barang Tabel Pemasok
Kolom Tipe Data Kunci Kolom Tipe Data Kunci
kd_barang CHAR(3) Kunci Primer kd_pemasok CHAR(3) Kunci Primer
nama_barang VARCHAR(25) nama_pemasok VARCHAR(25)
stok INT kota VARCHAR(25)
harga_jual FLOAT
tgl_kadaluarsa DATE Tabel Kategori
kd_pemasok CHAR(3) Kunci Tamu Kolom Tipe Data Kunci
kd_kategori CHAR(3) Kunci Tamu kd_kategori CHAR(3) Kunci Primer
nama_kategori VARCHAR(25)
BAHAN KASUS – DATA
Tabel Pemasok Tabel Kategori
kd_pemasok nama_pemasok kota kd_kategori nama_kategori
P22 PT Citra Jaya Bogor K01 Kue Basah
P33 PT Kartika Yogya K02 Kue Kering
P11 PT Amerta Bandung K03 Minuman
P44 PT Nidya Tangerang K04 Snack
K05 Permen
BAHAN KASUS – DATA
Tabel Barang
kd_barang nama_barang stok harga_jual tgl_kadaluarsa kd_pemasok kd_kategori
B001 Kacang Garuda 250 mg 75 18.000 22 Nov 2017 P22 K04
B002 Aqua 1500 ml 50 5.000 14 Sep 2017 P33 K03
B003 Sari Roti Coklat 14 12.500 05 Apr 2017 P11 K01
B004 Biskuat 100 mg 32 2.000 23 Jan 2018 P33 K02
B005 Fanta 600 ml 27 6.000 28 Ags 2017 P44 K03
B006 Mizone 600 ml 16 6.500 12 Ags 2017 P33 K03
B007 Tao Kae Noi 5 15.000 02 Feb 2018 P11 K04
POKOK BAHASAN
1. JOIN
– CROSS JOIN
– INNER JOIN
– NATURAL JOIN
– OUTER JOIN

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;

SELECT kolom FROM tabel_1 CROSS JOIN tabel_2;


CROSS JOIN
• Contoh:
SELECT * FROM pemasok, barang;

SELECT * FROM pemasok CROSS JOIN barang;


CROSS JOIN
Tabel R Tabel S Tabel R x S
A B A B R.A R.B S.A S.B

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

Jika syntax SQLnya hampir sama, apa perbedaan mendasar


antara operasi CROSS JOIN dan INNER JOIN?
INNER JOIN
Latihan!
• Dengan INNER JOIN, tampilkan data barang dan kategori
yang sesuai.
• Dengan INNER JOIN, tampilkan data barang, kategori, dan
pemasok.
• Dengan INNER JOIN, tampilkan data barang, dan pemasok
yang stok barang > 10 dan tanggal kadaluarsa barang
diantara April dan September 2017.
NATURAL JOIN
• NATURAL JOIN adalah operasi INNER JOIN yang dilakukan pada
semua atribut yang sama dari kedua tabel (nama dan domainnya).
Pada tabel hasil, atribut-atribut yang sama hanya akan muncul sekali.
• Dalam menggabungkan tabel, operasi NATURAL JOIN tidak
memerlukan penyebutan atribut penghubung. Penggabungan tabel
dilakukan otomatis pada atribut yang sama (nama dan domainnya).
• NATURAL JOIN dapat digunakan sebagai alat untuk melihat apakah
tabel hasil normalisasi dan pemetaan tabel ERD yang anda lakukan
benar-benar berkualitas.
NATURAL JOIN
• Format umum:
SELECT kolom FROM tabel_1
NATURAL JOIN tabel_2;

• 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.

kd_barang nama_barang stok tgl_kadaluarsa harga_jual

Barang

Memiliki Menyediakan

Kategori Pemasok

kd_kategori nama_kategori kd_pemasok nama_pemasok alamat


STUDI KASUS
• Jawablah pertanyaan-pertanyaan berikut dengan SQL.
1. Tampilkan informasi barang dan kategori dari barang yang memiliki
harga barang dibawah Rp. 10.000,-
2. Tampilkan informasi barang dan pemasok pada barang dengan
kategori “Minuman”.
3. Tampilkan informasi rata-rata jumlah stok barang pada tiap kategori.
4. Tampilkan informasi barang yang masa kadaluarsanya akan jatuh
diantara bulan Mei s.d September 2017.
STUDI KASUS
• Jawablah pertanyaan-pertanyaan berikut dengan SQL.
5. Tampilkan informasi barang dari masing-masing kategori yang memiliki
stok paling banyak.
6. Tampilkan informasi barang dari kategori mana yang memiliki rata-rata
stok paling banyak.
7. Tampilkan informasi pemasok pada tiap kategori yang harga
barangnya paling mahal.
8. Tampilkan informasi pemasok pada tiap kategori yang masa
kadaluarsa barangnya jatuh pada bulan Agustus 2017.
STUDI KASUS
• Berikan 5 contoh masalah lain. Selesaikan dengan SQL.
• Buat PPT dan presentasikan secara bergiliran!
• Kelompok lain boleh bertanya mengenai permasalahan
lain yang mungkin terjadi, kelompok presenter
menjawab permasalahan tersebut dengan SQL.
TERIMA KASIH
PR
• Masukkan semua data riil pada tugas anda ke dalam basis
data.
• Carilah minimal 10 buah persoalan atau pertanyaan yang
mungkin muncul dalam kasus tugas anda. Semakin kompleks dan
tepat jawaban anda, maka nilai tugas akan makin tinggi.
• Buatlah solusinya menggunakan SQL.
• Susun dalam sebuah laporan beserta screenshotnya, dan
presentasikan!

Anda mungkin juga menyukai