Anda di halaman 1dari 14

view

Praktikum Basis Data



definisi
View adalah sebuah tampilan yang
merepresentasikan bagian-bagian data yang
ada pada satu tabel atau lebih.

Kegunaan View antara lain:
Membatasi akses database
Membuat query kompleks secara lebih mudah
Untuk menyajikan pandangan yang berbeda
dari data yang sama



Ada 2 jenis View, yaitu Simple View dan
Complex View, yang perbedaannya yaitu:
implementasi
Bentuk Umum instruksi membuat View :
CREATE VIEW nama_view AS SELECT
nama_kolom FROM nama_tabel WHERE
batasan
Untuk memodifikasi View, digunakan :
CREATE OR REPLACE VIEW nama_view AS
SELECT nama_kolom FROM nama_tabel
WHERE batasan


Setelah kita memasukkan perintah membuat
View seperti tadi, kita dapat melihat View
yang sudah kita buat dengan perintah SELECT.
Contoh : SELECT * FROM nama_view

Kita juga dapat melihat struktur dari View
dengan perintah:
DESCRIBE nama_view
DML Pada view
Berikut ini aturan untuk membentuk DML
pada View:
Baris data pada View tidak dapat dihapus jika
berisi:
Fungsi Group
Klausa Group By
Keyword Distinct
Data pada View tidak dapat dimodifikasi jika
berisi:
3 kondisi yang sudah disebutkan di atas
Kolom yang didefinisikan oleh suatu ekspresi
Kolom ROWNUM



Pada View tidak dapat ditambahkan data, jika:
View berisi 5 kondisi yang sudah disebutkan di
atas
Terdapat kolom NOT NULL pada base
table(tabel asal dari mana View dibuat) yang
tidak dipilih oleh View

Agar data pada View tidak dapat dimodifikasi,
maka dapat digunakan instruksi READ ONLY.
Contoh:

CREATE nama_view AS SELECT nama_kolom
FROM nama_tabel WHERE batasan WITH
READ ONLY;

Pembahasan Tugas
Diketahui
Matakuliah(kodemk,namamk,sks)
daftar matakuliah yang ditawarkan
Dosen(nip,nama)
matakuliah
Mahasiswa(nim,nama,dosenpembimbing)

Kuliah(kodekuliah,kodemk,nip,thnakademik,s
emester)
pengampu. Seorang dosen bisa mengajar
matakuliah yang sama untuk kelas yang
berbeda pada suatu semester. semester
bernilai '1' untuk ganjil atau '2' untuk
genap. thnakademik dinyatakan dalam
format panjang seperti '2007-2008'
Peserta(nim, kodekuliah,nilai)
mahasiswa dalam a, b, s.d. e.

Soal 1
Tampilkan banyaknya SKS yang telah
diselesaikan oleh masing-masing mahasiswa
Bila matakuliah yang diulang semua masuk
dalam perhitungan

Solusi
Maksud dari permasalahan di atas adalah kita
harus menampilkan jumlah SKS yang telah
diselesaikan oleh masing-masing mahasiswa
dengan memperhitungkan semua SKS dari
semua matakuliah yang pernah diambilnya,
meskipun itu adalah matakuliah pengulangan.
Pada mulanya kita tentukan tabel apa yang
dibutuhkan untuk menyelesaikan
permasalahan di atas, yaitu tabel matakuliah,
tabel peserta, tabel mahasiswa, dan tabel
kuliah.


Solusi (cont.)
Adapun ada beberapa kondisi yang harus
dipenuhi yaitu :
kodekuliah pada tabel peserta=kodekuliah
pada tabel kuliah
kodemk pada tabel matakuliah=kodemk pada
tabel kuliah
NIM pada tabel mahasiswa = NIM tabel
peserta
Lakukan penjumlahan terhadap SKS dari tabel
matakuliah dengan menggunakan perintah
SUM dan dengan pengelompokan
berdasarkan NIM dengan menggunakan
GROUP BY
Solusi (cont.)
SELECT mahasiswa.NIM AS
NOMOR_MAHASISWA, SUM( matakuliah.SKS )
AS JUMLAH_SKS
FROM mahasiswa,peserta,kuliah,matakuliah
WHERE mahasiswa.NIM = peserta.NIM
AND peserta.KODEKULIAH =
kuliah.KODEKULIAH
AND kuliah.KODEMK = matakuliah.KODEMK
GROUP BY mahasiswa.NIM;

SOAL 2
Bila matakuliah yang diulang hanya yang
sesuai dengan asumsi yang masuk dalam
perhitungan

SOLUSI
Cara yang sama pada soal 1, namun dengan
persyaratan bahwa mata kuliah dikatakan
lulus apabila mendapat nilai minimal d.
Artinya : tambahkan batasan, nilai E tidak
masuk perhitungan.
Sehingga, apabila terdapat nilai E pada
peserta.nilai, maka tidak ditampilkan
Solusi (cont.)
SELECT mahasiswa.NIM AS
NOMOR_MAHASISWA, sum( matakuliah.SKS )
AS JUMLAH_SKS
FROM mahasiswa, peserta, kuliah, matakuliah
WHERE mahasiswa.NIM = peserta.NIM
AND peserta.KODEKULIAH =
kuliah.KODEKULIAH
AND kuliah.KODEMK = matakuliah.KODEMK
AND peserta.NILAI != 'E'
GROUP BY mahasiswa.NIM;

