Strona główna

Architektura trójwarstwowa ansi-sparc (zewnętrzna, konceptualna I wewnętrzna)


Pobieranie 66.6 Kb.
Data18.06.2016
Rozmiar66.6 Kb.
POWTÓRZENIE


  • Architektura trójwarstwowa ANSI-SPARC (zewnętrzna, konceptualna i wewnętrzna);

  • Schemat bazy danych;

  • Logiczna i fizyczna niezależność danych ;

  • Języki baz danych (języki definicji danych, języki manipulowania danymi );

  • Modele danych;

  • Model relacyjny zarządzania bazą danych;

  • Terminologia: relacja (tabela), atrybut (pole), dziedzina, krotka, stopień relacji moc relacji;

  • Relacyjna baza danych.

Relacje matematyczne:

Mamy dwa zbiory D1 i D2, gdzie: D1 = {2,4} i D2 = {1,3,5}

Iloczyn kartezjański D1 x D2 = {(2,1),(2,3),(2,5),(4,1),(4,3),(4,5)} jest zbiorem wszystkich uporządkowanych par, których pierwszy element należy do D1, a drugi element do D2.

Dowolny podzbiór takiego iloczynu kartezjańskiego jest relacją, np.:

R = {(2,1),(4,1)}

Którą możemy zapisać jako:



Inna relacja, w której pierwszy element jest zawsze dwa razy większy niż drugi:



czyli S={(2,1)}


Rozszerzając pojęcie relacji na trzy zbiory:

D1={1,3}, D2={2,4}, D3={5,6}

Iloczyn kartezjański:

D1 x D2 x D3 = {(1,2,5),(1,2,6),(1,4,5),(1,4,6),(3,2,5),(3,2,6),(3,4,5),(3,4,6)}

Dowolny podzbiór tych uporządkowanych trójek jest relacją.
Niech D1 x D2 x ...x Dn będą n zbiorami. Ich iloczyn kartezjański:

Dowolny zbiór n-krotek z tego iloczynu kartezjańskiego jest relacją n zbiorów.


Własności relacji:

Baza danych jest zbiorem relacji, o następujących własnościach:



  • każda relacja w bazie danych jest jednoznacznie określona przez swoją nazwę;

  • każda kolumna w relacji (atrybut) ma jednoznaczną nazwę (w ramach tej relacji);

  • kolumny relacji tworzą zbiór nieuporządkowany;

  • wszystkie wartości w danej kolumnie muszą być tego samego typu (pochodzić z tej samej dziedziny);

  • każdy wiersz (krotka) jest inny – nie ma duplikatów krotek;

  • teoretycznie, kolejność wierszy nie ma znaczenia (w praktyce może mieć wpływ na efektywność wyszukiwania odpowiednich grup kotek);

  • każde pole (przecięcie wiersza z kolumną) zawiera wartość atomową z dziedziny określonej przez kolumnę. Brakowi wartości odpowiada wartość specjalnej NULL, zgodna z każdym typem kolumny (chyba, że została jawnie wykluczona przez definicję typu kolumny).

  • każda relacja zawiera klucz główny -- kolumnę (lub kolumny), której wartości jednoznacznie identyfikują wiersz (a więc w szczególności nie powtarzają się). Wartością klucza głównego nie może być NULL.


Wartość pusta (NULL) – reprezentuje wartość atrybutu, która w danej chwili nie jest znana lub nie może zostać ustalona.
Klucze relacji:

Klucz główny - to jedna lub więcej kolumn tabeli, w których wartości jednoznacznie identyfikują każdy wiersz w tabeli.
Każda relacja musi mieć klucz główny. Dzięki temu możemy zapewnić, aby wiersze nie powtarzały się w relacji.
Klucz kandydujący to kolumna lub zbiór kolumn, które mogą występować jako jednoznaczny identyfikator wierszy w tabeli. W każdej relacji może istnieć wiele kluczy kandydujących.

Klucz główny jest wybierany ze zbioru kluczy kandydujących. Każdy klucz kandydujący, a więc także każdy klucz główny, musi mieć dwie właściwości. Musi być jednoznaczny i nie może mieć wartości NULL.

Po pierwsze, z definicji każdy klucz kandydujący musi być jednoznacznym identyfikatorem. Dlatego nie może być żadnych powtarzających się układów wartości w kolumnach kluczy kandydującego lub głównego.

