NIM : 09031282227116
Kelas : SI Reguler 4C
Query Processing
Query processing di dalam suatu basis data dilakukan dengan menggunakan bahasa query
(query language). Sebuah query adalah sebuah ekspresi bahasa yang menggambarkan data yang
akan didapatkan kembali dari sebuah database. Query dapat digunakan pada beberapa keadaan.
Kebanyakan aplikasi nyatanya adalah permintaan-permintaan secara langsung dari user yang
memerlukan informasi tentang bentuk maupun isi dari database. Bahasa query formal basis data
relasional adalah bahasa untuk meminta informasi dari basis data.
Pemrosesan query adalah aspek fundamental dari sistem manajemen basis data (DBMS). Ini
melibatkan menerjemahkan sebuah query yang ditulis dalam bahasa tingkat tinggi seperti SQL
menjadi serangkaian operasi tingkat rendah yang dapat dieksekusi oleh sistem untuk mengambil
informasi yang diinginkan dari basis data secara efisien.
DBMS menggunakan aljabar relasional sebagai bahasa dalam spesifikasi algoritma query.
Langkah-langkah DBMS untuk melakukan pengolahan query:
2. Projection ()
Operasi PROJECTION digunakan untuk memilih kolom-kolom tertentu dari tabel dan
membuang kolom-kolom lainnya yang tidak diperlukan. Pada umumnya operasi PROJECT
ditunjukkan oleh :
(R)
4. Union (U)
Hasil dari operasi ini ditunjukkan oleh R S, yaitu sebuah relasi yang merupakan semua
tuple-tuple yang ada alam R atau S atau keduanya. Tuple duplikat dihilangkan.
Jika terdapat dua relasi, Employee1 dan Employee2, dengan atribut yang sama, operasi
gabungan menghasilkan relasi baru yang berisi semua tuple dari kedua relasi dengan
menghilangkan duplikat.
Menggabungkan semua karyawan dari dua relasi:
Employee1 U Employee2
5. Set-difference (-)
Hasil dari operasi ini ditunjukkan oleh R − S, yaitu sebuah relasi yang merupakan semua
tuple-tuple yang ada dalam R tetapi tidak ada dalam S.
Jika terdapat dua relasi, Employee dan Manager, operasi perbedaan himpunan menghasilkan
relasi baru yang berisi semua tuple yang ada di relasi pertama tetapi tidak ada di relasi
kedua.
Menghasilkan karyawan yang bukan manajer:
Employee - Manager
AB
Terdapat relasi A dengan tuple {1, 2, 3} dan relasi B dengan tuple {2, 3, 4}, hasil
irisannya adalah {2, 3}.
2. Theta join ()
Operasi ini dilambangkan dengan simbol dan dilakukan dengan menentukan kondisi
khusus (theta), biasanya dalam bentuk operator perbandingan seperti =, >, <, dsb.
Operasi ini menghasilkan relasi baru dengan melakukan gabungan berdasarkan kondisi
yang diberikan.
Employee ⨝[Employee.DepartmentID = Department.ID] Department
Terdapat relasi Employee dengan atribut ID dan Department, serta relasi Department
dengan atribut ID dan Name. Theta join antara kedua relasi ini dapat dilakukan dengan
kondisi Employee.DepartmentID = Department.ID.
3. Natural join (⨝)
Operasi ini dilambangkan dengan simbol ⨝ dan dilakukan tanpa menentukan kondisi
secara eksplisit. Operasi ini secara implisit menggunakan atribut yang memiliki nama
yang sama di kedua relasi untuk menggabungkannya.
Employee ⨝ Department
Terdapat relasi Employee dengan atribut ID, Name, dan Department, serta relasi
Department dengan atribut DepartmentID dan Name, natural join akan menggunakan
atribut Name dari kedua relasi untuk menggabungkannya.
Employee Salary
Terdapat relasi Employee dengan karyawan yang memiliki ID dan relasi Salary dengan
karyawan yang memiliki gaji, outer join akan menyertakan semua karyawan, termasuk
yang tidak memiliki data gaji.
5. Division ()
Operasi ini dilambangkan dengan simbol dan digunakan untuk membagi dua relasi.
Hasilnya adalah set dari nilai-nilai yang memenuhi suatu kondisi tertentu.
Department ÷ Employee
Terdapat relasi Department dengan atribut ID dan Name, serta relasi Employee dengan
atribut ID dan DepartmentID, operasi pembagian dapat digunakan untuk menemukan
departemen yang memiliki semua karyawan.
Seorang pengguna ingin mencari nama dan gaji dari semua karyawan yang bekerja di departemen "IT"
dan memiliki gaji di atas 5000. Query yang dia masukkan adalah:
SELECT Name, Salary FROM Employees WHERE Department = 'IT' AND Salary > 5000;
Proses scanning akan mengidentifikasi token-token seperti SELECT, FROM, WHERE, Name,
Salary, Employees, Department, IT, 5000, dll.
Setelah scanning, query parser akan memeriksa kevalidan query tersebut dan
menterjemahkannya ke dalam bentuk internal, seperti ekspresi relasi aljabar atau parse tree.
Query tersebut akan diuraikan menjadi struktur data yang sesuai dengan sintaks SQL, misalnya:
π{Name, Salary}(σ{Department = 'IT' ∧ Salary > 5000}(Employees))Ini adalah bentuk ekspresi
relasi aljabar untuk query tersebut.
Selanjutnya, query optimizer akan memeriksa berbagai cara untuk mengeksekusi query tersebut
dan memilih rencana eksekusi yang paling efisien. Misalnya, optimizer mungkin memilih untuk
menggunakan indeks pada kolom Department dan Salary untuk meningkatkan kinerja pencarian
data.
Setelah optimisasi, kode generator atau interpreter akan mentransformasikan rencana akses yang
dihasilkan oleh optimizer ke dalam kode-kode yang dapat dieksekusi. Ini bisa berupa instruksi
SQL yang dijalankan oleh database engine, atau kode-kode yang akan dijalankan secara
langsung oleh sistem manajemen basis data (DBMS).
Terakhir, query processor akan menjalankan kode-kode yang dihasilkan untuk mengeksekusi
query. Ini akan mengakses data dari tabel Employees, menerapkan kondisi seleksi, dan
kemudian melakukan proyeksi pada kolom Name dan Salary. Hasil akhirnya adalah daftar nama
dan gaji karyawan yang memenuhi kriteria yang ditetapkan dalam query.