เมื่อเราติดตั้ง 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>
ดังภาพด้านล่าง
จบละครับ