Po drugie, wartość klucza głównego musi być określona dla każdego wiersza w tabeli.




Klucz obcy - jest kolumną lub grupą kolumn tabeli, która czerpie swoje wartości z tej samej dziedziny co klucz główny tabeli powiązanej z nią w bazie danych.
Klucze obce są sposobem łączenia danych przechowywanych w różnych tabelach.

Integralność danych


Każdy atrybut jest związany z pewną dziedziną, co oznacza, że istnieją więzy nakładające ograniczenia na zbiór dopuszczanych wartości atrybutów relacji (więzy dziedzinowe).

Istnieją jeszcze dwa dodatkowe rodzaje więzów integralności, które nakładają warunki lub ograniczenia na wszystkie wystąpienia bazy danych:



  • Integralność encji: każda tabela musi posiadać klucz główny, a wartości klucza głównego muszą być w ramach tabeli unikalne i nie równe NULL, zapobiega to wystąpieniu w tabeli powtórzeń wierszy;

  • Integralność referencyjna: każda wartość klucza obcego może być albo równa jakiejś wartości klucza głównego występującej w tabeli powiązanej, lub (ewentualnie) NULL.

Pociąga to za sobą konieczność określenia reguły postępowania w wypadku usuwania wiersza z tabeli powiązanej, co mogłoby unieważnić niektóre wartości kluczy obcych w tabelach do niej się odnoszących.

Mówią one, co powinno się stać z powiązaną tabelą, gdy modyfikujemy wiersz lub wiersze w tabeli docelowej.

Są trzy możliwości, które określają, co się będzie działo z docelowymi i powiązanymi krotkami dla każdego związku między tabelami w naszej bazie:

1. Ograniczone usuwanie(Restricted). Podejście ostrożne – nie dopuszcza do usuwania rekordu nadrzędnego, jeśli istnieją rekordy podrzędne.

2. Kaskadowe usuwanie(Cascades). Podejście ufne – przy usuwaniu rekordu nadrzędnego usuwa także rekordy podrzędne.

3. Izolowane usuwanie(Isolated). Podejście wyważone – usuwa jedynie rekord nadrzędny, nieważne wartości kluczy obcych ulegają zastąpieniu przez NULL.

W praktyce zazwyczaj jest pożądane stosowanie dalszych warunków integralności (integralność dodatkowa – dodatkowe warunki poprawności danych określone przez użytkowników lub administratorów bazy danych). Na ogół istnieją w DBMS mechanizmy narzucenia takich warunków, sformułowanych w języku algebry relacyjnej lub zbliżonym.

Schemat relacyjnej bazy danych:

Relacyjna baza danych składa się z pewnej liczby znormalizowanych relacji, np.:



Biuro (biuroNr, ulica, miasto, kod pocztowy)

Personel (pracownikNr, imię, nazwisko, stanowisko, płeć, dataUr, pensja, biuroNr)

Nieruchomość (nieruchomośćNr, ulica, miasto, kod pocztowy, typ, pokoje, czynsz, właścicielNr, pracownikNr, biuroNr)

Klient (klientNr, imię, nazwisko, adres, telefon, preferencje, maksCzynsz)

Właściciel (właścicielNr, imię, nazwisko, adres, telefon)

Wizyta (klientNr, nieruchomośćNr, dataWizyty, uwagi)

Rejestracja (klientNr, biuroNr, pracownikNr, dataRejestracji)

Wynajęcie (umowaNr, nieruchomośćNr, klientNr, czynsz, formaPłatności, kaucja, zapłacona, od, do, okres)

Schemat relacji przedstawia się zazwyczaj podając nazwę relacji, po której w nawiasie następują nazwy atrybutów. Klucz główny zazwyczaj oznacza się podkreśleniem.



Algebra relacji
Algebra relacjizawiera operacje, które pozwalają definiować nowe relacje w oparciu o relacje wyjściowe bez zmiany ich zawartości.
Algebra relacyjna jest zbiorem ośmiu operatorów. Każdy operator bierze jedną lub więcej relacji jako argument i produkuje jedną relację jako wynik.

Trzema głównymi operatorami algebry relacyjnej są: selekcja (ograniczenie), rzut (projekcja) i złączenie. Dzięki tym trzem operatorom możemy wykonać większość operacji na danych wymaganych od systemu relacyjnego.

