Webinar: Intro to Cypher

Preview:

Citation preview

|---------+--------------------+-----------------------------------------+--------------------+------------|| season | playerName | playerUri | playerPosition | playerAge ||---------+--------------------+-----------------------------------------+--------------------+------------|| 90/91 | Aldair | /aldair/profil/spieler/4151 | Centre Back | 24 || 90/91 | Thomas Häßler | /thomas-hassler/profil/spieler/553 | Attacking Midfield | 24 || 90/91 | Roberto Baggio | /roberto-baggio/profil/spieler/4153 | Secondary Striker | 23 || 90/91 | Karl-Heinz Riedle | /karl-heinz-riedle/profil/spieler/13806 | Centre Forward | 24 || 90/91 | Henrik Larsen | /henrik-larsen/profil/spieler/101330 | Attacking Midfield | 24 || 90/91 | Gheorghe Hagi | /gheorghe-hagi/profil/spieler/7939 | Attacking Midfield | 25 || 90/91 | Hristo Stoichkov | /hristo-stoichkov/profil/spieler/7938 | Left Wing | 24 || 90/91 | Brian Laudrup | /brian-laudrup/profil/spieler/39667 | Centre Forward | 21 || 90/91 | Miguel Ángel Nadal | /miguel-angel-nadal/profil/spieler/7676 | Centre Back | 23 ||---------+--------------------+-----------------------------------------+--------------------+------------|

|-------------------+---------------------+-------------------------------------+--------------------|| sellerClubName | sellerClubNameShort | sellerClubUri | sellerClubCountry ||-------------------+---------------------+-------------------------------------+--------------------|| SL Benfica | Benfica | /benfica/startseite/verein/294 | Portugal || 1. FC Köln | 1. FC Köln | /1-fc-koln/startseite/verein/3 | Germany || ACF Fiorentina | Fiorentina | /fiorentina/startseite/verein/430 | Italy || SV Werder Bremen | Werder Bremen | /werder-bremen/startseite/verein/86 | Germany || Lyngby BK | Lyngby BK | /lyngby-bk/startseite/verein/369 | Denmark || Steaua Bucharest | Steaua | /steaua/startseite/verein/301 | Romania || CSKA Sofia | CSKA Sofia | /cska-sofia/startseite/verein/208 | Bulgaria || KFC Uerdingen 05 | KFC Uerdingen | /kfc-uerdingen/startseite/verein/95 | Germany || RCD Mallorca | RCD Mallorca | /rcd-mallorca/startseite/verein/237 | Spain ||-------------------+---------------------+-------------------------------------+--------------------|

|----------------+--------------------+-------------------------------------+-------------------|| buyerClubName | buyerClubNameShort | buyerClubUri | buyerClubCountry ||----------------+--------------------+-------------------------------------+-------------------|| AS Roma | AS Roma | /as-roma/startseite/verein/12 | Italy || Juventus FC | Juventus | /juventus/startseite/verein/506 | Italy || Juventus FC | Juventus | /juventus/startseite/verein/506 | Italy || SS Lazio | Lazio | /lazio/startseite/verein/398 | Italy || AC Pisa 1909 | AC Pisa | /ac-pisa/startseite/verein/4172 | Italy || Real Madrid | Real Madrid | /real-madrid/startseite/verein/418 | Spain || FC Barcelona | FC Barcelona | /fc-barcelona/startseite/verein/131 | Spain || Bayern Munich | Bayern Munich | /bayern-munich/startseite/verein/27 | Germany || FC Barcelona | FC Barcelona | /fc-barcelona/startseite/verein/131 | Spain ||----------------+--------------------+-------------------------------------+-------------------|