SOAL 3
Tampilkan dosen yang pernah mengampu
kelas matakuliah yang pesertanya tidak
lebih dari 15 mahasiswa.

Solusi
Cari NIP dosen beserta nama
Cari KodeMK dari tabel kuliah (kuliah.kodemk)
Cari kodekuliah dari tabel peserta
Batasan-batasan :
Dosen.nip=kuliah.nip
Kuliah.kodekuliah = peserta.kodekuliah
Lakukan pengelompokan berdasarkan
kodekuliah yang ada pada tabel peserta
karena tiap dosen bisa mengampu lebih dari 1
matakuliah
Gunakan Having count( peserta.NIM ) <=15
untuk menyeleksi



Solusi (cont.)
SELECT dosen.NIP AS NIP_DOSEN, nama AS
Nama_Dosen, kuliah.kodemk AS Kode_MK,
count( peserta.nim ) AS Jumlah_Peserta
FROM dosen, kuliah, peserta
WHERE dosen.NIP = kuliah.NIP
AND kuliah.KODEKULIAH =
peserta.KODEKULIAH
GROUP BY peserta.KODEKULIAH
Having count( peserta.NIM ) <=15
ORDER BY dosen.nip;
SOAL 4
Tampilkan nama mahasiswa yang telah lulus
lebih dari 100 SKS

Solusi
Pilih nama mahasiswa dari tabel mahasiswa
(gunakan : mahasiswa.nama)
Cari tabel-tabel lain yang berhubungan, yaitu :
mahasiswa, peserta, kuliah, matakuliah
Gunakan persyaratan-persyaratan :
peserta.kodekuliah = kuliah.kodekuliah
kuliah.kodemk = matakuliah.kodemk
peserta.nilai != 'E
Kelompokkan berdasarkan NIM, dengan
menggunakan: group by mahasiswa.nim
Gunakan persyaratan tambahan : having
sum(matakuliah.sks) > 100


Solusi (cont.)
SELECT mahasiswa.NAMA AS
NAMA_MAHASISWA
FROM mahasiswa, peserta, kuliah, matakuliah
WHERE mahasiswa.NIM = peserta.NIM
AND peserta.KODEKULIAH =
kuliah.KODEKULIAH
AND kuliah.KODEMK = matakuliah.KODEMK
AND peserta.NILAI != 'E'
GROUP BY mahasiswa.NIM
HAVING sum( matakuliah.SKS ) > 100;

SOAL 5
Bila kode matakuliah untuk Tugas Akhir
adalah M0012, tampilkan banyaknya siswa
yang telah lulus tugas akhir
SOLUSI
Jumlahkan NIM dengan menggunakan
aggregate function COUNT(mahasiswa.nim)
Batasan-batasan :
mahasiswa.NIM = peserta.NIM
peserta.KODEKULIAH = kuliah.KODEKULIAH
kuliah.KODEMK = matakuliah.KODEMK
matakuliah.KODEMK = 'M0012
peserta.NILAI != 'E
Kenyataannya: KodeMK untuk Tugas akhir
adalah M0016





Solusi (cont.)
SELECT COUNT( mahasiswa.NIM ) AS
JUMLAH_LULUS_TA
FROM mahasiswa, peserta, kuliah, matakuliah
WHERE mahasiswa.NIM = peserta.NIM
AND peserta.KODEKULIAH =
kuliah.KODEKULIAH
AND kuliah.KODEMK = matakuliah.KODEMK
AND matakuliah.KODEMK = 'M0012'
AND peserta.NILAI != 'E'

Solusi (cont.)
SELECT COUNT( mahasiswa.NIM ) AS
JUMLAH_LULUS_TA
FROM mahasiswa, peserta, kuliah, matakuliah
WHERE mahasiswa.NIM = peserta.NIM
AND peserta.KODEKULIAH =
kuliah.KODEKULIAH
AND kuliah.KODEMK = matakuliah.KODEMK
AND matakuliah.KODEMK = 'M0012'
AND peserta.NILAI != 'E'

Soal 6
Tampilkan daftar nomor dan nama
mahasiswa beserta IP (Indeks Prestasinya)
berdasar dua asumsi di atas
Solusi
Untuk menghitung IP, kita rubah nilainya
dengan bobotNilai, yaitu dengan merubah
nilai A dengan 4, B dengan 3, C dengan 2, D
dengan 1, dan E dengan 0. Simpan tabel hasil
query dengan nama tabel yaitu hitungsks.

Solusi (cont.)
Buat View dengan syntax :
CREATE VIEW hitungsks AS
(SELECT mahasiswa.nim, mahasiswa.nama,
kuliah.kodemk, MAX(kuliah.thnakademik),
matakuliah.sks,
IF(peserta.nilai='A',4,
IF(peserta.nilai='B',3,
IF(peserta.nilai='C',2,
IF(peserta.nilai='D',1,0)))) as bobot
FROM kuliah,mahasiswa,matakuliah,peserta
WHERE kuliah.kodekuliah=peserta.kodekuliah
and kuliah.kodemk=matakuliah.kodemk
and mahasiswa.NIM = peserta.nim
GROUP BY nim,kodemk);