Istnieją również dodatkowe operatory - iloczyn, suma, przecięcie, różnica i iloraz.
Ponieważ zarówno argumenty jak i wyniki są relacjami, więc wynik jednej operacji może stać się argumentem kolejnej. Pozwala to na zagnieżdżanie wyrażeń algebry relacji (relacje są domknięte na operacje algebry relacji).

Operacje unarne – operacja, które mają jeden argument (relację):


Selekcja

Selekcja jest operatorem, który bierze jedną relację jako swój argument i produkuje w wyniku jedną relację. Selekcja może być uważana za “poziomą maszynę do cięcia", gdyż wydobywa z wejściowej relacji wiersze, które pasują do podanego warunku, i przekazuje je do relacji wynikowej.

Np. podaj wszystkich pracowników, którzy mają pensję wyższą niż 1000 zł.


Rzut

Operator rzutu bierze jedną relację jako swój argument i produkuje jedną relację wynikową. Rzut jest “pionową maszyną do cięcia”. Daje w wyniku tabelę składającą się z kolumn wyjściowej relacji.

Np. podaj listę zawierającą pensje wszystkich pracowników, z informacjami o numerze pracownika, jego imieniu, nazwisku oraz pensji.

Pozostałe relacje działają na parze relacji i dlatego są nazywane operacjami binarnymi:



Suma

Suma jest operatorem, który bierze dwie zgodne relacje jako swoje argumenty i produkuje jedną relację wynikową. Zgodne, czyli tabele mają te same kolumny określone na tych samych dziedzinach (uwzględnia wszystkie wiersze z obu tabel w tabeli wynikowej).


Np. podaj wszystkie miasta, w których znajduje się biuro firmy lub nieruchomość.

Czyli najpierw rzut na atrybut miasto relacji Biuro i Nieruchomość – w razie potrzeby eliminujemy duplikaty, następnie sumujemy powstałe zbiory (relacje).

(kwerenda tylko SQL – składająca) SELECT Biuro.miasto

FROM Biuro

UNION ALL SELECT Nieruchomość.miasto

FROM Nieruchomość;






Różnica

W wypadku tego operatora istotna jest kolejność określania argumentów. Produkuje on te wiersze, które są w pierwszej tabeli i jednocześnie nie będące w tabeli drugiej.

Np. podaj klientów, którzy jeszcze niczego nie wynajęli

(Podaj biura w których nie ma stałych pracowników.)


Przecięcie

Przecięcie ma działanie przeciwne działaniu sumy (uwzględnia w tabeli wynikowej tylko wiersze wspólne dla obu tabel).

Np. podaj klientów, którzy wynajęli już nieruchomość.


Iloczyn kartezjański - wynikiem jest relacja, której wiersze są zbudowane ze wszystkich par wierszy relacji wyjściowych. Operacja o znaczeniu raczej teoretycznym.
Algebra relacyjna może być uważana za proceduralny język zapytań modelu relacyjnego. To znaczy, że dowolna informacja jaka jest do uzyskania z relacyjnej bazy danych może być wydobyta za pomocą ciągu operacji algebry relacyjnej.

W praktyce w programowaniu aplikacji opartych na relacyjnych bazach danych nie korzysta się na ogół z języka proceduralnego, lecz z deklaratywnego języka opartego na tzw. rachunku relacyjnym (na ogół jest to SQL). Różnica polega na tym, że w języku proceduralnym formułuje się sekwencję kroków prowadzących do pożądanego wyniku, natomiast język deklaratywny służy do sformułowania tego, jaki wynik chcemy otrzymać. Oczywiście zapytanie sformułowane w języku deklaratywnym musi zostać przełożone na pewną procedurę aby mogło być wykonane -- jest to zadaniem implementacji DBMS. Bez znajomości żargonu algebry relacyjnej trudno jest jednak chociażby zrozumieć dokumentację systemów zarządzania baz danych (czy nawet opisy składni SQL).



SQL – język manipulacji danymi
Jednym z języków który powstał w oparciu o model relacyjny, jest strukturalny język zapytań SQL (Structured Query Language).

W 1974 roku D.Chamberlin, który tak jak dr Codd pracował w IBM Research Laboratory w San Jose, zdefiniował język nazwany SEQUEL (Structured English Query Language).

1976 – ulepszona wersja SEQUEL/2, jednocześnie nazwa, ze względów prawnych, zmieniona na SQL.

