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 2017 (14.x) ve sonraki sürümleri
Microsoft Fabric'te
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği SQL veritabanı
Grafik için bir arama koşulu belirtir. KAÇINCI, WHERE yan tümcesinin bir parçası olarak SELECT deyiminde yalnızca grafik düğümü ve kenar tablolarıyla kullanılabilir.
Transact-SQL söz dizimi kuralları
Syntax
MATCH (<graph_search_pattern>)
<graph_search_pattern>::=
{
<simple_match_pattern>
| <arbitrary_length_match_pattern>
| <arbitrary_length_match_last_node_predicate>
}
<simple_match_pattern>::=
{
LAST_NODE(<node_alias>) | <node_alias> {
{ <-( <edge_alias> )- }
| { -( <edge_alias> )-> }
<node_alias> | LAST_NODE(<node_alias>)
}
}
[ { AND } { ( <simple_match_pattern> ) } ]
[ , ...n ]
<node_alias> ::=
node_table_name | node_table_alias
<edge_alias> ::=
edge_table_name | edge_table_alias
<arbitrary_length_match_pattern> ::=
{
SHORTEST_PATH(
<arbitrary_length_pattern>
[ { AND } { <arbitrary_length_pattern> } ]
[ , ...n ]
)
}
<arbitrary_length_match_last_node_predicate> ::=
{ LAST_NODE( <node_alias> ) = LAST_NODE( <node_alias> ) }
<arbitrary_length_pattern> ::=
{ LAST_NODE( <node_alias> ) | <node_alias>
( <edge_first_al_pattern> [ <edge_first_al_pattern>... , n ] )
<al_pattern_quantifier>
}
| ( { <node_first_al_pattern> [ <node_first_al_pattern> ... , n ] )
<al_pattern_quantifier>
LAST_NODE( <node_alias> ) | <node_alias>
}
<edge_first_al_pattern> ::=
{ (
{ -( <edge_alias> )-> }
| { <-( <edge_alias> )- }
<node_alias>
)
}
<node_first_al_pattern> ::=
{ (
<node_alias>
{ <-( <edge_alias> )- }
| { -( <edge_alias> )-> }
)
}
<al_pattern_quantifier> ::=
{
+
| { 1 , n }
}
n - positive integer only.
Arguments
graph_search_pattern
Grafikte çapraz geçiş yapmak için aranacak düzeni veya yolu belirtir. Bu desen, grafikteki bir yolu çapraz geçiş yapmak için ASCII resim söz dizimini kullanır. Desen, sağlanan ok yönünde bir kenar üzerinden bir düğümden diğerine gider. Kenar adları veya diğer adları parantez içinde sağlanır. Düğüm adları veya diğer adları okun iki ucunda görünür. Ok, desende iki yönde de gidebilir.
node_alias
FROM yan tümcesinde sağlanan düğüm tablosunun adı veya diğer adı.
edge_alias
FROM yan tümcesinde sağlanan bir kenar tablosunun adı veya diğer adı.
SHORTEST_PATH
En kısa yol işlevi, bir grafikteki belirli iki düğüm arasındaki veya belirli bir düğüm ile bir grafikteki diğer tüm düğümler arasındaki en kısa yolu bulmak için kullanılır. Giriş olarak rastgele bir uzunluk deseni alır ve grafikte tekrar tekrar aranır. SQL Server 2019'da kullanıma sunulmuştur. SQL Server 2019 veya üzerini gerektirir.
arbitrary_length_match_pattern
İstenen düğüme ulaşılana kadar veya desende belirtilen en fazla yineleme sayısına ulaşılana kadar art arda geçmesi gereken düğümleri ve kenarları belirtir.
al_pattern_quantifier
Rastgele uzunluk deseni, belirli bir arama deseninin kaç kez yineleneceğini belirtmek için normal ifade stili deseni niceleyicilerini alır. Desteklenen arama deseni niceleyicileri şunlardır:
- +: Deseni 1 veya daha fazla kez yineleyin. En kısa yol bulunur bulunmaz sonlandırılır.
- {1,n}: Deseni 1 ile n kez yineleyin. En kısa yol bulunur bulunmaz sonlandırılır.
Remarks
KAÇINCI içindeki düğüm adları yinelenebilir. Başka bir deyişle, bir düğüm aynı sorguda rastgele birkaç kez geçirilebilir.
Kenar adı, KAÇINCI içinde tekrarlanamaz.
Kenar her iki yönü de işaret edebilir, ancak açık bir yönü olmalıdır.
VEYA ve DEĞİl işleçleri MATCH düzeninde desteklenmez.
KAÇINCI, WHERE yan tümcesinde VE kullanılarak diğer ifadelerle birleştirilebilir. Ancak, VEYA veya DEĞİl kullanarak bunu diğer ifadelerle birleştirmek desteklenmez.
Examples
Bir arkadaş bulun
Aşağıdaki örnek bir Kişi düğüm tablosu ve arkadaş Edge tablosu oluşturur, bazı veriler ekler ve ardından graftaki bir kişi olan Alice'in arkadaşlarını bulmak için KAÇINCI'yı kullanır.
-- Create person node table
CREATE TABLE dbo.Person (ID INTEGER PRIMARY KEY, name VARCHAR(50)) AS NODE;
CREATE TABLE dbo.friend (start_date DATE) AS EDGE;
-- Insert into node table
INSERT INTO dbo.Person VALUES (1, 'Alice');
INSERT INTO dbo.Person VALUES (2,'John');
INSERT INTO dbo.Person VALUES (3, 'Jacob');
-- Insert into edge table
INSERT INTO dbo.friend VALUES ((SELECT $node_id FROM dbo.Person WHERE name = 'Alice'),
(SELECT $node_id FROM dbo.Person WHERE name = 'John'), '9/15/2011');
INSERT INTO dbo.friend VALUES ((SELECT $node_id FROM dbo.Person WHERE name = 'Alice'),
(SELECT $node_id FROM dbo.Person WHERE name = 'Jacob'), '10/15/2011');
INSERT INTO dbo.friend VALUES ((SELECT $node_id FROM dbo.Person WHERE name = 'John'),
(SELECT $node_id FROM dbo.Person WHERE name = 'Jacob'), '10/15/2012');
-- use MATCH in SELECT to find friends of Alice
SELECT Person2.name AS FriendName
FROM Person Person1, friend, Person Person2
WHERE MATCH(Person1-(friend)->Person2)
AND Person1.name = 'Alice';
Bir arkadaşınızın arkadaşını bulma
Aşağıdaki örnek, Alice'in bir arkadaşının arkadaşını bulmaya çalışır.
SELECT Person3.name AS FriendName
FROM Person Person1, friend, Person Person2, friend friend2, Person Person3
WHERE MATCH(Person1-(friend)->Person2-(friend2)->Person3)
AND Person1.name = 'Alice';
Belirli bir kişiden 1-3 atlama uzakta kişileri bulma
Aşağıdaki örnek, Jacob ile Jacob'ın bağlı olduğu tüm kişiler arasındaki en kısa yolu grafikte bir ila üç atlama ötede bulur.
SELECT
Person1.name AS PersonName,
STRING_AGG(Person2.name, '->') WITHIN GROUP (GRAPH PATH) AS Friends
FROM
Person AS Person1,
friendOf FOR PATH AS fo,
Person FOR PATH AS Person2
WHERE MATCH(SHORTEST_PATH(Person1(-(fo)->Person2){1,3}))
AND Person1.name = 'Jacob'
Diğer desenler
Aşağıda, MATCH içinde bir desenin belirtilebileceği bazı diğer yollar yer alır.
-- Find a friend
SELECT Person2.name AS FriendName
FROM Person Person1, friend, Person Person2
WHERE MATCH(Person1-(friend)->Person2);
-- The pattern can also be expressed as below
SELECT Person2.name AS FriendName
FROM Person Person1, friend, Person Person2
WHERE MATCH(Person2<-(friend)-Person1);
-- Find 2 people who are both friends with same person
SELECT Person1.name AS Friend1, Person2.name AS Friend2
FROM Person Person1, friend friend1, Person Person2,
friend friend2, Person Person0
WHERE MATCH(Person1-(friend1)->Person0<-(friend2)-Person2);
-- this pattern can also be expressed as below
SELECT Person1.name AS Friend1, Person2.name AS Friend2
FROM Person Person1, friend friend1, Person Person2,
friend friend2, Person Person0
WHERE MATCH(Person1-(friend1)->Person0 AND Person2-(friend2)->Person0);