background image

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).  

background image

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 

background image

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 
 

 

 

background image

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 

background image

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 

background image

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!

  

background image

 
 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!

  

background image

 
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!

  

 

background image

 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!

  

background image

 
 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  

background image

 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. 

background image

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')); 

background image

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;   
 

background image

 
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.