Firma IBM wyprodukowała prototypowy SZBD oparty na SEQUEL/2, nazywany Systemem R (1976).

Koniec lat siedemdziesiątych – pierwsza komercyjna implementacja relacyjnego SZBD opartego na SQL – system Oracle.

1983 – system DB2 firmy IBM

W 1986 roku amerykański instytut standardów ANSI zdefiniował standard SQL, który już w 1987 roku został uznany przez międzynarodową organizację standardów ISO za standard międzynarodowy.

Dla SQL istnieje międzynarodowy standard (po modyfikacjach ISO 1992 i 1999a), który sprawia, że język ten jest formalnym i faktycznym standardem języka definiowania i operowania na relacyjnych bazach danych.

W ciągu ostatnich kilku lat stał się on standardem języka dla relacyjnych baz danych.

Obecnie ponad sto SZBD umożliwia stosowanie języka SQL na różnych platformach sprzętowych.

SQL jest przykładem języka transformacji, czyli języka zaprojektowanego w ten sposób, by umożliwić przekształcenie relacji wejściowych w relację wyjściową.
Elementy występujące w wersjach komercyjnych, a nie występujące w standardzie, nazywamy rozszerzeniami.

Każdą z implementacji SQL nazywamy dialektem


Formułowanie poleceń w SQL
Zdanie (polecenie, zapytanie) języka SQL składa się ze słów zarezerwowanych (kluczowych) oraz ze słów zdefiniowanych przez użytkownika.

Słowa zarezerwowane są niezmienną częścią języka i mają ustalone znaczenie.

Słowa zdefiniowane przez użytkownika są tworzone przez użytkownika (zgodnie z pewnymi regułami synaktycznymi) i stanowią nazwy różnych obiektów bazy danych, takich jak tabele, kolumny, perspektywy itd. Słowa układają się w zdania (polecenia zapytania), także zgodnie z pewnymi regułami synaktycznymi.

W wielu dialektach SQL wymagane jest zakończenie każdego zdania znakiem średnika ‘;’ – chociaż standard tego nie określa.


Większość elementów polecenia SQL można pisać dowolnie, wielkimi lub małymi literami, za wyjątkiem danych podawanych „dosłownie”, czyli literałów, które muszą być zapisane dokładnie w takiej postaci, w jakiej występują w bazie danych.

Operowanie na danych:
SELECT – wyszukiwanie danych w bazie;

INSERTdopisywanie danych do tabeli;

UPDATE – modyfikowanie danych w tabelach;

DELETE – usuwanie danych z tabel.
SELECT jest najczęściej używaną instrukcją SQL i ma następującą postać ogólną:
SELECT [DISTINCTALL] {*  [wyrażenie_kolumnowe [AS nowa_nazwa]],[…]}

FROM NazwaTabeli [alias],[...]

[WHERE warunek_selekcji_wierszy]

[GROUP BY lista_kolumn][HAVING warunek_selekcji_grup]

[ORDER BY lista_kolumn];


SELECT – wskazuje, które kolumny powinny pojawić się w wyniku;

DISTINCT – eliminuje powtórzenia po wykonaniu rzutowania na wybrane kolumny;

FROM – określa tabelę (lub tabele), z których będziemy korzystać;

WHERE – pozwala wybrać wiersze spełniające zadany warunek selekcji wierszy;

GROUP BY – tworzy grupy wierszy o tej samej wartości wskazanej kolumny;

HAVING – pozwala wybrać grupy ze względu na podany warunek selekcji grup;

ORDER BY – określa uporządkowanie wyniku.
Wyszukiwanie wszystkich wierszy:
1. Wszystkie kolumny i wszystkie wiersze:

SELECT *

FROM Klient;
2. Wybrane kolumny i wszystkie wiersze:

SELECT pracownikNr, imię, nazwisko, pensja

FROM Personel;
3. Wybrane kolumny i wszystkie wiersze uporządkowane malejąco:

SELECT pracownikNr, imię, nazwisko, pensja

FROM Personel

ORDER BY pensja DESC;
4. Porządkowanie według wielu kolumn:

SELECT nieruchomośćNr, typ, pokoje, czynsz

FROM Nieruchomość

ORDER BY typ, czynsz DESC;

5. Eliminacja powtórzeń – podaj numery nieruchomości odwiedzone przez klientów:

SELECT DISTINCT nieruchomośćNr

FROM Wizyta;
6a. Pola wyliczane – wyliczanie pensji rocznej:

SELECT pracownikNr, imię, nazwisko, pensja*12 AS pensjaRoczna

FROM Personel;
6b. Pola wyliczane – wyliczanie wieku i jego ograniczenie:

SELECT Personel.pracownikNr, Personel.imię, Personel.nazwisko, Personel.stanowisko, Personel.dataUr, Year(Now())-Year([dataUr]) AS wiek

FROM Personel

WHERE (Year(Now())-Year([dataUr]))>40;


Wybieranie wierszy:
7. Warunek selekcji – porównanie pensja do stałej

SELECT Personel.pracownikNr, Personel.imię, Personel.nazwisko, Personel.stanowisko, Personel.pensja

FROM Personel

WHERE pensja>1000;

8. Złożony warunek selekcji: porównanie – podaj adresy biur w Łomży lub w Białymstoku:

SELECT Biuro.biuroNr, Biuro.ulica, Biuro.miasto, Biuro.kodPocztowy

FROM Biuro

WHERE miasto=’Łomża’ OR Biuro.miasto=’Białystok’;

9. Warunek selekcji przynależność do zbioru:

SELECT Biuro.biuroNr, Biuro.ulica, Biuro.miasto, Biuro.kod pocztowy

FROM Biuro

WHERE miasto IN (‘Łomża’,’Białystok’);

czy też spoza zbioru:



WHERE miasto NOT IN (‘Łomża","Białystok’);

SELECT Personel.pracownikNr, Personel.imię, Personel.nazwisko, Personel.stanowisko

FROM Personel

WHERE stanowisko IN ('kierownik','dyrektor');

lub


WHERE stanowisko NOT IN ('kierownik','dyrektor');

10a. Selekcja pensji z zakresu:

SELECT Personel.pracownikNr, Personel.imię, Personel.nazwisko, Personel.stanowisko, Personel.pensja

FROM Personel

WHERE pensja>=2000 AND pensja<=3000;

lub


WHERE pensja BETWEEN 2000 AND 3000;

10b. Selekcja czynszu z zakresu oraz z miast

SELECT Nieruchomość.nieruchomośćNr, Nieruchomość.miasto, Nieruchomość.typ, Nieruchomość.czynsz

FROM Nieruchomość

WHERE miasto=’Białystok’ AND czynsz BETWEEN 350 AND 450 OR miasto=’Augustów’;

11. Warunek selekcji – dopasowanie do wzorca

SELECT właścicielNr, imię, nazwisko, adres, telefon

FROM Właściciel

WHERE adres LIKE ‘%Białystok%’;

lub zapis dla Microsoft Access:



WHERE (((Właściciel.adres) LIKE "*Białystok*"));

12. Warunek selekcji – wartości puste – podaj informacje wizytach w nieruchomości B4, po których nie zgłoszono uwag:

SELECT klientNr, data wizyty

FROM Wizyta

WHERE nieruchomośćNr=’B4’ AND uwagi IS NULL;

lub


WHERE nieruchomośćNr=’B4’ AND uwagi IS NOT NULL;

Zastosowanie funkcji agregujących:
W standardzie ISO zdefiniowanych jest pięć funkcji agregujących:

COUNT – zwraca liczbę wartości występujących w określonej kolumnie;

SUM – zwraca sumę wartości występujących w określonej kolumnie;

AVG – zwraca średnią wartości występujących w określonej kolumnie;

MIN – zwraca najmniejszą wartość występującą w określonej kolumnie;

MAX – zwraca największą wartość występującą w określonej kolumnie.
Funkcje COUNT, MIN i MAX można stosować zarówno do pól liczbowych jak I nieliczbowych , natomiast SUM i AVG jedynie do pól liczbowych.

Wszystkie funkcje, oprócz COUNT(*), pomijają wartości puste i zwracają wynik obliczony jedynie dla pozostałych wartości niepustych.


Funkcje agregujące mogą być stosowane jedynie na liście SELECT i w klauzuli HAVING

13. Policz z ograniczeniem – w ilu nieruchomościach miesięczny czynsz jest wyższy od 350:

SELECT COUNT(*) AS liczba

FROM Nieruchomość

