background image

1

Modyfikacje danych

Do modyfikacji danych służą trzy polecenia

INSERT

Dodawanie danych do tabeli

UPDATE

Modyfikacja istniejących danych w tabeli

DELETE

Usunięcie danych z tabeli

Podczas dodawania i modyfikacji dane muszą 
być zgodne z dziedzinami atrybutów

background image

2

Dodawanie danych INSERT

INSERT INTO 

NazwaTabeli

(

lista_kolumn

)

VALUES (

lista_wartości_danych

);

NazwaTabeli

 –  oznacza  tabelę  bazową  lub 

modyfikowalną perspektywę

lista_kolumn

 –  lista  kolumn  tabeli  oddzielonych 

przecinakami (kilka lub jedna kolumna)

lista_wartości_danych

 –  lista  wartości  danych 

odpowiadających kolejnym atrybutom wymienionym 

w liście kolumn

background image

3

Zasady tworzenia użycia INSERT

Parametr 

lista_kolumn

 jest opcjonalny

Brak parametru oznacza, że polecenie dotyczy wszystkich 
kolumn tabeli

Kolejność kolumn określona jest przez kolejność 

tworzenia atrybutów

Pojawienie się tego parametru oznacza konieczność 
podania wartości dla wszystkich wymienionych kolumn

Wartości domyślne dla kolumn nie wymienionych na 

liście lub wartość nieokreślona (NULL)

Liczba parametrów na obu listach musi być identyczna

Zgodność dziedzin kolejnych elementów

Polecenie nie dokonuje automatycznej konwersji typów

background image

4

Przykłady

INSERT INTO Personel
VALUES ('SG16','Alan','Brown','asystent','M', 
DATE '25.05.1957',8300,'B003');

Wypisujemy wartości dla wszystkich kolumn

Kolejność kolumn zgodna z kolejnością kolumn w 

definicji tabeli

INSERT INTO Personel (pracownikNr, imie, 
nazwisko, stanowisko, pensja, biuroNr)
VALUES 

('SG44','Anne','Jones','asystent',8100,'B003');

background image

5

INSERT - SELECT

Kopiowanie wybranych wierszy z innych tabel

INSERT INTO NazwaTabeli(

lista_kolumn

)

SELECT ....

Zapytanie SELECT musi zwracać wynik zgodny 
ze schematem wskazanej tabeli

Podzapytanie może być złożone

Po klauzuli SELECT może pojawić się kilka nazw

lista_kolumn  oraz  wynik  działania  podzapytania  SELECT 
podlegają  tym  identycznym  regułom  ja  k  w  poleceniu 

INSERT

background image

6

SELECT nieruchomoscNr, typ, pokoje, czynsz FROM 
Nieruchomosc ORDER BY typ DESC, czynsz DESC;

nieruchomoscNr

typ

pokoje

czynsz

PG16

mieszkanie

4

450

PL94

mieszkanie

4

400

PG36

mieszkanie

3

375

PG4

mieszkanie

3

350

PA14

dom

6

650

PG21

dom

5

600

NieruchomoscCzynsz(

nieruchomoscNr

typ

pokoje

czynsz

);

INSERT INTO NieruchomoscCzynsz 

SELECT nieruchomoscNr, typ pokoje, czynsz FROM 
Nieruchomosc ORDER BY typ DESC, czynsz DESC;

background image

7

Modyfikacja danych

UPDATE NazwaTabeli
SET nazwa_kolumny=wartosc, ...
[WHERE warunek];

Parametr  NazwaTabeli  może  być  nazwą  tabeli 

bazowej lub perspektywy modyfikowalnej

Klauzula  SET  wskazuje  kolumny  których  wartości 

muszą być zmienione

Klauzula  WHERE  wybiera  wiersze,  które  mają  być 

zmodyfikowane

Pominięcie  klauzuli  powoduje  modyfikację  wszystkich 
rekordów

background image

8

Przykłady

UPDATE Personel SET pensja = pensja *1.03;

Modyfikacja dotyczy wszystkich wierszy, pominięta 

została klauzula WHERE

UPDATE Personel SET pensja = pensja*1.05 
WHERE stanowisko = 'dyrektor';

