Bagikan melalui


FROM (Entity SQL)

Menentukan koleksi yang digunakan dalam pernyataan SELECT .

Sintaksis

FROM expression [ ,...n ] AS C

Argumen

expression
Ekspresi kueri valid apa pun yang menghasilkan koleksi untuk digunakan sebagai sumber dalam pernyataan SELECT .

Komentar

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

FROM C as c

ITEM Klausa FROM

Setiap FROM item klausa mengacu pada kumpulan sumber dalam kueri Entity SQL. Entity SQL mendukung kelas FROM item klausa berikut: item klausa sederhana FROM , JOIN FROM item klausa, dan APPLY FROM item klausa. Masing-masing item klausa ini FROM dijelaskan secara lebih rinci di bagian berikut.

Item Klausa SIMPLE FROM

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

LOB.Customers as c

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

LOB.Customers

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

JOIN FROM Clause Item

Item JOIN FROM klausa mewakili gabungan antara dua FROM item klausa. Entity SQL mendukung gabungan silang, gabungan dalam, gabungan luar kiri dan kanan, dan gabungan luar penuh. Semua gabungan ini didukung mirip dengan cara yang didukung dalam Transact-SQL. Seperti dalam Transact-SQL, dua FROM item klausul yang JOIN terlibat dalam harus independen. Artinya, mereka tidak dapat berkorelasi. Atau CROSS APPLYOUTER APPLY dapat digunakan untuk kasus-kasus ini.

Gabungan Silang

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

FROM C AS c CROSS JOIN D as d

Gabungan Dalam

Menghasilkan INNER JOIN produk Kartesius yang dibatasi dari 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 terhadap setiap elemen koleksi di sebelah kanan, di mana ON kondisinya benar. Jika tidak ada ON kondisi yang ditentukan, akan INNER JOIN berdegenerasi ke CROSS JOIN.

Gabungan Luar Kiri dan Gabungan Luar Kanan

OUTER JOIN Ekspresi kueri menghasilkan produk Kartesius yang dibatasi dari 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 terhadap setiap elemen koleksi di sebelah kanan, di mana ON kondisinya benar. ON Jika kondisi salah, ekspresi masih memproses satu instans elemen di sebelah kiri yang dipasangkan terhadap elemen di sebelah kanan, dengan nilai null.

RIGHT OUTER JOIN Mungkin dinyatakan dengan cara yang sama.

Gabungan Luar Penuh

Eksplisit FULL OUTER JOIN menghasilkan produk Kartesius yang dibatasi dari 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 terhadap setiap elemen koleksi di sebelah kanan, di mana ON kondisinya benar. ON Jika kondisi salah, ekspresi masih memproses satu instans elemen di sebelah kiri yang dipasangkan terhadap elemen di sebelah kanan, dengan nilai null. Ini juga memproses satu instans elemen di sebelah kanan yang dipasangkan terhadap elemen di sebelah kiri, dengan nilai null.

Nota

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

TERAPKAN Item Klausa

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

Menghasilkan CROSS APPLY pasangan unik dari setiap elemen koleksi di sebelah kiri dengan elemen koleksi yang dihasilkan dengan mengevaluasi ekspresi di sebelah kanan. Dengan , ekspresi di sebelah kanan secara fungsional bergantung pada elemen di sebelah kiri, seperti yang CROSS APPLYdiilustrasikan 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 mengevaluasi ke koleksi kosong, CROSS APPLY tidak menghasilkan pemasangan untuk instans elemen tersebut di sebelah kiri.

Menyerupai OUTER APPLYCROSS APPLY, kecuali pemasangan masih diproduksi bahkan ketika ekspresi di sebelah kanan mengevaluasi ke koleksi kosong. Berikut ini adalah contoh OUTER APPLY:

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

Nota

Tidak seperti di Transact-SQL, tidak perlu ada langkah tidak ternest eksplisit di Entity SQL.

Nota

CROSS dan OUTER APPLY operator diperkenalkan di SQL Server 2005. Dalam beberapa kasus, alur kueri mungkin menghasilkan Transact-SQL yang berisi CROSS APPLY dan/atau OUTER APPLY operator. 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 adanya CROSS APPLY operator dan/atau OUTER APPLY dalam kueri output adalah sebagai berikut: subkueri yang berkorelasi dengan halaman; 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 atau CROSS APPLY secara OUTER APPLY eksplisit ditentukan; kueri yang memiliki DEREF konstruksi atas REF konstruksi.

Beberapa Koleksi dalam Klausul FROM

Klausa FROM dapat berisi lebih dari satu koleksi yang dipisahkan oleh koma. Dalam kasus ini, koleksi diasumsikan untuk digabungkan. Anggap ini sebagai CROSS JOIN n-way.

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

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

Contoh sebelumnya secara logis setara dengan contoh berikut:

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

Korelasi Kiri

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

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

Ini secara logis setara dengan:

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

Semantik

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

Klausa secara FROM logis menghasilkan multiset baris jenis Row(c, d, e) di mana bidang c, d, dan e diasumsikan dari jenis Celemen , , Ddan c.Names.

Entity SQL memperkenalkan alias untuk setiap item klausa sederhana FROM 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), FROM klausa hanya memperkenalkan alias ke dalam cakupan. Setiap referensi ke kolom (properti) dari koleksi ini harus memenuhi syarat dengan alias.

Menarik Kunci dari Kueri Berlapis

Jenis kueri tertentu yang memerlukan penarikan kunci dari kueri berlapis tidak didukung. Misalnya, kueri berikut valid:

select c.Orders from Customers as c

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

select {1} from {2, 3}

Lihat juga