WHERE Nieruchomość.czynsz>350;
14. Policz z ograniczeniem daty bez powtórzeń – ile nieruchomości odwiedzono w maju 2001:

SELECT COUNT(Wizyta.nieruchomośćNr) AS liczba

FROM Wizyta

WHERE Month([data_wizyty])=5 AND Year([data_wizyty])=2001;
15. Policz i sumuj – oblicz ilu jest dyrektorów i jaka jest ich sumaryczna pensja:

SELECT COUNT(Personel.pracownikNr) AS liczba, SUM(Personel.pensja) AS suma

FROM Personel

WHERE Personel.stanowisko=’dyrektor’;
16.Mminimum, maksimum i średnia – policz parametry pensji wszystkich pracowników:

SELECT Min(Personel.pensja) AS min, Max(Personel.pensja) AS max, AVG(Personel.pensja) AS średnia

FROM Personel;

Grupowanie wyniku – klauzula GROUP BY
Zapytanie grupujące – zapytanie SELECT zawierające klauzulę GROUP BY – w trakcie jego obliczania dane z tabeli SELECT są dzielone na grupy i dla każdej z grup jest generowany jeden wiersz podsumowania.

Kolumny grupowania – kolumny wymienione w klauzuli GROUP BY.
17. Policz z grupowaniem – ile jest nieruchomości w każdym mieście:

SELECT Nieruchomość.miasto, COUNT(Nieruchomość.nieruchomośćNr) AS liczba

FROM Nieruchomość

GROUP BY Nieruchomość.miasto;
18. Policz z grupowaniem i sumowaniem – dla każdego biura liczbę pracowników i ich sumaryczną pensję:

SELECT Personel.biuroNr, COUNT(Personel.pracownikNr) AS liczba, SUM(Personel.pensja) AS suma

FROM Personel

GROUP BY Personel.biuroNr

ORDER BY Personel.biuroNr;
Wybór grup – klauzula HAVING
19. Policz z grupowaniem i wyborem grupy – dla każdego biura zatrudniającego więcej niż jednego pracownika, podaj ich liczbę oraz sumę ich zarobków:

SELECT Personel.biuroNr, COUNT(Personel.pracownikNr) AS liczba, SUM(Personel.pensja) AS suma

FROM Personel

GROUP BY Personel.biuroNr

HAVING COUNT(Personel.pracownikNr)>1

ORDER BY Personel.biuroNr;

Podzapytania – zapytania SELECT umieszczone w innym zapytaniu SELECT
20. Podzapytanie z równością – podaj wszystkich pracowników zatrudniony w biurze przy ulicy Małej 63:

SELECT Personel.pracownikNr, Personel.imię, Personel.nazwisko, Personel.stanowisko

FROM Personel

WHERE Personel.biuroNr=(SELECT biuroNr FROM Biuro WHERE ulica = "Mała 63");
21. Podzapytanie z funkcją agregującą – podaj wszystkich pracowników, których pensja jest wyższa od średniej; pokaż różnice między poszczególnymi pensjami a średnią:

SELECT Personel.pracownikNr, Personel.imię, Personel.nazwisko, Personel.stanowisko, pensja-(SELECT AVG(pensja) FROM personel) AS różnica

FROM Personel

WHERE Personel.pensja>(SELECT AVG(pensja) FROM Personel);

22a. Podzapytania zagnieżdżone – powtórzenia właścicieli nieruchomości:

SELECT Nieruchomość.właścicielNr, Nieruchomość.nieruchomośćNr, Nieruchomość.miasto, Nieruchomość.ulica

FROM Nieruchomość

WHERE (Nieruchomość.właścicielNr) IN (SELECT właścicielNr FROM Nieruchomość AS Tmp GROUP BYwłaścicielNr HAVING Count(*)>1 )

ORDER BY Nieruchomość.właścicielNr;
22b. Podzapytania zagnieżdżone podwójnie– podaj wszystkie nieruchomości nadzorowane przez pracowników zatrudnionych w biurze przy ulicy Małej 63:

23. Zastosowanie ANY / SOME – znajdź wszystkich pracowników, którzy mają pensję wyższą niż przynajmniej jeden pracownik biura o numerze B003
SELECT Personel.pracownikNr, Personel.imię, Personel.nazwisko, Personel.stanowisko, Personel.pensja

FROM Personel

