1
Informatyczne Systemy
Zarządzania
Wykład 4: Język zapytań
SQL (46 slajdów)
Wykładowca:
Prof. Anatoly Sachenko
2
Ogólny zarys wykładu
Definicja
i Historia
Struktura SQL
Typy danych
Standardowo wbudowane funkcje w SQL 2
Pisanie poleceń SQL
Instrukcja SELECT
Składnia
FROM
WHERE
Łączenie
Wbudowane podzapytania
Łączenia zewnętrzne
Instrukcje manipulowania danymi
3
Definicje i historia
(Structured Query Language – Strukturalny Język Zapytań)jest bazodanowym językiem komputerowym zaprojektowanym w
celu wyszukiwania i zarządzania danymi w Relacyjnych Bazach
Danych, kreowania i modyfikacji schematu bazy danych, oraz
zarządzaniem dostępem do obiektów Bazy Danych
innymi słowy SQL jest interaktywnym standardem i
programowalnym językiem do zapytań i modyfikacji danych
oraz zarządzania bazą danych
pierwsza wersja SQL była rozwijana w IBM (po algebrze
relacyjnej) przez Donald D. Chamberlin and Raymond F. Boyce
we wczesnych latach ’70.
Poźniej SQL był stosowany w dużych ilościach komercyjnych
DBMS
dlatego stało się to rzeczywistym standardem dla języków
manipulacji w relacyjnym DBMS
SQL
4
Definicje i Historia – Standaryzacja
SQL został przyjęty jako standard przez Amerykański Narodowy
Instytut Normalizacji (ANSI) w roku 1986 jako SQL/86, i
został formalnie uznany przez Międzynarodową Organizację
Normalizacyjną (ISO) w 1987 roku jako SQL/87
do roku 1996 National Institute of Standards and Technology
(NIST) program standaryzacji zarządzania danymi został
przydzielony do certyfikowania SQL DBMS, jednakże został on
rozwiązany w 1996
Drobna korekta w 1989 roku przyjęta przez FIPS (Federal
Information Processing Standard) jako SQL/89
Główna korekta pod koniec 1992 roku - SQL/92 lub SQL2
1999 - SQL3, zostało dodane :
dopasowywanie wyrażeń regularnych
zapytania rekurencyjne i wyzwalacze
wsparcie dla procedur i kontroli przepływu wykonania
instrukcji oraz typów nieskalarnych
niektóre cechy obiektowe
5
Struktura SQL
język
bazodanowy
użytkownikowi na:
idealny
powiniene
pozwolić
stworzenie bazy danych i struktury tabeli
wykonywanie podstawowych zadań, jak: insert, update, delete
wykonywanie – prostych i złożonych zapytań
SQL w odróżnieniu od algebry relacyjnej
jest kompletnym językiem zwierającym nie tylko działania na
kwerendach
SQL jest językiem
zorientowanym na transformację z dwoma
głownymi składnikami:
DDL (Data Definition Language – Język Defininicji Danych) – do
definiowania struktury bazy danych
DML (Data Modeling Language – Język Modelowania Danych) –
do wyszukiwania i uaktualniania danych
Operatory SQL mogą być użyte interaktywnie lub mogą być
osadzone w zaawansowanych językach (np. C, C++, Java, …)
6
Struktura SQL – Główne Elementy
język SQL jest podzielony na dalsze części w kilka elementów
języka wliczając w to:
instrukcje, które mogą mieć trwały skutek na schematy i dane, lub
które mogą kontrolować transakcje, przepływy programów,
połączenia, sesje lub diagnozować
zapytania, które wyszukują dane oparte na konkretnych kryteriach
wyrażenia, które mogą przedstawiać również wartości skalarne lub
tabele składające się z kolumn i wierszy z danymi
orzeczenia, które określają warunki, które mogą być oszacowane do
trzech wartości logicznych SQL
klauzule, które są (w pewnych przypadkach opcjonalne) częścią
składową instrukcji i zapytań
„białe znaki” są generalnie ignorowane w instrukcjach i
zapytaniach SQL, czyniąc je łatwiejszymi do formatowania kodu
SQL dla jego czytelności
instrukcje SQL zawierają także średnik (";") - instrukcje kończące
7
Struktura SQL - Data Query Language (DQL)
– język definiowania zapytań dla wyszukiwania danych
najbardziej powszechnymi działaniami w bazach danych SQL są
zapytania, które są wykonywane z deklaratywnymi zapytaniami
wybierającymi słowa kluczowe
SELECT jest najbardziej kompleksową instrukcją w języku SQL z
kilkoma opcjonalnymi słowami kluczowymi i klauzulami, włączając
w to :
FROM klauzula, która pokazuje źródło tabeli lub tabele, z których dane
mają być wyszukane
WHERE klauzula zawierająca porównanie orzeczenia, które jest
używane do ograniczenia liczby wierszy zwracanych przez zapytanie
GROUP BY klauzula jest używana, aby łączyć lub grupować wiersze z
powiązanymi wartościami w elementy mniejszych zbiorów wierszy
HAVING klauzula zawierająca porównanie orzeczenia używany w celu
usunięcia wierszy po klauzuli GROUP BY, jest stosowany, aby
otrzymać zbiór wyników
ORDER BY klauzula identyfikująca, które kolumny są używane do
sortowania danych wynikowych i w jakim porządku powinny być one
uporządkowane
8
Struktura SQL - Data Manipulation
Language (DML)- język manipulacji danymi
DML
jest podzbiorem języka używanym do dodawania,
aktualizowania i usuwania danych :
INSERT jest używany do dodawania wierszy do istniejącej
tabeli
UPDATE jest używany do zmieniania wartości zbiorów
istniejących wierszy tabeli
DELETE usuwa zero lub wiele istniejących wierszy z
tablicy
MERGE łączy dane z różnych tabel
jest to pewna kombinacja elementów INSERT i
UPDATE
9
Struktura SQL – Transaction Control
(Kontrola Transakcji)
Transakcje,
jeśli są dostępne, mogą być użyte w obrębie
operacji DML:
BEGIN WORK (lub START TRANSACTION, lub BEGIN
TRANSACTION, w zależności od dialektu SQL) jest
używana do oznaczenia startu transakcji Bazy Danych,
która także uzupełnia całkowicie albo wcale
COMMIT powoduje zmianę wszystkich danych w
transakcji by zostały zatwierdzone na stałe
ROLLBACK powoduje, że wszystkie dane zmienione od
ostatniego COMMIT lub ROLLBACK zostaną odrzucone
(anulowane), po to, aby stan danych został przywrócony
10
SQL Structure - Data Definition
Language (DDL) – Język Definicji Danych
Drugą
grupą poleceń jest DDL, który pozwala użytkownikowi
na definiowanie nowych tabeli i związanych elementów
większość skomercjalizowanych Bazy Danych SQL mają
własne rozszerzenia w ich DDL, co pozwala kontrolować
niestandardowe funkcje systemu Baz Danych
najbardziej podstawowe pozycje DDL to instrukcje:
CREATE powoduje, że obiekt (np. tabela) zostaje utworzony w
Bazie Danych
DROP powoduje, że istniejący obiekt w Bazie Danych zostaje
usunięty, zwykle nieodwracalnie
TRUNCATE usuwa wszystkie dane z tabeli (niestandardowe, ale
powszechne instrukcje SQL)
ALTER instrukcja pozwalająca użytkowinkowi na modyfikację
istniejącego obiektu na różne sposoby – np. dodając kolumnę do
istniejącej tabeli
11
SQL Structure - Data Control Language
(DCL) - Język Kontroli nad Danymi
Trzecią
grupą poleceń SQL jest DCL, który
obsługuje aspekty uprawnień danych i pozwala
użytkownikowi na kontrolę kto ma dostęp do wglądu
lub manipulacji danymi w Bazie Danych
Są dwa główne polecenia:
GRANT uprawnia jednego lub więcej
użytkowników do wykonania operacji lub zbioru
operacji na obiekcie
REVOKE usuwa lub ogranicza uprawnienia
użytkowników do wykonania operacji lub zbioru
operacji
12
Struktura SQL – Programowanie SQL
– ustawia nazwe I definiuje relacyjne zapytania do
BD które są jednakowe z wirtualnym zbiorem danych
OPEN formy wirtualnego zbioru danych, które odpowiadają
bieżącemu stanowi Bazy Danych
FETCH – odczytanie kolejnego wiersza wskazanego przez
parametr z wirtualnego zbioru danych
CLOSE – kończy dostęp do aktywnego zbioru danych
PREPARE - przygotowuje klauzule SQL do dynamicznego
wykonywania i generuje plan wykonywanego zapytania który
jest równy danej klauzurze SQL
EXECUTE – uruchamia klauzule SQL, która została
przygotowana wcześniej do dynamicznego wykonywania
DECLARE
13
Typy danych – SQL/89
CHARACTER
(n) ,CHAR(n) – ciąg znaków o stałej długości n
znaków
NUMERIC[(n, m)] – precyzuje liczby, gdzie n – całkowita ilość
cyfr w liczbie, m – ilość cyfr, która występuje po lewej stronie
przecinka dziesiętnego
DECIMAL[(n,m)] – precyzuje liczby, gdzie n – całkowita ilość
cyfr w liczbie, m – ilość cyfr, która występuje po lewej stronie
przecinka dziesiętnego
DEC[(n, m)] – to samo co DECIMAL[(n,m)]
INTEGER lub INT – liczba całkowita
SMALLINT – liczba całkowita o mniejszym zasięgu
FLOAT[(n)] – wysoko precyzyjne liczby przechowywane w
zmiennoprzecinkowych
n – liczba bajtów zarezerwowana do
REAL – konkretny typ liczby, który odpowiada liczbą
zmiennoprzecinkowym z mniejszą dokładnością niż FLOAT
DOUBLE PRECISION – precyzuje typ danych z dokładnością
większą niż dokładność REAL
14
Typy Danych – dodane w SQL/92
– ciąg znaków o zmiennej długości
NCHAR(N) – ciąg kodowanych znaków o stałej
długości
NCHAR VARYING(n) - ciąg kodowanych znaków o
zmiennej długości
BIT(n) – łańcuch liczb binarnych o stałej długości
BIT VARYING(n) - łańcuch liczb binarnych o
zmiennej długości
DATE – data kalendarzowa
TIMESTAMP (dokładność) – data i czas z określoną
dokładnością
INTERVAL – dziedzina czasu
VARCHAR(n)
15
Standardowo Wbudowane Funkcje
w SQL2
BIT_LENGTH
(ciąg) – ilość bitów w ciągu
CAST – (wartość AS typ danych) – wartość
przetworzona w określony typ danych
CHAR_LENGTH (ciąg) – długość ciągu znaków
CONVERT (ciąg USING funkcja) – zmienia zbiór
danych według określonych funkcji
CURRENT_DATE
CURRENT_TIME (dokładność) – bieżący czas z
określoną dokładnością
CURRENT_TIMESTAMP (dokładność) – bieżąca
data i czas z określoną dokładnośćią
LOWER (ciąg) - zamienia ciąg znaków na małe litery
16
Standardowo Wbudowane Funkcje w SQL2
(kontynuajca)
OCTED_LENGTH(ciąg)
- bajty grupowane w ciąg znaków
POSITION(pierwszy ciąg IN drugi ciąg) – pozycja od
pierwszego ciągu rozpoczyna wpis do drugiego
SUBSTRING (ciąg FROM n FOR długość) – część ciągu
rozpoczyna od n-tego symbolu i ma określoną długość
TRANSLATE (ciąg USING funkcja) – zmienienie ciągu
używając życiu określonej funkcji
TRIM (BOTH znak FROM ciąg) – ciąg, w którym wszystkie
pierwsze i ostatnie znaki są usuwane
TRIM(LEADING znak FROM ciąg) ) – ciąg, w którym
wszystkie pierwsze znaki są usuwane
TRIM(TRAILING znak FROM ciąg) – ciąg, w którym
wszystkie ostatnie znaki są usuwane
UPPER(ciąg) - zamienia ciąg znaków na duże litery
17
Pisanie Komend SQL
SQL składają się zastrzeżonych słów i słów
zdefiniowanych przez użytkownika
słowa zastrzeżone - stałe części SQL i muszą być dokładnie
przeliterowane jak jest to wymagane i nie mogą być
rozdzielone przez linie
słowa zdefiniowane przez użytkownika – wymyślony przez
użytkownika i reprezentujące nazwy wielu obiektów z bazy
danych, takich jak tabele, kolumny, podglądy
Większość składników instrukcji SQL jest niepodatnych na
wielkość liter, z wyjątkiem dosłownych danych znakowych
Instrukcje
18
Pisanie Komend SQL (kontynuacja)
Użycie
rozszerzonych oznaczeń formatów
wielkie litery reprezentują słowa zastrzeżone
małe litery reprezentują słowa zdefiniowane przez
użytkownika
| - wskazuje wybór pomiędzy alternatywami
( ) - wskazuje element wymagany
[] - wskazuje element opcjonalny
… - wskazuje opcjonalne powtórzenia (0 lub więcej)
> - wartośći
* - ustala, że wszystkie kolumny ze wstępnego zapytania są
włączane w zbiór wyników
<
19
Instrukcja SELECT - Składnia
Jak
zostało wspomniane wcześniej SQL zawiera tylko jedną
instrukcję SELECT
Jednakże nie jest proste pisanie tu zapytań
Musi to być zrobione w taki sposób, aby czas trwania był
najkrótszy
Składnia SELECT
SELECT [ALL | DISTINCT](<lista pól>| *)
FROM <lista tabel>
[WHERE <Predykat wyboru lub połączenie>]
[GROUP BY <Lista pól rezultatów>]
[HAVING <Predykat grup>]
[ORDER BY <Lista poł używana do sortowania danych
wynikowych>]
20
Instrukcja SELECT – Składnia
(kontynuacja)
– polecenie decydujące o tym, że wszystkie rekordy
spełniające warunki zapytania są włączone w powstały zbiór
wyników
DISTINCT - polecenie decydujące o tym, że rożne rekordy są
włączone w zbiór wyników
FROM – określa tabele, która (-e) mają być użyte
WHERE – filtruje rekordy
GROUP BY - forma grupowania rekordów z tymi samymi
wartościami kolumn
HAVING – filtruje grupę podmiotów wg. pewnych warunków
ORDER BY - określa porządek wyswietlania
SELECT
21
Instrukcja SELECT – FROM
FROM
jest słowem kluczowym
jest prezentowane w każdym zapytaniu podobanie jak
SELECT
Jest łącznie z pustymi miejscami i
Nazwami tabel, które są używane jako źródło informacji
Jeśli jest wskazana więcej niż jedna nazwa tabeli, pozwala
pośrednio wywnioskować, że
Iloczyn kartezjański działa z wliczonymi tabelami
Nazwy-pseudonimy mogą być przypisane do tabel
jest to pomocne:
dla operacji łączenia tabeli z nią samą, lub
dla dostępu z wbudowanego podzapytania do bieżącego
rekordu zewnętrznego zapytania
22
Instrukcja SELECT - WHERE
WHERE klauzula ta ustawia warunki wyboru wynikowych wierszy,
lub
Warunki połączenia wierszy do początkowych tabeli jako
operacja warunkowego połączenia w Algebrze Relacyjnej
Są w niej używane następujące predykaty:
Predykaty zestawienia { =, <>, >,<, >=,<= }, które mają
tradycyjne znaczenie
Predykat BETWEEN A i B akceptuje wartości pomiędzy A i B
Predykat jest prawdziwy kiedy porównane wartości znajdują
się w określonych przedziałach, włączając w to granice
przedziałów
Predykat przeciwny NOT BETWEEN A i B jest prawdziwy
kiedy porównane wartości nie znajdują się w określonych
przedziałach
Predykat wejścia do zbioru IN (zbiór) jest prawdziwy, gdy
porównywane wartości znajdują się w zbiorze wartości
określonych
Predykat przeciwny NOT IN (zbiór) jest prawdziwy, gdy
porównane wartości nie znajdują się w zbiorze określonych
wartości.
23
Zapytanie SELECT – WHERE (cd)
Zapytanie o porównanie ze wzorem: LIKE i LIKE NOT
Zapytanie LIKE wymaga specyfikacji szablonu, który
porównuje z wyszczególnioną wartością
Orzeczenie jest prawdziwe, jeżeli porównana wartość
koresponduje szablonem i
W przeciwnym przypadku jest fałszywe
Zapytanie LIKE NOT ma przeciwne znaczenie
Zgodnie ze standardem szablon może zawierać następujące
znaki specjalne:
Znak podkreślenia ( _ ) — dla opisu dowolnego
pojedynczego symbolu
Symbol procentu ( % ) — dla opisu dowolnej kolejności
znaków
Reszta symboli w szablonie wyznacza się sama.
24
Zapytanie SELECT – WHERE (cd)
Zapytanie
o porównanie z nieokreśloną wartością IS NULL
Nieokreślona wartość w Algebrze Relacji interpretuje się
jako wartości, która jest obecnie nie znana
Ta wartość może zostać zamieniona na dowolną
wyszczególnioną wartość, jeżeli taka informacja się
kiedykolwiek ukaże
Standardowe reguły porównania nie działają przy porównaniu
nieokreślonych wartości
Jedna nieokreślona wartość nigdy nie jest równa innym
Specjalne standardowe orzeczenia są użyte, by określić
równość wartości jakiejś cechy z wartością nieokreśloną:
< imię cechy > NULL IS i
< imię cechy > NULL NOT IS
Zapytanie o istnienie EXIST i
Zapytanie o nieistnienie EXIST NOT
Obie odnoszą się do szczególnych pytań
25
SELECT Statement – Przykład
Video
SELECT catalogNo, title, dailyRental
FROM Video;
26
SELECT DISTINCT Statement – Przykład
Video
• Użyj funkcji DISTINCT, by wyeliminować duplikaty:
SELECT DISTINCT category
FROM Video;
27
Zapytanie SELECT – Suma
ISO definiuje pięć funkcji agregowania, które
pozwalają obliczyć ogólne grupowe wartości, należą do nich:
COUNT liczba wartości w wyszczególnionej kolumnie
SUM dodaje wartości w wyszczególnionej kolumnie
AVG średnia wartości w wyszczególnionej kolumnie
MIN zwraca najmniejszą wartość w wyszczególnionej
kolumnie
MAX zwraca największą wartość w wyszczególnionej
kolumnie
Aby użyć innych funkcji agregowana niż wyżej
wymienione, należy przeprowadzić wstępną operację
grupowania:
Cały komplet relacji tuples należy podzielić się na grupy
Grupy zbierają tuples, który ma te sam wartości cech
wyszczególniających w liście grupowania
SQL
28
Zapytanie SELECT – Suma (cd)
Każda
funkcja odnosi się do pojedynczej kolumny w tabeli i
zwraca pojedynczą wartość
COUNT, MIN i MAX odnosi się do numerycznych i
nienumerycznych pól, ale
SUM i AVG zwraca wartość tylko dla numerycznych
pól
Oprócz COUNT(*), każda funkcja eliminuje najpierw puste
pola i działa tylko na polach z danymi wartościami.
COUNT(*) liczy wszystkie rekordy tablicy, nie zważając,
czy występują puste pola lub powtarzają się wartości
DISTINCT może zostać użyty przed nazwą kolumny, by
wyeliminować duplikaty
DISTINCT nie ma żadnego znaczenia dla MIN / MAX, ale
może mieć dla SUM / AV
29
Zapytanie SELECT – Suma (cd)
Funkcje
agregowana mogą zostać użyte tylko:
w liście SELECT i klauzuli HAVING
Jeżeli
lista SELECT zawiera funkcję zagregowaną i nie ma
żadnej klauzuli BY GROUP to:
kolumna
Listy SELECT nie ma powiązania z funkcją
agregacji
Poniższy
przykład jest nieprawidłowy:
SELECT StaffNo, COUNT(Salary)
FROM Staff;
30
Zagnieżdzone podzapytania
Niektóre
stwierdzenia SQL mogą zawierać zagnieżdzony
SELECT
Podwybór może zostać użyte w warunku WHERE i
klauzulach HAVING zewnętrznego SELECT, gdzie jest
zwane podzapytaniem
Podzapytanie można również zastosować w komendach
INSERT, UPDATE i stwierdzeniu DELETE
Lista SELECT podzapytanie musi składać się z pojedynczej
nazwy kolumny albo wyrażenia, z wyjątkiem podzapytań,
które używają EXISTS
Kiedy podzapytanie jest argumentem w porównaniu, musi
znajdować się po jego prawej stronie
Podzapytanie nie może zostać użyte jako argument w
wyrażeniu
31
Zagnieżdzone podzapytania - Sub query
with Equality
Przykład: Znajdź pracownika z 8-go działu
Jefferson Way
SELECT staffNo, name, position
FROM Staff
WHERE branchNo =
(SELECT branchNo
FROM Branch
WHERE street=‘8 Jefferson Way’);
32
Embedded Sub queries - Sub query with
Aggregate
Przykład: Lista wszystkich pracowników,
których pensja jest większa niż pensja
przeciętna.
SELECT staffNo, name, position
FROM Staff
WHERE salary >
(SELECT AVG(salary)
FROM Staff);
33
Połączenia Zewnętrzne
Często
konieczne jest, aby połączyć dwie tabele, w tym celu
muszą być spełnione następujące warunki:
Wszystkie rekordy pierwszej tablicy są zawarte w wyniku i
Nieokreślone wartości dostają się do wyniku, zamiast tych
rekordów z drugiej tablicy, które nie pozwalają dołączyć się
do warunku, lub vice versa
Wszystkie rekordy drugiej tablicy są zawarte w wyniku, i
Nieobecne części rekordów z pierwszej tablicy, są
dodawane jako nieokreślone wartości.
Będą nazywane jako outer joins (połączenia zewnętrzne), w
przeciwieństwie do
Nowa zdefiniowana norma przez którą przyjęła nazwę jako
inner joins (wewnętrzne połączenia )
Joins determining by SQL1 standard which became to be
named as inner joins
34
Połączenia Zewnętrzne– FROM Syntax
FROM <list of initial tables> |
< expression of natural join> |
< join expression >
< expression of cross join> |
< expression of query for join >
< list of initial tables >::= <table_1> [ table synonym name_1] [ ...]
[,<table_ name__n>[ < table synonym name > ] ]
< expression of natural join :: =
<table_name_1> NATURAL { INNER | FULL [OUTER] |
LEFT [OUTER] | RIGHT [OUTER]} JOIN <table_name_2>
< expression of cross join : = <table_name_1>
CROSS JOIN <table_name_2>
< expression of query for join :=
<table_name_1> UNION JOIN <table_name_2>
< expression of join> := <table_name_1> { INNER |
FULL [OUTER] | LEFT [OUTER] | RIGHT [OUTER]}
JOIN {ON condition [USING (columns list)]} <table_name_2>
35
FROM Syntax - projektowanie
INNER — połącz wewnętrznie
LEFT — odrzuć połączenie
W rezultacie zawiera wszytskie kolumny z tablicy 1 i
Części wyniku tuples – który nie miał odpowiednich wartości w
tablicy 2 – jest dodany jako wartości NULL
RIGHT –połącz, połączenie zewnętrzne: w przeciwieństwie do LEFT
Wszystkie rekordy drugiej tablicy są zawarte, i
Wcześniej puste części rekordów pierwszej tablicy zostały dodane
przez nieokreślone wartości
FULL – pełne połączenie zewnętrzne:dla left jak również right
RIGHT i LEFT łączą się w tym miejscu i w rezultacie mamy w całości:
wszystkie kolumny tablic 1 i 2 dodane przez nieokreślone wartości
OUTER - określa połączenie zewnętrzne, ale
Jeżeli słowa kluczowe takie jak: FULL, LEFT, RIGHT są
wyszczególnione wtedy połączenie zawsze brane jest jako zewnętrzne
36
Płączenia zewnętrzne – Przykład
Spróbujmy
wziąć za przykład taką bazę danych «Bibliotekę»,
która składa się z trzech całości:
BOOKS (ISBN, TITL, AUTHOR, COAUTHOR,
YEARPRINT, PAGES)
Tabela BOOKS opisuje wszystkie książki, które są w
bibliotece i posiadają następujące cechy:
ISBN — unikalny szyfr książki;
TITL — tytuł książki;
AUTHOR — nazwisko autora;
COAUTHOR — nazwisko współautora;
YEARPRINT — działalność wydawniczy rok;
PAGES — liczba stron.
37
Połączenia zewnętrzne-przykład (cd)
CZYTELNIK(NUM_CZYTELNIKA,NAZWA_CZYTELNI
KA, ADRES, TEL_DOMOWY,
TEL_SŁUŻBOWY,DAT_URODZIN)
Tabela CZYTELNIK zawiera informację o wszystkich
czytelnikach biblioteki i ma natępujące cechy:
NUM_CZYTELNIKA — unikalny liczba karty
biblioteki
NAZWA_CZYTELNIKA — czytelnicy przezywają i
inicjały
ADRES — czytelnicy zwracają do
TEL_DOMOWY — do domu numer telefonu
TEL_SŁUŻBOWY — numer telefonu pracy
DAT_URODZIN
— data narodzin czytelników
38
Połączenia zewnętrzne-przykład (cd)
EXEMPLARE
(INV, ISBN, YES_NO, NUM_READER,
DATE_IN, DATE_DUT)
Entity called EXEMPLARE includes the following
attributes :
INV — unique inventory number of the book
exemplar
ISBN - book cipher
YES_NO — indication of presence or absence of a
book exemplar
NUM_READER — number of readers card if a book
is given to the reader, and Null – in opposite case
DATE_IN - a date when a book was given to the
reader;
DATE_OUT - a date when the reader has to return a
book
39
Połączenia zewnętrzne-przykład (cd)
Aby zdefiniować taki rodzaj szukania używamy odrzucenia połączenia
zewnętrznego
włącz wszystkie rekordy CZYTELNICY i tablice EGZEMPLARZE
jeżeli druga tablica nie ma żadnego rekordu z odpowiednią liczbą kart
czytelników wtedy cecha EXEMPLARE.INV w skutku wywołania
równa się NULL:
SELECT CZYTELNIK.NAZWA_CZYTELNIKA,
EGZEMPLARZ.INV
FROM READER RIGHT JOIN EXEMPLARE ON
READER.NUM_READER=EXEMPLARE.NUM_READER
Operacja połączenia zewnętrznego może być używana do uformowania
źródeł wyrażenia FROM:
SELECT *
FROM ( KSIĄŻKI LEFT JOIN EGZEMPLARZE)
LEFT JOIN ( CZYTELNICY NATURAL JOIN EGZEMPLARZE)
USING (ISBN)
40
POŁĄCZENIA ZEWNĘTRZNEUNION (przykład)
Operacja pytania związku jest równa, by ustawić teoretyczny związek
algebry
Kwerenda związku zrobiona jest zgodnie ze schematem:SELECTkwerenda,SELECT UNION – kwerenda SELECT UNION - kwerenda
żadna z kwerend nie powinna zwierać wyrażeń(słów)
Przykład: Odszukaj listę czytelników, którzy wypożyczyli książkę
CLEOPATRA albo ZBRODNIA I KARA używamy pytań:
WYBIERZ CZYTELNIK.NAZWA_CZYTELNIK
CZYTELNIK FROM, EGZEMPLARZ.BOOKS
GDZIE EGZEMLARZ.NUM_CZYTELNIK=CZYTELNIK.NUMCZYTELNIK AND EGZEMPLARZ.ISBN=BOOKS.ISBN AND
KSIĄŻKA.TYTUŁ=CLEOPATRA
CZĘŚĆ WSPÓLNA
WYBÓR CZYTELNIK.NAZWA_CZYTELNIK
FROM CZYTELNIK, EGZEMPLARZ, KSIĄŻKA GDZIE
EGZEMPLARZ.NU_CZYTELNIK=CZYTELNIK.NUM_CZYTELNI
K AND
EGZEMPLARZ.ISBN=KSIĄŻKA.ISBN AND
KSIĄŻKA.TYTUŁ=ZBRODNIA I KARA
41
Stwierdzenia Manipulacji Danych
Są
trzy rodzaje manipulacji(zmiany) danych:
Operacja zapisu usuwającego – klauzula DELETE,
Operacja dodawania albo wejście nowych zapisów —
klauzula INSERT
Operacja aktualizacji danych — klauzula UPDATE.
Zauważ:
Wszystkie operacje manipulacji danych mogą zmieniać
wartości(dane) tylko w jednej tablicy
42
Polecenie Manipulacji danych-DELATE
Syntax
DELETE FROM tabela_nazwa WHERE [wybór warunków]
Jeżeli warunek selekcji nie jest wyszczególniony wszystkie rekordy są
usunięte z tablicy
Jednakże to nie znaczy, że cała tablica jest usunięta
Początkowa tablica pozostaje i funkcjonuje jako pusta i nie
wypełniona
Na przykład : aby usunąć skutki ostatniej sesji egzaminacyjnej,
usuwamy wszystkie kolumny od relacji R1 używając rozkazu
DELETE FROM R1
Warunki selekcji w części WHERE mają ten sam tryb jako warunki
filtracji w SELECT.
Te warunki określają, które kolumny będą usunięte od początkowej
relacji
Na przykład : aby wyłączyć studenta John Harber, piszemy:
FROM DELETE R2 WHERE imię = ‘ Harber Johna'
Wstawione pytanie może zostać znalezione w części WHERE
43
Polecenie manipulacji danych- DELETE
przykład
Musimy usunąć studentów mających jedną ocenę dwa i więcej niż jedną
(znaków 2)
Wtedy musimy zobaczyć warunki selekcji i znaleźć studentów mających
dwa i więcej znaków 2, OR
Musimy wybrać warunki wyboru i znaleźć studentów mających dwa i
więcej znaków 2 OR
Studenci którzy mają jedną 2 lub więcej nie zdali egzaminu.
Aby znaleźć tych studentów, wybieramy z relacji R! te rekordy z oceną
2 lub nie są zdefiniowane(czyli nie mają oceny)
Wtedy grupujemy otrzymany wynik na atrybuty: IMIE_NAZWISKO i
Oceniamy te numery kolumn dla których nawiązuje do numeru nie
zdany egzamin dla każdego studenta.
Poniżej przedstawione jest konstrukcja napisana w języku SQL
FROM DELETE R2 WHERE R2.IN IMIĘ_NAZWISKO { Rl WYBIERZ.
FROM IMIĘ_NAZWISKO Rl
OCENA WHERE = 2 BY GROOP NULL IS MARK OR
Rl. LICZBA STUDENTÓW MAJĄCYCH: IMIĘ_NAZWISKO (*) >= 2
44
Polecenie manipulacji danych- INSERT
Syntax
INTO INSERT tablica_imię [(< lista kolumn >) ]
VALUES (< lista wartości >)
Ta składnia pozwala na wejście tylko jednego wiersza do tablicy
Wyznaczenie listy kolumn nie jest konieczne, jeżeli wejdziemy do wierszy
z wyznaczonymi wartościami dla wszystkich kolumn
Na przykład , wprowadź nową książkę w tablice KSIĄŻKI
KSIĄŻKI INTO INSERT (ISBN, TYTUŁ, AUTOR, WSPÓŁ AUTOR,
DATA WYDANIA, STRONY)
WARTOŚCI ("0-201-3574 7 - X”," Widok ogólny informatyka. szósta
Edycja”, " Brookshear Glenn J.”, 2000, 688)
To jest tylko jeden autor dla tej książki, jednakże
Wyznaczyliśmy kolumnę WSPÓŁ AUTOR w liście kolumn i
Dlatego musieliśmy wyszczególnić korespondencje wartość w rozdziale
WARTOŚCI – włączyliśmy pusty rząd, ponieważ na pewno wiemy , że nie
ma żadnego współautora
45
Polecenie manipulacji danych –
UPDATE(uaktualnianie) Syntax
UAKTUALNIENIE tablica_imię
SET kolumny_nazwa = nowa wartość [ wybór_warunki WHERE]
Część warunku WHERE nie jest konieczna tak jak w stwierdzeniu
DELETE
Funkcjonuje to na tej samej zasadzie co DELETE, pozwalającym
wybrać rzędy, gdzie operacja modyfikacji będzie użyta
Jeżeli warunek selekcji nie zostanie wyznaczony wtedy operacja
modyfikacji będzie użyta w każdym wierszu tablicy
Przykład: student Ellen Brown poprawiła egzamin z DB z oceny 2 na 4
Dla jej przypadku przeprowadzamy następującą operację:
UPDATE Rl
Rl SET.Ocena = 4
WHERE R1.IMIĘ = "Ellen Brown" AND
R1.Przedmiot = "Baza danych”
46
Literatura
Lecture Notes. Database (e-version). Based on a book by T.S.
Karpova. Database: Models, Development, Implementation.
(in Russian). S.Pitersburg. Piter. 2002, 304p., (translated and
edited by Anatoly Sachenko)
C.J.Date. An Introduction to Database Systems. AddisonWesley, Copyright , 1024 p., 2003
Thomas Connolly, Carolyn Begg. Database Systems: A
Practical Approach to Design, Implementation, and
Management. 3rd Edition. Addison Wesley. 1236 p., 2001
Beynon-Davies P.: Systemy baz danych. WNT, Warszawa
2000.
Internet: Strona domowa przedmiotu:
http://www.roz6.polsl.pl/bazydanych.
Internet: Portal wiedzy Katedry Informatyki i Ekonometrii
http://www.roz6.polsl.pl/portalwiedzy.html
http://www.roz6.polsl.pl/asachenko/sutaa.html