Neo4j hat eine eigene Abfragesprache namens Cypher. Cypher verwendet eine ähnliche Syntax wie SQL (Structured Query Language).
Beispiel
Hier ist ein Beispiel für eine Cypher-Anweisung:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Diese Cypher-Anweisung gibt einen "Person"-Knoten zurück, dessen Namenseigenschaft "Homer Flinstone" ist.
Wenn dies eine SQL-Abfrage einer relationalen Datenbank wäre, könnte es eher so aussehen:
SELECT * FROM Person WHERE name = "Homer Flinstone";
Denken Sie jedoch daran, dass Neo4j seine Daten nicht wie das relationale Datenbankmodell in Tabellen speichert. Es ist alles in Knoten und Beziehungen. Die obige Cypher-Abfrage fragt also Knoten, ihre Labels und ihre Eigenschaften ab. Das SQL-Beispiel hingegen fragt Tabellen, Zeilen und Spalten ab.
SQL wurde entwickelt, um mit relational verwendet zu werden Datenbankverwaltungssysteme (DBMS). Neo4j ist ein NoSQL-DBMS, da es weder das relationale Modell noch SQL verwendet.
Cypher wurde speziell für die Arbeit mit dem Neo4j-Datenmodell entwickelt, bei dem es um Knoten und ihre Beziehungen untereinander geht.
ASCII-Art-Syntax
Cypher verwendet ASCII-Art, um Muster darzustellen. Dies ist eine praktische Sache, an die Sie sich erinnern sollten, wenn Sie die Sprache zum ersten Mal lernen. Wenn Sie vergessen haben, wie man etwas schreibt, stellen Sie sich einfach vor, wie die Grafik aussehen wird, und es sollte helfen.
(a)-[:KNOWS]->(b)
Die wichtigsten Dinge, die Sie sich merken sollten:
- Knoten werden durch Klammern dargestellt, die wie Kreise aussehen. So:
(node)
- Beziehungen werden durch Pfeile dargestellt. So:
->
- Informationen über eine Beziehung können zwischen eckigen Klammern eingefügt werden. Etwa so:
[:KNOWS]
Daten definieren
Hier sind einige weitere Punkte, die Sie bei der Arbeit mit Cypher beachten sollten:
- Knoten haben normalerweise Labels. Beispiele könnten "Person", "Benutzer", "Akteur", "Mitarbeiter", "Kunde" sein.
- Knoten haben normalerweise Eigenschaften. Eigenschaften bieten zusätzliche Informationen über den Knoten. Beispiele könnten "Name", "Alter", "Geboren" usw. sein
- Beziehungen können auch Eigenschaften haben.
- Beziehungen haben normalerweise einen Typ (dies ist im Grunde wie das Etikett eines Knotens). Beispiele könnten "WISST", "LIKES", "ARBEITET_FÜR", "GEKAUFT" usw. sein
Betrachten wir also noch einmal das obige Beispiel:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Wir können das sehen:
- Der Knoten ist in Klammern eingeschlossen
()
. Person
ist das Label des Knotens.name
ist eine Eigenschaft des Knotens.