Apa yang dimaksud dengan istilah "proyeksi" dalam query SQL (atau definisi tampilan)

15

Dalam dokumen Oracle The Query Optimizer , di bawah View Merging , saya menemukan informasi berikut

Optimasi penggabungan tampilan berlaku untuk tampilan yang hanya berisi pilihan, proyeksi , dan gabungan. Artinya, tampilan yang dapat digabung tidak mengandung operator yang ditetapkan, fungsi agregat, DISTINCT, GROUP BY, CONNECT BY, dan sebagainya. (penekanan milikku)

Namun, saya hanya bisa menebak apa sebenarnya yang dimaksud oleh proyeksi tersebut.

René Nyffenegger
sumber

Jawaban:

17

Dalam aljabar Relasional, proyeksi berarti mengumpulkan subset kolom untuk digunakan dalam operasi, yaitu proyeksi adalah daftar kolom yang dipilih.

Dalam langkah pengoptimal kueri, proyeksi akan memanifestasikan dirinya sebagai area buffer atau spool dari beberapa deskripsi yang berisi subset kolom dari tabel atau operator yang mendasarinya, atau tampilan logis berdasarkan pada kolom yang digunakan oleh operasi selanjutnya.

Dalam tampilan, proyeksi sama dengan daftar kolom yang dipilih dalam kueri yang mendasari tampilan.

ConcernedOfTunbridgeWells
sumber
13

Proyeksi merujuk pada himpunan bagian dari semua kolom yang ditemukan dalam tabel, yang ingin Anda kembalikan. Ini dapat berkisar dari 0 ** hingga set lengkap.

Ada dua "set" dalam tabel yang sesuai dengan dua dimensi tabel. Setiap tabel memiliki satu set kolom serta satu set baris . Setiap nilai individu dalam sebuah tabel dapat ditemukan di persimpangan spesifik dari kedua * set ** ini. Namun, nilai Anda tidak ditemukan dengan "pergi ke" alamat, seperti T60 , seperti yang Anda lakukan dengan Excel.

Tidak ada urutan yang melekat dalam tabel relasional . Itu penting untuk diingat. Sebagai gantinya, untuk mengambil nilai tunggal Anda, Anda akan memilih untuk subset dari kolom (satu dalam hal ini) dan subset dari baris (satu dalam kasus ini). Untuk memilih subset dari satu kolom dari semua yang tersedia, Anda hanya perlu tahu namanya, serta nama tabel. Nama kolom akan unik di dalam tabelnya.

Setelah Anda memilih kolom di mana nilai Anda berada, Anda harus memilih baris tertentu. Namun, baris tidak memiliki nama seperti yang dilakukan kolom. Cara kami menentukan baris adalah. . . yah, kami tidak tahu persis. . . Kami menentukan sesuatu yang kami ketahui tentang nilai yang kami cari. Anda harus mengetahui sesuatu yang terkait dengan (secara harfiah) nilai yang Anda cari. Jika Anda dapat menentukan informasi terkait yang cukup maka Anda mungkin dapat mengurangi set baris yang dikembalikan ke hanya yang Anda cari.

Anggap saja seolah-olah seorang mahasiswa kehilangan ranselnya. Katakanlah seorang pria kehilangan itu. Dia menelepon hilang dan ditemukan, dan wanita yang hadir mengatakan, "Ya, kami memiliki beberapa lusin ransel. Bisakah Anda menggambarkannya?" Anda berkata, "Yah, warnanya biru?". Dia menjawab, "Apakah kamu bertanya atau memberitahuku", dan kemudian berkata, "Aku punya delapan yang biru, harus melakukan lebih baik dari itu, dan kamu tidak terdengar terlalu yakin tentang itu." Anda berkata, "Mari kita lihat, umm, oh ya! Ada buku matematika 1010 di dalamnya." "Bagus, sekarang kamu tinggal empat." Kemudian Anda ingat Anda seharusnya bertemu pacar Anda, Lucy, dalam 15 menit, dan itu memicu ingatan lain - saat Anda bosan dalam Matematika 1010 dan menulis, - dalam huruf kecil nyata di bagian bawah tas ransel, "Saya cinta Lucy ".Ricky . "

Proyeksi mungkin disamakan dengan mengatakan apa yang Anda hilang - ransel. Seleksi dapat disamakan dengan menggambarkan atribut-atributnya : biru, memiliki buku matematika 1010 di dalamnya, dan "I love Lucy" tertulis di bagian bawah.

Anda melakukan hal yang sama dengan SQL. Pertama, informasi seperti apa yang ingin Anda lihat. Kedua, kriteria yang menggambarkan yang mana atau yang ingin Anda lihat. Ini disebut predikat atau pernyataan kebenaran . Mereka berlaku untuk satu atau lebih anggota set. Jika tidak, mereka tidak mengembalikan nilai apa pun.

* Beberapa implementasi SQL dari vendor menyediakan cara untuk melanggar aturan ini, seperti Nested Tables di Oracle. Namun, tabel dua dimensi standar masih merupakan bentuk yang dominan.

** CJ Date menulis artikel yang sangat menarik yang disebut "A Table With No Columns". Saya merasa sangat layak untuk dibaca, karena saya melakukan sebagian besar dari banyak "Tulisan" artikelnya. Saya sangat merekomendasikan mereka!

user6612
sumber