WHERE pensja > SOME (SELECT pensja FROM Personel WHERE biuroNr=’B003’);
24. Zastosowanie ALL – znajdź wszystkich pracowników, którzy mają pensję wyższą niż pensja każdego z pracowników biura o numerze B003
SELECT Personel.pracownikNr, Personel.imię, Personel.nazwisko, Personel.stanowisko, Personel.pensja

FROM Personel

WHERE.pensja>ALL (SELECT pensja FROM Personel WHERE biuroNr=’B003’);


Zapytania dotyczące wielu tabel

Jeśli chcemy uzyskać informacje pochodzące z więcej niż jednej tabeli, możemy zastosować podzapytanie lub złączenie.


25. Proste złączenie dwóch tabel – równozłączenie z algebry relacji

SELECT k.klientNr, imię, nazwisko, nieruchomośćNr, uwagi

FROM Klient k, Wizyta w

WHERE k.klientNr = w.klientNr;
Dla każdej z tabel wymienionych w klauzuli FROM można zdefiniować nazwę zastępczą - alias.
Operacja złączenia kojarzy dane z dwóch tabel, tworząc pary z wierszy, w których kolumny złączenia mają taką samą wartość.

Dla złączenia wewnętrznego – jeżeli wiersz tabeli nie zostanie połączony w parę (z żadnym wierszem z drugiej tabeli), to nie trafia do tabeli wynikowej.



Złączenie zewnętrzne zachowuje wiersze niespełniające warunku złączenia.
26. Złączenie wewnętrzne– podaj biura i nieruchomości znajdujące się w tym samym mieście:

SELECT Biuro1.*, Nieruchomość1.*

FROM Biuro1 INNER JOIN Nieruchomość1 ON Biuro1.miasto = Nieruchomość1.miasto;
27. Lewostronne złączenie zewnętrzne – podaj biura i nieruchomości znajdujące się w tym samym mieście, umieść również te biura, w których nie zarejestrowano żadnej nieruchomości:

SELECT Biuro1.*, Nieruchomość1.*

FROM Biuro1 LEFT JOIN Nieruchomość1 ON Biuro1.miasto = Nieruchomość1.miasto;
28. Prawostronne złączenie zewnętrzne – podaj biura i nieruchomości znajdujące się w tym samym mieście, umieść również nieruchomości nie zarejestrowane w żadnym biurze:

SELECT Biuro1.*, Nieruchomość1.*

FROM Biuro1 RIGHT JOIN Nieruchomość1 ON Biuro1.miasto = Nieruchomość1.miasto;
28. Pełne złączenie zewnętrzne – podaj biura i nieruchomości znajdujące się w tym samym mieście, umieść również te biura, w których nie zarejestrowano żadnej nieruchomości oraz nieruchomości nie zarejestrowane w żadnym biurze:

SELECT Biuro1.*, Nieruchomość1.*

FROM Biuro1 FULL JOIN Nieruchomość1 ON Biuro1.miasto = Nieruchomość1.miasto;

Modyfikacje danych w bazie danych
Dodawanie danych do bazy danych:

INSERT INTO NazwaTabeli [(lista_kolumn)]

VALUES (lista_wartości_danych);
Modyfikacja danych w bazie danych:

UPDATE NazwaTabeli

SET nazwa_kolumny1 = wartość1 [, nazwa_kolumny2 = wartość2 ...]

[WHERE warunek_selekcji];


Usuwanie danych z bazy danych:

DELETE FROM NazwaTabeli

[WHERE warunek_selekcji];


Operacje dynamiczne na relacjach

Istnieją trzy podstawowe operacje dynamiczne potrzebne do wspomagania działań wyszukiwania:

wstawianie(INSERT),usuwanie(DELETE) i modyfikowanie(UPDATE).
INSERT(,,...) INTO
DELETE WITH
UPDATE WHERE SET =

Podczas modyfikacji trzeba uważać, żeby nie naruszyć żadnych więzów integralności określonych w schemacie relacji.


 Zatwierdzanie zmian w bazie danych

Instrukcje INSERT, DELETE, UPDATE nie dokonują same trwałych zmian w bazie danych. Aby zmiany wprowadzone przez nie utrwalić, należy wykonać instrukcję COMMIT.



Można również zrezygnować z wprowadzania zmian do bazy danych, wycofując je za pomocą instrukcji ROLLBACK.


©snauka.pl 2016
wyślij wiadomość