SQL firmy Oracle cz.2. Praca z wieloma tabelami.

Wielkość: px
Rozpocząć pokaz od strony:

Download "SQL firmy Oracle cz.2. Praca z wieloma tabelami."

Transkrypt

1 SQL firmy Oracle cz.2. Praca z wieloma tabelami. Iloczyn kartezjański baz danych Połączenia tabel będziemy rozpatrywać jako połączenia tabeli nadrzędnej z tabela podrzędną, czyli nadrzędna-podrzędna lub inaczej będziemy mówić o relacji rodzic-dziecko. W celu utworzenia zapytania opartego na więcej niż jednej tabeli należy na liście przecinkowej klauzuli FROM umieścić nazwy wszystkich tabel, które stanowią podstawę zapytania. W przypadku zapytania opartego na dwóch tabelach, system bazy danych połączy każdy wiersz pierwszej tabeli z każdym wierszem drugiej tabeli. Jeśli lista przecinkowa zawiera nazwę jeszcze trzeciej tabeli, to każdy z wierszy uzyskany z pierwszych dwóch tabel zostanie połączony z każdym wierszem trzeciej tabeli i jeśli zostały wyszczególnione dalsze tabele, kojarzenie wierszy będzie odbywać się w ten sam sposób. Takie złączenie nazywamy złączeniem kartezjańskim baz danych lub iloczynem kartezjańskim. SELECT id, nazwa, nr, data_w FROM klienci, faktury; Ponieważ tabela pierwsza ma 10 wierszy, a druga ma 12 wierszy, to w wyniku uruchomienia tego zapytania zbiór wynikowy będzie zawierał 120 wierszy. ID NAZWA NR DATA_W Agrotex 1 05/03/01 2 Mar-Trans 1 05/03/01 3 ABC 1 05/03/01 4 France Restauration 1 05/03/01 5 Johns Markets 1 05/03/01 6 White Clover Markets 1 05/03/01 7 Alfreds Futterkiste 1 05/03/01 8 Frankenversand 1 05/03/01 9 Morgenstern Gesundkost 1 05/03/01 10 Zajazd Wolski 1 05/03/01 1 Agrotex 2 05/03/12 2 Mar-Trans 2 05/03/12 3 ABC 2 05/03/12 4 France Restauration 2 05/03/12 5 Johns Markets 2 05/03/12 6 White Clover Markets 2 05/03/12 7 Alfreds Futterkiste 2 05/03/12 8 Frankenversand 2 05/03/12 9 Morgenstern Gesundkost 2 05/03/12 10 Zajazd Wolski 2 05/03/12 1 Agrotex 3 05/04/21 2 Mar-Trans 3 05/04/21 Częściowe iloczyny kartezjańskie Uwaga. Iloczyn kartezjański będący wynikiem złączenia dwóch nie połączonych tabel jest najczęściej wynikiem właśnie braku połączenia tabel w strukturze zapytania i z tego punktu widzenia jest po prostu błędem źle zaprojektowaną kwerendą. ID NAZWA NR DATA_W ABC 3 05/04/21 4 France Restauration 3 05/04/21 5 Johns Markets 3 05/04/21 6 White Clover Markets 3 05/04/21 7 Alfreds Futterkiste 3 05/04/21 8 Frankenversand 3 05/04/21 9 Morgenstern Gesundkost 3 05/04/21 10 Zajazd Wolski 3 05/04/21 1 Agrotex 4 05/04/25 2 Mar-Trans 4 05/04/25 3 ABC 4 05/04/25 4 France Restauration 4 05/04/25 5 Johns Markets 4 05/04/25 6 White Clover Markets 4 05/04/25 7 Alfreds Futterkiste 4 05/04/25 8 Frankenversand 4 05/04/25 9 Morgenstern Gesundkost 4 05/04/25 10 Zajazd Wolski 4 05/04/25 1 Agrotex 5 05/03/04 2 Mar-Trans 5 05/03/04 3 ABC 5 05/03/04 Częściowy iloczyn kartezjański ma miejsce np. w przypadku, gdy zapytanie oparte jest na 3 tabelach, dwie z nich zostały ze sobą połączone w projekcie zapytania, a trzecia z tych tabel nie jest połączona z żadną 1

2 z dwóch pozostałych. Wtedy tworzy nam się iloczyn kartezjański między wierszami będącymi wynikiem złączenia dwóch połączonych tabel i wszystkimi wierszami trzeciej tabeli, a zasada jego tworzenia jest taka sama. Połączenie tabel w projekcie zapytania metoda uniknięcia iloczynu kartezjańskiego baz danych Aby uniknąć iloczynu kartezjańskiego jako wyniku uruchomienia zapytania, należy w projekcie tego zapytania dokonać odpowiedniego połączenia wszystkich tabel, których nazwy pojawiają się na liście przecinkowej klauzuli FROM. W tym celu w klauzuli WHERE należy podać odpowiednie warunki (które te wynikają ze schematu bazy danych) połączenia tych tabel lub też wykorzystać składnię JOIN-ów do połączenia tabel. Najczęstsza sytuacja jaka występuje to taka, gdzie klucz podstawowy tabeli nadrzędnej jest umieszczony w tabeli podrzędnej i te dwa pola (często o tych samych nazwach) są użyte do uzyskania połączenia nadrzędna-podrzędna między dwoma tabelami. SELECT id, nazwa, nr, data_w FROM klienci, faktury WHERE klienci.id = faktury.kl_id ORDER BY nazwa; Warunki połączeń tabel Uwaga. Aby połączenie takie dało się utworzyć, w schemacie danych muszą być oczywiście zaprojektowane takie pola, które będą służyły jako pola łączące. Tym niemniej nie wystarczy tylko w schemacie danych zaprojektowanie takich pól, aby połączenie między tabelami dało się zrealizować. Aby takie połączenie dało się zdefiniować w ramach zapytania i działało poprawnie po uruchomieniu zapytania, pola łączące muszą spełniać pewne, dość rygorystyczne warunki: przede wszystkim powinny być tego samego typu (lub typów sobie odpowiadających), jedno z tych pól (pole łączące po stronie tabeli nadrzędnej) powinno być kluczem podstawowym tej tabeli lub przynajmniej jej kluczem unikatowym, ponadto niektóre z własności tych pól (np. rozmiar) powinny być takie same, nie jest natomiast koniecznym, aby posiadały taką samą nazwę (co ilustruje przedstawiony na poprzednim slajdzie przykład). Sposób uniknięcia iloczynu kartezjańskiego ID NAZWA NR DATA_W ABC 7 05/03/01 1 Agrotex 1 05/03/01 1 Agrotex 2 05/03/12 1 Agrotex 3 05/04/21 7 Alfreds Futterkiste 4 05/04/25 4 France Restauration 8 05/03/01 8 Frankenversand 12 05/03/17 5 Johns Markets 9 05/05/05 5 Johns Markets 10 05/05/09 2 Mar-Trans 5 05/03/04 2 Mar-Trans 6 05/04/10 6 White Clover Markets 11 05/03/19 W projekcie zapytania, aby uniknąć iloczynu kartezjańskiego lub cząstkowych iloczynów cząstkowych, wszystkie tabele muszą być ze sobą połączone. Niekiedy zdarza się tak, iż tabele, które znalazły się na liście przecinkowej klauzuli FROM nie dają się ze sobą bezpośrednio połączyć (co można również zaobserwować na schemacie bazy danych). Wynika to z faktu, iż nie istnieją pola łączące tych tabel. Wtedy do projektu zapytania należy na listę przecinkową klauzuli dodać tyle tabel, aby wszystkie tabele w projekcie zapytania zostały ze sobą złączone. Może nawet zdarzyć się sytuacja, iż wartości z żadnej kolumny z tych tabel nie będą pobierane, tym niemniej tabele te zapewniają połączenie tabel i uniknięcie iloczynu kartezjańskiego. 2

3 SELECT klienci.id id_k, klienci.nazwa nazwa_klienta, towary.nr_towar id_t, towary.nazwa nazwa_towaru FROM klienci, faktury, pozycje, towary WHERE klienci.id = faktury.kl_id AND faktury.nr = pozycje.nr AND towary.nr_towar = pozycje.towar_id ORDER BY 2; ID_K NAZWA_KLIENTA ID_T NAZWA_TOWARU ABC 4 napój pomarańczowy 3 ABC 9 napój jabłkowy 1 Agrotex 1 czekolada mleczna 1 Agrotex 2 masło 1 Agrotex 3 truskawki 1 Agrotex 4 napój pomarańczowy 1 Agrotex 7 cukier 1 Agrotex 10 śmietana 1 Agrotex 4 napój pomarańczowy 1 Agrotex 3 truskawki 7 Alfreds Futterkiste 8 chleb 7 Alfreds Futterkiste 9 napój jabłkowy 7 Alfreds Futterkiste 10 śmietana 4 France Restauration 2 masło 4 France Restauration 7 cukier 4 France Restauration 10 śmietana 8 Frankenversand 9 napój jabłkowy 8 Frankenversand 4 napój pomarańczowy 5 Johns Markets 4 napój pomarańczowy Aliasy tabel W przypadku, gdy kolumny na liście przecinkowej instrukcji SELECT pochodzą z różnych tabel i mają te same nazwy, muszą być poprzedzone nazwą tabeli, z której pochodzą, po której następuje kropka i nazwa samego pola. Stąd nazwa takiego oznaczenia notacja kropkowa. Nazwy tabel są wprawdzie komunikatywne, ale niezbyt wygodne ze względu na swoją długość. Lepiej jest je zastąpić nazwami zastępczymi, które powinny być raczej krótsze aliasami tabel. Odgrywają one taką samą rolę, jak w przypadku kolumn. SELECT a.id id_k, a.nazwa nazwa_klienta, d.nr_towar nr_t, d.nazwa nazwa_towaru FROM klienci a, faktury b, pozycje c, towary d WHERE a.id = b.kl_id AND b.nr = c.nr AND d.nr_towar = d.towar_id ORDER BY 2; Uwaga. Istnieją sytuacje, w których użycie aliasów tabel jest niezbędne ze względu na konstrukcję zapytania. Typy złączeń Wśród typów złączeń między dwoma tabelami wyróżniamy zasadniczo dwa rodzaje połączeń: złączenia wewnętrzne (domyślne) złączanie pasujących wierszy, złączenia zewnętrzne włączanie wierszy nie mających odpowiedników w drugiej tabeli: lewostronne połączenie zewnętrzne, prawostronne połączenie zewnętrzne, pełne złączenie zewnętrzne. 3