Solusi (cont.)
Langkah kedua susun query untuk
menampilkan total sks setiap mahasiswa
kemudian simpan dengan nama view totalsks.
Querynya seperti dibawah ini:
CREATE VIEW totalsks AS(select nim,
SUM(SKS) as totSks from hitungsks group BY
nim);

Solusi (cont.)
Tampilkan nim,nama, dan Ipk untuk setiap
mahasiswa dari view I dan II.
Hitung Ipk dengan rumus
IPK=(sks x bobot)/totalSks setiap mahasiswa
Gunakan Query :
SELECT hitungsks.nim, hitungsks.nama,
SUM( (hitungsks.bobot *
hitungsks.SKS)/totalsks.totSks ) AS IPK
FROM hitungsks, totalsks
WHERE hitungsks.nim = totalsks.nim
GROUP BY hitungsks.nim, hitungsks.nama;


SOAL 7
Bila asumsi ke-2 di atas diganti bahwa nilai
yang dipakai untuk penentuan IP adalah nilai
yang terbaik (dari serangkaian mengulang
matakuliah), tuliskan perintah SQL untuk
menghitung IP
Solusi
Pada kasus ini, querynya mirip dengan Soal 6,
hanya saja pada kasus ini yang jadi acuan
adalah field nilai, bukan thnAkademik.
Bagian max(thnAkademik) diganti dengan
min(ASCII(UPPER(peserta.nilai))) karena kita
mencari satu dari beberapa matakuliah yang
sama yang pernah diambil oleh seorang
mahasiswa dan paling bagus nilainya.
Solusi (cont.)
Buat View dengan syntax :
CREATE VIEW IPK2 AS
(SELECT mahasiswa.nim, mahasiswa.nama,
matakuliah.kodemk, matakuliah.sks,
peserta.nilai,
MIN( ASCII( UPPER( peserta.nilai ) ) ) AS ASCII,
IF( peserta.nilai = 'A', 4, IF( peserta.nilai = 'B', 3,
IF( peserta.nilai = 'C', 2, IF( peserta.nilai = 'D', 1,
0 ) ) ) ) AS bobot
FROM mahasiswa, kuliah, matakuliah, peserta
WHERE mahasiswa.nim = peserta.nim
AND kuliah.kodekuliah = peserta.kodekuliah
AND matakuliah.kodemk = kuliah.KODEMK
AND peserta.nilai != E;
GROUP BY mahasiswa.nim,
matakuliah.kodemk
);

Soal 8
Tampilkan dosen banyaknya nilai B nya
lebih dari 70% (dari semua matakuliah yang
dia ampu)
Solusi (cont.)
Susun query dari view Ipk2 untuk
menampilkan nim dan total sks setiap
mahasiswa. Ini dilakukan dengan cara
mengelompokkan data berdasarkan field nim.
Simpan view hasil query ini dengan nama
tabelnya adalah getTotalSKS
Query :
CREATE VIEW getTotalSKS AS(SELECT
nim,nama, SUM(sks) AS totSKS FROM ipk2
GROUP BY nim);
Solusi (cont.)
Tampilkan nim,nama, dan Ipk untuk setiap
mahasiswa dari tabel Ipk2 dan getTotalSKS
Query :

