@@ -17,19 +17,22 @@ ms.author: shkale
1717manager : craigg
1818monikerRange : " =azuresqldb-current||>=sql-server-2017||=sqlallproducts-allversions||>=sql-server-linux-2017||=azuresqldb-mi-current"
1919---
20+
2021# Create a graph database and run some pattern matching queries using T-SQL
22+
2123[ !INCLUDE[ tsql-appliesto-ss2017-asdb-xxxx-xxx-md] ( ../../includes/tsql-appliesto-ss2017-asdb-xxxx-xxx-md.md )]
2224
2325This sample provides a [ !INCLUDE[ tsql-md] ( ../../includes/tsql-md.md )] script to create a graph database with nodes and edges and then use the new MATCH clause to match some patterns and traverse through the graph. This sample script will work on both Azure SQL Database and [ !INCLUDE[ sssqlv14] ( ../../includes/sssqlv14-md.md )]
24-
25- ## Sample Schema
26- This sample creates a graph schema, as showed in Figure 1, for a hypothetical social network that has People, Restaurant and City nodes. These nodes are connected to each other using Friends, Likes, LivesIn and LocatedIn edges.
26+
27+ ## Sample Schema
28+
29+ This sample creates a graph schema, as showed in Figure 1, for a hypothetical social network that has People, Restaurant and City nodes. These nodes are connected to each other using Friends, Likes, LivesIn and LocatedIn edges.
2730
2831![ person-cities-restaurants-tables] ( ../../relational-databases/graphs/media/person-cities-restaurants-tables.png " Sql graph database sample ")
2932Figure 1: Sample schema with restaurant, city, person nodes and LivesIn, LocatedIn, Likes edges.
3033
31-
3234## Sample Script
35+
3336```
3437-- Create a graph demo database
3538CREATE DATABASE graphdemo;
4043
4144-- Create NODE tables
4245CREATE TABLE Person (
43- ID INTEGER PRIMARY KEY,
46+ ID INTEGER PRIMARY KEY,
4447 name VARCHAR(100)
4548) AS NODE;
4649
4750CREATE TABLE Restaurant (
48- ID INTEGER NOT NULL,
49- name VARCHAR(100),
51+ ID INTEGER NOT NULL,
52+ name VARCHAR(100),
5053 city VARCHAR(100)
5154) AS NODE;
5255
5356CREATE TABLE City (
54- ID INTEGER PRIMARY KEY,
55- name VARCHAR(100),
57+ ID INTEGER PRIMARY KEY,
58+ name VARCHAR(100),
5659 stateName VARCHAR(100)
5760) AS NODE;
5861
@@ -77,43 +80,43 @@ INSERT INTO City VALUES (1,'Bellevue','wa');
7780INSERT INTO City VALUES (2,'Seattle','wa');
7881INSERT INTO City VALUES (3,'Redmond','wa');
7982
80- -- Insert into edge table. While inserting into an edge table,
83+ -- Insert into edge table. While inserting into an edge table,
8184-- you need to provide the $node_id from $from_id and $to_id columns.
82- INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE id = 1),
83- (SELECT $node_id FROM Restaurant WHERE id = 1),9);
84- INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE id = 2),
85- (SELECT $node_id FROM Restaurant WHERE id = 2),9);
86- INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE id = 3),
87- (SELECT $node_id FROM Restaurant WHERE id = 3),9);
88- INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE id = 4),
89- (SELECT $node_id FROM Restaurant WHERE id = 3),9);
90- INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE id = 5),
91- (SELECT $node_id FROM Restaurant WHERE id = 3),9);
92-
93- INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE id = 1),
94- (SELECT $node_id FROM City WHERE id = 1));
95- INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE id = 2),
96- (SELECT $node_id FROM City WHERE id = 2));
97- INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE id = 3),
98- (SELECT $node_id FROM City WHERE id = 3));
99- INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE id = 4),
100- (SELECT $node_id FROM City WHERE id = 3));
101- INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE id = 5),
102- (SELECT $node_id FROM City WHERE id = 1));
103-
104- INSERT INTO locatedIn VALUES ((SELECT $node_id FROM Restaurant WHERE id = 1),
105- (SELECT $node_id FROM City WHERE id =1));
106- INSERT INTO locatedIn VALUES ((SELECT $node_id FROM Restaurant WHERE id = 2),
107- (SELECT $node_id FROM City WHERE id =2));
108- INSERT INTO locatedIn VALUES ((SELECT $node_id FROM Restaurant WHERE id = 3),
109- (SELECT $node_id FROM City WHERE id =3));
110-
111- -- Insert data into the friendof edge.
112- INSERT INTO friendof VALUES ((SELECT $NODE_ID FROM person WHERE ID = 1), (SELECT $NODE_ID FROM person WHERE ID = 2));
113- INSERT INTO friendof VALUES ((SELECT $NODE_ID FROM person WHERE ID = 2), (SELECT $NODE_ID FROM person WHERE ID = 3));
114- INSERT INTO friendof VALUES ((SELECT $NODE_ID FROM person WHERE ID = 3), (SELECT $NODE_ID FROM person WHERE ID = 1));
115- INSERT INTO friendof VALUES ((SELECT $NODE_ID FROM person WHERE ID = 4), (SELECT $NODE_ID FROM person WHERE ID = 2));
116- INSERT INTO friendof VALUES ((SELECT $NODE_ID FROM person WHERE ID = 5), (SELECT $NODE_ID FROM person WHERE ID = 4));
85+ INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE ID = 1),
86+ (SELECT $node_id FROM Restaurant WHERE ID = 1),9);
87+ INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE ID = 2),
88+ (SELECT $node_id FROM Restaurant WHERE ID = 2),9);
89+ INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE ID = 3),
90+ (SELECT $node_id FROM Restaurant WHERE ID = 3),9);
91+ INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE ID = 4),
92+ (SELECT $node_id FROM Restaurant WHERE ID = 3),9);
93+ INSERT INTO likes VALUES ((SELECT $node_id FROM Person WHERE ID = 5),
94+ (SELECT $node_id FROM Restaurant WHERE ID = 3),9);
95+
96+ INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE ID = 1),
97+ (SELECT $node_id FROM City WHERE ID = 1));
98+ INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE ID = 2),
99+ (SELECT $node_id FROM City WHERE ID = 2));
100+ INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE ID = 3),
101+ (SELECT $node_id FROM City WHERE ID = 3));
102+ INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE ID = 4),
103+ (SELECT $node_id FROM City WHERE ID = 3));
104+ INSERT INTO livesIn VALUES ((SELECT $node_id FROM Person WHERE ID = 5),
105+ (SELECT $node_id FROM City WHERE ID = 1));
106+
107+ INSERT INTO locatedIn VALUES ((SELECT $node_id FROM Restaurant WHERE ID = 1),
108+ (SELECT $node_id FROM City WHERE ID =1));
109+ INSERT INTO locatedIn VALUES ((SELECT $node_id FROM Restaurant WHERE ID = 2),
110+ (SELECT $node_id FROM City WHERE ID =2));
111+ INSERT INTO locatedIn VALUES ((SELECT $node_id FROM Restaurant WHERE ID = 3),
112+ (SELECT $node_id FROM City WHERE ID =3));
113+
114+ -- Insert data into the friendOf edge.
115+ INSERT INTO friendOf VALUES ((SELECT $NODE_ID FROM Person WHERE ID = 1), (SELECT $NODE_ID FROM Person WHERE ID = 2));
116+ INSERT INTO friendOf VALUES ((SELECT $NODE_ID FROM Person WHERE ID = 2), (SELECT $NODE_ID FROM Person WHERE ID = 3));
117+ INSERT INTO friendOf VALUES ((SELECT $NODE_ID FROM Person WHERE ID = 3), (SELECT $NODE_ID FROM Person WHERE ID = 1));
118+ INSERT INTO friendOf VALUES ((SELECT $NODE_ID FROM Person WHERE ID = 4), (SELECT $NODE_ID FROM Person WHERE ID = 2));
119+ INSERT INTO friendOf VALUES ((SELECT $NODE_ID FROM Person WHERE ID = 5), (SELECT $NODE_ID FROM Person WHERE ID = 4));
117120
118121
119122-- Find Restaurants that John likes
@@ -132,11 +135,11 @@ AND person1.name='John';
132135SELECT Person.name
133136FROM Person, likes, Restaurant, livesIn, City, locatedIn
134137WHERE MATCH (Person-(likes)->Restaurant-(locatedIn)->City AND Person-(livesIn)->City);
135-
136138```
137139
138140## Clean Up
139141Clean up the schema and database created for the sample.
142+
140143```
141144USE graphdemo;
142145go
@@ -153,8 +156,6 @@ USE master;
153156go
154157DROP DATABASE graphdemo;
155158go
156-
157-
158159```
159160
160161## Script explanation
0 commit comments