4 Złączenie wewnętrzne Domyślnym typem złączenia dwóch tabel jest takie połączenie, które pozwala kojarzyć ze sobą tylko te wiersze z tabel łączonych, które w polach łączących mają te same wartości. Taki typ połączenia nazywamy połączeniem wewnętrznym. W związku z tym, w zbiorze wynikowym takiego zapytania wielotabelowego opartego na tabelach połączonych złączeniem wewnętrznym znajdą się tylko te wiersze jednej tabeli, które mają swoje odpowiedniki w drugiej tabeli nie znajdą się te, które nie mają takich odpowiedników w drugiej tabeli, tzn. wierszy, które w polu łączącym mają tę samą wartość. SELECT id, nazwa, nr, data_w FROM klienci, faktury WHERE klienci.id = faktury.kl_id ORDER BY nazwa; Uwaga. Sytuacja, w której brak jest odpowiedników wierszy jednej tabeli w drugiej, jest niekiedy przyczyną kłopotów związanych z przetwarzaniem danych i ich prezentacją w formularzach i raportach. Problem ten najlepiej może być rozwiązany za pomocą więzów integralności lub przez testowanie i użycie złączeń zewnętrznych. Złączenia zewnętrzne Fakt, iż mamy do czynienia ze złączeniem zewnętrznym tabel w warunku połączenia klauzuli WHERE jest sygnalizowany poprzez operator złączenia zewnętrznego (+) pojawiający po jednej z nazw pól łączących w tym warunku. Operator złączenia zewnętrznego sygnalizuje w ten sposób, iż wszystkie wiersze tej tabeli, przy którego nazwie pola łączącego ten operator nie stoi, mają być włączone do dynamicznego zestawu wyników takiego zapytania. W kolumnach tej tabeli, w wierszach zbioru wynikowego, które nie mają swych odpowiedników w drugiej tabeli, pojawiają się wartości puste. W zależności, od położenia operatora złączenia zewnętrznego w warunku połączeniowym w klauzuli WHERE, mamy do czynienia albo z zewnętrznym złączeniem lewostronnym, albo z zewnętrznym złączeniem prawostronnym. SELECT a.id, nazwa, b.nr, data_w FROM klienci a, faktury b WHERE a.id = b.kl_id (+); Operator złączenia zewnętrznego nie może być użyty w zapytaniach: z warunkami złożonymi, które są łączone za pomocą operatora OR, z warunkami, w których występuje operator IN. ID NAZWA NR DATA_W BC 7 05/03/01 1 Agrotex 1 05/03/01 1 Agrotex 2 05/03/12 1 Agrotex 3 05/04/21 7 Alfreds Futterkiste 4 05/04/25 4 France Restauration 8 05/03/01 8 Frankenversand 12 05/03/17 5 Johns Markets 9 05/05/05 5 Johns Markets 10 05/05/09 2 Mar-Trans 5 05/03/04 2 Mar-Trans 6 05/04/10 6 White Clover Markets 11 05/03/19 ID NAZWA NR DATA_W Agrotex 1 05/03/01 1 Agrotex 2 05/03/12 1 Agrotex 3 05/04/21 2 Mar-Trans 5 05/03/04 2 Mar-Trans 6 05/04/10 3 ABC 7 05/03/01 4 France Restauration 8 05/03/01 5 Johns Markets 9 05/05/05 5 Johns Markets 10 05/05/09 6 White Clover Markets 11 05/03/19 7 Alfreds Futterkiste 4 05/04/25 8 Frankenversand 12 05/03/17 9 Morgenstern Gesundkost 10 Zajazd Wolski 4

5 JOIN-y - standard połączeń ISO/ANSI JOIN-y składnia połaczeń, która spełnia standard ISO/ANSI, została wprowadzona w Oracle 9i. Wśród tego typu składni wyróżniamy następujące połączenia: INNER JOIN, CROSS JOIN, NATURAL JOIN, OUTER JOIN, LEFT, RIGHT, FULL OUTER JOIN. Można stwierdzić, iż JOIN-y posiadają następujące własności: łączą dane przechowywane w jednej tabeli z danymi przechowywanymi w innej tabeli lub w więcej niż jednej innej tabeli (to samo stwierdzenie dotyczy widoków i/lub synonimów), tabele, które są połączone (można powiedzieć, które są JOINED ) tworzą nową tabelę, która może zawierać wszystkie możliwe kombinacje wierszy z dwóch oryginalnych tabel (w niektórych przypadkach może to być iloczyn kartezjański baz danych), warunek połączenia (a join condition) jest zwykle używany, aby ograniczyć kombinacje danych z tabeli i jego składnia zawiera zwykle nazwy kolumn, które łączą się z odpowiednimi kolumnami w innej tabeli, tabela może być połączona (JOINED) z inną tabelą, z innymi tabelami, a nawet z samą sobą, w przypadku, gdy tylko w klauzuli FROM pojawia się nazwa dwóch lub więcej tabel (widoków lub synonimów) można stosować rozmaite połączenia JOIN, warunki stosowane w JOIN-ach służą ograniczeniu liczby wierszy w nich zwracanych. Złączenie krzyżowe (CROSS JOIN) Złączenie krzyżowe (CROSS JOIN) dotyczy połączeń pomiędzy tabelami, które są standardowo wymieniane na liście przecinkowej klauzuli FROM. Warunek połączenia złączenia krzyżowego CROSS JOIN jest umieszczany w klauzuli WHERE w taki sam sposób, jak w standardowej składni połączenia dwóch tabel w połączeniu wewnętrznym. SELECT klienci.nazwa, faktury.nr FROM klienci CROSS JOIN faktury WHERE klienci.id = faktury.kl_id AND kraj = Polska ; Można używać złączenia krzyżowego do połączenia więcej niż dwóch tabel, co ilustruje poniższy przykład: SELECT klienci.nazwa, faktury.nr, pracownicy.nazwisko pracownicy.imie FROM klienci CROSS JOIN faktury CROSS JOIN pracownicy ID NAZWA NR DATA_W Agrotex 1 05/03/01 1 Agrotex 2 05/03/12 1 Agrotex 3 05/04/21 2 Mar-Trans 5 05/03/04 2 Mar-Trans 6 05/04/10 3 ABC 7 05/03/01 WHERE klienci.id = faktury.kl_id AND pracownicy.id=faktury.prac_id AND kraj = Polska ; 5

6 Złączenie naturalne (NATURAL JOIN) Złączenie naturalne (NATURAL JOIN) jest taką formą złączenia równościowego, które automatycznie za warunek złączenia przyjmuje równość wartości we wszystkich kolumnach mających takie same nazwy (oczywiście takie kolumny muszą istnieć w złączanych tym poleceniem tabelach). Dodatkowe kryteria połączenia mogą się znaleźć w klauzuli WHERE. SELECT klienci.nazwa, pracownicy.nazwisko imie pracownik FROM klienci NATURAL JOIN pracownicy; NAZWA PRACOWNIK Agrotex borsuk Jan Mar-Trans kotecki Adam ABC olek Tadeusz France Restauration Krawczyk Adam Johns Markets Lisiak Anna White Clover Markets Kowalska Ewa Alfreds Futterkiste Nowaczyk Maria Frankenversand Marczyk Barbara Morgenstern Gesundkost Kraska Katarzyna Zajazd Wolski Michalak Anna Uwaga. W przypadku braku kolumn o tych samych nazwach w tabelach złączanych złączeniem naturalnym NATURAL JOIN oraz nie uwzględnienia w klauzuli WHERE warunków połączenia otrzymamy iloczyn kartezjański baz danych, tj. zestaw wszystkich możliwych kombinacji wierszy jednej tabeli ze wszystkimi wierszami drugiej tabeli. Uwaga. W przypadku stosowania złączenia naturalnego NATURAL JOIN nie jest możliwe korzystanie z aliasów nazw tabel. Złączenie JOIN z klauzulą USING W przypadku, gdy w złączanych tabelach istnieją pola łączące o tych samych nazwach można użyć zmodyfikowanej wersji połączenia naturalnego JOIN USING(nazwa_pola). SELECT nr, towar_id FROM faktury JOIN pozycje USING(nr); Uwaga. W przypadku konieczności wyszczególnienia nazw wielu kolumn w klauzuli USING oddzielamy je przecinkiem. Złączenie wewnętrzne (INNER JOIN) Wynikiem złączenia wewnętrznego INNER JOIN są tylko te wiersze, które spełniają warunek złączenia. SELECT klienci.nazwa, faktury.nr FROM klienci INNER JOIN faktury ON klienci.id = faktury.kl_id WHERE kraj = Polska ; Użycie składni złączenia wewnętrznego pozwala odseparować warunki połączenia od pozostałych warunków, które ograniczają dynamiczny zestaw rekordów. 6

7 Uwaga. Ten sam efekt da użycie skróconej wersji połączenia wewnętrznego INNER JOIN, gdzie w miejsce INNER JOIN wystarczy użyć po prostu JOIN. Składnię połączenia zewnętrznego możemy stosować w przypadku łączenia więcej niż jednej tabeli. SELECT klienci.nazwa, faktury.nr, pracownicy.nazwisko pracownicy.imie FROM klienci JOIN faktury ON klienci.id = faktury.kl_id JOIN pracownicy ON pracownicy.id=faktury.prac_id; ID NAZWA NR DATA_W Agrotex 1 05/03/01 1 Agrotex 2 05/03/12 1 Agrotex 3 05/04/21 2 Mar-Trans 5 05/03/04 2 Mar-Trans 6 05/04/10 3 ABC 7 05/03/01 Złączenie zewnętrzne (OUTER JOIN) Złączenie zewnętrzne rozszerza rezultat złączenia wewnętrznego o te wiersze, dla których w trakcie złączania nie znaleziono odpowiedników w drugiej tabeli (w związku z czym zostają one pominięte w przypadku zastosowania złączenia wewnętrznego między tabelami). Dla wszystkich wierszy, które nie mają swoich odpowiedników w drugiej tabeli, pojawia się wartość NULL właśnie w tych kolumnach, dla których żaden wiersz nie mógł być dopasowany. Złączenia zewnętrzne dzielą się, co ma swoje odzwierciedlenie w różnorodnych JOIN-ach zewnętrznych: lewostronne (LEFT JOIN) prawostronne (RIGHT JOIN) pełne (FULL OUTER JOIN lub FULL JOIN) Uwaga. Używanie operatora (+) w składni połączeń zewnętrznych nie jest już przez Oracle zalecane. Lewostronne (LEFT JOIN) i prawostronne (RIGHT JOIN) połączenia zewnętrznego W przypadku, gdy chcemy wyświetlić te rekordy z tabeli w kwerendzie wielotabelowej, które nie mają swoich odpowiedników w drugiej tabeli, musimy użyć jednego z dwóch połączeń zewnętrznych - lewostronnego (LEFT JOIN) lub prawostronnego (RIGHT JOIN) połączenia zewnętrznego, w zależności od tego, z której tabeli (tj. po której stronie połączenia stojącej) chcemy te wiersze uwzględnić w dynamicznym zestawie wyników zwracanym przez kwerendę. SELECT klienci.nazwa, faktury.nr FROM klienci LEFT JOIN faktury ON klienci.id = faktury.kl_id; ID NAZWA NR DATA_W Agrotex 1 05/03/01 1 Agrotex 2 05/03/12 1 Agrotex 3 05/04/21 2 Mar-Trans 5 05/03/04 2 Mar-Trans 6 05/04/10 3 ABC 7 05/03/01 4 France Restauration 8 05/03/01 5 Johns Markets 9 05/05/05 5 Johns Markets 10 05/05/09 6 White Clover Markets 11 05/03/19 7 Alfreds Futterkiste 4 05/04/25 8 Frankenversand 12 05/03/17 9 Morgenstern Gesundkost 10 Zajazd Wolski 7

