Głównie używamy do połączenia z PRIMARY KEY w innej tabeli, takie połączenie pomaga nam utrzymać integralność danych w bazie danych.
główna różnica w PRIMARY KEY i FOREIGN KEY jest taka że primary key musi mieć wartości unikalne i przez to zapewnia unikalność wierszy w tabeli natomiast foreign key nie musi mieć wartości unikalnych.
przykład który najlepiej zobrazuje primary key i foreign key to np.
mamy dwie tabele HANDLOWIEC i ZAMOWIENIA na tabeli HANDLOWIEC zakładamy na kolumnie ID_HAND primary key a na kolumnie ID_HAND w tabeli ZAMOWIENIA tworzymy foreign key i teraz wartości ID_HAND identyfikuje unikalnie handlowca natomiast w ta kolumna w tabeli ZAMOWIENIA identyfikuje wszystkie zamowienia które zostały podpisane przez danego handlowca
np. chcemy wyszukać wszystkie zamówienia handlowca o nazwisku Kowalski i imieniu Edward
do tego celu musimy połączyć dwie tabele: HANDLOWIEC i ZAMOWIENIA do połącznie oczywiście użyjemy kolumny ID_HAND
w wyniku takiego połączenia otrzymamy wszystkie zamowienia podpisane przez danego handlowca
przykład 1
Tworzenie FOREIGN KEY w trakcie tworzenia tabeli
stworz tabele ZAMOWIENIA która ma następujące kolumny: ID_ZAM, ZAMOWIENIE, DATA_ZAMOW, ID_HAND (foreign key)
create table ZAMOWIENIA
(ID_ZAM INTEGER,
ZAMOWIENIE VARCHAR2(40),
DATA_ZAMOW DATE,
ID_HAND INTEGER references HANDLOWIEC(ID_HAND)
);
przykład 2
na utworzonej tabeli ZAMOWIENIA (stworzona bez klucza obcego) stworzyć klucz obcy ktory ma referencje do primary key ID_HAND w tabeli HANDLOWIEC
ALTER TABLE ZAMOWIENIA
ADD (CONSTRAINT fk_zamow) FOREIGN KEY (id_hand) REFERENCES HANDLOWIEC(ID_HAND);
przykład 3
wyświetl zestawienie wszystkich handlowców i ich zamówień z tabel HANDLOWIEC I ZAMOWIENIA
tabela HANDLOWIEC
| ID_HAND | IMIE | NAZWISKO |
| ---------- | ------ | ------------ |
| 1 2 3 4 5 | irek piotr wiktor krzys vit | wozniak krakowiak pyzdra kolodziej zarazka |
tabela ZAMOWIENIE
| ID_ZAM | ZAMOWIENIE | DATA_ZAMOW | ID_HAND |
| -------- | -------------- | --------------- | ---------- |
| 1 2 3 4 5 6 7 | PERLY KROWKI ROWERY SAMOCHODY MOTOROWKI TRAKTORY PILKI | 22/09/07 12/03/07 02/05/07 06/08/07 09/11/07 16/01/07 21/07/07 | 1 2 2 2 3 3 4 |
ZAPYTANIE:
select a.imie, a.nazwisko, b.zamowienie
from handlowiec a, zamowienie b
where a.id_hand=b.id_hand;
WYNIK:
| IMIE | NAZWISKO | ZAMOWIENIE |
| ------ | ------------- | ---------------- |
| irek piotr piotr piotr wiktor wiktor krzys | wozniak krakowiak krakowiak krakowiak pyzdra pyzdra kolodziej | PERLY KROWKI ROWERY SAMOCHODY MOTOROWKI TRAKTORY PILKI |



