In [1]:
import pandas as pd 
import sqlite3

Dataset

In addition, here, we use FIFA 20 Complete Player Datasetet and European Soccer Database from Kaggle.com.

The datasets that we use from the above likes are:

  • Country.csv
  • League.csv
  • players_20.csv
  • Team.csv
  • teams_and_leagues.csv

Acknowledgements

The datasets are also publicly available website sofifa.com.

SQL Operators

In this article, we provide a summary of basic SQL Server commands and syntaxes. For sake of demonstrations SQL Server syntaxes, we use SQLite3. Moreover, the following function can help us to mimic SQL Server Environment in this Jupyter notebook.

In [2]:
connection = sqlite3.connect('FIFA.db')
cursor = connection.cursor()

def mySQL(Syntax): return pd.read_sql_query(Syntax, connection)

Here we provide a summary of popular SQL Server command with examples. For full notes, please see the official SQL Server documents at docs.microsoft.com.

Union [All]

SELECT A.Column1, A.Column2, ...
FROM
    TableA
UNION ALL
SELECT A.Column1, A.Column2, ...
FROM
    TableA

In the set theory, let $A$ represent TableA and $B$ represents TableB. Then, this querying data is equivalent to:

$$ A\cup B$$
In [3]:
mySQL("""
Select
    short_name,
    club
from
    players_20
Union All
Select
    short_name,
    club
from
    players_19
""")
Out[3]:
short_name club
0 L. Messi FC Barcelona
1 Cristiano Ronaldo Juventus
2 Neymar Jr Paris Saint-Germain
3 J. Oblak Atlético Madrid
4 E. Hazard Real Madrid
... ... ...
36043 P. Phillips Cork City
36044 A. Kaltner SpVgg Unterhaching
36045 Ma Junliang Guangzhou R&F FC
36046 C. Ehlich SpVgg Unterhaching
36047 E. Tweed Derry City

36048 rows × 2 columns

Intersect

SELECT A.Column1, A.Column2, ...
FROM
    TableA
INTERSECT
SELECT A.Column1, A.Column2, ...
FROM
    TableA

In the set theory, let $A$ represent TableA and $B$ represents TableB. Then, this querying data is equivalent to:

$$ A\cap B$$
In [4]:
mySQL("""
Select
    short_name,
    club
from
    players_20
Intersect
Select
    short_name,
    club
from
    players_19
""")
Out[4]:
short_name club
0 A. Abdellaoui FC Sion
1 A. Abedzadeh Clube Sport Marítimo
2 A. Ablet Henan Jianye FC
3 A. Abqar Málaga CF
4 A. Abrashi SC Freiburg
... ... ...
8846 Éder Lokomotiv Moscow
8847 Édundo Oliveira Cruzeiro
8848 Érico Sousa Accrington Stanley
8849 Óscar CD Leganés
8850 Óscar Plano Real Valladolid CF

8851 rows × 2 columns

Minus

SELECT A.Column1, A.Column2, ... FROM TableA
MINUS
SELECT A.Column1, A.Column2, ... FROM TableA

In the set theory, let $A$ represent TableA and $B$ represents TableB. Then, this querying data is equivalent to:

$$ A \setminus B$$

Like

SELECT
    column_list
FROM Table
    Where Column1 [Not] Like defined_pattern
In [5]:
mySQL("""
Select short_name, Club from players_20 where club like '%Juve%'
""")
Out[5]:
short_name club
0 Cristiano Ronaldo Juventus
1 G. Chiellini Juventus
2 P. Dybala Juventus
3 W. Szczęsny Juventus
4 M. Pjanić Juventus
5 L. Bonucci Juventus
6 M. de Ligt Juventus
7 G. Higuaín Juventus
8 B. Matuidi Juventus
9 Alex Sandro Juventus
10 M. Mandžukić Juventus
11 Douglas Costa Juventus
12 A. Rabiot Juventus
13 F. Bernardeschi Juventus
14 G. Buffon Juventus
15 S. Khedira Juventus
16 A. Ramsey Juventus
17 J. Cuadrado Juventus
18 M. Perin Juventus
19 D. Rugani Juventus
20 E. Can Juventus
21 R. Bentancur Juventus
22 Danilo Juventus
23 M. De Sciglio Juventus
24 M. Pjaca Juventus
25 M. Demiral Juventus
26 C. Pinsoglio Juventus
27 Matheus Pereira Juventus
28 L. Pellegrini Juventus
29 S. Beltrame Juventus
30 L. Clemenza Juventus
31 H. Rafia Juventus
32 D. Del Fabro Juventus

Value List

SELECT
    column_list
FROM Table
    Where Column1 [Not] in Value_List
In [6]:
mySQL("""
Select
    short_name,
    Club
from
    players_20
where
    club in ('Juventus')
""")
Out[6]:
short_name club
0 Cristiano Ronaldo Juventus
1 G. Chiellini Juventus
2 P. Dybala Juventus
3 W. Szczęsny Juventus
4 M. Pjanić Juventus
5 L. Bonucci Juventus
6 M. de Ligt Juventus
7 G. Higuaín Juventus
8 B. Matuidi Juventus
9 Alex Sandro Juventus
10 M. Mandžukić Juventus
11 Douglas Costa Juventus
12 A. Rabiot Juventus
13 F. Bernardeschi Juventus
14 G. Buffon Juventus
15 S. Khedira Juventus
16 A. Ramsey Juventus
17 J. Cuadrado Juventus
18 M. Perin Juventus
19 D. Rugani Juventus
20 E. Can Juventus
21 R. Bentancur Juventus
22 Danilo Juventus
23 M. De Sciglio Juventus
24 M. Pjaca Juventus
25 M. Demiral Juventus
26 C. Pinsoglio Juventus
27 Matheus Pereira Juventus
28 L. Pellegrini Juventus
29 S. Beltrame Juventus
30 L. Clemenza Juventus
31 H. Rafia Juventus
32 D. Del Fabro Juventus

Between

SELECT
    column_list
FROM Table
    Where Column1 between Low and High
In [7]:
mySQL("""
Select
    short_name,
    Club,
    Age
from
    players_20
where
    club in ('Juventus')
    and
    Age between 15 and 25
""")
Out[7]:
short_name club age
0 P. Dybala Juventus 25
1 M. de Ligt Juventus 19
2 A. Rabiot Juventus 24
3 F. Bernardeschi Juventus 25
4 D. Rugani Juventus 24
5 E. Can Juventus 25
6 R. Bentancur Juventus 22
7 M. Pjaca Juventus 24
8 M. Demiral Juventus 21
9 Matheus Pereira Juventus 21
10 L. Pellegrini Juventus 20
11 L. Clemenza Juventus 21
12 H. Rafia Juventus 20
13 D. Del Fabro Juventus 24

Null

SELECT
    column_list
FROM Table
    Where Column1 is [Not] Null