Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te
SQL analiz uç noktasıMicrosoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
Uzamsal verilerle kullanılan yaygın bir sorgu, en yakın komşu sorgusudur. Belirli bir uzamsal nesneye en yakın uzamsal nesneleri bulmak için en yakın komşu sorguları kullanılır. Örneğin, bir web sitesinin mağaza bulucusunun genellikle bir müşteri konumuna en yakın mağaza konumlarını bulması gerekir.
En yakın komşu sorgusu çeşitli geçerli sorgu biçimlerinde yazılabilir, ancak en yakın komşu sorgunun uzamsal dizin kullanması için aşağıdaki söz dizimi kullanılmalıdır.
Syntax
SELECT TOP ( number )
[ WITH TIES ]
[ * | expression ]
[, ...]
FROM spatial_table_reference, ...
[ WITH
(
[ INDEX ( index_ref ) ]
[ , SPATIAL_WINDOW_MAX_CELLS = <value>]
[ ,... ]
)
]
WHERE
column_ref.STDistance ( @spatial_ object )
{
[ IS NOT NULL ] | [ < const ] | [ > const ]
| [ <= const ] | [ >= const ] | [ <> const ] ]
}
[ AND { other_predicate } ]
}
ORDER BY column_ref.STDistance ( @spatial_ object ) [ ,...n ]
[ ; ]
En yakın komşu sorgusu ve uzamsal dizinler
SQL Server'da TOP ve ORDER BY yan tümceleri, uzamsal veri sütunlarında en yakın komşu sorgusu gerçekleştirmek için kullanılır.
ORDER BY yan tümcesi, uzamsal sütun veri türü için STDistance() yöntemine bir çağrı içerir.
TOP yan tümcesi, sorgu için döndürülecek nesne sayısını gösterir.
Uzamsal dizin kullanmak için en yakın komşu sorgu için aşağıdaki gereksinimlerin karşılanması gerekir:
Uzamsal dizin, uzamsal sütunlardan birinde bulunmalıdır ve
STDistance()yöntemi,WHEREveORDER BYyan tümcelerinde bu sütunu kullanmalıdır.TOPyan tümcesi birPERCENTdeyim içeremez.WHEREyan tümcesi birSTDistance()yöntem içermelidir.Yan tümcesinde
WHEREbirden çok yüklem varsa,STDistance()yöntemini içeren yüklemin diğer yüklemlerleANDbağlacı aracılığıyla bağlanması gerekir. Yöntem,STDistance()tümcesininWHEREopsiyonel bir parçasında olamaz.İlk ifade,
ORDER BYcümlesindeSTDistance()yöntemini kullanmalıdır.STDistance()yan tümcesindeki ilkORDER BYifadesinin sıralama düzeniASColmalıdır.STDistanceNULLdöndüren tüm satırlar filtrelenmelidir.
Warning
SRID'ler veri türleri için aynı değilse coğrafya veya geometri veri türlerini argüman olarak alan yöntemler sonucunda NULL döndürülecektir.
Yeni uzamsal dizin tessellasyonlarının, en yakın komşu sorgularda kullanılan dizinler için kullanılması önerilir. Uzamsal dizin mozaikleri hakkında daha fazla bilgi için bkz . Uzamsal Veriler.
Örnek 1
Aşağıdaki kod örneği uzamsal dizin kullanabilen en yakın komşu sorgusunu gösterir. Örnek, örnek veritabanındaki Person.Address tabloyu kullanırAdventureWorks2025.
USE AdventureWorks2022
GO
DECLARE @g geography = 'POINT(-121.626 47.8315)';
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address
WHERE SpatialLocation.STDistance(@g) IS NOT NULL
ORDER BY SpatialLocation.STDistance(@g);
En yakın komşu sorgusunun uzamsal dizini nasıl kullandığını görmek için SpatialLocation sütununda bir uzamsal dizin oluşturun. Uzamsal dizinler oluşturma hakkında daha fazla bilgi için bkz. Uzamsal Dizinler Oluşturma, Değiştirme ve Bırakma.
Örnek 2
Aşağıdaki kod örneği uzamsal dizin kullanamayan en yakın komşu sorgusunu gösterir.
USE AdventureWorks2022
GO
DECLARE @g geography = 'POINT(-121.626 47.8315)';
SELECT TOP(7) SpatialLocation.ToString(), City FROM Person.Address
ORDER BY SpatialLocation.STDistance(@g);
Sorgunun söz dizimi bölümünde belirtilen bir formda kullanan WHERE bir STDistance() yan tümcesi olmadığından sorgu uzamsal dizin kullanamaz.