0% menganggap dokumen ini bermanfaat (0 suara)
3 tayangan77 halaman

Pengenalan Pemrograman Berorientasi Objek

Pemrograman berorientasi objek bertujuan untuk mengimplementasikan entitas dunia nyata seperti pewarisan, penyembunyian, dan polimorfisme dalam kode. Konsep kunci dari OOP adalah kelas, objek, abstraksi data, enkapsulasi, pewarisan, polimorfisme, dan pengikatan dinamis. Kelas mendefinisikan properti dan perilaku umum, sedangkan objek adalah instansi dari kelas. Abstraksi data menyembunyikan rincian latar belakang dan enkapsulasi mengikat kode dan data bersama, menyembunyikan data dari kelas lain. Pewarisan memungkinkan kelas untuk mewarisi properti dari kelas lain. Polimorfisme berarti pesan yang sama dapat ditampilkan dalam bentuk yang berbeda. Pengikatan dinamis menentukan eksekusi kode saat runtime berdasarkan objek.

Diterjemahkan oleh

ScribdTranslations
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd
0% menganggap dokumen ini bermanfaat (0 suara)
3 tayangan77 halaman

Pengenalan Pemrograman Berorientasi Objek

Pemrograman berorientasi objek bertujuan untuk mengimplementasikan entitas dunia nyata seperti pewarisan, penyembunyian, dan polimorfisme dalam kode. Konsep kunci dari OOP adalah kelas, objek, abstraksi data, enkapsulasi, pewarisan, polimorfisme, dan pengikatan dinamis. Kelas mendefinisikan properti dan perilaku umum, sedangkan objek adalah instansi dari kelas. Abstraksi data menyembunyikan rincian latar belakang dan enkapsulasi mengikat kode dan data bersama, menyembunyikan data dari kelas lain. Pewarisan memungkinkan kelas untuk mewarisi properti dari kelas lain. Polimorfisme berarti pesan yang sama dapat ditampilkan dalam bentuk yang berbeda. Pengikatan dinamis menentukan eksekusi kode saat runtime berdasarkan objek.

Diterjemahkan oleh

ScribdTranslations
Hak Cipta
© All Rights Reserved
Kami menangani hak cipta konten dengan serius. Jika Anda merasa konten ini milik Anda, ajukan klaim di sini.
Format Tersedia
Unduh sebagai PDF, TXT atau baca online di Scribd

Pengenalan ke OOP

Pemrograman Berorientasi Objek atau OOP mengacu pada bahasa yang menggunakan objek dalam pemrograman. Berorientasi objek
pemrograman bertujuan untuk mengimplementasikan entitas dunia nyata seperti pewarisan, penyembunyian, polimorfisme, dll dalam pemrograman.
Tujuan utama OOP adalah untuk mengikat bersama data dan fungsi yang beroperasi pada mereka sehingga tidak ada bagian lain dari yang lain.
kode dapat mengakses data ini kecuali fungsi itu.

Konsep OOP
Kelas
Objek
Abstraksi Data
Enkapsulasi
Warisan
Polimorfisme
Pengikatan Dinamis

1. Kelas:
Kelas adalah tipe data yang ditentukan oleh pengguna. Ini terdiri dari anggota data dan fungsi anggota, yang dapat diakses dan
digunakan dengan membuat instansi dari kelas tersebut. Ia mewakili kumpulan properti atau metode yang umum bagi semua
objek dari satu tipe. Sebuah kelas seperti cetak biru untuk sebuah objek.
Sebagai Contoh: Pertimbangkan Kelas Mobil. Mungkin ada banyak mobil dengan nama dan merek yang berbeda tetapi semua dari mereka
akan membagikan beberapa sifat umum seperti semuanya akan memiliki 4 roda, Batas Kecepatan, Jarak Tempuh, dll. Jadi di sini,
Mobil adalah kelasnya, dan roda, batas kecepatan, jarak tempuh adalah properti mereka.

2. Objek:
Ini adalah unit dasar dari Pemrograman Berorientasi Objek dan mewakili entitas kehidupan nyata. Sebuah Objek adalah contoh dari sebuah
Kelas. Ketika sebuah kelas didefinisikan, tidak ada memori yang dialokasikan tetapi ketika diinstansiasi (misalnya, sebuah objek dibuat) memori
is allocated. An object has an identity, state, and behavior. Each object contains data and code to manipulate the
data. Objek dapat berinteraksi tanpa harus mengetahui rincian data atau kode satu sama lain, cukup mengetahui
tipe pesan yang diterima dan tipe respons yang dikembalikan oleh objek.
Misalnya, "Anjing" adalah objek dunia nyata, yang memiliki beberapa karakteristik seperti warna, ras, gonggongan, tidur, dan makan.

Objek

3. Abstraksi Data:
Abstraksi data adalah salah satu fitur yang paling penting dan esensial dari pemrograman berbasis objek.
abstraksi mengacu pada penyediaan hanya informasi penting tentang data kepada dunia luar, menyembunyikan latar belakang
detail atau implementasi. Pertimbangkan contoh kehidupan nyata seorang pria yang mengemudikan mobil. Pria tersebut hanya tahu bahwa menekan
pengaktifan akselerator akan meningkatkan kecepatan mobil atau menerapkan rem akan menghentikan mobil, tetapi dia tidak tahu tentang
bagaimana ketika menekan akselerator kecepatan meningkat, dia tidak mengetahui tentang mekanisme dalam mobil atau
implementasi akselerator, rem, dll di mobil. Inilah yang dimaksud dengan abstraksi.

4. Encapsulation:
Enkapsulasi didefinisikan sebagai pembungkusan data di bawah satu unit. Ini adalah mekanisme yang mengikat bersama kode.
dan data yang dimanipulasinya. Dalam Enkapsulasi, variabel atau data dari sebuah kelas disembunyikan dari kelas lain mana pun dan
hanya dapat diakses melalui fungsi anggota mana pun dari kelas mereka di mana mereka dideklarasikan. Seperti dalam enkapsulasi,
data dalam sebuah kelas disembunyikan dari kelas lain, sehingga juga dikenal sebagai penyembunyian data.
Pertimbangkan contoh nyata dari enkapsulasi, di sebuah perusahaan, ada berbagai bagian seperti bagian akuntansi,
finance section, sales section, etc. The finance section handles all the financial transactions and keeps records of all
data yang terkait dengan keuangan. Demikian pula, bagian penjualan mengelola semua aktivitas terkait penjualan dan menyimpan catatan
semua penjualan. Sekarang mungkin muncul situasi ketika karena suatu alasan seorang pejabat dari bagian keuangan membutuhkan semua
data tentang penjualan pada bulan tertentu. Dalam hal ini, dia tidak diizinkan untuk mengakses data penjualan secara langsung
bagian. Dia pertama-tama harus menghubungi beberapa petugas lain di bagian penjualan dan kemudian memintanya untuk memberikan yang tertentu
data. Inilah yang disebut enkapsulasi. Di sini adalah data bagian penjualan dan karyawan yang dapat memanipulasinya
dibungkus di bawah satu nama "bagian penjualan".

5. Warisan:
Pewarisan adalah pilar penting dalam OOP (Pemrograman Berorientasi Objek). Kemampuan suatu kelas untuk diturunkan
Sifat dan karakteristik dari kelas lain disebut Pewarisan. Ketika kita menulis sebuah kelas, kita mewarisi sifat-sifat tersebut.
dari kelas lain. Jadi ketika kita membuat sebuah kelas, kita tidak perlu menulis semua properti dan fungsi lagi dan
sekali lagi, karena ini dapat diwarisi dari kelas lain yang memilikinya. Pewarisan memungkinkan pengguna untuk menggunakan kembali kode tersebut
setiap kali memungkinkan dan mengurangi redundansinya.

6. Polimorfisme:
Kata polymorphism berarti memiliki banyak bentuk. Dengan kata sederhana, kita dapat mendefinisikan polymorphism sebagai kemampuan
pesan yang ditampilkan dalam lebih dari satu bentuk. Misalnya, seorang individu pada saat yang sama dapat memiliki yang berbeda.
karakteristik. Seperti seorang pria yang pada saat yang sama adalah seorang ayah, seorang suami, seorang karyawan. Jadi orang yang sama memiliki berbagai
perilaku dalam situasi yang berbeda. Ini disebut polimorfisme.
7. Pengikatan Dinamis:
Dalam pengikatan dinamis, kode yang akan dijalankan sebagai respons terhadap panggilan fungsi ditentukan saat waktu berjalan. Pengikatan dinamis
berarti bahwa kode yang terkait dengan panggilan prosedur tertentu tidak diketahui hingga saat panggilan dilakukan saat dijalankan
waktu. Pengikatan Metode Dinamis Salah satu keuntungan utama dari warisan adalah bahwa beberapa kelas turunan D memiliki semua
anggota dari kelas dasar B. Begitu D tidak menyembunyikan anggota publik B, maka objek D dapat mewakili
B dalam konteks apa pun di mana B dapat digunakan. Fitur ini dikenal sebagai polimorfisme subtipe.

Perbedaan antara Pemrograman Prosedural dan Pemrograman Berorientasi Objek:


Berorientasi Prosedural
Pemrograman Pemrograman Berbasis Objek

Dalam pemrograman prosedural, Dalam pemrograman berorientasi objek,


program is divided into small parts program dibagi menjadi kecil
calledfunctions. bagian yang disebut objek.

Pemrograman prosedural Pemrograman berorientasi objek


ikuti pendekatan dari atas ke bawah. mengikuti pendekatan dari bawah ke atas.

Pemrograman berorientasi objek


Tidak ada spesifier akses di memiliki spesifikasi akses seperti
pemrograman prosedural. pribadi, publik, dilindungi, dll.

Menambahkan data dan fungsi baru adalah Menambahkan data dan fungsi baru adalah
tidak mudah. mudah.

Pemrograman prosedural tidak Pemrograman berorientasi objek


apakah ada cara yang tepat untuk bersembunyi menyediakan penyembunyian data sehingga lebih
data sehingga kurang aman. aman.

Dalam pemrograman prosedural, Overloading dimungkinkan dalam objek


overloading tidak mungkin. pemrograman berorientasi objek.
Berorientasi Prosedural
Pemrograman Pemrograman Berorientasi Objek

Dalam pemrograman prosedural, Dalam pemrograman berorientasi objek,


fungsi lebih penting daripada data lebih penting daripada
data. fungsi.

Pemrograman prosedural didasarkan pada Pemrograman berbasis objek adalah


dunia yang tidak nyata. berdasarkan dunia nyata.

Examples: C, FORTRAN, Pascal,


Dasar dll. Examples: C++, Java, Python,

Basis data

DBase adalah sistem manajemen basis data mikrokomputer (DBMS) yang berjalan di platform Windows. DBase adalah
unik karena memungkinkan produksi aplikasi yang beragam tanpa repot, termasuk middleware
aplikasi, aplikasi Web yang dihosting di server Windows dan aplikasi klien kaya Windows.

dBase adalah produk perangkat lunak khusus yang digunakan untuk membuat dan memanipulasi basis data relasional. Istilah ini juga dapat merujuk
ke dBasebasis databahasa pemrograman yang pertama kali muncul dalam produk dBase, tetapi sekarang tersedia di
banyak lainnyabasis dataformulir.

As a software product, dBase was the first commercially successful database system for personal computers, and it
tetap menjadi salah satu yang paling banyak digunakan. Versi sebelumnya termasuk dBase II, III, III Plus, dan beberapa versi dBase IV.
Dalam versi awal dBase, untuk membuat basis data atau mencari data atau melakukan hal lainnya, Anda harus mengetikkan
perintah di command line, sama seperti yang Anda lakukan di DOS. Saat ini, Anda dapat melakukan sebagian besar pekerjaan menggunakan suatu sistem dari
menu, tetapi Anda masih perlu cukup paham tentang basis data untuk bisa maju lebih jauh. Lebih mudah untuk menjalankan program yang
orang lain telah menulis menggunakan bahasa pemrograman dBase. Orang-orang yang tahu dBase dapat menulis secara lengkap
program untuk menyelesaikan tugas yang disesuaikan - seperti mengelola inventaris perusahaan Anda, sistem penagihan, dan pelanggan
daftar. Setelah program berfungsi dengan baik, siapa pun dapat menjalankannya tanpa harus mengetahui apa pun tentang dBase
perintah.
Meskipun bahasa pemrograman dBase berasal dari produk perangkat lunak dBase, bahasa ini telah mengambil alih
kehidupan sendiri. Berbagai produsen perangkat lunak lainnya telah menciptakan versi mereka sendiri. Sejak nama dBase adalah
terkait dengan produk tertentu, versi abstrak dari bahasa pemrograman dBase sering disebut sebagai
xBase sebagai gantinya.

DBase dirancang untuk memanipulasi basis data relasional. Ini adalah bahasa generasi ketiga yang serbaguna dengan non-prosedural.
kemampuan dan merupakan pemecah masalah yang sangat baik. Di antara sistem manajemen basis data dan alat, seperti:

Komponen penerjemah tepat waktu (JIT), yang mengubah bahasa sumber menjadi bahasa mesin
Sebuah linker untuk membuat aplikasi DBase (.exe files)
Installer mesin runtime untuk server Web dan mesin yang perlu menjalankan aplikasi runtime DBase
Pra-pemroses untuk membaca file sumber program dan menghasilkan file yang sudah diproses sebagai output, yang kemudian digunakan
ke dalam kompiler
Lingkungan pengembangan terintegrasi dengan jendela perintah dan penjelajah
Alat desain antarmuka pengguna grafis (GUI) dua arah, yang memiliki kemampuan untuk beralih bolak-balik
antara menggunakan alat desain GUI dan editor kode
Editor kode sumber, yang memungkinkan pengeditan dan pemasukan kode secara manual

DBase juga memiliki banyak kelas visual dan kelas basis data. Kelas visual termasuk:

TombolTekan
Gambar
Jaring
Gulir Bilah
ActiveX
Report
PemirsaLaporan
Kotak Putar
ComboBox
Daftar Kotak
Teks
LabelTeks
Formulir
SubForm
Buku catatan
Wadah
Kolom entri
Tombol Radio

Kelas basis data mencakup:

RowSet
Lapangan
StoredProc
Modul Data
Sesi
Basis data
Kuery

Pengenalan ke Basis Data

UNIT-1

Data:
Ini adalah kumpulan informasi.
Fakta-fakta yang dapat direkam dan memiliki makna implisit dikenal sebagai 'data'.
Contoh:
Customer ----- [Link].
[Link].
[Link].

Database:
Ini adalah kumpulan data yang saling terkait.
Ini dapat disimpan dalam bentuk tabel.
Sebuah basis data dapat memiliki ukuran dan kompleksitas yang bervariasi.
Basis data dapat dibuat dan dimanipulasi secara manual atau dapat juga di komputerisasi.
Contoh:
Basis data pelanggan terdiri dari bidang-bidang seperti cname, cno, dan ccity

Cname Cno Ccity

Sistem Basis Data:


Ini adalah sistem terkomputerisasi, yang memiliki tujuan keseluruhan untuk memelihara informasi dan memastikan bahwa
informasi tersedia sesuai permintaan.

Keuntungan:
[Link] dapat dikurangi.
[Link] dapat dihindari.
Data dapat dibagikan.
4. Standar dapat ditegakkan.
5. Pembatasan keamanan dapat diterapkan.
Integritas dapat dipertahankan.
[Link] data dapat dilakukan.
[Link] dapat disesuaikan.

Sistem Manajemen Basis Data (DBMS):


It is a collection of programs that enables user to create and maintain a database. In other words it is general-purpose
perangkat lunak yang memberikan pengguna proses mendefinisikan, membangun, dan memanipulasi basis data untuk
berbagai aplikasi.
Disadvantages in File Processing
Redundansi data dan inkonsistensi.
Kesulitan dalam mengakses data.
Isolasi data.
Integritas data.
Akses bersamaan tidak mungkin terjadi.
Masalah Keamanan.
.

Keuntungan dari DBMS:


[Link] Independence.
2. Akses Data yang Efisien.
3. Integritas dan keamanan data.
4. Administrasi data.
5. Akses bersamaan dan pemulihan dari kecelakaan.
6. Mengurangi Waktu Pengembangan Aplikasi.
Aplikasi
Aplikasi Basis Data:
Perbankan: semua transaksi
Airlines: reservations, schedules
Universities: registration, grades
Sales: customers, products, purchases
Ritel online: pelacakan pesanan, rekomendasi yang disesuaikan
Manufacturing: production, inventory, orders, supply chain
Sumber daya manusia: catatan karyawan, gaji, pemotongan pajak

Orang-orang yang berurusan dengan basis data

Banyak orang terlibat dalam desain, penggunaan, dan pemeliharaan basis data. Orang-orang ini dapat berupa
diklasifikasikan menjadi 2 jenis seperti di bawah ini.

Aktor di tempat kejadian:


Orang-orang, yang pekerjaannya melibatkan penggunaan basis data sehari-hari disebut 'Aktor di tempat kejadian',
daftar sebagai berikut.

[Link] Administrators (DBA):

DBA bertanggung jawab untuk mengotorisasi akses ke database, untuk


Mengkoordinasikan dan memantau penggunaannya serta untuk memperoleh sumber daya perangkat lunak dan perangkat keras sesuai kebutuhan.
Ini adalah orang-orang yang memelihara dan merancang basis data setiap hari.
DBA bertanggung jawab atas masalah berikut.
a. Desain skema konseptual dan fisik:
DBA bertanggung jawab untuk berinteraksi dengan pengguna sistem untuk memahami data apa yang akan
disimpan di DBMS dan bagaimana kemungkinan penggunaannya.
DBA membuat skema asli dengan menulis serangkaian definisi dan adalah
Disimpan secara permanen dalam 'Kamus Data'.
{"text":"b. Keamanan dan Otorisasi:"}
DBA bertanggung jawab untuk memastikan bahwa akses data yang tidak sah tidak diizinkan.
Pemberian berbagai jenis otorisasi memungkinkan DBA untuk mengatur bagian mana dari yang
database yang dapat diakses oleh berbagai pengguna.

c. Definisi struktur penyimpanan dan metode akses:


DBA membuat struktur penyimpanan dan metode akses yang sesuai
dengan menulis sekumpulan definisi, yang diterjemahkan oleh compiler DDL.

d. Ketersediaan Data dan Pemulihan dari Kegagalan:


DBA harus mengambil langkah-langkah untuk memastikan bahwa jika sistem gagal, pengguna dapat terus mengakses sebanyak mungkin
data yang tidak terkorup sebanyak mungkin.
DBA juga bekerja untuk mengembalikan data ke keadaan konsisten.

e. Penyesuaian Database:
DBA bertanggung jawab untuk memodifikasi basis data untuk memastikan kecukupan
Kinerja saat persyaratan berubah.

f. Spesifikasi Kendala Integritas:


Keterbatasan integritas disimpan dalam struktur sistem khusus yang dikonsultasikan oleh DBA
setiap kali pembaruan terjadi dalam sistem.

[Link] Basis Data:


Desainer basis data bertanggung jawab untuk mengidentifikasi data yang akan disimpan dalam basis data dan memilih yang sesuai
struktur untuk merepresentasikan dan menyimpan data ini.
[Link] Akhir:
Orang-orang yang ingin menyimpan dan menggunakan data dalam basis data.
Pengguna akhir adalah orang-orang yang pekerjaannya memerlukan akses ke basis data untuk melakukan kueri, memperbarui, dan menghasilkan laporan.
terdaftar sebagai berikut.

a. Pengguna Akhir Santai:


Orang-orang ini kadang-kadang mengakses database, tetapi mereka mungkin perlu informasi yang berbeda masing-masing
time.

b. Pengguna Akhir Naif atau Parametrik:


Fungsi pekerjaan mereka berkisar pada terus menerus menanyakan dan memperbarui database menggunakan
jenis kueri dan pembaruan standar.

c. Pengguna Akhir yang Canggih:


Ini termasuk Insinyur, Ilmuwan, analis bisnis, dan lainnya yang akrab untuk menerapkan mereka
aplikasi untuk memenuhi kebutuhan kompleks mereka.

d. Pengguna akhir mandiri:


Orang-orang ini mempertahankan basis data pribadi dengan menggunakan paket program siap pakai yang menyediakan
antarmuka berbasis menu yang mudah digunakan.

[Link] Sistem:
Orang-orang ini menentukan kebutuhan pengguna akhir dan mengembangkan spesifikasi untuk transaksi.

[Link] Aplikasi (Insinyur Perangkat Lunak):


These people can test, debug, document and maintain the specified transactions.
b. Pekerja di balik layar:
Perancang dan Pelaksana Basis Data:
Orang-orang ini yang merancang dan mengimplementasikan modul dan antarmuka DBMS sebagai paket perangkat lunak.

[Link] Alat:
Sertakan orang-orang yang merancang dan mengimplementasikan alat yang terdiri dari paket untuk desain, pemantauan kinerja.
and prototyping and test data generation.

[Link] dan personel pemeliharaan:


Ini adalah personel administrasi sistem yang bertanggung jawab untuk menjalankan dan memelihara
lingkungan perangkat keras dan perangkat lunak untuk sistem basis data.

[Link] ABSTRAKSI DATA


Ini juga disebut sebagai 'Arsitektur Tiga Skema', yang dapat digunakan untuk memisahkan aplikasi pengguna.
dan basis data fisik.

[Link] Level:
Ini adalah tingkat terendah, yang menjelaskan bagaimana data sebenarnya disimpan.
Example:
Basis data akun pelanggan dapat dijelaskan.

[Link] Level:
Ini adalah tingkat yang lebih tinggi berikutnya yang menjelaskan data apa dan hubungan apa dalam basis data.
Contoh:
Setiap catatan
tipe pelanggan = catatan
cust_name: sting;
cust_city: string;
cust_street: string;
akhir;

3.
[Link] Konseptual (pandangan):
Ini adalah level terendah, yang menggambarkan seluruh basis data.
Example:
Semua program aplikasi.
[Link] DATA

Seluruh struktur basis data dapat dijelaskan menggunakan model data.


Model data adalah sekumpulan alat konseptual untuk menggambarkan
Model data dapat diklasifikasikan menjadi tipe-tipe berikut.
[Link] Logika Berbasis Objek.
[Link] Logis Berbasis Rekaman.
3. Model Fisik.
Penjelasan adalah sebagai berikut.

[Link] Logika Berbasis Objek:


Model-model ini dapat digunakan untuk mendeskripsikan data pada tingkat logis dan tampilan.
Model-model ini memiliki kemampuan struktur yang fleksibel yang diklasifikasikan ke dalam jenis-jenis berikut.
a) Model entitas-hubungan.
b) The object-oriented model.
c) Model data semantik.
d) Model data fungsional.

[Link] Logika Berdasarkan Rekaman:


Model-model ini juga dapat digunakan untuk mendeskripsikan data pada level logis dan tampilan.
Model-model ini dapat digunakan baik untuk menentukan struktur logis keseluruhan dari basis data maupun tingkat yang lebih tinggi
deskripsi.
Model-model ini dapat diklasifikasikan menjadi,
1. Model relasional.
2. Model jaringan.
3. Model hierarkis.

3. Model Fisik:
Model-model ini dapat digunakan untuk menggambarkan data pada tingkat terendah, yaitu tingkat fisik.
Model-model ini dapat diklasifikasikan menjadi
1. Model yang menyatukan
2. Model memori bingkai.
UNIT-2
1950-an dan awal 1960-an:
Sejarah Sistem Basis Data
Pemrosesan data menggunakan pita magnetik untuk penyimpanan
Pita hanya menyediakan akses sekuensial
Kartu punch untuk input
Akhir 1960-an dan 1970-an:
Hard disk memungkinkan akses langsung ke data
Model data jaringan dan hierarkis yang banyak digunakan
Ted Codd mendefinisikan model data relasional
Akan memenangkan ACM Turing Award untuk karya ini
Penelitian IBM memulai prototipe Sistem R
UC Berkeley memulai prototipe Ingres
Pemrosesan transaksi berkinerja tinggi (untuk era tersebut)

