SQL: DML Basis Data Pertemuan 06
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. Database language harus melaksanakan operasi-operasi tersebut dengan usaha minimal yang dilakukan user dan sintaks/struktur instruksi harus mudah dipahami/dipelajari. Harus portable sehingga memungkinkan untuk pindah dari satu DBMS ke DBMS lainnya.
2 komponen SQL DDL untuk definisi struktur database. DML untuk pengambilan (retrieving) dan perubahan (updating) data. SQL cukup mudah dipelajari, karena: Merupakan bahasa non-procedural – cukup menspesifikasikan informasi apa yang dibutuhkan daripada bagaimana mendapatkannya. Pada dasarnya mempunyai format yang bebas.
Sejarah SQL(1) 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. Akar dari SQL, adalah SQUARE (Specifying Queries as Relational Expressions), dimana mendahului proyek System R.
Sejarah SQL(2) 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).
Penulisan perintah SQL Statemen SQL terdiri dari reserved word dan user-defined word. 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. Kebanyakan komponen dari perintah SQL bersifat case insensitive, kecuali untuk data literal karakter.
Penulisan perintah SQL(2) Mudah dibaca dengan pengaturan baris dan spasi : 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. Menggunakan bentuk notasi Backus Naur Form (BNF)
Literal 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).
Dreamhome Database
Dreamhome Database
Dreamhome Database
Dreamhome Database
Dreamhome Database
Perintah SELECT Bentuk umum : SELECT [DISTINCT | ALL] {* | [columnExpression [AS newName]] [,...] } FROM TableName [alias] [, ...] [WHERE condition] [GROUP BY columnList] [HAVING condition] [ORDER BY columnList]
Perintah SELECT 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 kolom mana yang akan ditampilkan. ORDER BY : Menspesifikasikan order pada output. Catatan : Perintah pada clause tidak dapat diubah. Perintah yang harus ada hanya SELECT dan FROM, lainnya bersifat optional.
Contoh : Semua Baris dan kolom Tampilkan seluruh detail staff SELECT staffNo, fName, lName, position, sex, DOB, salary, branchNo FROM Staff; Dapat menggunakan * sebagai singkatan dari ‘semua kolom’: SELECT * FROM Staff;
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;
Kegunaan DISTINCT Menggunakan DISTINCT untuk menghilangkan duplikasi Tampilkan nomor properti dari seluruh properti yang pernah dilihat/dikunjungi. SELECT propertyNo FROM Viewing; SELECT DISTINCT propertyNo
Contoh : Field yang dihasilkan Tampilkan daftar gaji/bulan untuk seluruh staff, dengam menampilkan nomor staff, nama awal dan akhir dan detail gaji. SELECT staffNo, fName, lName, salary/12 FROM Staff;
Memberi nama kolom, menggunakan clause AS : SELECT staffNo, fName, lName, salary/12 AS monthlySalary FROM Staff;
Contoh : Kondisi pencarian dengan perbandingan Tampilkan seluruh staff yang mempunyai gaji lebih dari 10,000. SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary > 10000;
Contoh : Kondisi pencarian dengan perbandingan gabungan Tampilkan detail seluruh kantor cabang yang beralamat di London atau Glasgow. SELECT * FROM Branch WHERE city = “London” OR city = “Glasgow”;
Contoh : Kondisi pencarian dengan batas (range) Tampilkan seluruh staff yang berpenghasilan antara 20,000 dan 30,000. SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary BETWEEN 20000 AND 30000;
Kondisi pencarian dengan batas (range) BETWEEN menyertakan angka terakhir dari range. Terdapat juga versi negasi NOT BETWEEN. BETWEEN bukan merupakan tambahan yang berarti, karena dapat dituliskan : SELECT staffNo, fName, lName, position, salary FROM Staff WHERE salary >=20000 AND salary <= 30000; Bermanfaat untuk nilai dengan range tertentu.
Contoh : Himpunan Anggota (Set Membership) Tampilkan seluruh manager dan supervisor. SELECT staffNo, fName, lName, position FROM Staff WHERE position IN (‘Manager’, ‘Supervisor’);
Himpunan Anggota (Set Membership) Terdapat versi negasi (NOT IN). IN bukan merupakan tambahan berarti, karena dapat dituliskan : SELECT staffNo, fName, lName, position FROM Staff WHERE position=‘Manager’ OR position = ‘Supervisor’; IN lebih efisien jika himpunan (set) berisi beberapa nilai.
Penyesuaian bentuk (Pattern Matching) Tampilkan detail seluruh pemilik dengan kata ‘Glasgow’ pada alamatnya. SELECT OwnerNo, fName, lName, address, telNo FROM PrivateOwner WHERE address LIKE ‘%Glasgow%’;
Simbol Pattern SQL mempunyai dua simbol pattern matching : %: rangkaian dari nol atau lebih karakter. _ (garis bawah): satu karakter tunggal. LIKE ‘%Glasgow%’ berarti rangkaian karakter yang mengandung kata ‘Glasgow’, panjang string tidak ditentukan.
Contoh : 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: SELECT clientNo, viewDate FROM Viewing WHERE propertyNo = ‘PG4’ AND comment IS NULL; Versi negasi (IS NOT NULL) dapat menguji nilai non-null.
Ordering kolom tunggal Tampilkan daftar gaji seluruh staf, disusun secara descending berdasarkan salary. SELECT staffNo, fName, lName, salary FROM Staff ORDER BY salary DESC;
Ordering multiple kolom Tampilkan daftar ringkasan properti berdasarkan tipe properti. SELECT propertyNo, type, rooms, rent FROM PropertyForRent ORDER BY type;
minor order Dari contoh diatas terdapat empat field. Untuk menyusun properti berdasarkan rent maka harus dispesifikasikan minor order sbb : SELECT propertyNo, type, rooms, rent FROM PropertyForRent ORDER BY type, rent DESC;
minor order