Solusi
Buat query untuk menampilkan nip,nama
dosen, kode kuliah, dan nilainya.
Simpan tabel hasil query ini dengan nama
view yaitu: SATU1
Query :
CREATE VIEW SATU1 AS(select kuliah.nip,
dosen.nama, peserta.nim, peserta.kodekuliah,
peserta.nilai
FROM kuliah,dosen,peserta
WHERE kuliah.nip=dosen.nip and
peserta.kodekuliah=kuliah.kodekuliah);
Solusi (cont.)
Susun query untuk menampilkan nip,nama
dosen, dan cacah semua nilai yang sudah dia
berikan kepada mahasiswa-mahasiswa.
Simpan tabel hasil query ini dengan
nama : SATU2
Query:
CREATE VIEW SATU2 AS(SELECT NIP, NAMA,
COUNT(*) as jmlMatkul FROM SATU1 group
by nip,nama)
Langkah ketiga, hitung 70% dari view
SATU2.jmlMatkul tampilkan bersama nip,dan
nama dosen. Simpan tabel hasil query dengan
nama : SATU3
Query :
CREATE VIEW SATU3 AS (SELECT
NIP,NAMA,(0.7*jmlMatkul) AS tujuhPlhPersen
FROM SATU2);
Solusi (cont.)
Kelompokkan yang nilainya B kemudian
jabarkan nilai B nya berdasarkan Group dari
nip dan nama. Simpan hasil query dengan
nama SATU4
Query :
CREATE VIEW SATU4 AS
(SELECT nip,nama, COUNT(*) AS jmlB
FROM SATU1 WHERE ASCII(UPPER(nilai)) =
ASCII('B') GROUP BY nip,nama);
Solusi (cont.)
Langkah terakhir, tampilkan nip dan nama
dosen yang jmlB nya > dari field
tujuhPlhPersen
Query :
SELECT SATU1.nip AS NIP, SATU1.nama AS
Nama_Dosen
FROM SATU1, SATU4, SATU3
WHERE SATU1.nip = SATU4.nip
AND SATU4.jmlB > satu3.TujuhPlhPersen
GROUP BY satu1.nip;
SOAL 9
Bila syarat lulus mahasiswa adalah: telah lulus
tugas akhir, lulus minimal 110 sks (termasuk
tugas akhir) , tampilkan daftar mahasiswa
yang telah
dapat dinyatakan lulus beserta IP-nya
Solusi
Tampilkan nim,nama mahasiswa, kodemk, sks,
nilai, dan bobot dan nilai yang lebih buruk dari
D disingkirkan.
Simpan tabel hasil query dengan nama tabel
yaitu : DUA1
Solusi (cont.)
Query:
CREATE VIEW DUA1 AS
(SELECT mahasiswa.nim, mahasiswa.nama,
matakuliah.kodemk, matakuliah.SKS,
peserta.nilai,
MAX( kuliah.thnAkademik ) ,
IF( peserta.nilai = 'A', 4,
IF( peserta.nilai = 'B', 3,
IF( peserta.nilai = 'C', 2,
IF( peserta.nilai = 'D', 1, 0 ) ) ) ) AS bobot
FROM mahasiswa, peserta, matakuliah, kuliah
WHERE mahasiswa.nim = peserta.nim
AND peserta.kodekuliah = kuliah.kodekuliah
AND matakuliah.kodemk = kuliah.kodemk
AND ASCII( UPPER( peserta.nilai ) ) <=
ASCII( 'D' )
GROUP BY mahasiswa.nim,
matakuliah.kodemk
);

Solusi (cont.)
Langkah kedua, hitung total sks untuk setiap
mahasiswa.
Simpan hasil querynya dengan nama: DUA2
Query :
CREATE VIEW DUA2 AS(select nim,sum(SKS)
as totSKS from dua1 group by nim);
Solusi (cont.)
Langkah ketiga hitung ipk dengan
menampilkan nim dan nama mahasiswa.
Simpan tabel hasil query dengan nama: DUA3
Query :
CREATE VIEW DUA3 AS(select
DUA1.nim,DUA1.nama,
sum((DUA1.sks*DUA1.bobot)/DUA2.totSKS)
as IPK FROM DUA1,DUA2
WHERE DUA1.nim=DUA2.nim group by
dua1.nim);
Solusi (cont.)
Cari mahasiswa yang sudah lulus ujian tugas
akhir.
Simpan hasil query dengan nama DUA4
Query :
CREATE VIEW DUA4 AS(SELECT nim,nama,nilai
FROM DUA1 where kodemk='M0016');
Langkah terakhir, tampilkan ipk masing2
mahasiswa yang sudah lulus tugas akhir dan
sudah lulus minimal 110 sks termasuk tugas
akhir, dengan menggunakan query:
SELECT DUA3.nim, DUA3.nama, DUA3.IPK
FROM DUA3, DUA2, DUA4
WHERE DUA2.NIM = DUA3.NIM
AND DUA3.NIM = DUA4.NIM
AND DUA2.totSKS >=110;
Soal 10
Dari soal nomor 2 di atas, bila syarat
lulus ditambah : memiliki IP minimum
2,00, tentukan berapa mahasiswa yang telah
dapat dinyatakan lulus berdasar kriteria di
atas!
Query :
SELECT DUA3.nim, DUA3.nama, DUA3.IPK
FROM DUA3, DUA2, DUA4
WHERE DUA2.NIM = DUA3.NIM
AND DUA3.NIM = DUA4.NIM
AND DUA2.totSKS >=110
AND DUA3.IPK >= 2.00;


SQL AGGREGATION
Praktikum Basis Data

Sql aggregation
Adalah fungsi-fungsi dalam MySql yang
apabila digunakan akan memberikan hasil
berupa nilai tunggal (single value).

Fungsi-fungsi yang termasuk dalam SQL
Aggregation antara lain:
COUNT(), SUM(), AVG(), MAX(), MIN()
Fungsi agregat
Fungsi COUNT: memberikan hasil berupa
jumlah baris yang memenuhi kriteria dalam
klausa WHERE yang diberikan.
Fungsi SUM: memberikan hasil berupa
penjumlahan dari nilai-nilai numerik dalam
kolom.
Fungsi AVG (average): memberikan hasil
berupa hasil rata-rata dari nilai-nilai numerik
dalam kolom.
Fungsi MAX: memberikan hasil berupa nilai
terbesar dari nilai-nilai numerik dalam kolom.
Fungsi MIN: memberikan hasil berupa nilai
terkecil dari nilai-nilai numerik dalam kolom.
lATIHAN
FUNGSI COUNT
Bentuk umum:
SELECT COUNT(nama_kolom)
FROM nama_tabel WHERE persyaratan