1980-an:
Prototipe relasional penelitian berkembang menjadi sistem komersial
SQL menjadi standar industri
Sistem basis data paralel dan terdistribusi
Sistem basis data berorientasi objek
1990s:
Aplikasi dukungan keputusan dan penambangan data besar
Gudang data multi-terabyte besar
Munculnya perdagangan Web
2000-an
XML and XQuery standards
Administrasi basis data otomatis

Model Relasi Entitas (Model E-R)


Model E-R dapat digunakan untuk menggambarkan data yang terlibat dalam suatu perusahaan dunia nyata dalam istilah
objek dan hubungan mereka.
Uses:
Model-model ini dapat digunakan dalam desain basis data.
Ini menyediakan konsep-konsep berguna yang memungkinkan kita untuk berpindah dari informal
deskripsi menjadi deskripsi yang tepat.
Model ini dikembangkan untuk memfasilitasi desain basis data dengan memungkinkan spesifikasi struktur logis keseluruhan
dari sebuah basis data.

Ini sangat berguna dalam memetakan makna dan interaksi perusahaan dunia nyata ke dalam konsep.
skema.
Model-model ini dapat digunakan untuk desain konseptual basis data
aplikasi.

1. TINJAUAN DESAIN BASIS DATA


Masalah desain basis data dinyatakan sebagai berikut.
Rancang struktur logis dan fisik dari 1 atau lebih basis data untuk memenuhi kebutuhan informasi dari
pengguna dalam suatu organisasi untuk seperangkat aplikasi yang ditentukan.
Desain basis data tujuan adalah sebagai berikut.
[Link] kebutuhan konten informasi dari pengguna yang ditentukan
dan aplikasi.
2. Berikan struktur yang alami dan mudah dipahami tentang
informasi.
3. Mendukung persyaratan pemrosesan dan tujuan kinerja apa pun
seperti 'waktu respons, waktu pemrosesan, ruang penyimpanan, dll..

Model ER terdiri dari 3 langkah berikut.


a. Pengumpulan dan Analisis Kebutuhan:
Ini adalah langkah pertama dalam merancang aplikasi basis data apa pun.
Ini adalah proses informal yang melibatkan diskusi dan studi serta menganalisis harapan pengguna
& penggunaan yang dimaksud dari basis data.
Di bawah ini, kita harus memahami hal-hal berikut.
1. Data apa yang harus disimpan dalam sebuah database?
Aplikasi apa yang harus dibangun?
3. Operasi apa yang dapat digunakan?
Contoh:
Untuk database pelanggan, data adalah nama-pelanggan, kota-pelanggan, dan no-pelanggan.

b. Desain basis data konseptual:


Informasi yang dikumpulkan dalam langkah analisis kebutuhan digunakan untuk mengembangkan deskripsi tingkat lebih tinggi dari
data tersebut.
Tujuan dari desain basis data konseptual adalah pemahaman lengkap tentang struktur basis data, yang berarti
(semantik), hubungan antar dan batasan.

Karakteristik fase ini adalah sebagai berikut.

[Link]:
Model data harus ekspresif untuk membedakan berbagai jenis data, hubungan dan
kendala.

[Link] dan Pemahaman:


Model harus mudah dipahami konsepnya.

[Link] Minimal:
Model tersebut harus memiliki jumlah konsep dasar yang sedikit.
[Link] Diagramatik:
Model harus memiliki notasi diagramatik untuk menampilkan skema konseptual.
[Link]:
Skema konseptual yang diungkapkan dalam model data harus mewakili spesifikasi formal dari data.
Contoh:
Cust_name : string;
Cust_no : integer;
Cust_city : string;

c. Desain Basis Data Logis:

Di bawah ini, kita harus memilih DBMS untuk menerapkan desain basis data kita dan mengubah basis data konseptual
merancang menjadi skema basis data.
Pemilihan DBMS diatur oleh sejumlah faktor sebagai berikut.
1. Faktor Ekonomi.
[Link] Organisasi.
Penjelasan adalah sebagai berikut.

[Link] Factors:

Faktor-faktor ini terdiri dari status keuangan aplikasi.


a. Software Acquisition Cost:
Ini terdiri dari membeli perangkat lunak termasuk opsi bahasa seperti formulir, menu, pemulihan/cadangan
opsi, alat antarmuka pengguna grafis (GUI) berbasis web dan dokumentasi.

b. Biaya Pemeliharaan:
Ini adalah biaya untuk menerima layanan pemeliharaan standar dari vendor dan untuk menjaga DBMS
versi terbaru.

c. Biaya Akuisisi Perangkat Keras:


Ini adalah biaya memori tambahan, drive disk, pengendali, dan penyimpanan DBMS khusus.

d. Biaya Pembuatan dan Konversi Basis Data:


Ini adalah biaya untuk membuat sistem basis data dari awal dan mengonversi sistem yang ada ke yang baru
Perangkat lunak DBMS.
e. Biaya Pribadi:
Ini adalah biaya reorganisasi departemen pemrosesan data.
f. Biaya Pelatihan:
` Ini adalah biaya pelatihan untuk Pemrograman, Pengembangan Aplikasi, dan Administrasi Basis Data.

g. Operating Cost:
Biaya untuk melanjutkan operasi sistem basis data.

[Link] Organisasi:
Faktor-faktor ini mendukung organisasi vendor, dapat dicantumkan sebagai berikut.
a. Kompleksitas Data:
Kebutuhan akan DBMS.
b. Berbagi antar aplikasi:
Semakin besar berbagi di antara aplikasi, semakin banyak redundansi di antara file dan oleh karena itu semakin besar
kebutuhan untuk DBMS.
c. Data yang berkembang atau tumbuh secara dinamis:
Jika data berubah secara konstan, lebih mudah untuk mengatasi perubahan ini menggunakan DBMS daripada menggunakan file
sistem.
d. Frekuensi permintaan data ad hoc:
Sistem file tidak cocok untuk pengambilan data ad hoc.
e. Volume Data dan Kebutuhan untuk Kontrol:
Dua faktor ini diperlukan untuk DBMS.
Contoh:
Basis data pelanggan dapat direpresentasikan dalam bentuk tabel atau diagram.

[Link] Skema:
Di bawah ini, kita harus menganalisis kumpulan relasi dalam skema basis data relasional kita untuk mengidentifikasi
masalah potensial.

[Link] Database Fisik:


Desain basis data fisik adalah proses pemilihan struktur penyimpanan dan jalur akses tertentu untuk
berkas basis data untuk mencapai kinerja yang baik untuk berbagai aplikasi basis data.
Langkah ini melibatkan pembangunan indeks pada beberapa tabel dan pengelompokan beberapa tabel.
Desain basis data fisik dapat memiliki opsi berikut.
[Link] Time:
Ini adalah waktu yang berlalu antara mengajukan transaksi basis data untuk dieksekusi dan menerima
tanggapan.
[Link] Ruang:
Ini adalah jumlah ruang penyimpanan yang digunakan oleh file database dan struktur jalur akses mereka pada
disk termasuk indeks dan jalur akses lainnya.
3. Throughput Transaksi:
Ini adalah jumlah rata-rata transaksi yang dapat diproses per menit.
[Link] Design:
Dalam langkah ini, kita harus mengidentifikasi berbagai kelompok pengguna dan berbagai peran yang dimainkan oleh berbagai pengguna.
Untuk setiap peran, dan kelompok pengguna, kita harus mengidentifikasi bagian-bagian dari basis data yang harus dapat mereka akses,
yang di bawah ini.

[Link]

Ini adalah kumpulan objek.


2. Entitas adalah objek yang dapat dibedakan dari objek lain berdasarkan sekumpulan atribut.
Ini adalah objek dasar dari Model E-R, yang merupakan 'hal' di dunia nyata dengan keberadaan yang independen.
4. Entitas dapat berupa 'objek' dengan keberadaan fisik.
5. Entitas dapat direpresentasikan oleh 'Elips'.
Contoh:
i. Pelanggan, akun, dll.

3. ATTRIBUTES
Karakteristik suatu entitas disebut sebagai atribut.
Sifat-sifat dari suatu entitas tertentu disebut sebagai atribut dari entitas yang ditentukan tersebut.
Contoh:
Name, street_address, city --- customer database.
Acc-no, balance --- account database.
Tipe:
Ini dapat diklasifikasikan ke dalam tipe berikut.

[Link] Sederhana.
[Link] Komposit.
[Link] Bernilai Tunggal.
[Link] Multivalued.
5. Atribut yang Disimpan.
[Link] Turunan.
Penjelasan adalah sebagai berikut.

[Link] Attributes:
Atribut yang tidak dapat dibagi disebut sebagai 'atribut sederhana atau atom'.
Contoh:
cust_name, acc_no etc..

[Link] Komposit:

Atribut-atribut yang dapat dibagi menjadi bagian-bagian yang lebih kecil, yang mewakili atribut yang lebih dasar dengan
arti mandiri.
Ini berguna untuk memodelkan situasi di mana pengguna kadang-kadang merujuk pada atribut komposit sebagai unit tetapi pada
waktu lain merujuk secara khusus pada komponen-komponennya.
Contoh:

Street_address can be divided into 3 simple attributes as Number, Street and Apartment_no.
Street_address

Kota Negara Zip

3. Atribut Bernilai Tunggal:


Atribut yang memiliki nilai tunggal untuk entitas tertentu disebut 'Atribut Nilai Tunggal'.
Contoh:
'Usia' adalah atribut bernilai tunggal dari 'Orang'.

[Link] Bernilai Banyak:


Atribut, yang memiliki sekumpulan nilai untuk entitas yang sama, disebut sebagai 'Atribut Multivalued'.
Contoh:
Atribut 'Gelar Perguruan Tinggi' untuk seseorang. yaitu, satu orang mungkin tidak memiliki gelar perguruan tinggi, orang lain
seseorang mungkin memiliki satu dan sepertiga orang mungkin memiliki 2 atau lebih gelar.
Atribut multi-nilai dapat memiliki batas bawah dan batas atas pada jumlah nilai yang diizinkan untuk masing-masing
entitas individu.

[Link] Turunan:
An attribute which is derived from another attribute is called as a ‘derived attribute.
Contoh:
'Atribut 'Usia' diturunkan dari atribut lain 'Tanggal'.
[Link] Tersimpan:
Sebuah atribut yang tidak diturunkan dari atribut lain disebut sebagai 'atribut yang disimpan'.
Contoh:
Dalam contoh di atas, 'Tanggal' adalah atribut yang disimpan.

4. SET ENTITAS
Jenis Entitas:
Sekumpulan entitas yang memiliki atribut yang sama disebut sebagai 'jenis entitas'.
Setiap jenis entitas dijelaskan oleh namanya dan atributnya.

Kumpulan Entitas:
Kumpulan semua entitas dari jenis entitas tertentu dalam basis data pada titik waktu mana pun disebut sebagai entitas.
set.
Sekumpulan entitas biasanya disebut dengan nama yang sama seperti jenis entitas.
Tipe entitas direpresentasikan dalam diagram ER sebagai kotak persegi panjang yang mengelilingi nama tipe entitas.
Contoh:
Kumpulan pelanggan.

5. Hubungan

Ini adalah sebuah asosiasi di antara entitas.

6. Kumpulan Hubungan

Ini adalah kumpulan hubungan.


Primary Key:
Atribut yang dapat digunakan untuk mengidentifikasi informasi yang ditentukan dari tabel.

Entitas Lemah
Entitas lemah dapat diidentifikasi secara unik dengan mempertimbangkan beberapa atributnya bersamaan dengan kunci utama dari
entitas lain.
Simbol-simbol yang dapat digunakan dalam model ini adalah sebagai berikut.

[Link] ---- Entitas.

2. Elips Atribut.

[Link] Tautan.

[Link] ----- Hubungan


10
5. Garis Bawah Elips ----- Kunci utama.
Atribut Kunci.

6. Elips Garis Ganda ---- Atribut Bernilai Banyak.

7. Elips Putus-putus ---- Atribut Turunan.

8. Persegi Panjang Garis Ganda ---- Set Entitas.

9. Berlian Berlapis Ganda-------------------------------- Hubungan Entitas Lemah.


Mengidentifikasi Hubungan.

10. Kumpulan Entitas yang memiliki Kunci Utama ---- StEntitas salah
Set.

[Link] ---- ---- Basis Data.

12. Persegi Panjang Melengkung di Dalam ---- --- Pengguna Akhir.

CONTOH:

Nama Jalan Acc_no Keseimbangan


Kota

Akun_pelanggan
Customer Akun
Atribut Deskriptif:
Sebuah hubungan juga dapat memiliki beberapa atribut, yang disebut sebagai 'atribut deskriptif'.
Ini digunakan untuk mencatat informasi tentang hubungan.
Contoh:
James dari set entitas 'Karyawan' telah bekerja di sebuah departemen sejak 1991.

Dno
Name Jalan Sejak Dname
Kota
Anggaran

Pelanggan Bekerja_di Departments


Instansi:

Sebuah contoh dari satu set relasi adalah sekumpulan hubungan.


Ini adalah gambaran hubungan pada suatu saat tertentu.
Contoh:
1111 1/1/91 60
2/2/94 70
2222
Departemen TI, SVECW 3/3/96 80
3333
Hubungan Ternary:

Sebuah himpunan hubungan, yang memiliki 3 himpunan entitas, disebut sebagai hubungan terner.

[Link] Tambahan dari Model E-R

[Link] Constraints:
Ini dapat diklasifikasikan menjadi 4 tipe sebagai berikut.
[Link] ke Banyak:
Seorang karyawan diperbolehkan untuk bekerja di departemen yang berbeda dan sebuah departemen diperbolehkan memiliki beberapa
karyawan.

Dno
Name Jalan Sejak Nama
Kota
Budget

Pelanggan Bekerja_di Departemen


[Link] ke Banyak:
1 karyawan dapat terhubung dengan banyak departemen, sedangkan setiap departemen dapat terhubung dengan setidaknya
paling banyak 1 karyawan sebagai manajernya.

Dno
Nama Jalan Sejak Dname
Kota
Budget

Pelanggan Bekerja_di Departemen

[Link] ke Satu:
Setiap karyawan bekerja di paling banyak 1 departemen. Artinya, banyak karyawan dapat bekerja di departemen yang sama.

Dno
Nama Jalan Sejak Dname
Kota
Anggaran

Pelanggan Bekerja_di Departemen


[Link] ke Satu:

Setiap karyawan dapat mengelola paling banyak 1 departemen.

Dno
Name Jalan Sejak Dname
Kota
Anggaran

Pelanggan Bekerja_di Departemen

[Link] Partisipasi:

11
Keterbatasan partisipasi menentukan apakah keberadaan suatu entitas bergantung pada hubungannya dengan
entitas lain melalui jenis hubungan.
Sebuah departemen memiliki paling banyak satu manajer. Persyaratan ini adalah contoh dari batasan partisipasi.
Ada 2 jenis batasan partisipasi, yaitu sebagai berikut.

[Link].
2. Parsial.
Penjelasan ada di bawah.

[Link]:
Sebuah kumpulan entitas yang bergantung pada kumpulan hubungan dan memiliki
one to many relationships is said to be ‘total’.
Partisipasi dari kumpulan entitas 'departemen' dalam hubungan
set 'mengelola' dikatakan total.

[Link]:
Partisipasi yang tidak total disebut sebagai parsial.

Contoh:
Partisipasi set entitas 'pegawai' dalam 'mengelola' adalah parsial, karena tidak setiap pegawai berkesempatan untuk
mengelola sebuah departemen.
Dalam diagram E-R, partisipasi total ditampilkan sebagai 'garis ganda' yang menghubungkan tipe entitas yang berpartisipasi ke
hubungan, di mana partisipasi parsial diwakili oleh satu garis.
Jika partisipasi himpunan entitas dalam himpunan relasi adalah total, maka garis tebal menghubungkan keduanya.
Kehadiran panah menunjukkan batasan kunci.

Tidak Dname Anggaran


Nama

Partisipasi Parsial

Karyawan Mengelola Departemen

Partisipasi Total
Bekerja_di
3. Set Entitas Lemah:

12
[Link] 'Entitas Lemah'? (3Poin)(Jan-2005)
(4 Poin)(September-2005) (4 Poin)(Feb-2002)

Tipe Entitas Lemah:


Tipe entitas yang tidak memiliki atribut kunci mereka sendiri disebut sebagai tipe entitas lemah.
Tipe entitas lemah selalu memiliki 'keterikatan partisipasi total'.

Sebuah set entitas lemah hanya dapat diidentifikasi secara unik dengan mempertimbangkan beberapa atributnya bersamaan dengan
kunci utama dari entitas lain (Pemilik yang mengidentifikasi).
Untuk setiap kumpulan entitas lemah, pembatasan berikut harus dipatuhi.

a. Kumpulan entitas pemilik dan kumpulan entitas lemah harus berpartisipasi dalam a
Set hubungan satu-ke-banyak, yang disebut sebagai 'Mengidentifikasi
Kumpulan Relasi dari kumpulan entitas lemah.
b. Kumpulan entitas lemah harus memiliki partisipasi penuh dalam kumpulan hubungan identifikasi.
Contoh:

‘Dependents’ is an example of a weak entity set.

Kunci parsial dari kumpulan entitas lemah:

Himpunan atribut dari sekumpulan entitas lemah yang secara unik mengidentifikasi entitas lemah untuk suatu entitas pemilik yang diberikan adalah
disebut sebagai 'partial key dari weak entityset'.
Example:

'Pname' adalah kunci parsial untuk tanggungan.

Kumpulan entitas lemah tergantung dan hubungannya dengan karyawan ditunjukkan dalam diagram berikut.
Menghubungkan mereka dengan garis gelap menunjukkan total partisipasi tanggungan dalam kebijakan.
Untuk memahami fakta bahwa tanggungan adalah entitas lemah dan kebijakan adalah hubungan identifikasinya, kita menggambar
keduanya dengan garis gelap.
Untuk menunjukkan bahwa 'pname' adalah kunci parsial untuk tanggungan, kami menggarisbawahi nya menggunakan garis putus-putus.

Tidak Cost Pname Age


Name --------

Karyawan Kebijakan Tanggungan

[Link]:

[Link] 'Agregasi'? (3 Poin, Jan-2005)


[Link] bagaimana menggunakan hubungan ternary sebagai pengganti 'agregasi'?
(5 Poin, Jan-2005)
[Link] 'Agregasi dalam model ER? (4 Poin, Juli-2004)
(5 Poin, Maret-2003) (4 Poin, Juli-2002)

13
Agregasi adalah suatu abstraksi untuk membangun objek komposit dari objek-objek komponennya.
Agregasi digunakan untuk mewakili hubungan antara suatu objek utuh dan bagian-bagian komponennya.
Agregasi memungkinkan kita untuk menunjukkan bahwa sekumpulan hubungan (yang diidentifikasi melalui kotak putus-putus) berpartisipasi dalam
set hubungan lainnya.
Ini diilustrasikan dengan kotak putus-putus di sekeliling sponsor.
Jika kita perlu mengekspresikan hubungan antar hubungan, maka kita harus menggunakan agregasi.
Agregasi versus Hubungan Ternary:
Kita dapat menggunakan agregasi atau hubungan ternary untuk 3 set entitas atau lebih.
Pilihan terutama ditentukan oleh
a. Keberadaan hubungan yang menghubungkan sekumpulan hubungan dengan sebuah
kumpulan entitas atau kumpulan relasi kedua.
b. Pilihan juga dapat dipandu oleh batasan integritas tertentu yang kita
ingin mengekspresikan.

Name Karyawan Tidak

Monitor Hingga

Pid Sejak Anggaran


Anggaran Dname

14
Departemen
Sponsor
Proyek

Menurut diagram di atas,

[Link] proyek dapat didukung oleh sejumlah departemen.


Sebuah departemen dapat mensponsori 1 atau lebih proyek.
3.1 atau lebih karyawan memantau setiap sponsor.
(Hubungan Banyak ke Banyak)

Pertimbangkan batasan bahwa setiap hubungan dipantau oleh paling banyak 1 karyawan.
Kami tidak dapat menyatakan batasan ini dalam istilah hubungan ternary dalam diagram berikut. Dalam hal itu
kami menggunakan hubungan ternary alih-alih agregasi.
Agregasi mengelompokkan bagian dari diagram E-Are menjadi satu kumpulan entitas yang memungkinkan kita untuk memperlakukan agregat tersebut.
entitas dianggap sebagai satu kesatuan tanpa memikirkan detail struktur internalnya.
Dengan demikian, adanya batasan seperti itu menjadi alasan lain untuk menggunakan agregasi daripada sebuah
himpunan hubungan ternary.

8. Desain Basis Data Konseptual Dengan Model ER

Informasi yang dikumpulkan dalam langkah analisis kebutuhan digunakan untuk mengembangkan deskripsi tingkat yang lebih tinggi dari
data itu.
Tujuan dari desain basis data konseptual adalah pemahaman yang lengkap tentang struktur basis data, yang berarti
(semantik), hubungan antar dan batasan.
Karakteristik fase ini adalah sebagai berikut.

[Link] Ungkapan:

Model data harus ekspresif untuk membedakan berbagai


jenis data, hubungan dan batasan.

[Link] dan Pemahaman:

Model tersebut harus sederhana untuk memahami konsep-konsep.

3. Minimalitas:

Model tersebut harus memiliki jumlah konsep dasar yang sedikit.

[Link] Diagram:
Model tersebut harus memiliki notasi diagram untuk
menampilkan skema konseptual.

[Link]:

Skema konseptual yang diekspresikan dalam model data harus


represent a formal specification of the data.

Contoh:
Cust_name: string;
Cust_no: integer;
Cust_city: string;
15
a. Entitas Versus Hubungan:

Misalkan setiap manajer departemen diberikan 'Dbudget' seperti yang ditunjukkan pada gambar.

Dno
Name Jalan Sejak Dname
Kota
Budget

Pelanggan Works_in Departemen

Maksimal ada 1 karyawan yang mengelola sebuah departemen, tetapi seorang karyawan dapat mengelola beberapa.
departemen (1 ke banyak hubungan).
Kita dapat menyimpan tanggal mulai dan 'Dbudget' untuk setiap pasangan manajer-departemen.

Pendekatan ini adalah wajar, jika kita mengasumsikan bahwa seorang manajer menerima satu 'Dbudget' untuk setiap departemen yang
dia mengelola. Tapi jika 'Dbudget' adalah jumlah dari semua departemen, maka 'mengelola' adalah hubungan yang melibatkan
setiap karyawan akan memiliki nilai yang sama (nilai total).
Jadi ini mengarah pada redundansi.

Ini dapat diselesaikan dengan penunjukan karyawan sebagai manajer dari sekelompok departemen.
Kita dapat memodelkan ‘mgr_appt’ sebagai himpunan entitas untuk penunjukan manajer, menggunakan hubungan ternary dan kita bisa
memiliki paling banyak 1 manajer untuk setiap departemen karena hubungan 1 ke banyak.

16
Dno
Nama Jalan Sejak Nama
Kota
Anggaran

Pelanggan Bekerja_di Departemen

Mgr_appt
Sejak
Anggaran

Desain Basis Data Konseptual untuk Perusahaan Besar

Proses desain basis data konseptual terdiri dari mendeskripsikan potongan kecil dari aplikasi dalam hal
Diagram E-R.
Untuk sebuah Perusahaan besar, desain mungkin memerlukan,
[Link] dari 1 desainer.
[Link] data dan aplikasi oleh sejumlah kelompok pengguna.
Menggunakan model data semantik tingkat tinggi seperti diagram ER untuk desain konseptual menawarkan tambahan
keuntungan yang,
[Link] tingkat tinggi dapat direpresentasikan secara diagram.
[Link] orang, yang memberikan masukan pada proses desain, dengan mudah memahaminya.
Pendekatan alternatif adalah mengembangkan skema konseptual terpisah untuk kelompok pengguna yang berbeda dan kemudian
integrasikan semua itu.
Untuk mengintegrasikan, kita harus menetapkan kesesuaian antara entitas, hubungan, dan atribut, sehingga ini
prosesnya agak sulit.
Relasi derajat 1 disebut sebagai 'Relasi Unair'.
Relasi derajat 2 disebut sebagai 'Relasi Biner'.
Relasi derajat 3 disebut sebagai ‘Relasi Ternary’.
Hubungan derajat n disebut sebagai 'Hubungan nary'.

17
UNIT-3

MODEL RELASIONAL
Sebuah basis data adalah kumpulan dari 1 atau lebih 'relasi', di mana setiap relasi adalah tabel dengan baris dan kolom.
Ini adalah model data utama untuk aplikasi pemrosesan data komersial.
Keuntungan utama dari model relasional dibandingkan model data yang lebih lama adalah,
Ini sederhana dan elegan.
2. representasi data yang sederhana.
[Link] dengan mana bahkan kueri kompleks dapat dinyatakan.

Pengantar:

Konstruksi utama untuk merepresentasikan data dalam model relasional adalah 'relasi'.
Sebuah hubungan terdiri dari
[Link] Relasi.
[Link] Instance.
Penjelasan adalah sebagai berikut.

[Link] Schema:

Skema relasi menggambarkan kepala kolom untuk tabel.


Skema menentukan nama relasi, nama setiap field (kolom, atribut) dan 'domain' dari
setiap bidang.
Sebuah domain dirujuk dalam skema relasi oleh nama domain dan memiliki sekumpulan nilai yang terkait.
Contoh:
Informasi mahasiswa dalam basis data universitas untuk menggambarkan bagian-bagian dari skema relasi.

Students (Sid: string, name: string, login: string, age: integer, gross: real)

Ini mengatakan bahwa bidang yang bernama 'sid' memiliki domain bernama 'string'.
Himpunan nilai yang terkait dengan domain 'string' adalah himpunan semua string karakter.

2. Instance Relasi:

Ini adalah tabel yang menentukan informasi.


Sebuah instansi dari suatu relasi adalah sekumpulan 'tuple', juga disebut 'rekaman', di mana setiap tuple memiliki jumlah yang sama
dari bidang sebagai skema relasi.
Sebuah instance relasi dapat dianggap sebagai tabel di mana setiap tupel adalah baris dan semua baris memiliki nilai yang sama.
jumlah bidang.
Instansi relasi juga disebut sebagai 'relasi'.
Setiap relasi didefinisikan sebagai satu set tuple atau baris yang unik.

Contoh:
Bidang (Atribut, Kolom)

sid Name masuk age Kotor Nama bidang


1111 Dave dave@cs 19 1.2
2222 Jones Jones@cs 18 2.3 Tuple (Rekaman, Baris)
333 Smith smith@ee 18 3.4
4444 Smith smith@math 19 4.5

Contoh ini adalah suatu contoh dari relasi mahasiswa, yang terdiri dari 4 tupel dan 5 bidang. Tidak ada dua baris yang sama.
identik.

18
Degree:
Jumlah bidang disebut sebagai 'derajat'.
Ini juga disebut sebagai 'aritmetika'.
Cardinality:
Kardinalitas dari suatu instansi relasi adalah jumlah tuple di dalamnya.
Contoh:
Dalam contoh di atas, derajat relasinya adalah 5 dan kardinalitasnya adalah 4.
Basis data relasional:
Ini adalah kumpulan hubungan dengan nama hubungan yang berbeda.
Skema basis data relasional:
Ini adalah kumpulan skema untuk relasi dalam basis data.
Instansi:
Sebuah instance dari basis data relasional adalah kumpulan instance relasi, satu untuk setiap skema relasi di dalamnya
skema basis data.
Setiap instance relasi harus memenuhi batasan domain dalam skemanya.

[Link] integritas atas relasi

Keterbatasan integritas (IC) adalah kondisi yang ditentukan pada skema basis data dan membatasi data yang dapat...
disimpan dalam sebuah instance dari basis data.
Berbagai pembatasan pada data yang dapat ditentukan pada skema basis data relasional dalam bentuk 'keterbatasan'.
Sebuah DBMS menegakkan batasan integritas, yang hanya mengizinkan instance yang sah untuk disimpan dalam database.
Kendala integritas ditentukan dan ditegakkan pada waktu yang berbeda seperti di bawah ini.

[Link] DBA atau pengguna akhir mendefinisikan skema basis data, ia atau dia
menentukan IC yang harus dipegang di setiap instance dari basis data ini.
[Link] aplikasi basis data dijalankan, DBMS memeriksa adanya pelanggaran.
dan melarang perubahan pada data yang melanggar IC yang ditentukan.

Instansi Hukum:
Jika instansi basis data memenuhi semua batasan integritas yang ditentukan pada skema basis data.
Keterbatasan dapat diklasifikasikan menjadi 4 jenis sebagai berikut.
[Link] Domain.
2. Pembatasan Kunci.
[Link] Integritas Entitas.
4. Kendala Integritas Referensial.
Penjelasan adalah sebagai berikut.

[Link] Constraints

Keterbatasan domain adalah bentuk paling mendasar dari keterbatasan integritas. Mereka diuji dengan mudah oleh sistem.
setiap kali item data baru dimasukkan ke dalam basis data.
Keterbatasan domain menentukan himpunan nilai yang mungkin diasosiasikan dengan suatu atribut. Keterbatasan semacam itu
juga dapat melarang penggunaan nilai nol untuk atribut tertentu.
Tipe data yang terkait dengan domain biasanya mencakup tipe data numerik standar untuk bilangan bulat.
Skema relasi menentukan domain dari setiap field atau kolom dalam instansi relasi.
Kendala domain dalam skema ini menentukan suatu kondisi penting bahwa setiap instance dari relasi harus
Memuaskan: Nilai-nilai yang muncul dalam sebuah kolom harus diambil dari domain yang terkait dengan kolom tersebut.
Dengan demikian, domain suatu bidang pada dasarnya adalah jenis bidang tersebut.
2. Kendala Kunci
[Link] the concept of Super Key, Candidate Key and Primary Key with examples?(6 Marks, Feb-2004)
Keterbatasan kunci adalah pernyataan bahwa subset minimal tertentu dari bidang sebuah relasi adalah pengidentifikasi unik untuk sebuah
pasangan
Contoh:
Hubungan 'mahasiswa' dan batasan bahwa tidak ada 2 mahasiswa yang memiliki id mahasiswa (sid) yang sama.
Ini dapat diklasifikasikan menjadi 3 jenis seperti di bawah ini.
19
a. Kunci Kandidat atau Kunci.
b. Kunci Super.
c. Kunci Utama.
Penjelasan ada di bawah.
a. Kunci Kandidat atau Kunci:
[Link] 'Kunci Kandidat'?(4 Poin, September-2003)
Sekumpulan bidang yang secara unik mengidentifikasi sebuah tuple menurut batasan kunci disebut sebagai 'Kunci Kandidat' untuk
hubungan.
Ini juga disebut sebagai 'kunci'.
Dari definisi kunci kandidat, kita memiliki,
1. Dua tuple yang berbeda dalam sebuah instance legal tidak dapat memiliki nilai yang identik
di semua bidang kunci. yaitu, dalam segala hal hukum, nilai-nilai dalam kunci
kolom secara unik mengidentifikasi sebuah tuple dalam instansi.
yaitu, nilai-nilai dalam kolom kunci secara unik mengidentifikasi sebuah tupel dalam instansi.
[Link] ada himpunan dari himpunan bidang dalam kunci yang merupakan pengidentifikasi unik untuk sebuah tupel.
yaitu, himpunan bidang {sid, name} bukanlah sebuah kunci untuk Mahasiswa.
Skema relasi dapat memiliki lebih dari satu kunci.
Contoh: Dalam hubungan Siswa di atas, bidang 'sid' adalah kunci kandidat.
{sid}.
Nilai dari atribut kunci dapat digunakan untuk mengidentifikasi secara unik setiap tuple dalam relasi.
‘Sekumpulan atribut yang membentuk kunci’ adalah sifat dari skema relasi.
Sebuah kunci ditentukan dari makna atribut.
Setiap relasi dijamin memiliki kunci. Karena relasi adalah sekumpulan tupel, kumpulan semua field selalu merupakan super.
kunci.
b. Super Key:
Sekumpulan bidang yang mengandung kunci disebut sebagai 'super key'.
Sekelompok 1 atau lebih atribut yang memungkinkan kita untuk mengidentifikasi secara unik suatu entitas dalam himpunan entitas.
Sebuah super key menentukan batasan keunikan bahwa tidak ada 2 tuple yang berbeda yang dapat memiliki nilai yang sama.
Setiap relasi memiliki setidaknya 1 kunci super default sebagai kumpulan semua atribut.
Contoh:
Siswa Sid
(Hubungan) Name (Fields)
Masuk
Usia
Kotor
Salah satu super kunci = {Sid, Nama, Login, Usia, Bruto}

c. Kunci Utama:

Ini juga merupakan kunci kandidat, yang nilainya digunakan untuk mengidentifikasi tupel dalam relasi.
It is common to designate one of the candidate keys as a primary key of the relation.
Atribut yang membentuk kunci utama dari skema relasi diberi garis bawah.
Ini digunakan untuk menunjukkan kunci kandidat yang dipilih oleh perancang basis data sebagai
alat utama untuk mengidentifikasi entitas dengan kumpulan entitas.
Contoh:
‘Sid’ dari hubungan Siswa.

d. Menentukan Pembatas Kunci dalam SQL-92:

Dalam SQL, kita mendeklarasikan sekumpulan bidang dari sebuah tabel yang terdiri dari kunci dengan menggunakan
K constraint ‘UNIQUE’.
Kendala 'UNIQUE' ini menentukan bahwa 2 tupel yang berbeda tidak dapat memiliki identik
Nilai.
Kunci kandidat dapat dideklarasikan sebagai 'kunci utama' menggunakan pembatasan
KUNCI UTAMA.
20
Kita dapat memberi nama pada batasan dengan menggunakan sintaksis seperti di bawah ini.

BATASAN constraint_name NOTASI_KUNCI (nama_kunci);


Jika batasan dilanggar, maka constraint_name akan dikembalikan dan dapat digunakan
untuk mengidentifikasi kesalahan.

Contoh:
Ekspresikan 'sid' sebagai kunci utama dan kombinasi {nama, usia} sebagai kunci.

BUAT TABEL Siswa (sid CHAR (20), nama CHAR (30), login CHAR(20),
usia INTEGER, bruto REAL, UNIK (nama, usia)
` KONSTRAIN sid1 KUNCI UTAMA (sid));

