Używanie złączeń

Wprowadzenie do Oracle SQL

Sara Billen

Curriculum Manager

Zbiór danych Chinook

Diagram ER pełnego zbioru danych Chinook

Wprowadzenie do Oracle SQL

Łączenie danych z więcej niż jednej tabeli

Albumy Pearl Jam

Wprowadzenie do Oracle SQL

Złączenia SQL

Rodzaje złączeń:

  • Inner Join
  • Outer Joins
  • Cross Joins
  • Self Joins
Wprowadzenie do 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  |
| ...                             | ...           |
Wprowadzenie do Oracle SQL

Budowa inner join

  1. Wybierz kolumny do wyświetlenia i podaj nazwy tabel
  2. W klauzuli FROM wymień odpowiednie tabele rozdzielone INNER JOIN
  3. Użyj ON, aby wskazać kolumnę złączenia
SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
ON Album.ArtistId = Artist.ArtistId

Dodaj inne potrzebne klauzule, np. WHERE, ORDER BY!

Wprowadzenie do 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   |
| ...         | ...         |
Wprowadzenie do Oracle SQL

`USING` zamiast `ON`

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

to samo co

SELECT Album.Title, Artist.Name
FROM Album INNER JOIN Artist
USING (ArtistId)
  • Kolumny muszą mieć identyczne nazwy w obu tabelach
  • Nazwę kolumny należy ująć w nawiasy
Wprowadzenie do Oracle SQL

Aliasy tabel

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

Z aliasami:

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

Złączenie więcej niż dwóch tabel

Tabele 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)
Wprowadzenie do Oracle SQL

Złączenie więcej niż dwóch tabel

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 |
| ...                | ...                            | ...         |
Wprowadzenie do Oracle SQL

Czas na ćwiczenia!

Wprowadzenie do Oracle SQL

Preparing Video For Download...