Apabila dalam tabel tersebut kita hendak
mencari tahu berapa kali Pak Smith membeli
barang, maka kita ketikkan
SELECT COUNT(OrderID)
FROM Pembelian WHERE
Nama_Pembeli = Smith

FUNGSI SUM
Bentuk umum:
SELECT SUM(nama_kolom) FROM nama_tabel
WHERE persyaratan

Misalnya dalam tabel tersebut kita ingin
mengetahui jumlah barang yang dibeli Pak
Wood, maka perintahnya sbb:
SELECT SUM(Jumlah) FROM Pembelian
WHERE Nama_Pembeli = Wood
FUNGSI AVG
Bentuk umum:
SELECT AVG(nama_kolom) FROM nama_tabel
WHERE persyaratan

Misal kita ingin mencari rata-rata harga dari
barang yang dibeli Pak Baldwin, maka:
SELECT AVG(Harga) FROM Pembelian WHERE
Nama_Pembeli = Baldwin
FUNGSI MAX
Bentuk umum:
SELECT MAX(nama_kolom) FROM nama_tabel
WHERE persyaratan

Apabila dalam tabel Pembelian kita ingin
mencari barang termahal yang diberi Pak
Smith, maka:
SELECT MAX(Harga) FROM Pembelian WHERE
Nama_Pembeli = Smith
FUNGSI MIN
Bentuk umum:
SELECT MIN(nama_kolom) FROM nama_tabel
WHERE persyaratan

Misal kita ingin mencari harga pembelian
terkecil yang lebih besar dari 200, maka:
SELECT MIN(Harga) FROM Pembelian WHERE
Harga>200




SOAL-SOAL
Tampilkan jumlah seluruh barang yang dibeli
oleh Pak John.
Tampilkan jumlah harga barang yang dibeli
oleh Pak Wood.
Tampilkan jumlah rata-rata pada kolom
Jumlah
Tampilkan jumlah total barang yg terjual pada
bulan 12.


NESTED QUERY
Subquery
Penjelasan
Dalam statement SQL, bisa terdapat subquery
lagi atau dengan kata lain query dalam query
atau disebut juga nested query
Hal ini tidak hanya terjadi pada statement
SELECT, namun dapat pula terjadi pada
statement UPDATE dan DELETE.
Contoh
Buat database dengan nama : akademika
Tabel Mahasiswa



Tabel Mk:

Contoh (cont.)
Tabel ambilmk

Pertanyaan 1
Tampilkan nama mahasiswa dan nilai
matakuliah yang memiliki nilai tertinggi dalam
matakuliah 1905?
Perkiraan kita:
SELECT mhs.nama, ambilmk.nilai
FROM mhs, ambilmk
WHERE mhs.nim = ambilmk.nim
AND ambilmk.kodeMK = 1905
AND ambilmk.nilai = MAX(ambilmk.nilai);
Solusi tersebut salah!!!
Kenapa?
Solusi
Kesalahan terjadi pada SQL aggregation MAX
SQL Aggregation (dalam hal ini MAX) tidak
boleh diletakkan di klausa WHERE
Aggregate function hanya boleh digunakan di
bagian SELECT dan HAVING
Solusi (cont.)
SELECT mhs.nama, ambilmk.nilai
FROM mhs, ambilmk
WHERE mhs.nim = ambilmk.nim
AND ambilmk.kodeMK =1905
AND ambilmk.nilai = (
SELECT MAX( nilai )
FROM ambilmk
WHERE kodeMK =1905 );

Penjelasan
Yang di sebut subquery adalah :
SELECT MAX( nilai )
FROM ambilmk
WHERE kodeMK =1905 );
Perintah tersebut digunakan untuk mencari
nilai tertinggi (MAX) dari mata kuliah yang
berkode =1905
Hasil subquery nantinya digunakan sebagai
syarat untuk query yang berada di level
atasnya (parente query)
Haruskah ada perintah ambilmk.kodeMK =
1905 dalam WHERE pada query di atas
padahal telah ada perintah kodeMK = 1905
pada subquery?
Buktikan sendiri!!

Pertanyaan 2
Dalam perkuliahan dengan kode 1904,
siapakah mahasiswa (nim dan nama) yang
memiliki nilai di atas rata-rata nilai dari semua
mahasiswa yang mengambil matakuliah
tersebut?
Perkiraan kita :
SELECT mhs.nim, mhs.nama
FROM mhs, ambilmk
WHERE mhs.nim = ambilmk.nim AND
ambilmk.kodeMK = 'A03'
AND
ambilmk.nilai > AVG(ambilmk.nilai);
Query tersebut salah, dan kesalahan terjadi
pada aggregate function (AVG)

Solusi (cont.)
SELECT mhs.nim, mhs.nama
FROM mhs, ambilmk
WHERE mhs.nim = ambilmk.nim
AND ambilmk.kodeMK =1904
AND ambilmk.nilai > (
SELECT AVG( nilai )
FROM ambilmk
WHERE kodeMK =1904 ) ;
Pertanyaan 3
Dari data mahasiswa yang terdaftar, siapa
sajakah (nama) mahasiswa yang tidak
mengambil matakuliah 1903 ?


