it-swarm.asia

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

Dalam dokumen Oracle The Query Optimizer, di bawah Lihat Penggabungan , saya menemukan informasi berikut

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

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

15

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

Dalam langkah pengoptimal kueri, proyeksi akan memanifestasikan dirinya sebagai area buffer atau spool dari beberapa deskripsi yang mengandung 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.

Proyeksi mengacu 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 individual dalam tabel dapat ditemukan di persimpangan spesifik dari dua * set ** ini. Namun, nilai Anda tidak ditemukan dengan "membuka" alamat, seperti T6, 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." Maka 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 ransel, "Saya cinta Lucy ". Dia membalik mereka dan cukup yakin, dia mengatakan "yang ketiga mengatakan 'Saya suka Lucy' di atasnya. Ayo ambil, Ricky ."

Proyeksi dapat disamakan dengan mengatakan apa yang hilang - ransel. Pilihan dapat disamakan dengan menggambarkan atributnya : berwarna biru, memiliki buku matematika 1010 di dalamnya, dan memiliki "Aku cinta Lucy "tertulis di bawah.

Anda melakukan hal yang sama dengan SQL. Pertama, informasi seperti apa yang ingin Anda lihat. Kedua, kriteria yang menggambarkan mana 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-aturan ini, seperti Nested Tables di Oracle. Namun, tabel dua dimensi standar masih merupakan bentuk yang dominan.

** C.J. 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!

13
user6612