0 penilaian0% menganggap dokumen ini bermanfaat (0 suara)
97 tayangan14 halaman
View digunakan untuk merepresentasikan bagian-bagian data dari satu tabel atau lebih. Terdapat dua jenis view yaitu simple view dan complex view. View dapat digunakan untuk membatasi akses database, memudahkan query, dan menyajikan pandangan berbeda dari data yang sama. Untuk membuat view digunakan perintah CREATE VIEW sedangkan untuk memodifikasi view menggunakan perintah CREATE OR REPLACE VIEW.
View digunakan untuk merepresentasikan bagian-bagian data dari satu tabel atau lebih. Terdapat dua jenis view yaitu simple view dan complex view. View dapat digunakan untuk membatasi akses database, memudahkan query, dan menyajikan pandangan berbeda dari data yang sama. Untuk membuat view digunakan perintah CREATE VIEW sedangkan untuk memodifikasi view menggunakan perintah CREATE OR REPLACE VIEW.
View digunakan untuk merepresentasikan bagian-bagian data dari satu tabel atau lebih. Terdapat dua jenis view yaitu simple view dan complex view. View dapat digunakan untuk membatasi akses database, memudahkan query, dan menyajikan pandangan berbeda dari data yang sama. Untuk membuat view digunakan perintah CREATE VIEW sedangkan untuk memodifikasi view menggunakan perintah CREATE OR REPLACE VIEW.
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;