ΠΡΠ΅Π΄ΠΈ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΊΡΡΡΠ°
ΠΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΡΠ° Π²Π°ΠΆΠ½Π° ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π·Π° ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠΈΡΠ΅ ΠΏΠΎ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ. ΠΠΏΠΈΡΠ²Π°ΠΌ ΡΠ΅ Π΄Π° ΡΠ»Π΅Π΄Ρ ΠΈΠ½ΠΎΠ²Π°ΡΠΈΠΈΡΠ΅ ΠΈ Π½ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅Ρ
Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ Π² ΡΠ°Π·ΠΈ ΠΎΠ±Π»Π°ΡΡ ΠΈ ΡΠ»Π΅Π΄ ΡΠ°Π±ΠΎΡΠ° Ρ ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½ΠΈ ΠΈ NoSQL Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌ, ΡΠ΅ ΡΠΎΠ»ΡΡΠ° Π½Π° Π³ΡΠ°ΡΠΎΠ²ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΡΡΠ°Π²Π° Π²ΡΠ΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°. ΠΠΎΠ³Π°ΡΠΎ ΡΠ°Π±ΠΎΡΠΈΡΠ΅ ΡΡΡ ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΉΠ΅ΡΠ°ΡΡ
ΠΈΡΠ½ΠΈ Π΄Π°Π½Π½ΠΈ, Π½Π΅ ΡΠ°ΠΌΠΎ ΡΡΠ°Π΄ΠΈΡΠΈΠΎΠ½Π½ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, Π½ΠΎ ΠΈ NoSQL ΡΠ° Π½Π΅Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈ. Π§Π΅ΡΡΠΎ, Ρ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°Π½Π΅ Π½Π° Π±ΡΠΎΡ Π½Π° Π½ΠΈΠ²Π°ΡΠ° Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΠΈΠΌΠ° Π½Π°ΠΌΠ°Π»ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°. Π ΡΡΠΉ ΠΊΠ°ΡΠΎ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΡΡΠ°Π²Π°Ρ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ, Π±ΡΠΎΡΡ Π½Π° JOIN ΡΡΡΠΎ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°.
Π Π°Π·Π±ΠΈΡΠ° ΡΠ΅, Π² ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½ΠΈΡ ΠΌΠΎΠ΄Π΅Π» ΠΈΠΌΠ° ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ ΠΉΠ΅ΡΠ°ΡΡ ΠΈΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΈ CTE), Π½ΠΎ ΡΠΎΠ²Π° Π²ΡΠ΅ ΠΎΡΠ΅ ΡΠ° Π·Π°ΠΎΠ±ΠΈΠΊΠΎΠ»Π½ΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π ΡΡΡΠΎΡΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° Π³ΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π° SQL Server ΡΠ»Π΅ΡΠ½ΡΠ²Π° ΡΠ°Π±ΠΎΡΠ°ΡΠ° Ρ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½ΠΈΠ²Π° Π½Π° ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡ. ΠΠ°ΠΊΡΠΎ ΠΌΠΎΠ΄Π΅Π»ΡΡ Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΠ°ΠΊΠ° ΠΈ Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΠ° ΠΎΠΏΡΠΎΡΡΠ΅Π½ΠΈ ΠΈ ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΡΡ Π½Π°ΡΠ° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°. ΠΠ½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π°ΠΌΠ°Π»ΡΠ²Π° ΠΎΠ±Π΅ΠΌΠ° Π½Π° ΠΊΠΎΠ΄Π°.
ΠΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΡΠ° Π΅ΠΊΡΠΏΡΠ΅ΡΠΈΠ²Π΅Π½ Π΅Π·ΠΈΠΊ Π·Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ. Π’Π°Π·ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π²Π΅ΡΠ΅ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΄ΠΎΡΡΠ° ΡΠΈΡΠΎΠΊΠΎ Π² ΠΠ’ ΠΈΠ½Π΄ΡΡΡΡΠΈΡΡΠ° Π² ΠΎΠ±Π»Π°ΡΡΠΈ ΠΊΠ°ΡΠΎ ΡΠΎΡΠΈΠ°Π»Π½ΠΈ ΠΌΡΠ΅ΠΆΠΈ, ΡΠΈΡΡΠ΅ΠΌΠΈ Π·Π° Π±ΠΎΡΠ±Π° Ρ ΠΈΠ·ΠΌΠ°ΠΌΠΈΡΠ΅, Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΠ’ ΠΌΡΠ΅ΠΆΠΈ, ΡΠΎΡΠΈΠ°Π»Π½ΠΈ ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈ, ΠΏΡΠ΅ΠΏΠΎΡΡΠΊΠΈ Π·Π° ΠΏΡΠΎΠ΄ΡΠΊΡΠΈ ΠΈ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° Π³ΡΠ°ΡΠΈΡΠ½Π°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π² SQL Server Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠ° Π·Π° ΡΡΠ΅Π½Π°ΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ ΡΠ° ΡΠΈΠ»Π½ΠΎ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΈ ΠΈΠΌΠ°Ρ Π΄ΠΎΠ±ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΈ Π²ΡΡΠ·ΠΊΠΈ.
ΠΡΠ°ΡΠΈΡΠ΅Π½ ΠΌΠΎΠ΄Π΅Π» Π½Π° Π΄Π°Π½Π½ΠΈ
ΠΡΠ°ΡΡΡ Π΅ Π½Π°Π±ΠΎΡ ΠΎΡ Π²ΡΡΡ ΠΎΠ²Π΅ (Π²ΡΠ·Π»ΠΈ, Π²ΡΠ·Π΅Π») ΠΈ ΡΡΠ±ΠΎΠ²Π΅ (ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ, ΡΡΠ±). ΠΡΡΡ ΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ ΠΎΠ±Π΅ΠΊΡΠΈ, Π° ΡΡΠ±ΠΎΠ²Π΅ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ Π²ΡΡΠ·ΠΊΠΈ, ΡΠΈΠΈΡΠΎ Π°ΡΡΠΈΠ±ΡΡΠΈ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ.
ΠΡΠ°ΡΠΎΠ²Π°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ° ΠΎΠ±Π΅ΠΊΡΠΈ ΠΊΠ°ΡΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°, ΠΊΠ°ΠΊΡΠΎ Π΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π½ΠΎ Π² ΡΠ΅ΠΎΡΠΈΡΡΠ° Π½Π° Π³ΡΠ°ΡΠΈΡΠ΅. Π‘ΡΡΡΠΊΡΡΡΠΈΡΠ΅ ΠΎΡ Π΄Π°Π½Π½ΠΈ ΡΠ° Π²ΡΡΡ ΠΎΠ²Π΅ ΠΈ ΡΡΠ±ΠΎΠ²Π΅. ΠΡΡΠΈΠ±ΡΡΠΈΡΠ΅ ΡΠ° ΡΠ²ΠΎΠΉΡΡΠ²Π° Π½Π° Π²ΡΡΡ ΠΎΠ²Π΅ ΠΈ ΡΡΠ±ΠΎΠ²Π΅. ΠΡΡΠ·ΠΊΠ°ΡΠ° Π΅ Π²ΡΡΠ·ΠΊΠ° Π½Π° Π²ΡΡΡ ΠΎΠ²Π΅.
ΠΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° ΠΎΡ Π΄ΡΡΠ³ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ, Π³ΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΏΡΠΈΠΎΡΠΈΡΠΈΠ·ΠΈΡΠ°Ρ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΠ±Π΅ΠΊΡΠΈΡΠ΅. Π‘Π»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ Π½ΡΠΌΠ° Π½ΡΠΆΠ΄Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Ρ Π²ΡΡΠ·ΠΊΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π²ΡΠ½ΡΠ½ΠΈ ΠΊΠ»ΡΡΠΎΠ²Π΅ ΠΈΠ»ΠΈ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΡΠ² Π΄ΡΡΠ³ Π½Π°ΡΠΈΠ½. ΠΡΠ·ΠΌΠΎΠΆΠ½ΠΎ Π΅ Π΄Π° ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π°Ρ ΡΠ»ΠΎΠΆΠ½ΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΠ°ΠΌΠΎ Π°Π±ΡΡΡΠ°ΠΊΡΠΈΠΈ Π½Π° Π²ΡΡΡ ΠΎΠ²Π΅ ΠΈ ΡΡΠ±ΠΎΠ²Π΅.
Π Π΄Π½Π΅ΡΠ½ΠΈΡ ΡΠ²ΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΈΡΠΊΠ²Π° Π²ΡΠ΅ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½ΠΈ ΡΠ΅Ρ Π½ΠΈΠΊΠΈ. ΠΠ° ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π²ΡΡΠ·ΠΊΠΈ, SQL Server 2017 ΠΏΡΠ΅Π΄Π»Π°Π³Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ Π·Π° Π³ΡΠ°ΡΠΈΡΠ½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ. ΠΡΡΡ ΠΎΠ²Π΅ΡΠ΅ ΠΈ ΡΡΠ±ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π³ΡΠ°ΡΠ° ΡΠ° ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ ΠΊΠ°ΡΠΎ Π½ΠΎΠ²ΠΈ ΡΠΈΠΏΠΎΠ²Π΅ ΡΠ°Π±Π»ΠΈΡΠΈ: NODE ΠΈ EDGE. ΠΡΠ°ΡΠΈΡΠ½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½ΠΎΠ²Π° T-SQL ΡΡΠ½ΠΊΡΠΈΡ, Π½Π°ΡΠ΅ΡΠ΅Π½Π° MATCH(). Π’ΡΠΉ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π΅ Π²Π³ΡΠ°Π΄Π΅Π½Π° Π² SQL Server 2017, ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡΠ² Π²Π°ΡΠΈΡΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΎΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ.
ΠΡΠ΅Π΄ΠΈΠΌΡΡΠ²Π° Π½Π° Π³ΡΠ°ΡΠΈΡΠ½ΠΈΡ ΠΌΠΎΠ΄Π΅Π»
Π Π΄Π½Π΅ΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠΈΡΠΌΠΈΡΠ΅ ΠΈ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΠΈΡΠΎ ΡΠ°Π±ΠΎΡΡΡ Ρ Π²ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΡΠ°ΠΊΠ²Π°Ρ Π²ΠΈΡΠΎΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ ΠΈ Π½Π°Π΄Π΅ΠΆΠ΄Π½ΠΎΡΡ. ΠΡΠ°ΡΠΈΡΠ½ΠΎΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π° ΡΠ΄ΠΎΠ±Π½ΠΎ ΡΡΠ΅Π΄ΡΡΠ²ΠΎ Π·Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ. Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ ΡΠ΅ΡΠ°Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΠΈ ΠΏΠΎΠΌΠ°Π³Π° Π·Π° ΠΏΠΎΡΡΠΈΠ³Π°Π½Π΅ Π½Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ Π² Π΄Π°Π΄Π΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ.
ΠΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ ΡΠ΅ Π²ΡΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΠΎΡ Π±Π°Π·ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Ρ Π³ΡΠ°ΡΠΈΠΊΠΈ Π² Π±ΡΠ΄Π΅ΡΠ΅.
ΠΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ: ΠΎΡ ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½ΠΎ ΠΊΡΠΌ Π³ΡΠ°ΡΠΎΠ²ΠΎ ΠΌΠΎΠ΄Π΅Π»ΠΈΡΠ°Π½Π΅
ΠΡΠΈΠΌΠ΅Ρ
ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½Π° ΡΡΡΡΠΊΡΡΡΠ° Ρ ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡ Π½Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅: ΡΠ»ΡΠΆΠΈΡΠ΅Π» Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° Π½Π° ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ, ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π° Π½Π° ΡΡΠ°ΡΡΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ ΠΈ Ρ.Π½. Π Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»Π΅Π½ Π±ΡΠΎΠΉ Π½ΠΈΠ²Π° Π² ΡΠ°Π·ΠΈ ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡ. ΠΠΎ ΡΡΠΉ ΠΊΠ°ΡΠΎ Π±ΡΠΎΡΡ Π½Π° Π½ΠΈΠ²Π°ΡΠ° ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π°, ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²ΡΡΠ·ΠΊΠΈ Π² ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΡΡΠ°Π²Π° Π²ΡΠ΅ ΠΏΠΎ-ΡΡΡΠ΄Π½ΠΎ. ΠΠΎΡΡΠ° ΡΡΡΠ΄Π½ΠΎ Π΅ Π΄Π° ΡΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡΡΠ° Π½Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅, ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡΡΠ° Π² ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³Π° ΠΈΠ»ΠΈ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ Π² ΡΠΎΡΠΈΠ°Π»Π½ΠΈΡΠ΅ ΠΌΠ΅Π΄ΠΈΠΈ. ΠΠ΅ΠΊΠ° Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ ΠΊΠ°ΠΊ SQL Graph ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°ΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π½ΠΈΠ²Π° Π½Π° ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡ.
ΠΠ° ΡΠΎΠ·ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ΠΊΠ° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΡΠΎΡΡ ΠΌΠΎΠ΄Π΅Π» Π½Π° Π΄Π°Π½Π½ΠΈ. Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ° Π½Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ EMP Ρ ΠΈΠ΄ EMPNO ΠΈ ΠΊΠΎΠ»ΠΎΠ½Π° Π.Π.Π .A, ΠΊΠΎΠΉΡΠΎ ΡΠΎΡΠΈ ΠΊΡΠΌ ID Π½Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΠΈΡΠ΅Π»Ρ (ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠ°) Π½Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»Ρ. Π¦ΡΠ»Π°ΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΠΉΠ΅ΡΠ°ΡΡ ΠΈΡΡΠ° ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π² ΡΠ°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΡΡΡΡΠΈ ΡΡΠ΅Π· ΠΊΠΎΠ»ΠΎΠ½ΠΈ EMPNO ΠΈ Π.Π.Π ..
Π‘Π»Π΅Π΄Π½Π°ΡΠ° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ° ΡΡΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΡΡΠΈΡ ΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΎΠ½Π½Π° Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ° Ρ ΡΠ΅ΡΠΈΡΠΈ Π½ΠΈΠ²Π° Π½Π° Π²Π»Π°Π³Π°Π½Π΅ Π² ΠΏΠΎ-ΠΏΠΎΠ·Π½Π°ΡΠ° ΡΠΎΡΠΌΠ°. Π‘Π»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ ΡΠ° Π²ΡΡΡ
ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ°ΡΠ° ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° EMP. Π‘ΡΠ±Π΅ΠΊΡΡΡ βΡΠ»ΡΠΆΠΈΡΠ΅Π»β Π΅ ΡΠ²ΡΡΠ·Π°Π½ ΡΡΡ ΡΠ΅Π±Π΅ ΡΠΈ ΡΡΠ΅Π· Π²ΡΡΠ·ΠΊΠ°ΡΠ° βΠΏΠΎΠ΄Π°Π²Π°β (ReportsTo). ΠΡ Π³Π»Π΅Π΄Π½Π° ΡΠΎΡΠΊΠ° Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ°ΡΠ°, Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π΅ ΡΡΠ± (EDGE), ΠΊΠΎΠΉΡΠΎ ΡΠ²ΡΡΠ·Π²Π° Π²ΡΠ·Π»ΠΈ (NODE) ββΠ½Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅.
ΠΠ΅ΠΊΠ° ΡΡΠ·Π΄Π°Π΄Π΅ΠΌ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° EMP ΠΈ Π΄ΠΎΠ±Π°Π²Π΅ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ ΡΠ°ΠΌ ΡΠΏΠΎΡΠ΅Π΄ Π΄ΠΈΠ°Π³ΡΠ°ΠΌΠ°ΡΠ° ΠΏΠΎ-Π³ΠΎΡΠ΅.
CREATE TABLE EMP
(EMPNO INT NOT NULL,
ENAME VARCHAR(20),
JOB VARCHAR(10),
MGR INT,
JOINDATE DATETIME,
SALARY DECIMAL(7, 2),
COMMISIION DECIMAL(7, 2),
DNO INT)
INSERT INTO EMP VALUES
(7369, 'SMITH', 'CLERK', 7902, '02-MAR-1970', 8000, NULL, 2),
(7499, 'ALLEN', 'SALESMAN', 7698, '20-MAR-1971', 1600, 3000, 3),
(7521, 'WARD', 'SALESMAN', 7698, '07-FEB-1983', 1250, 5000, 3),
(7566, 'JONES', 'MANAGER', 7839, '02-JUN-1961', 2975, 50000, 2),
(7654, 'MARTIN', 'SALESMAN', 7698, '28-FEB-1971', 1250, 14000, 3),
(7698, 'BLAKE', 'MANAGER', 7839, '01-JAN-1988', 2850, 12000, 3),
(7782, 'CLARK', 'MANAGER', 7839, '09-APR-1971', 2450, 13000, 1),
(7788, 'SCOTT', 'ANALYST', 7566, '09-DEC-1982', 3000, 1200, 2),
(7839, 'KING', 'PRESIDENT', NULL, '17-JUL-1971', 5000, 1456, 1),
(7844, 'TURNER', 'SALESMAN', 7698, '08-AUG-1971', 1500, 0, 3),
(7876, 'ADAMS', 'CLERK', 7788, '12-MAR-1973', 1100, 0, 2),
(7900, 'JAMES', 'CLERK', 7698, '03-NOV-1971', 950, 0, 3),
(7902, 'FORD', 'ANALYST', 7566, '04-MAR-1961', 3000, 0, 2),
(7934, 'MILLER', 'CLERK', 7782, '21-JAN-1972', 1300, 0, 1)
Π€ΠΈΠ³ΡΡΠ°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅:
- ΡΠ»ΡΠΆΠΈΡΠ΅Π» Ρ EMPNO 7369 Π΅ ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ Π½Π° 7902;
- ΡΠ»ΡΠΆΠΈΡΠ΅Π» Ρ EMPNO 7902 ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ Π½Π° 7566
- ΡΠ»ΡΠΆΠΈΡΠ΅Π» Ρ EMPNO 7566 ΠΏΠΎΠ΄ΡΠΈΠ½Π΅Π½ Π½Π° 7839
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ Π½Π° ΡΡΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ°. ΠΡΠ·Π΅Π»ΡΡ EMPLOYEE ΠΈΠΌΠ° Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΈ Π΅ ΡΠ²ΡΡΠ·Π°Π½ ΡΡΡ ΡΠ΅Π±Π΅ ΡΠΈ ΡΡΠ΅Π· Π²ΡΡΠ·ΠΊΠ° "ΠΏΠΎΠ΄Π°Π²Π°" (EmplReportsTo). EmplReportsTo Π΅ ΠΈΠΌΠ΅ΡΠΎ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°.
ΠΡΠ°ΠΉΠ½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° (EDGE) ΡΡΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π°ΡΡΠΈΠ±ΡΡΠΈ.
Π‘ΡΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ° Ρ Π²ΡΠ·Π»ΠΈ EmpNode
Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° Π²ΡΠ·Π΅Π» Π΅ Π΄ΠΎΡΡΠ° ΠΏΡΠΎΡΡ: ΠΊΡΠΌ ΠΈΠ·ΡΠ°Π·Π° Π‘ΠͺΠΠΠΠΠ’Π ΠΠΠ‘Π Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΊΡΠΌ ΠΊΡΠ°Ρ ΠΠΠ’Π ΠΠͺΠΠΠ.
CREATE TABLE dbo.EmpNode(
ID Int Identity(1,1),
EMPNO NUMERIC(4) NOT NULL,
ENAME VARCHAR(10),
MGR NUMERIC(4),
DNO INT
) AS NODE;
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°ΠΌΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΎΡ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° Π² Π³ΡΠ°ΡΠΈΡΠ½Π°. Π‘Π»Π΅Π΄Π²Π°ΡΠΈΡ INSERT Π²ΠΌΡΠΊΠ²Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ ΡΠ΅Π»Π°ΡΠΈΠΎΠ½Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° EMP.
INSERT INTO EmpNode(EMPNO,ENAME,MGR,DNO) select empno,ename,MGR,dno from emp
Π ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π½Π° Π²ΡΠ·Π»ΠΈΡΠ΅ Π² ΡΠΏΠ΅ΡΠΈΠ°Π»Π½Π° ΠΊΠΎΠ»ΠΎΠ½Π° $node_id_*
ID Π½Π° Ρ
ΠΎΡΡΠ° ΡΠ΅ ΡΡΡ
ΡΠ°Π½ΡΠ²Π° ΠΊΠ°ΡΠΎ JSON. ΠΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π½Π° ΡΠ°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ° ΡΡΠ΄ΡΡΠΆΠ°Ρ Π°ΡΡΠΈΠ±ΡΡΠΈΡΠ΅ Π½Π° Π²ΡΠ·Π΅Π»Π°.
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° ΡΡΠ±ΠΎΠ²Π΅ (EDGE)
Π‘ΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΊΡΠ°ΠΉΠ½Π° ΡΠ°Π±Π»ΠΈΡΠ° Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° Ρ Π²ΡΠ·Π»ΠΈ, Ρ ΠΈΠ·ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΊΠ»ΡΡΠΎΠ²Π°ΡΠ° Π΄ΡΠΌΠ° ΠΠΠ’Π Π ΠͺΠ.
CREATE TABLE empReportsTo(Deptno int) AS EDGE
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΠΌΠ΅ Π²ΡΡΠ·ΠΊΠΈΡΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ EMPNO ΠΈ Π.Π.Π .. ΠΡΠ³Π°Π½ΠΈΠ³ΡΠ°ΠΌΠ°ΡΠ° ΡΡΠ½ΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° ΠΊΠ°ΠΊ ΡΠ΅ ΠΏΠΈΡΠ΅ INSERT.
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 1),
(SELECT $node_id FROM EmpNode WHERE id = 13),20);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 2),
(SELECT $node_id FROM EmpNode WHERE id = 6),10);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 3),
(SELECT $node_id FROM EmpNode WHERE id = 6),10)
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 4),
(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 5),
(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 6),
(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 7),
(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 8),
(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 9),
(SELECT $node_id FROM EmpNode WHERE id = 9),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 10),
(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 11),
(SELECT $node_id FROM EmpNode WHERE id = 8),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 12),
(SELECT $node_id FROM EmpNode WHERE id = 6),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 13),
(SELECT $node_id FROM EmpNode WHERE id = 4),30);
INSERT INTO empReportsTo VALUES ((SELECT $node_id FROM EmpNode WHERE ID = 14),
(SELECT $node_id FROM EmpNode WHERE id = 7),30);
ΠΡΠ°ΠΉΠ½Π°ΡΠ° ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠΌΠ° ΡΡΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΏΡΡΠ²ΠΎ, $edge_id
β ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ Π½Π° ΡΡΠ±Π° ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° JSON. ΠΡΡΠ³ΠΈΡΠ΅ Π΄Π²Π΅ ($from_id
ΠΈ $to_id
) ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ²Π°Ρ Π²ΡΡΠ·ΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈΡΠ΅. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° ΡΡΠ±ΠΎΠ²Π΅ΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠΌΠ°Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°. Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΡΠΎΠ²Π° ΠΠ΅ΠΏΡΠ½ΠΎ.
Π‘ΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΈΠ·Π³Π»Π΅Π΄ΠΈ
Π ΡΠΈΡΡΠ΅ΠΌΠ΅Π½ ΠΈΠ·Π³Π»Π΅Π΄ sys.tables
ΠΠΌΠ° Π΄Π²Π΅ Π½ΠΎΠ²ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ:
- Π΅_ΡΡΠ±
- Π΅_Π²ΡΠ·Π΅Π»
SELECT t.is_edge,t.is_node,*
FROM sys.tables t
WHERE name like 'emp%'
ssms
ΠΠ±Π΅ΠΊΡΠΈΡΠ΅, ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π³ΡΠ°ΡΠΈΠΊΠΈΡΠ΅, ΡΠ΅ Π½Π°ΠΌΠΈΡΠ°Ρ Π² ΠΏΠ°ΠΏΠΊΠ°ΡΠ° ΠΡΠ°ΡΠΈΡΠ½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ. ΠΠΊΠΎΠ½Π°ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Ρ Π²ΡΠ·Π»ΠΈ Π΅ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π° Ρ ΡΠΎΡΠΊΠ°, Π° ΠΈΠΊΠΎΠ½Π°ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Ρ ΡΡΠ±ΠΎΠ²Π΅ Π΅ ΠΌΠ°ΡΠΊΠΈΡΠ°Π½Π° Ρ Π΄Π²Π° ΡΠ²ΡΡΠ·Π°Π½ΠΈ ΠΊΡΡΠ³Π° (ΠΊΠΎΠΈΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΠΌΠ°Π»ΠΊΠΎ ΠΊΠ°ΡΠΎ ΠΎΡΠΈΠ»Π°).
MATCH ΠΈΠ·ΡΠ°Π·
ΠΈΠ·ΡΠ°Π·ΡΠ²Π°Π½Π΅ MATCH Π²Π·Π΅ΡΠΈ ΠΎΡ CQL (Cypher Query Language). Π’ΠΎΠ²Π° Π΅ Π΅ΡΠ΅ΠΊΡΠΈΠ²Π΅Π½ Π½Π°ΡΠΈΠ½ Π·Π° Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π·Π° ΡΠ²ΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° Π³ΡΠ°ΡΠΈΠΊΠ°. CQL Π·Π°ΠΏΠΎΡΠ²Π° Ρ ΠΈΠ·ΡΠ°Π· MATCH.
ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ
MATCH (<graph_search_pattern>)
<graph_search_pattern>::=
{<node_alias> {
{ <-( <edge_alias> )- }
| { -( <edge_alias> )-> }
<node_alias>
}
}
[ { AND } { ( <graph_search_pattern> ) } ]
[ ,...n ]
<node_alias> ::=
node_table_name | node_alias
<edge_alias> ::=
edge_table_name | edge_alias
ΠΡΠΈΠΌΠ΅ΡΡ
ΠΠ΅ΠΊΠ° Π΄Π° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ°.
ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΠΏΠΎ-Π΄ΠΎΠ»Ρ ΠΏΠΎΠΊΠ°Π·Π²Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈΡΠ΅, Π½Π° ΠΊΠΎΠΈΡΠΎ Π‘ΠΌΠΈΡ ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡΡ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡ Π΄ΠΎΠΊΠ»Π°Π΄Π²Π°Ρ.
SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR
FROM
empnode e, empnode e1, empReportsTo m
WHERE
MATCH(e-(m)->e1)
and e.ENAME='SMITH'
Π‘Π»Π΅Π΄Π½Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° Π΅ Π·Π° Π½Π°ΠΌΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ ΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠΈ ΠΎΡ Π²ΡΠΎΡΠΎ Π½ΠΈΠ²ΠΎ Π·Π° Smith. ΠΠΊΠΎ ΠΏΡΠ΅ΠΌΠ°Ρ
Π½Π΅ΡΠ΅ ΠΎΡΠ΅ΡΡΠ°ΡΠ° ΠΠͺΠΠ, ΡΠΎΠ³Π°Π²Π° Π²ΡΠΈΡΠΊΠΈ ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ ΡΠ΅ Π±ΡΠ΄Π°Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΈ ΠΊΠ°ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ.
SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR
FROM
empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2
WHERE
MATCH(e-(m)->e1-(m1)->e2)
and e.ENAME='SMITH'
Π Π½Π°ΠΊΡΠ°Ρ, ΠΈΡΠΊΠ°Π½Π΅ Π·Π° ΡΠ»ΡΠΆΠΈΡΠ΅Π»ΠΈ ΠΈ ΠΌΠ΅Π½ΠΈΠ΄ΠΆΡΡΠΈ ΠΎΡ ΡΡΠ΅ΡΠΎ Π½ΠΈΠ²ΠΎ.
SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
MATCH(e-(m)->e1-(m1)->e2-(m2)->e3)
and e.ENAME='SMITH'
Π‘Π΅Π³Π° Π½Π΅ΠΊΠ° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΡΠ°, Π·Π° Π΄Π° Π²Π·Π΅ΠΌΠ΅ΠΌ ΡΠ΅ΡΠΎΠ²Π΅ΡΠ΅ Π½Π° Π‘ΠΌΠΈΡ.
SELECT
E.EMPNO,E.ENAME,E.MGR,E1.EMPNO,E1.ENAME,E1.MGR,E2.EMPNO,e2.ENAME,E2.MGR,E3.EMPNO,e3.ENAME,E3.MGR
FROM
empnode e, empnode e1, empReportsTo m ,empReportsTo m1, empnode e2, empReportsTo M2, empnode e3
WHERE
MATCH(e<-(m)-e1<-(m1)-e2<-(m2)-e3)
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
SQL Server 2017 ΡΠ΅ ΡΡΠ²ΡΡΠ΄ΠΈ ΠΊΠ°ΡΠΎ ΡΡΠ»ΠΎΡΡΠ½ΠΎ ΠΊΠΎΡΠΏΠΎΡΠ°ΡΠΈΠ²Π½ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π±ΠΈΠ·Π½Π΅Ρ ΠΠ’ Π½ΡΠΆΠ΄ΠΈ. ΠΡΡΠ²Π°ΡΠ° Π²Π΅ΡΡΠΈΡ Π½Π° SQL Graph Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅ΡΠ°Π²Π°ΡΠ°. ΠΠΎΡΠΈ Π²ΡΠΏΡΠ΅ΠΊΠΈ Π½ΡΠΊΠΎΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ, Π²Π΅ΡΠ΅ ΠΈΠΌΠ° Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ Π·Π° ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½Π΅ Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈΡΠ΅ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠΈΡΠ΅.
Π€ΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π½Π° SQL Graph Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½Π° Π² SQL Engine. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΠΊΠ°ΠΊΡΠΎ Π²Π΅ΡΠ΅ Π±Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΎ, SQL Server 2017 ΠΈΠΌΠ° ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ:
ΠΡΠΌΠ° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΠΎΠ»ΠΈΠΌΠΎΡΡΠΈΠ·ΡΠΌ.
- ΠΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ ΡΠ΅ ΡΠ°ΠΌΠΎ Π΅Π΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΈ Π²ΡΡΠ·ΠΊΠΈ.
- Edges Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Ρ ΡΠ²ΠΎΠΈΡΠ΅ ΠΊΠΎΠ»ΠΎΠ½ΠΈ $from_id ΠΈ $to_id ΡΡΠ΅Π· UPDATE.
- ΠΡΠ΅Ρ ΠΎΠ΄Π½ΠΈΡΠ΅ Π·Π°ΡΠ²Π°ΡΡΠ½ΠΈΡ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ, Π½ΠΎ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° CTE.
- ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° OLTP ΠΎΠ±Π΅ΠΊΡΠΈ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ°.
- ΠΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ (System-Versioned Temporal Table), Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΈ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ.
- Π’ΠΈΠΏΠΎΠ²Π΅ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡΠ΅ Π½Π° ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ Π½Π΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π±ΡΠ΄Π°Ρ Π΄Π΅ΠΊΠ»Π°ΡΠΈΡΠ°Π½ΠΈ ΠΊΠ°ΡΠΎ NODE ΠΈΠ»ΠΈ EDGE.
- ΠΡΡΡΡΠΎΡΠ°Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ ΠΊΡΠΌ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ.
- ΠΡΠΌΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π½Π°ΡΠΈΠ½ ΠΈΠ»ΠΈ Π½ΡΠΊΠ°ΠΊΡΠ² ΡΡΠ²Π΅ΡΠ½ΠΈΠΊ (ΡΡΠ²Π΅ΡΠ½ΠΈΠΊ) Π·Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ²Π°Π½Π΅ Π½Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Π² ΡΠ°Π±Π»ΠΈΡΠΈ Ρ Π³ΡΠ°ΡΠΈΠΊΠΈ.
- ΠΡΠΌΠ° GUI Π·Π° ΠΏΠΎΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° Π³ΡΠ°ΡΠΈΠΊΠΈ, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Power BI.
ΠΡΠΎΡΠ΅ΡΠ΅ΡΠ΅ ΠΎΡΠ΅:
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com