[Link] Integritas Entitas

Ini menyatakan bahwa tidak ada nilai kunci utama yang dapat bernilai null.
Nilai kunci utama digunakan untuk mengidentifikasi tuple individu dalam suatu relasi.
Memiliki nilai null untuk kunci utama berarti kita tidak dapat mengidentifikasi beberapa tuple.
CATATAN: Batasan Kunci, Batasan Integritas Entitas ditentukan pada relasi individual.
KUNCI UTAMA termasuk dalam hal ini.

[Link] Integritas Referensial

Keterikatan Integritas Referensial ditentukan antara 2 relasi dan digunakan untuk


mempertahankan konsistensi di antara tuple dari 2 relasi.
Secara informal, batasan integritas referensial menyatakan bahwa 'sebuah tupel dalam 1 relasi yang
mengacu pada relasi lain harus mengacu pada tuple yang ada dalam relasi tersebut.
Kami dapat menampilkan batasan integritas referensial secara diagramatis dengan menggambar.
arah yang diarahkan dari setiap kunci asing ke relasi yang dirujuk. Kepala panah mungkin
tunjukkan ke kunci utama dari relasi yang direferensikan.

21
Unit-4

Dasar-Dasar Pernyataan SELECT

Dalam teks berikut, 3 tabel contoh berikut digunakan:


p Tabel (bagian) Tabel (pemasok) sp Tabel (pemasok & bagian)
pno descr color sno name city sno pno qty
Widget Biru P1 S1 Pierre Paris S1 P1 NULL
P2 Widget Merah S2 John London S2 P1 200
P3 Dongle Hijau S3 Mario Roma S3 P1 1000
S3 P2 200

Pernyataan SQL SELECT menanyakan data dari tabel di dalam basis data. Pernyataan dimulai dengan
PILIH kata kunci. Pernyataan SELECT dasar memiliki 3 klausa:

PILIH
FROM
DI MANA

Klausul SELECT menentukan kolom tabel yang diambil. Klausul FROM menentukan tabel yang digunakan.
diakses. Klausa WHERE menentukan baris tabel mana yang digunakan. Klausa WHERE bersifat opsional; jika
hilang, semua baris tabel telah digunakan.
Misalnya,
PILIH nama DARI s DI MANA kota='Roma'
Kueri ini mengakses baris dari tabel -s. Kemudian memfilter baris tersebut di mana kolom kota berisi Roma.
Akhirnya, kueri mengambil kolom nama dari setiap baris yang difilter. Menggunakan tabel contoh, kueri ini
menghasilkan:
nama
Mario
Deskripsi rinci tentang tindakan kueri:

Klausul FROM mengakses tabel. Isi:

sno name city


S1 Pierre Paris
S2 John London
S3 Mario Roma

Klausul WHERE menyaring baris dari tabel FROM untuk menggunakan yang kolomkota-nya mengandung
Roma. Ini memilih satu baris dari:

sno name city


S3 Mario Roma

Klausul SELECT mengambil kolom nama dari baris yang difilter oleh klausul WHERE:

nama

22
Mario
Klausul SELECT
Klausul SELECT adalah wajib. Ini menentukan daftar kolom yang akan diambil dari tabel-tabel di FROM
klausa. Itu memiliki format umum berikut:
PILIH [SEMUA|UNIK] daftar-pilih
select-list adalah daftar nama kolom yang dipisahkan oleh koma. Spesifikasi ALL dan DISTINCT adalah opsional.
DISTINCT menentukan bahwa baris duplikat akan dibuang. Baris duplikat adalah ketika setiap kolom yang sesuai
kolom daftar memiliki nilai yang sama. Defaultnya adalah SEMUA, yang mempertahankan baris duplikat.
Sebagai contoh,
SELECT descr, color FROM p
Nama kolom dalam daftar pilih dapat diqualifikasi dengan nama tabel yang sesuai:
SELECT [Link], [Link] FROM p
Sebuah kolom dalam daftar pilih dapat diganti namanya dengan mengikuti nama kolom tersebut dengan nama baru.
contoh:
PILIH nama pemasok, kota lokasi DARI s
Ini menghasilkan:
lokasi pemasok
Pierre Paris
John London
Mario Roma

23
Sebuah daftar pilih khusus yang terdiri dari satu '*' meminta semua kolom di semua tabel dalam klausa FROM. Untuk
contoh
PILIH * DARI sp

sno pno qty


S1 P1 NULL
S2 P1 200
S3 P1 1000
S3 P2 200
Delimiter*akan mengambil hanya kolom dari satu tabel ketika memenuhi syarat dengan nama tabel. Untuk
contoh:
PILIH sp.* DARI sp
Ini menghasilkan hasil yang sama seperti contoh sebelumnya.
Sebuah unqualified tidak dapat digabungkan dengan elemen lain dalam daftar pilih; itu harus berdiri sendiri.
Namun, kualifikasi* dapat dikombinasikan dengan elemen lain. Misalnya,
PILIH sp.*, kota
DARI sp, s
DIMANA [Link]=[Link]
sno pno qty kota
S1 P1 NULL Paris
S2 P1 200 London
S3 P1 1000 Roma
S3 P2 200 Roma
Catatan: ini adalah contoh kueri yang menggabungkan 2 tabel.
Klausul FROM
Klausula FROM selalu mengikuti klausula SELECT. Ini mencantumkan tabel-tabel yang diakses oleh kueri.
contoh,
PILIH * DARI s
Ketika Daftar Dari berisi beberapa tabel, koma memisahkan nama tabel. Misalnya,
PILIH sp.*, kota
DARI sp, s
DIMANA [Link]=[Link]
Ketika Daftar Dari memiliki beberapa tabel, mereka harus digabungkan bersama.
Nama Korelasi
Seperti kolom dalam daftar seleksi, tabel dalam daftar dari dapat diubah namanya dengan mengikuti nama tabel dengan
nama baru. Misalnya,
PILIH [Link] DARI s supplier
Nama baru dikenal sebagai nama korelasi (atau nama rentang) untuk tabel. Self join memerlukan korelasi
nama-nama.
Klausul WHERE
Klausul WHERE bersifat opsional. Ketika ditentukan, selalu mengikuti klausul FROM. Klausul WHERE
memfilter baris dari tabel klausa FROM. Menghilangkan klausa WHERE menunjukkan bahwa semua baris digunakan.
Setelah kata kunci WHERE adalah ekspresi logis, yang juga dikenal sebagai predikat.
Predikat mengevaluasi nilai logika SQL --benar, salah, atau tidak diketahui. Predikat yang paling dasar adalah a
comparison:
color = 'Red'
Predikat ini mengembalikan:

24
benar -- jika thecolorcolumn berisi nilai string -- 'Merah',
salah -- jika thecolorcolumn berisi nilai string lain (bukan 'Merah'), atau
tidak diketahui -- jika kolomwarna mengandungnull.

Secara umum, ekspresi perbandingan membandingkan isi kolom tabel dengan literal, seperti di atas. A
ekspresi perbandingan juga dapat membandingkan dua kolom satu sama lain. Penggabungan tabel menggunakan jenis perbandingan ini.
Operator perbandingan =(sama dengan) membandingkan dua nilai untuk kesetaraan. Operator perbandingan tambahan adalah:

lebih besar dari


<-- kurang dari
>=-- lebih besar dari atau sama dengan
<=-- kurang dari atau sama dengan
<>-- tidak sama dengan

Misalnya,
PILIH * DARI sp DIMANA qty >= 200
sno pno qty
S2 P1 200
S3 P1 1000
S3 P2 200
Catatan: Di tabel ini, kolom qty untuk salah satu baris berisi null. Perbandingan -qty >= 200, mengevaluasi
tounknown untuk baris ini. Dalam hasil akhir dari sebuah kueri, baris dengan klausa WHERE yang mengevaluasi tounknown
(atau salah) dihilangkan (disaring keluar).
Kedua operand dari perbandingan harus memiliki tipe data yang sama, namun konversi otomatis dilakukan.
antara tipe numerik, datetime, dan interval. Ekspresi CAST menyediakan konversi tipe yang eksplisit.
Perbandingan yang Diperluas
Selain perbandingan dasar yang dijelaskan di atas, SQL mendukung operator perbandingan yang diperluas --
ANTARA, DI, SEPERTI dan ADALAH NULL.

Operator BETWEEN

Operator BETWEEN mengimplementasikan perbandingan rentang, yaitu, itu menguji apakah suatu nilai adalah
antara dua nilai lainnya. Perbandingan BETWEEN memiliki format berikut:

value-1 [TIDAK] ANTARA value-2 DAN value-3

Perbandingan ini menguji apakah nilai-1 lebih besar dari atau sama dengan nilai-2 dan kurang dari atau sama dengan nilai-
3. Itu setara dengan predikat berikut:

value-1 >= value-2 DAN value-1 <= value-3

Atau, jika TIDAK disertakan:

TIDAK (nilai-1 >= nilai-2 DAN nilai-1 <= nilai-3)

Misalnya,

PILIH *
DARI sp
DI MANA qty ANTARA 50 dan 500

25
sno pno qty
S2 P1 200
S3 P2 200

Operator IN

Operator IN menerapkan perbandingan dengan daftar nilai, yaitu, ia menguji apakah suatu nilai cocok
nilai apapun dalam daftar nilai. Dalam perbandingan memiliki format umum sebagai berikut:

value-1 [TIDAK] DI ( value-2 [, value-3] ... )

Perbandingan ini menguji apakah value-1 cocok dengan value-2 atau cocok dengan value-3, dan seterusnya. Ini setara dengan
predikat logis berikut:

nilai-1 = nilai-2 [ ATAU nilai-1 = nilai-3 ] ...

atau jika TIDAK disertakan:

TIDAK (nilai-1 = nilai-2 [ ATAU nilai-1 = nilai-3 ] ...)

Misalnya,

PILIH nama DARI s DI MANA kota DI ('Roma', 'Paris')


name
Pierre
Mario

Operator LIKE

Operator LIKE menerapkan perbandingan pencocokan pola, yaitu, ia mencocokkan nilai string
melawan string pola yang berisi karakter wildcard.

Karakter wildcard untuk LIKE adalah persen -- '%' dan garis bawah -- '_'. Garis bawah mencocokkan setiap
karakter tunggal. Persentase mencocokkan nol atau lebih karakter.

Contoh,

Cocokkan Pola Nilai Hasil


abc _b_ Benar
'ab' _b_ Salah
abc '%b%' Benar
'ab' '%b%' Benar
abc a_ Salah
'ab' a_ Benar
abc 'a%_' Benar
ab 'a%_' True

26
Perbandingan LIKE memiliki format umum berikut:

value-1 [TIDAK] SEPERTI value-2 [HINDARI value-3]

Semua nilai harus berupa string (karakter). Perbandingan ini menggunakan value-2 sebagai pola untuk mencocokkan value-1.
Sub-klausul ESCAPE opsional menentukan karakter pelarian untuk pola, memungkinkan pola
untuk menggunakan '%' dan '_' (dan karakter pelarian) untuk pencocokan. Nilai ESCAPE harus berupa tunggal
string karakter. Dalam pola, karakter ESCAPE mendahului karakter apa pun yang akan di-escape.

Misalnya, untuk mencocokkan string yang diakhiri dengan '%', gunakan:

x SUKA '%/%' ESCAPE '/'

Contoh yang lebih dipaksakan yang melarikan diri dari karakter pelarian:

y LIKE '/%//%' ESCAPE '/'

... mencocokkan setiap string yang dimulai dengan '%/'.

NOT opsional membalik hasil sehingga:

z TIDAK MIRIP 'abc%'

setara dengan:

TIDAK z SEPERTI 'abc%'

Operator IS NULL

Sebuah null di kolom tabel memiliki makna khusus -- nilai kolom saat ini tidak ada.
dikenal (hilang), namun nilainya mungkin diketahui di waktu yang akan datang. Sebuah databasenull dapat mewakili apa saja
nilai di masa depan, tetapi nilai tersebut tidak tersedia saat ini. Karena kolom null ganda mungkin akhirnya
diberikan nilai yang berbeda, satu nol tidak bisa dibandingkan dengan yang lain dengan cara konvensional. Yang
sintaks berikut ilegal dalam SQL:

DIMANA qty = NULL

Operator perbandingan khusus -- IS NULL, menguji kolom untuk null. Ini memiliki berikut ini secara umum
format:

value-1 [TIDAK] NULL

Perbandingan ini mengembalikan benar jika value-1 mengandung null dan salah jika tidak. NOT opsional
membalikkan hasilnya:

value-1 IS NOT NULL

setara dengan:

NOT value-1 IS NULL

Sebagai contoh,

27
PILIH * DARI sp DIMANA qty ADALAH NULL
sno pno qty
S1 P1 NULL
Operator Logika
Operator logika adalah DAN, ATAU, TIDAK. Mereka mengambil ekspresi logika sebagai operand dan menghasilkan sebuah logika.
hasil (Benar, Salah, Tidak Diketahui). Dalam ekspresi logis, tanda kurung digunakan untuk pengelompokan.

Operator AND