8 Pełne złączenie zewnętrzne (FULL OUTER JOIN) W przypadku, gdy istnieje potrzeba uzyskania wszystkich wierszy ze wskazanych tabel, niezależnie od tego, czy w pozostałych tabelach istnieją powiązane, odpowiadające im wiersze, należy użyć pełnego złączenia zewnętrznego. Składnia pełnego złączenia zewnętrznego, które jest wpisywane po klauzuli FROM, jest następująca nazwa_pierwszej_tabeli FULL OUTER JOIN nazwa_drugiej_tabeli ON (nazwa_pola_laczacego_pierwszej_tabeli = nazwa_pola_laczacego_drugiej_tabeli) Chcemy wyświetlić wszystkie rekordy z tabeli klienci (nawet takie, które nie mają swoich odpowiedników w tabeli faktury) oraz wszystkie rekordy z tabeli faktury (nawet takie, które nie mają swoich odpowiedników w tabeli klienci). I SPOSÓB: SELECT a.id, nazwa, b.nr, data_w FROM klienci k LEFT JOIN faktury f ON (k.id = f.kl_id) UNION SELECT k.id, nazwa, f.nr, f.data_w FROM klienci k RIGHT JOIN faktury f ON (k.id = f.kl_id); II SPOSÓB SELECT k.id, k.nazwa, f.nr, f.data_w FROM klienci k FULL OUTER JOIN faktury f ON (k.id = f.kl_id); Samozłączenia Czasami zachodzi potrzeba odwołania się w jednym zapytaniu dwa razy do tej samej tabeli. Stosujemy wówczas aliasy w składni takiego połączenia, które określamy mianem samozłączenia. SELECT a.id, a.nazwisko, a.imie, b.nazwisko nazwisko_szefa, b.imie imie szefa FROM pracownicy a JOIN pracownicy b ON a.id =b.szef; Dzięki takiemu złączeniu tabeli pracownicy o aliasie a z tabelą pracownicy o aliasie b możemy dowiedzieć się, kto jest szefem każdego z pracowników oczywiście szefowie również są pracownikami i ich dane znajdują się w tej samej tabeli pracownicy. Uwaga. W rozważanej bazie danych powyższe zapytanie daje się wykonać po modyfikacji tabeli pracownicy o wstawienie do niej dodatkowej kolumny szef, w której zostanie wpisany identyfikator szefa danego pracownika (w przypadku pracownika, który jest szefem, do kolumny szef należy wpisać jego identyfikator). ID NAZWA NR DATA_W Agrotex 1 05/03/01 1 Agrotex 2 05/03/12 1 Agrotex 3 05/04/21 2 Mar-Trans 5 05/03/04 2 Mar-Trans 6 05/04/10 3 ABC 7 05/03/01 4 France Restauration 8 05/03/01 5 Johns Markets 9 05/05/05 5 Johns Markets 10 05/05/09 6 White Clover Markets 11 05/03/19 7 Alfreds Futterkiste 4 05/04/25 8 Frankenversand 12 05/03/17 9 Morgenstern Gesundkost 10 Zajazd Wolski 8

9 Podzapytania. Zapytania agregujące dotyczące obliczeń w grupach rekordów W przeciwieństwie do warunków statycznych, tj. warunków umieszczanych w klauzuli WHERE i ewentualnie HAVING, warunki dynamiczne charakteryzują się możliwością zmian wartości przy kolejnych uruchomieniach kwerendy. Realizuje się je poprzez umieszczanie (zagnieżdżanie) zapytania w drugim zapytaniu, które właśnie tworzy nam taki warunek dynamiczny. Takie zapytanie nazywamy podzapytaniem, zaś zapytanie określamy mianem zapytaniem zagnieżdżonym. Wśród tego rodzaju zapytań z podzapytaniami wyróżniamy: podzapytania nieskorelowane, podzapytania skorelowane. Podzapytania nieskorelowane wykonuje się tylko raz, przed wykonaniem zapytania głównego, jego wynik nie zależy od zapytania głównego, zwraca zawsze tylko jedną wartość, działa w ten sposób, iż po swoim wykonaniu wstawia swoje wyniki do warunków klauzuli WHERE zapytania głównego. Jako przykład zastosowania kwerendy nieskorelowanej, rozważymy polecenie wybrania wszystkich towarów, których cena jednostkowa przekracza wartość średnią ceny jednostkowej obliczonej ze wszystkich produktów znajdujących się w magazynie (w bazie danych). I SPOSÓB bez użycia zapytania z podzapytaniem nieskorelowanym Ponieważ średnia cena jednostkowa wszystkich towarów, których dane są aktualnie przechowywane w tabeli towary nie jest nam z góry znana (może zresztą w każdej chwili ulec zmianie pod dopisaniu danych nowego towaru do tabeli towary lub usunięciu z niej już tam wpisanego wcześniej), musimy utworzyć zapytanie, które ją obliczy: SELECT AVG(cena) FROM towary; Jego wynikiem będzie obliczona średnia cena jednostkowa wszystkich towarów, których dane są aktualnie przechowywane w tabeli towary. SELECT nr_towar, nazwa, cena FROM towary WHERE cena > 7,46 ORDER BY cena DESC; 9 AVG(CENA) ,46 II SPOSÓB z użyciem zapytania z podzapytaniem nieskorelowanym SELECT id, nazwa, cena FROM towary WHERE cena > (SELECT AVG(cena) FROM towary) ORDER BY cena DESC;

10 Graficzne przedstawienie zasady działania zapytania z podzapytaniem nieskorelowanym: SELECT nr_towar, nazwa, cena FROM towary WHERE cena > (SELECT AVG(cena) FROM towary) ORDER BY cena DESC; zapytanie podzapytanie uruchamiane na końcu uruchamiane jako pierwsze Jak wynika choćby z przytoczonego przykładu, podzapytania nieskorelowane muszą spełniać dwa warunki: muszą być ujęte w nawiasy, muszą występować po prawej stronie wyrażenia warunkowego. Uwaga. Ważne jest, aby w zapytaniu z podzapytaniem nieskorelowanym, podzapytanie zwracało tylko jedną wartość. W przytoczonym powyżej przykładzie zapytania z podzapytaniem nieskorelowanym, zarówno zapytanie główne, jak i samo podzapytanie oparte były na tej samej tabeli. Tym niemniej możliwe jest, aby tabele, na których są one oparte były różne. Podzapytania skorelowane wykonuje się tyle razy ile razy jest uruchamiane zapytanie główne, w jego klauzuli WHERE znajduje się przynajmniej jeden element (nazwa kolumny) z zapytania głównego dlatego jego wynik zależy od zapytania głównego, zwraca więcej niż jedną wartość ale w każdym wywołaniu powinno zwracać w najprostszym przypadku zawsze jedną wartość, jest wywoływane po uprzednim wywołaniu zapytania głównego po swoim wykonaniu wstawia swoje wyniki do warunków klauzuli WHERE zapytania głównego. Interesuje nas wyświetlenie w każdej kategorii towarów, nazwy towaru o największej cenie. SELECT t.kategoria, t.nr_towar, t.nazwa, t.cena FROM towary t WHERE t.cena = (SELECT MAX(t1.cena) FROM towary t WHERE t1.kategoria = t.kategoria) ORDER BY t.kategoria; KATEGORIA NR_TOWAR NAZWA CENA art. spożywcze 7 cukier 3,1 nabiał 2 masło 3,5 napoje 4 napój pomarańczowy 2,4 owoce i warzywa 3 truskawki 4,2 ryby 5 szprot w oleju 1,6 Podzapytanie skorelowane posiada specyficzną strukturę. Otóż konieczne jest oznaczenie wszystkich pól należących do zapytania głównego i wszystkich pól należących do podzapytania, szczególnie w przypadku, gdy tabele, na których oparte jest zapytanie główne i podzapytanie, są takie same (tak, jak ma to miejsce w rozważonym przykładzie). W tym celu należy oznaczyć tabele występujące w zapytaniu głównym aliasami, a tabele w podzapytaniu również aliasami, ale takimi, które nie zostały wykorzystane w zapytaniu głównym. 10

11 Zagnieżdżanie podzapytań W języku SQL istnieje możliwość dalszego zagnieżdżania podzapytań. Jedną z takich możliwości zagnieżdżania jest możliwość osadzania zapytania w podzapytaniu, tworząc w ten sposób podzapytanie podzaptania. W takim przypadku mamy zatem do czynienia z sytuacją, w której zapytanie główne zależy od wyników podzapytania, które z kolei zależy od jego własnego podzapytania. Takie zagnieżdżanie nie musi być zresztą ograniczone tylko do trzech poziomów. SELECT a.nr_towar, a.nazwa, a.cena FROM towary a WHERE a.cena > (SELECT AVG(b.cena) FROM towary b WHERE cena > (SELECT MAX(c.cena)/2 FROM towary c, pozycje d, faktury e WHERE c.nr_towar = d.towar_id AND e.nr = d.nr AND TO_CHAR(data_w, mm ) IN ( 03, 04, 09 ))) ORDER BY a.cena DESC; Uwaga. Choć jest dozwolonego zagnieżdżanie podzapytań i tworzenie zapytań z wieloma poziomami podzapytań, to jednak należy ustrzegać się pisania zapytań ze zbyt wieloma poziomami rozgałęzień podzaptań i wieloma poziomami zagnieżdżeń. Wynika to choćby z konsekwencji ich poprawiania w razie jakiegoś błędu przez osobę, która ich nie tworzyła, a i samemu ich projektantowi po dłuższym odstępie czasu może przyjść z trudnością zrozumienie ich konstrukcji i zasady działania. Podzapytania równoległe Zapytania równoległe są to takie zapytania z podzapytaniami, w których zapytanie główne ma złożony warunek, w którym więcej niż jeden warunek jest powiązany z podzapytaniem. SELECT a.nr_towar, a.nazwa, a.cena FROM towary a WHERE a.cena > (SELECT MIN(b.cena)*1.25 FROM towary b WHERE Kategoria IN ( nabiał, napoje )) OR a.cena > (SELECT MAX(c.cena)/2 FROM towary c, pozycje d, faktury e WHERE c.nr_towar = d.towar_id AND e.nr = d.nr AND wycofany = Nie ) ORDER BY a.cena DESC; NR_TOWAR NAZWA CENA truskawki 4,2 2 masło 3,5 7 cukier 3,1 4 napój pomarańczowy 2,4 6 czekolada deserowa 2,2 11

