Baza danych

adamos64
Użytkownik
Użytkownik
Posty: 63
Rejestracja: 5 lut 2008, o 22:21
Płeć: Mężczyzna
Lokalizacja: Luboń k Poznań:)
Podziękował: 27 razy
Pomógł: 3 razy

Baza danych

Post autor: adamos64 »

Witam mam pytanie czy mógłby ktoś mi zrobić najprostsze połączenie jakiś trzech prostych tabel wiele do wielu żebym miał przykład który bym się nauczyl na pamięć? bardzo bym prosił i opisanie tam tych kluczy gdzie są i jak to powstało.. bardzo byłbym wdzięczny podaje przy okazji numer gg 5628947
smiechowiec
Użytkownik
Użytkownik
Posty: 374
Rejestracja: 21 cze 2007, o 11:28
Płeć: Mężczyzna
Lokalizacja: Łostowice
Pomógł: 146 razy

Baza danych

Post autor: smiechowiec »

Rozpatrzmy zbiór osób oraz zbiór marek telefonów.
Osoba może mieć więcej niż jeden telefon,
a telefony mogą pochodzić od różnych producentów.

Tabele :
Osoba (IdOsoby, Nazwisko, Imie)
MarkaTelefonu (IdMarki, Nazwa)
MarkaTelefonuOsoba( IdOsoby, IdTelefonu)

Przykładowa definicja na bazie postgresql

Kod: Zaznacz cały

CREATE TABLE Osoba (
  IdOsoby SERIAL PRIMARY KEY,  
  Nazwisko VARCHAR(30),
  Imie VARCHAR(30)
);

CREATE TABLE MarkaTelefonu (
  IdTMarki SERIAL PRIMARY KEY,
  Nazwa VARCHAR(30)
);

CREATE TABLE MarkaTelefonuOsoba (
  IdOsoby int REFERENCES Osoba,
  IdTMarki int REFERENCES MarkaTelefonu
);

-- Dodajemy 3 przykładowe osoby
INSERT INTO osoba(nazwisko, imie) VALUES ('Kowalski', 'Jan');
INSERT INTO osoba(nazwisko, imie) VALUES ('Nowak', 'Ania');
INSERT INTO osoba(nazwisko, imie) VALUES ('Adamska', 'Ala');

-- Dodajemy 3 przykładowe marki telefonów
INSERT INTO markatelefonu(nazwa) VALUES ('nokia');
INSERT INTO markatelefonu(nazwa) VALUES ('sony');
INSERT INTO markatelefonu(nazwa) VALUES ('motorola');

-- Dodajemy 5 przykładowych złączeń osób z telefonami
INSERT INTO markatelefonuosoba(idosoby, idtmarki) VALUES (
(SELECT idosoby FROM Osoba WHERE Nazwisko = 'Kowalski'),
(SELECT idtmarki FROM markatelefonu WHERE nazwa = 'nokia'));

INSERT INTO markatelefonuosoba(idosoby, idtmarki) VALUES (
(SELECT idosoby FROM Osoba WHERE Nazwisko = 'Kowalski'),
(SELECT idtmarki FROM markatelefonu WHERE nazwa = 'sony'));


INSERT INTO markatelefonuosoba(idosoby, idtmarki) VALUES (
(SELECT idosoby FROM Osoba WHERE Nazwisko = 'Nowak'),
(SELECT idtmarki FROM markatelefonu WHERE nazwa = 'motorola'));


INSERT INTO markatelefonuosoba(idosoby, idtmarki) VALUES (
(SELECT idosoby FROM Osoba WHERE Nazwisko = 'Nowak'),
(SELECT idtmarki FROM markatelefonu WHERE nazwa = 'nokia'));


INSERT INTO markatelefonuosoba(idosoby, idtmarki) VALUES (
(SELECT idosoby FROM Osoba WHERE Nazwisko = 'Adamska'),
(SELECT idtmarki FROM markatelefonu WHERE nazwa = 'motorola'));

-- Tworzymy zapytanie, aby sprawdzić czy dane zostały poprawnie dopisane
SELECT o.Nazwisko, o.Imie, m.Nazwa
FROM 
  Osoba o,
  MarkaTelefonuOsoba mo,
  MarkaTelefonu m
WHERE
  mo.IdOsoby = o.IdOsoby
  AND m.IdtMarki = mo.IdtMarki;
------------------------- wynik zapytania ------------------------- 
"Kowalski";"Jan";"nokia"
"Kowalski";"Jan";"sony"
"Nowak";"Ania";"motorola"
"Nowak";"Ania";"nokia"
"Adamska";"Ala";"motorola"
ODPOWIEDZ