Pertemuan 11 Structure Query Language(SQL)

dokumen-dokumen yang mirip
Perintah MySQL Lanjutan

Database Systems: Lab. Actvity 3: Fungsi-Fungsi MySql Advance. Pendahuluan. Pendahuluan

Berikut ini akan diberikan contoh-contoh penggunaan fungsi agregasi dalam klausa SQL: Contoh 1 Menampilkan banyaknya record dosen select count ( * )

SISTEM INFORMASI Marta Lenah Haryan8 Copyright Wondershare So3ware

Modul 3 : Query Penggabungan Tabel

MENAMPILKAN DATA DARI BANYAK TABEL

Untuk menampilkan data-data yang telah tersimpan dalam database diperlukan perintah SELECT, yang dapat dirumuskan sebagai berikut:

Untuk mencoba contoh-contoh perintah join, silahkan eksekusi query create+insert dibawah ini:

PRAKTIKUM 5 SISTEM BASIS DATA JOIN

Jobsheet SQL Dasar : Hari Zulianto, ST [Year]

Rencana Pelaksanaan Pembelajaran

SUBQUERY VIEW JOIN PRAKTIKUM BERKAS DAN BASIS DATA 2010/2011. Rizki Arif Firdaus

Modul 6 Function dan Trigger

Modul Praktikum II Matakuliah Basis Data 2

Pertemuan 11. Bahasa Query Terapan Lanjutan

PERTEMUAN 11 SQL(lanjutan): Queries, Constraints & Triggers. (Chap. 5 Ramakrishnan)

MODUL 3 PENGELOMPOKAN, PENGURUTAN, KRITERIA DATA, AGREGASI

Strctured Query Language BASIS DATA

Modul Praktikum III Matakuliah Basis Data 2

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

PRAKTIKUM 4 PENGAMBILAN DATA LANJUT


Basis Data I. Pertemuan Ke-11 (SQL Part 2) Noor Ifada.

Macam - Macam Perintah Pada SQL

RENCANA PEMBELAJARAN

SUBQUERY VIEW JOIN PRAKTIKUM BERKAS DAN BASIS DATA 2010/2011. Rizki Arif Firdaus

MODUL V DATA MANIPULATION LANGUAGE (DML) 1

MODUL 4 QUERY, VIEW, DAN ALJABAR RELASIONAL

Satuan Acara Perkuliahan

Basis Data II. Pertemuan Ke-7 (Union dan Join) Noor Ifada S1 T. Informatika - UTM (2012) 1

Riyanto

RENCANA PROGRAM KEGIATAN PERKULIAHAN SEMESTER (RPKPS)

1. Kompetensi Memahami berbagai cara (perintah SQL) yang digunakan untuk mengakses data dari banyak tabel.

Praktikum Sistem Basis Data

DESAIN DATABASE. Pertemuan 06 3 SKS

Pertemuan 10 Structure Query Language(SQL)

1. Buat planing view sesuai kebutuhan topik anda (jelaskan dengan detail masing-masing view yang anda buat)

PERTEMUAN 5 PENGGUNAAN FUNGSI GROUP

PERTEMUAN 6 SUBQUERY

MODUL 2 PRAKTIKUM SQL TINGAT LANJUT JOIN

Basis Data. Bagian IV SQL (2) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

Sistem Basis Data; Tutorial Konseptual Oleh : Yakub

Oracle Academic Initiative

STRUCTURED QUERY LANGUAGE (SQL) (Implementasi menggunakan MySQL)

BAB 1 PEMBUATAN REPORT

3 rd DML : Selection(3)

MODUL 3 JOIN TABLE. Gambar Model Relasi Basis Data db_mutiara SMK NEGERI 1 CIMAHI REKAYASA PERANGKAT LUNAK

BAHASA QUERY KOMERSIAL

Oracle Academic Initiative

BAHASA QUERY KOMPLEKS

