Bagikan melalui


Menyusun Kueri SQL Entitas Berlapis

Entity SQL adalah bahasa fungsi yang kaya. Blok penyusun Entity SQL adalah ekspresi. Tidak seperti SQL konvensional, Entity SQL tidak terbatas pada tataan hasil tabular: Entity SQL mendukung pembuatan ekspresi kompleks yang dapat memiliki literal, parameter, atau ekspresi berlapis. Nilai dalam ekspresi dapat diparameterkan atau terdiri dari beberapa ekspresi lain.

Ekspresi Berlapis

Ekspresi berlapis dapat ditempatkan di mana saja nilai jenis yang dikembalikan diterima. Contohnya:

-- Returns a hierarchical collection of three elements at top-level.
-- x must be passed in the parameter collection.
ROW(@x, {@x}, {@x, 4, 5}, {@x, 7, 8, 9})

-- Returns a hierarchical collection of one element at top-level.
-- x must be passed in the parameter collection.
{{{@x}}};

Kueri berlapis dapat ditempatkan dalam klausa proyeksi. Contohnya:

-- Returns a collection of rows where each row contains an Address entity.
-- and a collection of references to its corresponding SalesOrderHeader entities.
SELECT address, (SELECT DEREF(soh)
                    FROM NAVIGATE(address, AdventureWorksModel.FK_SalesOrderHeader_Address_BillToAddressID) AS soh)
                    AS salesOrderHeader FROM AdventureWorksEntities.Address AS address

Di Entity SQL, kueri berlapis harus selalu diapit dalam tanda kurung:

-- Pseudo-Entity SQL
( SELECT …
FROM … )
UNION ALL
( SELECT …
FROM … );

Contoh berikut menunjukkan cara menumpuk ekspresi dengan benar di Entity SQL: Cara: Memesan Union of Two Queries.

Kueri Berlapis dalam Proyeksi

Kueri berlapis dalam klausa proyek mungkin diterjemahkan ke dalam kueri produk Kartesius di server. Di beberapa server backend, termasuk SQL Server, ini dapat menyebabkan tabel TempDB menjadi sangat besar, yang dapat berdampak buruk pada performa server.

Berikut ini adalah contoh kueri seperti itu:

SELECT c, (SELECT c, (SELECT c FROM AdventureWorksModel.Vendor AS c  ) As Inner2 FROM AdventureWorksModel.JobCandidate AS c  ) As Inner1 FROM AdventureWorksModel.EmployeeDepartmentHistory AS c

Mengurutkan Kueri Berlapis

Dalam Kerangka Kerja Entitas, ekspresi berlapis dapat ditempatkan di mana saja dalam kueri. Karena Entity SQL memungkinkan fleksibilitas besar dalam menulis kueri, dimungkinkan untuk menulis kueri yang berisi urutan kueri berlapis. Namun, urutan kueri berlapis tidak dipertahankan.

-- The following query will order the results by last name.
SELECT C1.FirstName, C1.LastName
        FROM AdventureWorksModel.Contact as C1
        ORDER BY C1.LastName
-- In the following query, ordering of the nested query is ignored.
SELECT C2.FirstName, C2.LastName
    FROM (SELECT C1.FirstName, C1.LastName
        FROM AdventureWorksModel.Contact as C1
        ORDER BY C1.LastName) as C2

Lihat juga