Usare le join

Introduzione a Oracle SQL

Sara Billen

Curriculum Manager

Dataset Chinook

Diagramma ER completo del dataset Chinook

Introduzione a Oracle SQL

Combinare dati da più tabelle

Album dei Pearl Jam

Introduzione a Oracle SQL

Join in SQL

Tipi di join:

  • Inner Join
  • Outer Join
  • Cross Join
  • Self Join
Introduzione a Oracle SQL

Inner join

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON  Album.ArtistId = Artist.ArtistId
| Album.Title                     | Artist.Name   |
|---------------------------------|---------------|
| Black Sabbath                   | Black Sabbath |
| Black Sabbath Vol. 4 (Remaster) | Black Sabbath |
| The Cream Of Clapton            | Eric Clapton  |
| Unplugged                       | Eric Clapton  |
| ...                             | ...           |
Introduzione a Oracle SQL

Struttura di un inner join

  1. Seleziona le colonne in output includendo i nomi delle tabelle
  2. In FROM, elenca le tabelle separate da INNER JOIN
  3. Usa ON per definire la colonna di join
SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON Album.ArtistId = Artist.ArtistId

Aggiungi altre clausole necessarie, come WHERE, ORDER BY!

Introduzione a Oracle SQL

Inner join

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON  Album.ArtistId = Artist.ArtistId
WHERE Artist.Name = 'Pearl Jam'
| Album.Title | Artist.Name |
|-------------|-------------|
| Pearl Jam   | Pearl Jam   |
| Riot Act    | Pearl Jam   |
| Ten         | Pearl Jam   |
| ...         | ...         |
Introduzione a Oracle SQL

USING invece di ON

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON  Album.ArtistId = Artist.ArtistId

uguale a

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
USING (ArtistId)
  • Le colonne devono avere lo stesso nome in entrambe le tabelle
  • Metti il nome colonna tra parentesi
Introduzione a Oracle SQL

Alias di tabella

SELECT DISTINCT Customer.FirstName, Customer.LastName, 
                Employee.FirstName, Employee.LastName
FROM Customer INNER JOIN Employee
ON Customer.SupportRepID = Employee.EmployeeID

Con alias:

SELECT DISTINCT c.FirstName, c.LastName, e.FirstName, e.LastName
FROM Customer c INNER JOIN Employee e
ON c.SupportRepID = e.EmployeeID
Introduzione a Oracle SQL

Join tra più di due tabelle

Tabelle track, album e artist

SELECT t.Name AS Track, al.Title AS Album, ar.Name AS Artist
FROM 
    Track t INNER JOIN Album al USING (AlbumId)
    INNER JOIN Artist ar USING (ArtistId)
Introduzione a Oracle SQL

Join tra più di due tabelle

SELECT t.Name as Track, al.Title as Album, ar.Name as Artist
FROM 
    Track t INNER JOIN Album al USING (AlbumId)
    INNER JOIN Artist ar USING (ArtistId)
| Track              | Album                          | Artist      |
|--------------------|--------------------------------|-------------|
| The Legacy         | A Matter of Life and Death     | Iron Maiden |
| Lord of Light      | A Matter of Life and Death     | Iron Maiden |
| Out of the Shadows | A Matter of Life and Death     | Iron Maiden |
| ...                | ...                            | ...         |
Introduzione a Oracle SQL

Esercitiamoci!

Introduzione a Oracle SQL

Preparing Video For Download...