Neo4j tiene su propio lenguaje de consulta llamado Cypher. Cypher utiliza una sintaxis similar a SQL (lenguaje de consulta estructurado).
Ejemplo
Aquí hay un ejemplo de una declaración Cypher:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Esta instrucción Cypher devuelve un nodo "Persona" donde la propiedad del nombre es "Homer Flinstone".
Si esto fuera SQL consultando una base de datos relacional, podría parecerse más a esto:
SELECT * FROM Person WHERE name = "Homer Flinstone";
Sin embargo, recuerde, Neo4j no almacena sus datos en tablas como el modelo de base de datos relacional. Todo está en nodos y relaciones. Entonces, la consulta de Cypher anterior está consultando nodos, sus etiquetas y sus propiedades. El ejemplo de SQL, por otro lado, consulta tablas, filas y columnas.
SQL fue diseñado para ser utilizado con relacional sistemas de gestión de bases de datos (DBMS). Neo4j es un DBMS NoSQL, ya que no usa el modelo relacional y no usa SQL.
Cypher fue diseñado específicamente para trabajar con el modelo de datos Neo4j, que se trata de nodos y sus relaciones entre sí.
Sintaxis ASCII-Art
Cypher usa ASCII-Art para representar patrones. Esto es algo útil para recordar cuando se aprende el idioma por primera vez. Si olvida cómo escribir algo, simplemente visualice cómo se verá el gráfico y debería ayudar.
(a)-[:KNOWS]->(b)
Lo más importante para recordar:
- Los nodos se representan mediante paréntesis, que parecen círculos. Así:
(node)
- Las relaciones se representan mediante flechas. Así:
->
- La información sobre una relación se puede insertar entre corchetes. Así:
[:KNOWS]
Definición de los datos
Aquí hay algunos puntos más para recordar al trabajar con Cypher:
- Los nodos suelen tener etiquetas. Los ejemplos podrían incluir "Persona", "Usuario", "Actor", "Empleado", "Cliente".
- Los nodos suelen tener propiedades. Las propiedades proporcionan información adicional sobre el nodo. Los ejemplos podrían incluir "Nombre", "Edad", "Nacido", etc.
- Las relaciones también pueden tener propiedades.
- Las relaciones suelen tener un tipo (esto es básicamente como la etiqueta de un nodo). Los ejemplos podrían incluir "CONOCE", "ME GUSTA", "TRABAJA_PARA", "COMPRADO", etc.
Así que mirando el ejemplo anterior de nuevo:
MATCH (p:Person { name:"Homer Flinstone" }) RETURN p
Podemos ver que:
- El nodo está entre paréntesis
()
. Person
es la etiqueta del nodo.name
es una propiedad del nodo.