Modyfikacja będzie dotyczyć tylko tych wybranych 

rekordów

UPDATE Personel SET stanowisko = 'dyrektor', 
pensja = 18000 WHERE praconskiNr = 'SG14';

Modyfikacja wybranego rekordu

background image

9

Usuwanie danych z tabeli

DELETE FROM 

nazwa_tabeli

[WHERE warunek];

nazwa_tabeli

 oznacza nazwę tabeli bazowej lub 

nazwę perspektywy modyfikowalnej

Pominięcie  klauzuli  WHERE  oznaczać  będzie 
usunięcie wszystkich rekordów z tabeli

Polecenie  bez  warunku  selekcji  nie  usuwa  samej 

tabeli a jedynie zawarte w niej rekordy

Umieszczenie warunku selekcji powoduje usunięcie 

tylko wybranych rekordów

background image

10

Przykłady

DELETE FROM Wizyta;

Usuwa wszystkie rekordy z tabeli Wizyta

DELETE FROM Wizyta WHERE 
nieruchomoscNr = 'PG4';

Usuwa tylko rekordy odpowiadające określonej 

nieruchomości

Klauzula DELETE może zawierać podzapytania 
jedynie w sekcji WHERE

Podzapytania skalarne

background image

11

Łączenie tabel wynikowych

Operacje na zbiorach

Suma - UNION, przekrój - INTERSECT, różnica – EXCEPT 
(MINUS)

Zachowanie schematów

Operacje  na  zbiorach  mogą  być  wykonane  w  oparciu 

o wskazane kolumny lub wszystkie wspólne kolumny

CORRESPONDING BY

CORRESPONDING

Dodanie  klauzuli ALL  powoduje  uwzględnienie 
wszystkich wierszy

Duplikaty nie są usuwane

background image

12

Suma zbiorów

Podaj listę wszystkich miast, w których znajduje się 

biuro lub nieruchomość

Dane  znajdują  się  w  dwóch  tabelach  Biuro  oraz 

Nieruchomosc

SELECT miasto FROM Biuro WHERE Miasto IS NOT NULL )

UNION

(  SELECT  miasto  FROM  Nieruchomosc  WHERE  miasto  IS  NOT 
NULL
);

Wynik  końcowy  jest  sumą  wszystkich  wierszy  z 

pierwszego i drugiego zapytania

Duplikaty wierszy są usuwane z wyniku

background image

13

SELECT * FROM Biuro WHERE miasto IS NOT NULL )

UNION CORRESPONDING BY miasto

SELECT * FROM Nieruchomość WHERE miasto IS NOT 
NULL
);

Jawne  wskazanie  kolumny  po  której  odbywać  się  będzie 
sumowanie

Wskazane  kolumny  muszą  mieć  identyczne  dziedziny  oraz 
nazwy

Zmiana nazwy kolumny może być dokonana przez operator AS

CORRESPONDING BY miasto

Użyte będą wszystkie kolumny posiadające te same nazwy i 

schematy

Kolejność wyników określona jest przez pierwsze zapytanie

background image

14

Przekrój zbiorów - INTERSECT

Wynikiem  działania  operatora  jest  tabela  zawierająca 
wspólne wiersza dwóch tabel

Podaj  listę  wszystkich  miast  w  których  znajduje  się  i 

biuro i nieruchomość

SELECT miasto FROM Biuro)

INTERSECT

( SELECT miasto FROM Nieruchomosc);

Obliczenie tabeli pośredniej pierwszego zapytania

Obliczenie tabeli pośredniej trzeciego zapytania

Utworzenie  jednej  tabeli  wynikowej  składającej  się  z  wierszy 

występujących w obu wyliczonych tabelach pośrednich

background image

15

(SELECT * FROM Biuro )

INTERSECT CORRESPONDING BY miasto

(SELECT * FROM Nieruchomosc);

Powyższe zapytanie może być wykonane również w inny 

sposób

SELECT DISTINCT 

b.miasto

 FROM 

Biuro b

Nieruchomosc d

 

WHERE 

b.miasto

 = 

d.miasto

;