Operator AND menggabungkan dua operand logika. Operand tersebut adalah perbandingan atau logika.
ekspresi. Ini memiliki format umum berikut:

predikat-1 DAN predikat-2

DAN mengembalikan:

oBenar -- jika kedua operand dievaluasi menjadi benar


oSalah -- jika salah satu operand bernilai salah
oTidak diketahui -- sebaliknya (satu operand benar dan yang lainnya tidak diketahui atau keduanya tidak diketahui)

Tabel kebenaran untuk DAN:

DAN T F U
T T F U
F F F F
U U F U

Misalnya,

PILIH *
DARI sp
DIMANA sno='S3' DAN qty < 500
sno pno qty
S3 P2 200

Operator OR

Operator OR menggabungkan dua operand logis. Operand adalah perbandingan atau logis.
ekspresi. Ini memiliki format umum sebagai berikut:

predikat-1 ATAU predikat-2

OR mengembalikan:

oBenar -- jika salah satu operand dievaluasi menjadi benar


oSalah -- jika kedua operand dievaluasi menjadi salah
oTidak diketahui -- sebaliknya (satu operand adalah salah dan yang lainnya tidak diketahui atau keduanya tidak diketahui)

Tabel kebenaran untuk OR:

28
ATAU T FU
T T T T
FTF U
U T U U

Sebagai contoh,

PILIH *
DARI s
DIMANA sno='S3' ATAU kota = 'London'
sno name city
S2 John London
S3 Mario Roma

DAN memiliki prioritas yang lebih tinggi daripada ATAU, jadi ekspresi berikut:

a ATAU b DAN c

sama dengan:

a ATAU (b DAN c)

Operator TIDAK

Operator NOT membalikkan hasil dari ekspresi perbandingan atau ekspresi logika. Itu memiliki
format umum berikut:

Pernyataan tidak-1

Tabel kebenaran untuk NOT:

TIDAK
T F
F T
U U

Contoh permintaan:

PILIH *
DARI sp
DI MANA TIDAK sno = 'S3'
sno pno qty
S1 P1 NULL
S2 P1 200

29
Klausul ORDER BY
Klausul ORDER BY bersifat opsional. Jika digunakan, harus menjadi klausul terakhir dalam pernyataan SELECT. ORDER
Klausul BY meminta pengurutan untuk hasil dari suatu kueri.
Ketika klausa ORDER BY tidak ada, baris hasil dari sebuah kueri tidak memiliki urutan yang ditentukan (mereka adalah
unurut). Klausa ORDER BY mendefinisikan urutan baris berdasarkan kolom dari SELECT
klausa. Klausa ORDER BY memiliki format umum berikut:
URUTKAN MENURUT kolom-1 [ASC|DESC] [ kolom-2 [ASC|DESC] ] ...
kolom-1, kolom-2, ... adalah nama kolom yang ditentukan (atau disiratkan) dalam daftar pilih. Jika kolom pilih adalah
diubah nama (diberikan nama baru dalam entri yang dipilih), nama baru digunakan dalam daftar ORDER BY. ASC dan
DESC permintaan pengurutan naik atau turun untuk sebuah kolom. ASC adalah default.
ORDER BY mengurutkan baris menggunakan kolom pengurutan dari kiri ke kanan, dari yang utama ke yang minor. Baris-baris diurutkan
pertama pada nama kolom pertama dalam daftar. Jika ada nilai duplikat untuk kolom pertama, duplikat tersebut
disejajarkan pada kolom kedua (dalam pengurutan kolom pertama) dalam daftar Urut Berdasarkan, dan seterusnya. Tidak ada
mendefinisikan urutan dalam untuk baris yang memiliki nilai duplikat untuk semua kolom Urutkan.
Databasenulls memerlukan pemrosesan khusus dalam ORDER BY. Sebuah kolom null diurutkan lebih tinggi daripada semua nilai biasa;
ini dibalik untuk DESC.
Dalam pengurutan, null dianggap sebagai duplikat satu sama lain untuk ORDER BY. Pengurutan pada informasi tersembunyi
tidak masuk akal untuk memanfaatkan hasil dari kueri. Inilah juga alasan mengapa SQL hanya mengizinkan kolom daftar pilihan dalam
URUTKAN DENGAN.
Untuk kenyamanan saat menggunakan ekspresi dalam daftar pilihan, item pilihan dapat ditentukan dengan angka (dimulai
dengan 1). Nama dan angka dapat dicampur aduk.
Contoh kueri:
PILIH * DARI sp URUTKAN DARI 3 DESC
sno pno qty
S1 P1 NULL
S3 P1 1000
S3 P2 200
S2 P1 200
PILIH nama, kota DARI s URUTKAN MENURUT nama
nama kota
John London
Mario Roma
Pierre Paris
PILIH * DARI sp URUTKAN MENURUT qty DESC, sno
sno pno qty
S1 P1 NULL
S3 P1 1000
S2 P1 200
S3 P2 200
Expressions
Dalam subseksi sebelumnya tentang pernyataan Select dasar, nilai kolom digunakan dalam daftar pilih dan di mana
predikat. SQL memungkinkan penggunaan ekspresi nilai skalar sebagai gantinya. Ekspresi nilai SQL dapat berupa:

Literal -- string yang dikutip, nilai numerik, nilai tanggal waktu


Panggilan Fungsi -- referensi ke fungsi SQL bawaan
System Value -- current date, current user, ...
Special Construct -- CAST, COALESCE, CASE
Operator Numerik atau String -- menggabungkan sub-ekspresi

30
Literal
Literal adalah nilai yang bertipe yang mendefinisikan dirinya sendiri. SQL mendukung 3 jenis literal:

