Cypher Query Language (CQL) は、グラフ データベースをクエリするために設計された強力なツールです。従来のリレーショナル データベースとは異なり、グラフ データベースは、未定義の関係を持つ密接に接続されたデータの管理に優れています。 CQL は直感的かつ強力な構文を提供し、グラフ データベースに保存されているデータの作成、読み取り、更新、削除を簡単にします。この包括的なガイドでは、CQL の機能、制約、用語、コマンドについて、その可能性を最大限に活用するための実際的な例とともに説明します。
CQL の際立った特徴の 1 つは、高度に接続されたデータへの適合性です。関係が複雑で管理が面倒なことが多いリレーショナル データベースとは異なり、グラフ データベースは接続によって機能します。 CQL を使用すると、これらの関係を直感的かつ効率的にクエリできるため、ソーシャル ネットワークやレコメンデーション エンジンなどにとって理想的な選択肢となります。
CQL では、ノードを複数のラベルに関連付けることができます。この柔軟性により、データのより適切な編成と分類が可能になります。たとえば、人を表すノードには、人、従業員、顧客などのラベルを付けることができ、それぞれが個人のアイデンティティのさまざまな側面を表します。
CQL は強力ですが、いくつかの制約があります。断片化は特定のドメインでのみ可能です。これは、場合によっては、最終的な答えを得るためにデータ全体を走査する必要があることを意味します。
一部のクエリ、特に複雑な関係を伴うクエリでは、返されたデータが正確で完全であることを確認するためにグラフ全体を走査する必要がある場合があります。これは、グラフのサイズと複雑さに応じて、リソースを大量に消費し、時間がかかる可能性があります。
ノードはグラフ内のエンティティを表します。ノードには、名前、年齢、その他の関連属性など、エンティティに関する情報を保存するプロパティを持つことができます。
ラベルを使用すると、ノードをグループ化できます。これらは SQL のテーブルの概念を置き換えます。たとえば、「人」というラベルが付いたノードは、人を表すすべてのノードをグループ化します。
リレーションとは、2 つのノード間の具体化されたリンクです。これにより、SQL のリレーションシップの概念が置き換えられ、エンティティ間の直接接続が可能になります。
属性は、ノードまたはリレーションが持つことができるプロパティです。たとえば、人物ノードには名前や年齢などの属性が含まれる場合がありますが、LIKES 関係には以来などの属性が含まれる場合があります。
CREATE コマンドは、ノードと関係を作成するために使用されます。これはグラフ構造を構築するための基本です。
MATCH コマンドは、グラフ内のパターンを検索するために使用されます。これは CQL でのクエリの基礎であり、指定された基準に基づいてノードと関係を取得できるようになります。
CQL でのノードの作成は簡単です。 CREATE コマンドを使用し、その後にノードの詳細を入力します。
CREATE (:Person {name:\"John\", age:30}) CREATE (:Food {name:\"Pizza\"})
ノードは、ノードに関する情報を保存するキーと値のペアであるプロパティを使用して作成できます。
CREATE (:Person {name:\"Jane\", age:25, occupation:\"Engineer\"}) CREATE (:Food {name:\"Burger\", calories:500})
MATCH コマンドを使用すると、グラフ内のノードを検索できます。
MATCH (p:Person) RETURN p
より具体的な検索を行うには、WHERE 句を使用して、プロパティに基づいてノードをフィルターします。
MATCH (p:Person) WHERE p.age > 20 RETURN p.name, p.age
ノードを作成するときに、ノード間の関係を作成できます。
CREATE (p:Person {name:\"John\", age:30})-[:LIKES]->(f:Food {name:\"Pizza\"})
MATCH コマンドを使用して、既存のノード間に関係を作成することもできます。
MATCH (p:Person {name:\"John\"}) MATCH (f:Food {name:\"Pizza\"}) CREATE (p)-[r:LIKES]->(f) RETURN r
SET コマンドを使用して、既存のノードに属性を追加できます。
MATCH (p:Person {name:\"John\"}) SET p.occupation = \"Developer\" RETURN p
属性を削除するには、その値を NULL に設定します。
MATCH (p:Person {name:\"John\"}) SET p.age = NULL RETURN p
Attributes can be modified by setting them to new values.
MATCH (p:Person {name:\"John\"}) SET p.age = 35 RETURN p
The COUNT function returns the number of nodes or relationships.
MATCH (n) RETURN count(n)
The AVG function calculates the average value of a numeric property.
MATCH (n) RETURN avg(n.age)
The SUM function calculates the total sum of a numeric property.
MATCH (n) RETURN sum(n.age)
To get the count of each type of relationship in the graph, use the type function.
MATCH ()-[r]->() RETURN type(r), count(*)
The COLLECT function creates a list of all values for a given property.
MATCH (p:Product)-[:BELONGS_TO]->(o:Order) RETURN id(o) as orderId, collect(p)
To delete all nodes and relationships, use the DELETE command.
MATCH (a)-[r]->(b) DELETE a, r, b
Visualize the database schema to understand the structure of your graph.
CALL db.schema.visualization YIELD nodes, relationships
Here are three ways to find a node representing a person named Lana Wachowski.
// Solution 1 MATCH (p:Person {name: \"Lana Wachowski\"}) RETURN p // Solution 2 MATCH (p:Person) WHERE p.name = \"Lana Wachowski\" RETURN p // Solution 3 MATCH (p:Person) WHERE p.name =~ \".*Lana Wachowski.*\" RETURN p
Display the name and role of people born after 1960 who acted in movies released in the 1980s.
MATCH (p:Person)-[a:ACTED_IN]->(m:Movie) WHERE p.born > 1960 AND m.released >= 1980 AND m.released < 1990 RETURN p.name, a.roles
Add the label Actor to people who have acted in at least one movie.
MATCH (p:Person)-[:ACTED_IN]->(:Movie) WHERE NOT (p:Actor) SET p:Actor
Consider a database for an online store where you need to manage products, clients, orders, and shipping addresses. Here's how you might model this in CQL.
Let's create some example nodes and relationships for an online store scenario:
CREATE (p1:Product {id: 1, name: \"Laptop\", price: 1000}) CREATE (p2:Product {id: 2, name: \"Phone\", price: 500}) CREATE (c:Client {id: 1, name: \"John Doe\"}) CREATE (o:Order {id: 1, date: \"2023-06-01\"}) CREATE (adr:Address {id: 1, street: \"123 Main St\", city: \"Anytown\", country: \"USA\"})
Now, let's create the relationships between these nodes:
CREATE (p1)-[:BELONGS_TO]->(o) CREATE (p2)-[:BELONGS_TO]->(o) CREATE (c)-[:MADE]->(o) CREATE (o)-[:SHIPPED_TO]->(adr)
To find out the products ordered in each order, including their quantity and unit price, use the following query:
MATCH (p:Product)-[:BELONGS_TO]->(o:Order) RETURN id(o) as orderId, collect(p)
To determine which client made each order and where each order was shipped, use this query:
MATCH (c:Client)-[:MADE]->(o:Order)-[:SHIPPED_TO]->(adr:Address) RETURN c.name as client, id(o) as orderId, adr.street, adr.city, adr.country
What is Cypher Query Language (CQL)?
Cypher Query Language (CQL) is a powerful query language designed specifically for querying and updating graph databases. It allows you to interact with data in a way that emphasizes the relationships between data points.
How does CQL differ from SQL?
While SQL is designed for querying relational databases, CQL is designed for graph databases. This means that CQL excels at handling complex, highly connected data, whereas SQL is better suited for tabular data structures.
Can I use CQL with any database?
CQL is primarily used with Neo4j, a popular graph database management system. However, other graph databases may have their own query languages with similar capabilities.
What are the benefits of using CQL?
CQL allows for intuitive querying of graph databases, making it easier to manage and analyze data with complex relationships. It supports a rich set of commands for creating, updating, and deleting nodes and relationships, as well as powerful query capabilities.
Is CQL difficult to learn?
CQL is designed to be user-friendly and intuitive. If you are familiar with SQL, you will find many similarities in CQL. The main difference lies in how data relationships are handled.
How can I optimize my CQL queries?
Optimizing CQL queries involves understanding your graph's structure and using efficient query patterns. Indexing frequently searched properties and avoiding unnecessary full graph traversals can significantly improve performance.
Cypher Query Language (CQL) is a robust tool for managing graph databases, offering powerful capabilities for querying and updating complex, highly connected data. By mastering CQL, you can leverage the full potential of graph databases, making it easier to handle intricate data relationships and perform sophisticated analyses.
以上が知っておくべきJavaScript面接の重要な質問の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。