0% found this document useful (0 votes)
39 views

Joining Tables: John Mackintosh

The document discusses joining tables in SQL Server. It explains that primary keys uniquely identify each row in a table. Foreign keys link two tables together by containing the primary key from the other table. The document demonstrates how to perform inner joins to combine data from two tables based on matching column values. It also explains how left and right joins can return all rows from the left or right table respectively, along with any matching rows from the other table.

Uploaded by

anubhav582
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
39 views

Joining Tables: John Mackintosh

The document discusses joining tables in SQL Server. It explains that primary keys uniquely identify each row in a table. Foreign keys link two tables together by containing the primary key from the other table. The document demonstrates how to perform inner joins to combine data from two tables based on matching column values. It also explains how left and right joins can return all rows from the left or right table respectively, along with any matching rows from the other table.

Uploaded by

anubhav582
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 30

Joining tables

I N T R O D U C T I O N TO S Q L S E R V E R

John MacKintosh
Instructor
Relational Databases

INTRODUCTION TO SQL SERVER


Primary Keys
Primary keys: Uniquely identify each row in a table

+-----------+-------------------+
| artist_id | name |
|-----------+-------------------|
| 1 | AC/DC |
| 2 | Accept |
| 3 | Aerosmith |
| 4 | Alanis Morissette |
| 5 | Alice In Chains |
+-----------+-------------------+

Primary key: artist_id

INTRODUCTION TO SQL SERVER


+----------+-------------------------+-----------+
| album_id | title | artist_id |
|----------+-------------------------+-----------|
| 1 | For Those About To Rock | 1 |
| 2 | Balls to the Wall | 2 |
| 3 | Restless and Wild | 2 |
| 4 | Let There Be Rock | 1 |
| 5 | Big Ones | 3 |
+----------+-------------------------+-----------+

Primary key: album_id

What about artist_id ?

INTRODUCTION TO SQL SERVER


Foreign keys
artist table album table

+-----------+-------------------+ +----------+-------------------------+-----------
| artist_id | name | | album_id | title | artist_id
|-----------+-------------------| |----------+-------------------------+-----------
| 1 | AC/DC | | 1 | For Those About To Rock | 1
| 2 | Accept | | 2 | Balls to the Wall | 2
| 3 | Aerosmith | | 3 | Restless and Wild | 2
| 4 | Alanis Morissette | | 4 | Let There Be Rock | 1
| 5 | Alice In Chains | | 5 | Big Ones | 3
+-----------+-------------------+ +----------+-------------------------+-----------

artist_id : Foreign key to artist

INTRODUCTION TO SQL SERVER


Joining album and artist
artist table album table

+-----------+-------------------+ +----------+-------------------------+-----------+
| artist_id | name | | album_id | title | artist_id |
|-----------+-------------------| |----------+-------------------------+-----------|
| 1 | AC/DC | | 1 | For Those About To Rock | 1 |
| 2 | Accept | | 2 | Balls to the Wall | 2 |
| 3 | Aerosmith | | 3 | Restless and Wild | 2 |
| 4 | Alanis Morissette | | 4 | Let There Be Rock | 1 |
| 5 | Alice In Chains | | 5 | Big Ones | 3 |
+-----------+-------------------+ +----------+-------------------------+-----------+

AC/DC has artist_id = 1 Rows 1 and 4 have artist_id = 1

INTRODUCTION TO SQL SERVER


Joining album and artist
+----------+-------------------------+-----------+-------------+
| album_id | title | artist_id | artist_name |
|----------+---------------------------------------+-----------|
| 1 | For Those About To Rock | 1 | AC/DC |
| 4 | Let There Be Rock | 1 | AC/DC |
+----------+-------------------------+-----------+-------------|

Return album details from album table

Return corresponding artist details from artist table

Joined using artist_id column

INTRODUCTION TO SQL SERVER


INNER JOIN
SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNER JOIN artist ON artist.artist_id = album.artist_id
WHERE album.artist_id = 1;

+----------+-------------------------+-----------+-------------+
| album_id | title | artist_id | artist_name |
|----------+---------------------------------------+-----------|
| 1 | For Those About To Rock | 1 | AC/DC |
| 4 | Let There Be Rock | 1 | AC/DC |
+----------+-------------------------+-----------+-------------|

INTRODUCTION TO SQL SERVER


