Bagikan melalui


FROM (Entity SQL)

Menentukan koleksi yang digunakan dalam pernyataan SELECT.

Sintaks

FROM expression [ ,...n ] AS C

Argumen

expression
Semua ekspresi kueri valid yang menghasilkan koleksi untuk digunakan sebagai sumber dalam pernyataan SELECT.

Keterangan

Klausul FROM adalah daftar satu atau beberapa item klausul FROM yang dipisahkan koma. Klausul FROM dapat digunakan untuk menentukan satu sumber atau lebih untuk pernyataan SELECT. Bentuk klausul FROM yang paling sederhana adalah ekspresi kueri tunggal yang mengidentifikasi koleksi dan alias yang digunakan sebagai sumber dalam pernyataan SELECT, seperti yang diilustrasikan dalam contoh berikut:

FROM C as c

Item Klausul FROM

Setiap item klausul FROM mengacu pada kumpulan sumber dalam kueri Entity SQL. Entity SQL mendukung kelas item klausul FROM berikut: item klausul FROM sederhana, item klausul JOIN FROM, dan item klausul APPLY FROM. Setiap item klausul FROM ini dijelaskan secara lebih mendetail di bagian berikut.

Item Klausul FROM Sederhana

Item klausul FROM yang paling sederhana adalah ekspresi tunggal yang mengidentifikasi koleksi dan alias. Ekspresi hanya dapat berupa set entitas, atau subkueri, atau ekspresi lain yang merupakan jenis koleksi. Berikut ini adalah contohnya:

LOB.Customers as c

Spesifikasi alias bersifat opsional. Spesifikasi alternatif item klausul di atas bisa menjadi sebagai berikut:

LOB.Customers

Jika tidak ada alias yang ditentukan, Entity SQL mencoba menghasilkan alias berdasarkan ekspresi koleksi.

Item Klausul JOIN FROM

Item klausul JOIN FROM mewakili gabungan antara dua item klausul FROM. Entity SQL mendukung gabungan silang, gabungan dalam, gabungan kiri dan kanan luar, dan gabungan luar penuh. Semua gabungan ini didukung seperti halnya dukungan dalam Transact-SQL. Seperti dalam Transact-SQL, dua item klausul FROM yang digunakan dalam JOIN harus independen. Artinya, keduanya tidak dapat berkorelasi. CROSS APPLY atau OUTER APPLY dapat digunakan untuk kasus ini.

Gabungan Silang

Ekspresi kueri CROSS JOIN menghasilkan produk Cartesian dengan dua koleksi, seperti yang diilustrasikan dalam contoh berikut:

FROM C AS c CROSS JOIN D as d

Gabungan Dalam

INNER JOIN menghasilkan produk Cartesian terbatas dengan dua koleksi, seperti yang diilustrasikan dalam contoh berikut:

FROM C AS c [INNER] JOIN D AS d ON e

Ekspresi kueri sebelumnya memproses kombinasi setiap elemen koleksi di sebelah kiri yang dipasangkan dengan setiap elemen koleksi di sebelah kanan, di mana kondisi ON-nya true. Jika tidak ada kondisi ON yang ditentukan, INNER JOIN akan berdegenerasi menjadi CROSS JOIN.

Gabungan Kiri Luar dan Gabungan Kanan Luar

Ekspresi kueri OUTER JOIN menghasilkan produk Cartesian terbatas dengan dua koleksi, seperti yang diilustrasikan dalam contoh berikut:

FROM C AS c LEFT OUTER JOIN D AS d ON e

Ekspresi kueri sebelumnya memproses kombinasi setiap elemen koleksi di sebelah kiri yang dipasangkan dengan setiap elemen koleksi di sebelah kanan, di mana kondisi ON-nya true. Jika kondisi ON-nya false, ekspresi tetap memproses satu instans elemen di sebelah kiri yang dipasangkan dengan elemen di sebelah kanan, dengan nilai null.

RIGHT OUTER JOIN mungkin dinyatakan dengan cara yang sama.

Gabungan Penuh Luar

FULL OUTER JOIN eksplisit menghasilkan produk Cartesian terbatas dengan dua koleksi seperti yang diilustrasikan dalam contoh berikut:

FROM C AS c FULL OUTER JOIN D AS d ON e

Ekspresi kueri sebelumnya memproses kombinasi setiap elemen koleksi di sebelah kiri yang dipasangkan dengan setiap elemen koleksi di sebelah kanan, di mana kondisi ON-nya true. Jika kondisi ON-nya false, ekspresi tetap memproses satu instans elemen di sebelah kiri yang dipasangkan dengan elemen di sebelah kanan, dengan nilai null. Ini juga memproses satu instans elemen di sebelah kanan yang dipasangkan dengan elemen di sebelah kiri, dengan nilai null.

Catatan

Untuk mempertahankan kompatibilitas dengan SQL-92, di Transact-SQL, kata kunci OUTER bersifat opsional. Oleh karena itu, LEFT JOIN, RIGHT JOIN, dan FULL JOIN adalah sinonim untuk LEFT OUTER JOIN, RIGHT OUTER JOIN, dan FULL OUTER JOIN.

