JOIN
keyword allows you to pull data from multiple tables using a single SELECT
query.NULL
values are returned for the columns from the second table.JOIN
clause and matching rows from the second table.JOIN
clause and matching rows from the first table.JOIN
clauses require a condition that specifies which columns will be matched across the tables (e.g., table1.ID = table2.ID
).JOIN
, INNER JOIN
, and CROSS JOIN
are often used interchangeably.JOIN
keyword without specifying the type, it defaults to an inner join.titles
, studio
).titles
table to the city it was filmed in, available in the studio
table.titles
table has a studioID
column (foreign key) that refers to the ID
column (primary key) of the studio
table.sql
SELECT titles.title, studio.city
FROM titles
INNER JOIN studio ON titles.studioID = studio.ID
ORDER BY titles.title;
titles.title
) when joining multiple tables.ON
ClauseON
clause is crucial because it tells MySQL which data is the same in both tables.directorID
instead of studioID
).sql
SELECT director.dir_name, titles.title, criticrating.criticsRating
FROM titles
INNER JOIN director ON titles.directorID = director.ID
INNER JOIN criticrating ON criticrating.titlesID = titles.ID
ORDER BY director.dir_name;
ON
clause is reversible (e.g., titles.ID = criticrating.titlesID
is equivalent to criticrating.titlesID = titles.ID
).posters
that contains filenames and resolutions for film posters.sql
CREATE TABLE posters (
ID INT PRIMARY KEY AUTO_INCREMENT,
titlesID INT,
poster_filename VARCHAR(30),
resolution VARCHAR(10),
FOREIGN KEY (titlesID) REFERENCES titles(ID)
);
posters
table with data.posters
table has fewer rows than the titles
table, indicating that some titles do not have poster art.sql
SELECT titles.title, director.dir_name, posters.filename, posters.resolution
FROM titles
INNER JOIN director ON titles.directorID = director.ID
LEFT OUTER JOIN posters ON posters.titlesID = titles.ID
ORDER BY titles.title;
NULL
values in the filename
and resolution
columns indicate titles without corresponding poster art.posters
table will be returned.posters
table and matching rows from the titles
table. Because of the foreign key relationship, this will produce a result very similar to an inner join due to no posters existing without a corresponding title.sql
SELECT titles.title, director.dir_name, criticrating.criticsRating, posters.filename
FROM titles
INNER JOIN director ON titles.directorID = director.ID
INNER JOIN criticrating ON criticrating.titlesID = titles.ID
LEFT OUTER JOIN posters ON titles.ID = posters.titlesID
ORDER BY criticrating.criticsRating DESC
LIMIT 1;