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