Item Klausul APPLY

Entity SQL mendukung dua jenis APPLY: CROSS APPLY dan OUTER APPLY.

CROSS APPLY menghasilkan pasangan unik setiap elemen koleksi di sebelah kiri dengan elemen koleksi yang dihasilkan dengan mengevaluasi ekspresi di sebelah kanan. Dengan CROSS APPLY, ekspresi di sebelah kanan secara fungsional bergantung pada elemen di sebelah kiri, seperti yang diilustrasikan dalam contoh koleksi terkait berikut:

SELECT c, f FROM C AS c CROSS APPLY c.Assoc AS f

Perilaku CROSS APPLY mirip dengan daftar gabungan. Jika ekspresi di sebelah kanan dievaluasi ke koleksi kosong, CROSS APPLY tidak menghasilkan pasangan untuk instans elemen tersebut di sebelah kiri.

OUTER APPLY menyerupai CROSS APPLY, kecuali pasangan tetap dihasilkan meskipun ekspresi di sebelah kanan dievaluasi ke koleksi kosong. Berikut contoh OUTER APPLY:

SELECT c, f FROM C AS c OUTER APPLY c.Assoc AS f

Catatan

Tidak seperti dalam Transact-SQL, tidak perlu langkah eksplisit yang tidak diatur dalam Entity SQL.

Catatan

Operator CROSS and OUTER APPLY diperkenalkan di SQL Server 2005. Dalam beberapa kasus, alur kueri mungkin menghasilkan Transact-SQL yang berisi operator CROSS APPLY dan/atau OUTER APPLY. Karena beberapa penyedia backend, termasuk versi SQL Server yang lebih lama dari SQL Server 2005, tidak mendukung operator ini, kueri tersebut tidak dapat dijalankan pada penyedia backend ini.

Beberapa skenario umum yang mungkin menyebabkan keberadaan operator CROSS APPLY dan/atau OUTER APPLY dalam kueri output adalah: subkueri yang berkorelasi dengan paging; AnyElement melalui subkueri yang berkorelasi atau melalui koleksi yang dihasilkan oleh navigasi; Kueri LINQ yang menggunakan metode pengelompokan yang menerima pemilih elemen; kueri di mana CROSS APPLY atau OUTER APPLY ditentukan secara eksplisit; kueri yang memiliki konstruksi DEREF di atas konstruksi REF.

Beberapa Koleksi dalam Klausul FROM

Klausul FROM dapat berisi lebih dari satu koleksi yang dipisahkan koma. Dalam kasus ini, koleksi diasumsikan digabungkan. Anggap ini sebagai CROSS JOIN n-arah.

Dalam contoh berikut, C dan D adalah koleksi independen, tetapi c.Names bergantung pada C.

FROM C AS c, D AS d, c.Names AS e

Contoh sebelumnya secara logis sama dengan contoh berikut:

FROM (C AS c JOIN D AS d) CROSS APPLY c.Names AS e

Korelasi Kiri

Item dalam klausul FROM dapat merujuk ke item yang ditentukan dalam klausul sebelumnya. Dalam contoh berikut, C dan D adalah koleksi independen, tetapi c.Names bergantung pada C:

from C as c, D as d, c.Names as e

Ini secara logis sama dengan:

from (C as c join D as d) cross apply c.Names as e

Semantik

Secara logis, koleksi dalam klausul FROM diasumsikan sebagai bagian dari gabungan silang n-arah (kecuali dalam kasus gabungan silang 1-arah). Alias dalam klausul FROM diproses dari kiri ke kanan, dan ditambahkan ke cakupan saat ini untuk referensi berikutnya. Klausul FROM diasumsikan menghasilkan multiset baris. Akan ada satu bidang untuk setiap item dalam klausul FROM yang mewakili satu elemen dari item koleksi tersebut.

Klausul FROM secara logis menghasilkan multiset baris jenis Row(c, d, e) di mana bidang c, d, dan e diasumsikan sebagai jenis elemen C, D, dan c.Names.

Entity SQL memperkenalkan alias untuk setiap item klausul FROM sederhana dalam cakupan. Misalnya, dalam cuplikan klausul FROM berikut, Nama yang diperkenalkan ke dalam cakupan adalah c, d, dan e.

from (C as c join D as d) cross apply c.Names as e

Di Entity SQL (tidak seperti Transact-SQL), klausul FROM hanya memperkenalkan alias ke dalam cakupan. Setiap referensi ke kolom (properti) koleksi ini harus memenuhi syarat dengan alias.

Menarik Kunci dari Kueri Bertingkat

Jenis kueri tertentu yang mengharuskan penarikan kunci dari kueri bertingkat tidak didukung. Misalnya, kueri berikut ini valid:

select c.Orders from Customers as c

Namun, kueri berikut ini tidak valid, karena kueri bertingkat tidak memiliki kunci apa pun:

select {1} from {2, 3}

Lihat juga