Sekcja: Relacyjne bazy danych

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

FROM klienci

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.