SELECT DISTINCT 

miasto

 FROM 

Biuro b

 

WHERE EXIST

 ( SELECT * FROM 

Nieruchomosc d

 WHERE

                            

b.miasto

 = 

d.miasto

 );

background image

16

Różnica zbiorów – EXCEPT (MINUS)

Podaj  listę  wszystkich  zbiorów,  w  których  znajduje  się 

biuro, ale nie ma żadnej nieruchomości

SELECT miasto FROM Biuro )

EXCEPT

SELECT miasto FROM Nieruchomosc );

Obliczenie  tabeli  pośredniej  za  pomocą  pierwszego 
zapytania

Obliczenie  drugiej  tabeli  pośredniej  za  pomocą 

drugiego zapytania

Utworzenie  tabeli  końcowej  z  wierszy  należących  do 
pierwszej tabeli pośredniej ale nie występuje w drugiej

background image

17

SELECT * FROM Biuro )

EXCEPT CORRESPONDING BY miasto

SELECT * FROM Nieruchomosc);

SELECT DISTINCT miasto FROM Biuro
WHERE miasto NOT IN

 

SELECT miasto FROM

                                         Nieruchomosc);

SELECT DISTINCT 

miasto

 FROM 

Biuro b

WHERE NOT EXIST 

SELECT * FROM 

Nieruchomosc d

                                    WHERE 

b.miasto

 = 

d.miasto

)

;

background image

18

Zapytania dotyczące wielu tabel

Podstawą zapytania dla wielu tabel jest

 

złączenie

Operacja  złączenia 

łączy  informacje  z  dwu  (lub  kilku) 

tabel

,  wybierając  z  nich  takie,  które  w  kolumnach 

złączenia mają takie

 

same wartości

Złączenia  są  stosowane,  gdy  tabela  wynikowa 

zawierać będzie kolumny z różnych tabel

Poszczególne  tabele  pojawiające  się  na  liście  FROM

oddzielamy przecinkami

Jeżeli  nazwy  kolumn  w  tabelach  mogą  się  powtarzać 

stosujemy 

aliasy nazw dla tabel

background image

19

Złączenia proste

Podaj  nazwy  klientów,  którzy  odwiedzili  nieruchomości. 

Wraz z danymi klienta podaj zgłoszone uwagi

Zapytanie dotyczy dwóch tabel 

Klient

 oraz 

Wizyta

Obydwie  tabele  zawierają  kolumnę 

klientNr

 więc 

muszą być zastosowane aliasy

Jednoznaczne określenie pochodzenia kolumny

SELECT 

k.klientNr

imie

nazwisko

nieruchomoscNr

uwagi

 

FROM 

Klient k

Wizyta w

 

WHERE 

k.klientNr

 = 

w.klientNr

;

background image

20

Jeżeli  nazwa  kolumny  nie  jest  poprzedzona  nazwą  tabeli 
lub  nazwą  zastępczą  SZBD  automatycznie  wybierze 

odpowiednią tabelę

Błędy mogą się pojawić dla identycznych nazw kolumn

Wynikiem  działania  tego  zapytania  są  wiersze  obu  tabel, 

które w kolumnach 

klientNr

 mają takie same wartości

Kolumny te nazywane są 

kolumnami złączenia

Kolumny złączenia muszą mieć zgodne schematy

background image

21

Złączenie wewnętrzne

Złączenie  wewnętrzne  tworzy  kombinację  dwóch  tabel  i 
wiąże je na podstawie wartości ich kolumn

Kolumny muszą mieć identyczne schematy

tabela_1

 INNER JOIN 

tabela_2

 ON 

kolumna_z_tabeli_1

 = 

kolumna_z_tabeli_2

Słowa  kluczowe  INNER  JOIN  może  być  zastąpione 
słowem JOIN

Zastosowanie  klauzuli  WHERE  dotyczyć  będzie  całego 
złączenia

Obliczany jest po dokonaniu złączenia

background image

22

SELECT 

klientNr

imie

nazwisko

nieruchomoscNr

uwagi

 

FROM 

Klient 

INNER JOIN

 

Wizyta

 

ON

 

