SQL LANJUT
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
BAHAN KASUS
–
SKEMA ERD
Pemasok Barang
Menyediakan
kd_barang nama_barang harga_jual
kd_pemasok nama_pemasok alamat
Kategori
Memiliki
kd_kategori nama_kategori
tgl_kadaluarsa stok
BAHAN KASUS
–
FORMAT DATA
Kolom Tipe Data Kunci
kd_barang CHAR(3) Kunci Primer nama_barang VARCHAR(25)
stok INT
harga_jual FLOAT tgl_kadaluarsa DATE
kd_pemasok CHAR(3) Kunci Tamu kd_kategori CHAR(3) Kunci Tamu
Tabel Barang
Kolom Tipe Data Kunci
kd_pemasok CHAR(3) Kunci Primer nama_pemasok VARCHAR(25)
kota VARCHAR(25)
Tabel Pemasok
Kolom Tipe Data Kunci
kd_kategori CHAR(3) Kunci Primer nama_kategori VARCHAR(25)
BAHAN KASUS
–
DATA
kd_pemasok nama_pemasok kota
P22 PT Citra Jaya Bogor P33 PT Kartika Yogya P11 PT Amerta Bandung P44 PT Nidya Tangerang
Tabel Pemasok
kd_kategori nama_kategori K01 Kue Basah K02 Kue Kering K03 Minuman K04 Snack K05 PermenTabel Kategori
BAHAN KASUS
–
DATA
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 JOIN2.
Fungsi Agregasi
– MAX – MIN – COUNT – SUM – AVG3.
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
JOIN
•
CROSS JOIN
•
INNER JOIN
•
NATURAL JOIN
•
OUTER JOIN
–
LEFT 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
;
CROSS JOIN
•
Contoh:
SELECT
*
FROM
pemasok
,
barang
;
CROSS JOIN
A B α 1 α 2 β 1 A B α 2 β 3 R.A R.B S.A S.B α 1 α 2 α 1 β 3 α 2 α 2 α 2 β 3 β 1 α 2 β 1 β 3CROSS 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
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
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
;
SELECT
kolom
FROM
tabel_1
INNER JOIN
tabel_2
WHERE
tabel_1.kolom_kunci=tabel_2.kolom_kunci
;
INNER JOIN
A B α 1 α 2 β 1 A B α 2 β 3 R.A R.B S.A S.B α 1 α 2 α 2 α 2 β 1 β 3INNER JOIN
•
Contoh:
SELECT
*
FROM
pemasok
INNER JOIN
barang
ON
pemasok
.
kd_pemasok
=
barang
.
kd_pemasok
;
•
Atau
SELECT
*
FROM
pemasok
INNER JOIN
barang
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
A B α 1 α 2 β 1 A B α 2 β 3Tabel R
Tabel S
Tabel R NATURAL JOIN S
R.A R.B S.A S.B
α 1 α 2
α 2 α 2
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
+---+---+---+---+---+---+---+---+ | 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 | +---+---+---+---+---+---+---+---+
•
Contoh:
SELECT
*
FROM
kategori
LEFT OUTER JOIN
barang
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
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
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.
FUNGSI AGREGASI
•
Format umum:
SELECT Fungsi_Agregasi
(<
kolom
>)
FROM
<tabel>
GROUP BY
<
kolom
>;
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) |
+---+
| 2014/2015 |
+---+
hasil agregasi
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
FUNGSI AGREGASI PENGELOMPOKAN 1 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 1 KOLOM
+---+---+ | MAX(thnakademik) | nilai | +---+---+ | 2014/2015 | A | | 2014/2015 | B | | 2013/2014 | C | | 2011/2012 | D | +---+---+ +---+---+---+---+| nim | kodemk | thnakademik | nilai | +---+---+---+---+ | 789 | IF2240R | 2014/2015 | A | | 456 | IF4150R | 2014/2015 | A | | 456 | IF3110R | 2014/2015 | A | | 123 | IF3110R | 2014/2015 | A | | 123 | IF2240R | 2014/2015 | A | | 123 | IF4150R | 2014/2015 | B | | 456 | IF3110R | 2011/2012 | C | | 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 | +---+---+---+---+
hasil agregasi
FUNGSI AGREGASI PENGELOMPOKAN 2 KOLOM
•
Contoh:
SELECT MIN
(
thnakademik
),
nim
,
kodemk
FROM
kuliah
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
+---+---+---+ | MIN(thnakademik) | nim | kodemk | +---+---+---+ | 2013/2014 | 123 | IF2240R | | 2014/2015 | 123 | IF3110R | | 2014/2015 | 123 | IF4150R | | 2011/2012 | 456 | IF3110R | | 2014/2015 | 456 | IF4150R | | 2011/2012 | 789 | IF2240R | +---+---+---+ +---+---+---+---+ | 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 | +---+---+---+---+
hasil agregasi
FUNGSI AGREGASI PENGELOMPOKAN N-KOLOM
•
Bagaimana dengan fungsi agregasi dengan
pengelompokan pada N buah kolom?
LATIHAN
+---+---+---+---+ | 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 | +---+---+---+---+
Tabel SIAKAD
Pertanyaan
1.
Tampilkan nilai terbaik yang didapatkan
oleh seorang mahasiswa untuk mata kuliah
tertentu.
2.
Tampilkan matakuliah dengan nilai-nilai
terburuk yang pernah ditempuh oleh
mahasiswa dengan nim 123.
3.
Tampilkan jumlah cacah nilai yang pernah
diberikan untuk matakuliah tertentu
KLAUSA HAVING
•
Melakukan filter terhadap hasil daripada fungsi
agregasi.
•
Format umum:
SELECT Fungsi_Agregasi
(<
kolom
>)
FROM
tabel
GROUP BY
<
kolom
>
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
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
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.
Pemasok Barang
Menyediakan
kd_barang nama_barang harga_jual
kd_pemasok nama_pemasok alamat
Kategori
Memiliki
kd_kategori nama_kategori
tgl_kadaluarsa stok