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.
Bu makale, Microsoft Fabric'te graf için GQL (Graph Sorgu Dili) söz dizimine yönelik hızlı bir başvurudur. Bunu sözdizimi ve varsayılan hatları hatırlamak için kullanın. Uçtan uca açıklama için GQL dil rehberine bakınız; her bölüm, tüm detaylara sahip odaklanmış referansa bağlantı verir.
Uyarı
Bu makalede öncelikli olarak sosyal ağ örnek graf veri kümesi gerçekleştirilir. Ayrıca grafik öğreticisinden Adventure Works veri kümesini kullanan birkaç örnek de sağlar.
Sorgu yapısı
GQL sorguları, grafikten hangi verilerin alındığını, nasıl işlendiğini ve sonuçların nasıl gösterildiğini tanımlayan bir deyim dizisi kullanır. Her deyimin belirli bir amacı vardır ve birlikte grafikteki verileri eşleştiren ve adım adım dönüştüren doğrusal bir işlem hattı oluştururlar.
Tipik sorgu akışı:
GQL sorgusu genellikle eşleşecek graf desenini belirterek başlar. Ardından değişken oluşturma, filtreleme, sıralama, sayfalandırma ve sonuç çıkışı için isteğe bağlı deyimler kullanır.
Example:
MATCH (n:Person)-[:knows]->(m:Person)
LET fullName = n.firstName || ' ' || n.lastName
FILTER m.gender = 'female'
ORDER BY fullName ASC
OFFSET 10
LIMIT 5
RETURN fullName, m.firstName
Açıklama bileşimi:
Önemli
Ifadeler sıralı bir boru hattı oluşturur ve keyfi olarak yeniden düzenlenemez. Geçerli sınırlamalarla ilgili makaleye bakın.
-
MATCH– Bulunacak grafik desenlerini belirtin. -
LET– İfadelerden değişkenleri tanımlayın. -
FOR– Bir listeyi satırlara genişletin. -
CALL– Bir satır içi alt sorgu çalıştırın ve döndürülen sütunlarını ekleyin. -
FILTER– Satır eşleştirme koşullarını koruyun. -
WHEN– Her giriş satırını ilk eşleşen koşullu dala yönlendirin. -
ORDER BY– Sonuçları sıralayın. -
OFFSET– Birçok satırı atlayın. -
LIMIT– Satır sayısını kısıtlayın. -
RETURN– Son sonuçların çıktısını alır. -
NEXT– Önceki aşamanın dönen sütunlarını kullanarak başka bir sorgulama aşaması başlatın.
Her deyim öncekini oluşturur, bu nedenle sorgu çıkışını artımlı olarak daraltır ve şekillendirebilirsiniz. Tam sorgu bloklarını birleştirmek için , UNION DISTINCT, veya UNION ALL kullanınUNION. Her deyim hakkında daha fazla bilgi için aşağıdaki bölümlere bakın.
Sorgu ifadeleri
MATCH
Verilerinizde grafik desenlerini bulun.
Syntax:
MATCH <graph pattern> [ WHERE <predicate> ]
...
Example:
MATCH (n:Person)-[:knows]-(m:Person) WHERE n.birthday > 2000
RETURN *
Deyimi hakkında MATCH daha fazla bilgi için bkz. Graph desenleri.
IZİN
İfadeleri kullanarak değişkenler oluşturun.
Syntax:
LET <variable> = <expression>, <variable> = <expression>, ...
...
Example:
MATCH (n:Person)
LET fullName = n.firstName || ' ' || n.lastName
RETURN fullName
Deyimi hakkında LET daha fazla bilgi için GQL dil kılavuzuna bakın.
FOR
Bir listeyi satırlara genişletir ve isteğe bağlı olarak her elemanın konumunu geri getirir.
Syntax:
FOR <variable> IN <list_expression>
[ WITH OFFSET <offset_variable> | WITH ORDINALITY <ordinality_variable> ]
...
Example:
FOR value IN [10, 20] WITH OFFSET index
RETURN value, index
WITH OFFSETBaşlar.0
WITH ORDINALITYBaşlar.1
Deyimi hakkında FOR daha fazla bilgi için GQL dil kılavuzuna bakın.
CALL
Her giriş satırı için bir alt sorgu çalıştırır. Zaten kapsamda olan değişkenler, alt sorgu içinde örtük olarak erişilebilirdir.
Syntax:
[ OPTIONAL ] CALL {
<query statements>
RETURN <columns>
}
...
Alt sorgu içinde oluşturulan değişkenler arasında, yalnızca son RETURN iyiminden sütunlar dışarıda kullanılabilir hale gelir. Normal, CALL alt sorgu satır döndürmediğinde dış satırı düşürür ve alt sorgu birden fazla satır döndürdüğünde çarpar.
OPTIONAL CALL alt sorgu satır döndürmediğinde, alt sorgu sütunlarıyla dış NULL satırı korur.
MATCH (p:Person)
CALL {
MATCH (p)-[:knows]->(friend:Person)
RETURN count(*) AS friendCount
}
RETURN p.firstName, friendCount
Hat içi alt sorgular hakkında daha fazla bilgi için GQL dil rehberine bakınız.
FİLTRE
Koşullarla eşleşen satırları tutar.
Syntax:
FILTER [ WHERE ] <predicate>
...
Example:
MATCH (n:Person)-[:knows]->(m:Person)
FILTER WHERE n.birthday > m.birthday
RETURN *
Deyimi hakkında FILTER daha fazla bilgi için GQL dil kılavuzuna bakın.
SIRALAMA
Sonuçları sıralar.
Syntax:
ORDER BY <expression> [ ASC | DESC ] [ NULLS FIRST | NULLS LAST ], ...
...
Example:
MATCH (n:Person)
RETURN *
ORDER BY n.lastName ASC NULLS LAST, n.firstName ASC
Null yerleştirme sıralama yönünden bağımsızdır. Varsayılan NULLS LAST her ikisi ASC için ve DESC; null olmayan değerlerin önüne null değerler koymak için belirtilir NULLS FIRST .
Önemli
İstenen satır sırası, yalnızca önceki ORDER BY bir ifadeden hemen sonra sabit kalması garanti edilir.
Aşağıdaki ifadelerin (varsa) böyle bir düzeni koruması garanti değildir.
Deyimi hakkında ORDER BY daha fazla bilgi için GQL dil kılavuzuna bakın.
UZAKLIK/LIMIT
Satırları atlayın ve sonuç sayısını sınırlayın.
Syntax:
OFFSET <offset> [ LIMIT <limit> ]
LIMIT <limit>
...
Example:
MATCH (n:Person)
ORDER BY n.birthday
OFFSET 10 LIMIT 20
RETURN n.firstName || ' ' || n.lastName AS name, n.birthday
ve OFFSET deyimleri hakkında LIMIT daha fazla bilgi için GQL dil kılavuzuna bakın.
RETURN
Son sonuçların çıkışını elde edin.
Syntax:
RETURN [ DISTINCT ] <expression> [ AS <alias> ], ...
Example:
MATCH (n:Person)
RETURN n.firstName, n.lastName
Deyimi hakkında RETURN daha fazla bilgi için GQL dil kılavuzuna bakın.
NEXT
Başka bir sorgulama aşaması başlar. Yalnızca önceki aşamadan geri dönen sütunlar sonrasında NEXTmevcuttur.
Syntax:
<query stage>
RETURN <columns>
NEXT
<query stage>
Example:
RETURN 1 AS value
NEXT
RETURN value + 1 AS nextValue
Her iki aşamada da sorgu bloklarının birleşimi olabilir. Birlik, çıktısı sınırı geçmeden NEXT önce o aşamada değerlendirilir.
Daha fazla bilgi NEXTiçin GQL dil rehberine bakınız.
Koşullu deyimler
Her giriş satırını, önlemi değerleyen TRUEilk WHEN dala yönlendirir.
Syntax:
WHEN <predicate> THEN <linear query statement or { query statements }>
[ WHEN <predicate> THEN <linear query statement or { query statements }> ... ]
[ ELSE <linear query statement or { query statements }> ]
Yüklemler Boolean olmalı ve sırayla değerlendirilmelidir.
FALSE ve UNKNOWN bir sonraki dala geçiyor. Eğer hiçbir dal eşleşmezse ve yoksa ELSE, giriş satırı atlanır. İlk eşleşmeden sonraki predikatlar ve seçilmemiş dal gövdeleri değerlendirilmiyor.
RETURN 'Alice' AS name, 19900101u AS birthday
NEXT
WHEN birthday < 20000101u THEN
RETURN name, 'Before 2000' AS era
ELSE
RETURN name, '2000 or later' AS era
Tüm dallar, uyumlu veri tipleriyle aynı sütun adlarını döndürmelidir. İç içe bir prosedür içeren bir dal, diş teli ile kapatın.
Daha fazla bilgi için Koşullu ifadeler sayfasına bakınız.
UNION
Tam sorgu bloklarının çıktısını birleştirir.
Syntax:
<query block>
UNION [ DISTINCT | ALL ]
<query block>
Kopya UNION sıraları çıkar ve UNION DISTINCT çıkar.
UNION ALL Çift satırları korur. Her sorgu bloğu, uyumlu veri tipleriyle aynı sütun isimleri setini döndürmelidir.
Sendikalar hakkında daha fazla bilgi için GQL dil rehberine bakınız.
Grafik desenleri
Graf desenleri, eşleşecek grafın yapısını açıklar.
Düğüm desenleri
Grafik veritabanlarında düğümleri kullanarak kişiler, ürünler veya yerler gibi varlıkları temsil edin.
Düğüm desenleri, grafikteki düğümleri eşleştirmeyi açıklar. Etikete göre filtreleyebilir veya değişkenleri bağlayabilirsiniz.
(n) -- Any node
(n:Person) -- Node with Person label
(n:City&Place) -- Node with City AND Place label
(:Person) -- Person node, don't bind variable
Düğüm desenleri hakkında daha fazla bilgi için bkz. Grafik desenleri.
Kenar desenleri
Kenar desenleri, yön ve kenar türü dahil olmak üzere düğümler arasındaki ilişkileri belirtir. Graf veritabanlarında kenar, iki düğüm arasındaki bir bağlantıyı veya ilişkiyi temsil eder.
<-[e]- -- Incoming edge
-[e]-> -- Outgoing edge
-[e]- -- Any edge
-[e:knows]-> -- Edge with label ("relationship type")
-[e:knows|likes]-> -- Edges with different labels
-[:knows]-> -- :knows edge, don't bind variable
Kenar desenleri hakkında daha fazla bilgi için bkz. Grafik desenleri.
Etiket ifadeleri
Etiket ifadeleri, mantıksal işleçler kullanarak düğümleri belirli etiket birleşimleriyle eşleştirmenize olanak sağlar.
:Person&Company -- Both Person AND Company labels
:Person|Company -- Person OR Company labels
:!Company -- NOT Company label
:(Person|!Company)&Active -- Complex expressions with parentheses
Etiket ifadeleri hakkında daha fazla bilgi için bkz. Grafik desenleri.
Yol desenleri
Yol desenleri, atlama sayıları ve değişken bağlamaları da dahil olmak üzere grafikteki dolaşmaları açıklar.
(a)-[:knows|likes]->{1,3}(b) -- 1-3 hops via knows/likes
p=()-[:knows]->() -- Bind a path variable
MATCH REPEATABLE ELEMENTS (a)->(b) -- Explicit default match mode
MATCH DIFFERENT EDGES (a)->(b), (a)->(c)
MATCH ALL TRAIL (a)->{1,4}(b) -- Every edge-unique path
MATCH p = ANY SHORTEST (a)->{1,4}(b) -- One shortest path per endpoint pair
WALK varsayılan yol modudur ve tekrar edilen düğümler ile kenarlara izin verir.
TRAIL tekrarlayan kenarları önler.
SIMPLE kapanan ilk sona dönen döngü dışında tekrarlanan düğümleri engeller ve ACYCLIC tüm tekrarlanan düğümleri engeller. Her iki düğüm benzeri modu da tekrar eden kenarları engeller çünkü kenar yeniden kullanımı uç nokta düğümlerini tekrarlar.
ALL varsayılan yol aramasıdır.
ANY SHORTEST her kaynak-hedef çifti için en kısa bir yolu döndürür ve bağlı yollar arasında deterministik olarak seçim yapmaz.
Desteklenen nicelikleyiciler arasında sabit {n}, sınırlı {m,n} ve {,n}, ve sınırsız {m,}, *, ve +bulunur. Sınırsız ALL WALK desenler desteklenmez; sonlandırma yolu modu kullanın. Unbounded ANY SHORTEST WALK ek şekil ve yol değeri kısıtlamalarına sahiptir. Detaylar için bakınız: GQL grafik desenleri.
Yol desenleri hakkında daha fazla bilgi için bkz. Grafik desenleri.
Birden çok desen
Tek bir sorgudaki karmaşık, doğrusal olmayan grafik yapılarını eşleştirmek için birden çok desen kullanın.
(a)->(b), (a)->(c) -- Multiple edges from same node
(a)->(b)<-(c), (b)->(d) -- Nonlinear structures
Birden çok desen hakkında daha fazla bilgi için bkz. Grafik desenleri.
Değerler ve değer türleri
Temel türler
Temel türler dizeler, sayılar, boole'lar ve tarih zamanları gibi temel veri değerleridir.
STRING -- 'hello', "world"
INT64 -- 42, -17
FLOAT64 -- 3.14, -2.5e10, -17d
BOOL -- TRUE, FALSE, UNKNOWN
ZONED DATETIME -- ZONED_DATETIME('2023-01-15T10:30:00Z')
Or dD eki yaklaşık FLOAT64 bir literal oluşturur. Eksiz bir üstsel de bir FLOAT64 değer oluşturur.
f Ve F kelimesi kelimesi ekleri şu anda desteklenmiyor.
Temel türler hakkında daha fazla bilgi için bkz. GQL değerleri ve değer türleri.
Başvuru değeri türleri
Başvuru değeri türleri, sorgularda değer olarak kullandığınız düğümler ve kenarlardır.
NODE -- Node reference values
EDGE -- Edge reference values
Başvuru değer türleri hakkında daha fazla bilgi için bkz. GQL değerleri ve değer türleri.
Koleksiyon türleri
Koleksiyon türleri, listeler ve yollar gibi birden çok değeri gruplandırıyor.
LIST<INT64> -- [1, 2, 3]
LIST<STRING> -- ['a', 'b', 'c']
PATH -- Path values
Koleksiyon türleri hakkında daha fazla bilgi için bkz. GQL değerleri ve değer türleri.
Malzeme ve nullable tipler
Her değer türü null atanabilir (null değeri içerir) veya malzemedir (hariç tutar).
Açıkça belirtmediğiniz NOT NULLsürece türler varsayılan olarak null atanabilir.
STRING NOT NULL -- Material (Non-nullable) string type
INT64 -- Nullable (default) integer type
İfadeler ve işleçler
Conditional
Basit CASE ifadeler bir ifadeyi bir veya daha fazla değerle karşılaştırır.
CASE expr WHEN val THEN val ELSE val END -- Simple CASE
NULLIF(a, b) -- NULL if a = b
Aranan CASE WHEN <predicate> ifadeler desteklenmiyor. Başlatmalara dayalı satırları yönlendirmek için koşullu bir ifade kullanın.
Koşullu ifadeler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
Karşılaştırma
Karşılaştırma işleçleri değerleri karşılaştırır ve eşitlik, sıralama veya null değerlerini denetler.
=, <>, <, <=, >, >= -- Standard comparison
IS NULL, IS NOT NULL -- Null checks
Karşılaştırma önkoşulları hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
Logical
Mantıksal işleçler sorgularda boole koşullarını birleştirir veya olumsuzleştirir.
AND, OR, NOT, XOR -- Boolean logic
Mantıksal ifadeler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
EXISTS
Bir prosedür formu alt sorgusunun en az bir satır döndürüp dönmediğini test eder.
EXISTS {
MATCH (p)-[:knows]->(friend:Person)
RETURN friend
}
EXISTS sıfır olmayan bir Boolean değeri döndürür. Alt sorgu satır döndürmediğini test etmek için kullanılır NOT EXISTS . Sonucu veya WHEREFILTER, LET, , RETURNORDER BY, , ve filtre veya kaynak ifadeleri toplaması için kullanabilirsin.
EXISTS List predicate filtresi içinde desteklenmez.
Önemli
Sadece grafik desenine dayalı formlar ( EXISTS { (p)-[:knows]->(friend) } örneğin ve EXISTS ((p)-[:knows]->(friend)) desteklenmez). Önceki örnekte gösterilen prosedür formunu MATCH kullanın.
Caution
Gruplanmamış bir toplam, RETURN count(*) örneğin hiçbir desen eşleşmese bile bir satır geri getirir. Çünkü EXISTS satırlar için testler yapılır, bu form 'ye değer TRUEverir.
Daha fazla bilgi EXISTSiçin bkz. Varoluş alt sorguları.
Arithmetic
Aritmetik işleçler sayılar üzerinde hesaplamalar yapar.
+, -, *, / -- Basic arithmetic operations
1.00m / 8.00m -- Exact result: 0.1250m
Aritmetik ifadeler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
Dize desenleri
Dize deseni önkoşulları dizelerdeki alt dizeler, önekler veya soneklerle eşleşir.
n.firstName CONTAINS 'John' -- Has substring
n.browserUsed STARTS WITH 'Chrome' -- Starts with prefix
n.locationIP ENDS WITH '.1' -- Ends with suffix
MSFT.REGEXP_LIKE(n.firstName, '^jo', 'i') -- RE2 regular expression
Dize deseni önkoşulları hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
İşlemleri listeleme
Listeleme işlemleri test üyeliği, erişim öğeleri ve ölçü listesi uzunluğu.
n.gender IN ['male', 'female'] -- Membership test
n.tags[0] -- First element
size(n.tags) -- List length
ALL(x IN n.tags WHERE x <> '') -- Every element matches
ANY(x IN n.tags WHERE x = 'gql') -- At least one element matches
NONE(x IN n.tags WHERE x = '') -- No element matches
SINGLE(x IN n.tags WHERE x = 'gql') -- Exactly one element matches
List predicate fonksiyonları filtre sonuçlarına göre , FALSE, veya UNKNOWN döndürürTRUE. Boş bir liste ALL için, ve NONE return TRUE, while ANY ve SINGLE return FALSE. Null bir kaynak listesi döndürür UNKNOWN.
Eleman bağlanması filtreye lokeldir ve dış değişkeni gölgeleyebilir. O yerel bağlama üzerindeki agregalar ve EXISTS filtre içindeki alt sorgular desteklenmez.
Daha fazla bilgi için bkz. Yüklem fonksiyonlarını listele.
Özellik erişimi
Özellik erişimi bir düğümden veya kenardan bir özelliğin değerini alır.
n.firstName -- Property access
Özellik erişimi hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
Functions
Değerleri dönüştürmek, grafik elemanlarını incelemek ve satırları toplamak için yerleşik fonksiyonları kullanın.
Sayısal işlevler
Sayısal fonksiyonlar sayısal değerleri hesaplar veya tam sayı aralıkları üretir.
abs(value) -- Absolute value; preserves the numeric type
power(base, exponent) -- Exponentiation; returns DOUBLE
sin(radians), cos(radians) -- Trigonometric functions
asin(value), acos(value) -- Inverse functions; value must be in [-1, 1]
degrees(radians) -- Convert radians to degrees
radians(degrees) -- Convert degrees to radians
range(start, end) -- Integer range with step 1
range(start, end, step) -- Integer range with a nonzero step
Desteklenen diğer trigonometrik fonksiyonlar TAN, COT, ATAN, SINH, COSH, ve TANH. ve RANGEhariç, bu sayısal fonksiyonlar ABS döndürürDOUBLE.
GQL ifadeleri ve fonksiyonlarındaki sayısal fonksiyonlar hakkında daha fazla bilgi edinin.
Toplama işlevleri
Toplama işlevleri, satır grupları (dikey toplama) veya grup listesinin öğeleri (yatay toplama) için özet değerleri hesaplar.
count(*) -- Count all rows
count(expr) -- Count non-null values
sum(p.birthday) -- Sum values
avg(p.birthday) -- Average
min(p.birthday), max(p.birthday) -- Minimum and maximum values
collect_list(p.firstName) -- Collect inputs, including nulls
collect_one(p.firstName) -- Select one non-null value
collect_elements(p.roles) -- Concatenate list-valued inputs
count(DISTINCT expr) -- Remove duplicate expression values
count(*) FILTER (WHERE predicate LIMIT 10) -- Filter and limit this aggregate
Sütunlar gruplanmadan, giriş satırları olmayan bir toplu sorgu 0 için COUNTboş bir liste döner, COLLECT_ELEMENTSve COLLECT_LIST , AVGMINMAX, , , ve COLLECT_ONEiçin SUMnull döner. Bir grup-liste argümanı, toplamı yatay yapar.
GQL ifadeleri ve işlevlerindeki toplama işlevleri hakkında daha fazla bilgi edinin.
Dize işlevleri
Dize işlevleri, dize değerleriyle çalışmanıza ve çözümlemenize olanak sağlar.
char_length(s) -- String length
upper(s), lower(s) -- Unicode case mapping
casefold(s) -- Unicode caseless form
normalize(s) -- Normalize a string to NFC
normalize(s, NFD) -- Normalize a string to NFD
trim(s) -- Trim spaces
trim(leading '_' from s) -- Trim one custom byte
string_join(list) -- Join with ", "
string_join(list, delimiter) -- Join with a custom delimiter
MSFT.REGEXP_COUNT(s, pattern) -- Count RE2 matches
MSFT.REGEXP_INSTR(s, pattern) -- Find a zero-based match position
MSFT.REGEXP_SUBSTR(s, pattern) -- Return matching text
MSFT.REGEXP_REPLACE(s, pattern, replacement) -- Replace matches
Regex kalıpları, değişimler ve seçenekler kelimenin tam anlamıyla olmalıdır. İmzalar, bayraklar ve null davranış için bkz. Dizim fonksiyonları.
Liste işlevleri
Liste işlevleri, uzunluğu denetleme veya kırpma boyutu gibi listelerle çalışmanızı sağlar.
size(list) -- List length
trim(list, n) -- Trim a list to at most n elements
Liste işlevleri hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
Graf işlevleri
Graph işlevleri düğümlerden, yollardan ve kenarlardan bilgi almanıza olanak sağlar.
labels(node) -- Get node labels
element_id(node_or_edge) -- Get an opaque element identifier
nodes(path) -- Get path nodes
edges(path) -- Get path edges
elements(path) -- Get all path nodes and edges
path_length(path) -- Get number of edges in a path
Grafik işlevleri hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
Zamana bağlı işlevler
Zamana bağlı işlevler, tarih ve saat değerleriyle çalışmanızı sağlar.
CURRENT_TIMESTAMP -- Get the current zoned datetime
ZONED_DATETIME(string) -- Parse an ISO 8601 zoned datetime
DURATION(string) -- Parse an ISO 8601 day-time duration
Zamana bağlı işlevler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
Genel işlevler
Genel işlevler, verilerle ortak yollarla çalışmanızı sağlar.
coalesce(expr1, expr2, ...) -- Get the first non-null value
to_json_string(value) -- Convert value to JSON string
nullif(a, b) -- NULL if a = b, else a
Genel işlevler hakkında daha fazla bilgi için bkz. GQL ifadeleri ve işlevleri.
Görev odaklı örnekler
Eksik, uyarlanabilir sorgu kalıplarına ihtiyacınız olduğunda nasıl yapılır makalelerini kullanın:
- Komşular için yaygın GQL sorguları , çoklu geçiş, paylaşılan bağlantılar ve varlık kontrolleri yaz.
- Satır ve desen filtreleme, gruplama, koleksiyon toplamaları ve koşullu yönlendirme için grafik verilerini filtreleyin ve toplasın.
- Yol modları, yol aramaları, desen kompozisyonu ve isteğe bağlı eşleştirme için grafik desen sorguları yaz.