Klient.klientNr = Wizyta.KlientNr;

Do  złączenia  kolumn  można  zastosować  dowolny 

operator

<, >, <=, >=, <>, 

LIKE

Złączenie  uzyskane  za  pomocą  operatora  =  nazywamy 

równozłączeniem

Operacja złączenia może dotyczyć 

kilku tabel

Niektóre  SZBD  wymagają  zastosowania  nawiasów 
ograniczających kolejne złączenie

background image

23

Alternatywne sposoby zapisu

SELECT 

klientNr

imie

nazwisko

nieruchomoscNr

uwagi

 

FROM 

Klient 

INNER JOIN 

Wizyta

 

ON

 

Klient.klientNr = Wizyta.KlientNr;

SELECT 

klientNr, imie, nazwisko, nieruchomoscNr, uwagi

 

FROM 

Klient 

INNER JOIN 

Wizyta

 USNIG 

klientNr;

SELECT 

klientNr, imie, nazwisko, nieruchomoscNr, uwagi

 

FROM 

Klient 

NATURAL JOIN 

Wizyta;

background image

24

Wielozłączenia

Podaj  nazwy  klientów,  którzy  odwiedzili  nieruchomości. 

Wraz  z  danymi  klienta  podaj  zgłoszone  uwagi  oraz  datę 

rejestracji klienta

SELECT

 

klientNr

imie

nazwisko

nieruchomoscNr

uwagi, 

dataRejestracji, biuroNr

FROM 

Klient 

INNER JOIN 

Wizyta

 

ON

 

Klient.klientNr

 = 

Wizyta.KlientNr

 

INNER JOIN

 

Rejestracja

 

ON

 

Wizyta.klientNr

 = 

Rejestracja.klientNr

;

background image

25

Złączenie trzech tabel

Dla każdego biura podaj numery i nazwiska pracowników, 

którzy  nadzorują  nieruchomości.  W  wyniku  podaj  także 

miasto,  w  którym  znajduje  się  biuro,  oraz  nieruchomości 

nadzorowane przez pracownika

Tabele: Biuro, Personel, Nieruchomosc

Informacje z tabel Biuro i Personel złączone są za pomocą 

warunku 

Biuro.biuroNr = Personel.biuroNr

Połączenie pracownika z biurem w którym pracuje

Tabele  Personel  oraz  Nieruchomosc  związane  są  za 

pomocą 

warunku 

Personel.PracownikNr 

Nieruchomośc.PracownikNr

Połączenie  pracowników  z  nadzorowanymi  przez  nich 

nieruchomościami

background image

26

SELECT 

b.biuro

b.miasto

p.pracownikNr

, imie, nazwisko, 

nieruchomoscNr

FROM 

Biuro b

Personel p

Nieruchomosc d

WHERE 

b.biuroNr

 = 

p.biuroNr

 AND 

p.pracownikNr

 = 

d.pracownikNr

ORDER BY 

b.biuroNr

p.pracownikNr

nieruchomoscNr

;

SELECT 

bp.biuro

bp.miasto

bp.pracownikNr

, imie, 

nazwisko, nieruchomoscNr

FROM ( 

Biuro b

 JOIN 

Personel p

 USING 

biuroNr

 ) AS 

bp

JOIN 

Nieruchomosc 

USING 

pracownikNr

;

background image

27

Obliczanie złączenia

Każde 

złączenie 

jest 

podzbiorem 

iloczynu 

kartezjańskiego

 dwóch tabel

Iloczyn  kartezjański

 

dwóch  tabel  jest  tabelą,  która 

składa  się  ze  wszystkich  możliwych  par  wierszy  z 

dwóch tabel składowych

Tabela  wynikowa  zawiera 

wszystkie

 kolumny 

pierwszej i drugiej tabeli iloczynu kartezjańskiego

SELECT [ DISTINCT | ALL ] { 

* | lista_kolumn

 )

FROM 

NazwaTabeli1

 CROSS JOIN 

NazwaTabeli2

;

background image

28

1.

Utwórz  iloczyn  kartezjański  tabel  wymieninych  po 
klauzuli FROM

2.