String -- teks ASCII yang dibingkai dengan kutipan tunggal ('). Di dalam literal, sebuah kutipan tunggal direpresentasikan oleh 2
kutip tunggal ('')
Numeric -- numeric digits (at least 1) with an optional decimal point and exponent. The format is

[ddd][[.]ddd][E[+|-]ddd]

Literal numerik tanpa eksponen atau titik desimal diketik sebagai Integer. Mereka yang memiliki titik desimal
tetapi tidak ada eksponen yang diketik sebagai Desimal. Mereka yang memiliki eksponen diketik sebagai Float.

Datetime -- literal datetime dimulai dengan kata kunci yang mengidentifikasi jenis, diikuti oleh literal string:
oTanggal -- TANGGAL 'yyyy-mm-dd'
oWaktu -- WAKTU 'hh:mm:ss[.fff]'
oTimestamp -- TIMESTAMP 'yyyy-mm-dd hh:mm:ss[.fff]'
oInterval -- INTERVAL [+|-] stringkualifikasi-interval

Format dari string dalam literasi Interval tergantung pada kualifikasi interval. Untuk tahun-bulan
interval, formatnya adalah: 'dd[-dd]'. Untuk interval waktu siang, formatnya adalah '[dd ]dd[:dd[:dd]][.fff]'.

Fungsi SQL
SQL memiliki fungsi bawaan berikut:

SUBSTRING(exp-1 DARI exp-2 [UNTUK exp-3])

Mengambil substring dari sebuah string -exp-1, dimulai dari nilai integer -exp-2, untuk panjang dari
nilai integer -[Link]-2 adalah 1 relatif. Jika exp-3 dihilangkan, panjang string yang tersisa
digunakan. Mengembalikan substring.

UPPER(exp-1)

Mengubah karakter huruf kecil dalam string -exp-1 menjadi huruf besar. Mengembalikan string yang telah diubah.

LOWER(exp-1)

Mengubah semua karakter huruf besar dalam string -exp-1 menjadi huruf kecil. Mengembalikan string yang telah diubah.

TRIM([LEADING|TRAILING|BOTH] [FROM] exp-1)


TRIM([LEADING|TRAILING|BOTH] exp-2 DARI exp-1)

Menghapus karakter yang tidak diinginkan dari awal atau akhir string -exp-1. Karakter yang dihapus adalah spasi, atau jika
exp-2 ditentukan, itu menyediakan karakter pemangkasan. Jika LEADING, TRAILING, BOTH tidak ada, maka
default adalah KEDUANYA. Mengembalikan string yang telah dipangkas.

POSITION(exp-1 DI exp-2)

Mencari string -exp-2, untuk mencocokkan substring -exp-2. Mengembalikan integer, 1 relatif
posisi pertandingan atau 0 untuk tidak ada kecocokan.

PANJANG_CHAR(exp-1)
PANJANG_KARAKTER(exp-1)

31
Mengembalikan jumlah karakter integer dalam string -exp-1.

PANJANG_OCTET(exp-1)

Mengembalikan jumlah bilangan bulat oktet (byte 8-bit) yang diperlukan untuk merepresentasikan string -exp-1.

EKSTRAK(sub-field DARI exp-1)

Mengembalikan subbidang numerik yang diekstrak dari nilai datetime -[Link]-bidang adalah TAHUN,
TRIWULAN, BULAN, HARI, JAM, MENIT, DETIK, JAM_ZONA_WAKTU atau
TIMEZONE_MINUTE, TIMEZONE_HOUR dan TIMEZONE_MINUTE mengekstrak sub-field dari
Bagian Zona Waktu dari exp-1. KUARTAL adalah (BULAN-1)/4+1.

Nilai Sistem
Nilai Sistem SQL adalah nama yang dicadangkan yang digunakan untuk mengakses nilai bawaan:

USER -- mengembalikan string dengan pengenal otorisasi SQL saat ini.


CURRENT_USER -- sama dengan USER.
SESSION_USER -- mengembalikan string dengan identifikasi otorisasi sesi SQL saat ini.
SYSTEM_USER -- mengembalikan string dengan pengguna sistem operasi saat ini.
CURRENT_DATE -- mengembalikan nilai Tanggal untuk tanggal sistem saat ini.
CURRENT_TIME -- returns a Time value for the current system time.
CURRENT_TIMESTAMP -- mengembalikan nilai Timestamp untuk timestamp sistem saat ini.

Konstruksi Khusus SQL


SQL mendukung sekumpulan konstruk ekspresi khusus:

CAST(exp-1 AS tipe-data)

Mengonversi nilai -exp-1, ke dalam tipe tanggal yang ditentukan. Mengembalikan nilai yang telah dikonversi.

COALESCE(exp-1, exp-2 [, exp-3] ...)

Kembalikan exp-1 jika tidak null, jika tidak kembalikan exp-2 jika tidak null, jika tidak kembalikan exp-3, dan
jadi seterusnya. Mengembalikan null jika semua nilai adalah null.

KASUS exp-1 { KETIKA exp-2 MAKA exp-3 } ... [LAINNYA exp-4] AKHIR
KASUS { KETIKA predikat-1 MAKA exp-3 } ... [LAINNYA exp-4] AKHIR

Bentuk pertama dari konstruk CASE membandingkan exp-1 dengan exp-2 dalam setiap klausa WHEN. Jika ada yang cocok
ditemukan, CASE mengembalikan exp-3 dari klausa THEN yang sesuai. Jika tidak ada kecocokan yang ditemukan, ia mengembalikan
exp-4dari klausa ELSE atau nullif jika klausa ELSE dihilangkan.

Bentuk kedua dari konstruksi CASE mengevaluasi predicate-1 di setiap klausa WHEN. Jika predikat
benar, CASE mengembalikan exp-3 dari klausa THEN yang sesuai. Jika tidak ada predikat yang dievaluasi menjadi benar,
ini mengembalikan exp-4 dari klausa ELSE atau null jika klausa ELSE dihilangkan.

Operator Ekspresi
Operator ekspresi menggabungkan 2 subekspresi untuk menghitung sebuah nilai. Ada 2 jenis dasar -- numerik dan
string.

Operator String

32
Hanya ada satu operator string - ||, untuk penggabungan string. Kedua operand dari || harus berupa string.
Operator menggabungkan string kedua ke akhir string pertama. Contohnya,

ab || cd ==> abcd

Operator numerik

Operator numerik adalah umum untuk kebanyakan bahasa:

o+-- penambahan
opengurangan
o*-- perkalian
o/-- pembagian

Semua operator numerik dapat digunakan pada tipe data numerik standar:

oInteger -- TINYINT, SMALLINT, INT, BIGINT


oExact -- NUMERIC, DECIMAL
oApproximate -- FLOAT, DOUBLE, REAL

Konversi otomatis disediakan untuk operator numerik. Jika tipe integer digabungkan dengan sebuah yang tepat
tipe, bilangan bulat diubah menjadi tepat sebelum operasi. Jika tipe tepat (atau bilangan bulat) digabungkan
with an approximate type, it is converted to approximate before the operation.

Operator + dan - juga dapat digunakan sebagai operator unaire.

Operator numerik dapat diterapkan pada nilai datetime, dengan beberapa pembatasan. Aturan dasar untuk
ekspresi tanggal dan waktu adalah:

oSebuah tanggal, waktu, nilai cap waktu dapat ditambahkan ke suatu interval; hasilnya adalah tanggal, waktu, cap waktu
nilai.
oNilai interval dapat dikurangkan dari nilai tanggal, waktu, timestamp; hasilnya adalah sebuah tanggal.
waktu, nilai cap waktu.
oSebuah nilai interval dapat ditambahkan atau dikurangkan dari interval lain; hasilnya adalah sebuah interval
nilai.
o Sebuah interval dapat dikalikan atau dibagi dengan nilai numerik standar; hasilnya adalah sebuah interval
nilai.

Bentuk khusus dapat digunakan untuk mengurangkan nilai tanggal, waktu, timestamp dari tanggal, waktu lainnya.
nilai timestamp untuk menghasilkan nilai interval:

(tanggal-waktu-1 - tanggal-waktu-2) kualifikasi-interval

Kualifikasi interval menentukan jenis interval spesifik untuk hasil.

Sebuah bentuk khusus kedua memungkinkan parameter ? untuk diketik sebagai interval:

? interval-qualifier
Dalam ekspresi, tanda kurung digunakan untuk pengelompokan.
Menggabungkan Tabel
Klausul FROM memungkinkan lebih dari 1 tabel dalam daftarnya, namun hanya mencantumkan lebih dari satu tabel akan sangat
jarang menghasilkan hasil yang diharapkan. Baris dari satu tabel harus berkorelasi dengan baris dari tabel lainnya.
Korelasi ini dikenal sebagai penyambungan.

33
Sebuah contoh dapat dengan baik menggambarkan alasan di balik penggabungan. Kuery berikut:
PILIH * DARI sp, p
Produces:
sno pno qty pno descr color
S1 P1 NULL P1 Widget Biru
S1 P1 NULL P2 Widget Merah
S1 P1 NULL P3 Dongle Hijau
S2 P1 200 Widget Biru P1
S2 P1 200 P2 Widget Merah
S2 P1 200 Dongle P3 Hijau
S3 P1 1000 P1 Widget Biru
S3 P1 1000 P2 Widget Merah
S3 P1 1000 P3 Dongle Hijau
S3 P2 200 Widget Biru P1
S3 P2 200 Widget Merah P2
S3 P2 200 P3 Dongle Hijau
Setiap baris inspis dipadukan secara arbitrer dengan setiap baris inp, menghasilkan 12 baris hasil (4 baris insp X 3 baris in)
Ini dikenal sebagai produk kartesian.
Kueri yang lebih dapat digunakan akan menghubungkan baris dari sp dengan baris dari p, misalnya mencocokkan pada
common column --pno:
PILIH *
DARI sp, p
DIMANA [Link] = [Link]
Ini menghasilkan:
sno pno qty pno descr color
S1 P1 NULL P1 Widget Biru
S2 P1 200 P1 Widget Biru
S3 P1 1000 P1 Widget Biru
S3 P2 200 P2 Widget Merah
Baris untuk setiap bagian dalampare digabungkan dengan baris insp untuk bagian yang sama dengan mencocokkan pada nomor bagian (pno).
Dalam kueri ini, klausa WHERE menyediakan predikat gabungan, mencocokkan pnofromp dengan pnofromsp.
Gabungan dalam contoh ini dikenal sebagai inner equi-join, yang berarti bahwa predikat gabungan menggunakan = (sama dengan)
untuk mencocokkan kolom yang bergabung. Jenis gabungan lainnya menggunakan operator perbandingan yang berbeda. Misalnya, sebuah kueri
mungkin menggunakan join lebih besar dari.
The terminnermeans only rows that match are included. Rows in the first table that have no matching rows
di tabel kedua dikecualikan dan sebaliknya (dalam gabungan di atas, baris inpwithpnoP3 tidak termasuk dalam
Hasilnya.) Anouterjoin termasuk baris yang tidak cocok dalam hasil.
Lebih dari 2 tabel dapat ikut serta dalam sebuah join. Ini pada dasarnya hanya merupakan perpanjangan dari join 2 tabel. 3 tabel --
a,b,c, mungkin digabungkan dengan berbagai cara:

ajoinsbwhich joinsc
ajoinsband gabungan dari a dan b gabungkan c
ajoinsbandajoinsc

Plus beberapa variasi lainnya. Dengan inner joins, struktur ini tidak eksplisit. Ini tersirat dalam sifat dari
Gabungkan predikat. Tanpa gabungan, itu eksplisit;
Kueri ini melakukan penggabungan 3 tabel:

34
SELECT name, qty, descr, color
DARI s, sp, p
DIMANA [Link] = [Link]
DAN [Link] = [Link]
Ini bergabungstospandsptop, menghasilkan:
name qty descr color
Pierre NULL Widget Biru
John 200 Widget Biru
Mario 1000 Widget Biru
Mario 200 Widget Merah
Perhatikan bahwa urutan tabel yang terdaftar dalam klausa FROM seharusnya tidak memiliki arti, begitu juga dengan urutan dari
bergabungkan predikat dalam klausa WHERE.
Gabungan Luar
Inner join mengecualikan baris dari salah satu tabel yang tidak memiliki baris yang cocok di tabel lainnya. Outer
join menyediakan kemampuan untuk menyertakan baris yang tidak cocok dalam hasil kueri. Join luar menggabungkan
baris tak cocok di salah satu tabel dengan baris buatan untuk tabel lainnya. Baris buatan ini memiliki semua kolom
set tonull.
Join luar ditentukan dalam klausa FROM dan memiliki format umum berikut:
tabel-1 { KIRI | KANAN | PENUH } OUTER JOIN tabel-2 PADA predikat-1
predicate-1 adalah predikat gabung untuk gabungan luar. Ini hanya dapat merujuk pada kolom dari tabel yang digabungkan.
Spesifikator LEFT, RIGHT atau FULL memberikan jenis gabungan:

KIRI -- hanya baris yang tidak cocok dari tabel sisi kiri (tabel-1) yang dipertahankan
KANAN -- hanya baris yang tidak cocok dari tabel sisi kanan (tabel-2) yang dipertahankan
FULL -- unmatched rows from both tables (table-1andtable-2) are retained

Contoh outer join:


PILIH pno, deskripsi, warna, sno, qty
DARI p LEFT OUTER JOIN sp ON [Link] = [Link]
pno descr color sno qty
Widget Biru P1 S1 NULL
Widget Biru P1 S2 200
P1 Widget Biru S3 1000
P2 Widget Merah S3 200
P3 Dongle Hijau NULL NULL
Self Joins
Sebuah kueri dapat menggabungkan sebuah tabel dengan dirinya sendiri. Bergabung dengan dirinya sendiri memiliki sejumlah penggunaan di dunia nyata. Misalnya, sebuah bergabung dengan dirinya sendiri dapat
tentukan bagian mana yang memiliki lebih dari satu pemasok:
PILIH DISTINCT [Link]
DARI sp a, sp b
DIMANA [Link] = [Link]
DAN [Link] <> [Link]
pno
P1
Seperti yang diilustrasikan dalam contoh di atas, self joins menggunakan nama korelasi untuk membedakan kolom dalam pemilihan
daftar dan predikat dimana. Dalam hal ini, referensi ke tabel yang sama diberi nama ulang -aandb.
Self join sering digunakan dalam subkueri.

35
Subkueri
Subkueri adalah fitur yang mengidentifikasi SQL. Ini disebut Bahasa Query Terstruktur karena sebuah kueri dapat
bersarang di dalam kueri lain.
Ada 3 jenis dasar subquery di SQL:

Subquery Predikat -- konstruk logis yang diperluas dalam klausa WHERE (dan HAVING).
Subkueri Skalar -- kueri mandiri yang mengembalikan satu nilai; mereka dapat digunakan di mana saja.
nilai skalar digunakan.
Subkueri Tabel - kueri yang terbenam dalam klausa FROM.

Semua subkueri harus ditempatkan di dalam tanda kurung.


Subquery Predikat
Subkueri predikat digunakan dalam klausa WHERE (dan HAVING). Masing-masing adalah konstruksi logis khusus.
Kecuali untuk EXISTS, subquery predikat harus mengambil satu kolom (dalam daftar pilihannya).

Dalam Subquery

Subkueri IN menguji apakah nilai skalar cocok dengan nilai kolom kueri tunggal di mana pun
baris hasil subquery. Ini memiliki format umum sebagai berikut:

nilai-1 [TIDAK] DI (kueri-1)

Menggunakan NOT setara dengan:

TIDAK nilai-1 DI (kueri-1)

Misalnya, untuk mencantumkan bagian yang memiliki pemasok:

PILIH *
DARI p
DIMANA pno DALAM (PILIH pno DARI sp)
pno descr color
Widget Biru P1
Widget Merah P2

Contoh Self Join di subseksi sebelumnya dapat diekspresikan dengan Subquery IN:

PILIH DISTINCT pno


DARI sp a
DIMANA pno DALAM (PILIH pno DARI sp b DIMANA [Link] <> [Link])
pno
P1

Perhatikan bahwa klausa where subquery merujuk pada kolom di query luar ([Link]). Ini dikenal sebagai
sebagai referensi luar. Subkueri dengan referensi luar terkadang dikenal sebagai berkorelasi.
subkueri.

Subkueri Kuantitatif

Subkueri yang terkuantifikasi memungkinkan beberapa jenis pengujian dan dapat menggunakan seluruh set operator perbandingan.
Ini memiliki format umum sebagai berikut:

36
value-1 {=|>|<|>=|<=|<>} {ANY|ALL|SOME} (query-1)

Operator perbandingan menentukan bagaimana membandingkan nilai-1 dengan nilai kolom kueri tunggal dari
setiap baris hasil subkueri. Spesifier ANY, ALL, SOME memberikan jenis kecocokan yang diharapkan. ANY
dan SOME harus cocok dengan setidaknya satu baris dalam subquery. ALL harus cocok dengan semua baris dalam subquery.

Sebagai contoh, untuk mencantumkan semua bagian yang memiliki pemasok:

PILIH *
DARI p
DIMANA pno =ANY (PILIH pno DARI sp)
pno descr color
P1 Widget Biru
Widget Merah P2

Sebuah self join digunakan untuk mencantumkan pemasok dengan jumlah tertinggi dari setiap bagian (mengabaikan null
kuantitas):

PILIH *
DARI sp a
DIMANA qty >SEMUA (PILIH qty DARI sp b
DIMANA [Link] = [Link]
DAN [Link] <> [Link]
DAN qty TIDAK NULL)
sno pno qty
S3 P1 1000
S3 P2 200

Subquery EXISTS

Subquery EXISTS menguji apakah subquery mengambil setidaknya satu baris, yaitu, apakah sebuah
baris yang memenuhi syarat ada. Ini memiliki format umum berikut

ADA(query-1)

Setiap subkueri EXISTS yang valid harus mengandung referensi luar. Ini harus berupa subkueri yang terhubung.

Catatan: daftar pilihan dalam subquery EXISTS sebenarnya tidak digunakan dalam mengevaluasi EXISTS, jadi bisa
contain any valid select list (though*is normally used).

Untuk mencantumkan bagian yang memiliki pemasok:

PILIH *
DARI p
DIMANA ADA(SELECT * DARI sp DIMANA [Link] = [Link])
pno descr color
Widget Biru P1
Widget Merah P2

37
Subquery Skalar
Subkueri Skalar dapat digunakan di mana saja nilai dapat digunakan. Subkueri harus merujuk hanya pada satu
kolom dalam daftar pilih. Ini juga harus mengambil tidak lebih dari satu baris.
Ketika subquery mengembalikan satu baris, nilai dari kolom daftar pilih tunggal menjadi nilai dari
Subkueri Skalar. Saat subkueri tidak mengembalikan baris, sebuah databasenullis digunakan sebagai hasil dari subkueri.
Jika subquery mengambil lebih dari satu baris, itu akan menghasilkan kesalahan runtime dan menghentikan eksekusi kueri.
Subquery Skalar dapat muncul sebagai nilai skalar dalam daftar select dan predikat where dari query lain.
Kueri berikut pada thesptable menggunakan Subquery Skalar dalam daftar seleksi untuk mengambil kota pemasok
terkait dengan nomor pemasok (snokolom insp):
PILIH pno, qty, (PILIH kota DARI s DI MANA [Link] = [Link])
DARI sp
pno qty kota
P1 NULL Paris
P1 200 London
P1 1000 Roma
P2 200 Rome
Kueri berikut pada thesptable menggunakan Subquery Skalar di klausa where untuk mencocokkan bagian berdasarkan warna
terkait dengan nomor bagian (pnocolumn insp):
PILIH *
DARI sp
DIMANA 'Biru' = (PILIH warna DARI p DI MANA [Link] = [Link])
sno pno qty
S1 P1 NULL
S2 P1 200
S3 P1 1000
Perhatikan bahwa kedua kueri contoh menggunakan referensi luar. Ini adalah hal yang normal dalam Subkueri Skalar. Seringkali, Skalar
Subkueri adalah Kueri Agregat.
Subkueri Tabel
Subkueri Tabel adalah kueri yang digunakan dalam klausa FROM, menggantikan nama tabel. Pada dasarnya, hasil set dari
Subkueri Tabel bertindak seperti tabel dasar dalam daftar dari. Subkueri Tabel dapat memiliki nama korelasi di
dari daftar. Mereka juga dapat berada dalam gabungan luar.
Dua kueri berikut menghasilkan hasil yang sama:
PILIH p.*, qty
DARI p, sp
DIMANA [Link] = [Link]
DAN sno = 'S3'
pno descr color qty
P1 Widget Biru 1000
P2 Widget Merah 200
PILIH p.*, qty
DARI p, (PILIH pno, qty DARI sp DI MANA sno = 'S3')
DIMANA [Link] = [Link]
pno descr color qty
P1 Widget Biru 1000
P2 Widget Merah 200

38
Grouping Queries
Kueri Pengelompokan adalah jenis kueri khusus yang mengelompokkan dan merangkum baris. Ia menggunakan GROUP BY
Klausul.
Kueri Pengelompokan mengelompokkan baris berdasarkan nilai yang sama dalam satu set kolom pengelompokan. Baris dengan nilai yang sama
nilai untuk kolom pengelompokan ditempatkan dalam kelompok yang berbeda. Setiap kelompok diperlakukan sebagai satu baris dalam
hasil kueri.
Meskipun sekelompok data diperlakukan sebagai satu baris, baris yang mendasarinya dapat menjadi subjek operasi ringkasan.
dikenal sebagai Fungsi Set yang hasilnya dapat dimasukkan dalam kueri. Klausa HAVING opsional mendukung
memfilter baris grup dengan cara yang sama seperti klausa WHERE memfilter baris FROM.
Sebagai contoh, mengelompokkan thesptable berdasarkan kolom pnocon menghasilkan 2 kelompok:

sno pno qty


S1 P1 NULL
S2 P1 200 'Grup P1'
S3 P1 1000
S3 P2 200 'Kelompok P2'

TheP1group berisi 3sprows denganpno='P1'


TheP2group berisi sebuah singlesprow dengan pno='P2'

Null mendapatkan perlakuan khusus oleh GROUP BY. GROUP BY menganggap null sebagai berbeda dari setiap null lainnya.
Setiap baris yang memiliki null di salah satu kolom pengelompokkannya membentuk kelompok terpisah.
Pengelompokan tabel ini pada kolom qty menghasilkan 3 grup:
sno pno qty
S1 P1 NULL NULL Grup
S2 P1 200
Grup 200
S3 P2 200
S3 P1 1000 1000 Grup
Baris di mana qty adalah null membentuk kelompok terpisah.
Klausul GROUP BY
GROUP BY adalah klausa opsional dalam sebuah kueri. Itu mengikuti klausa WHERE atau klausa FROM jika
Klausul WHERE hilang. Sebuah kueri yang mengandung klausul GROUP BY adalah Kueri Pengelompokan. GROUP BY
klausa memiliki format umum berikut:
GROUP BY kolom-1 [, kolom-2] ...
kolom-1dan kolom-2adalah kolom pengelompokan. Mereka harus merupakan nama kolom dari tabel di FROM
klausa; mereka tidak dapat menjadi ungkapan.
GROUP BY beroperasi pada baris dari klausul FROM yang difilter oleh klausul WHERE. Ini mengumpulkan
baris menjadi grup berdasarkan nilai umum di kolom pengelompokan. Kecuali null, baris dengan set yang sama dari
nilai untuk kolom pengelompokan ditempatkan dalam grup yang sama. Jika ada kolom pengelompokan untuk sebuah baris mengandung sebuah
null, baris diberikan grupnya sendiri.
Sebagai contoh,
PILIH pno
DARI sp
GROUP BY pno
pno
P1
P2
In Grouping Queries, the select list can only contain grouping columns, plus literals, outer references and
ekspresi yang melibatkan elemen-elemen ini. Kolom non-pengelompokan dari tabel FROM yang mendasarinya tidak dapat di

39
dirujuk langsung. Namun, kolom yang tidak dikelompokkan dapat digunakan dalam daftar seleksi sebagai argumen untuk Set
Fungsi. Fungsi Set merangkum kolom dari baris yang mendasari suatu grup.
Fungsi Himpunan
Fungsi Set adalah fungsi ringkasan khusus yang digunakan dengan Kuery Pengelompokan dan Kuery Agregat. Mereka
merangkum kolom dari baris yang mendasari suatu grup atau agregat.
Menggunakan contoh Group By di atas, mengelompokkan thesptable berdasarkan kolom thepnocolumn:
sno pno qty
S1 P1 NULL
S2 P1 200 'P1' Grup
S3 P1 1000
S3 P2 200 Grup 'P2'
Fungsi Set dapat menghitung total kuantitas untuk setiap kelompok:
sno pno qty qty total
S1 P1 NULL
S2 P1 200 'P1' Grup 1200
S3 P1 1000
S3 P2 200 Grup 'P2'
200

Kolom null diabaikan dalam menghitung ringkasan. Fungsi Set -- SUM, menghitung aritmetika
jumlah kolom numerik dalam sekumpulan baris yang dikelompokkan/di agregat. Misalnya,
PILIH pno, JUMLAH(qty)
DARI sp
GROUP BY pno
pno
P1 1200
P2 200
Fungsi Set memiliki format umum berikut:
fungsi-set ( [DISTINCT|ALL] kolom-1 )
set-functionis:

JUMLAH -- jumlah baris


JUMLAH -- jumlah aritmetik dari kolom numerik
AVG -- rata-rata aritmetika dari kolom numerik; seharusnya SUM()/COUNT().
MIN -- nilai minimum ditemukan di kolom
MAKS -- nilai maksimum yang ditemukan di kolom

Hasil dari fungsi COUNT selalu berupa bilangan bulat. Hasil dari semua fungsi Set lainnya adalah tipe data yang sama
ketik sebagai argumen.
Fungsi Set melewatkan kolom dengan nilai null, merangkum nilai non-null. COUNT menghitung baris dengan non-
nilai null, AVG menghitung rata-rata nilai non-null, dan seterusnya. COUNT mengembalikan 0 ketika tidak ada nilai kolom non-null
ditemukan; fungsi lainnya mengembalikan null ketika tidak ada nilai untuk dirangkum.
Argumen Fungsi Set bisa berupa kolom atau ekspresi skalar.
Spesifikasi DISTINCT dan ALL bersifat opsional. ALL menunjukkan bahwa semua nilai non-null diringkas;
adalah default. DISTINCT menetapkan bahwa nilai kolom yang berbeda diringkas; nilai duplikat diabaikan.
Catatan: DISTINCT tidak berpengaruh pada hasil MIN dan MAX.
COUNT juga memiliki format alternatif:
HITUNG(*)
... yang menghitung baris yang mendasari terlepas dari isi kolom.

40
Contoh Fungsi Set:
SELECT pno, MIN(sno), MAX(qty), AVG(qty), COUNT(DISTINCT sno)
DARI sp
GROUP BY pno
pno
P1 S1 1000600 3
P2 S3 200 200 1
PILIH sno, COUNT(*) bagian
DARI sp
GRUPKAN MENURUT sno

sno bagian
S1 1
S2 1
S3 2
Klausul HAVING
Klausa HAVING terkait dengan Kueri Pengelompokan dan Kueri Agregat. Ini opsional di keduanya.
kasus. Dalam Kueri Pengelompokan, mengikuti klausa GROUP BY. Dalam Kueri Agregat, HAVING mengikuti
Klausul WHERE atau klausul FROM jika klausul WHERE hilang.
Klausul HAVING memiliki format umum berikut:
Pernyataan HAVING
Seperti Klausul WHERE, HAVING menyaring baris hasil kueri. WHERE menyaring baris dari FROM
klausa. HAVING memfilter baris yang dikelompokkan (dari klausa GROUP BY) atau baris agregat (untuk Agregat
Permintaan).
predikat adalah ekspresi logis yang merujuk pada kolom yang dikelompokkan dan fungsi set. Ini memiliki batasan yang sama
sebagai daftar pilihan untuk Kuery Pengelompokan dan Kuery Agregat.
Jika predikat Having dievaluasi sebagai benar untuk baris yang dikelompokkan atau agregat, baris tersebut termasuk dalam kueri
hasil, jika tidak, baris tersebut dilewatkan (tidak termasuk dalam hasil kueri).
Sebagai contoh,
PILIH sno, HITUNG(*) bagian
DARI sp
GROUP BY sno
MEMILIKI COUNT(*) > 1
sno bagian
S3 2
Kueri Agregat
Kueri Agregat dapat menggunakan Fungsi Set dan Klausul HAVING. Ini mirip dengan Kueri Pengelompokan kecuali
tidak ada kolom pengelompokan. Baris yang mendasari dari klausa FROM dan WHERE dikelompokkan menjadi
sebuah baris agregat tunggal. Kuery Agregat selalu mengembalikan satu baris, kecuali ketika klausa Having adalah
digunakan.
Kueri Agregat adalah kueri yang mengandung Fungsi Set dalam daftar pilih tetapi tidak memiliki klausa GROUP BY. Yang
Fungsi Set beroperasi pada kolom dari baris dasar dari baris agregat tunggal. Kecuali untuk luar
referensi, kolom mana saja yang digunakan dalam daftar pilih harus menjadi argumen untuk Fungsi Set.
Sebuah kueri agregat juga dapat memiliki klausa Having. Klausa Having menyaring baris agregat tunggal. Jika
predikat Having dievaluasi menjadi benar, hasil kueri mengandung baris agregat. Jika tidak, kueri
hasil tidak mengandung baris.
Sebagai contoh,
PILIH COUNT(DISTINCT pno) jumlah_bagian, SUM(qty) total_bagian
DARI sp
number_parts total_parts

41
2 1400
Subkueri sering kali adalah Kuery Agregat. Misalnya, bagian dengan pemasok:
PILIH *
DARI p
DIMANA (PILIH COUNT(*) DARI sp DIMANA [Link]=[Link]) > 0
pno descr color
Widget Biru P1
Widget Merah P2
Bagian dengan banyak pemasok:
PILIH *
DARI p
DI MANA (PILIH HITUNG(DISTINCT sno) DARI sp DI MANA [Link]=[Link]) > 1
pno descr color
Widget Biru P1
Kueri Gabungan
Operator SQL UNION menggabungkan hasil dari dua kueri menjadi hasil komposit. Komponen
kueri dapat berupa kueri SELECT/FROM dengan klausa WHERE/GROUP BY/HAVING opsional. UNION
operator memiliki format umum berikut:
kueri-1 UNION [SEMUA] kueri-2
query-1danquery-2adalah spesifikasi kueri lengkap. Operator UNION membuat hasil kueri baru yang
termasuk baris dari setiap kueri komponen.
Secara default, UNION menghapus baris duplikat dalam hasil kompositnya. Spesifier opsional ALL meminta
duplikasi harus dipertahankan dalam hasil UNION.
Kueri komponen dari Kueri Union juga bisa menjadi Kueri Union itu sendiri. Kurung digunakan untuk
kueri pengelompokan.
Daftar pilih dari kueri komponen harus kompatibel untuk penggabungan. Mereka harus cocok dalam derajat (jumlah
dari kolom). Untuk Entry Level SQL92, deskriptor kolom (tipe data dan presisi, skala) untuk setiap
kolom yang sesuai harus cocok. Aturan untuk SQL92 Tingkat Menengah kurang ketat.
Kueri yang Kompatibel dengan Union
Untuk Tingkat Masuk SQL92, setiap kolom yang sesuai dari kedua kueri harus memiliki deskripsi kolom yang sama
agar dua kueri dapat kompatibel dengan union. Aturannya kurang ketat untuk Tingkat Menengah SQL92.
Ini mendukung konversi otomatis dalam kategori tipe. Secara umum, tipe data yang dihasilkan akan lebih luas.
tipe. Kolom yang bersangkutan hanya perlu berada dalam kategori tipe data yang sama:

Karakter (String) -- panjang tetap/variabel


Bit String -- fixed/variable length
Numerik Tepat (titik tetap) -- bilangan bulat/desimal
Angka Perkiraan (floating point) -- float/double
Datetime -- sub-kategori harus sama,
oDate
oWaktu
oCap waktu
Interval -- sub-kategori harus sama,
oTahun-bulan
oSiang hari

Contoh UNION
PILIH * DARI sp
UNION
PILIH CAST(' ' SEBAGAI VARCHAR(5)), pno, CAST(0 SEBAGAI INT)

42
DARI p
DI MANA pno TIDAK DI (PILIH pno DARI sp)
sno pno qty
S1 P1 NULL
S2 P1 200
S3 P1 1000
S3 P2 200
P3 0

Pernyataan Modifikasi SQL


Pernyataan Modifikasi SQL membuat perubahan pada data basis data di tabel dan kolom. Ada 3
pernyataan modifikasi:

Pernyataan INSERT -- tambahkan baris ke tabel


Pernyataan UPDATE -- modifikasi kolom dalam baris tabel
Pernyataan DELETE -- menghapus baris dari tabel

Pernyataan INSERT
Pernyataan INSERT menambahkan satu atau lebih baris ke sebuah tabel. Ini memiliki dua format:
MASUKKAN KE dalam tabel-1 [(daftar-kolom)] NILAI (daftar-nilai)
dan,
MASUKKAN KE dalam tabel-1 [(daftar-kolom)] (spesifikasi-query)
Bentuk pertama menyisipkan satu baris ke dalam tabel-1 dan secara eksplisit menentukan nilai kolom untuk baris tersebut.
bentuk kedua menggunakan hasil dari spesifikasi-query untuk memasukkan satu atau lebih baris ke dalam tabel-1. Baris hasil
dari query apakah baris ditambahkan ke tabel insert. Catatan: query tidak dapat merujuk pada tabel-1.
Kedua bentuk memiliki spesifikasi daftar kolom opsional. Hanya kolom yang terdaftar yang akan diberikan nilai.
Kolom yang tidak terdaftar diatur ke null, jadi kolom yang tidak terdaftar harus memperbolehkan null. Nilai dari Klausul VALUES
(bentuk pertama) atau kolom dari rows spesifikasi-pertanyaan (bentuk kedua) ditugaskan ke
kolom yang sesuai dalam daftar-kolom sesuai urutan.
Jika daftar kolom opsional hilang, daftar kolom default akan digunakan. Daftar kolom default berisi
semua kolom di tabel-1 dalam urutan mereka dinyatakan dalam CREATE TABLE, atau CREATE VIEW.
Klausul VALUES
Klausa VALUES dalam Pernyataan INSERT menyediakan serangkaian nilai untuk ditempatkan di kolom-kolom baru
baris. Ini memiliki format umum sebagai berikut:
NILAI ( nilai-1 [, nilai-2] ... )
value-1danvalue-2adalah Nilai Literal atau Ekspresi Skalar yang melibatkan literal. Mereka juga dapat menentukan
NULL.
Daftar nilai dalam klausa VALUES harus cocok dengan daftar kolom eksplisit atau implisit untuk INSERT dalam derajat
(jumlah item). Mereka juga harus sesuai dengan tipe data kolom yang bersangkutan atau dapat dikonversi ke tipe tersebut
tipe data.
Sisipkan Contoh
MASUKKAN KE p (pno, warna) NILAI ('P4', 'Cokelat')
Sebelum Setelah
pno descr color pno descr color
Widget Biru P1 Widget Biru P1
Widget Merah P2 => P2 Widget Merah
P3 Dongle Hijau P3 Dongle Hijau

43
P4 NULL Coklat
INSERT INTO sp
PILIH [Link], [Link], 500
DARI s, p
DIMANA [Link]='Hijau' DAN [Link]='London'
Sebelum Setelah
sno pno qty sno pno qty
S1 P1 NULL S1 P1 NULL
S2 P1 200 S2 P1 200
=
S3 P1 1000 > S3 P1 1000
S3 P2 200 S3 P2 200
S2 P3 500

Pernyataan UPDATE
Pernyataan UPDATE mengubah kolom dalam baris tabel yang dipilih. Ini memiliki format umum sebagai berikut:
PERBARUI tabel-1 SET daftar-set [DIMANA predikat]
Klausul WHERE opsional memiliki format yang sama seperti dalam Pernyataan SELECT. Lihat Klausul WHERE.
Klausul WHERE memilih baris tabel mana yang akan diperbarui. Jika tidak ada, semua baris akan diperbarui.
Daftar set ini berisi penugasan nilai baru untuk kolom yang dipilih.
Ekspresi SET Clause dan predikat WHERE Clause dapat mengandung subquery, tetapi subquery tersebut
tidak dapat merujuk tabel-1. Ini mencegah situasi di mana hasil bergantung pada urutan pemrosesan.
SET Clause
Klausul SET dalam Pernyataan UPDATE memperbarui (menetapkan nilai baru ke) kolom-kolom di tabel yang dipilih
baris. Ini memiliki format umum sebagai berikut:
SET kolom-1 = nilai-1 [, kolom-2 = nilai-2] ...
kolom-1dan kolom-2 adalah kolom dalam tabel Pembaruan. nilai-1dan nilai-2 adalah ekspresi yang dapat
kolom referensi dari tabel pembaruan. Mereka juga bisa menjadi kata kunci -- NULL, untuk mengatur kolom menjadi null.
Karena ekspresi penugasan dapat merujuk pada kolom dari baris saat ini, ekspresi dievaluasi
first. After the values of all Set expressions have been computed, they are then assigned to the referenced
kolom. Ini menghindari hasil yang tergantung pada urutan pemrosesan.
UPDATE Examples
PERBARUI sp SET qty = qty + 20
Sebelum Setelah
sno pno qty sno pno qty
S1 P1 NULL S1 P1 NULL
S2 P1 200 = S2 P1 220
S3 P1 1000 > S3 P1 1020
S3 P2 200 S3 P2 220

PERBARUI s
SET name = 'Tony', city = 'Milan'
DIMANA sno = 'S3'
Sebelum Setelah
sno name city sno name city
S1 Pierre Paris S1 Pierre Paris
=>
S2 John London S2 John London
S3 Mario Roma S3Tony Milan

44
Pernyataan DELETE
Pernyataan DELETE menghapus baris yang dipilih dari sebuah tabel. Ini memiliki format umum berikut:
HAPUS DARI tabel-1 [DIMANA predikat]
Klausul WHERE yang opsional memiliki format yang sama seperti dalam Pernyataan SELECT. Lihat Klausul WHERE.
Klausul WHERE memilih baris tabel mana yang akan dihapus. Jika tidak ada, semua baris di tabel-1 akan dihapus.
Predikat klausa WHERE dapat mengandung subkueri, tetapi subkueri tidak dapat merujuk tabel-1. Ini
mencegah situasi di mana hasil bergantung pada urutan pemrosesan.
HAPUS Contoh
HAPUS DARI sp DIMANA pno = 'P1'
Sebelum Setelah
sno pno qty sno pno qty
S1 P1 NULL S3 P2 200
S2 P1 200 =
S3 P1 1000 >
S3 P2 200

HAPUS DARI p DI MANA pno TIDAK ADA DI (PILIH pno DARI sp)
Sebelum Setelah
pno descr color pno descr color
Widget Biru P1 Widget Biru P1
Widget Merah P2 => P2 Widget Merah
P3 Dongle Hijau

Pernyataan Transaksi SQL


Pernyataan Transaksi SQL mengontrol transaksi dalam akses basis data. Subset SQL ini juga disebut
Bahasa Kontrol Data untuk SQL (SQL DCL).
Ada 2 Pernyataan Transaksi SQL:

Pernyataan COMMIT -- komit (buat permanen) semua perubahan untuk transaksi saat ini
Pernyataan ROLLBACK -- membatalkan (mencabut) semua perubahan untuk transaksi saat ini

Gambaran Transaksi
Transaksi basis data adalah unit yang lebih besar yang membingkai beberapa pernyataan SQL. Sebuah transaksi memastikan bahwa
aksi dari pernyataan yang dibingkai adalah atomik sehubungan dengan pemulihan.
Pernyataan Modifikasi SQL memiliki pengaruh yang terbatas. Pernyataan tertentu hanya dapat memodifikasi konten secara langsung.
dari sebuah tabel tunggal (Dampak Integritas Referensial dapat menyebabkan modifikasi tidak langsung pada tabel lain.) Intinya adalah
operasi yang memerlukan modifikasi beberapa tabel harus melibatkan beberapa pernyataan modifikasi.
Contoh klasik adalah operasi bank yang mentransfer dana dari satu jenis rekening ke jenis rekening lain, yang memerlukan
pembaruan ke 2 tabel. Transaksi memberikan cara untuk mengelompokkan beberapa pernyataan ini dalam suatu unit atom.
Dalam SQL92, tidak ada pernyataan BEGIN TRANSACTION. Sebuah transaksi dimulai dengan pelaksanaan sebuah
Pernyataan SQL-Data ketika tidak ada transaksi saat ini. Semua pernyataan SQL-Data berikutnya sampai
COMMIT atau ROLLBACK menjadi bagian dari transaksi. Eksekusi pernyataan COMMIT atau
Pernyataan ROLLBACK menyelesaikan transaksi saat ini. Pernyataan SQL-Data berikutnya memulai yang baru.
transaksi.
Dalam hal efek langsung pada basis data, itu adalah Pernyataan Modifikasi SQL yang menjadi pertimbangan utama.
karena mereka mengubah data. Total serangkaian perubahan pada basis data oleh pernyataan modifikasi dalam sebuah transaksi
diperlakukan sebagai unit atom melalui tindakan transaksi. Serangkaian perubahan tersebut baik:

45
Dibuat sepenuhnya persisten dalam basis data melalui tindakan Pernyataan COMMIT, atau
Tidak memiliki efek persisten apapun pada database, melalui:
otindakan dari Pernyataan ROLLBACK,
opemutusan abnormal dari klien yang meminta transaksi, atau
opengakhiran abnormal dari transaksi oleh DBMS. Ini mungkin merupakan tindakan oleh sistem
(penyelesaian deadlock) atau oleh agen administratif, atau bisa juga merupakan penghentian abnormal dari
DBMS itu sendiri. Dalam hal ini, DBMS harus membatalkan segala transaksi aktif selama
pemulihan.

DBMS harus memastikan bahwa efek dari sebuah transaksi tidak bersifat sebagian. Semua perubahan dalam sebuah transaksi haruslah
dapat dibuat permanen, atau tidak ada perubahan dari transaksi yang harus dibuat permanen.
Isolasi Transaksi
Dalam banyak kasus, transaksi dilaksanakan di bawah koneksi klien ke DBMS. Beberapa koneksi klien
dapat memulai transaksi pada saat yang sama. Ini dikenal sebagai transaksi bersamaan.
Dalam model relasional, setiap transaksi sepenuhnya terisolasi dari transaksi aktif lainnya. Setelah dimulainya,
sebuah transaksi hanya dapat melihat perubahan pada basis data yang dibuat oleh transaksi yang telah dikomit sebelum memulai yang baru
transaksi. Perubahan yang dilakukan oleh transaksi yang bersamaan tidak terlihat oleh kueri DML SQL dan modifikasi
pernyataan. Ini dikenal sebagai isolasi penuh atau transaksi Serializable.
SQL92 mendefinisikan Serializable untuk transaksi. Namun, transaksi yang sepenuhnya diserialisasi dapat berdampak pada kinerja.
For this reason, SQL92 allows additional isolation modes that reduce the isolation between concurrent
transaksi. SQL92 mendefinisikan 3 mode isolasi lainnya, tetapi dukungan oleh DBMS yang ada sering kali tidak lengkap
dan tidak selalu cocok dengan mode SQL92. Periksa dokumentasi DBMS Anda untuk informasi lebih lanjut.
Pernyataan Skema SQL dalam Transaksi
Jenis SQL Ketiga - Pernyataan SQL-Schema, dapat berpartisipasi dalam mekanisme transaksi.
Pernyataan skema SQL dapat berupa:

dimasukkan dalam transaksi bersama dengan pernyataan SQL-Data,


diperlukan untuk berada dalam transaksi terpisah, atau
diabaikan oleh mekanisme transaksi (tidak dapat dibatalkan).

SQL92 menyerahkan pilihan kepada masing-masing DBMS. Ini adalah perilaku yang ditentukan oleh implementasi.
Pernyataan COMMIT
Pernyataan COMMIT mengakhiri transaksi saat ini dan menerapkan semua perubahan di bawah transaksi tersebut.
persisten. Ini mengkomit perubahan ke database. Pernyataan COMMIT memiliki format umum sebagai berikut:
KOMIT [PEKERJAAN]
WORK adalah kata kunci opsional yang tidak mengubah semantik dari COMMIT.
Pernyataan ROLLBACK
Pernyataan ROLLBACK mengakhiri transaksi saat ini dan membatalkan semua perubahan yang dibuat di bawah
transaksi. Ini membalikkan perubahan pada database. Pernyataan ROLLBACK memiliki umum berikut
format:
ROLLBACK [KERJA]
WORK adalah kata kunci opsional yang tidak mengubah semantik dari ROLLBACK.

Pernyataan Skema SQL


Pernyataan SQL-Schema menyediakan pemeliharaan objek katalog untuk skema -- tabel, tampilan dan
hak istimewa. Subset SQL ini juga disebut sebagai Bahasa Definisi Data untuk SQL (SQL DDL).
Ada 6 Pernyataan Skema SQL:

STATEMENT BUAT TABEL -- membuat tabel dasar baru di skema saat ini
Buat Pernyataan TAMPILAN -- buat tabel tampilan baru di skema saat ini
PERNYATAAN DROP TABLE -- menghapus tabel dasar dari skema saat ini

46
45
PERNYATAAN DROP VIEW -- menghapus tabel tampilan dari skema saat ini
Pernyataan GRANT -- memberikan hak akses untuk objek dalam skema saat ini kepada pengguna lain
PERNYATAAN REVOKE -- mencabut hak akses yang sebelumnya diberikan untuk objek di saat ini
skema dari pengguna lain

Gambaran Umum Skema


Sebuah basis data relasional berisi katalog yang menjelaskan berbagai elemen dalam sistem. Katalog membagi
database di dalam sub-database yang dikenal sebagai skema. Di dalam setiap skema terdapat objek database -- tabel, tampilan
dan hak istimewa.
Katalog itu sendiri adalah sekumpulan tabel dengan nama skema yang dimiliki -definition_schema. Tabel-tabel dalam katalog
tidak dapat dimodifikasi langsung. Mereka dimodifikasi secara tidak langsung dengan pernyataan SQL-Schema.
Meja
Tabel basis data adalah struktur akar dalam model relasional dan di SQL. Sebuah tabel (disebut hubungan dalam
relasional) terdiri dari baris dan kolom. Dalam relasional, baris disebut tuple dan kolom disebut
atribut. Tabel sering ditampilkan dalam format datar, dengan kolom disusun secara horizontal dan baris secara vertikal:
Kolumn
R
o
w

Tabel basis data adalah struktur logis tanpa karakteristik fisik yang diimplikasikan. Utama di antara berbagai
tabel logis adalah tabel dasar. Tabel dasar adalah persisten dan terpisah, yaitu, semua data adalah bagian dari tabel
itu sendiri tanpa informasi yang diambil secara dinamis dari tabel lain.
Sebuah tabel memiliki sekumpulan kolom tetap. Kolom-kolom dalam tabel dasar tidak diakses secara posisi tetapi berdasarkan nama,
yang harus unik di antara kolom-kolom tabel. Setiap kolom memiliki tipe data yang ditentukan, dan nilainya
untuk kolom di setiap baris harus dari tipe data yang ditentukan atau null. Kolom dari sebuah tabel diakses
dan diidentifikasi dengan nama.
Sebuah tabel memiliki 0 atau lebih baris. Sebuah baris dalam tabel dasar memiliki nilai atau null untuk setiap kolom di tabel. Baris-baris
dalam sebuah tabel tidak memiliki urutan yang ditentukan dan tidak diakses secara posisi. Sebuah baris tabel diakses dan diidentifikasi
oleh nilai-nilai di kolomnya.
Dalam SQL92, tabel dasar dapat memiliki baris duplikat (baris di mana setiap kolom memiliki nilai yang sama atau null).
Namun, model relasional tidak mengakui tabel dengan baris duplikat sebagai tabel dasar (relasi) yang valid.
Model relasional mengharuskan setiap tabel dasar memiliki identifier unik, yang dikenal sebagai Kunci Utama.
Kunci utama untuk sebuah tabel adalah sekumpulan kolom yang ditunjuk yang memiliki nilai unik untuk setiap baris tabel. Untuk sebuah
diskusi tentang Kunci Utama, lihat Integritas Entitas di bawah CREATE TABLE.
Tabel dasar didefinisikan menggunakan Pernyataan CREATE TABLE. Pernyataan ini menempatkan deskripsi tabel di
katalog dan menginisialisasi entitas internal untuk representasi aktual dari tabel dasar.
Contoh tabel dasar -s:
sno name city
S1 Pierre Paris
S2 John London
S3 Mario Roma
Pemasok catatan stabil. Ini memiliki 3 kolom yang ditentukan:

sno -- nomor pemasok, sebuah pengidentifikasi unik yang merupakan kunci utama
name -- the name of the supplier
kota -- kota tempat pemasok berada
46
Saat ini, ada 3 baris.
Jenis tabel lain dalam sistem adalah tabel yang dihasilkan. Pernyataan SQL-Data menggunakan tabel yang dihasilkan secara internal dalam
menghitung hasil. Sebuah kueri sebenarnya adalah tabel turunan. Misalnya, operator kueri - Union, menggabungkan dua
tabel derivatif untuk menghasilkan yang ketiga. Sebagian besar kekuatan SQL berasal dari fakta bahwa tingkat yang lebih tinggi
operasi dilakukan pada tabel dan menghasilkan tabel sebagai hasilnya.
Tabel turunan memiliki batasan yang lebih sedikit dibandingkan tabel dasar. Nama kolom tidak diwajibkan dan tidak harus unik.
Tabel turunan dapat memiliki baris duplikat. Tampilan adalah jenis tabel turunan yang dicatat dalam basis data.
Tampilan
Sebuah tampilan adalah tabel yang diturunkan yang terdaftar dalam katalog. Sebuah tampilan didefinisikan menggunakan kueri SQL. Tampilan tersebut adalah
secara dinamis diturunkan, yaitu, isinya dimaterialisasi untuk setiap penggunaan. Tampilan ditambahkan ke katalog dengan
pernyataan CREATE VIEW.
Setelah didefinisikan dalam katalog, sebuah tampilan dapat menggantikan tabel dalam pernyataan SQL-Data. Nama tampilan dapat berupa
digunakan sebagai pengganti nama tabel dasar dalam klausa FROM dari pernyataan SELECT. Tampilan juga bisa menjadi subjek
pernyataan modifikasi dengan beberapa batasan.
Pernyataan Modifikasi SQL dapat beroperasi pada tampilan jika itu adalah tampilan yang dapat diperbarui. Tampilan yang dapat diperbarui memiliki
batasan berikut pada kueri definisinya:

Klausul query FROM dapat merujuk pada satu tabel (atau tampilan)
Tabel tunggal dalam klausa FROM harus:
otabel dasar
opandangan yang juga merupakan tampilan yang dapat diperbarui, atau
okueri bersarang yang dapat diperbarui, yaitu, mengikuti aturan untuk kueri tampilan yang dapat diperbarui.
Kueri harus merupakan kueri dasar, bukan:
oQuery Pengelompokan,
oKueri Agregat, atau
oKueri Union.
Daftar seleksi tidak dapat berisi:
ospesifier DISTINCT,
osebuah Ekspresi, atau
oreferensi kolom duplikat

Subkueri dapat diterima dalam tampilan yang dapat diperbarui tetapi tidak dapat merujuk ke tabel dasar yang mendasari tampilan.
Klausul FROM.
Hak istimewa
SQL92 mendefinisikan agen SQL sebagai entitas yang bergantung pada implementasi yang menyebabkan eksekusi SQL
pernyataan. Sebelum menjalankan pernyataan SQL, agen SQL harus menetapkan pengenal otorisasi
untuk akses basis data. Sebuah pengenal otorisasi biasa disebut nama pengguna.
Seorang pengguna DBMS dapat mengakses objek basis data (tabel, kolom, tampilan) sesuai dengan hak istimewa yang diberikan.
identifikasi otorisasi spesifik tersebut. Hak akses dapat diberikan oleh sistem (otomatis) atau oleh pihak lain
pengguna.
Hak istimewa yang diberikan oleh sistem mencakup:

Semua hak istimewa pada tabel kepada pengguna yang membuat tabel. Ini termasuk hak istimewa untuk memberikan
hak istimewa di tabel kepada pengguna lain.
Pilih hak (readonly) pada katalog (tabel di skema -definisi_skema). Ini adalah
diberikan kepada semua pengguna.

Hak istimewa pengguna mencakup hak istimewa untuk mengakses dan memodifikasi tabel dan kolom-kolomnya. Hak istimewa dapat berupa
diberikan untuk pernyataan SQL-Data tertentu -- SELECT, INSERT, UPDATE, DELETE.
Buat Pernyataan TABEL
Pernyataan CREATE TABLE membuat tabel dasar baru. Ini menambahkan deskripsi tabel ke katalog.
tabel dasar adalah entitas logis dengan ketahanan. Deskripsi logis dari tabel dasar terdiri dari:
47
Skema -- skema database logis tempat tabel tersebut berada
Nama Tabel -- nama yang unik di antara tabel dan tampilan dalam Skema
Daftar Kolom -- daftar terurut dari deklarasi kolom (nama, tipe data)
Constraints -- a list of constraints on the contents of the table

Pernyataan CREATE TABLE memiliki format umum sebagai berikut:


BUAT TABEL nama-tabel ({deskripsi-kolom|batasan} [, {deskripsi-kolom|batasan}]...)
table-nameis the new name for the [Link]-descris a column [Link] atable
kendala.
Pernyataan kolom dapat mencakup batasan kolom opsional. Pernyataan ini memiliki yang berikut ini secara umum
format:
nama-kolom tipe-data [keterbatasan-kolom]
nama-kolom adalah nama kolom dan harus unik di antara kolom-kolom tabel. tipe-data
menyatakan tipe kolom. Tipe data dijelaskan di bawah. batasan-kolom adalah daftar opsional dari
batasan kolom tanpa pemisah.
Keterbatasan
Spesifikasi batasan menambahkan pembatasan tambahan pada isi tabel. Mereka secara otomatis
dikenakan oleh DBMS. Pembatasan kolom adalah:

NOT NULL -- menentukan bahwa kolom tidak dapat diatur menjadi null. Jika batasan ini tidak ditentukan,
kolom dapat bernilai nol, yaitu, dapat diatur menjadi nol. Biasanya, kolom kunci utama dinyatakan sebagai TIDAK
NULL.
PRIMARY KEY -- menentukan bahwa kolom ini adalah satu-satunya kolom di kunci utama. Hanya ada
hanya satu deklarasi kunci utama dalam CREATE TABLE. Untuk kunci utama dengan beberapa kolom,
gunakan PRIMARY KEYtableconstraint. Lihat Integritas Entitas di bawah untuk deskripsi mendetail tentang
kunci primer.
UNIK -- menentukan bahwa kolom ini memiliki nilai unik atau null untuk semua baris dalam tabel.
REFERENSI -- menentukan bahwa kolom ini adalah satu-satunya kolom dalam kunci asing. Untuk kunci asing
dengan beberapa kolom, gunakan batasan FOREIGN KEY. Lihat Integritas Referensial di bawah
untuk deskripsi rinci tentang kunci utama.
CHECK -- menentukan batasan yang ditentukan pengguna pada tabel. Lihat batasan tabel - CHECK
di bawah.

Kendala tabel adalah:

PRIMARY KEY -- menentukan sekumpulan kolom yang membentuk kunci utama. Hanya bisa ada
satu deklarasi kunci utama dalam pernyataan CREATE TABLE. Lihat Integritas Entitas di bawah untuk
deskripsi rinci tentang kunci primer.
UNIQUE -- menentukan bahwa sekumpulan kolom memiliki nilai unik (atau nol) untuk semua baris di tabel.
Spesifier UNIK diikuti oleh daftar nama kolom yang diparentesis, dipisahkan oleh koma.
KUNCI ASING -- menentukan sekumpulan kolom dalam kunci asing. Lihat Integritas Referensi di bawah untuk
deskripsi rinci tentang kunci asing.
CHECK -- menentukan batasan yang ditentukan pengguna, dikenal sebagai kondisi cek. Penentu CHECK adalah
diikuti oleh suatu predikat yang diapit dalam tanda kurung. Untuk SQL92 Tingkat Menengah, CHECK
predikat hanya dapat merujuk pada kolom dari baris tabel saat ini, tanpa subkueri. Banyak DBMS
mendukung subquery dalam predikat pemeriksaan.

Pernyataan cek harus dievaluasi menjadi benar sebelum modifikasi atau penambahan baris terjadi. Yang
pemeriksaan dilakukan secara efektif pada konten tabel setelah modifikasi. Untuk Pernyataan INSERT,
the predicate is evaluated as if the INSERT row were added to the table. For UPDATE Statements,
predikat dievaluasi seolah-olah baris tersebut diperbarui. Untuk Pernyataan DELETE, predikat adalah
dievaluasi seolah-olah barisnya dihapus (Catatan: Predikat pemeriksaan hanya berguna untuk HAPUS jika sebuah
subquery digunakan.)
48
Data Type
Subbagian ini menjelaskan spesifikasi tipe data. Kategori tipe data adalah:

Karakter (String) -- string karakter dengan panjang tetap atau variabel. Set karakter adalah implementasi
ditentukan tetapi sering default ke ASCII.
Numerik -- nilai yang mewakili kuantitas numerik. Nilai numerik dibagi menjadi dua kategori luas ini
categories:
oTepat (juga dikenal sebagai titik tetap) -- Nilai numerik tepat memiliki jumlah digit yang tetap untuk
sebelah kiri titik desimal dan jumlah digit tetap di sebelah kanan (skala). Total
jumlah digit di kedua sisi desimal adalah presisi. Subset khusus dari tepat
tipe numerik dengan skala 0 disebut sebagai integer.
oPerkiraan (juga dikenal sebagai titik mengambang) -- Nilai numerik perkiraan yang memiliki tetap
presisi (jumlah angka) tetapi titik desimal mengambang.

Semua tipe numerik adalah bertanda.

Datetime -- Nilai Datetime mencakup nilai kalender dan jam (Tanggal, Waktu, Timestamp) dan
interval. Tipe datetime adalah:
o Tanggal -- tanggal kalender dengan tahun, bulan, dan hari
oWaktu -- waktu jam dengan jam, menit, detik dan pecahan detik, ditambah zona waktu
komponen (penyesuaian dalam jam, menit)
oTimestamp -- kombinasi tanggal kalender dan waktu jam dengan tahun, bulan, hari, jam, menit,
detik dan pecahan detik, ditambah komponen zona waktu (penyesuaian dalam jam, menit)
oInterval -- interval mewakili interval waktu dan tanggal. Mereka bertanda. Nilai interval dapat
mengandung subset dari bidang interval, misalnya - jam ke menit, tahun, hari ke detik.
Tipe interval dibagi menjadi:
. interval tahun-bulan -- dapat berisi tahun, bulan atau kombinasi tahun/bulan
nilai.
. interval waktu siang -- hari, jam, menit, detik, pecahan detik.

Deklarasi jenis data memiliki format umum sebagai berikut:


Karakter (String)
CHAR [(length)]
KARAKTER (panjang)
VARCHAR (length)
KARAKTER VARIABEL (panjang)
panjang menentukan jumlah karakter untuk string ukuran tetap (CHAR, KARAKTER);
ruang disediakan untuk string yang lebih pendek. Jika panjang ini hilang untuk string berukuran tetap, nilai default
panjang adalah 1. Untuk string ukuran variabel (VARCHAR, CHARACTER VARYING), panjang adalah
ukuran maksimum string. String yang melebihi panjang akan dipotong di sebelah kanan.
Numerik
SMALLINT
INT
INTEGER
Tipe integer memiliki presisi biner default -- 15 untuk SMALLINT dan 31 untuk INT,
BILANGAN BULAT.
NUMERIK ( presisi [, skala )
DESIMAL ( presisi [, skala] )
Tipe titik tetap memiliki presisi desimal (jumlah total digit) dan skala (yang tidak dapat
lewati presisi). Skala default adalah 0. Skala NUMERIC harus diwakili dengan tepat.
Nilai DECIMAL dapat disimpan secara internal dengan skala yang lebih besar (ditentukan oleh implementasi).
49
MENGAPUNG [(presisi)]
REAL
GANDA
Tipe titik mengambang memiliki presisi biner (digit biner signifikan maksimum).
Nilai presisi bergantung pada implementasi untuk REAL dan DOUBLE, meskipun
standar menyatakan bahwa presisi default untuk DOUBLE harus lebih besar daripada untuk REAL. FLOAT
juga menggunakan default yang ditentukan oleh implementasi untuk presisi (umumnya ini sama dengan
REAL), tetapi presisi biner untuk FLOAT bisa eksplisit.
Tanggal dan Waktu
DATE
WAKTU (skala) [DENGAN WAKTU ZONE
TIMESTAMP [(skala)] [DENGAN ZONA WAKTU]
WAKTU dan CAP WAKTU memungkinkan fraksi detik opsional (skala). Skala default untuk
WAKTU adalah 0, untuk STAMPA WAKTU 6. Penunjuk opsional DENGAN ZONA WAKTU menunjukkan bahwa
penyesuaian zona waktu disimpan dengan nilai; jika diabaikan, zona waktu sistem saat ini adalah
diasumsikan.
INTERVAL interval-qualifier

Kualifikasi Interval
Kualifikasi interval menentukan jenis spesifik dari nilai interval. Kualifikasi untuk tipe interval menyatakan
sub-bidang yang terdiri dari interval, ketepatan sub-bidang tertinggi (paling kiri) dan skala dari
Sub-bidang KEDUA (jika ada).
Interval dibagi menjadi sub-tipe -- interval tahun-bulan dan interval hari-waktu. Interval tahun-bulan dapat
only contain the sub-fields - year and month. Day-time intervals can contain day, hour, minute, second. The
kualifikasi interval memiliki format berikut:
TAHUN [(presisi)] [KE BULAN]

MONTH [(precision)]

{HARI|JAM|MENIT} [(presisi)] [ KE DETIK [(skala)] ]

HARI [(presisi)] [ KE {JAM|MENIT} ]

JAM [(presisi)] [ KE MENIT ]

KEDUA [ (presisi [, skala]) ]


Presisi default adalah 2. Skala default adalah 6.
Integritas Entitas
Seperti yang disebutkan sebelumnya, model relasional mengharuskan setiap tabel dasar memiliki Kunci Utama. SQL92, di
sebaliknya, memungkinkan tabel dibuat tanpa kunci utama. Saran di sini adalah untuk membuat semua tabel dengan
kunci primer.
Kunci utama adalah suatu batasan pada konten dari sebuah tabel. Dalam istilah relasional, kunci utama mempertahankan
Integritas Entitas untuk tabel. Ini membatasi tabel sebagai berikut,

Untuk baris tertentu, set nilai untuk kolom kunci utama harus unik dari semua baris lainnya.
di dalam tabel,
Tidak ada kolom kunci utama yang dapat mengandung null, dan
Sebuah tabel hanya dapat memiliki satu kunci primer (serangkaian kolom kunci primer).

Catatan: SQL92 tidak mengharuskan pembatasan kedua pada null dalam kunci primer. Namun, itu diperlukan
untuk sistem relasional.
50
Integritas Entitas (Kunci Utama) ditegakkan oleh DBMS dan memastikan bahwa setiap baris memiliki yang tepat
pengidentifikasi unik. Isi dari kolom mana pun di tabel dengan Integritas Entitas dapat diakses secara unik
dengan 3 informasi

table identifier
nilai kunci primer
nama kolom

Kemampuan ini sangat penting untuk sistem relasional. Memiliki pengenal yang jelas dan konsisten untuk baris tabel (dan mereka
kolom) membedakan sistem relasional dari yang lainnya. Ini memungkinkan pembentukan hubungan
antara tabel, juga penting untuk sistem relasional. Ini dibahas di bawah ini di bawah Integritas Referensial.
Keterbatasan kunci utama dalam PERNYATAAN CREATE memiliki dua bentuk. Ketika kunci utama terdiri
dari satu kolom, dapat dinyatakan sebagai batasan kolom, cukup - PRIMARY KEY, dilampirkan pada
deskriptor kolom. Misalnya:
sno VARCHAR(5) TIDAK NULL KUNCI UTAMA
Sebagai batasan tabel, ia memiliki format berikut:
KUNCI UTAMA ( kolom-1 [, kolom-2] ...)
kolom-1dankolom-2adalah nama kolom dari kunci utama. Misalnya,
PRIMARY KEY (sno, pno)
Urutan kolom dalam kunci utama tidak signifikan, kecuali sebagai urutan default untuk FOREIGN KEY
kendala tabel.
Integritas Referensial
Kunci asing menyediakan hubungan antara tabel dalam database. Dalam relasional, kunci asing dalam sebuah tabel adalah
sekumpulan kolom yang mereferensikan kunci utama dari tabel lain. Untuk setiap baris dalam tabel yang mereferensi,
Kunci asing harus mencocokkan kunci utama yang ada di tabel yang direferensikan. Penegakan batasan ini
dikenal sebagai Integritas Referensial.
Integritas Referensial memerlukan bahwa:

Kolom dari kunci asing harus cocok dalam jumlah dan tipe dengan kolom dari kunci primer di
tabelreferensi.
Nilai-nilai kolom kunci asing di setiap baris tabel referensi harus cocok dengan nilai-nilai
dari kolom kunci primer yang sesuai untuk sebuah baris di tabel yang dirujuk.

Satu pengecualian untuk pembatasan kedua adalah ketika kolom kunci asing untuk suatu baris mengandung nilai nol.
kunci utama tidak boleh mengandung null, sebuah kunci asing dengan null tidak dapat mencocokkan baris mana pun di tabel yang direferensikan.
Namun, baris dengan kunci asing yang berisi semua null (semua kolom kunci asing berisi null) diperbolehkan di dalam
tabelreferensi. Itu adalah referensi nol.
Seperti batasan lainnya, batasan integritas referensial membatasi konten dari tabel yang mereferensikan, tetapi
itu juga mungkin pada dasarnya membatasi isi tabel yang direferensikan. Ketika sebuah baris dalam tabel direferensikan (melalui
kuncinya) oleh kunci asing dalam satu baris di tabel lain, operasi yang mempengaruhi kolom kunci utamanya
memiliki efek samping dan dapat membatasi operasi. Mengubah kunci utama atau menghapus baris yang memiliki
merujuk pada kunci asing akan melanggar batasan integritas referensial pada tabel yang merujuk jika diizinkan
untuk melanjutkan. Ini ditangani dengan dua cara,

Tabel yang dirujuk dibatasi untuk membuat perubahan (dan melanggar integritas referensial di
merujuk pada tabel), atau
Baris di tabel referensi dimodifikasi sehingga batasan integritas referensial dipertahankan.

Tindakan ini dikendalikan oleh deklarasi efek integritas referensial, yang disebut pemicu referensial oleh
SQL92. Tindakan efek integritas referensial yang didefinisikan untuk SQL adalah:

TIDAK ADA TINDAKAN -- perubahan pada tabel yang dirujuk (kunci utama) tidak dilakukan. Ini adalah
default.
51
CASCADE -- perubahan pada tabel yang direferensikan diteruskan ke tabel yang mereferensikan (kunci asing)
meja.
SET NULL -- kolom kunci asing di tabel yang mereferensikan diatur menjadi null.

Pembaruan dan penghapusan memiliki deklarasi tindakan yang terpisah. Untuk CASCADE, pembaruan dan penghapusan juga beroperasi
berbeda:

Untuk pembaruan (nilai kolom kunci utama telah dimodifikasi), kunci asing yang sesuai
kolom untuk merujuk baris diatur ke nilai baru.
Untuk menghapus (baris kunci utama dihapus), baris yang merujuk dihapus.

Kendala integritas referensial dalam PERNYATAAN BUAT memiliki dua bentuk. Ketika kunci asing
terdiri dari satu kolom, dapat dideklarasikan sebagai batasan kolom, seperti:
column-descr REFERENCES references-specification
Sebagai batasan tabel, ia memiliki format berikut:
KUNCI ASING (daftar-kolom) MENGACU PADA spesifikasi-referensi
column-list adalah kolom tabel yang menjadi referensi yang terdiri dari kunci asing. Nama kolom dipisahkan oleh koma
dalam daftar. Urutannya harus cocok dengan daftar kolom eksplisit atau implisit dalam spesifikasi referensi.
spesifikasi-referensi memiliki format berikut:
tabel-2 [ ( kolom-referensi ) ]
[ PADA PERBARUI { KASKADE | SET NULL | TIDAK ADA TINDAKAN }]
[ PADA HAPUS { CASCADE | SET NULL | TIDAK ADA AKSI }]
Urutan klausa ON UPDATE dan ON DELETE dapat dibalik. Klausa ini menyatakan efeknya
tindakan ketika kunci primer yang dirujuk diperbarui atau dihapus. Default untuk ON UPDATE dan ON
DELETE adalah TIDAK ADA TINDAKAN.
tabel-2 adalah nama tabel yang direferensikan (tabel kunci utama). Kolom-kolom yang direferensikan bersifat opsional.
kunci utama yang direferensikan. Koma memisahkan nama kolom dalam daftar. Defaultnya adalah daftar kunci utama
dalam urutan deklarasi.
Bertentangan dengan model relasional, SQL92 mengizinkan kunci asing untuk merujuk ke sebarang set kolom yang dinyatakan dengan
constraintUNIQUE di tabel yang dirujuk (meskipun tabel tersebut memiliki kunci utama). Dalam hal ini,
Daftar kolom yang direferensikan diperlukan.
Contoh batasan tabel untuk integritas referensial (untuk thesptable):
KUNCI ASING (sno)
REFERENCES s(sno)
JIKA DIHAPUS TIDAK ADA TINDAKAN
PADA PEMBARUAN CASCADE
BUAT TABEL Contoh
Membuat tabel contoh:
BUAT TABEL s
(sno VARCHAR(5) TIDAK NULL KUNCI UTAMA,
name VARCHAR(16),
city VARCHAR(16)
)

Buat TABEL p
(pno VARCHAR(5) TIDAK NULL KUNCI UTAMA,
descr VARCHAR(16)
color VARCHAR(8)
)

BUAT TABEL sp
(sno VARCHAR(5) TIDAK NULL MEREFERENSI s,
pno VARCHAR(5) TIDAK NULL MENGACU KE p,
52
qty INT,
PRIMARY KEY (sno, pno)
)
Create forspwith a constraint that the qty column can't be negative:
CREATE TABLE sp
(sno VARCHAR(5) TIDAK NULL REFERENSI s,
pno VARCHAR(5) TIDAK NULL REFERENSI p,
qty INT CHECK (qty IS NULL OR qty >= 0),
KUNCI UTAMA (sno, pno)
)
Buat Pernyataan Tampilan
Pernyataan CREATE VIEW membuat tampilan basis data baru. Tampilan pada dasarnya adalah kueri SQL yang disimpan di
katalog. FORMAT umum CREATE VIEW adalah sebagai berikut:

BUAT VIEW nama-view [ ( daftar-kolom ) ] SEBAGAI kueri-1


[ DENGAN [CASCADED|LOKAL] PILIHAN PERIKSA ]
view-name adalah nama untuk tampilan baru. column-list adalah daftar nama opsional untuk kolom tampilan.
kueri-1 adalah pernyataan SELECT tanpa klausa ORDER BY. Opsi DENGAN
Klausul CHECK OPTION adalah batasan pada tampilan yang dapat diperbarui.
daftar-kolom harus memiliki jumlah kolom yang sama dengan daftar pilih di query-1. Jika daftar-kolom dihapus, semua
item-item dalam daftar pilih query-1 harus dinamai. Dalam hal apapun, nama kolom duplikat tidak diizinkan.
pemandangan.
Klausul WITH CHECK OPTION yang bersifat opsional hanya berlaku untuk tampilan yang dapat diperbarui. Ini mempengaruhi SQL INSERT dan
Pernyataan UPDATE. Jika Opsi CEK DENGAN ditentukan, predikat WHERE untuk query-1 harus
evaluasi menjadi benar untuk baris yang ditambahkan atau baris yang diubah.
Spesifikasi CASCADED dan LOCAL diterapkan ketika tabel yang mendasari query-1 adalah tampilan lain.
Permintaan yang DIAJUKAN agar DENGAN OPSI PERIKSA berlaku untuk semua tampilan yang mendasari (hingga tingkat mana pun) LOKAL
memohon agar WITH CHECK OPTION yang sedang berlaku hanya diterapkan pada tampilan ini. LOCAL adalah bawaan.
BUAT VIEW Contoh
Bagian dengan pemasok:
BUAT VIEW bagian_dipasok SEBAGAI
PILIH *
DARI p
DIMANA pno DALAM (PILIH pno DARI sp)
DENGAN OPSI PERIKSA
Contoh akses:
PILIH * DARI bagian_yang_diberikan
pno descr color
P1 Widget Merah
Widget P2 Biru
Tampilan bergabung:
BUAT VIEW lokasi_bagian (bagian, jumlah, lokasi) SEBAGAI
PILIH pno, qty, kota
DARI sp, s
DIMANA [Link] = [Link]
Contoh akses:
PILIH * DARI lokasi_part
part quantity location
P1 NULL Paris
P1 200 London
53
P1 1000 Roma
P2 200 Roma
PILIH bagian, jumlah
DARI part_locations
DIMANA lokasi = 'Roma'
part quantity
P1 1000
P2 200
Pernyataan DROP TABLE
Pernyataan DROP TABLE menghapus tabel yang sebelumnya dibuat dan deskripsinya dari katalog. Ini memiliki
format umum berikut:
HAPUS TABEL nama-tabel {CASCADE|RESTRICT}
nama-tabel adalah nama tabel dasar yang ada di skema saat ini. CASCADE dan RESTRICT
spesifikator mendefinisikan disposisi objek lain yang bergantung pada tabel. Tabel dasar dapat memiliki dua jenis
dependencies:

Sebuah tampilan yang spesifikasi kueri merujuk pada thedroptable.


Tabel dasar lain yang merujuk pada thedroptable dalam sebuah batasan - batasan CHECK atau
Kendala REFERENSI.

RESTRICT menentukan bahwa tabel tidak boleh dihapus jika ada ketergantungan yang ada. Jika ditemukan ketergantungan, sebuah
kesalahan dikembalikan dan tabel tidak dihapus.
CASCADE menentukan bahwa semua ketergantungan dihapus sebelum penghapusan dilakukan:

Views that reference the base table are dropped, and the sequence is repeated for their
ketergantungan.
Keterbatasan di tabel lain yang merujuk pada tabel ini dihapus; batasan tersebut dihapus tetapi
meja dipertahankan.

Pernyataan DROP VIEW


Pernyataan DROP VIEW menghapus tampilan yang telah dibuat sebelumnya dan deskripsinya dari katalog. Itu memiliki
format umum berikut:
HAPUS VIEW nama-view {CASCADE|RESTRICT}
view-name adalah nama dari tampilan yang ada dalam skema saat ini. Spesifikator CASCADE dan RESTRICT
tetapkan disposisi objek lain yang bergantung pada tampilan. Sebuah tampilan dapat memiliki dua jenis ketergantungan:

A view whose query specification references thedropview.


Tabel dasar yang mereferensikan thedropview dalam sebuah batasan - batasan CHECK.

RESTRICT menentukan bahwa tampilan tidak boleh dihapus jika ada ketergantungan yang ada. Jika ketergantungan ditemukan, sebuah
kesalahan dikembalikan dan tampilan tidak dihapus.
CASCADE menentukan bahwa semua ketergantungan dihapus sebelum penghapusan dilakukan:

Tampilan yang merujuk pada dropview dihapus, dan urutan diulang untuk mereka
ketergantungan.
Keterbatasan dalam tabel dasar yang merujuk pada tampilan ini dihapus; batasan tersebut dihapus tetapi
tabel dipertahankan.
54
Pernyataan GRANT
Pernyataan GRANT memberikan hak akses untuk objek basis data kepada pengguna lain. Ini memiliki yang berikut
format umum:
BERIKAN daftar-hak pada [TABEL] daftar-objek KEPADA daftar-pengguna
daftar-kelayakan adalah SEMUA KELAYAKAN atau daftar properti yang dipisahkan dengan koma: PILIH, MASUKKAN,
UPDATE, [Link]-list adalah daftar nama tabel dan tampilan yang dipisahkan oleh koma. user-list adalah baik
PUBLIK atau daftar nama pengguna yang dipisahkan dengan koma.
Pernyataan GRANT memberikan setiap hak dalam daftar-hak untuk setiap objek (tabel) dalam daftar-objek kepada setiap pengguna
daftar-inuser. Secara umum, hak akses berlaku untuk semua kolom dalam tabel atau tampilan, tetapi mungkin untuk
spesifikasikan daftar kolom dengan penentu hak istimewa UPDATE:
PERBARUI [ ( kolom-1 [, kolom-2] ... ) ]
Jika daftar kolom opsional ditentukan, hak istimewa UPDATE diberikan hanya untuk kolom-kolom tersebut.
Daftar pengguna dapat menetapkan PUBLIK. Ini adalah pemberian umum, yang berlaku untuk semua pengguna (dan pengguna yang akan datang) di dalam
katalog.
Hak istimewa yang diberikan dicabut dengan Pernyataan REVOKE.
Spesifikasi opsional DENGAN Opsi GRANT dapat mengikuti daftar-pengguna dalam pernyataan GRANT. DENGAN
OPSI GRANT menentukan bahwa, selain dari hak akses, hak untuk memberikan hak-hak tersebut juga termasuk.
pengguna lain diberikan.
Contoh Pernyataan GRANT
BERIKAN SELEKSI PADA s,sp KEPADA PUBLIK

BERIKAN SELECT, INSERT, UPDATE(color) PADA p KEPADA art, nan

BERIKAN PILIHAN ATAS bagian_yang_dipasok KEPADA sam DENGAN OPSI GRANT


Pernyataan REVOKE
Pernyataan REVOKE mencabut hak akses untuk objek basis data yang sebelumnya diberikan kepada pengguna lain. Itu
memiliki format umum berikut:
CABUT daftar-privilege PADA [TABEL] daftar-objek DARI daftar-pengguna
Pernyataan REVOKE mencabut setiap hak istimewa dalam daftar-hak untuk setiap objek (tabel) dalam daftar-objek dari
setiap pengguna dalam daftar pengguna. Semua hak istimewa harus telah diberikan sebelumnya.
Daftar pengguna dapat menentukan PUBLIK. Ini harus berlaku untuk GRANT SEBELUMNYA KE PUBLIK.
Contoh Pernyataan REVOKE
CABUT SELEKSI PADA s,sp DARI PUBLIK

CABUT SELECT,INSERT,UPDATE(color) PADA p DARI art,nan

CABUT PILIHAN PADA supplied_parts DARI sam

PL/SQL

PL/SQL adalah singkatan dari Bahasa Prosedural/SQL. PL/SQL memperluas SQL dengan menambahkan Struktur pengendali yang ditemukan di
Bahasa prosedural lainnya. PL/SQL menggabungkan fleksibilitas SQL dengan fitur kuat dari 3rdgenerasi
Bahasa. Konstruksi prosedural dan akses basis data ada dalam PL/SQL. PL/SQL dapat digunakan di kedua
di basis data di Oracle Server dan di alat pengembangan aplikasi sisi Klien.

Advantages of PL/SQL

Dukungan untuk SQL, dukungan untuk pemrograman berorientasi objek, kinerja yang lebih baik, portabilitas, lebih tinggi
produktivitas, Integrasi dengan Oracle

a] Mendukung deklarasi dan manipulasi tipe objek dan koleksi.


b] Memungkinkan pemanggilan fungsi dan prosedur eksternal.
c] Berisi pustaka baru dari paket bawaan.
55
d] dengan PL/SQL, beberapa pernyataan SQL dapat diproses dalam satu pernyataan garis perintah.

