Skip to article frontmatterSkip to article content

Joins

import pymysql
pymysql.install_as_MySQLdb()
%load_ext sql
%config SqlMagic.autocommit=True
%sql mysql://root:simple@127.0.0.1
The sql extension is already loaded. To reload it, use:
  %reload_ext sql

JoinsΒΆ

%%sql
CREATE SCHEMA depend
 * mysql://root:***@127.0.0.1
1 rows affected.
[]
%%sql
use depend
 * mysql://root:***@127.0.0.1
0 rows affected.
[]
%%sql

CREATE TABLE person (
    person_id int,
    full_name varchar(60),
    PRIMARY KEY (person_id)
);
 * mysql://root:***@127.0.0.1
(pymysql.err.OperationalError) (1050, "Table 'person' already exists")
[SQL: CREATE TABLE person (
    person_id int,
    full_name varchar(60),
    PRIMARY KEY (person_id)
);]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
%%sql

CREATE TABLE dependent (
    person_id int,
    provider_id int,
    PRIMARY KEY (person_id),
    FOREIGN KEY (person_id) REFERENCES person(person_id), 
    FOREIGN KEY (provider_id) REFERENCES person(person_id))
 * mysql://root:***@127.0.0.1
0 rows affected.
[]
%%sql

INSERT INTO person (person_id, full_name) VALUES 
    (1, "Bob"),
    (2, "Anne"),
    (3, "Dave"),
    (4, "Carol")
 * mysql://root:***@127.0.0.1
4 rows affected.
[]
%%sql 
INSERT INTO dependent (person_id, provider_id) VALUES 
    (2, 1),
    (3, 1),
    (4, 2),
    (1, 4)
 * mysql://root:***@127.0.0.1
4 rows affected.
[]
%%sql
-- cross join
SELECT * FROM person as p1 JOIN person as p2
Loading...
%%sql
-- inner product: cartesian product restricted by a condition on joining attributes
SELECT * FROM person join dependent ON person.person_id = dependent.person_id
Loading...
%%sql
-- equijoin on a common attribute
SELECT * FROM person JOIN dependent USING (person_id) 
Loading...
%%sql
-- equijoin on a common attribute
SELECT * FROM person NATURAL JOIN dependent  
Loading...
%%sql
-- joining three tables
SELECT p1.*, dependent.*, provider.full_name as provider_name 
   FROM person as p1 JOIN dependent JOIN person as provider ON p1.person_id = dependent.person_id AND provider.person_id = dependent.provider_id 
Loading...