1. Geneza relacyjnych baz danych
Pochodzący z Wielkiej Brytanii Edgar F. Codd studiował na Oxford University i uzyskał
dyplomy na wydziałach matematyki i chemii. W 1948 roku przeniósł się do USA. Jako matematyk-programista rozpoczął pracę w IBM. Uczestniczył w projektach wielu ważnych produktów firmy, w tym przy opracowaniu pierwszego komercyjnego komputera IBM 701 i maszyny Stretch, której rozwiązania technologiczne legły u podstaw wszystkich komputerów mainframe IBM.
Niezwykłość relacyjnego modelu danych polega na tym, że swoje powstanie zawdzięcza głównie jednej osobie – dr E. F. Coddowi. W 1970 r. dr E. F. Codd opublikował pracę, która położyła fundament pod najbardziej popularny ze współczesnych modeli danych. Od 1968 do 1988 r. dr Codd opublikował ponad 30 prac na temat relacyjnego modelu danych. Dr Codd traktował swoje prace wydane przed 1979 r.jako pierwszą wersję relacyjnego modelu danych.
Na początku 1979 r. na konferencji Australian Computer Society w miejscowości Hobert w Tasmanii Codd przedstawił pracę pod tytułem Extending the relational database model to capture more meaning. Rozszerzoną wersję relacyjnego modelu danych, którą sformułował w swojej pracy, Codd nazwał RM/T (T od Tasmania). Edgar F. Codd do końca życia zajmował
się teoretycznymi podstawami informatyki. Jest między innymi twórcą - opatentowanego wspólnie z żoną Sharon Weinberg - systemu Enterprise Delta, relacyjnego modelu zarządzania regułami biznesowymi.
Edgar F. Codd zmarł w 2003 r., był pionierem i twórcą teoretycznych podstaw baz danych.
Jego relacyjny model baz danych stanowi obecnie podstawę rozwoju jednej z
najważniejszych branż przemysłu informatycznego, której wartość jest szacowana na ponad 7
miliardów dolarów rocznie. Obsługa kont bankowych, kart kredytowych, sprzedaż towarów przez Internet, systemów rezerwacji biletów i innych form operacji transakcyjnych opiera się na opracowanym przez Edgara F. Codda, wysoce abstrakcyjnym i złożonym modelu matematycznym.
2. Cele relacyjnych baz danych
Wcześniejsze modele danych traktowały dane w niezdyscyplinowany sposób. Model relacyjny, przy użyciu ścisłych narzędzi matematycznych, zwłaszcza teorii zbiorów, wprowadza zdyscyplinowany sposób posługiwania się danymi. Dr Codd oczekiwał, że w wyniku stosowania ścisłych metod zostaną osiągnięte dwie podstawowe korzyści: po pierwsze, zostanie poprawiony możliwy do uzyskania poziom niezależności między programami a danymi. po drugie, wzrośnie wydajność tworzenia oprogramowania.
3. Definicja danych
Baza danych jest faktycznie zbiorem struktur danych służących do organizowania i przechowywania danych. W każdym modelu danych i w konsekwencji w każdym DBMS
(System Zarządzania Bazą Danych) musimy mieć do dyspozycji zbiór reguł określających wykorzystanie takich struktur danych w aplikacjach baz danych. Tworząc definicję danych używamy wewnętrznych struktur danych modelu danych z myślą o konkretnym zadaniu.
4. Tabela – klucz główny (primary key).
Każda tabela w bazie powinna zawierać klucz główny. Klucz główny to kolumna lub grupa kolumn, która w jednoznaczny sposób identyfikuje wiersz w tabeli. Na przykład dla tabeli MIEJSCA kluczem głównym może być pole NR_M (numer miejsca). Klucz główny
zapobiega wstawianiu dwóch identycznych wierszy do tabeli.
CREATE TABLE MIEJSCA
(
NR_M
INTEGER PRIMARY KEY,
ULICA
VARCHAR(24)
NOT NULL,
NUMER
CHAR(8) NOT NULL,
MIASTO VARCHAR(24)
NOT NULL,
KOD
CHAR(6) NOT NULL,
TELEFON
CHAR(16),
UWAGI
VARCHAR(40),
);
Przykład 4: Tabela – klucz główny (primary key).
5. Tabela – klucz obcy (foreign key).
Klucz obcy to jedna lub więcej kolumn tabeli odwołujących się do klucza głównego w innej tabeli. Klucze obce są wykorzystywane do utrzymywania integralności referencyjnej w bazie danych. Tworząc klucz obcy, definiujemy związek między tabelą klucza głównego i tabelą klucza obcego. Związek taki powstaje podczas złączenia kolumn takich samych typów danych z każdej tabeli. Złączanie tabel przez odpowiednie kolumny chroni dane z tabeli klucza obcego przed osieroceniem jakie mogłoby nastąpić w wyniku usunięcia
odpowiadających im danych z tabeli klucza głównego
CREATE TABLE PRACOWNICY
(
NR_P INTEGER
IMIE VARCHAR(20) NOT NULL,
NAZWISKO VARCHAR(20) NOT NULL,
DATA_ZATR DATE NOT NULL,
DZIAL VARCHAR(20) NOT NULL,
STANOWISKO VARCHAR(20) NOT NULL,
PENSJA DECIMAL(8,2),
DODATEK DECIMAL(8,2),
NR_M VARCHAR(4),
TELEFON CHAR(16),
CONSTRAINT NR_P_PK PRIMARY KEY (NR_P)
CONSTRAINT NR_M_FK FOREIGN KEY (NR_M) REFERENCES MIEJSCA(NR_M)
);
Przykład 5: Tabela – klucz obcy (foreign key).
Sekcja: Język SQL - tabele
6. Definicja tabeli klienci w języku SQL
Tabelę w języku SQL definiujemy za pomocą instrukcji CREATE TABLE(). Pomiędzy nawiasami znajdują opisy kolumn tabeli oraz ograniczenia. każda kolumna musi mieć unikalną nazwę, typ danych, oraz pewne właściwości nazywane ograniczeniami.
Ograniczenia nienazwane mogą być w każdej kolumnie zaś nazwane na końcu definicji.
Przykładowe typy danych: integer definiujący liczby całkowite, character varying definiujący pole tekstowe o zmiennej długości, character definiujący pola tekstowe o stałej długości.
Ograniczenie NOT NULL określa, że dane pole nie może być puste. Nazwane ograniczenie CONSTRAINT x1 określa że kolumna (nr_klienta) jest tzw. kluczem głównym PRIMARY
KEY. Ponieważ wartości klucza głównego nie mogą się powtarzać, więc dzięki temu nigdy nie zdarzy się, że będą takie same rekordy w tabeli.
CREATE TABLE klienci
(
nr_klienta integer NOT NULL,
imie character varying(20) NOT NULL,
nazwisko character varying(20) NOT NULL,
karta character(20),
firma character varying(40),
ulica character varying(20) NOT NULL,
dom character(8) NOT NULL,
miasto character varying(20) NOT NULL,
kod character(6) NOT NULL,
nip character(12),
tel character(16),
CONSTRAINT x1 PRIMARY KEY (nr_klienta)
)
Przykład 6: Definicja tabeli klienci w języku SQL
7. Definicja tabeli samochody w języku SQL
Poniższy przykład przedstawia definicję tabeli samochody w języku SQL.
CREATE TABLE samochody
(
nr_samochodu integer NOT NULL,
marka character varying(20) NOT NULL,
model character varying(16) NOT NULL,
rok_produkcji date NOT NULL,
kolor character varying(16) NOT NULL,
poj_silnika smallint NOT NULL,
przebieg integer NOT NULL,
CONSTRAINT x2 PRIMARY KEY (nr_samochodu)
)
Przykład 7: Definicja tabeli samochody w języku SQL
8. Definicja tabeli miejsca w języku SQL
Poniższy przykład przedstawia definicję tabeli miejsca w języku SQL. Pojawia się tutaj dodatkowy typ danych text. Jest to nieograniczony ciąg znaków nie wymagający podania długości.
CREATE TABLE miejsca
(
nr_miejsca integer NOT NULL,
ulica character varying(20) NOT NULL,
dom character(8) NOT NULL,
miasto character varying(20) NOT NULL,
kod character(6) NOT NULL,
tel character(16),
uwagi text,
CONSTRAINT x3 PRIMARY KEY (nr_miejsca)
)
Przykład 8: Definicja tabeli miejsca w języku SQL
9. Definicja tabeli pracownicy w języku SQL
Poniższy przykład przedstawia definicję tabeli pracownicy w języku SQL. Pojawia się w nim drugi rodzaj ograniczenia nazwanego CONSTRAINT x5 FOREIGN KEY (nr_miejsca)
REFERENCES miejsca (nr_miejsca). Ograniczenie to określa, że pole (nr_miejsca) jest tzw.
kluczem obcym z tabeli miejsca. Oznacza to że w tej kolumnie mogą się znajdować jedynie wartości klucza głównego (nr_miejsca) z tabeli miejsca.
CREATE TABLE pracownicy
(
nr_prac integer NOT NULL,
imie character varying(20) NOT NULL,
nazwisko character varying(20) NOT NULL,
data_zatr date NOT NULL,
dzial character varying(20) NOT NULL,
stanowisko character varying(20) NOT NULL,
pensja real,
dodatek real,
nr_miejsca integer,
tel character(16),
CONSTRAINT x4 PRIMARY KEY (nr_prac),
CONSTRAINT x5 FOREIGN KEY (nr_miejsca)
REFERENCES miejsca (nr_miejsca) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
Przykład 9: Definicja tabeli pracownicy w języku SQL
10. Definicja tabeli wypozyczenia w języku SQL
Poniższy przykład przedstawia definicję tabeli pracownicy w języku SQL. W tabeli pojawia się typ danych date służący do przechowywania danych w postaci daty. Drugim typem danych jest real służący do przechowywania liczb rzeczywistych.
CREATE TABLE wypozyczenia
(
nr_wypozyczenia integer NOT NULL,
nr_klienta integer,
nr_samochodu integer,
nr_prac_wyd integer,
nr_prac_odd integer,
nr_miejsca_wyd integer,
nr_miejsca_odd integer,
data_wyd date NOT NULL,
data_odd date,
kaucja real,
cena_jedn real NOT NULL,
CONSTRAINT x6 PRIMARY KEY (nr_wypozyczenia),
CONSTRAINT x7 FOREIGN KEY (nr_klienta)
REFERENCES klienci (nr_klienta) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT x8 FOREIGN KEY (nr_samochodu)
REFERENCES samochody (nr_samochodu) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT x9 FOREIGN KEY (nr_prac_wyd)
REFERENCES pracownicy (nr_prac) MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
Przykład 5: Definicja tabeli wypozyczenia w języku SQL
Sekcja: Język SQL
11. Struktura polecenia SELECT
Zapytania SQL - Struktura polecenia SELECT. Każde polecenie SELECT musi posiadać klauzulę SELECT oraz FROM, pozostałe klauzule są opcjonalne
SELECT – opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje
FROM – nazwy tabel lub widoków
WHERE – warunek (wybieranie wierszy)
GROUP BY - nazwy kolumn
HAVING - warunek (grupowanie wybieranych wierszy)
ORDER BY – nazwy kolumn lub pozycje kolumn
Przykład 11: Struktura polecenia SELECT
12. Wybieranie wszystkich kolumn
Wybieranie wszystkich kolumn i wierszy ma sens tylko w przypadku malych tabel. Symbol gwiazdki oznacza, że wybieramy wszystkie kolumny.
Zobacz jak działa!
SELECT * FROM pracownicy;
Przykład 11: Wybieranie wszystkich kolumn z tabeli
13. Wybieranie określonych kolumn z tabeli
Wybieranie trzech wskazanych kolumn z tabeli pracownicy. Nazwy kolumn muszą być rozdzielone przecinkami.
Zobacz jak działa!
SELECT imie, nazwisko, dzial
FROM pracownicy;
Przykład 3: Wybieranie określonych kolumn z tabeli
14. Porządkowanie wybieranych rekordów
Wynik uporządkowany jest wg nazwisk alfabetycznie. Klauzula ORDER BY domyślnie porządkuje tabele wynikową w kierunku "wartości rosnących". Opcja domyślna klauzuli ASC. Opcja klauzuli powodująca uporządkowanie w kierunku "wartości malejących" to DESC.
Zobacz jak działa!
SELECT imie, nazwisko, dzial
FROM pracownicy
ORDER BY nazwisko ASC;
Przykład 14: Porządkowanie wybieranych rekordów
15. Porządkowanie wybieranych rekordów cd
Istnieje inny sposób na wskazanie kolumn w klauzuli ORDER BY. Zamiast nazywać kolumny, możemy je wskazać poprzez ich pozycję na liście SELECT. Inne przykłady: ORDER BY 3 ASC, nazwisko asc; ORDER BY 3 ASC, 2 ASC, dzial ASC;
Zobacz jak działa!
SELECT imie, nazwisko, stanowisko, dzial
FROM pracownicy
ORDER BY 3 ASC, 2 ASC;
Przykład 15: Porządkowanie wybieranych rekordów cd
16. Wycinanie duplikatów
Słowo kluczowe DISTINCT zapewnia, ze wynik zwrócony z zapytania zawierać będzie tylko niepowtarzajace się wiersze. Wszystkie powtarzające się wartości nie zostaną wyświetlone.
Zobacz jak działa!
SELECT DISTINCT stanowisko FROM pracownicy;
Przykład 16: Wycinanie duplikatów
Sekcja: Język SQL
17. Klauzula WHERE - typ znakowy
Klauzula WHERE służy do wyboru tych rekordów które spełniają określony warunek. W
naszym przypadku wybieramy sprzedawców z tabeli pracownicy. W przypadku kolumn typu znakowego, daty lub czasu, wartości dla których sprawdzany jest warunek musza być otoczone pojedynczymi apostrofami. Przy porównaniu kolumn typu znakowego należy pamiętać, ze rozróżniane są małe i duże litery.
Zobacz jak działa!
SELECT imie, nazwisko, stanowisko, dzial
FROM pracownicy
WHERE stanowisko = 'Sprzedawca';
Przykład 17: Klauzula WHERE - typ znakowy
18. Klauzula WHERE - typ liczbowy
Dla kolumn typu numerycznego FLOAT, porównywana wartość liczbowa nie jest otoczona apostrofami - umożliwiając wykorzystanie następujących operatorów: równości, nierówności, większości, nie mniejszości, mniejszości, nie większości. Uwaga: w PostgreSQL operatory powyższe nie są określone dla formatów: INT i MONEY.
Zobacz jak działa!
SELECT imie, nazwisko, stanowisko, pensja
FROM pracownicy
WHERE pensja> 1400;
Przykład 18: Wybieranie wszystkich kolumn z tabeli
19. Operatory logiczne występujące w warunkach - AND
W warunkach logicznych występujących po klauzuli WHERE możemy używać operatorów logicznych AND, OR i NOT. Użycie w warunku WHERE operatora logicznego AND
oznacza, ze prawdziwe muszą być oba argumenty operatora logicznego AND, Aby wynik operacji logicznej był prawdziwy. Natomiast w przypadki użycia w warunku WHERE
operatora logicznego OR oznacza, że prawdziwy musi by przynajmniej jeden z argumentów operatora logicznego OR aby wynik był prawdziwy.
Zobacz jak działa!
SELECT imie, nazwisko, stanowisko, dzial
FROM pracownicy
WHERE stanowisko = 'Sprzedawca' AND dzial = 'Obslugi Klienta';
Przykład 19: Operatory logiczne występujące w warunkach - AND
20. Operatory logiczne występujące w warunkach - OR
Poniższa kwerenda zwraca listę wszystkich pracowników pracujących jako sprzedawcy oraz wszystkich pracowników technicznych.
Zobacz jak działa!
SELECT imie, nazwisko, stanowisko, dzial
FROM pracownicy
WHERE stanowisko = 'Sprzedawca' OR dzial = 'Techniczny';
Przykład 20: Operatory logiczne występujące w warunkach - OR
21. Złożone operatory logiczne
Operatory logiczne AND i OR są używane do budowy bardziej złożonych warunków. W
przykładzie kwerendy pokazane zostało, ze operator AND jest mocniejszy od operatora OR.
Zobacz jak działa!
SELECT imie, nazwisko, stanowisko, dzial
FROM pracownicy
WHERE stanowisko = 'Kierownik' AND dzial = 'Obslugi Klienta' OR dzial =
'Techniczny' ORDER BY dzial, nazwisko;
Przykład 21: Złożone operatory logiczne
22. Kolejność operatorów
W poprzednim przykładzie kwerendy pokazane zostało, że operator AND jest mocniejszy od operatora OR. Używając nawiasy w warunku WHERE możemy narzucić kolejność
sprawdzania składowych warunku.
Zobacz jak działa!
SELECT imie, nazwisko, stanowisko, dzial
FROM pracownicy
WHERE stanowisko = 'Kierownik' AND (dzial = 'Obslugi Klienta' OR dzial =
'Techniczny') ORDER BY dzial, nazwisko;
Przykład 22: Kolejność operatorów
Sekcja: Język SQL
23. Predykat IN
Predykat IN umożliwia sprawdzenie przynależności wartości atrybutu do zbioru wartości.
Wszystkie elementy zbioru musza być tego samego typu. Wartości mogą być typu numerycznego, znakowego typu daty lub czasu. Wartości typu znakowego, daty i czasu musza być otoczone apostrofem.
Zobacz jak działa!
SELECT imie, nazwisko, stanowisko, dzial FROM pracownicy
WHERE stanowisko IN ('Sprzedawca', 'Kierownik')
ORDER BY stanowisko ASC, dzial DESC, nazwisko ASC;
Przykład 23: Predykat IN
24. Predykat IN - wartości numeryczne
Jeśli zbiór zawiera wartości jednego z typów numerycznych, to pomijamy apostrofy.
Zobacz jak działa!
SELECT marka, model, rok_produkcji, poj_silnika
FROM samochody
WHERE poj_silnika IN (1400, 1600);
Przykład 24: Predykat IN - wartości numeryczne
25. Predykat BETWEEN AND
Predykat BETWEEN pozwala sprawdzić, czy dana wartość zawiera się pomiędzy dwoma wskazanymi wartościami.
Zobacz jak działa!
SELECT marka, model, rok_produkcji, kolor, poj_silnika
FROM samochody
WHERE poj_silnika BETWEEN 1100 AND 1800
ORDER BY marka, model;
Przykład 25: Predykat BETWEEN AND
26. Warunki z wartością NULL
Wybieranie wierszy z tabeli, w których jedno z pól zawiera wartość pusta NULL, polega na użyciu predykatu NULL. W przykładzie wybieramy wszystkich klientów którzy w polu karta nie posiadają żadnego wpisu.
Zobacz jak działa!
SELECT imie, nazwisko, karta, miasto
FROM klienci
WHERE karta IS NULL;
Przykład 26: Warunki z wartością NULL
27. Warunki z wartością NOT NULL
Możliwe jest wybranie wszystkich klientów posiadających kartę kredytowa. Wtedy w klauzuli WHERE dla sprawdzenia wartości w polu karta używamy predykatu NULL ale z zaprzeczeniem NOT.
Zobacz jak działa!
SELECT imie, nazwisko, karta, miasto
WHERE karta IS NOT NULL;
Przykład 27: Warunki z wartością NOT NULL
Sekcja: Projekt bazy danych - uczelnia.
50. Projekt tabeli miasto w SQL.
Budujemy tabelę zawierającą dane studenta niezbędne w programie. Tabela posiada następujące atrybuty:
nr, nazwa. Atrybut nr jest kluczem głównym (primary key - PK) tabeli miasto. Klucz główny możemy deklarować na dwa sposoby: pisząc za definicją atrybutu słowo primary key, albo w sekcji ograniczeń (constraint). Każde ograniczenie musi mieć unikalną nazwę w bazie danych. W naszym przypadku ograniczenie nazywa się y1. Składnia ograniczenia wygląda następująco:
constraint nazwa_ograniczenia primary key (nazwa_kolumny)
create table miasto
(
nr integer,
nazwa varchar(20),
constraint y1 primary key (nr)
);
Przykład 50: Projekt tabeli miasto w SQL.
51. Wprowadzanie danych do tabeli miasto.
Dane do tabeli wprowadzamy za pomocą instrukcji insert. Instrukcja posiada następującą składnię:
insert into nazwa_tabeli [(atrybut1,...,atrybutn)] values(wartość1,...,wartośćn); Jeśli wprowadzamy wszystkie atrybuty to nazwy atrybutów można opuścić.
insert into miasto (nr,nazwa) values(20,'Warszawa');
insert into miasto (nr,nazwa) values(21,'Wrocław');
insert into miasto (nr,nazwa) values(22,'Gdynia');
insert into miasto (nr,nazwa) values(23,'Kraków');
insert into miasto (nr,nazwa) values(24,'Łódź');
Przykład 51: Wprowadzanie danych do tabeli miasto.
52. Projekt tabeli student w SQL.
Tabela student zawiera następujące atrybuty: nr, imie, nazwisko, indeks, semestr, nr_miasta.
Atrybut jest kluczem głównym o czym mówi ograniczenie y2. Atrybut nr_miasta jest tzw.
kluczem obcym (foreign key - FK). Klucz obcy to wartość istniejącego klucza głównego z tabeli słownikowej (tabeli miasto). Określa to ograniczenie y3. Składnia ograniczenia typu klucz obcy wygląda następująco:
constraint nazwa_ograniczenia foreign key (nazwa_klucza_FK)
references nazwa_tabeli_słownikowej(nazwa_klucza_PK)
create table student
(
nr integer,
imie varchar(30),
nazwisko varchar(30),
indeks varchar(10),
semestr integer,
nr_miasta integer,
constraint y2 primary key (nr),
constraint y3 foreign key (nr_miasta) references miasto(nr)
);
Przykład 52: Projekt tabeli student w SQL.
53. Wprowadzanie danych do tabeli student.
Wprowadzając dane do tabeli student należy zwrócić uwagę aby atrybut nr_miasta wypełniać istniejącymi wartościami kolumny (nr)czyli klucza głównego z tabeli miasto.
insert into student values(10,'Jan','Nowak','300',1,20);
insert into student values(11,'Stefan','Kowalski','301',1,21);
insert into student values(12,'Ewa','Nowak','302',1,22);
insert into student values(13,'Stefan','Szyszkownik','303',1,23);
insert into student values(14,'Roch','Kowalski','304',1,24);
Przykład 53: Wprowadzanie danych do tabeli student.
54. Wprowadzanie wartości kluczy głównych - inna metoda.
Zamiast wprowadzać wartości kluczy obcych w formie liczb, gdzie łatwo o pomyłkę możemy wykorzystać zapytanie wybierające nazwę z tabeli słownikowej. W naszym przypadku zamiast napisać liczbę 20 (wartość - FK) dla miasta Warszawa w tabeli miasto możemy napisać:
(select nr from miasto where nazwa='Łódź')
insert into student values(10,'Jan','Nowak','300',1,(select nr from miasto
where nazwa='Warszawa'));
insert into student values(11,'Stefan','Kowalski','301',1,(select nr from miasto where nazwa='Wrocław'));
insert into student values(12,'Ewa','Nowak','302',1,(select nr from miasto
where nazwa='Gdynia'));
insert into student values(13,'Stefan','Szyszkownik','303',1,(select nr
from miasto where nazwa='Kraków'));
insert into student values(14,'Roch','Kowalski','304',1,(select nr from
miasto where nazwa='Łódź'));
Przykład 54: Wprowadzanie wartości kluczy obcych - inna metoda.
55. Poprawianie danych w tabeli.
Dane w tabeli poprawiamy za pomocą instrukcji update set. Klauzula set ustawia nową wartość atrybutów. W warunku musimy precyzyjnie określić jaki rekord (rekordy) chcemy poprawić.
update student
set imie='Ewelina', nazwisko='Nowakowska'
where imie='Ewa' and nazwisko='Nowak';
Przykład 55: Poprawianie danych w tabeli.
Kasowanie danych w tabeli.
Dane w tabeli kasujemy instrukcją delete from. Należy zwrócić uwagę na dobranie takiego warunku który wykasuje nam tylko te rekordy które chcemy.
delete from student where imie='Ewa' and nazwisko='Nowak';
Przykład 56: Kasowanie danych w tabeli.
Wyświetlanie danych z obu tabel.
Wyświetlanie danych z tabel student i miasto. Należy zwrócić uwagę na prawidłowo zdefiniowany warunek złączenia.
select s.nr,s.imie,s.nazwisko,s.indeks,s.semestr,m.nazwa
from student s, miasto m
where s.nr_miasta=m.nr
order by s.nazwisko, s.imie;
Przykład 57: Wyświetlanie danych z obu tabel.
Gotowy skrypt tworzący bazę uczelnia.
Gotowy skrypt tworzący bazę danych oraz wprowadzający dane testowe. Przed pierwszym uruchomieniem należy zaremować kasowanie tabel ponieważ nie ma ich jeszcze w bazie.
drop table student;
drop table miasto;
create table miasto
(
nr integer,
nazwa varchar(20),
constraint y1 primary key (nr)
);
insert into miasto (nr,nazwa) values(20,'Warszawa');
insert into miasto (nr,nazwa) values(21,'Wrocław');
insert into miasto (nr,nazwa) values(22,'Gdynia');
insert into miasto (nr,nazwa) values(23,'Kraków');
insert into miasto (nr,nazwa) values(24,'Łódź');
create table student
(
nr integer,
imie varchar(30),
nazwisko varchar(30),
indeks varchar(10),
semestr integer,
nr_miasta integer,
constraint y2 primary key (nr),
constraint y3 foreign key (nr_miasta) references miasto(nr)
);
insert into student values(10,'Jan','Nowak','300',1,(select nr from miasto
where nazwa='Warszawa'));
insert into student values(11,'Stefan','Kowalski','301',1,(select nr from
miasto where nazwa='Wrocław'));
insert into student values(12,'Ewa','Nowak','302',1,(select nr from miasto
where nazwa='Gdynia'));
insert into student values(13,'Stefan','Szyszkownik','303',1,(select nr
from miasto where nazwa='Kraków'));
insert into student values(14,'Roch','Kowalski','304',1,(select nr from
miasto where nazwa='Łódź'));
select s.nr,s.imie,s.nazwisko,s.indeks,s.semestr,m.nazwa
from student s, miasto m
where s.nr_miasta=m.nr;
Przykład 58: Gotowy skrypt tworzący bazę uczelnia.