INNER JOIN syntax
SELECT
table_A.columnX,
table_A.columnY,
table_B.columnZ
FROM table_A
INNER JOIN table_B ON table_B.foreign_key = table_A.primary_key;

INTRODUCTION TO SQL SERVER


SELECT
album_id,
title,
album.artist_id,
name AS artist_name
FROM album
INNER JOIN artist on artist.artist_id = album.artist_id;

+----------+---------------------------------------+-----------+
| album_id | title | artist_id | artist_name |
|----------+---------------------------------------+-----------|
| 1 | For Those About To Rock | 1 | AC/DC |
| 4 | Let There Be Rock | 1 | AC/DC |
| 2 | Balls To The Wall | 2 | Accept |
| 3 | Restless and Wild | 2 | Accept |
+----------+---------------------------------------+-----------+

Returns all combinations of all matches between album and artist

INTRODUCTION TO SQL SERVER


Multiple INNER JOINS
SELECT
table_A.columnX,
table_A.columnY,
table_B.columnZ table_C columnW
FROM table_A
INNER JOIN table_B ON table_B.foreign_key = table_A.primary_key
INNER JOIN table_C ON table_C.foreign_key = table_B.primary_key;

INTRODUCTION TO SQL SERVER


Let's join some
tables!
I N T R O D U C T I O N TO S Q L S E R V E R
Mix n match - LEFT &
RIGHT joins
I N T R O D U C T I O N TO S Q L S E R V E R

John MacKintosh
Instructor
The rationale for LEFT and RIGHT joins
Why do we need LEFT and RIGHT joins?

One table may not have an exact match in another:


Customer order history for marketing campaign

Product list and returns history

Patients admitted but not yet discharged

INTRODUCTION TO SQL SERVER


The rationale for LEFT and RIGHT joins
Why do we need LEFT and RIGHT joins?

One table may not have an exact match in another:


Customer order history for marketing campaign

Product list and returns history

Patients admitted but not yet discharged

INTRODUCTION TO SQL SERVER


Admissions table Discharges table

+------------+----------+ +------------+----------+
| Patient_ID | Admitted | | Patient_ID | Admitted |
|------------+----------| |------------+----------|
| 1 | 1 | | 1 | 1 |
| 2 | 1 | | 3 | 1 |
| 3 | 1 | | 4 | 1 |
| 4 | 1 | +------------+----------+
| 5 | 1 |
+------------+----------+

INNER JOIN: LEFT JOIN:

+------------+----------+------------| +------------+----------+------------|
| Patient_ID | Admitted | Discharged | | Patient_ID | Admitted | Discharged |
|------------+----------|------------| |------------+----------|------------|
| 1 | 1 | 1 | | 1 | 1 | 1 |
| 3 | 1 | 1 | | 2 | 1 | NULL |
| 4 | 1 | 1 | | 3 | 1 | 1 |
+------------+----------+------------+ | 4 | 1 | 1 |
| 5 | 1 | NULL |
+------------+----------+------------+

INTRODUCTION TO SQL SERVER


LEFT JOIN SYNTAX
SELECT
Admitted.Patient_ID,
Admitted,
Discharged
FROM Admitted
LEFT JOIN Discharged ON Discharged.Patient_ID = Admitted.Patient_ID;

INTRODUCTION TO SQL SERVER


SELECT
Admitted.Patient_ID,
Admitted,
Discharged
FROM Admitted
LEFT JOIN Discharged ON Discharged.Patient_ID = Admitted.Patient_ID;

+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1 | 1 | 1 |
| 2 | 1 | NULL |
| 3 | 1 | 1 |
| 4 | 1 | 1 |
| 5 | 1 | NULL |
+------------+----------+------------+

INTRODUCTION TO SQL SERVER


RIGHT JOIN
SELECT
Admitted.Patient_ID,
Admitted,
Discharged
FROM Discharged
RIGHT JOIN Admitted ON Admitted.Patient_ID = Discharged.Patient_ID;

INTRODUCTION TO SQL SERVER


RIGHT JOIN results
SELECT
Admitted.Patient_ID,
Admitted,
Discharged
FROM Discharged
RIGHT JOIN Admitted ON Admitted.Patient_ID = Discharged.Patient_ID;

