04 SQL: Query single table Mata Kuliah: Basis Data Sabar Rudiarto, S.Kom., M.Kom. ILMU KOMPUTER Teknik Informatika
Penulisan perintah SQL Tujuan dari SQL Sejarah SQL Pentingnya SQL Penulisan perintah SQL Create Database Select Latihan
Idealnya, database language dapat memungkinkan user untuk: Tujuan dari SQL Idealnya, database language dapat memungkinkan user untuk: Membuat struktur relasi dan database Melakukan operasi penyisipan (insertion), perubahan (modification) dan penghapusan (deletion) data dari relasion; Melakukan query sederhana dan rumit.
Tujuan dari SQL Melaksanakan operasi-operasi tersebut dengan usaha minimal yang dilakukan user Sintaks/struktur instruksi harus mudah dipahami/dipelajari Harus portable sehingga memungkinkan untuk pindah dari satu DBMS ke DBMS lainnya
SQL merupakan transform-oriented language dengan 2 komponen utama: Tujuan dari SQL SQL merupakan transform-oriented language dengan 2 komponen utama: DDL untuk definisi struktur database DML untuk pengambilan (retrieving) dan perubahan (updating) data
SQL cukup mudah dipelajari , karena: Tujuan dari SQL Sampai dengan SQL3, SQL tidak mengandung perintah alih kontrol. Hal ini diimplementasikan dengan menggunakan bahasa pemrograman atau perintah kontrol atau secara interaktif, sesuai dengan keputusan user. SQL cukup mudah dipelajari , karena: Merupakan bahasa non-procedural – cukup menspesifikasikan informasi apa yang dibutuhkan daripada bagaimana mendapatkannya. Pada dasarnya mempunyai format yang bebas.
Tujuan dari SQL SQL Terdiri dari bahasa Inggris standard CREATE TABLE Staff(staffNo VARCHAR(5), lName VARCHAR(15), salary DECIMAL(7,2)); INSERT INTO Staff VALUES (‘SG16’, ‘Brown’, 8300); SELECT staffNo, lName, salary FROM Staff WHERE salary > 10000;
Tujuan dari SQL SQL dapat digunakan oleh bermacam-macam user, termasuk DBA, manajemen, pembuat aplikasi dan user lainnya. Terdapat ISO standard untuk SQL, membuat bahasa formal dan de facto untuk relasional database.
Tahun 1974, D. Chamberlin (IBM San Jose Laboratory) mendefinisikan bahasa yang disebut ‘Structured English Query Language’ (SEQUEL). Versi yang telah diperbaiki, SEQUEL/2, ditemukan tahun 1976 tetapi namanya diubah menjadi SQL untuk alasan hukum. Sampai saat ini masih banyak yang menyebut ‘see-quel’, walaupun ejaan sesungguhnya adalah ‘S-Q-L’. IBM secara berturut-turut memproduksi prototype DBMS yang disebut System R, berdasarkan pada SEQUEL/2. Sejarah SQL http://www.computerhistory.org/fellowawards/media/img/fellows/2009_don_chamberlin.jpg
Pada tahun 1987, ANSI dan ISO mempublikasikan standar awal untuk SQL. Akar dari SQL, adalah SQUARE (Specifying Queries as Relational Expressions), dimana mendahului proyek System R. Diakhir 70-an, ORACLE muncul dan mungkin merupakan RDBMS komersil pertama yang berbasis SQL. Pada tahun 1987, ANSI dan ISO mempublikasikan standar awal untuk SQL. Pada tahun 1989, ISO mempublikasikan tambahan yang mendefinisikan ‘Integrity Enhancement Feature Tahun 1992, revisi utama yang pertama dilakukan pada standar ISO, dikenal sebagai SQL2 atau SQL/92. Tahun 1999, SQL3 dikeluarkan dengan dukungan untuk manajemen data berorientasi objek (object-oriented data management). Sejarah SQL
Pentingnya SQL Contoh : SQL telah menjadi bagian dari arsitektur aplikasi seperti arsitektur aplikasi sistem IBM. Merupakan pilihan yang strategis untuk organisasi besar dan berpengaruh (co : X/OPEN). SQL digunakan untuk standar lainnya dan mempengaruhi pembuatan standar lainnya sebagai definitional tool. Contoh : Standar ISO Information Resource Directory System (IRDS). Standar Remote Data Access (RDA).
Penulisan perintah SQL Reserved word adalah bagian yang telah ditetapkan pada SQL dan penulisannya harus sesuai dan tidak bisa dipisah-pisahkan. User-defined word dibuat oleh user dan merepresentasikan nama-nama berbagai objek database seperti relasi, kolom dan view. Statemen SQL terdiri dari reserved word dan user-defined word. Kebanyakan komponen dari perintah SQL bersifat case insensitive, kecuali untuk data literal karakter. Setiap clause dimulai pada baris baru. Awal dari suatu clause harus berurut dengan clause lainnya. Jika clause mempunyai beberapa bagian, harus ditampilkan pada baris yang berbeda dan diberi spasi pada awal clause. Mudah dibaca dengan pengaturan baris dan spasi:
Penulisan perintah SQL Menggunakan huruf besar untuk merepresentasi-kan reserved word. Menggunakan huruf kecil untuk merepresentasikan user-defined word. Mengindikasikan pilihan (choice) diantara beberapa alternatif. Kurung kurawal mengindikasikan required element. Kurung siku mengindikasikan optional element. … mengindikasikan pengulangan (optional repetition ,0 atau lebih). Menggunakan bentuk notasi Backus Naur Form (BNF):
Penulisan perintah SQL Literal merupakan konstanta yang digunakan dalam statemen SQL. Semua literal non-numerik dituliskan diantara kutip tunggal (co : ‘London’). Semua literal numerik literals tidak dituliskan diantara kutip (co : 650.00). Literal
Dream home Database Registration Viewing ClientNo BranchNo StaffNo Date_joined CR76 B005 SL41 2-Jan-01 CR56 B003 SG37 11-Apr-00 CR74 16-Nov-99 CR62 B007 SA9 7-Mar-00 ClientNo PropertyNo View_Date Comment CR56 PA14 24-May-01 Too Small CR76 PG4 20-Apr-01 Too Remote 26-May-01 CR62 14-May-01 No Dining Room PG36 28-Apr-01
Creating Database http://www.youtube.com/watch?v=O4SIpJMH7po&list=PL32BC9C878BA7208
Dream home Database Client Private Owner ClientNo fName lName TelNo PrefTy pe MaxRent CR76 John Kay 0207-774-5632 Flat 425 CR56 Aline Stewart 0141-848-1825 350 CR74 Mike Ritchie 01475-392178 House 750 CR62 Mary Tregear 01224-196720 600 OwnerNo fName lName Address TelNo CO46 Joe Keogh 2 Fergus Dr, Abeerdeen AB2 7SX 01224-861212 CO87 Carol Farrel 6 Achray St, GlasgowG32 9DX 0141-357-7419 CO40 Tina Murphy 63 Well St, Glasgow G42 0141-943-1728 CO93 Tony Shaw 12 Park Pl, GlasgowG4 0QR 0141-225-7025
Dream home Database Property For Rent Property No Street City PostCod e Type Room s Rent Owner No StaffNo Branch No PA14 16 Holhead Aberdeen AB7 5SO House 6 650 CO46 SA9 B007 PL94 6 Argyll St London NW2 Flat 4 400 CO87 SL41 B005 PG4 6 Lawrence St Glasgow G11 9QX 3 350 CO40 - B003 PG36 2 Manor Rd G32 4QX 375 CO93 SG37 PG21 18 Dale Rd G12 5 600 PG16 5 Novar Dr G12 9AX 450 SG14
Dream home Database Branch BranchNo Street City PostCode B005 22 Deer Rd London SW1 4EH B007 16 Argyll St Aberdeen AB2 3SU B003 163 Main St Glasgow G11 9QX B004 32 Manse Rd Bristol BS99 1NZ B002 56 Clover Dr NW10 6EU
Dream home Database Staff StaffNo fName lName Position Sex DOB Salary BranchNo SL21 John White Manager M 1-Oct-45 30000 B005 SG37 Ann Beech Assistant F 10-Nov-60 12000 B003 SG14 David Ford Supervisor 24-Mar-58 18000 SA9 Mary Howe 19-Feb-70 9000 B007 SG5 Susan Brand 3-Jun-40 24000 SL41 Julie Lee 13-Jun-65
Perintah SELECT Bentuk umum : Dimana : FROM — Menspesifikasikan tabel-tabel yang digunakan. WHERE — Baris filter (kondisi yang harus dipenuhi). GROUP BY — Bentuk pengelompokkan baris dengan nilai kolom yang sama. HAVING — Menyeleksi subjek grup untuk beberapa kondisi. SELECT — Menspesifikasikan kolommana yang akan ditampilkan. ORDER BY — Menspesifikasikan order pada output.
Select http://www.youtube.com/watch?v=O4SIpJMH7po&list=PL32BC9C878BA7208
Perintah SELECT Catatan : Perintah pada clause tidak dapat diubah. Perintah yang harus ada hanya SELECT dan FROM, lainnya bersifat optional.
Perintah SELECT Contoh: Semua Baris dan kolom Tampilkan seluruh detail staff
Perintah SELECT Contoh : Seluruh baris, kolom tertentu. Buatlah daftar gaji seluruh staff yang menampilkan nomor staff, nama awal dan akhir, dan gaji. SELECT staffNo, fName, lName, salary FROM Staff;
Perintah SELECT PenggunaanklausaDISTINCT Contoh : Kegunaan DISTINCT Tampilkan nomor properti dari seluruh properti yang pernah dilihat / dikunjungi. SELECT propertyNo FROM Viewing;
Distinct Clause http://www.youtube.com/watch?v=O4SIpJMH7po&list=PL32BC9C878BA7208
Perintah SELECT Menggunakan DISTINCT untuk menghilangkan duplikasi: SELECT DISTINCT propertyNo FROM Viewing;
Perintah SELECT Contoh: Field yang dihasilkan Tampilkan daftar gaji/bulan untuk seluruh staff, dengan menampilkan nomor staff, nama awal dan akhir dan detail gaji. SELECT staffNo, fName, lName, salary/12 FROM Staff;
Perintah SELECT Memberi nama kolom, menggunakan clause AS : Kondisi pencarian dengan perbandingan Tampilkan seluruh staff yang mempunyai gaji lebih dari 10,000. SELECT staffNo, fName, lName, salary/12 AS monthlySalary FROM Staff; SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary > 10000;
Perintah SELECT Kondisi pencarian dengan perbandingan gabungan Tampilkan detail seluruhkantorcabang yang beralamat di London atau Glasgow. SELECT * FROM Branch WHERE city = “London” OR city = “Glasgow”;
Perintah SELECT Kondisi pencarian dengan batas (range) Tampilkan seluruh staff yang berpenghasilan antara 20,000 dan 30,000. BETWEEN menyertakan angka terakhir dari range. SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary BETWEEN 20000 AND 30000;
Perintah SELECT Terdapat juga versi negasi NOT BETWEEN. BETWEEN bukan merupakan tambahan yang berarti, karena dapat dituliskan : Bermanfaatuntuknilaidengan range tertentu. SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary >=20000 AND salary <= 30000;
Perintah SELECT Himpunan Anggota (Set Membership) Tampilkan seluruh manager dan supervisor. SELECT staffNo, fName, lName, position FROM Staff WHERE position IN (‘Manager’, ‘Supervisor’);
Perintah SELECT Terdapatversinegasi (NOT IN). IN bukan merupakan tambahan berarti, karena dapat dituliskan : IN lebih efisien jika himpunan (set) berisi beberapa nilai.
Perintah SELECT Penyesuaian bentuk (Pattern Matching) Tampilkan detail seluruh pemilik dengan kata ‘Glasgow’ pada alamatnya.
Perintah SELECT SQL mempunyaiduasimbol pattern matching : %: rangkaian dari nol atau lebih karakter. _ (garisbawah): satu karakter tunggal. LIKE ‘%Glasgow%’ berarti rangkaian karakter yang mengandung kata ‘Glasgow’, panjang string tidak ditentukan.
Perintah SELECT Kondisi pencarian NULL Tampilkan detail seluruh all viewing pada properti PG4 dimana tidak terdapat komentar. Terdapat 2 viewing untuk properti PG4, satu terdapat komentar dan lainnya tidak. Dilakukan test nilai null secara tegas dengan keyword IS NULL:
Perintah SELECT Versi negasi (IS NOT NULL) dapat menguji nilai non-null. Contoh : Ordering kolom tunggal Tampilkan daftar gaji seluruh staf, disusun secara descending berdasarkan salary. SELECT staffNo, fName, lName, salary FROM Staff ORDER BY salary DESC;
Not null http://www.youtube.com/watch?v=O4SIpJMH7po&list=PL32BC9C878BA7208
Perintah SELECT Ordering multiple kolom Tampilkan daftar ringkasan properti berdasarkan tipe properti.
Create Table` http://www.youtube.com/watch?v=O4SIpJMH7po&list=PL32BC9C878BA7208
Perintah SELECT Dari contoh diatas terdapat empat field. Untuk menyusun property berdasarkan rent maka harus dispesifikasikan minor order sbb : SELECT propertyNo, type, rooms, rent FROM PropertyForRent ORDER BY type, rent DESC;
Perintah SELECT Perintah SELECT –Aggregate Standar ISO mendefinisikan lima fungsi aggregate : COUNT Mengembalikan angka dari nilai dalam kolom tertentu SUM Mengembalikan jumlah dari nilai yang terdapat dalam kolom AVG Mengembalikan rata-rata dari nilai yang ada dalam kolom MIN Mengembalikan nilai terkecil dari nilai yang terdapat dalam kolom MAX Mengembalikannilaiterbesardarinilai yang terdapatdalamkolom
Perintah SELECT Setiap fungsi beroperasi pada satu kolom dan mengembalikan satu nilai tunggal. COUNT, MIN, dan MAX digunakan untuk field numerik dan non-numerik, sedangkan SUM dan AVG hanya dapat digunakan pada field numerik. Bagian dari COUNT(*), pertama setiap fungsi mengeliminasi null dan mengoperasikan nilai non-null. COUNT(*) menghitung seluruh baris dalam tabel, walaupun terdapat null atau duplikasi.
Perintah SELECT Menggunakan DISTINCT sebelum nama kolom untuk menghilangkan duplikasi. DISTINCT tidak berpengaruh terhadap operasi MIN/MAX, tetapi berpengaruh pada SUM/AVG. Fungsi Aggregate dapat digunakan dalam daftar SELECT dan clause HAVING clause.
Perintah SELECT Jika daftar SELECT menyertakan fungsi aggregate dan tidak terdapat clause GROUP BY, daftar SELECT tidak dapat mengacu kekolom dengan fungsi aggregate. Contoh berikut adalah salah : SELECT staffNo, COUNT(salary) FROM Staff;
Perintah SELECT Kegunaan COUNT(*) Tampilkan banyaknya properti yang mempunyai biaya sewa lebih dari £350 per bulan
Perintah SELECT Kegunaan COUNT(DISTINCT) Tampilkan banyaknya properti yang berbeda telah dilihat selama May ‘01? SELECT COUNT(DISTINCT propertyNo) AS count FROM Viewing WHERE viewDate BETWEEN ‘1-May-01’ AND ‘31-May-01’;
Perintah SELECT Kegunaan COUNT dan SUM Tampilkan jumlah manager dan jumlah gaji mereka. SELECT COUNT(staffNo) AS count, SUM(salary) AS sum FROM Staff WHERE position = ‘Manager’;
Perintah SELECT Kegunaan MIN, MAX, AVG Carilah minimum, maximum, dan average gaji staff SELECT MIN(salary) AS min, MAX(salary) AS max, AVG(salary) AS avg FROM Staff;
Perintah SELECT Perintah SELECT – Grouping Menggunakan clause GROUP BY untuk mendapatkan sub-total. SELECT dan GROUP BY terintegrasi :setiap item dalam SELECT harus berupa single-valued per group, dan clause SELECT hanya dapat mengandung : Nama kolom Fungsi aggregate Konstanta Ekspresi terdiri dari kombinasi tersebut diatas.
Perintah SELECT Semua nama kolom dalam SELECT harus ditampilkan dalam clause GROUP BY kecuali jika dinamakan dalam fungsi aggregate. Jika WHERE digunakan bersama GROUP BY, WHERE dimunculkan lebih dulu, kemudian groups ditampilkan dari sisa baris untuk memenuhi predikat. Standar ISO mempertimbangkan dua null bernilai sama untuk kegunaan dari clause GROUP BY.
Perintah SELECT Kegunaan GROUP BY Tampilkan jumlah staff pada setiap cabangdan total gaji staf pada masing-masing cabang SELECT branchNo, COUNT(staffNo) AS count, SUM(salary) AS sum FROM Staff GROUP BY branchNo ORDER BY branchNo;
Perintah SELECT Pengelompokkan terbatas – HAVING clause Clause HAVING didesain untuk digunakan bersama GROUP BY untuk membatasi pengelompokkan yang ditampilkan pada tabel hasil akhir. Hampir sama dengan WHERE, dimana WHERE menyeleksi baris secara individual, sedangkan HAVING secara kelompok. Nama kolom dalam clause HAVING juga akan ditampilkan dalam daftar GROUP BY atau dimasukan dalam fungsi aggregate.
Perintah SELECT Contoh : Kegunaan HAVING Tampilkan jumlah staff dan jumlah gaji mereka untuk cabang dengan jumlah staff lebih dari 1
Latihan Perhatikan skema Hotel berikut: Hotel (hotelNo, hotelName, city) Room (roomNo, hotelNo, type, price) Booking (hotelNo, guestNo, dateFrom, dateTo, roomNo ) Guest (guestNo, guestName, guestAddress)
Latihan Buatlah SQL DML untuk: Menampilkan semua nama hotel yang ada di kota Bandung Menampilkan semua hotel dengan harga terendah dan harga tertinggi dan harga rata-ratanya Menampilkan nama hotel yang harga sewanya diatas Rp. 1.000.000 Menampilkan nama tamu yang berasal dari Depok
Latihan Tampilkan nama tamu dan berapa lama mereka menginap Tampilkan ada berapa jumlah tamu yang berasal dari kota Bandung g. Tampilkan nama kota yang terdapat hotel
Video Three level architecture 3 levels architecture http://www.youtube.com/watchv=3ddQ12SJ5LE Gambar https://google.co.id Buku
Any Question?
Sabar Rudiarto, S.Kom., M.Kom. sabar.rudiarto@gmail.com Subject: tugas4-bd-nama-nim-PAGI