Utilizarea join-urilor

Introducere în Oracle SQL

Sara Billen

Curriculum Manager

Setul de date Chinook

Diagrama ER completă a setului de date Chinook

Introducere în Oracle SQL

Combinarea datelor din mai multe tabele

Albumele Pearl Jam

Introducere în Oracle SQL

Join-uri SQL

Tipuri de join-uri:

  • Inner Join
  • Outer Join-uri
  • Cross Join-uri
  • Self Join-uri
Introducere în 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  |
| ...                             | ...           |
Introducere în Oracle SQL

Structura unui inner join

  1. Selectați coloanele de afișat și includeți numele tabelelor
  2. În FROM, listați tabelele relevante separate prin INNER JOIN
  3. Utilizați ON pentru a defini coloana de join
SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON Album.ArtistId = Artist.ArtistId

Adăugați și alte clauze necesare, precum WHERE, ORDER BY!

Introducere în 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   |
| ...         | ...         |
Introducere în Oracle SQL

USING în loc de ON

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

echivalent cu

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
USING (ArtistId)
  • Coloanele trebuie să aibă același nume în ambele tabele
  • Numele coloanei se include între paranteze
Introducere în Oracle SQL

Aliasuri pentru tabele

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

Cu aliasuri:

SELECT DISTINCT c.FirstName, c.LastName, e.FirstName, e.LastName
FROM Customer c INNER JOIN Employee e
ON c.SupportRepID = e.EmployeeID
Introducere în Oracle SQL

Join pe mai mult de două tabele

Tabelele Track, Album și 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)
Introducere în Oracle SQL

Join pe mai mult de două tabele

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 |
| ...                | ...                            | ...         |
Introducere în Oracle SQL

Să exersăm!

Introducere în Oracle SQL

Preparing Video For Download...