|--------------------------------------------------------+-------------+---------------|| transferUri | transferFee | transferRank ||--------------------------------------------------------+-------------+---------------|| /jumplist/transfers/spieler/4151/transfer_id/6993 | £6.75m | 1 || /jumplist/transfers/spieler/553/transfer_id/2405 | £5.85m | 2 || /jumplist/transfers/spieler/4153/transfer_id/84533 | £5.81m | 3 || /jumplist/transfers/spieler/13806/transfer_id/19054 | £5.63m | 4 || /jumplist/transfers/spieler/101330/transfer_id/275067 | £5.03m | 5 || /jumplist/transfers/spieler/7939/transfer_id/19343 | £3.23m | 6 || /jumplist/transfers/spieler/7938/transfer_id/11563 | £2.25m | 7 || /jumplist/transfers/spieler/39667/transfer_id/90285 | £2.25m | 8 || /jumplist/transfers/spieler/7676/transfer_id/11828 | £2.10m | 9 ||--------------------------------------------------------+-------------+---------------|

players

id

name

position

clubs

id

name

country

transfers

id

fee

player_age

player_id

from_club_id

to_club_id

season

Records in tables

Nodes"Soft"

relationships computed at query time

"Hard" relationships built into the

data store

CREATE TABLE players (

"id" character varying(100)

NOT NULL PRIMARY KEY,

"name" character varying(150) NOT NULL,

"position" character varying(20)

);

INSERT INTO players

VALUES('/aldair/profil/spieler/4151', 'Aldair', 'Centre Back');

INSERT INTO players

VALUES('/thomas-hassler/profil/spieler/553', 'Thomas Häßler',

'Attacking Midfield');

INSERT INTO players VALUES('/roberto-baggio/profil/spieler/4153',

'Roberto Baggio', 'Secondary Striker');

CREATE TABLE clubs (

"id" character varying(100)

NOT NULL PRIMARY KEY,

"name" character varying(50) NOT NULL,

"country" character varying(50)

);

INSERT INTO clubs VALUES('/hertha-bsc/startseite/verein/44',

'Hertha BSC', 'Germany');