Tipe Data PL/SQL

Tipe Skalar
BINARY_INTEGER, DEC, DECIMAL, DOUBLE, PRECISION, FLOAT, INT, INTEGER, NATURAL
NATURALN,NUMBER, NUMERIC, PLS_INTEGER,POSITIVE,POSITIVEN,REAL,SIGNTYPE,
SMALLINT,CHAR,IDENTITAS,PANJANG,PANJANG
RAW,NCHAR,NVARCHAR2,RAW,ROWID,STRING,VARCHAR,VARCHAR2,

Tipe Komposit
TABEL, VARRAY, REKAMAN

Jenis LOB
BFILE, BLOB, CLOB, NCLOB

Jenis Referensi
REF KURSOR

BOOLEAN, DATE

DBMS_OUTPUT.PUT_LINE:

Ini adalah paket yang telah ditentukan sebelumnya yang mencetak pesan di dalam tanda kurung

BLOK PL/SQL ANONIM.

Teks pemicu Oracle Forms adalah blok PL/SQL anonim. Ini terdiri dari tiga bagian:
Sebuah deklarasi variabel, konstanta, kursor, dan pengecualian yang bersifat opsional.
Sebuah bagian dari pernyataan yang dapat dieksekusi.

Seksi pengolah pengecualian, yang bersifat opsional.