Solusi
Secara logika, tahapan penyelesaiannya
adalah
Kita buat 2 query :
Query 1 : untuk menampilkan semua
mahasiswa yang terdaftar di database
Query 2 : untuk menampilkan mahasiswa
yang mengambil matakuliah 1903
Hasil Query 1 dibandingkan dengan Query 2
Untuk output, yang ditampilkan adalah
mahasiswa yang ada di hasil Query 1 namun
tidak ada di hasil Query 2.

Solusi (cont)
SELECT nim, nama
FROM mhs
WHERE nim
NOT IN
(SELECT nim
FROM ambilmk
WHERE kodeMK =1903);
Apa yang akan terjadi jika syntax SQL hanya :
SELECT a.nim, m.nama
FROM ambilmk a, mhs m
WHERE kodeMK !=1903;
Pertanyaan 4
Hapuslah data mahasiswa (dari tabel mhs)
yang memiliki IPK terendah (kasus di DO).

Solusi
Pada kasus ini, kita akan menghapus data
mahasiswa (dari tabel mhs) yang memiliki IPK
terendah (kasus di DO).
Secara logika, penyelesaian dari soal ini
adalah:
Cari mahasiswa (nim) yang memiliki IPK
terendah
Setelah diperoleh nim mahasiswa tersebut,
lalu kita gunakan sebagai syarat untuk
menghapus data mahasiswa yang ada di tabel
mahasiswa
Solusi (cont.)
Query untuk mencari nim yang memiliki IPK
terendah:
SELECT a.nim
FROM ambilmk a, mk m
WHERE a.kodeMK = m.kodeMK
GROUP BY a.nim
ORDER BY sum( a.nilai * m.sks ) / sum( m.sks )
ASC
LIMIT 0,1; // untuk ambil record pertama
Selanjutnya, query tersebut kita gunakan
untuk menghapus data mahasiswa di tabel
mahasiswa

Solusi (cont.)
Query lengkapnya adalah :
DELETE FROM mhs
WHERE nim =
(SELECT a.nim
FROM ambilmk a, mk m
WHERE a.kodeMK = m.kodeMK
GROUP BY a.nim
ORDER BY sum( a.nilai * m.sks ) /
sum( m.sks ) LIMIT 0, 1);
Pertanyaan 5
Tampilkan mahasiswa yang memiliki IPK di
bawah 3.5!!

Solusi
Logika :
Tampilkan semua nim dan IPK nya masing-
masing (gunakan GROUP BY nim).
Persempit filternya dengan menambahkan
syarat bahwa yang ditampilkan hanya yang
ber IPK < 3.5 (gunakan HAVING)
Penyelesaiannya adalah (tidak memerlukan
subquery)
SELECT ambilmk.nim, sum( ambilmk.nilai *
mk.sks ) / sum( mk.sks ) AS IPK
FROM ambilmk, mk
WHERE ambilmk.kodeMK = mk.kodeMK
GROUP BY ambilmk.nim
HAVING IPK < 3.5
Pertanyaan 6
Carilah NIM mahasiswa yang IPK-nya lebih
besar dari IPK NIM mahasiswa 10903
Solusi (cont.)
Langkah logis :
Cari IPK seluruh mahasiswa (Query Induk)
dengan syntax:
SELECT ambilmk.nim, sum( ambilmk.nilai *
mk.sks ) / sum( mk.sks ) AS IPK
FROM ambilmk, mk
WHERE ambilmk.kodeMK = mk.kodeMK
GROUP BY ambilmk.nim

Solusi
Hitung IPK Mahasiswa dengan NIM = 10903
(sebagai query anak ) dengan syntax :
SELECT
sum( ambilmk.nilai * mk.sks ) / sum( mk.sks )
AS IPK
FROM ambilmk, mk
WHERE ambilmk.nim =10903
AND ambilmk.kodemk = mk.kodemk

Solusi (cont.)
Gabungkan dengan menggunakan HAVING
IPK >
SELECT ambilmk.nim AS NIM,
sum( ambilmk.nilai * mk.sks ) / sum( mk.sks )
AS IPK
FROM ambilmk, mk
WHERE ambilmk.kodeMK = mk.kodeMK
GROUP BY ambilmk.nim
HAVING IPK >
(
SELECT sum( ambilmk.nilai * mk.sks ) /
sum( mk.sks )
FROM ambilmk, mk
WHERE ambilmk.nim =10903
AND ambilmk.kodemk = mk.kodemk );
Pertanyaan 7
Tampilkan NIM dan Nilai mahasiswa yang
mengambil mata kuliah dengan kode 1904
dan memiliki nilai lebih besar dari mahasiswa
dengan nim = 10900
Langkah-langkah :
Query induk : untuk seleksi mahasiswa yang
mengambil mata kuliah = 1904 dan nilai >
Query anak
Query anak : mencari nilai dari mahasiswa
yang memiliki NIM =1900 dan kode mata
kuliah = 1904
Solusi
Query Induk
Select nim, nilai from ambilmk where
kodemk= 1904 and
nilai > (ANAK)
Query Anak
(SELECT nilaiFROM ambilmk
WHERE nim =10900
AND kodemk =1904)
Solusi (Cont.)
select nim, nilai from ambilmk
where kodemk=1904
and nilai >
(SELECT nilai
FROM ambilmk
WHERE nim =10900
AND kodemk =1904);