Jeżeli istnieje klauzula WHERE, to zastosuj warunek 

selekcji  dla  każdego  wiersza  iloczynu  (pozostają 

tylko te wiersze, które spełniają warunek)

3.

Dla  pozostałych  wierszy  ustal  wartość  każdego 
elementu  z  listy  SELECT  i  wygeneruj  jeden  wiersz 

wyniku

4.

Jeżeli 

zastosowano 

słowo 

DISTINCT

usuń 

powtarzające się wiersze z tabeli wynikowej

5.

Jeżeli  występuje  klauzula  ORDER  BY,  uporządkuj 

tabelę wynikową według podanych kryteriów

background image

29

Złączenia zewnętrzne

Złączenia wewnętrzne łączy w pary wiersze z dwóch 

tabel jeżeli mają takie same wartości w wybranej 

kolumnie

Jeżeli wiersz tabeli nie zostanie połączony w parę to nie 

trafia do tabeli wynikowej

Złączenie zewnętrzne pozwala zachować wiersze nie 

spełniające tego warunku

Biuro
biuroNr

miasto

B003

Glasgow

B004

Bristol

B002

Londyn

Nieruchomosc
nieruchomoscNr miasto
PA14

Aberdeen

PL94

Londyn

PG4

Glasgow

background image

30

SELECT 

b.*

d.*

 FROM 

Biuro b

Nieruchomosc d

 WHERE 

b.miasto

 = 

d.miasto

;

SELECT 

b.*

 

d.*

 FROM 

Biuro b

 INNER JOIN 

Nieruchomosc d

 ON 

b.miasto

 = 

d.miasto

;

Tabela wynikowa ma dwa wiersze, w których występują 
takie same miasta

Nie istnieje wiersz z miastem Bristol i Aberdeen

W celu włączenia tych wierszy należy zastosować 

złączenia zewnętrzne

Lewostronne, prawostronne, pełne

biuroNr

miasto

nieruchomoscNr miasto

B003

Glasgow

PG4

Glasgow

B002

Londyn

PL94

Londyn

background image

31

Lewostronne złączenie zewnętrzne

Złączenie  lewostronne  pozwala  uwzględnić  w  wyniku 

również  te  wiersze,  które  nie  mają  swojego 

odpowiednika w drugiej tabeli

Zawsze uwzględnione zostaną wiersze z lewej tabeli

SELECT 

b.*

d.*

 FROM 

Biuro b

 LEFT JOIN 

Nieruchomosc d

 ON 

b.miasto

 = 

d.miasto

;

biuroNr

miasto

nieruchomoscNr miasto

B003

Glasgow

PG4

Glasgow

B002

Londyn

PL94

Londyn

B004

Bristol

NULL

NULL

background image

32

Prawostronne złączenie zewnętrzne

W wyniku uwzględniane są wszystkie wiersze 
znajdujące się w prawej tabeli złączenia

SELECT 

b.*

d.*

 FROM 

Biuro b

 RIGHT JOIN 

Nieruchomosc d

 ON 

b.miasto

 = 

d.miasto

;

biuroNr

miasto

nieruchomoscNr miasto

B003

Glasgow

PG4

Glasgow

B002

Londyn

PL94

Londyn

NULL

NULL

PA14

Abredeen

Biuro
biuroNr

miasto

B003

Glasgow

B004

Bristol

B002

Londyn

Nieruchomosc
nieruchomoscNr miasto
PA14

Aberdeen

PL94

Londyn

PG4

Glasgow

background image

33

Pełne złączenie zewnętrzne

Pełne złączenie wewnętrzne umożliwia uwzględnienie 

wszystkich  niedopasowanych  wierszy,  zarówno  z 

lewej

 jak i 

prawej

 tabeli złączenia

SELECT 

b.*

d.*

 FROM 

Biuro b

 FULL JOIN 

Nieruchomosc d

 ON 

b.miasto

 = 

d.miasto

;

biuroNr

miasto

nieruchomoscNr miasto

B003

Glasgow

PG4

Glasgow

B002

Londyn

PL94

Londyn

NULL

NULL

PA14

Abredeen

B004

Bristol

NULL

NULL


Document Outline