Authors
Customers
Orders
Genres
Reviews
Versions
This is not marriage counseling
Authors
Customers
Orders
Genres
Reviews
Versions
Authors
Customers
Orders
Genres
Reviews
Versions
Authors
Customers
Orders
Genres
Reviews
Versions
The Most Common Relationship
CUSTOMERS & ORDERS
We Want To Store...
first_name | last_name | order_date | amount | |
---|---|---|---|---|
Boy | George | george@gmail.com | '2016/02/10' | 99.99 |
Boy | George | george@gmail.com | '2017/11/11' | 35.50 |
George | Michael | gm@gmail.com | '2014/12/12' | 800.67 |
George | Michael | gm@gmail.com | '2015/01/03' | 12.50 |
David | Bowie | david@gmail.com | NULL | NULL |
Blue | Steele | blue@gmail.com | NULL | NULL |
We Could Use One Table...
customer_id | first_name | last_name | |
---|---|---|---|
1 | Boy | George | george@gmail.com |
2 | George | Michael | gm@gmail.com |
3 | David | Bowie | david@gmail.com |
4 | Blue | Steele | blue@gmail.com |
order_id | order_date | amount | customer_id |
---|---|---|---|
1 | '2016/02/10' | 99.99 | 1 |
2 | '2017/11/11' | 35.50 | 1 |
3 | '2014/12/12' | 800.67 | 2 |
4 | '2015/01/03' | 12.50 | 2 |
CUSTOMERS
ORDERS
customer_id | first_name | last_name | |
---|---|---|---|
1 | Boy | George | george@gmail.com |
2 | George | Michael | gm@gmail.com |
3 | David | Bowie | david@gmail.com |
4 | Blue | Steele | blue@gmail.com |
order_id | order_date | amount | customer_id |
---|---|---|---|
1 | '2016/02/10' | 99.99 | 1 |
2 | '2017/11/11' | 35.50 | 1 |
3 | '2014/12/12' | 800.67 | 2 |
4 | '2015/01/03' | 12.50 | 2 |
CUSTOMERS
ORDERS
id | first_name | last_name | |
---|---|---|---|
1 | Boy | George | george@gmail.com |
2 | George | Michael | gm@gmail.com |
3 | David | Bowie | david@gmail.com |
4 | Blue | Steele | blue@gmail.com |
id | order_date | amount | customer_id |
---|---|---|---|
1 | '2016/02/10' | 99.99 | 1 |
2 | '2017/11/11' | 35.50 | 1 |
3 | '2014/12/12' | 800.67 | 2 |
4 | '2015/01/03' | 12.50 | 2 |
CUSTOMERS
ORDERS
Let's Get Coding!
I'm Sorry This Diagram Is So Ugly
INNER JOIN
A
B
Select all records from A and B where the join condition is met
SELECT * FROM customers
JOIN orders
ON customers.id = orders.customer_id;
INNER JOIN
Customers
SELECT * FROM customers
JOIN orders
ON customers.id = orders.customer_id;
Orders
LEFT JOIN
A
B
Select everything from A, along with any matching records in B
RIGHT JOIN
Select everything from B, along with any matching records in A
B
A
WRITE THIS SCHEMA
INSERT INTO students (first_name) VALUES
('Caleb'), ('Samantha'), ('Raj'), ('Carlos'), ('Lisa');
INSERT INTO papers (student_id, title, grade ) VALUES
(1, 'My First Book Report', 60),
(1, 'My Second Book Report', 75),
(2, 'Russian Lit Through The Ages', 94),
(2, 'De Montaigne and The Art of The Essay', 98),
(4, 'Borges and Magical Realism', 89);
INSERT THIS DATA
(COPY AND PASTE IT)
+------------+---------------------------------------+-------+
| first_name | title | grade |
+------------+---------------------------------------+-------+
| Samantha | De Montaigne and The Art of The Essay | 98 |
| Samantha | Russian Lit Through The Ages | 94 |
| Carlos | Borges and Magical Realism | 89 |
| Caleb | My Second Book Report | 75 |
| Caleb | My First Book Report | 60 |
+------------+---------------------------------------+-------+
PRINT THIS
+------------+---------------------------------------+-------+
| first_name | title | grade |
+------------+---------------------------------------+-------+
| Caleb | My First Book Report | 60 |
| Caleb | My Second Book Report | 75 |
| Samantha | Russian Lit Through The Ages | 94 |
| Samantha | De Montaigne and The Art of The Essay | 98 |
| Raj | NULL | NULL |
| Carlos | Borges and Magical Realism | 89 |
| Lisa | NULL | NULL |
+------------+---------------------------------------+-------+
PRINT THIS
+------------+---------------------------------------+-------+
| first_name | title | grade |
+------------+---------------------------------------+-------+
| Caleb | My First Book Report | 60 |
| Caleb | My Second Book Report | 75 |
| Samantha | Russian Lit Through The Ages | 94 |
| Samantha | De Montaigne and The Art of The Essay | 98 |
| Raj | MISSING | 0 |
| Carlos | Borges and Magical Realism | 89 |
| Lisa | MISSING | 0 |
+------------+---------------------------------------+-------+
PRINT THIS
+------------+---------+
| first_name | average |
+------------+---------+
| Samantha | 96.0000 |
| Carlos | 89.0000 |
| Caleb | 67.5000 |
| Raj | 0 |
| Lisa | 0 |
+------------+---------+
PRINT THIS
+------------+---------+----------------+
| first_name | average | passing_status |
+------------+---------+----------------+
| Samantha | 96.0000 | PASSING |
| Carlos | 89.0000 | PASSING |
| Caleb | 67.5000 | FAILING |
| Raj | 0 | FAILING |
| Lisa | 0 | FAILING |
+------------+---------+----------------+
PRINT THIS
MANY:MANY
The Tiny Bit Trickier Relationship
Some Examples
Imagine we're building a tv show reviewing application
id |
---|
first_name |
last_name |
id |
---|
title |
released_year |
genre |
id |
---|
rating |
series_id |
reviewer_id |
Reviewers
Series
Reviews
id | first_name | last_name |
---|---|---|
1 | Blue | Steele |
2 | Wyatt | Earp |
id | title | released_year | genre |
---|---|---|---|
1 | Archer | 2009 | Animation |
2 | Fargo | 2014 | Drama |
Reviewers
Series
id | rating | reviewer_id | series_id |
---|---|---|---|
1 | 8.9 | 1 | 2 |
2 | 9.5 | 2 | 2 |
Reviews
INSERT INTO series (title, released_year, genre) VALUES
('Archer', 2009, 'Animation'),
('Arrested Development', 2003, 'Comedy'),
("Bob's Burgers", 2011, 'Animation'),
('Bojack Horseman', 2014, 'Animation'),
("Breaking Bad", 2008, 'Drama'),
('Curb Your Enthusiasm', 2000, 'Comedy'),
("Fargo", 2014, 'Drama'),
('Freaks and Geeks', 1999, 'Comedy'),
('General Hospital', 1963, 'Drama'),
('Halt and Catch Fire', 2014, 'Drama'),
('Malcolm In The Middle', 2000, 'Comedy'),
('Pushing Daisies', 2007, 'Comedy'),
('Seinfeld', 1989, 'Comedy'),
('Stranger Things', 2016, 'Drama');
INSERT SERIES
INSERT INTO reviewers (first_name, last_name) VALUES
('Thomas', 'Stoneman'),
('Wyatt', 'Skaggs'),
('Kimbra', 'Masters'),
('Domingo', 'Cortes'),
('Colt', 'Steele'),
('Pinkie', 'Petit'),
('Marlon', 'Crafford');
INSERT REVIEWERS
INSERT INTO reviews(series_id, reviewer_id, rating) VALUES
(1,1,8.0),(1,2,7.5),(1,3,8.5),(1,4,7.7),(1,5,8.9),
(2,1,8.1),(2,4,6.0),(2,3,8.0),(2,6,8.4),(2,5,9.9),
(3,1,7.0),(3,6,7.5),(3,4,8.0),(3,3,7.1),(3,5,8.0),
(4,1,7.5),(4,3,7.8),(4,4,8.3),(4,2,7.6),(4,5,8.5),
(5,1,9.5),(5,3,9.0),(5,4,9.1),(5,2,9.3),(5,5,9.9),
(6,2,6.5),(6,3,7.8),(6,4,8.8),(6,2,8.4),(6,5,9.1),
(7,2,9.1),(7,5,9.7),
(8,4,8.5),(8,2,7.8),(8,6,8.8),(8,5,9.3),
(9,2,5.5),(9,3,6.8),(9,4,5.8),(9,6,4.3),(9,5,4.5),
(10,5,9.9),
(13,3,8.0),(13,4,7.2),
(14,2,8.5),(14,3,8.9),(14,4,8.9);
INSERT REVIEWS
NOW LET'S DO STUFF
+----------------------+--------+
| title | rating |
+----------------------+--------+
| Archer | 8.0 |
| Archer | 7.5 |
| Archer | 8.5 |
| Archer | 7.7 |
| Archer | 8.9 |
| Arrested Development | 8.1 |
| Arrested Development | 6.0 |
| Arrested Development | 8.0 |
| Arrested Development | 8.4 |
| Arrested Development | 9.9 |
| Bob's Burgers | 7.0 |
| Bob's Burgers | 7.5 |
| Bob's Burgers | 8.0 |
| Bob's Burgers | 7.1 |
| Bob's Burgers | 8.0 |
+----------------------+--------+
+----------------------+------------+
| title | avg_rating |
+----------------------+------------+
| General Hospital | 5.38000 |
| Bob's Burgers | 7.52000 |
| Seinfeld | 7.60000 |
| Bojack Horseman | 7.94000 |
| Arrested Development | 8.08000 |
| Curb Your Enthusiasm | 8.12000 |
| Archer | 8.12000 |
| Freaks and Geeks | 8.60000 |
| Stranger Things | 8.76667 |
| Breaking Bad | 9.36000 |
| Fargo | 9.40000 |
| Halt and Catch Fire | 9.90000 |
+----------------------+------------+
+------------+-----------+--------+
| first_name | last_name | rating |
+------------+-----------+--------+
| Thomas | Stoneman | 8.0 |
| Thomas | Stoneman | 8.1 |
| Thomas | Stoneman | 7.0 |
| Thomas | Stoneman | 7.5 |
| Thomas | Stoneman | 9.5 |
| Wyatt | Skaggs | 7.5 |
| Wyatt | Skaggs | 7.6 |
| Wyatt | Skaggs | 9.3 |
| Wyatt | Skaggs | 6.5 |
| Wyatt | Skaggs | 8.4 |
| Wyatt | Skaggs | 9.1 |
| Wyatt | Skaggs | 7.8 |
| Wyatt | Skaggs | 5.5 |
| Wyatt | Skaggs | 8.5 |
| Kimbra | Masters | 8.5 |
| Kimbra | Masters | 8.0 |
| Kimbra | Masters | 7.1 |
| Kimbra | Masters | 7.8 |
| Kimbra | Masters | 9.0 |
| Kimbra | Masters | 7.8 |
+------------+-----------+--------+
+-----------------------+
| unreviewed_series |
+-----------------------+
| Malcolm In The Middle |
| Pushing Daisies |
+-----------------------+
+-----------+------------+
| genre | avg_rating |
+-----------+------------+
| Animation | 7.86000 |
| Comedy | 8.16250 |
| Drama | 8.04375 |
+-----------+------------+
+------------+-----------+-------+-----+-----+---------+----------+
| first_name | last_name | COUNT | MIN | MAX | AVG | STATUS |
+------------+-----------+-------+-----+-----+---------+----------+
| Thomas | Stoneman | 5 | 7.0 | 9.5 | 8.02000 | ACTIVE |
| Wyatt | Skaggs | 9 | 5.5 | 9.3 | 7.80000 | ACTIVE |
| Kimbra | Masters | 9 | 6.8 | 9.0 | 7.98889 | ACTIVE |
| Domingo | Cortes | 10 | 5.8 | 9.1 | 7.83000 | ACTIVE |
| Colt | Steele | 10 | 4.5 | 9.9 | 8.77000 | ACTIVE |
| Pinkie | Petit | 4 | 4.3 | 8.8 | 7.25000 | ACTIVE |
| Marlon | Crafford | 0 | 0.0 | 0.0 | 0.00000 | INACTIVE |
+------------+-----------+-------+-----+-----+---------+----------+
+----------------------+--------+-----------------+
| title | rating | reviewer |
+----------------------+--------+-----------------+
| Archer | 8.0 | Thomas Stoneman |
| Archer | 7.7 | Domingo Cortes |
| Archer | 8.5 | Kimbra Masters |
| Archer | 7.5 | Wyatt Skaggs |
| Archer | 8.9 | Colt Steele |
| Arrested Development | 8.4 | Pinkie Petit |
| Arrested Development | 9.9 | Colt Steele |
| Arrested Development | 8.1 | Thomas Stoneman |
| Arrested Development | 6.0 | Domingo Cortes |
| Arrested Development | 8.0 | Kimbra Masters |
| Bob's Burgers | 7.0 | Thomas Stoneman |
| Bob's Burgers | 8.0 | Domingo Cortes |
| Bob's Burgers | 7.1 | Kimbra Masters |
| Bob's Burgers | 7.5 | Pinkie Petit |
| Bob's Burgers | 8.0 | Colt Steele |
+----------------------+--------+-----------------+
SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;
SET GLOBAL sql_mode = 'modes';
SET SESSION sql_mode = 'modes';