Baza danych
-
- 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
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
-
- Użytkownik
- Posty: 374
- Rejestracja: 21 cze 2007, o 11:28
- Płeć: Mężczyzna
- Lokalizacja: Łostowice
- Pomógł: 146 razy
Baza danych
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
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"