+------------+----------+------------|
| Patient_ID | Admitted | Discharged |
|------------+----------|------------|
| 1 | 1 | 1 |
| 2 | 1 | NULL |
| 3 | 1 | 1 |
| 4 | 1 | 1 |
| 5 | 1 | NULL |
+------------+----------+------------+

INTRODUCTION TO SQL SERVER


Summary
INNER JOIN : Only returns matching rows

LEFT JOIN (or RIGHT JOIN ): All rows from the main table plus matches from the joining table

NULL : Displayed if no match is found

LEFT JOIN and RIGHT JOIN can be interchangeable

INTRODUCTION TO SQL SERVER


INTRODUCTION TO SQL SERVER
Let's Practice!
I N T R O D U C T I O N TO S Q L S E R V E R
UNION & UNION
ALL
I N T R O D U C T I O N TO S Q L S E R V E R

John MacKintosh
Instructor
SELECT SELECT
album_id, album_id,
title, title,
artist_id artist_id
FROM album FROM album
WHERE artist_id IN (1, 3) WHERE artist_id IN (1, 4, 5)

+------------+-------------------------+------------| +------------+-------------------------+------------|
| album_id | title | artist_id | | album_id | title | artist_id |
|------------+-------------------------|------------| |------------+-------------------------|------------|
| 1 | For Those About To Rock | 1 | | 1 | For Those About To Rock | 1 |
| 4 | Let There Be Rock | 1 | | 4 | Let There Be Rock | 1 |
| 5 | Big Ones | 3 | | 6 | Jagged Little Pill | 4 |
+------------+----------+---------------------------+ | 7 | Facelift | 5 |
+------------+-------------------------+------------+

INTRODUCTION TO SQL SERVER


Combining results
SELECT +------------+-------------------------+------------|
album_id, | album_id | title | artist_id |
title, |------------+-------------------------|------------|
artist_id | 1 | For Those About To Rock | 1 |
FROM album | 4 | Let There Be Rock | 1 |
WHERE artist_id IN (1, 3) | 5 | Big Ones | 3 |
UNION | 6 | Jagged Little Pill | 4 |
| 7 | Facelift | 5 |
SELECT
+------------+-------------------------+------------+
album_id,
title,
artist_id Duplicate rows are excluded
FROM album
WHERE artist_id IN (1, 4, 5);

INTRODUCTION TO SQL SERVER


UNION ALL
SELECT +------------+-------------------------+------------|
album_id, | album_id | title | artist_id |
title, |------------+-------------------------|------------|
artist_id | 1 | For Those About To Rock | 1 |
FROM album | 4 | Let There Be Rock | 1 |
WHERE artist_id IN (1, 3) | 5 | Big Ones | 3 |
UNION ALL | 1 | For Those About To Rock | 1 |
SELECT | 4 | Let There Be Rock | 1 |
album_id, | 6 | Jagged Little Pill | 4 |
title, | 7 | Facelift | 5 |
artist_id +------------+-------------------------+------------+
FROM album
WHERE artist_id IN (1, 4, 5);
Includes duplicate rows

INTRODUCTION TO SQL SERVER


Creating new column names for nal results
SELECT +------------+-------------------------+------------|
album_id AS ALBUM_ID, | ALBUM_ID | ALBUM_TITLE | ARTIST_ID |
title AS ALBUM_TITLE, |------------+-------------------------|------------|
artist_id AS ARTIST_ID | 1 | For Those About To Rock | 1 |
FROM album | 4 | Let There Be Rock | 1 |
WHERE artist_id IN(1, 3) | 5 | Big Ones | 3 |
UNION ALL | 1 | For Those About To Rock | 1 |
SELECT | 4 | Let There Be Rock | 1 |
album_id AS ALBUM_ID, | 6 | Jagged Little Pill | 4 |
title AS ALBUM_TITLE, | 7 | Facelift | 5 |
artist_id AS ARTIST_ID +------------+-------------------------+------------+
FROM album
WHERE artist_id IN(1, 4, 5)

INTRODUCTION TO SQL SERVER


Summary
UNION or UNION ALL : Combines queries from the same table or different tables

If combining data from different tables:

Select the same number of columns in the same order

Columns should have the same data types

If source tables have different column names

Alias the column names

UNION : Discards duplicates (slower to run)

UNION ALL : Includes duplicates (faster to run)

INTRODUCTION TO SQL SERVER


Let's practice!
I N T R O D U C T I O N TO S Q L S E R V E R

You might also like