/* scrip for google analytic */

Ads 468x60px

วันอาทิตย์ที่ 17 เมษายน พ.ศ. 2559

[Neo4j] สรุปการใช้ Cypher Query Languege ที่ใช้ใน Graph Database และคำสั่ง CREATE, MATCH และ RETURN



เมื่อเราติดตั้ง Neo4j Server ขึ้นมาแล้วเราจะต้องมารู้จักกับ ภาษาที่ใช้ Query ใน Graph Database

http://skl-songkiat.blogspot.com/2016/04/neo4j-neo4j-windows-graph-database.html

Cypher Query Language เป็นภาษาหนึ่งที่ คล้ายกับ SQL ที่มาใช้สำหรับ Query ข้อมูลที่อยู่ในฐานข้อมูลแบบ Graph ซึ่งข้อดีของ ภาษา Cypher มีดังนี้

- เป็นภาษาที่สามารถอธิบายคำสั่งได้ด้วยตัวมันเอง
- เป็นภาษาเขียนโปรแกรมที่ถูกออกแบบให้มีความใกล้เคียงภาษามนุษย์มากขึ้น
- มีโครงสร้างในรูปแบบของภาษาอังกฤษ ใกล้เคียงภาษาในเชิงสัญลักษณ์
- มีความง่ายของคำสั่งเหมาะกับความซับซ้อนในฐานข้อมูลแบบ Graph
- คล้ายกับภาษา JAVA ภาษา Script เช่น JRuby , Gremlin
- มีคำสั่ง ที่คล้ายกับ SQL เช่น WHERE ,ORDER ประกอบกับภาษาสัญลักษณ์ ง่ายต่อความเข้าใจ

จากข้อดีในหลายๆข้อนี้ เรามาดูคำสั่งต่างๆ ที่ใช้กับ ภาษา Cypher นี้กันดีกว่า คำสั่งที่สำคัญมีดังนี้

1. CREATE : เพิ่ม Node ,Relationship และ Properties
2. MATCH  : ดึงข้อมูลจาก Node, Relationship และ Properties
3. RETURN: ส่งค่าผลลัพท์กลับจากการ Query
4. WHERE  : ตั้งเงื่อนไข ในการดังข้อมูล
5. DELETE : ลบ Node และ Relationship
6. REMOVE : ลบ Properties ของ Node และ Relationship
7. ORDER By : เรียงข้อมูลที่ดึงมา
8. SET : เพิ่มหรืออัพเดท Label

ในบทความนี้ ผมขอยกคำสั่งเบื้องต้นมาให้ดูและ นำมาแสดงเป็นตัวอย่างให้ดู ได้แก่ CREATE, MATCH และ RETURN กันก่อน เพราะเป็นคำสั่งเบื้องต้น



คำสั่ง CREATE

ในการสร้าง Node ,  Relation และ Properties ใช้คำสั่งนี้ โดยจะแยกเป็น สองแบบใหญ่ๆ คือ

1. สร้าง Node
    1.1 สร้าง Node แบบไม่มี Properties
    1.2 สร้าง Node แบบ มี Properties
2. สร้าง Relationship
    2.1 สร้าง Relationship แบบ ไม่มี Properties
    2.2 สร้าง Relationship แบบ มี Properties

คราวนี้มีดูรูปแบบ ของ คำสั่ง

สร้าง Node แบบไม่มี Properties 
Syntax : CREATE (<node-name>:<label-name>)

CREATE คือ คำสั่ง Cypher ของ Neo4j
<node-name> คือ ชื่อของ node ที่กำลังจะสร้าง
<label-name> คือ label ของ node

ข้อควรจำ! 
จำไว้ให้แม่น

Neo4j Database Server จะใช้ node-name ในการเก็บข้อมูล ใน Node ของ Database
ดังนั้น นักพัฒนาจะต้องจำเอาไว้ว่า ไม่สามารถ ดึงข้อมูลจาก node-name ไม่ได้
แต่จะใช้ node-label ในการดึงข้อมูลมาดู

สรุป คือ name node กับ label node ไม่เหมือนกัน จำไว้นะ!

ตัวอย่าง



CREATE (emp : Employee)

* emp คือ <node-name>
* Employee คือ <label-name>

หมายเหตุ สร้างพิมพ์คำสั่งเป็นตัวเล็กก็ได้



คำสั่งนี้หมายความถึงว่า สร้าง Node ชื่อ emp มี label ชื่อ Employee


เมื่อเพิ่ม Node จะมี แถบเด้งขึ้นแสดงข้อมูลต่างๆ เช่น แบบ Code และแบบ ตาราง


เมื่อใช้ คำสั่ง MATCH ดึงข้อมูลมาดูจะเห็นว่ามี Node ขึ้นมา เดี่ยวๆ
ตัวเลข 164 ที่เห็น บน วงกลม คือ properties ของ node แต่เราไม่ได้ระบุลงไปมันจึง create ให้อัตโนมัติ

ในตัวอย่างถัดไปจะแสดงให้ดูครับ


สร้าง Node แบบ มี Properties

Syntax : CREATE (
        <node-name>:<label-name>
       {
              <properties1-name> : <properties1:value>
              ......
              <propertiesN-name> : <propertiesN:value>
       }        
)

CREATE คือ คำสั่ง Cypher ของ Neo4j
<node-name> คือ ชื่อของ node ที่กำลังจะสร้าง
<label-name> คือ label ของ node
<properties-name> คือ ค่า key-value ที่กำหนดให้เป็นชื่อของ properties ที่กำลังสร้างขึ้น
<properties:value> คือ ค่า key-value ที่กำหนดให้เป็น value ของ properties ของ node ที่กำลังสร้างขึ้น

ตัวอย่าง


CREATE (p : patient{name:"joe"})

* p คือ <node-name>
* patient คือ <label-name>
* name คือ <properties-name>
*"joe" คือ <properties:value>




การสร้าง Relationship 

ใน Relationship จะยังไม่ลงลึกแต่จะยกตัวอย่างเอาไว้ให้ดูก่อน

Syntax : CREATE 
        (<node1-name>:<label1-name> )
        - [(<relationship-name>:<relationship-label-name>)] -> 
        (<node2-name>:<label2-name> )

ก็คล้ายๆกัน

CREATE คือ คำสั่ง Cypher ของ Neo4j
<node1-name> คือ ชื่อของ node1 ที่กำลังจะสร้าง
<label1-name> คือ label ของ node1
<node2-name> คือ ชื่อของ node2 ที่กำลังจะสร้าง
<label2-name> คือ label ของ node2
<relationship-name> คือ ชื่อของ relationship
<relationship-label-name> คือ label ของ relationship

ตัวอย่าง




จบ คำสั่ง CREATE 

ต่อไปมาคำสั่ง MATCH

Syntax : MATCH (<node-name>:<label-name> )

ตัวอย่าง
        

สังเกตได้ว่า จะเกิด Error ซึ่งก็คือ ไม่สามารถใช้ เดี่ยวๆได้ จะต้องใช้ คู่กับ RETURN

Return ก็เช่นกัน

Syntax : RETURN <node-name>.<properties-name> 


ดังนั้น เราจะจับ ทั้งสองคำสั่งมา confuse เอ้ย future เอ้ย fusion เอ้ย ถูกมั้ย... ชั่งมัน

เอามารวมกันเป็น

Syntax : MATCH (<node-name>:<label-name> )
               RETURN <node-name>.<properties-name> 

ดังภาพด้านล่าง


จบละครับ



 
 
Blogger Templates