12 Zapytanie jest wykonywane w ten sposób, iż najpierw raz są jednocześnie (równolegle) wykonywane oba podzapytania, po czym sterowanie i ich wyniki są przekazywane do zapytania głównego, które jest również raz wykonywane, a jego wynik jest zaprezentowany na wydruku powyżej. Graficzny obraz działania powyższego zapytania prezentuje się następująco: SELECT a.nr_towar, a.nazwa, a.cena FROM towary a WHERE a.cena > (SELECT MIN(b.cena)*1.25 FROM towary b WHERE Kategoria IN ( nabiał, napoje )) OR a.cena > (SELECT MAX(c.cena)/2 FROM towary c, pozycje d, faktury e WHERE c.nr_towar = d.towar_id AND e.nr = d.nr AND wycofany = Nie ) ORDER BY a.cena DESC; zapytanie podzapytanie 1 podzapytanie 2 uruchamiane na końcu uruchamiane jako pierwsze Widoki w języku SQL. Widoki i ich zadania Oprócz bezpośrednio wykonywania operacji pobierania danych lub dokonywania ich modyfikacji bezpośrednio na samych tabelach, w których te dane są przechowywane, w języku SQL można do tego celu wykorzystać także widoki. Zadania, które można wykonać za pomocą widoków: widok umożliwia ograniczać kolumny, do których użytkownik może wstawiać dane lub z których może je pobierać, widok pozwala ograniczyć te wiersze, do których użytkownik może wstawiać dane lub z których może je pobierać, widok może zawierać dodatkowe kolumny, które są otrzymywane na podstawie kolumn tabeli, widok może zawierać agregacje wierszy w tabeli, widok umożliwia łączenie informacji pochodzących z rozmaitych tabel, widok umożliwia wstawianie, aktualizowanie i usuwanie wierszy dla pojedynczej tabeli. 12

13 W pewnych przypadkach widoki są niemal niemożliwe do zastąpienia ze względu na: zapewnienie bezpieczeństwa na poziomie wierszy, zapewniają rozbicie złożonego problemu na etapy pośrednie, np. w przypadku tworzenia złożonych raportów. Widoki synonimiczne (słownikowe) Widok słownikowy jest tworzony za pomocą polecenia postaci: CREATE [OR REPLACE] VIEW nazwa_widoku AS SELECT lista_pol FROM nazwy_tabel; Widok słownikowy: jest tworzony poleceniem SELECT, może on być wykorzystany np. do modyfikacji danych w tabeli, na podstawie której został utworzony, samo utworzenie widoku, jak i jego usunięcie, nie zmienia tabeli, na podstawie której został utworzony. Widok synonimiczny, jako obiekt istniejący w słowniku usuwa się poleceniem: DROP VIEW nazwa_widoku; Najprostszy widok synonimiczny dla tabeli jest tworzony w oparciu o wszystkie wiersze i kolumny tabeli. Poniższy widok jest tworzony na podstawie wszystkich wierszy i kolumn tabeli towary. CREATE OR REPLACE VIEW wszystkie_towary AS SELECT * FROM towary; Aby wyświetlić dane za pomocą widoku należy wydać polecenie SELECT * FROM wszystkie_towary; NR_TOWAR NAZWA CENA STAN KATEGORIA WYCOFANY czekolada mleczna art. spożywcze Nie 2 masło nabiał Tak 3 truskawki owoce i warzywa Nie 4 napój pomarańczowy napoje Nie 5 szprot w oleju ryby Tak 6 czekolada deserowa art. spożywcze Nie 7 cukier art. spożywcze Nie 8 chleb art. spożywcze Nie 9 napój jabłkowy napoje Nie 10 śmietana nabiał Tak Jeśli teraz wydane zostaną za pomocą pewne polecenia dotyczące modyfikacji danych, to odpowiednie zmiany w danych zostaną odnotowane w danych przechowywanych w tabeli, na podstawie której ten widok został utworzony. Za pomocą widoku wszystkie_towary zostaną usunięte z tabeli towary wszystkie towary, które są wycofane. DELETE FROM wszystkie_towary 13

14 WHERE wycofany = Tak ; Jeśli teraz zostanie podane polecenie dotyczące czytania rekordów z tabeli towary SELECT * FROM towary; to otrzymamy następujący zestaw rekordów NR_TOWAR NAZWA CENA STAN KATEGORIA WYCOFANY czekolada mleczna 2, art. spożywcze Nie 3 truskawki 4, owoce i warzywa Nie 4 napój pomarańczowy 1, napoje Nie 6 czekolada deserowa 2, art. spożywcze Nie 7 cukier 3, art. spożywcze Nie 8 chleb 1, art. spożywcze Nie 9 napój jabłkowy 2, napoje Nie Uwaga. W stosunku do widoku nie jest możliwe użycie polecenia TRUNCATE. Widoki maskujące Za pomocą widoków maskujących możliwe jest ograniczenie, zarówno kolumn, jak i wierszy, do których dostęp jest możliwy za pomocą tego typu widoku. A zatem wyróżniamy: widoki maskujące kolumny, widoki maskujące wiersze. Widoki maskujące kolumny W realizacji zadania dotyczącego graniczenia liczby kolumn tabel dla niektórych użytkowników korzystających z pewnych tabel pomocne są widoki maskujące kolumny tabeli. Konstrukcja takiego widoku maskującego jest prosta należy włączyć do niego te kolumny, do których użytkownik powinien mieć dostęp. Poniższy widok ukrywa kolumnę fracht w tabeli faktury. CREATE OR REPLACE VIEW faktury_bez_frachtu AS SELECT nr, kl_id, praca_id, data_w FROM faktury; W przypadku polecenia INSERT do kolumn, które nie są zawarte w widoku, są wstawiane albo wartości NULL, albo wartości domyślne ustawiane dla tych kolumn. Za pomocą widoku faktury_bez_frachtu do tabeli faktury zostanie dodany nowy rekord. INSERT INTO faktury_bez_frachtu VALUES(15,8,5,TO_DATE('12/05/2005','dd/mm/yyyy')); Rekord ten zostanie dodany także do tabeli faktury z wartością zerową dla pola fracht, które nie jest zawarte w widoku faktury_bez_frachtu. Jest to wynikiem tego, iż dla pola fracht domyślnie ustawiona jest wartość zerowa. W przypadku, gdy wiersze są usuwane z tabeli za pomocą widoku maskującego kolumny tej tabeli, to w takim przypadku polecenie DELETE umożliwia usunięcie tych wszystkich wierszy, które zostaną wskazane w klauzuli WHERE (jeśli jej nie ma, to zostaną usunięte wszystkie wiersze). A zatem jeśli w widoku zawarta jest nawet tylko jedna kolumna, to za pośrednictwem widoku jest i tak usuwany cały wskazany wiersz przy wykorzystaniu wartości z widocznej w widoku kolumny. 14

15 Widoki maskujące wiersze W przypadku widoków maskujących wiersze pewnym użytkownikom zostaje ograniczony dostęp do wybranych rekordów danych w tabeli. W przypadku widoków maskujących w ich strukturze musi wystąpić klauzula WHERE, za pomocą której widok wyświetla tylko wybrane wiersze z tabeli. Umożliwienie za pomocą widoku dostępu do danych tylko krajowych klientów z tabeli klienci. CREATE OR REPLACE VIEW krajowi_klienci AS SELECT * FROM klienci WHERE kraj = Polska ; Jeśli teraz zostanie wydane polecenie SELECT * FROM krajowi_klienci; Widoki maskujące wiersze instrukcja INSERT to zostanie wyświetlony następujący zestaw rekordów ID NAZWA KRAJ Agrotex Polska 2 Mar-Trans Polska 3 ABC Polska 10 Zajazd Wolski Polska W przypadku instrukcji INSERT istnieje możliwość wstawiania do tabeli takich nowych rekordów za pomocą widoku, który nie zawiera takich rekordów. Do tabeli klienci wstawiany jest za pomocą widoku krajowi_klienci nowy rekord danych, który zawiera dane klienta zagranicznego, a zatem takiego, który nie jest wyświetlany za pomocą tego widoku. INSERT INTO krajowi_klienci VALUES(11, Maison Dewey, Belgia ); Jeśli zostanie wydane teraz polecenie czytania widok, to otrzymamy taki sam zestaw rekordów jak przed wstawieniem powyższego rekordu, tj. ID NAZWA KRAJ Agrotex Polska 2 Mar-Trans Polska 3 ABC Polska 10 Zajazd Wolski Polska Jednak czytanie rekordów tabeli klienci zasygnalizuje pojawienie się tego nowego rekordu ID NAZWA KRAJ Agrotex Polska 2 Mar-Trans Polska 3 ABC Polska 4 France Restauration Francja 5 Johns Markets USA 6 White Clover Markets USA 7 Alfreds Futterkiste Niemcy 8 Frankenversand Niemcy 9 Morgenstern Gesundkost Niemcy 10 Zajazd Wolski Polska 11 Maison Dewey Belgia Widoki maskujące wiersze instrukcja UPDATE 15

16 Operacja UPDATE wykonana rekordach widocznych w widoku może także sprawić, iż rekordy, które są wyświetlane w widoku, przestaną być w nim widoczne. Do widoku krajowi_klienci zostanie dodany nowy wiersz danych postaci INSERT INTO krajowi_klienci VALUES(12, Reggiani Caseifici, Polska ); Oczywiście rekord ten jest widoczny w widoku krajowi_klienci, co obrazuje wynik polecenia SELECT * FROM krajowi_klienci; ID NAZWA KRAJ Agrotex Polska 2 Mar-Trans Polska 3 ABC Polska 10 Zajazd Wolski Polska 12 Reggiani Caseifici Polska Ponieważ jednak pole kraj zawiera niepoprawną wartość w tym rekordzie, za pomocą polecenia UPDATE, które zostanie wykonane na widoku, wartość ta zostanie zaktualizowana na poprawną. UPDATE klienci_krajowi SET kraj = Włochy WHERE id = 12; A zatem za pomocą widoku wiersz, który był wyświetlany w tym został zaktualizowany w ten sposób, iż już nie jest dostępny za pomocą tego widoku, co potwierdza wynik polecenia: SELECT * FROM krajowi_klienci; ID NAZWA KRAJ Agrotex Polska 2 Mar-Trans Polska 3 ABC Polska 10 Zajazd Wolski Polska Widoki wielotabelowe Widoki wielotabelowe są to widoki tworzone instrukcją SELECT opartą na więcej niż jednej tabeli. Istnieją jednak pewne ograniczenia instrukcji SELECT, jeśli chodzi o konstrukcję takich widoków: nie może zawierać klauzuli ORDER BY, nie może zawierać klauzuli FOR UPDATE klauzula ta blokuje zaznaczone wiersze, co sprawia, iż dopóki transakcja zawierająca tę klauzulę nie zostanie zakończona, inni użytkownicy nie mogą aktualizować lub blokować wierszy wybranych przez ten SELECT, lista przecinkowa SELECT może zawierać tylko 254 kolumn lub wyrażeń kolumnowych. Tworzymy widok wszyscy_klienci, z tym, że zostanie dokonana próba posortowania. CREATE OR REPLACE VIEW wszyscy_klienci AS SELECT * FROM klienci ORDER BY nazwa; Zostanie wówczas podczas kompilacji takiego widoku zwrócony następujący błąd: 16