MODUL 8. Sub Query Pada baris dan Kolom PRAKTIKUM BASIS DATA LANJUT TEKNIK PERANGKAT LUNAK UNIVERSITAS PGRI RONGGOLAWE

BAHASA QUERY KOMERSIAL

Assalamualainkum wr wb QUERY. Anna Mukhayaroh

TABLE JOIN SQL SERVER 2005

IKG2I4 / Software Project I

B a s i s D a t a C H A P T E R SQL OPERASI JOIN. Arif Basofi PENS 2015

Praktikum Basis Data 2017 TE UM MODUL 6 SUB QUERY

B. PETUNJUK. 2. Join. Praktikum Basis Data 2017 TE UM

SEKOLAH TINGGI TEKNOLOGI INDONESIA TANJUNG PINANG

Basis Data. Bagian IV SQL (3) Fak. Teknik Jurusan Teknik Informatika Universitas Pasundan

LAPORAN PRAKTIKUM BASIS DATA LANJUT I

Apa yang akan dibahas? Pengertian SQL Penggolongan Statement SQL Aturan Gramatika SQL Struktur Dasar SQL Query Satu (1) Tabel

Achmad Solichin

STRUCTURE QUERY LANGUAGE (SQL)

MODUL 4 INTERNET PROGRAMMING DATABASE