SQL JOIN
Pengertian
Perintah join digunakan untuk
menggabungkan dua tabel atau lebih,
berdasarkan relationship antara kolom-kolom
terten pada tiap tabel
Macamnya:
Inner join
Left outer join
Right outer join
Inner join
Perintah inner join, berfungsi
enggabungkan dua buah tabel dengan
seleksi tertentu.
Seleksi menggunakan perintah on diikuti
dengan kondisi seleksi.
Contoh
Pada database my_db
Mencari Persons beserta no_order
menggabungkan tabel Persons dan tabel
Orders
Bentuk:
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON
table_name1.column_name=table_name2.col
umn_name
WHERE <KLAUSA>;


Contoh (cont.)
SELECT persons.lastname AS Nama_Belakang,
persons.firstname AS Nama_Depan,
orders.orderno AS Nomer_Pesanan
FROM persons
INNER JOIN orders ON
persons.p_id = orders.p_id
ORDER BY persons.lastname;
Hasil
Keterangan
Keyword inner join menghasilkan baris-baris,
apabila setidaknya terdapat satu baris yang
sama (cocok) pada tiap tabel
Jika pada tabel Persons terdapat baris yang
tidak terdapat di tabel Orders, maka baris
ini tidak akan ditampilkan

Left Outer Join
LEFT JOIN digunakan untuk menampilkan
seluruh baris pada tabel kiri (tabel_1), walau
tidak terdapat baris yang sama di tabel kanan
(tabel_2)
Bentuk :
SELECT column_name(s)
FROM table_name1
LEFT OUTER JOIN table_name2
ON
table_name1.column_name=table_name2.col
umn_name
WHERE <KLAUSA>;

Contoh
Tabel kiri : Persons
Tabel kanan : Orders
Syntax :
SELECT Persons.LastName AS Nama_Belakang,
Persons.FirstName AS Nama_Depan,
Orders.OrderNo AS Nomer_order
FROM Persons
LEFT OUTER JOIN Orders ON Persons.P_Id =
Orders.P_Id
ORDER BY Persons.LastName;

Hasil
RIght outer Join
RIGHT JOIN memberikan hasil berupa baris-
baris dari tabel kanan (tabel_2), walau tidak
terdapat baris yang sama di tabel kiri
(tabel_1)
Bentuk :
SELECT column_name(s)
FROM table_name1
RIGHT OUTER JOIN table_name2
ON
table_name1.column_name=table_name2.col
umn_name
WHERE <KLAUSA>;
Contoh
Tabel kiri : Persons
Tabel kanan : Orders
Hilangkan foreign key
Insert tabel Orders dengan sembarang value
Syntax :
SELECT Persons.LastName AS Nama_Belakang,
Persons.FirstName AS Nama_Depan,
Orders.OrderNo AS Nomer_Pesanan
FROM Persons
RIGHT OUTER JOIN Orders ON Persons.P_Id =
Orders.P_Id
ORDER BY Persons.LastName;

DATA MANIPULATION LANGUAGE, Data
definition language
Qarry Aina Shafira Nedine, S.Kom.
Pengertian
Data Definition Language (DDL) adalah bahasa
dalam DBMS yang digunakan untuk membuat
atau mendefinisikan obyek-obyek di dalam
database. Hasil kompilasi dari perintah DDL
adalah satu set dari tabel yang disimpan
dalam file khusus disebut data
dictionary/directory.
Terdiri dari :
CREATE DATABASE membuat database baru
ALTER DATABASE memodifikasi database
CREATE TABLE membuat tabel baru
ALTER TABLE memodifikasi tabel
DROP TABLE menghapus tabel
CREATE INDEX membuat index
DROP INDEX menghapus index


Pengertian (cont.)
Data manipulation language adalah bahasa
basis data yang digunakan untuk melakukan
modifikasi dan melakukan pengambilan data
pada suatu basis data
Terdiri dari :
SELECT : menjabarkan data dari database
UPDATE : meng-update data dari database
DELETE : menghapus data dari database
INSERT INTO : input data baru ke database

Implementasi
Menggunakan mySQL console
Jalankan server XAMPP
Buka command prompt
Ketikkan perintah berikut ini:
cd..
cd..
cd xampp\mysql\bin
mysql u root

DATA MANIPULATION LANGUANGE
Create database
show databases;
create database my_db;
use my_db;
Create Tables
create table persons
(
P_id int not null,
LastName varchar(30) null,
FirstName varchar(30)not null,
Address varchar(70) null,
City varchar(30) not null,
primary key (p_id)
);
Create Tables (cont.)
create table orders
(
O_Id int(5) not null,
OrderNo int Not Null,
P_id int (5) not null,
primary key (O_Id)
);
Insert table persons
insert into persons
(p_id,LastName,FirstName,Address,City)
values
(1,'Fabregas','Nadine','Yogyakarta','Bantul'),
(2,'Gonzalez','Karina','Jakarta','Cawang'),
(3,'Navisha','Alisha','Kali_Code','Yogyakarta'),
(4,'Hernandez','Roger','Yogyakarta','Wonosari'
);
Select
Bentuk :
Select * from nama_tabel;
Contoh:
Select* from persons;
Select (cont)
Digunakan untuk memilih record dengan
kondisi-kondisi tertentu
Menggunakan AND : untuk menampilkan
record jika kondisi pertama dan kondisi kedua
bernilai benar
Menggunakan OR : untuk menampilkan
record jika salah satu kondisi bernilai benar
Kombinasi AND dan OR