ATTRIBUTES

Izinkan kami merujuk pada tipe data dan objek dari basis data. Variabel dan Konstanta PL/SQL dapat memiliki
atribut. Keuntungan utama menggunakan Atribut adalah bahkan jika Anda mengubah definisi data, Anda tidak perlu
untuk mengubah dalam aplikasi.

%TIPE

Ini digunakan saat mendeklarasikan variabel yang mengacu pada kolom database.
Menggunakan %TYPE untuk mendeklarasikan variabel memiliki dua keuntungan. Pertama, Anda tidak perlu mengetahui tipe data yang tepat dari
variabel. Kedua, jika definisi basis data variabel berubah, tipe data variabel berubah sesuai
pada waktu berjalan.

%ROWTYPE

Atribut %ROWTYPE menyediakan jenis catatan yang mewakili satu baris dalam sebuah tabel (atau tampilan). Catatan dapat
menyimpan seluruh baris data yang dipilih dari tabel atau diambil dari kursor atau variabel kursor yang terikat kuat.
56
PEMAAFAN

Sebuah Exception terjadi ketika kesalahan terjadi. Jika terjadi kesalahan, maka eksekusi normal dihentikan dan
kontrol segera dialihkan ke bagian penanganan pengecualian dari Blok PL/SQL.

Pengecualian dirancang untuk penanganan saat runtime, bukan penanganan saat compile time. Pengecualian meningkatkan
keterbacaan dengan membiarkan Anda mengisolasi rutinitas penanganan kesalahan.

Ketika terjadi kesalahan, sebuah pengecualian diangkat. Artinya, eksekusi normal berhenti dan kontrol dialihkan ke
bagian penanganan pengecualian dari blok PL/SQL atau subprogram Anda. Pengecualian internal diangkat secara implisit
(secara otomatis) oleh sistem runtime. Pengecualian yang ditentukan pengguna harus diangkat secara eksplisit dengan RAISE
pernyataan, yang juga dapat membangkitkan pengecualian yang telah ditentukan sebelumnya.

Untuk menangani pengecualian yang diangkat, Anda menulis rutin terpisah yang disebut penangan pengecualian. Setelah pengecualian
penangan berjalan, blok saat ini berhenti mengeksekusi dan blok yang membungkus melanjutkan dengan pernyataan berikutnya. Jika
tidak ada blok yang membungkus, kontrol kembali ke lingkungan host.

Jenis Eksepsi

1. Pengecualian yang Sudah Ditentukan

Pengecualian internal diangkat secara implisit setiap kali program PL/SQL Anda melanggar aturan Oracle atau
melampaui batas yang bergantung pada sistem. Setiap kesalahan Oracle memiliki nomor, tetapi pengecualian harus ditangani oleh
nama. Jadi, PL/SQL mendefinisikan beberapa kesalahan umum Oracle sebagai pengecualian. Misalnya, PL/SQL mengangkat
eksepsi yang telah ditentukan NO_DATA_FOUND jika pernyataan SELECT INTO tidak mengembalikan baris.

2. Pengecualian yang Ditentukan Pengguna

Pengecualian yang ditentukan pengguna harus didefinisikan dan diangkat secara eksplisit oleh pengguna

PENGATURAN_PENGECUALIAN

Sebuah pengecualian yang dinamai dapat dikaitkan dengan kesalahan oracle tertentu. Ini dapat digunakan untuk menangkap kesalahan tersebut.
secara spesifik.

PRAGMA EXCEPTION_INIT(nama_exception, nomor_kesalahan_Oracle);

Pragma EXCEPTION_INIT mengaitkan nama pengecualian dengan nomor kesalahan Oracle. Itu memungkinkan
Anda untuk merujuk pada setiap pengecualian internal dengan nama dan menulis penangan khusus

RAISE_APPLICATION_ERROR

Prosedur raise_application_error memungkinkan Anda untuk mengeluarkan pesan kesalahan yang ditentukan oleh pengguna dari subprogram yang disimpan.
That way, you can report errors to your application and avoid returning unhandled exceptions.

Untuk memanggil raise_application_error, Anda menggunakan sintaksis

raise_application_error(error_number, message[, {TRUE | FALSE}]);


di mana error_number adalah bilangan bulat negatif dalam rentang -20000 .. -20999 dan message adalah string karakter hingga
hingga 2048 byte panjang.
57
58

Menggunakan SQLCODE dan SQLERRM

Untuk pengecualian internal, SQLCODE mengembalikan nomor kesalahan Oracle. Nomor yang SQLCODE
pengembalian negatif kecuali jika kesalahan Oracle tidak ditemukan data, dalam hal ini SQLCODE mengembalikan +100.
SQLERRM mengembalikan pesan kesalahan yang sesuai. Pesan dimulai dengan kode kesalahan Oracle.

Pengecualian yang tidak tertangani

PL/SQL mengembalikan kesalahan pengecualian yang tidak tertangani ke lingkungan host, yang menentukan hasilnya.

Ketika Orang Lain

Ini digunakan ketika semua pengecualian harus ditangkap.

KURSOR

Oracle mengalokasikan area memori yang dikenal sebagai area konteks untuk pemrosesan SQL
Pernyataan. Penunjuk yang mengarah ke area konteks adalah kursor.

Kelebihan
1] Memungkinkan untuk memposisikan pada baris tertentu dari hasil set.
Mengembalikan satu baris atau blok baris dari posisi saat ini di set hasil.
Mendukung modifikasi data pada baris di posisi saat ini dalam himpunan hasil.

TYPES

KURSOR STATIS

Pernyataan SQL ditentukan pada waktu desain.

A] KURSOR EKPLISIT

Pernyataan SELECT beberapa baris disebut sebagai kursor eksplisit.

Untuk menjalankan kueri multi-baris, Oracle membuka area kerja tanpa nama yang menyimpan
pemrosesan
informasi. Untuk mengakses informasi, Anda dapat menggunakan kursor eksplisit, yang menamai
pekerjaan
area.

Penggunaan - Jika pernyataan SELECT mengembalikan lebih dari satu baris maka kursor eksplisit
seharusnya
digunakan.
Langkah-langkah

Deklarasikan kursor
Buka kursor
Ambil data dari kursor
59
Tutup kursor

Atribut Kursor Eksplisit


%FOUND (Returns true if the cursor has a value)
%TIDAKDITEMUKAN (Mengembalikan true jika kursor tidak mengandung nilai apa pun)
%ROWCOUNT (Mengembalikan jumlah baris yang dipilih oleh kursor)
%ISOPEN (Mengembalikan apakah kursor terbuka atau tidak)

CURSOR UNTUK LOOP

FOR LOOP KURSOR memungkinkan Anda untuk secara implisit MEMBUKA kursor, MENGAMBIL setiap baris yang dikembalikan oleh kueri
terkait dengan kursor dan TUTUP kursor ketika semua baris telah diproses.
SINTAKSIS
UNTUK <NAMA REKAMAN> DI <NAMA KURSOR> LOOP
STATEMENTS
AKHIR LOOP;
Untuk merujuk elemen dari catatan gunakan <nama catatan. Nama kolom>
Pengaturan Kursor Parameter

Sebuah kursor dapat mengambil parameter, yang dapat muncul dalam kueri terkait di mana saja konstanta dapat muncul.
Parameter formal dari sebuah kursor harus parameter IN. Oleh karena itu, mereka tidak dapat mengembalikan nilai ke parameter aktual.
parameter. Juga, Anda tidak dapat memberlakukan batasan NOT NULL pada parameter kursor.

Nilai parameter kursor digunakan oleh kueri yang terkait ketika kursor dibuka.

B. KURSOR IMPLISIT

Kursor IMPILISIT terkait dengan pernyataan DML SQL yang tidak memiliki secara eksplisit
kursor yang terkait dengannya.

Ini termasuk:

Semua pernyataan INSERT


Semua pernyataan UPDATE
Semua pernyataan DELETE
Semua pernyataan SELECT .. INTO

ATRIBUT KURSUS IMPLISIT