INSERT INTO clubs VALUES('/cfr-cluj/startseite/verein/7769', 'CFR

Cluj', 'Romania');

INSERT INTO clubs VALUES('/real-sociedad/startseite/verein/681',

'Real Sociedad', 'Spain');

CREATE TABLE transfers (

"id" character varying(100) NOT NULL PRIMARY KEY,

"fee" character varying(50) NOT NULL,

"numericFee" integer NOT NULL,

"player_age" smallint NOT NULL,

"season" character varying(5) NOT NULL,

"player_id" character varying(100) NOT NULL REFERENCES players (id),

"from_club_id" character varying(100) NOT NULL REFERENCES clubs (id),

"to_club_id" character varying(100) NOT NULL REFERENCES clubs (id)

);

INSERT INTO transfers VALUES('/jumplist/transfers/spieler/4151/transfer_id/6993', '

£6.75m', 6750000, '90/91', 24, '/aldair/profil/spieler/4151',

'/benfica/startseite/verein/294', '/as-roma/startseite/verein/12');

INSERT INTO transfers VALUES('/jumplist/transfers/spieler/553/transfer_id/2405', '

£5.85m', 5850000, '90/91', 24, '/thomas-hassler/profil/spieler/553',

'/1-fc-koln/startseite/verein/3', '/juventus/startseite/verein/506');

INSERT INTO transfers VALUES('/jumplist/transfers/spieler/4153/transfer_id/84533', '

£5.81m', 5810000, '90/91', 23, '/roberto-baggio/profil/spieler/4153',

'/fiorentina/startseite/verein/430', '/juventus/startseite/verein/506');

LOAD CSV WITH HEADERS FROM "(file|http)://" AS row

MATCH (:Label {property: row.header})

CREATE (:Label {property: row.header})

MERGE (:Label {property: row.header})

LOAD CSV WITH HEADERS FROM "(file|http)://" AS row

MATCH (:Label {property: row.header})

CREATE (:Label {property: row.header})

MERGE (:Label {property: row.header})

LOAD CSV WITH HEADERS FROM "(file|http)://" AS row

MATCH (:Label {property: row.header})

CREATE (:Label {property: row.header})

MERGE (:Label {property: row.header})

LOAD CSV WITH HEADERS FROM "(file|http)://" AS row

MATCH (:Label {property: row.header})

CREATE (:Label {property: row.header})

MERGE (:Label {property: row.header})

LOAD CSV WITH HEADERS FROM "(file|http)://" AS row

MATCH (:Label {property: row.header})

CREATE (:Label {property: row.header})

MERGE (:Label {property: row.header})

LOAD CSV WITH HEADERS

FROM "file:///transfers.csv"

AS row

RETURN COUNT(*)

LOAD CSV WITH HEADERS

FROM "file:///transfers.csv"

AS row

RETURN row

LIMIT 1

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

CREATE (player:Player {

id: row.playerUri,

name: row.playerName,

position: row.playerPosition

})

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

CREATE (player:Player {

id: row.playerUri,

name: row.playerName,

position: row.playerPosition

})

CREATE CONSTRAINT ON (player:Player)

ASSERT player.id IS UNIQUE

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

CREATE (player:Player {

id: row.playerUri,

name: row.playerName,

position: row.playerPosition

})

Node 25 already exists with label Player and property "id"=[/peter-lux/profil/spieler/84682]

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

MERGE (player:Player {id: row.playerUri})

ON CREATE SET player.name = row.playerName,

player.position = row.playerPosition

CREATE CONSTRAINT ON (club:Club)

ASSERT club.id IS UNIQUE

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

MERGE (club:Club {id: row.sellerClubUri})

ON CREATE SET club.name = row.sellerClubName,

club.country = row.sellerClubCountry;

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

MERGE (club:Club {id: row.buyerClubUri})

ON CREATE SET club.name = row.buyerClubName,

club.country = row.buyerClubCountry;

CREATE CONSTRAINT ON (transfer:Transfer)

ASSERT transfer.id IS UNIQUE

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

MATCH (player:Player {id: row.playerUri})

MATCH (source:Club {id: row.sellerClubUri})

MATCH (destination:Club {id: row.buyerClubUri})

MERGE (t:Transfer {id: row.transferUri})

ON CREATE SET t.season = row.season, t.rank = row.transferRank,

t.fee = row.transferFee

MERGE (t)-[:OF_PLAYER { age: row.playerAge }]->(player)

MERGE (t)-[:FROM_CLUB]->(source)

MERGE (t)-[:TO_CLUB]->(destination)

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

MATCH (player:Player {id: row.playerUri})

MATCH (source:Club {id: row.sellerClubUri})

MATCH (destination:Club {id: row.buyerClubUri})

MERGE (t:Transfer {id: row.transferUri})

ON CREATE SET t.season = row.season, t.rank = row.transferRank,

t.fee = row.transferFee

MERGE (t)-[:OF_PLAYER { age: row.playerAge }]->(player)

MERGE (t)-[:FROM_CLUB]->(source)

MERGE (t)-[:TO_CLUB]->(destination)

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

MATCH (player:Player {id: row.playerUri})

MATCH (source:Club {id: row.sellerClubUri})

MATCH (destination:Club {id: row.buyerClubUri})

MERGE (t:Transfer {id: row.transferUri})

ON CREATE SET t.season = row.season, t.rank = row.transferRank,

t.fee = row.transferFee

MERGE (t)-[:OF_PLAYER { age: row.playerAge }]->(player)

MERGE (t)-[:FROM_CLUB]->(source)

MERGE (t)-[:TO_CLUB]->(destination)

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

MATCH (player:Player {id: row.playerUri})

MATCH (source:Club {id: row.sellerClubUri})

MATCH (destination:Club {id: row.buyerClubUri})

MERGE (t:Transfer {id: row.transferUri})

ON CREATE SET t.season = row.season, t.rank = row.transferRank,

t.fee = row.transferFee

MERGE (t)-[:OF_PLAYER { age: row.playerAge }]->(player)

MERGE (t)-[:FROM_CLUB]->(source)

MERGE (t)-[:TO_CLUB]->(destination)

CREATE CONSTRAINT ON (club:Club)

ASSERT club.id IS UNIQUE

CREATE CONSTRAINT ON (club:Club)

ASSERT exists(club.name)

CREATE CONSTRAINT ON ()-[player:OF_PLAYER]-()

ASSERT exists(player.age)

SELECT *

FROM players

WHERE players.name = 'Cristiano Ronaldo'

SELECT *

FROM players

WHERE players.name = 'Cristiano Ronaldo'

MATCH (player:Player { name: "Cristiano Ronaldo" })

RETURN player

SELECT *

FROM players

WHERE players.name = 'Cristiano Ronaldo'

MATCH (player:Player { name: "Cristiano Ronaldo" })

RETURN player

SELECT *

FROM players

WHERE players.name = 'Cristiano Ronaldo'

MATCH (player:Player { name: "Cristiano Ronaldo" })

RETURN player

SELECT players.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

WHERE clubFrom.name = 'Tottenham Hotspur' AND clubTo.name = 'Manchester United'

SELECT players.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

WHERE clubFrom.name = 'Tottenham Hotspur' AND clubTo.name = 'Manchester United'

MATCH (from:Club)<-[:FROM_CLUB]-(transfer:Transfer)-[:TO_CLUB]->(to:Club),

(transfer)-[:OF_PLAYER]->(player)

WHERE from.name = "Tottenham Hotspur" AND to.name = "Manchester United"

RETURN player.name, transfer.numericFee, transfer.season

SELECT players.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

WHERE clubFrom.name = 'Tottenham Hotspur' AND clubTo.name = 'Manchester United'

MATCH (from:Club)<-[:FROM_CLUB]-(transfer:Transfer)-[:TO_CLUB]->(to:Club),

(transfer)-[:OF_PLAYER]->(player)

WHERE from.name = "Tottenham Hotspur" AND to.name = "Manchester United"

RETURN player.name, transfer.numericFee, transfer.season

MATCH (from:Club)<-[:FROM_CLUB]-(transfer:Transfer)-[:TO_CLUB]->(to:Club),

(transfer)-[:OF_PLAYER]->(player)

WHERE from.name = "Tottenham Hotspur" AND to.name = "Manchester United"

RETURN player.name, transfer.numericFee, transfer.season

|------------------------------------------+--------------------+--------------------|

| playerUri | playerName | playerNationality |

|------------------------------------------+--------------------+--------------------|

| /aldair/profil/spieler/4151 | Aldair | Brazil |

| /thomas-hassler/profil/spieler/553 | Thomas Häßler | Germany |

| /roberto-baggio/profil/spieler/4153 | Roberto Baggio | Italy |

| /karl-heinz-riedle/profil/spieler/13806 | Karl-Heinz Riedle | Germany |

| /henrik-larsen/profil/spieler/101330 | Henrik Larsen | Denmark |

| /gheorghe-hagi/profil/spieler/7939 | Gheorghe Hagi | Romania |

| /hristo-stoichkov/profil/spieler/7938 | Hristo Stoichkov | Bulgaria |

| /brian-laudrup/profil/spieler/39667 | Brian Laudrup | Denmark |

| /miguel-angel-nadal/profil/spieler/7676 | Miguel Ángel Nadal | Spain |

|------------------------------------------+--------------------+--------------------|

players

id

name

position

nationality

clubs

id

name

country

transfers

id

fee

player_age

player_id

from_club_id

to_club_id

season

ALTER TABLE players

ADD COLUMN nationality varying(30);

UPDATE players

SET nationality = 'Brazil'

WHERE players.id = '/aldair/profil/spieler/4151';

UPDATE players

SET nationality = 'Germany'

WHERE players.id ='/ulf-kirsten/profil/spieler/74';

UPDATE players

SET nationality = 'England'

WHERE players.id ='/john-lukic/profil/spieler/28241';

LOAD CSV WITH HEADERS FROM "file:///transfers.csv" AS row

MATCH (player:Player {id: row.playerUri})

SET player.nationality = row.playerNationality

SELECT players.name, clubFrom.name, clubTo.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

WHERE clubFrom.country = 'England' AND clubTo.country = 'England'

AND players.nationality = 'England'

ORDER BY t."numericFee" DESC

LIMIT 10

SELECT players.name, clubFrom.name, clubTo.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

WHERE clubFrom.country = 'England' AND clubTo.country = 'England'

AND players.nationality = 'England'

ORDER BY t."numericFee" DESC

LIMIT 10

MATCH (to:Club)<-[:TO_CLUB]-(t:Transfer)-[:FROM_CLUB]-(from:Club), (t)-[:OF_PLAYER]->(player:Player)

WHERE to.country = "England" AND from.country = "England" AND player.nationality = "England"

RETURN player.name, from.name, to.name, t.numericFee, t.season

ORDER BY t.numericFee DESC

LIMIT 10

SELECT players.name, clubFrom.name, clubTo.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

WHERE clubFrom.country = 'England' AND clubTo.country = 'England'

AND players.nationality = 'England'

ORDER BY t."numericFee" DESC

LIMIT 10

MATCH (to:Club)<-[:TO_CLUB]-(t:Transfer)-[:FROM_CLUB]-(from:Club), (t)-[:OF_PLAYER]->(player:Player)

WHERE to.country = "England" AND from.country = "England" AND player.nationality = "England"

RETURN player.name, from.name, to.name, t.numericFee, t.season

ORDER BY t.numericFee DESC

LIMIT 10

|----------------------+----------------|| country | confederation ||----------------------+----------------|| Afghanistan | afc || Albania | uefa || Algeria | caf || American Samoa | ofc || Andorra | uefa || Angola | caf || Anguilla | concacaf || Antigua and Barbuda | concacaf || Argentina | conmebol ||----------------------+----------------|

|-----------+-----------+-------------------------------------------------|| urlName | shortName | region ||-----------+-----------+-------------------------------------------------|| afc | AFC | Asia || uefa | UEFA | Europe || ofc | OFC | Oceania || conmebol | CONMEBOL | South America || concacaf | CONCACAF | North American, Central American and Caribbean || caf | CAF | Africa ||-----------+-----------+-------------------------------------------------|

players

id

name

position

country_id

clubs

id

name

country_id

transfers

id

fee

player_age

player_id

from_club_id

to_club_id

season

countries

id

name

confederation_id

confederations

id

shortName

name

region

CREATE TABLE confederations (

"id" character varying(10)

NOT NULL PRIMARY KEY,

"shortName" character varying(50) NOT NULL,

"name" character varying(100) NOT NULL,

"region" character varying(100) NOT NULL

);

INSERT INTO confederations VALUES('afc', 'AFC', 'Asian Football

Confederation', 'Asia');

INSERT INTO confederations VALUES('uefa', 'UEFA', 'Union of

European Football Associations', 'Europe');

INSERT INTO confederations VALUES('ofc', 'OFC', 'Oceania Football

Confederation', 'Oceania');

CREATE TABLE countries (

"code" character varying(3)

NOT NULL PRIMARY KEY,

"name" character varying(50)

NOT NULL,

"federation" character varying(10) NOT NULL

REFERENCES confederations (id)

);

INSERT INTO countries VALUES('MNE', 'Montenegro', 'uefa');

INSERT INTO countries VALUES('LTU', 'Lithuania', 'uefa');

INSERT INTO countries VALUES('CAM', 'Cambodia', 'afc');

INSERT INTO countries VALUES('SUI', 'Switzerland', 'uefa');

INSERT INTO countries VALUES('ETH', 'Ethiopia', 'caf');

INSERT INTO countries VALUES('ARU', 'Aruba', 'concacaf');

INSERT INTO countries VALUES('SWZ', 'Swaziland', 'caf');

INSERT INTO countries VALUES('PLE', 'Palestine', 'afc');

ALTER TABLE clubs

ADD COLUMN country_id character varying(3)

REFERENCES countries(code);

UPDATE clubs AS cl

SET country_id = c.code

FROM clubs

INNER JOIN countries AS c

ON c.name = clubs.country

WHERE cl.id = clubs.id;

# select * from clubs limit 5;

id | name | country | country_id

----------------------------------------+-----------------------------+---------------+------------

/san-jose-clash/startseite/verein/4942 | San Jose Clash | United States | USA

/chicago/startseite/verein/432 | Chicago Fire | United States | USA

/gz-evergrande/startseite/verein/10948 | Guangzhou Evergrande Taobao | China | CHN

/as-vita-club/startseite/verein/2225 | AS Vita Club Kinshasa | Congo DR | CGO

/vicenza/startseite/verein/2655 | Vicenza Calcio | Italy | ITA

(6 rows)

ALTER TABLE clubs

DROP COLUMN country;

ALTER TABLE players

ADD COLUMN country_id character varying(3)

REFERENCES countries(code);

UPDATE players AS p

SET country_id = c.code

FROM players

INNER JOIN countries AS c

ON c.name = players.nationality

WHERE p.id = players.id;

# select * from players limit 5;

id | name | position | nationality | country_id

-----------------------------------------+-------------------+--------------------+-------------+------------

/dalian-atkinson/profil/spieler/200738 | Dalian Atkinson | Attacking Midfield | England | ENG

/steve-redmond/profil/spieler/177056 | Steve Redmond | Centre Back | England | ENG

/bert-konterman/profil/spieler/6252 | Bert Konterman | Centre Back | Netherlands | NED

/lee-philpott/profil/spieler/228030 | Lee Philpott | Midfield | England | ENG

/tomasz-frankowski/profil/spieler/14911 | Tomasz Frankowski | Centre Forward | Poland | POL

(5 rows)

ALTER TABLE players

DROP COLUMN nationality;

LOAD CSV WITH HEADERS FROM "file:///confederations.csv" AS row

MERGE (c:Confederation {id: row.urlName})

ON CREATE SET c.shortName = row.shortName,

c.region = row.region,

c.name = row.name

LOAD CSV WITH HEADERS FROM "file:///countries.csv" AS row

MATCH (conf:Confederation {id: row.confederation })

MERGE (country:Country {id: row.countryCode})

ON CREATE SET country.name = row.country

MERGE (country)-[:PART_OF]->(conf)

MATCH (club:Club)

MATCH (country:Country {name: club.country})

MERGE (club)-[:PART_OF]->(country)

REMOVE club.country

MATCH (player:Player)

MATCH (country:Country {name: player.nationality})

MERGE (player)-[:PLAYS_FOR]->(country)

REMOVE player.nationality

SELECT players.name, clubFrom.name, clubTo.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

WHERE clubFrom.country = 'England' AND clubTo.country = 'England'

AND players.nationality = 'England'

ORDER BY t."numericFee" DESC

LIMIT 10

MATCH (to:Club)<-[:TO_CLUB]-(t:Transfer)-[:FROM_CLUB]-(from:Club), (t)-[:OF_PLAYER]->(player:Player)

WHERE to.country = "England" AND from.country = "England" AND player.nationality = "England"

RETURN player.name, from.name, to.name, t.numericFee, t.season

ORDER BY t.numericFee DESC

LIMIT 10

SELECT players.name, clubFrom.name, clubTo.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

JOIN countries AS fromCount ON clubFrom.country_id = fromCount.code

JOIN countries AS toCount ON clubTo.country_id = toCount.code

JOIN countries AS playerCount ON players.country_id = playerCount.code

WHERE fromCount.name = 'England' AND toCount.name = 'England' AND playerCount.name = 'England'

ORDER BY t."numericFee" DESC

LIMIT 10

MATCH (to:Club)<-[:TO_CLUB]-(t:Transfer)-[:FROM_CLUB]-(from:Club), (t)-[:OF_PLAYER]->(player:Player),

(player)-[:PLAYS_FOR]->(country:Country), (to)-[:PART_OF]->(country)<-[:PART_OF]-(from)

WHERE country.name = "England"

RETURN player.name, from.name, to.name, t.numericFee, t.season

ORDER BY t.numericFee DESC

LIMIT 10

SELECT players.name, clubFrom.name, clubTo.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

JOIN countries AS fromCount ON clubFrom.country_id = fromCount.code

JOIN countries AS toCount ON clubTo.country_id = toCount.code

JOIN countries AS playerCount ON players.country_id = playerCount.code

WHERE fromCount.name = 'England' AND toCount.name = 'England' AND playerCount.name = 'England'

ORDER BY t."numericFee" DESC

LIMIT 10

MATCH (to:Club)<-[:TO_CLUB]-(t:Transfer)-[:FROM_CLUB]-(from:Club), (t)-[:OF_PLAYER]->(player:Player),

(player)-[:PLAYS_FOR]->(country:Country), (to)-[:PART_OF]->(country)<-[:PART_OF]-(from)

WHERE country.name = "England"

RETURN player.name, from.name, to.name, t.numericFee, t.season

ORDER BY t.numericFee DESC

LIMIT 10

SELECT players.name, clubFrom.name, clubTo.name, t."numericFee", t.season

FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

JOIN countries AS fromCount ON clubFrom.country_id = fromCount.code

JOIN countries AS toCount ON clubTo.country_id = toCount.code

JOIN countries AS playerCount ON players.country_id = playerCount.code

WHERE fromCount.name = 'England' AND toCount.name = 'England' AND playerCount.name = 'England'

ORDER BY t."numericFee" DESC

LIMIT 10

MATCH (to:Club)<-[:TO_CLUB]-(t:Transfer)-[:FROM_CLUB]-(from:Club), (t)-[:OF_PLAYER]->(player:Player),

(player)-[:PLAYS_FOR]->(country:Country), (to)-[:PART_OF]->(country)<-[:PART_OF]-(from)

WHERE country.name = "England"

RETURN player.name, from.name, to.name, t.numericFee, t.season

ORDER BY t.numericFee DESC

LIMIT 10

SELECT * FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

JOIN countries AS fromCountry ON clubFrom.country_id = fromCountry.code

JOIN countries AS toCountry ON clubTo.country_id = toCountry.code

JOIN confederations AS fromConfederation ON fromCountry.federation = fromConfederation.id

JOIN confederations AS toConfederation ON toCountry.federation = toConfederation.id

WHERE fromConfederation.id = 'afc' AND toConfederation.id = 'uefa'

ORDER BY t."numericFee" DESC

LIMIT 10

MATCH (to:Club)<-[:TO_CLUB]-(t:Transfer)-[:FROM_CLUB]-(from:Club), (t)-[:OF_PLAYER]->(player:Player),

(from)-[:PART_OF*2]->(:Confederation {id: "afc"}),

(to)-[:PART_OF*2]->(:Confederation {id: "uefa"})

RETURN player.name, from.name, to.name, t.numericFee, t.season

ORDER BY t.numericFee DESC

LIMIT 10

SELECT * FROM transfers AS t

JOIN clubs AS clubFrom ON t.from_club_id = clubFrom.id

JOIN clubs AS clubTo ON t.to_club_id = clubTo.id

JOIN players ON t.player_id = players.id

JOIN countries AS fromCountry ON clubFrom.country_id = fromCountry.code

JOIN countries AS toCountry ON clubTo.country_id = toCountry.code

JOIN confederations AS fromConfederation ON fromCountry.federation = fromConfederation.id

JOIN confederations AS toConfederation ON toCountry.federation = toConfederation.id

WHERE fromConfederation.id = 'afc' AND toConfederation.id = 'uefa'

ORDER BY t."numericFee" DESC

LIMIT 10

MATCH (to:Club)<-[:TO_CLUB]-(t:Transfer)-[:FROM_CLUB]-(from:Club), (t)-[:OF_PLAYER]->(player:Player),

(from)-[:PART_OF*2]->(:Confederation {id: "afc"}),

(to)-[:PART_OF*2]->(:Confederation {id: "uefa"})

RETURN player.name, from.name, to.name, t.numericFee, t.season

ORDER BY t.numericFee DESC

LIMIT 10

# \dt

List of relations

Schema | Name | Type | Owner

--------+----------------+-------+-------------

public | clubs | table | markneedham

public | confederations | table | markneedham

public | countries | table | markneedham

public | players | table | markneedham

public | transfers | table | markneedham

(5 rows)

CALL db.labels()

+=============+|label |+=============+|Player |+-------------+|Club |+-------------+|Transfer |+-------------+|Loan |+-------------+|Confederation|+-------------+|Country |+-------------+

# \d+ countries

Table "public.countries"

Column | Type | Modifiers | Storage | Stats target | Description

------------+-----------------------+-----------+----------+--------------+-------------

code | character varying(3) | not null | extended | |

name | character varying(50) | not null | extended | |

federation | character varying(10) | not null | extended | |

Indexes:

"pk_countries" PRIMARY KEY, btree (code)

Foreign-key constraints:

"countries_federation_fkey" FOREIGN KEY (federation) REFERENCES confederations(id)

Referenced by:

TABLE "players" CONSTRAINT "playersfk" FOREIGN KEY (country_id) REFERENCES countries(code)

MATCH FULL

CALL db.indexes()

╒════════════════════════╤════════╤══════════════════════╕│"description" │"state" │"type" │╞════════════════════════╪════════╪══════════════════════╡│"INDEX ON :Club(id)" │"ONLINE"│"node_unique_property"│├────────────────────────┼────────┼──────────────────────┤│"INDEX ON :Club(name)" │"ONLINE"│"node_label_property" │├────────────────────────┼────────┼──────────────────────┤│"INDEX ON :Player(id)" │"ONLINE"│"node_unique_property"│├────────────────────────┼────────┼──────────────────────┤│"INDEX ON :Player(name)"│"ONLINE"│"node_label_property" │└────────────────────────┴────────┴──────────────────────┘

CALL db.constraints()

╒══════════════════════════════════════════════════════════════════════════╕│"description" │╞══════════════════════════════════════════════════════════════════════════╡│"CONSTRAINT ON ( club:Club ) ASSERT club.id IS UNIQUE" │├──────────────────────────────────────────────────────────────────────────┤│"CONSTRAINT ON ( club:Club ) ASSERT exists(club.name)" │├──────────────────────────────────────────────────────────────────────────┤│"CONSTRAINT ON ( player:Player ) ASSERT player.id IS UNIQUE" │├──────────────────────────────────────────────────────────────────────────┤│"CONSTRAINT ON ()-[ of_player:OF_PLAYER ]-() ASSERT exists(of_player.age)"│└──────────────────────────────────────────────────────────────────────────┘

MATCH (country:Country)

RETURN keys(country), COUNT(*) AS times

+-----------------------+

| keys(country) | times |

+-----------------------+

| ["id","name"] | 198 |

+-----------------------+

MATCH (club:Club)

RETURN keys(club), COUNT(*) AS times

+---------------------------------+

| keys(club) | times |

+---------------------------------+

| ["id","name"] | 806 |

| ["name","country","id"] | 1 |

+---------------------------------+

CALL db.schema()

# SELECT * FROM clubs where country_id is null;

id | name | country | country_id

---------------------------------------+-------------------------+---------------+------------

/unknown/startseite/verein/75 | Unknown | |

/pohang/startseite/verein/311 | Pohang Steelers | Korea, South |

/bluewings/startseite/verein/3301 | Suwon Samsung Bluewings | Korea, South |

/ulsan/startseite/verein/3535 | Ulsan Hyundai | Korea, South |

/africa-sports/startseite/verein/2936 | Africa Sports | Cote d'Ivoire |

/monaco/startseite/verein/162 | AS Monaco | Monaco |

/jeonbuk/startseite/verein/6502 | Jeonbuk Hyundai Motors | Korea, South |

/busan/startseite/verein/2582 | Busan IPark | Korea, South |

(8 rows)

MATCH (club:Club)

WHERE NOT (club)-[:PART_OF]->()

RETURN club

+=====================================================================+

|club |

+=====================================================================+

|{name: Unknown, id: /unknown/startseite/verein/75} |

+---------------------------------------------------------------------+

|{country: Monaco, name: AS Monaco, id: /monaco/startseite/verein/162}|

+---------------------------------------------------------------------+

# drop table countries;

ERROR: cannot drop table countries because other objects depend

on it

DETAIL: constraint playersfk on table players depends on table

countries

HINT: Use DROP ... CASCADE to drop the dependent objects too.

MATCH (country:Country)

DELETE country

org.neo4j.kernel.api.exceptions.TransactionFailureException:

Node record Node[11306,used=false,....] still has relationships

MATCH (country:Country)

DETACH DELETE country

Deleted 198 nodes, deleted 5071 relationships,

statement executed in 498 ms.