Menggunakan AND
Bentuk :
SELECT * FROM nama_tabel
WHERE nama_kolom1=nilai_1
AND nama_kolom2=nilai_2;
Contoh :
SELECT * FROM Persons
WHERE
FirstName=Karina
AND
LastName=Gonzalez;
Menggunakan OR
Bentuk
SELECT * FROM nama_tabel
WHERE nama_kolom1=nilai_1
OR nama_kolom2=nilai_2;
NB: bisa juga kolom yang sama
Contoh
SELECT * FROM Persons
WHERE
FirstName=Nadine'
OR
FirstName=Karina;
Kombinasi AND dan OR
Bentuk
Select * from nama_tabel
Where nama_kolom1 = nilai_1
AND (namakolom2= nilai_2 OR
namakolom2=nilai_3);
Contoh :
SELECT * FROM Persons
WHERE
LastName=Gonzalez'
AND
(FirstName=Karina' OR FirstName=Nadine');
Select (cont.)
Bentuk :
SELECT *FROM nama_tabel
WHERE nama_kolom
BETWEEN nilai_1 AND nilai_2;
Contoh:
Select* from persons
Where lastname
Between Fabregas and Hernandez;


Select (cont.)
Menggunakan Not between
Bentuk:
SELECT * FROM nama_tabel
WHERE nama_kolom
NOT BETWEEN nilai_1' AND nilai_2;
Contoh :
Select* from persons
Where lastname
Not Between Fabregas and Hernandez;


Select distinct
Digunakan untuk menghindari redundansi
data
Bentuk :
SELECT DISTINCT nama_kolom
FROM nama_tabel;
Contoh :
Select distinct address
From persons;
Order by
Digunakan untuk mengurutkan data
berdasarkan aturan tertentu
Kata kunci : order by, memiliki default
pengurutan ASC (ascending)
Untuk pengurutan descending, gunakan kata
kunci DESC
Contoh :
Select* from persons
order by
firstname desc;
Update table person
update persons
set LastName ='Svedson', FirstName ='Tove',
Address=California', City = 'Malibu'
where LastName ='Navisha' and FirstName =
'Alisha' ;
Atau
update persons
set LastName ='Svedson', FirstName ='Tove',
Address=California', City = 'Malibu'
where P_id= 3;

Delete
Bentuk :
Delete from nama_tabel
Where <klausa>;
Contoh
DELETE FROM Persons
WHERE P_id = 1 AND LastName=Fabregas';

Delete (semua isi tabel)
Bentuk :
Delete* from nama_tabel;
Atau
Delete from nama_tabel;

DATA DEFINITION
LANGUAGE
Alter Table Orders
Menambahkan dan memberi nama foreign
key
Bentuk:
alter table nama_tabel
add constraint nama_key
foreign key (field_induk)
references tabel_induk (field_induk)
on delete cascade
on update cascade;
Alter table orders (cont.)
Contoh :
alter table orders
add constraint fk_perorders
foreign key (P_id)
references persons (P_id)
on delete cascade
on update cascade;


Alter (Ganti null/not null)
Alter nama_tabel
Change nama_field
Nama_field(panjang_field)
Not null;
Contoh:
alter table persons
change city
city varchar(30)
not null;
Insert table Orders
insert into orders (O_id,OrderNo,P_id) values
(1, 11111, 3),
(2, 11112, 3),
(3, 11113, 4),
(4, 11115, 1),
(5, 11116, 2);
Alter table (tambah Kolom)
Bentuk:
Alter table nama_tabel
Add nama_kolom tipe_data;
Contoh :
ALTER TABLE Persons
ADD DateOfBirth date;
Alter (ganti tipe data)
Bentuk:
Alter table nama_tabel
change nama_kolom
nama_kolom tipe_data_baru;
Contoh:
ALTER TABLE Persons
Change dateOfbirth
dateOfbirth Year;
Alter (tambah Primary Key)
Bentuk :
Alter table nama_tabel
Add primary key (field_primary);
Contoh :
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id);
Drop (hapus Primary Key)
Bentuk
ALTER TABLE nama_tabel
DROP PRIMARY KEY;
Contoh
ALTER TABLE Persons
DROP PRIMARY KEY;

Drop (hapus foreign key)
Bentuk
Alter table nama_tabel
Drop foreign key nama_foreign_key;
Contoh
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders;
Drop (hapus Kolom)
Bentuk
ALTER TABLE nama_table
DROP nama_kolom;
Contoh:
Alter table persons
Drop dateofbirth;
Drop (Hapus Tabel)
Bentuk:
Drop table nama_tabel;
Contoh:
Drop table orders;

Anda mungkin juga menyukai