17 order by nazwa * ERROR at line 4: ORA-00933: SQL command not properly ended Fakt niemożności posortowania wynika choćby z jednej z własności modelu relacyjnego a mianowicie, kolejność wierszy w tabeli jest nieistotna. Widoki agregujące Widoki agregujące to widoki tworzone instrukcją SELECT, za pomocą której wykonywana jest agregacja danych (zawierają funkcję agregującą). Widoki agregujące: zawsze zwracają najbardziej aktualne informacje, co wynika z samej ich definicji, dla użytkownika wyglądają one jak tabela agregująca no może z wyjątkiem szybkości uzyskania danych, ich użycie pozwala uzyskać modularyzację zadań związanych z tworzeniem choćby raportów, raz poprawnie utworzone i przetestowane nie będą wpływać na złe działanie raportu. Zostanie utworzony widok agregujący klienci_liczba_zam, który określa liczbę zamówień złożonych przez poszczególnych klientów. CREATE OR REPLACE VIEW klienci_liczba_zam AS SELECT id, nazwa, COUNT(nr) liczba_zam FROM klienci k LEFT JOIN faktury f ON k.id = f.kl_id GROUP BY id, nazwa; Uruchomienie tego widoku SELECT * FROM klienci_liczba_zam; zwraca wynik (obok): ID NAZWA LICZBA_ZAM Agrotex 3 2 Mar-Trans 2 3 ABC 1 4 France Restauration 1 5 Johns Markets 2 6 White Clover Markets 1 7 Alfreds Futterkiste 1 8 Frankenversand 1 9 Morgenstern Gesundkost 10 Zajazd Wolski Widoki agregujące modularyzacja obliczeń agregujących Istnieją przypadki, w których wykorzystanie widoku agregującego jest niezbędne. W przypadku, gdy mamy wyświetlić agregacje, które są uzyskiwane w wyniku złożenia dwóch funkcji agregujących, wtedy niezbędne jest utworzenie najpierw widoku agregującego, którym obliczenia agregujące zostaną wykonane w oparciu o pierwszą, wewnętrzną funkcję agregującą, a dopiero potem można dokonać na nich obliczenia agregacji w oparciu o drugą, zewnętrzną funkcję agregującą. W ten sposób istotnie dokonujemy modularyzacji takich obliczeń agregujących, które są wynikiem złożenia dwóch funkcji agregujących. Taki sposób postępowania jest wymuszony faktem, iż system nie jest w stanie uzyskać obliczeń w oparciu o zewnętrzną funkcję agregującą, gdyż agregacja w oparciu o wewnętrzną funkcję agregującą nie została jeszcze wykonana. Dopiero zastosowanie widoku agregującego spowoduje, iż obliczenia agregujące w oparciu o wewnętrzną 17

18 funkcję agregującą zostaną uzyskane w samym widoku agregującym tak, iż stosując drugą, zewnętrzną funkcję agregującą w istocie działa ona na już uzyskanych (zakończonych) obliczeniach. Widoki agregujące modularyzacja obliczeń agregujących Chcemy wyświetlić nazwę tej kategorii, dla której w magazynie jest największa wartość towarów z niej pochodzących. SELECT kategoria, MAX(SUM(stan*cena)) max_wartosc FROM towary Kwerenda niepoprawna GROUP BY kategoria; Poprawnym sposobem postępowania jest rozbicie tego zadania na etapy (dokonanie modularyzacji) z wykorzystaniem widoku agregującego. Właściwy kod realizacji postawionego zadania jest następujący: CREATE OR REPLACE VIEW kategorie_sum_wart AS SELECT kategoria, SUM(stan*cena) wart_magazynu I. Utworzenie widoku agregującego FROM towary GROUP BY kategoria; SELECT kategoria, wart_magazynu FROM kategorie_sum_wart II. Wykonanie zewnętrznej WHERE wart_magazynu = (SELECT MAX(wart_magazynu) agregacji na widoku agregującym FROM kategorie_sum_wart); Widoki tymczasowe W przypadku, gdy zachodzi potrzeba stworzenia widoku, który będzie tylko jednokrotnie wykorzystany, można utworzyć tzw. widok tymczasowy. Widok taki nie jest obiektem słownika danych, inaczej mówiąc nie jest przechowywany w słowniku danych, a zatem nie może być więcej niż raz wykorzystany. Widok tymczasowy tworzymy w następujący sposób: WITH nazwa_widoku AS (instrukcja SELECT tworząca widok tymczasowy) instrukcja SELECT oparta bezpośrednio na widoku tymczasowym; Widok tymczasowy: tworzymy poleceniem WITH nazwa_widoku AS, za którym to poleceniem bezpośrednio w nawiasach (ich użycie jest konieczne) znajduje się polecenie SELECT, które określa strukturę widoku tymczasowego, za prawym nawiasem zamykającym nie występuje średnik (który kończyłby kod dotyczący struktury widoku tymczasowego), lecz bezpośrednio znajduje się polecenie SELECT oparte na widoku, który został utworzony powyżej, tj. w nawiasach i polecenie SELECT na nim bezpośrednio oparte tworzą jakby jedną całość (w przeciwieństwie do widoku słownikowego, który stanowi integralną całość i jest wyraźnie oddzielony od perspektywy na nim tworzonej). 18

19 jest wykorzystywany tylko w jednym celu w takim, jak określa to instrukcja SELECT znajdująca się bezpośrednio za prawym nawiasem a zatem jest wykorzystywany istotnie tylko w jednym celu. ponieważ nie jest przechowywany, a zatem jest wykorzystywany także tylko jednokrotnie. Rozpatrzmy powtórnie ostatni przykład, w którym istniała potrzeba wyświetlenia nazwy tej kategorii, dla której w magazynie jest największą wartość towarów z niej pochodzących. Tym razem w celu realizacji postawionego zadania zostanie wykorzystany widok tymczasowy. Stosowny kod ma teraz postać: WITH kategorie_sum_wart AS (SELECT kategoria, SUM(stan*cena) wartosc_magazynu FROM towary GROUP BY kategoria) SELECT kategoria, wartosc_magazynu FROM kategorie_sum_wart WHERE wartosc_magazynu = (SELECT MAX(wartosc_magazynu) FROM kategorie_sum_wart); Realizacja postawionego zadania w ramach przykładu za pomocą widoku tymczasowego wprowadza modularyzację zadania na etapy utworzenie (tymczasowego) widoku i perspektywy opartej o ten widok z tym, że w tym przypadku, w stosunku do widoku słownikowego, widok (tymczasowy) i perspektywa na nim oparta tworzą jednak pewną całość. 19

Wykład 6. SQL praca z tabelami 3

Wykład 6. SQL praca z tabelami 3 Wykład 6 SQL praca z tabelami 3 Łączenie wyników zapytań Język SQL zawiera mechanizmy pozwalające na łączenie wyników kilku pytań. Pozwalają na to instrukcje UNION, INTERSECT, EXCEPT o postaci: zapytanie1

Bardziej szczegółowo

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9.

1 DML - zapytania, część II Grupowanie Operatory zbiorowe DML - modyfikacja 7. 3 DCL - sterowanie danymi 9. Plan wykładu Spis treści 1 DML - zapytania, część II 1 1.1 Grupowanie................................... 1 1.2 Operatory zbiorowe............................... 5 2 DML - modyfikacja 7 3 DCL - sterowanie

Bardziej szczegółowo

SQL (ang. Structured Query Language)

SQL (ang. Structured Query Language) SQL (ang. Structured Query Language) SELECT pobranie danych z bazy, INSERT umieszczenie danych w bazie, UPDATE zmiana danych, DELETE usunięcie danych z bazy. Rozkaz INSERT Rozkaz insert dodaje nowe wiersze