select d.area_id, d.nama_area, d.luas_area, p.penduduk_id, p.nama_penduduk from area d inner join penduduk p on (d.area_id=p.

SEKOLAH TINGGI MANAJEMEN INFORMATIKA & KOMPUTER JAKARTA STI&K SATUAN ACARA PERKULIAHAN

PRAKTIKUM 8 SINGLE ROW & GROUP FUNCTION

M0564-Pengantar Sistem Basisdata 12/ 1

SQL (STRUCTURED QUERY LANGUAGE)

1. Hasil ERD dari Tabel satu adalah sebagai berikut: Figure 1: ERD Apotik. 2. Syntax CREATE tabel untuk masing - masing tabel :

PRAKTIKUM BASIS DATA

Pemrograman Basis Data dan SQL Modul ke: Pemrograman PL/SQL

DATABASE RUMAH SAKIT 1. Objek yang dipakai a. Pasien b. Dokter c. Ruang d. Petugas e. Rawat_inap f. Pembayaran

MODUL PRAKTIKUM 06. Database Implementation dengan Aggregate. - Mengetahui dan membuat perintah dasar Aggregate Count, Sum, AVG, Min, Max.

Teori Himpunan Inner Join; Outer Join. Basdat 2012_Mrs Imana's Materi versi 2

MODUL 8 PENGENALAN MySQL FRONT DAN AGREGGATE FUNCTION

BAB III STRUCTURED QUERY LANGUAGE (SQL)

Latihan : Sebutkan record berapa saja yang akan ditampilkan berdasarkan perintah berikut :

Universitas Komputer Indonesia. Pemrograman dengan C++ Builder

BAB 11 FUNGSI-FUNGSI SQL SERVER

DIAGRAM ALIR TAX SURVEILLANCE

MODUL SISTEM BASIS DATA FUNGSI AGREGAT

B a s i s D a t a - 1 C H A P T E R SQL OPERASI JOIN. Copyright 2005 PENS-ITS

RENCANA PEMBELAJARAN SEMESTER

Join Oracle. Rosa Ariani Sukamto Blog: Website:

Oracle Academic Initiative

Basis Data II. Pertemuan Ke-6 (Function) Noor Ifada

Excel dan Microsoft Query

BAB II TINJAUAN PUSTAKA DAN LANDASAN TEORI

Melaporkan Data Agreget Menggunakan Group Functions

BAHASA QUERY KOMERSIAL

TUTORIAL. Mencari nilai Max dan Min

DESAIN DAN IMPLEMENTASI SISTEM INFORMASI PERPUSTAKAAN BERBASIS TEKNOLOGI INFORMASI Studi Kasus Perpustakaan Universitas Halmahera. Benisius.

Kegiatan Praktikum Sistem Basis Data Kelompok B

INTERNET PROGRAMMING DATABASE

BAB VI AGREGASI SQL DAN VIEW

Praktikum Basis Data 13 Structure Query Language 1

Join Antar Tabel. M. Saefudin SKom, MMSI

Transkripsi:

Pertemuan 11 Structure Query Language(SQL) INDIKATOR 1. Perintah SELECT dari Banyak Tabel 2. Pengelompokkan Hasil Query dengan GROUP BY 3. HAVING 4. SubSELECT URAIAN MATERI Perintah SELECT dari Banyak Tabel dengan JOIN i dalam suatu RDBMS tentunya sudah menjadi suatu kewajaran jika dalam satu database dapat terdiri dari beberapa tabel. Masing-masing tabel tersebut berhubungan satu sama lain atau dengan kata lain memiliki relasi. Relasi antar- tabel dapat berupa relasi 1-1, 1-M, atau M-N. Sebagai contoh terlihat pada gambar pemodelan data konseptual (class diagram) di atas. Tabel pelanggan berhubungan dengan pesan, pesan dengan barang, dsb. Pada praktisnya, terkadang kita juga memerlukan tampilan data yang tidak hanya berasal dari 1 (satu) tabel, namun bisa dari beberapa tabel sekaligus. Contohnya, dari class diagram diatas, kita ingin menampilkan nama pelanggan berikut transaksi yang pernah dilakukannya. Dari contoh tersebut, kita harus bisa menggabungkan minimal dua tabel, yaitu pelanggan dan pesan. Untuk menggabungkan 2 (dua) atau lebih tabel, kita dapat menggunakan bentuk perintah JOIN. Inner Join Modul Teori Database Aknela 2013 72

Dengan inner join, tabel akan digabungkan dua arah, sehingga tidak ada data yang NULL di satu sisi. Sebagai contoh, kita akan menggabungkan tabel pelanggan dan pesan dimana kita akan menampilkan daftar pelanggan yang pernah melakukan pemesanan (transaksi). Isi tabel pelanggan dan pesan adalah sebagai berikut : Tabel pelanggan (hanya ditampilkan id, nama dan email). +--------------+-----------------+------------------------------------------------+ id_pelanggan nm_pelanggan email +--------------+-----------------+-------------------------------------------------+ P0001 Achmad Solichin achmatim@gmail.com P0002 Budianto budi@luhur.com P0003 Hasan hasan02@yahoo.com P0004 Amin Riyadi aminudin@plasa.com +--------------+-----------------+-------------------------------------------------+ Tabel pesan : +----------+--------------+------------------+ id_pesan id_pelanggan tgl_pesan +----------+--------------+------------------+ 1 P0001 2008-02-02 2 P0002 2008-02-05 3 P0002 2008-02-10 4 P0004 2008-01-20 5 P0001 2007-12-14 +----------+--------------+------------------+ Cara 1 : Penggabungan dengan WHERE Modul Teori Database Aknela 2013 73

Bentuk umum SELECT tabel1.*, tabel2.* FROM tabel1, tabel2 WHERE tabel1.pk=tabel2.fk; Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan: SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan FROM pelanggan, pesan WHERE pelanggan.id_pelanggan=pesan.id_pelanggan; +--------------+-----------------+----------+-----------------------------------+ id_pelanggan nm_pelanggan id_pesan tgl_pesan +--------------+-----------------+----------+------------------------------------+ P0001 Achmad Solichin 1 2008-02-02 P0001 Achmad Solichin 5 2007-12-14 P0002 Budianto 2 2008-02-05 P0002 Budianto 3 2008-02-10 P0004 Amin Riyadi 4 2008-01-20 +--------------+-----------------+----------+------------------------------------+ Pada hasil perintah query di atas terlihat bahwa terdapat 5 (lima) transaksi yang dilakukan oleh 3 (tiga) orang pelanggan. Jika kita lihat kembali isi tabel pelanggan di atas, maka terdapat satu pelanggan yang tidak ditampilkan yaitu yang memiliki id pelanggan P0003. Pelanggan tersebut tidak ditampilkan karena belum pernah melakukan transaksi. Cara 2 : Penggabungan dengan INNER JOIN Modul Teori Database Aknela 2013 74

Bentuk umum SELECT tabel1.*, tabel2.* FROM tabel1 INNER JOIN tabel2 ON tabel1.pk=tabel2.fk; Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan: SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan FROM pelanggan INNER JOIN pesan ON pelanggan.id_pelanggan=pesan.id_pelanggan; +--------------+--------------------------------+----------+------------------+ id_pelanggan nm_pelanggan id_pesan tgl_pesan +--------------+-----------------+----------+----------------------------------+ P0001 Achmad Solichin 1 2008-02-02 P0001 Achmad Solichin 5 2007-12-14 P0002 Budianto 2 2008-02-05 P0002 Budianto 3 2008-02-10 P0004 Amin Riyadi 4 2008-01-20 +--------------+-----------------+----------+----------------------------------+ Outer Join Dengan outer join, tabel akan digabungkan satu arah, sehingga memungkinkan ada data yang NULL (kosong) di satu sisi. Sebagai contoh, kita akan menggabungkan tabel pelanggan dan pesan dimana kita akan menampilkan daftar pelanggan yang pernah melakukan pemesanan (transaksi). Outer Join terbagi menjadi 2 (dua) yaitu LEFT JOIN dan RIGHT. Berikut ini bentuk umum dan contohnya: Modul Teori Database Aknela 2013 75

LEFT JOIN Bentuk umum SELECT tabel1.*, tabel2.* FROM tabel1 LEFT JOIN tabel2 ON tabel1.pk=tabel2.fk; Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan: SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan FROM pelanggan LEFT JOIN pesan ON pelanggan.id_pelanggan=pesan.id_pelanggan; +--------------+-----------------+----------+---------------------------------+ id_pelanggan nm_pelanggan id_pesan tgl_pesan +--------------+-----------------+----------+----------------------------------+ P0001 Achmad Solichin 1 2008-02-02 P0001 Achmad Solichin 5 2007-12-14 P0002 Budianto 2 2008-02-05 P0002 Budianto 3 2008-02-10 P0003 Hasan NULL NULL P0004 Amin Riyadi 4 2008-01-20 +--------------+-----------------+----------+-----------------------------------+ Berbeda dengan hasil sebelumnya (inner join), penggunaan left join akan menampilkan juga data pelanggan dengan id P0003, walaupun pelanggan tersebut belum pernah bertransaksi. Dan pada kolom id_pesan dan tgl_pesan untuk pelanggan P0003 isinya NULL, artinya di tabel kanan (pesan) pelanggan tersebut tidak ada. Modul Teori Database Aknela 2013 76

RIGHT JOIN Bentuk umum SELECT tabel1.*, tabel2.* FROM tabel1 RIGHT JOIN tabel2 ON tabel1.pk=tabel2.fk; Berikut ini perintah SQL untuk menggabungkan tabel pelanggan dan pesan: SELECT pelanggan.id_pelanggan, pelanggan.nm_pelanggan, pesan.id_pesan, pesan.tgl_pesan FROM pelanggan RIGHT JOIN pesan ON pelanggan.id_pelanggan=pesan.id_pelanggan; +--------------+-----------------+----------+-------------------------------------+ id_pelanggan nm_pelanggan id_pesan tgl_pesan +--------------+-----------------+----------+--------------------------------------+ P0001 Achmad Solichin 1 2008-02-02 P0002 Budianto 2 2008-02-05 P0002 Budianto 3 2008-02-10 P0004 Amin Riyadi 4 2008-01-20 P0001 Achmad Solichin 2007-12-14 +--------------+-----------------+----------+--------------------------------------+ Dengan right join, tabel yang menjadi acuan adalah tabel sebelah kanan (tabel pesan), jadi semua isi tabel pesan akan ditampilkan. Jika data pelanggan tidak ada di tabel pelanggan, maka isi tabel pesan tetap ditampilkan. Menggabungkan Tiga Tabel Modul Teori Database Aknela 2013 77

Untuk menggabungkan tiga tabel atau lebih, pada dasarnya sama dengan penggabungan 2 (dua) tabel. Sebagai contoh misalnya kita akan menampilkan barang-barang yang dipesan beserta nama barang dan harganya untuk pemesanan dengan nomor 1. Berikut ini perintah SQL-nya: SELECT pesan.id_pesan, produk.id_produk, produk.nm_produk, detil_pesan.harga, detil_pesan.jumlah FROM pesan, detil_pesan, produk WHERE pesan.id_pesan=detil_pesan.id_pesan AND detil_pesan.id_produk=produk.id_produk AND pesan.id_pesan='1' +----------+-----------+------------+-------+---------------------------+ id_pesan id_produk nm_produk harga jumlah +----------+-----------+------------+-------+---------------------------+ 1 B0001 Buku Tulis 2700 2 1 B0003 Penggaris 3000 3 1 B0004 Pensil 2000 1 +----------+-----------+------------+-------+----------------------------+ Pengelompokkan Hasil Query dengan GROUP BY Hasil query terkadang perlu dikelompokkan berdasarkan kriteria atau kondisi tertentu. Misalnya kita akan menampilkan jumlah barang yang dibeli untuk masing-masing transaksi (pemesanan). Perhatikan perintah query berikut ini dan lihat hasilnya: SELECT pesan.id_pesan, pesan.tgl_pesan, detil_pesan.jumlah FROM pesan, detil_pesan WHERE pesan.id_pesan=detil_pesan.id_pesan; Modul Teori Database Aknela 2013 78

id_pesan tgl_pesan jumlah 1 2008-02-02 2 1 2008-02-02 3 1 2008-02-02 1 2 2008-02-05 1 2 2008-02-05 5 2 2008-02-05 1 3 2008-02-10 5 4 2008-01-20 10 Jika kita perhatikan hasil perintah query di atas, kita akan mendapatkan jumlah barang yang terjadi untuk setiap transaksi, namun hasil tampilannya masih perbarang. Artinya jumlah yang ditampilkan masih berupa jumlah barang untuk masingmasing barang. Agar jumlah barang ditampilkan per-transaksi (pemesanan), maka kita dapat menggunakan fungsi GROUP BY dan juga SUM untuk menjumlahkan jumlah barang. Berikut ini perintah query dengan group by dan count. SELECT pesan.id_pesan, pesan.tgl_pesan, SUM(detil_pesan.jumlah) as jumlah FROM pesan, detil_pesan WHERE pesan.id_pesan=detil_pesan.id_pesan GROUP BY id_pesan; Modul Teori Database Aknela 2013 79

id_pesan tgl_pesan jumlah 1 2008-02-02 6 2 2008-02-05 7 3 2008-02-10 5 4 2008-01-20 10 Selain hasil di atas, kita juga dapat menggunakan tambahan WITH ROLLUP di belakang group by untuk menampilkan jumlah total seluruh barang. Berikut ini perintah query dan hasilnya: SELECT pesan.id_pesan, pesan.tgl_pesan, SUM(detil_pesan.jumlah) as jumlah FROM pesan, detil_pesan WHERE pesan.id_pesan=detil_pesan.id_pesan GROUP BY id_pesan WITH ROLLUP; id_pesan tgl_pesan jumlah 1 2008-02-02 6 2 2008-02-05 7 3 2008-02-10 5 4 2008-01-20 10 NULL 2008-01-20 28 Modul Teori Database Aknela 2013 80

HAVING Perintah query berikut ini akan menampilkan jumlah item (jenis) barang untuk tiap transaksi. SELECT pesan.id_pesan, COUNT(detil_pesan.id_produk) as jumlah FROM pesan, detil_pesan WHERE pesan.id_pesan=detil_pesan.id_pesan GROUP BY pesan.id_pesan id_pesan jumlah 1 3 2 3 3 1 4 1 Dari hasil query di atas tampak bahwa ditampilkan jumlah item barang untuk semua transaksi. Selanjutnya bagaimana jika kita ingin hanya menampilkan data yang jumlah item barangnya lebih dari 2 (dua)? Mungkin kita langsung berfikir untuk menggunakan WHERE seperti perintah query sebagai berikut: SELECT pesan.id_pesan, COUNT(detil_pesan.id_produk) as jumlah FROM pesan, detil_pesan WHERE pesan.id_pesan=detil_pesan.id_pesan AND jumlah > 2 GROUP BY pesan.id_pesan Modul Teori Database Aknela 2013 81

Hasilnya ternyata tidak sesuai yang diinginkan. Lihat hasilnya sebagai berikut: id_pesan jumlah 1 1 2 1 3 1 4 1 Hal tersebut terjadi karena kondisi dalam WHERE tidak dapat diterapkan pada fungsi agregrasi seperti COUNT, SUM, AVG dll. Untuk menyeleksi suatu fungsi agregasi, kita tidak dapat menggunakan WHERE, namun kita dapat menggunakan HAVING. Berikut ini perintah query yang menggunakan HAVING: SELECT pesan.id_pesan, COUNT(detil_pesan.id_produk) as jumlah FROM pesan, detil_pesan WHERE pesan.id_pesan=detil_pesan.id_pesan GROUP BY pesan.id_pesan HAVING jumlah > 2 Lihat hasilnya sebagai berikut: id_pesan jumlah 1 3 2 3 Modul Teori Database Aknela 2013 82

SubSELECT Mulai versi 4.1, MySQL mendukung perintah query SubSELECT dimana memungkinkan untuk melakukan query di dalam query. Misalnya kita akan menampilkan data yang kondisinya merupakan hasil dari query lain. Perintah SubSELECT memiliki banyak variasi. Berikut ini beberapa variasi bentuk perintah SubSELECT. SELECT... WHERE col=[any ALL] (SELECT...); SELECT... WHERE col [NOT] IN (SELECT...); SELECT ROW(val1,val2,..) =[ANY] (SELECT col1,col2,..); SELECT... WHERE col = [NOT] EXISTS (SELECT...); SELECT... FROM (SELECT...) AS name WHERE...; Dan berikut ini beberapa contoh perintah query yang menggunakan SubSELECT. Menampilkan daftar pelanggan yang pernah melakukan transaksi (pemesanan). SELECT id_pelanggan, nm_pelanggan FROM pelanggan WHERE id_pelanggan IN (SELECT id_pelanggan FROM pesan); Hasilnya sebagai berikut: Modul Teori Database Aknela 2013 83

+--------------+----------------------------+ id_pelanggan nm_pelanggan +--------------+----------------------------+ P0001 Achmad Solichin P0002 Budianto P0004 Amin Riyadi +--------------+----------------------------+ Menampilkan data pemesanan dengan jumlah barang terbanyak. SELECT id_pesan, jumlah FROM detil_pesan WHERE jumlah = ( SELECT MAX(jumlah) FROM detil_pesan); Hasilnya sebagai berikut: +----------+-----------------------+ id_pesan jumlah +----------+-----------------------+ 4 10 +----------+-----------------------+ Modul Teori Database Aknela 2013 84