" SQL%FOUND (Mengembalikan true jika operasi DML valid)
" SQL%NOTFOUND (Mengembalikan true jika operasi DML tidak valid)
" SQL%ROWCOUNT (Mengembalikan jumlah baris yang dipengaruhi oleh operasi DML)

KURSOR DINAMIS

Kursor Dinamis dapat digunakan bersama dengan paket DBMS_SQL. Pernyataan SQL bersifat dinamis, jika itu adalah
dibangun saat runtime dan kemudian dijalankan.
60
KURSORM REF

Menyatakan variabel kursor menciptakan sebuah penunjuk, bukan sebuah item. Dalam PL/SQL, sebuah penunjuk memiliki tipe data REF X, di mana
REF adalah singkatan dari REFERENSI dan X mewakili kelas objek. Oleh karena itu, variabel kursor memiliki tipe data
REF KURSOR.

Untuk menjalankan kueri multi-baris, Oracle membuka area kerja tanpa nama yang menyimpan informasi pemrosesan. Untuk
akses informasi, Anda dapat menggunakan kursor eksplisit, yang menamai area kerja. Atau, Anda dapat menggunakan kursor
variabel, yang menunjuk ke area kerja.
Terutama, Anda menggunakan variabel kursor untuk mengirimkan hasil set kueri antara subprogram tersimpan PL/SQL dan berbagai
klien. Baik PL/SQL maupun salah satu kliennya tidak memiliki set hasil; mereka hanya berbagi pointer ke pekerjaan kueri
area di mana set hasil disimpan. Misalnya, klien OCI, aplikasi Oracle Forms, dan Oracle
Server dapat merujuk ke area kerja yang sama.

a] Kursor Kuat - Jenis kembalian yang ditentukan.


b]Minggu Kursor - Tipe pengembalian yang tidak ditentukan.

Dref
Ini adalah 'operator penghormatan. Seperti NILAI, ini mengembalikan nilai sebuah objek, tidak seperti nilai.
Input Dref adalah REF ke kolom dalam tabel dan Anda ingin mengambil target alih-alih penunjuk, Anda
DREF.

FUNGSI

Fungsi adalah subprogram yang menghitung dan mengembalikan satu nilai.


Fungsi adalah subprogram yang menghitung nilai. Fungsi dan prosedur terstruktur sama, kecuali bahwa
fungsi memiliki klausa RETURN.

NAMA FUNGSI [(PARAMETER[, PARAMETER, ...])] KEMBALIKAN TIPE DATA ADALAH


[PERNYATAAN LOKAL]
MULAI
PERNyATAAN EKSEKUTABLE
[PEMBERITAHUAN
PENANGGUNG JAWAB EKSEPSI

Sebuah fungsi memiliki dua bagian: spesifikasi dan tubuh. Spesifikasi fungsi dimulai dengan kata kunci
FUNCTION dan diakhiri dengan klausa RETURN, yang menentukan tipe data dari nilai hasil. Parameter
deklarasi bersifat opsional. Fungsi yang tidak mengambil parameter ditulis tanpa tanda kurung. Fungsi tersebut
badan dimulai dengan kata kunci IS dan diakhiri dengan kata kunci END diikuti dengan nama fungsi yang bersifat opsional.
61

Menggunakan Pernyataan RETURN

Pernyataan RETURN segera menyelesaikan eksekusi dari subprogram dan mengembalikan kendali ke
pemanggil. Eksekusi kemudian dilanjutkan dengan pernyataan setelah pemanggilan subprogram. (Jangan bingungkan dengan
Pernyataan RETURN dengan klausa RETURN dalam spesifikasi fungsi, yang menentukan tipe data dari nilai kembali
nilai.)

Sebuah subprogram dapat berisi beberapa pernyataan RETURN, yang tidak perlu menjadi pernyataan leksikal terakhir.
Menjalankan salah satu dari mereka menyelesaikan subprogram segera. Namun, untuk memiliki beberapa titik keluar dalam sebuah
subprogram adalah praktik pemrograman yang buruk.

Dalam prosedur, pernyataan RETURN tidak dapat berisi ekspresi. Pernyataan tersebut hanya mengembalikan kendali ke
penelepon sebelum akhir normal prosedur tercapai.

Namun, dalam fungsi, pernyataan RETURN harus berisi sebuah ekspresi, yang dievaluasi ketika
Pernyataan RETURN dieksekusi. Nilai yang dihasilkan ditetapkan ke pengidentifikasi fungsi, yang bertindak seperti sebuah
variabel dari tipe yang ditentukan dalam klausa RETURN. Perhatikan bagaimana fungsi balance mengembalikan
saldo dari akun bank yang ditentukan:

MEMBANDINGKAN PROSEDUR DAN FUNKSI

Prosedur Fungsi

Eksekusi sebagai pernyataan PL/SQL Panggil sebagai bagian dari ekspresi

Tidak ada tipe data KEMBALI Harus memuat tipe data KEMBALI

Dapat mengembalikan tidak ada, satu, atau banyak nilai Harus mengembalikan satu nilai

Tidak dapat digunakan dalam Pernyataan SQL Dapat Digunakan dalam Pernyataan SQL

Manfaat Prosedur yang Disimpan dan Fungsi

Selain memodulasi pengembangan aplikasi, prosedur tersimpan dan fungsi memiliki


manfaat berikut:

•Kinerja yang lebih baik


Hindari pemrosesan ulang untuk beberapa pengguna dengan memanfaatkan area SQL yang dibagikan
Hindari pemrosesan PL/SQL saat runtime dengan memproses saat waktu kompilasi
Mengurangi jumlah panggilan ke database dan mengurangi lalu lintas jaringan dengan menggabungkan
perintah
•Peningkatan perawatan.
Modifikasi rutinitas secara online tanpa mengganggu pengguna lain
Modifikasi satu rutinitas untuk memengaruhi beberapa aplikasi
Modifikasi satu rutinitas untuk menghilangkan pengujian duplikat
Peningkatan keamanan dan integritas data
Kontrol akses tidak langsung ke objek basis data dari pengguna non-privilegi dengan keamanan
hak istimewa
Pastikan bahwa tindakan yang terkait dilakukan bersama-sama, atau tidak sama sekali, dengan mengarahkan aktivitas untuk
tabel terkait melalui satu jalur
62
DAFTAR SEMUA PROSEDUR DAN FUNGSI

PILIH NAMA_OBJEK, TIPE_OBJEK DARI OBJEK_PENGGUNA DIMANA TIPE_OBJEK DALAM


(’PROSEDUR’, ’FUNGSI’) SUSUN BERDASARKAN NAMA_OBJEK

DAFTAR KODE PROSEDUR DAN FUNGSI

PILIH TEKS DARI USER_SOURCE DIMANA NAMA = 'QUERY_EMP' URUTKAN MENURUT BARIS;

PAKET

Sebuah paket adalah objek skema yang mengelompokkan tipe PL/SQL, item, dan subprogram yang terkait secara logis.
Paket biasanya memiliki dua bagian, spesifikasi dan isi,

Kelebihan

Sederhanakan keamanan Tidak perlu mengeluarkan GRANT untuk setiap prosedur dalam paket
Batasi recompilasi Ubah badan prosedur atau fungsi tanpa
mengubah spesifikasi
Kinerja Panggilan pertama ke paket memuat seluruh paket ke dalam memori
Penyembunyian Informasi Dengan paket, Anda dapat menentukan jenis, item, dan subprogram mana yang
publik (terlihat dan dapat diakses) atau pribadi (tersembunyi dan tidak dapat diakses).
Bersembunyi Detail pelaksanaan dari pengguna, Anda melindungi integritas dari
paket.

Bagian Paket
[Link] PAKET

Spesifikasi paket berisi deklarasi publik. Cakupan deklarasi ini bersifat lokal terhadap Anda
skema basis data dan global untuk paket. Jadi, item yang dinyatakan dapat diakses dari aplikasi Anda dan
dari mana saja dalam paket.

B. TUBUH PAKET

Badan paket mengimplementasikan spesifikasi paket. Artinya, badan paket berisi definisi
setiap kursor dan subprogram yang dinyatakan dalam spesifikasi paket. Ingatlah bahwa subprogram
yang didefinisikan dalam badan paket hanya dapat diakses dari luar paket jika spesifikasinya juga muncul di dalam
spesifikasi paket.

BEBANAN PAKET

PL/SQL memungkinkan dua atau lebih subprogram terkemas memiliki nama yang sama. Opsi ini berguna ketika Anda
ingin sebuah subprogram untuk menerima parameter yang memiliki tipe data yang berbeda.

ITEM PRIBADI VERSUS ITEM PUBLIK

PRIBADI
Badan paket juga dapat berisi deklarasi privat, yang mendefinisikan tipe dan item yang diperlukan untuk
fungsi internal dari paket. Ruang lingkup deklarasi ini bersifat lokal untuk badan paket. Oleh karena itu,
tipe dan item yang dideklarasikan tidak dapat diakses kecuali dari dalam tubuh paket. Berbeda dengan spesifikasi paket,
bagian deklaratif dari tubuh paket dapat berisi tubuh subprogram.
63
UMUM
Barang-barang tersebut disebut publik. Ketika Anda harus mempertahankan barang-barang selama sesi atau di seluruh transaksi,
letakkan mereka di bagian deklaratif dari badan paket.

Keuntungan Paket

Paket menawarkan beberapa keuntungan: modularitas, desain aplikasi yang lebih mudah, penyembunyian informasi, tambahan
fungsi, dan kinerja yang lebih baik.

Modularitas
Paket memungkinkan Anda untuk mengenkapsulasi tipe, item, dan subprogram yang terkait secara logis dalam PL/SQL yang bernama.
modul. Setiap paket mudah dipahami, dan antarmuka antara paket sederhana, jelas,
dan terdefinisi dengan baik. Ini membantu pengembangan aplikasi.

Desain Aplikasi yang Lebih Mudah


Saat merancang aplikasi, yang Anda butuhkan pada awalnya adalah informasi antarmuka dalam paket
spesifikasi. Anda dapat mengkodekan dan mengompilasi spesifikasi tanpa isinya. Kemudian, subprogram yang disimpan yang merujuk
paket dapat dikompilasi juga. Anda tidak perlu mendefinisikan badan paket sepenuhnya sampai Anda
siap untuk menyelesaikan aplikasi.

Penyembunyian Informasi
Dengan paket, Anda dapat menentukan jenis, item, dan subprogram mana yang bersifat publik (terlihat dan
aksesibel) atau pribadi (tersembunyi dan tidak dapat diakses). Misalnya, jika sebuah paket berisi empat
subprogram, tiga mungkin publik dan satu privat. Paket tersebut menyembunyikan implementasi dari
subprogram privat sehingga hanya paket (bukan aplikasi Anda) yang terpengaruh jika implementasi
perubahan. Ini menyederhanakan pemeliharaan dan peningkatan. Selain itu, dengan menyembunyikan rincian implementasi
dari pengguna, Anda melindungi integritas paket.

Fungsi Tambahan
Variabel publik dan kursor yang dikemas bertahan selama sesi. Jadi, mereka dapat dibagikan.
oleh semua subprogram yang dijalankan di lingkungan. Juga, mereka memungkinkan Anda untuk mempertahankan data di seluruh
transactions without having to store it in the database.

Kinerja yang Lebih Baik


Ketika Anda memanggil subprogram kemasan untuk pertama kalinya, seluruh paket dimuat ke dalam memori.
Jadi, panggilan selanjutnya ke subprogram terkait dalam paket tidak memerlukan I/O disk. Juga, paket terhenti
ketergantungan berjenjang dan dengan demikian menghindari kompilasi ulang yang tidak perlu. Misalnya, jika Anda mengubah
penerapan fungsi terkemas, Oracle tidak perlu mengompilasi ulang subprogram yang memanggil
karena mereka tidak tergantung pada badan paket.

PAKET YANG DISUPLAI OLEH ORACLE

•Disediakan dengan Oracle Server


Perluas fungsionalitas basis data
•Izinkan akses ke fitur SQL tertentu yang biasanya dibatasi untuk PL/SQL

Gunakan Paket yang Dapat Digunakan Kembali Secara Serial


64
Untuk membantu Anda mengelola penggunaan memori, PL/SQL menyediakan pragm SERIALLY_REUSABLE,
yang memungkinkan Anda menandai beberapa paket sebagai dapat digunakan kembali secara serial. Anda dapat menandai paket jika statusnya diperlukan
hanya untuk durasi satu panggilan ke server (misalnya, panggilan OCI ke server atau server-ke-server
RPC).

Memori global untuk paket semacam itu dikumpulkan di Area Global Sistem (SGA), bukan dialokasikan ke
pengguna individu di Area Global Pengguna (UGA). Dengan cara itu, area kerja paket dapat digunakan kembali. Ketika
panggilan ke server berakhir, memori dikembalikan ke kolam. Setiap kali paket digunakan kembali, publiknya
variabel diinisialisasi ke nilai default mereka atau ke NULL.

Jumlah maksimum area kerja yang dibutuhkan untuk sebuah paket adalah jumlah pengguna yang bersamaan dari paket tersebut.
paket, yang biasanya jauh lebih kecil daripada jumlah pengguna yang masuk. Peningkatan penggunaan SGA
memori lebih dari seimbang oleh berkurangnya penggunaan memori UGA. Juga, Oracle menghapus area kerja yang tidak dalam
gunakan jika perlu untuk mengklaim memori SGA.

Untuk paket tanpa badan, Anda mengkodekan pragma di spesifikasi paket menggunakan sintaks berikut:

PRAGMA SERIALLY_REUSABLE;

Untuk paket dengan tubuh, Anda harus mengkodekan pragma di spesifikasi dan tubuh. Anda tidak dapat mengkodekan pragma
hanya di dalam tubuh. Contoh berikut menunjukkan bagaimana variabel publik dalam paket yang dapat digunakan kembali secara seri
berperilaku di seluruh batas panggilan:

Buat PAKET pkg1 ADALAH


PRAGMA SERIALLY_REUSABLE;
num NUMBER := 0;
PROSEDUR init_pkg_state(n NUMBER);
PROCEDURE print_pkg_state;
AKHIR pkg1;

TRIGGER DATABASE

Trigger mendefinisikan tindakan yang harus diambil database ketika terjadi beberapa peristiwa terkait database
terjadi. Pemicu dapat digunakan untuk melengkapi integritas referensial deklaratif, untuk menegakkan
aturan bisnis yang kompleks.
Trigger basis data adalah subprogram yang disimpan yang terkait dengan tabel. Anda dapat membuat Oracle secara otomatis memicu
pemicu sebelum atau setelah pernyataan INSERT, UPDATE, atau DELETE mempengaruhi tabel.

Trigger dijalankan ketika perintah manipulasi data tertentu dilakukan pada tabel tertentu

TRIGGER TINGKAT BARIS

Trigger tingkat baris dieksekusi sekali untuk setiap baris dalam transaksi. Trigger tingkat baris dibuat menggunakan FOR
Setiap klausul ROW dalam perintah buat pemicu.

PENCetus TRIGGER TINGKAT PERNYATAAN

Pemicu tingkat pernyataan dieksekusi sekali untuk setiap transaksi. Misalnya, jika Anda menyisipkan 100 baris dalam satu
Pemicu tingkat pernyataan akan dieksekusi sekali.

Trigger SEBELUM dan SETELAH


65
Karena pemicu terjadi akibat peristiwa, mereka dapat diatur untuk terjadi segera sebelum atau setelah peristiwa tersebut.

Tabel berikut menunjukkan jumlah pemicu yang dapat Anda miliki untuk sebuah tabel. Jumlah pemicu yang Anda
dapat memiliki 14 pemicu untuk sebuah meja.

Tabel berikut menunjukkan jumlah pemicu yang dapat Anda miliki untuk sebuah tabel. Jumlah pemicu
Anda dapat memiliki 14 pemicu untuk sebuah tabel.

PERNYATAAN TRIGGER TINGKAT BARIS TINGKAT PERNYATAAN


PEMBANGKIT

SEBELUM INSERT MASUKKAN


PEMBARUAN PERBARUI
HAPUS HAPUS

SEBAGAI GANTI DARI SEBAGAI GANTI BARIS

SETELAH MASUKKAN MASUKKAN


PERBARUI PERBARUI
HAPUS HAPUS

KEUNGGULAN TRIGGER

Feature Peningkatan

Keamanan Oracle Server memungkinkan akses tabel untuk pengguna atau peran. Pemicu memungkinkan akses tabel
menurut nilai data.

Auditing Server Oracle melacak operasi data pada tabel. Trigger melacak nilai untuk data
operasi pada tabel.

Integritas data Server Oracle menegakkan batasan integritas. Trigger menerapkan kompleks
integritas
rules.

Integritas referensial Server Oracle menegakkan aturan integritas referensial standar. Pemicu mengimplementasikan
fungsi nonstandar.

Replikasi tabel Server Oracle menyalin tabel secara asinkron ke dalam snapshot. Pemicu menyalin tabel

Secara sinkron ke replika.

Data turunan Server Oracle menghitung nilai data yang diturunkan secara manual. Trigger menghitung
nilai data yang diturunkan secara otomatis.

Pencatatan peristiwa Oracle Server mencatat peristiwa secara eksplisit. Pemicu mencatat peristiwa secara transparan.
66
Sintaksis:

BUAT ATAU GANTI TRIGGER <NAMA TRIGGER> [ SEBELUM | SETELAH |


SEBAGAI GANTI DARI ]
(SISIPKAN ATAU PERBARUI ATAU HAPUS) DI <NAMA TABEL> MENGACU PADA YANG LAMA SEBAGAI
LAMA | BARU SEBAGAI BARU UNTUK SETIAP BARIS
AWAL
SELESAI;
Example 1:

BUAT ATAU GANTI TRIGGER MY_TRIG SEBELUM INSERT ATAU UPDATE ATAU
HAPUS DI
DETAIL UNTUK SETIAP BARIS
MULAI
JIKA LTRIM(RTRIM(TO_CHAR(SYSDATE,'HARI')))='JUMAT' MAKA
JIKA MEMASUKKAN MAKA
RAISE_APPLICATION_ERROR(-20001,'INSERT IS NOT POSSIBLE');
JIKA MEMPERBARUI MAKA
RAISE_APPLICATION_ERROR(-20001,'UPDATE IS NOT POSSIBLE');
SEBALIKNYA MENGHAPUS MAKA
RAISE_APPLICATION_ERROR(-20001,'HAPUS TIDAK MEMUNGKINKAN');
AKHIR JIKA;
AKHIR JIKA;
SELESAI;

Contoh 2:
BUAT ATAU GANTI TRIGGER MY_TRIG SETELAH INSERT PADA
ITEM UNTUK SETIAP BARIS
MENYATAKAN
MITEMID NUMBER;
JUMLAH MQTY;
MULAI
PILIH ITEMID KE DALAM MITEMID DARI STOK DI MANA ITEMID =
:[Link];
PERBARUI STOC SET QTY=QTY+:[Link] DI MANA ITEMID=:[Link];
PEMBERITAHUAN KETIKA TIDAK_DITEMUKAN
MASUKKAN KE STOCK NILAI (:[Link], :[Link]);
SELESAI;
67
Contoh 3:
BUAT ATAU GANTI TRIGGER MY_TRIG SETELAH HAPUS PADA
EMP UNTUK SETIAP BARIS
AWAL
MASUKKAN KE EMP_BACK NILAI (:[Link], :[Link], :[Link],
:[Link]);
SELESAI;

Contoh 4:
BUAT ATAU GANTI TRIGGER TR02 SEBELUM INSERT ATAU UPDATE ATAU DELETE PADA EMP100
68
NYATAKAN
D1 VARCHAR(3);
MULAI
D1:=TO_CHAR(SYSDATE,'DY');

JIKA D1 DI ('SEL', 'SEN') MAKA


RAISE_APPLICATION_ERROR(-20025,'TRY ON ANOTHER DAY');
END IF;
SELESAI;

Contoh 5:
BUAT ATAU GANTI TRIGGER TR01 SETELAH HAPUS DI DEPT200 UNTUK SETIAP BARIS
MULAI
MASUKKAN KE DEPT1 NILAI (:[Link],:[Link],:[Link]);
SELESAI;
/
TAMPILKAN ERR

Contoh 6:
BUAT ATAU GANTI TRIGGER TR03 SETELAH PEMBARUAN PADA EMP UNTUK SETIAP BARIS
MULAI
UPDATE EMP100 SET SAL=:[Link]*2 WHERE EMPNO=:[Link];
SELESAI;
/
TUNJUKKAN ERR

Contoh 7:
BUAT ATAU GANTI TRIGER TR05 SETELAH PERBARUI DI EMP100
DEKLARASI
U1 VARCHAR2(50);
MULAI
PILIH PENGGUNA KE DALAM U1 DARI DUAL;
INSERT INTO USER1 VALUES(U1,SYSDATE,'UPDATE');
AKHIR;
/
TAMPILKAN ERR

Contoh 8:
BUAT ATAU GANTI TRIGGER TR06 SETELAH HAPUS PADA EMP100
NYATAKAN
U1 VARCHAR2(50);
MULAI
PILIH USER KE DALAM U1 DARI DUAL;
INSERT INTO USER1 VALUES(U1,SYSDATE,'HAPUS');
SELESAI;
/
TAMPILKAN ERR

SYSTEM TRIGGER
69
Contoh Pemicu LOGON dan LOGOFF

Anda dapat membuat pemicu ini untuk memantau seberapa sering Anda masuk dan keluar, atau Anda mungkin ingin menulis laporan tentang
berapa lama Anda terhubung. Jika Anda seorang DBA yang ingin melakukan ini, Anda akan mengganti SCHEMA dengan
DATABASE.

1. BUAT ATAU GANTI TRIGGER LOGON_TRIG


SETELAH masuk ke SKEMA
MULAI
MASUKKAN KE log_trig_table 5 (user_id, log_date, action) NILAI (user, sysdate, 'Masuk')
SELESAI;

2. BUAT ATAU GANTI TRIGER LOGOFF_TRIG


SEBELUM logoff PADA SKEMA
MULAI
INSERT INTO log_trig_table (user_id, log_date, action) VALUES (user, sysdate, 'Logging off');
SELESAI;

PERNYATAAN PANGGILAN

Ini memungkinkan Anda untuk memanggil prosedur yang disimpan, alih-alih mengkodekan tubuh PL/SQL di dalam pemicu itu sendiri.

BUAT [ATAU GANTI] TRIGGER nama_trigger


penjadwalan
event1 [ATAU event2 ATAU event3]
DI nama_tabel
[REFERENCING OLD AS old | NEW AS new]
[UNTUK SETIAP BARIS]
[KETIKA kondisi]
PANGGIL nama_prosedur

BUAT TRIGGER TEST3


SEBELUM MENYISIPKAN PADA EMP
PANGGIL LOG_LAPANGAN

ALIH-ALIH PEMICU
SEBAGAI pengganti untuk memicu MEMBERITAHU ORACLE apa yang harus dilakukan sebagai pengganti melakukan aksi yang dieksekusi
pemicu. Sebuah pemicu INSTEAD OF dapat digunakan untuk sebuah view. Pemicu ini dapat digunakan untuk mengatasi
pembatasan yang diterapkan oleh oracle pada tampilan yang tidak dapat diperbarui.

Contoh:

BUAT ATAU GANTI VIEW EMP_DEPT SEBAGAI PILIH [Link], [Link] DARI DEPT
A,EMP B DIMANA [Link]=[Link]

BUAT ATAU GANTI TRIGGER TRIG1 SEBAGAI GANTI DARI INSERT PADA EMP_DEPT
MENGACU BARU SEBAGAI N UNTUK SETIAP BARIS
MULAI
MASUKKAN KE DEPT NILAI(:[Link],'DNAME');
MASUKKAN KE DALAM EMP VALUES(:[Link],'ENAME',:[Link]);
SELESAI;
70

Anda mungkin juga menyukai