Bardziej szczegółowo

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni Akademia Morska w Gdyni Gdynia 2004 1. Złączenie definicja Złączenie (JOIN) to zbiór rekordów stanowiących wynik zapytania służącego pobraniu danych z połączonych tabel (związki jeden-do-jeden, jeden-do-wiele

Bardziej szczegółowo

Autor: Joanna Karwowska

Autor: Joanna Karwowska Autor: Joanna Karwowska Jeśli pobieramy dane z więcej niż jednej tabeli, w rzeczywistości wykonujemy tak zwane złączenie. W SQL istnieją instrukcje pozwalające na formalne wykonanie złączenia tabel - istnieje

Bardziej szczegółowo

Relacyjne bazy danych. Podstawy SQL

Relacyjne bazy danych. Podstawy SQL Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umożliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.

Bardziej szczegółowo

Relacyjne bazy danych. Podstawy SQL

Relacyjne bazy danych. Podstawy SQL Relacyjne bazy danych Podstawy SQL Język SQL SQL (Structured Query Language) język umoŝliwiający dostęp i przetwarzanie danych w bazie danych na poziomie obiektów modelu relacyjnego tj. tabel i perspektyw.

Bardziej szczegółowo

3. Podzapytania, łączenie tabel i zapytań

3. Podzapytania, łączenie tabel i zapytań 3. Podzapytania, łączenie tabel i zapytań I. PODZAPYTANIE (SUBSELECT) oddzielna, ujęta w nawiasy instrukcja SELECT, zagnieżdżona w innej instrukcji SQL, zazwyczaj w instrukcji SELECT w instrukcji SELECT,

Bardziej szczegółowo

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT

Konstruowanie Baz Danych SQL UNION, INTERSECT, EXCEPT Studia podyplomowe Inżynieria oprogramowania współfinansowane przez Unię Europejska w ramach Europejskiego Funduszu Społecznego Projekt Studia podyplomowe z zakresu wytwarzania oprogramowania oraz zarządzania

Bardziej szczegółowo

Wykład 8. SQL praca z tabelami 5

Wykład 8. SQL praca z tabelami 5 Wykład 8 SQL praca z tabelami 5 Podzapytania to mechanizm pozwalający wykorzystywać wyniki jednego zapytania w innym zapytaniu. Nazywane często zapytaniami zagnieżdżonymi. Są stosowane z zapytaniami typu

Bardziej szczegółowo

Podstawy języka SQL. SQL Structured Query Languagestrukturalny

Podstawy języka SQL. SQL Structured Query Languagestrukturalny Podstawy języka SQL SQL Structured Query Languagestrukturalny język zapytań DDL Język definicji danych (np. tworzenie tabel) DML Język manipulacji danych (np. tworzenie zapytań) DCL Język kontroli danych

Bardziej szczegółowo

Oracle11g: Wprowadzenie do SQL

Oracle11g: Wprowadzenie do SQL Oracle11g: Wprowadzenie do SQL OPIS: Kurs ten oferuje uczestnikom wprowadzenie do technologii bazy Oracle11g, koncepcji bazy relacyjnej i efektywnego języka programowania o nazwie SQL. Kurs dostarczy twórcom

Bardziej szczegółowo

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe

Język SQL. Rozdział 5. Połączenia i operatory zbiorowe Język SQL. Rozdział 5. Połączenia i operatory zbiorowe Iloczyn kartezjański, połączenie równościowe, połączenie nierównościowe, połączenie zwrotne, połączenie zewnętrzne, składnia jawna połączeń, składnia

Bardziej szczegółowo

Systemy GIS Tworzenie zapytań w bazach danych

Systemy GIS Tworzenie zapytań w bazach danych Systemy GIS Tworzenie zapytań w bazach danych Wykład nr 6 Analizy danych w systemach GIS Jak pytać bazę danych, żeby otrzymać sensowną odpowiedź......czyli podstawy języka SQL INSERT, SELECT, DROP, UPDATE

Bardziej szczegółowo

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści

SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, Spis treści SQL Server i T-SQL w mgnieniu oka : opanuj język zapytań w 10 minut dziennie / Ben Forta. Gliwice, 2017 Spis treści O autorze 9 Wprowadzenie 11 Lekcja 1. Zrozumieć SQL 15 Podstawy baz danych 15 Język SQL

Bardziej szczegółowo

Przykładowa baza danych BIBLIOTEKA

Przykładowa baza danych BIBLIOTEKA Przykładowa baza danych BIBLIOTEKA 1. Opis problemu W ramach zajęć zostanie przedstawiony przykład prezentujący prosty system biblioteczny. System zawiera informację o czytelnikach oraz książkach dostępnych

Bardziej szczegółowo

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1

Podstawy języka SQL. standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi. Bazy danych s.5-1 Podstawy języka SQL standardy SQL formułowanie zapytań operacje na strukturach danych manipulowanie danymi Bazy danych s.5-1 Język SQL SQL (ang. Structured Query Language, strukturalny język zapytań) język

Bardziej szczegółowo

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego.

77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego. 77. Modelowanie bazy danych rodzaje połączeń relacyjnych, pojęcie klucza obcego. Przy modelowaniu bazy danych możemy wyróżnić następujące typy połączeń relacyjnych: jeden do wielu, jeden do jednego, wiele

Bardziej szczegółowo

Tworzenie bazy danych na przykładzie Access

Tworzenie bazy danych na przykładzie Access Tworzenie bazy danych na przykładzie Access Tworzenie tabeli Kwerendy (zapytania) Selekcja Projekcja Złączenie Relacja 1 Relacja 2 Tworzenie kwedend w widoku projektu Wybór tabeli (tabel) źródłowych Wybieramy

Bardziej szczegółowo

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9

Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9 Wstęp 5 Rozdział 1. Podstawy relacyjnych baz danych 9 Tabele 9 Klucze 10 Relacje 11 Podstawowe zasady projektowania tabel 16 Rozdział 2. Praca z tabelami 25 Typy danych 25 Tworzenie tabel 29 Atrybuty kolumn

Bardziej szczegółowo

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści

Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, Spis treści Podstawy języka T-SQL : Microsoft SQL Server 2016 i Azure SQL Database / Itzik Ben-Gan. Warszawa, 2016 Spis treści Wprowadzenie Podziękowania xiii xvii 1 Podstawy zapytań i programowania T-SQL 1 Podstawy

Bardziej szczegółowo

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi.

Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi. Marek Robak Wprowadzenie do języka SQL na przykładzie baz SQLite Przykłady najlepiej wykonywać od razu na bazie i eksperymentować z nimi. Tworzenie tabeli Pierwsza tabela W relacyjnych bazach danych jedna

Bardziej szczegółowo

Bazy danych Access KWERENDY

Bazy danych Access KWERENDY Bazy danych Access KWERENDY Obiekty baz danych Access tabele kwerendy (zapytania) formularze raporty makra moduły System baz danych MS Access Tabela Kwerenda Formularz Raport Makro Moduł Wyszukiwanie danych

Bardziej szczegółowo

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Laboratorium nr 4. Temat: SQL część II. Polecenia DML Laboratorium nr 4 Temat: SQL część II Polecenia DML DML DML (Data Manipulation Language) słuŝy do wykonywania operacji na danych do ich umieszczania w bazie, kasowania, przeglądania, zmiany. NajwaŜniejsze

Bardziej szczegółowo

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15

T-SQL dla każdego / Alison Balter. Gliwice, cop Spis treści. O autorce 11. Dedykacja 12. Podziękowania 12. Wstęp 15 T-SQL dla każdego / Alison Balter. Gliwice, cop. 2016 Spis treści O autorce 11 Dedykacja 12 Podziękowania 12 Wstęp 15 Godzina 1. Bazy danych podstawowe informacje 17 Czym jest baza danych? 17 Czym jest

Bardziej szczegółowo

Bazy danych 10. SQL Widoki

Bazy danych 10. SQL Widoki Bazy danych 10. SQL Widoki P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ semestr letni 2005/06 Widoki, AKA Perspektywy W SQL tabela, która utworzono za pomoca zapytania CREATE TABLE, nazywa się tabela

Bardziej szczegółowo

Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/

Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/ Paweł Rajba pawel@ii.uni.wroc.pl http://www.itcourses.eu/ Wprowadzenie Historia i standardy Podstawy relacyjności Typy danych DDL tabele, widoki, sekwencje zmiana struktury DML DQL Podstawy, złączenia,

Bardziej szczegółowo

Microsoft SQL Server Podstawy T-SQL

Microsoft SQL Server Podstawy T-SQL Itzik Ben-Gan Microsoft SQL Server Podstawy T-SQL 2012 przełożył Leszek Biolik APN Promise, Warszawa 2012 Spis treści Przedmowa.... xiii Wprowadzenie... xv Podziękowania... xix 1 Podstawy zapytań i programowania

Bardziej szczegółowo

Aliasy Select p.first_name, p.salary, j.job_title from employees p, jobs j where p.job_id=j.job_id;

Aliasy Select p.first_name, p.salary, j.job_title from employees p, jobs j where p.job_id=j.job_id; Dane z kilku tabel Aliasy Select p.first_name, p.salary, j.job_title from employees p, jobs j where p.job_id=j.job_id; Łączenie kilku selectów w jeden posortowany wynik 1. UNION suma bez powtórzeń. Powoduje,

Bardziej szczegółowo

Złączenie CROSS JOIN jest to tzw. złączenie krzyżowe, którego ogólna postać wygląda następująco:

Złączenie CROSS JOIN jest to tzw. złączenie krzyżowe, którego ogólna postać wygląda następująco: Połączenia krzyżowe Złączenie typu CROSS JOIN Złączenie CROSS JOIN jest to tzw. złączenie krzyżowe, którego ogólna postać wygląda następująco: SELECT kolumna1, kolumna2,..., kolumnan FROM tabela1 CROSS

Bardziej szczegółowo

Podstawy języka SQL cz. 2

Podstawy języka SQL cz. 2 Podstawy języka SQL cz. 2 1. Operatory zbiorowe a. UNION suma zbiorów z eliminacją powtórzeń, b. EXCEPT różnica zbiorów z eliminacją powtórzeń, c. INTERSECT część wspólna zbiorów z eliminacją powtórzeń.

Bardziej szczegółowo

Wykład 5. SQL praca z tabelami 2

Wykład 5. SQL praca z tabelami 2 Wykład 5 SQL praca z tabelami 2 Wypełnianie tabel danymi Tabele można wypełniać poprzez standardową instrukcję INSERT INTO: INSERT [INTO] nazwa_tabeli [(kolumna1, kolumna2,, kolumnan)] VALUES (wartosc1,

Bardziej szczegółowo

Grupowanie i funkcje agregacji

Grupowanie i funkcje agregacji Grupowanie i funkcje agregacji Funkcje agregujące: COUNT([DISTINCT] wyrażenie *), MIN(wyrażenie), MAX(wyrażenie), SUM([DISTINCT] wyrażenie), AVG([DISTINCT] wyrażenie). Klauzula GROUP BY Grupowanie polega

Bardziej szczegółowo

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN

Integralność danych Wersje języka SQL Klauzula SELECT i JOIN Integralność danych Wersje języka SQL Klauzula SELECT i JOIN Robert A. Kłopotek r.klopotek@uksw.edu.pl Wydział Matematyczno-Przyrodniczy. Szkoła Nauk Ścisłych, UKSW Integralność danych Aspekty integralności

Bardziej szczegółowo

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści

SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop Spis treści SQL w 24 godziny / Ryan Stephens, Arie D. Jones, Ron Plew. Warszawa, cop. 2016 Spis treści O autorach 11 Podziękowania 12 Część I Wprowadzenie do języka SQL 13 Godzina 1. Witamy w świecie języka SQL 15

Bardziej szczegółowo

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście.

Instrukcja podwaja zarobki osób, których imiona zaczynają się P i dalsze litery alfabetu zakładamy, że takich osbób jest kilkanaście. Rodzaje triggerów Triggery DML na tabelach INSERT, UPDATE, DELETE Triggery na widokach INSTEAD OF Triggery DDL CREATE, ALTER, DROP Triggery na bazie danych SERVERERROR, LOGON, LOGOFF, STARTUP, SHUTDOWN

Bardziej szczegółowo

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza

Plan. Formularz i jego typy. Tworzenie formularza. Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza 4 Budowa prostych formularzy, stany sesji, tworzenie przycisków Plan Co to jest formularz? Typy formularzy Tworzenie prostego formularza Budowa prostego formularza 2 Formularz i jego typy Tworzenie formularza

Bardziej szczegółowo

SQL - Structured Query Language. strukturalny język zapytań

SQL - Structured Query Language. strukturalny język zapytań SQL - Structured Query Language strukturalny język zapytań SQL - Structured Query Language - strukturalny język zapytań Światowy standard przeznaczony do definiowania, operowania i sterowania danymi w

Bardziej szczegółowo

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych

Informatyka sem. III studia inżynierskie Transport 2018/19 LAB 2. Lab Backup bazy danych. Tworzenie kopii (backup) bazy danych Informatyka sem. III studia inżynierskie Transport 2018/19 Lab 2 LAB 2 1. Backup bazy danych Tworzenie kopii (backup) bazy danych Odtwarzanie bazy z kopii (z backup u) 1. Pobieramy skrypt Restore 2. Pobieramy

Bardziej szczegółowo

Ćwiczenie zapytań języka bazy danych PostgreSQL

Ćwiczenie zapytań języka bazy danych PostgreSQL Ćwiczenie zapytań języka bazy danych PostgreSQL 1. Uruchom link w przeglądarce: http://127.0.0.1/phppgadmin 2. Kliknij w zaznaczony na czerwono link PostgreSQL: 3. Zaloguj się wpisując hasło i login student.

Bardziej szczegółowo

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup

Grupowanie i funkcje agregacji. Grupowanie z użyciem rollup Grupowanie i funkcje agregacji Grupowanie z użyciem rollup Funkcje agregujące: COUNT([DISTINCT] wyrażenie *), MIN(wyrażenie), MAX(wyrażenie), SUM([DISTINCT] wyrażenie), AVG([DISTINCT] wyrażenie). Klauzula

Bardziej szczegółowo

Kwerenda. parametryczna, z polem wyliczeniowym, krzyżowa

Kwerenda. parametryczna, z polem wyliczeniowym, krzyżowa Kwerenda parametryczna, z polem wyliczeniowym, krzyżowa Operatory stosowane w wyrażeniach pól wyliczeniowych Przykład: wyliczanie wartości w kwerendach W tabeli Pracownicy zapisano wartości stawki godzinowej

Bardziej szczegółowo

Przestrzenne bazy danych Podstawy języka SQL

Przestrzenne bazy danych Podstawy języka SQL Przestrzenne bazy danych Podstawy języka SQL Stanisława Porzycka-Strzelczyk porzycka@agh.edu.pl home.agh.edu.pl/~porzycka Konsultacje: wtorek godzina 16-17, p. 350 A (budynek A0) 1 SQL Język SQL (ang.structured

Bardziej szczegółowo

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE

Język DML. Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE Język DML Instrukcje DML w różnych implementacjach SQL są bardzo podobne. Podstawowymi instrukcjami DML są: SELECT INSERT UPDATE DELETE Systemy Baz Danych, Hanna Kleban 1 INSERT Instrukcja INSERT dodawanie

Bardziej szczegółowo

Szkolenie Oracle SQL podstawy. Terminy. 15 17 lutego 2010 First Minute! 1100zł!

Szkolenie Oracle SQL podstawy. Terminy. 15 17 lutego 2010 First Minute! 1100zł! Szkolenie Oracle SQL podstawy Terminy 15 17 lutego 2010 First Minute! 1100zł! Opis szkolenia Baza danych Oracle od dawna cieszy się zasłużona sławą wśród informatyków. Jej wydajność, szybkość działania

Bardziej szczegółowo

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Instytut Mechaniki i Inżynierii Obliczeniowej   Wydział Mechaniczny Technologiczny Politechnika Śląska Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl Wydział Mechaniczny Technologiczny Politechnika Śląska Laboratorium 1 Wprowadzenie, podstawowe informacje o obsłudze

Bardziej szczegółowo

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS UNIWERSYTET ZIELONOGÓRSKI INSTYTUT INFORMATYKI I ELEKTROTECHNIKI ZAKŁAD INŻYNIERII KOMPUTEROWEJ Przygotowali: mgr inż. Arkadiusz Bukowiec mgr inż. Remigiusz Wiśniewski LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Bardziej szczegółowo

Bazy danych SQL Server 2005

Bazy danych SQL Server 2005 Bazy danych SQL Server 2005 TSQL Michał Kuciapski Typ zadania: Podstawowe zapytania Select Zadanie 1: Wyświetl następujące informacje z bazy: A. 1. Wyświetl informacje o klientach: nazwa firmy, imie, nazwisko,

Bardziej szczegółowo

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8

Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8 Bazy Danych - Instrukcja do Ćwiczenia laboratoryjnego nr 8 Bazowy skrypt PHP do ćwiczeń z bazą MySQL: Utwórz skrypt o nazwie cw7.php zawierający następującą treść (uzupełniając go o właściwą nazwę uŝytkownika

Bardziej szczegółowo

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych

Język SQL. instrukcja laboratoryjna. Politechnika Śląska Instytut Informatyki. laboratorium Bazy Danych Politechnika Śląska Instytut Informatyki instrukcja laboratoryjna laboratorium Bazy Danych przygotowali: mgr inż. Paweł Kasprowski (Kasprowski@zti.iinf.polsl.gliwice.pl) mgr inż. Bożena Małysiak (bozena@ivp.iinf.polsl.gliwice.pl)

Bardziej szczegółowo

Wykład 05 Bazy danych

Wykład 05 Bazy danych Wykład 05 Bazy danych Tabela składa się z: Kolumn Wierszy Wartości Nazwa Wartości Opis INT [UNSIGNED] -2^31..2^31-1 lub 0..2^32-1 Zwykłe liczby całkowite VARCHAR(n) n = długość [1-255] Łańcuch znaków o

Bardziej szczegółowo

Grupowanie i funkcje agregujące

Grupowanie i funkcje agregujące Grupowanie i funkcje agregujące Zadanie 1. Stwórz odpowiednią tabelę Test_agr i wprowadź odpowiednie rekordy tak, aby wynik zapytania SELECT AVG(kol) avg_all, AVG(DISTINCT kol) avg_dist, COUNT(*) count_gw,

Bardziej szczegółowo

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli

1. Tworzenie tabeli. 2. Umieszczanie danych w tabeli 1. Tworzenie tabeli Aby stworzyć tabele w SQL-u należy użyć polecenia CREATE TABLE nazwa_tabeli (nazwa_pola1 właściwości_pola1, nazwa_pola2 właściwości_pola2, itd.) Nazwa_tabeli to wybrana przez nas nazwa

Bardziej szczegółowo

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych

Bazy danych. Plan wykładu. Diagramy ER. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych. Podstawy modeli relacyjnych Plan wykładu Bazy danych Wykład 9: Przechodzenie od diagramów E/R do modelu relacyjnego. Definiowanie perspektyw. Diagramy E/R - powtórzenie Relacyjne bazy danych Od diagramów E/R do relacji SQL - perspektywy

Bardziej szczegółowo

Zadania z SQLa (MS SQL Server)

Zadania z SQLa (MS SQL Server) Zadania z SQLa (MS SQL Server) Struktura testowej bazy danych (diagram ERD): opracował dr Robert Fidytek SPIS TYPÓW ZADAŃ 1 Projekcja wyników zapytań (SELECT FROM )... 3 2 Sortowanie wyników zapytań (ORDER

Bardziej szczegółowo

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL

SQL - Structured Query Language -strukturalny język zapytań SQL SQL SQL SQL Wprowadzenie do SQL SQL - Structured Query Language -strukturalny język zapytań Światowy standard przeznaczony do definiowania, operowania i sterowania danymi w relacyjnych bazach danych Powstał w firmie

Bardziej szczegółowo

P o d s t a w y j ę z y k a S Q L

P o d s t a w y j ę z y k a S Q L P o d s t a w y j ę z y k a S Q L Adam Cakudis IFP UAM Użytkownicy System informatyczny Aplikacja Aplikacja Aplikacja System bazy danych System zarządzania baz ą danych Schemat Baza danych K o n c e p

Bardziej szczegółowo

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie

Programowanie MSQL. show databases; - pokazanie jakie bazy danych są dostępne na koncie Programowanie MSQL show databases; - pokazanie jakie bazy danych są dostępne na koncie show databases; - wyświetlenie wszystkich baz danych na serwerze create database nazwa; - za nazwa wstawiamy wybraną

Bardziej szczegółowo

Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL

Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL Program szkoleniowy Efektywni50+ Moduł IV Podstawy relacyjnych baz danych i język SQL 1 Podstawy relacyjnego modelu danych. 3h UWAGA: Temat zajęć jest typowo teoretyczny i stanowi wprowadzenie do zagadnień

Bardziej szczegółowo

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Grupa A (LATARNIE) Imię i nazwisko: Numer albumu: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: Nazwisko prowadzącego: 11: 12: Suma: Ocena: Zad. 1 (10 pkt) Dana jest relacja T. Podaj wynik poniższego zapytania (podaj

Bardziej szczegółowo

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Prezentacja Danych i Multimedia II r Socjologia Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL. Celem ćwiczeń jest poznanie zasad tworzenia baz danych i zastosowania komend SQL. Ćwiczenie I. Logowanie

Bardziej szczegółowo

Bazy danych. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski

Bazy danych. Andrzej Grzybowski. Instytut Fizyki, Uniwersytet Śląski Bazy danych Andrzej Grzybowski Instytut Fizyki, Uniwersytet Śląski Wykład 5 Strukturalny język zapytań (SQL - Structured Query Language) Algebraiczny rodowód podstawowe działania w przykładach Bazy danych.

Bardziej szczegółowo

Bazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408

Bazy Danych. SQL Podstawy języka III: powtórzenie. Krzysztof Regulski WIMiIP, KISiM, B5, pok. 408 Bazy Danych SQL Podstawy języka III: powtórzenie Krzysztof Regulski WIMiIP, KISiM, regulski@agh.edu.pl B5, pok. 408 Modyfikacja schematu relacji Utwórz tabelę wg schematu: CREATE TABLE ODDZIAL ( numer_oddzialu

Bardziej szczegółowo

SQL Structured Query Language

SQL Structured Query Language SQL Structured Query Language stworzony na początku lat 70 ubiegłego wieku w IBM przez Donalda Messerly'ego, Donalda Chamberlina oraz Raymonda Boyce'a pod nazwą SEQUEL pierwszy SZBD System R utworzony

Bardziej szczegółowo

Bazy danych. dr inż. Arkadiusz Mirakowski

Bazy danych. dr inż. Arkadiusz Mirakowski Bazy danych dr inż. Arkadiusz Mirakowski Początek pracy z Transact SQL (T-SQL) 153.19.7.13,1401 jkowalski nr indeksu 2 Perspektywa - tabela tymczasowa - grupowanie Perspektywa (widok) Perspektywa (widok)

Bardziej szczegółowo

Zarzadzanie transakcjami. Transakcje

Zarzadzanie transakcjami. Transakcje Transakcje Transakcja: ciąg zawierający jedno lub wiele poleceń SQL, zgrupowanych razem jako jedna logiczna jednostka działań, której nie można podzielić. Logiczna jednostka działań to zbiór logicznych

Bardziej szczegółowo

Język SQL. Rozdział 8. Język manipulowania danymi DML

Język SQL. Rozdział 8. Język manipulowania danymi DML Język SQL. Rozdział 8. Język manipulowania danymi DML Wstawianie danych i polecenie INSERT, modyfikowanie danych i polecenie UPDATE, usuwanie danych i polecenie DELETE, połączenia modyfikowalne, sekwencje.

Bardziej szczegółowo

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 6.0

ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 6.0 ECDL/ICDL Użytkowanie baz danych Moduł S1 Sylabus - wersja 6.0 Przeznaczenie Sylabusa Dokument ten zawiera szczegółowy Sylabus dla modułu ECDL/ICDL Użytkowanie baz danych. Sylabus opisuje zakres wiedzy

Bardziej szczegółowo

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania.

Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania. Wykład 7 Implementacja języka SQL w systemach baz danych Oracle sortowanie, funkcje agregujące i podzapytania. Przykładowa RBD o schematach relacji (tzw. płaska postać RBD): N(PRACOWNICY) = {ID_P, IMIĘ,

Bardziej szczegółowo

Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH

Wstęp do SQL. copyright: KGiIS WGGiOŚ AGH Wstęp do SQL SQL (Structured Query Language) strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych. Język SQL jest językiem deklaratywnym.

Bardziej szczegółowo

Wyświetl imie i nazwisko ucznia, nazwę przedmiotu z którego otrzymał ocenę niedostateczną. Nazwij tę kwerendę oceny niedostateczne.

Wyświetl imie i nazwisko ucznia, nazwę przedmiotu z którego otrzymał ocenę niedostateczną. Nazwij tę kwerendę oceny niedostateczne. Kwerendy wybierające Kwerenda wybierająca jest najczęściej używanym rodzajem kwerendy. Służy do otrzymywania danych z tabeli lub tabel i wyświetla wyniki w arkuszu danych, w którym można je następnie aktualizować

Bardziej szczegółowo

Struktura drzewa w MySQL. Michał Tyszczenko

Struktura drzewa w MySQL. Michał Tyszczenko Struktura drzewa w MySQL Michał Tyszczenko W informatyce drzewa są strukturami danych reprezentującymi drzewa matematyczne. W naturalny sposób reprezentują hierarchię danych toteż głównie do tego celu

Bardziej szczegółowo

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz

Wyzwalacze. do automatycznego generowania wartości kluczy głównych. Składnia instrukcji tworzacej wyzwalacz Wyzwalacze Wyzwalacze są specjalnymi procedurami składowanymi, uruchamianymi automatycznie w następstwie zaistnienia określonego typu zdarzenia. Ich główne zadanie polega na wymuszaniu integralności danych

Bardziej szczegółowo

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia

Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Wyzwalacz - procedura wyzwalana, składowana fizycznie w bazie, uruchamiana automatycznie po nastąpieniu określonego w definicji zdarzenia Składowe wyzwalacza ( ECA ): określenie zdarzenia ( Event ) określenie

Bardziej szczegółowo

Model relacyjny. Wykład II

Model relacyjny. Wykład II Model relacyjny został zaproponowany do strukturyzacji danych przez brytyjskiego matematyka Edgarda Franka Codda w 1970 r. Baza danych według definicji Codda to zbiór zmieniających się w czasie relacji

Bardziej szczegółowo

SQL język relacyjnych baz danych. Dialekt SQL firmy Microsoft Access

SQL język relacyjnych baz danych. Dialekt SQL firmy Microsoft Access SQL język relacyjnych baz danych. Dialekt SQL firmy Microsoft Access 1. Idealny język baz danych Idealny język baz danych powinien umożliwiać użytkownikowi: tworzenie baz danych i struktur relacji, wykonywanie

Bardziej szczegółowo

Podstawy Informatyki Wykład X

Podstawy Informatyki Wykład X Podstawy Informatyki Wykład X Bazy danych Access - cz. II Copyright by Arkadiusz Rzucidło 1 Praca z polami Używanie Maski wprowadzania Własności Rozmiar pola Zmiana porządku pól w tabeli Listy i pola typu

Bardziej szczegółowo

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Zapytania SELECT. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl Bazy danych Zapytania SELECT Dr inż. Paweł Kasprowski pawel@kasprowski.pl Przykład HAVING Podaj liczebność zespołów dla których najstarszy pracownik urodził się po 1940 select idz, count(*) from prac p

Bardziej szczegółowo

Wprowadzenie do baz danych

Wprowadzenie do baz danych Wprowadzenie do baz danych Dr inż. Szczepan Paszkiel szczepanpaszkiel@o2.pl Katedra Inżynierii Biomedycznej Politechnika Opolska Wprowadzenie DBMS Database Managment System, System za pomocą którego można

Bardziej szczegółowo

Bazy danych. Wykład V Kwerendy. Copyrights by Arkadiusz Rzucidło 1

Bazy danych. Wykład V Kwerendy. Copyrights by Arkadiusz Rzucidło 1 Bazy danych Wykład V Kwerendy Copyrights by Arkadiusz Rzucidło 1 Wprowadzenie Istotą bazy danych jest możliwość efektywnego wyszukiwania informacji Realizację operacji wyszukiwania zapewniają kwerendy

Bardziej szczegółowo

WPROWADZENIE DO BAZ DANYCH

WPROWADZENIE DO BAZ DANYCH WPROWADZENIE DO BAZ DANYCH Pojęcie danych i baz danych Dane to wszystkie informacje jakie przechowujemy, aby w każdej chwili mieć do nich dostęp. Baza danych (data base) to uporządkowany zbiór danych z

Bardziej szczegółowo

Oracle PL/SQL. Paweł Rajba.

Oracle PL/SQL. Paweł Rajba. Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 8 Wprowadzenie Definiowanie typu obiektowego Porównywanie obiektów Tabele z obiektami Operacje DML na obiektach Dziedziczenie -

Bardziej szczegółowo

Baza danych kwerendy, formularze, raporty

Baza danych kwerendy, formularze, raporty Baza danych kwerendy, formularze, raporty 1. Kwerendy Są to czynności polegające na zbieraniu lub poszukiwaniu informacji w bazach danych. Kwerendy mogą mieć na celu wyłącznie pobranie danych, jak i usuwanie,

Bardziej szczegółowo

CREATE USER

CREATE USER Temat: Administrowanie użytkownikami bazy danych. Po instalacji serwera MYSQL dostępne jest konto o nazwie root. Domyślnie nie ma ono przypisanego hasła, aczkolwiek podczas procesu konfiguracji jest możliwość

Bardziej szczegółowo

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne.

Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne. Język SQL. Rozdział 10. Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne. 1 Perspektywa Perspektywa (ang. view) jest strukturą

Bardziej szczegółowo

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga

Wstęp Wprowadzenie do BD Podstawy SQL. Bazy Danych i Systemy informacyjne Wykład 1. Piotr Syga Bazy Danych i Systemy informacyjne Wykład 1 Piotr Syga 09.10.2017 Ogólny zarys wykładu Podstawowe zapytania SQL Tworzenie i modyfikacja baz danych Elementy dynamiczne, backup, replikacja, transakcje Algebra

Bardziej szczegółowo

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli.

Instrukcje SQL można podzielić na pięć kategorii, które zostały przedstawione w poniższej tabeli. SQL W JĘZYKU PL/SQL Strukturalny język zapytań SQL określa sposób manipulowania danymi w bazie danych. Konstrukcje proceduralne języka PL/SQL stają się bardziej użyteczne w połączeniu z mocą przetwarzania

Bardziej szczegółowo

Wykład III. dr Artur Bartoszewski www.bartoszewski.pr.radom.pl. Wydział Nauczycielski, Kierunek Pedagogika Wprowadzenie do baz danych

Wykład III. dr Artur Bartoszewski www.bartoszewski.pr.radom.pl. Wydział Nauczycielski, Kierunek Pedagogika Wprowadzenie do baz danych Wydział Nauczycielski, Kierunek Pedagogika Wprowadzenie do baz danych dr Artur Bartoszewski www.bartoszewski.pr.radom.pl Wykład III W prezentacji wykorzystano fragmenty i przykłady z książki: Joe Habraken;

Bardziej szczegółowo

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl

Pawel@Kasprowski.pl Bazy danych. Bazy danych. Podstawy języka SQL. Dr inż. Paweł Kasprowski. pawel@kasprowski.pl Bazy danych Podstawy języka SQL Dr inż. Paweł Kasprowski pawel@kasprowski.pl Plan wykładu Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność danych Współbieżność

Bardziej szczegółowo

Bazy danych TERMINOLOGIA

Bazy danych TERMINOLOGIA Bazy danych TERMINOLOGIA Dane Dane są wartościami przechowywanymi w bazie danych. Dane są statyczne w tym sensie, że zachowują swój stan aż do zmodyfikowania ich ręcznie lub przez jakiś automatyczny proces.

Bardziej szczegółowo

Zapytania do bazy danych

Zapytania do bazy danych Zapytania do bazy danych Tworzenie zapytań do bazy danych MS Access może być realizowane na dwa sposoby. Standard SQL (Stucture Query Language) lub QBE (Query by Example). Warto wiedzieć, że drugi ze sposobów

Bardziej szczegółowo

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2.

Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. Język SQL. Rozdział 9. Język definiowania danych DDL, część 2. Ograniczenia integralnościowe, modyfikowanie struktury relacji, zarządzanie ograniczeniami. 1 Ograniczenia integralnościowe Służą do weryfikacji

Bardziej szczegółowo

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze

E.14 Bazy Danych cz. 18 SQL Funkcje, procedury składowane i wyzwalacze Funkcje użytkownika Tworzenie funkcji Usuwanie funkcji Procedury składowane Tworzenie procedur składowanych Usuwanie procedur składowanych Wyzwalacze Wyzwalacze a ograniczenia i procedury składowane Tworzenie

Bardziej szczegółowo

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do

Ćwiczenie rozpocznie się od wprowadzenia do laboratorium, po którym omówimy składnię ę polecenia INSERT pozwalającego ą na wstawianie krotek do Na dotychczasowych zajęciach zapoznaliście się Państwo z poleceniem SELECT pozwalającym ą na wykonywanie zapytań ń do bazy danych i odczytywanie danych zawartych w relacjach. Celem tego ćwiczenia jest

Bardziej szczegółowo

Laboratorium Bazy danych SQL 2

Laboratorium Bazy danych SQL 2 Klauzula order by występuje jako ostatnia klauzula w poleceniu select, powoduje posortowanie wierszy będących wynikiem zapytania według wartości atrybutu w niej wskazanego. Domyślnie sortowanie jest według

Bardziej szczegółowo

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy];

Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy]; Widoki/Perspektywy Podstawy Tworzenie widoku CREATE OR REPLACE VIEW [nazwa_widoku] AS SELECT [nazwy_kolumn] FROM [nazwa_tablicy]; Usuwanie widoku DROP VIEW [nazwa_widoku]; Przykład 1 Przykład najprostszego

Bardziej szczegółowo

Informatyka Ćwiczenie 10. Bazy danych. Strukturę bazy danych można określić w formie jak na rysunku 1. atrybuty

Informatyka Ćwiczenie 10. Bazy danych. Strukturę bazy danych można określić w formie jak na rysunku 1. atrybuty Informatyka Ćwiczenie 10 Bazy danych Baza danych jest zbiór informacji (zbiór danych). Strukturę bazy danych można określić w formie jak na rysunku 1. Pracownik(ID pracownika, imie, nazwisko, pensja) Klient(ID

Bardziej szczegółowo

Wprowadzenie. Tworzenie widoków

Wprowadzenie. Tworzenie widoków Widoki Wprowadzenie...2 Tworzenie widoków...2 Złączenie zewnętrzne w definicji widoków...4 Porządkowanie danych przez widoki...5 Modyfikowanie danych przez widoki...6 Ograniczenie zakresu modyfikowania

Bardziej szczegółowo

Wprowadzenie do SQL TEMAT 3 - Zadania dodatkowe

Wprowadzenie do SQL TEMAT 3 - Zadania dodatkowe Wprowadzenie do SQL TEMAT 3 - Zadania dodatkowe 1. Wyselekcjonować firmy z Wrocławia lub Krakowa, którym Nasza firma sprzedała cokolwiek w sierpniu 1992 (użyj funkcji Year i Month). SELECT DISTINCT FIRMY.Nr,

Bardziej szczegółowo