Złączenia wewnętrzne w bazach danych

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

Download "Złączenia wewnętrzne w bazach danych"

Transkrypt

1 Rozdział 23 Złączenia wewnętrzne w bazach danych Streszczenie. W rozdziale pokazano problemy związane ze stosowaniem złączeń (ang. joins) tabel w modelu relacyjnym. Pozornie proste złączenia (kanon pracy z modelem relacyjnym) będące elementem zapytania SQL mogą być źródłem istotnych błędów w przypadku stosowania różnych składni języka SQL dostępnych w danym systemie bazodanowym. Zasygnalizowane problemy zilustrowano przykładami zapytań budowanych w wybranym systemie komercyjnym (Oracle), które dopuszczają stosowanie zarówno firmowej składni (nie w pełni zgodnej z normą ANSI) jak i składni zdefiniowanej w normie ANSI. W rozdziale omówiono jedynie problemy dotyczące złączeń wewnętrznych (ang. Inner Joins). Drugi podstawowy typ złączeń (złączenia zewnętrzne; ang. Outer Joins) oraz tzw. złączenia hierarchiczne (ang. Self Joins) omówiono w rozdziale Złączenia zewnętrze i hierarchiczne w bazach danych. 1 Wstęp Jedną z najważniejszych cech języka SQL jest możliwość pobierania danych z więcej niż jednej relacji (tabeli). W praktyce bowiem trudno sobie wyobrazić rzeczywistą aplikację operującą na jednej tylko tabeli. W konsekwencji bezbłędna i wydajna obsługa złączeń tabel z poziomu języka SQL nabiera pierwszorzędnego znaczenia. Niniejszy rozdział poświęcony jest omówieniu wybranych aspektów złączeń w relacyjnej bazie danych Oracle. W dostępnej literaturze stosunkowo mało miejsc poświęca się na wnikliwe omówienie zagadnień związanych ze złączeniami w relacyjnych bazach danych. Problem ten jest tak stary jak teoria (i praktyka) tych baz i wydawałoby się, że na ten temat wszystko już zostało powiedziane i wszystko jest jasne i klarowne. Nie jest to jednak prawdą, gdyż producenci systemów baz danych nadal w swoich nowych wersjach produktów wprowadzają różnego rodzaju zmiany i uzupełnienia. Znamiennym przykładem jest tutaj firma Oracle, która dopiero od wersji 9i swojej bazy zdecydowała się na pełną implementację złączeń w stylu Jarosław Gramacki, Artur Gramacki: Uniwersytet Zielonogórski, Instytut Informatyki i Elektroniki, ul. Podgórna 50, , Zielona Góra {j.gramacki, A.Gramacki}@iie.uz.zgora.pl

2 J. Gramacki, A. Gramacki zalecanym przez normę ANSI. Nadal jednak pozostawiono wsparcie dla dotychczasowej starej składni (przynajmniej do wersji 10g, która w chwili pisania pracy jest ostatnim wydaniem systemu). Pokazano, że równoległe istnienie obu składni wprowadza pewne problemy, zwłaszcza, że obie składnie nie są ze sobą w pełni zgodne. Szczególną uwagę zwrócono na pokazanie wspólnych cech oraz różnic obu dostępnych składni oraz różnych problemów i potencjalnych błędów, które mogą się w związku z tym ujawnić. Omówiono zagadnienia dotyczące złączeń wewnętrznych (ang. Inner Joins). Drugi podstawowy typ złączeń (złączenia zewnętrzne; ang. Outer Joins) oraz tzw. złączenia hierarchiczne (ang. Self Joins) będące pewnym szczególnym przepadkiem złączeń wewnętrznych omówiono w rozdziale Złączenia zewnętrze i hierarchiczne w bazach danych. 2 Model danych Przy opisie jakichkolwiek zagadnień dotyczących języka SQL konieczny jest odpowiedni, adekwatny do opisywanych problemów, schemat tabel relacyjnych wraz z ich powiązaniami. Na rys. 1 przedstawiono wykorzystywany w pracy model relacyjny 1. Jest to znany większości użytkowników systemu Oracle model o nazwie Human Resource (HR) [1] uzupełniony o dwie dodatkowe tabele: Sports oraz Sport_enrollment. Opisują one prowadzone w firmie ligi sportowe oraz pracowników, którzy zapisali się na dane rozgrywki. Poniżej pokazano dane umieszczone w tych tabelach: Tablela Sports DISCIPLINE SEASON football spring05 football winter05 hockey autumn05 hockey spring05 tennis spring05 tennis spring06 tennis summer05 volleyball spring05 volleyball summer05 volleyball winter05 Tabela Sports_enrollment DISCIPLINE SEASON EMPLOYEE_ID hockey spring tennis summer tennis summer Potrójny klucz primary (na wszystkich kolumnach tabeli Sport_enrollment) utworzono, aby bezkosztowo uniemożliwić wielokrotne zapisanie się tego samego pracownika na te same rozgrywki. Wymieńmy kilka cech schematu, które będą istotne w pracy: Kolumna Employees.manager_ID dopuszcza wartość NULL. Nie każdy więc zarejestrowany w bazie pracownik musi mieć swojego podwładnego. Kolumna Employees.department_ID dopuszcza wartość NULL. Nie każdy więc zarejestrowany w bazie pracownik musi być przypisany do konkretnego działu firmy. Kolumna Departments.manager_ID dopuszcza wartość NULL. Nie każdy więc zarejestrowany w bazie dział firmy musi mieć swojego kierownika. Wygodna na etapie modelowania, ale sprawiająca trudności w użyciu i podatna na błędy, relacja wewnętrzna Employees.employee_ID -> Employees.manager_ID. 1 W pracy wszystkie nazwy tabel pisane są małymi literami + pierwsza litera duża (np. Departments), nazwy kolumn w całości małymi literami (np. title), aliasy dla kolumn to jedna bądź dwie duże litery (np. J, SE). 226

3 Złączenia wewnętrzne w bazach danych W tabeli Sport_enrollment pracownik może zapisać się do sekcji sportowej, która akurat nie jest prowadzona w danym sezonie (np. sekcja tenisa jest oferowana tylko w sezonie letnim 2005). Rys. 1. Model relacyjny HR wykorzystywany w pracy Część z wymienionych właściwości (pierwsze trzy) może być efektem celowo przyjętych założeń i z formalnego punktu widzenia nie stanowi to błędu. Właściwość czwartą można by zastąpić odpowiednią strukturą typu master-detail (mniej podatna na błędy w zapytaniach SQL), jednak wtedy należałoby z góry ustalić ilość poziomów podległości pracowników. Właściwość piąta jest wynikiem pewnego niedbalstwa projektanta bazy (żeby nie powiedzieć szkolnego błędu). Bez problemu można było utworzyć odpowiednie ograniczenie, np. poleceniem: ALTER TABLE Sport_enrollment ADD CONSTRAINT xxx_fk FOREIGN KEY (discipline, season_id) REFERENCES Sports (discipline, season_id); Ograniczenie to widać co prawda na rys. 1. ale na potrzeby artykułu dezaktywowano je. Abstrahując jednak od powyższej dyskusji, w praktyce często przychodzi nam pracować na modelu takim, jaki jest (nie mamy możliwości zmiany modelu). Dużego znaczenia nabiera wtedy poprawne konstruowanie zapytań opartych na danym modelu. 227

4 J. Gramacki, A. Gramacki 3 Złączenia w systemie Oracle Złączenia zajmują ważne miejsce w każdej bazie relacyjnej i są to jej bardzo newralgiczne elementy. Dokumentacja systemu Oracle poświęca im jednak stosunkowo niewiele miejsca, dodatkowo prawie zupełnie nie zwracając uwagi na różne związane z nimi niuanse (prezentowane tam przykłady są maksymalnie uproszczone). Ponadto w oryginalnej dokumentacji systemu Oracle pojawia się aż siedem pojęć, w których używana jest fraza join 2, zestawiono je poniżej. W nawiasach podano również inne, pojawiające się w różnych publikacjach nazwy, które jednak nie pojawiają się w dokumentacji Oracle. W tabeli 1 krótko opisano każde ze złączeń: Natural Joins, Equijoins, Self Joins, Cartesian Products, Inner Joins (Simple Joins), Outer Joins, Antijoins, Semijoins, (Theta Joins) Najogólniej mówiąc wszelkie złączenia można podzielić na dwie podstawowe grupy: wewnętrznych (ang. Inner Joins) oraz zewnętrzne (ang. Outer Joins).Wszelkie inne bardziej szczegółowe podziały dotyczą pewnych zawężonych obszarów zastosowania. Mimo tego w sumie bardzo prostego i oczywistego podziału dokumentacja firmy Oracle dopiero od wersji 10g w sposób wyraźny wprowadza ten podział w diagramach syntaktycznych dla polecenie. Pojawiają się tam oddzielne bloki o nazwach [4, str. 19-8]: inner_cross_join_clause, outer_join_clause, outer_join_type, podczas gdy w dokumentacji do wersji 9i są tylko bloki o ogólnych nazwach [5, str. 18-8]: joined_table, join_type, które zawierają w sobie elementy zarówno złączeń zewnętrznych jak i wewnętrznych. Z analizy zawartości tabeli 1 wynika, że istnienie przynajmniej kilku z podanych tam pojęć jest dyskusyjne, gdyż służą one do opisu stosunkowo wąskiego zbioru zapytań. Z drugiej strony niektóre nazwy opisują bardzo ogólne właściwości, typowe raczej dla całego podejścia relacyjnego. Dla każdego wymienionego typu złączenia w dalszej części tego Rozdziału (oraz w Rozdziale Złączenia zewnętrze i hierarchiczne w bazach danych ) podano odpowiednio dobrany, rzeczywisty przykład zapytania. Tabela 1. Różne używane pojęcia związane ze złączeniami relacyjnymi Nazwa Inner Joins Opis Złączenie dwóch lub więcej tabel, które zwraca w wyniku tylko wiersze 2 Wszędzie użyto pisowni zgodnej z używaną w oryginalnej dokumentacji firmy Oracle. 228

5 Złączenia wewnętrzne w bazach danych (Simple Joins) pasujące do warunku złączenia. Outer Joins Rozszerzenie funkcjonalności oferowanej przez złączenie typu Inner Joins. Do wyniku, który generowałby Inner Join dodawane są wiersze niepasujące. Rozróżnia się złączenia zewnętrzne lewostronne (Left Outer Joins), prawostronne (Right Outer Joins), pełne (Full Outer Joins). Natural Joins Złączenie dwóch lub więcej tabel poprzez kolumny o tych samych nazwach. Jest to szczególny przypadek złączeń Inner Joins. Equijoins Dotyczy złączenia opisanego operatorem porównania. Nie wspomina się o żadnych dodatkowych zagadnieniach/założeniach szczegółowych. Może to więc być zarówno złączenie Outer Joins jaki i Inner Joins. Self Joins Dotyczy złączenia w obrębie jednej tabeli. Tabela ta musi więc dwa razy pojawić się w klauzuli (z reguły z dwoma różnymi aliasami). Struktura taka zwykle zawiera dane mające postać struktury hierarchicznej (podległościowej). Jest to również szczególny przypadek złączeń Inner Joins. Cartesian Products Wynik złączenia dwóch lub więcej tabel, dla których nie podano warunku złączenia. Każdy wiersz z jednej tabeli złączony zostanie z każdym wierszem drugiej tabeli. Poza rzadkimi przypadkami szczególnymi, jest to z reguły wynik błędu w zapytaniu. Jest to również szczególny przypadek złączeń Inner Joins. Antijoins Złączenie zwracające wiersze, które NIE pasują do podanego warunku. Semijoins Złączenie z warunkiem EXISTS. Duplikaty zostają usunięte. Theta Joins Złączenie nierównościowe. Złączenie dwóch relacji dla kryterium złączenia innym niż równość. 4 Przykłady zapytań W pozostałej części rozdziału zamieszczono pewną liczbę przykładów ilustrujących wybrane zagadnienia dotyczące złączeń relacyjnych oraz krótkie komentarze tychże przykładów. Część przykładów zaczerpnięto z prac [2], [3], dostosowując je do używanego w rozdziale schematu relacyjnego. Przykłady starano się dobrać tak, aby pojawiały się w nich pewne problemy. Tam, gdzie to tylko było możliwe, zastosowano nową (dostępną począwszy od wersji 9i bazy Oracle) składnię złączeń zdefiniowaną w standardzie SQL/99 3. Należy jednak zaznaczyć, że nowa składnia NIE wprowadza żadnej nowej funkcjonalności, której nie było w systemie do tej pory. Czyni jednak zapytania bardziej zgodnymi z normą ANSI- SQL 4. Ponadto nowa składnia w wielu przypadkach jest bardziej samodokumentująca się i łatwiejsza w czytaniu (zwłaszcza, gdy zapytanie złącza wiele tabel np. kilkanaście- i wówczas nie zawsze łatwo jest się zorientować, co zapytanie dokładnie robi). 3 W wielu publikacjach pojawia się taka właśnie nazwa. Należy ją jednak traktować jako umowny skrót. Równie dobry skrót byłby SQL/2003 Poprawna nazwa normy to: ANSI/ISO/IEC [tu numer od 1 do 14]: Norma dostępna na stronie 229

6 J. Gramacki, A. Gramacki 4.1 Złączenia naturalne (ang. Natural Joins) Złączenia naturalne dotyczą szczególnego przypadku, gdy w łączonych tabelach kolumny kluczowe mają te same nazwy. W składni ANSI złączenie to, choć merytorycznie bardzo proste, podatne jest na niespodziewane błędy. Przykład 1 R.region_id, R.region_name, C.country_id, C.country_name Countries C, Regions R R.region_id = C.region_id AND LOWER(R.region_name) LIKE %europe%'; region_id, R.region_name, C.country_id, C.country_name Regions R NATURAL JOIN Countries C LOWER(R.region_name) LIKE '%europe%'; składnia ANSI umożliwia rozdzielenie warunków złączenia od innych warunków w klauzuli tu ograniczających wyniki do regionów europejskich. W dotychczasowej składni oba warunki musiały występować w klauzuli i dla złożonych zapytań trudno było odróżnić je od siebie. dla składni ANSI, często w takim przypadku pojawia się błąd: ORA-25155: column used in NATURAL join cannot have qualifier. Nie jest możliwe więc używanie prefiksów tabel dla łączonych kolumn. Stąd zamiast R.region_id musi być region_id (nawet pomimo istnienia aliasów dla tabel). wydaje się, że używanie klauzuli NATURAL JOIN, jest podatne na błędy. Łatwo bowiem o (trudny do wykrycia) błąd, który wystąpi po dodaniu do schematu kolumny, która przypadkowo będzie nazywała się tak samo, jak kolumna w zapytaniu używającym NATURAL JOIN. W tym przypadku system użyje w złączeniu wszystkich kolumn o pasujących nazwach. System Oracle implementuje tą składnię, ale wynika to chyba raczej z potrzeby zapewnienia zgodności ze standardem ANSI, którego użyteczność w przypadku NATURAL JOIN jest jednak dyskusyjna. zabronione jest używanie innych klauzul (na przykład opisywanej niżej klauzuli ON) z klauzulą NATURAL JOIN. w przypadku naturalnego złączenia więcej niż dwóch tabel należy używać nawiasów. Bez nich w niektórych systemach to samo zapytanie może być inaczej obsługiwane (system Oracle stosuję łączność lewostronną): Wyrażenie a NATURAL JOIN b JOIN c ON b.c1 = c.c1 bez nawiasów może być interpretowane na dwa sposoby a NATURAL JOIN (b JOIN c ON b.c1 = c.c1) lub (a NATURAL JOIN b) JOIN c ON b.c1 = c.c1 Pomiędzy łączonymi tabelami może oczywiście istnieć więcej niż tylko jedno złączenie. Określeniu, podług których kolumn ma następować złączenie służy w takich przypadkach klauzula USING. Użycie jej wymaga jednak ostrożności. 230

7 Przykład 2 D.department_name, E.last_name ' ' e.first_name Name, E.hire_date Departments D, Employees E D.department_id = E.department_id AND E.job_id = 'IT_PROG'; Złączenia wewnętrzne w bazach danych D.department_name, E.last_name ' ' e.first_name Name, E.hire_date Departments D JOIN Employees E USING (department_id) E.job_id = 'IT_PROG'; W złożonych zapytaniach istotnym problemem jest rozdzielenie warunków złączeń wynikających z postaci relacyjnej schematu od pozostałych warunków ograniczających ilość zwracanych wyników. (nie-ansi) nie posiada żadnych formalnych mechanizmów dyscyplinujących programistę. Może on dowolnie wymieszać po jeśli w zapytaniu w notacji ANSI zamiast: Departments D JOIN Employees E USING (department_id) zapiszemy: Departments D NATURAL JOIN Employees warunków, to otrzymamy zły wynik. W powyższym przykładzie natura zagrożenia jest inna niż zagrożenie sygnalizowane w przykładzie 1. Tabele Employees oraz Departments łączą DWIE relacje (department_id = department_id oraz department_id = department_id) i dlatego należy doprecyzować, o które złączenie chodzi. Umożliwia to klauzula USING. klauzuli USING można używać tylko wówczas, gdy odpowiednie kolumny obu tabel mają takie same nazwy. Dotychczasowa składnia jest wolna od takich zagrożeń, gdyż warunek złączenia podany jest jawnie. Mówimy tu jednak ciągle o złączeniach naturalnych, które ze swej natury wymagają kolumn o identycznych nazwach. klauzula USING subtelnie psuje jednak semantykę zapytania. Błędem zakończy się np. D.department_name, D.department_ID, E.department_ID,... gdyż zapytanie zwróci: ORA column part of USING clause cannot have qualifier. W dotychczasowej składni błąd ten nie wystąpi. w klauzuli USING nie ma ograniczenia na ilość kolumn w niej wymienianych. Zapytanie jak poniżej jest jak najbardziej poprawne: discipline, -- Błąd, gdy S.discipline - patrz opis wyżej season_id, SE.employee_ID Sports S INNER JOIN Sport_enrollment SE USING (discipline, season_id); zamiast klauzuli JOIN można użyć dłuższej, ale bardziej opisowej wersji INNER JO- IN, która podkreśla, że chodzi o złączenie wewnętrzne. Oracle nie wymusza jednak tego. Podobnie jest ze słowem kluczowym OUTER w złączeniach zewnętrznych. Ta opcjonalność w użyciu słów INNER oraz OUTER jest nieco dziwna. W praktyce nic to nie daje a tylko wprowadza niepotrzebną niekonsekwencję. Należy więc przypuszczać, że wśród programistów zapanuje duża dowolność w jego stosowaniu. klauzula USING istotnie zwiększa czytelność zapytania. 4.2 Złączenia wewnętrzne (ang. Inner Joins) 231

8 J. Gramacki, A. Gramacki szczególne warunki w klauzuli, co często czyni zapytanie trudnym do czytania. Klauzula INNER JOIN jest więc pod tym względem krokiem w dobrym kierunku. Przykład 3a D.department_name, E.last_name ' ' E.first_name Name, SE.discipline, SE.season_ID Departments D, Employees E, Sport_enrollment SE D.department_id = E.department_id AND E.employee_ID=SE.employee_ID AND E.job_id = 'IT_PROG'; 232 D.department_name, E.last_name ' ' E.first_name Name, SE.discipline, SE.season_ID Departments D INNER JOIN Employees E ON (D.department_id =E.department_id) INNER JOIN Sport_enrollment SE ON (E.employee_ID=SE.employee_ID) E.job_id = 'IT_PROG'; sens zastosowania klauzuli ON sprowadza się jedynie do (eleganckiego) rozdzielenia warunków złączenia od innych warunków logicznych W tradycyjnej składni wszystkie warunki występowały razem w ramach klauzuli. Przykład 3b S.discipline, S.season_ID, E.employee_ID, -- alias konieczny E.last_name Sports S, Sport_enrollment SE, Employees E S.discipline = SE.discipline AND S.season_id = SE.season_id AND E.employee_ID = SE.employee_ID discipline, season_id, employee_id, -- teraz alias -- zabroniony E.last_name Sports S INNER JOIN Sport_enrollment SE USING (discipline, season_id) INNER JOIN Employees E USING (employee_id) złączenia wielokrotne są możliwe. INNER JOIN uwypukla kolejność złączeń, Oracle domyślnie wykonuje złączenia w kierunku od lewej do prawej. Najpierw złączenie Sports z Sport_enrollment, a następnie wynik tego złączenia z Employees. Można to jednak zmienić stosując w odpowiednim miejscu nawiasy. Przykład 3c S.discipline, S.season_ID, SE.employee_ID Sports S, Sport_enrollment SE S.discipline = SE.discipline AND -- wersja z USING discipline, -- tu alias zabroniony season_id, -- tu alias zabroniony SE.employee_ID Sports S INNER JOIN Sport_enrollment SE USING (discipline, season_id)

9 S.season_id = SE.season_id; Złączenia wewnętrzne w bazach danych -- wersja z ON S.discipline, -- tu alias obowiązkowy S.season_ID, -- tu alias obowiązkowy SE.employee_ID Sports S INNER JOIN Sport_enrollment SE ON S.discipline = SE.discipline AND S.season_id = SE.season_id; wersje z USING i ON są w tym przypadku równoważne, gdyż odpowiednie kolumny łączonych tabel mają takie same nazwy. W praktyce nie zawsze ma to miejsce, klauzula ON jest mniej czytelna od klauzuli USING. Mając wybór lepiej zastosować USING, gdyż jest ona krótsza i bardziej czytelna, w klauzuli ON może pojawić się dowolne wyrażenie logiczne. Niemniej w praktyce większość zapytań to zapytania równościowe (Equijoins), w których porównujemy odpowiednie kolumny dwóch (lub więcej) tabel, zwracamy uwagę na obowiązkowość / niedozwoloność stosowania aliasów przy nazwach kolumn. Przejście między obu składniami wymaga więc dodania / usunięcia odpowiednich aliasów. Jest to czynność czysto mechaniczna, jednak często o tym po prostu zapominamy. 4.3 Złączenia nierównościowe (ang. Theta Joins) Złączenia nierównościowe, zdecydowanie rzadziej stosowane w praktyce, niosą ze sobą niebezpieczeństwo istotnego obniżenia wydajności systemu. Cecha ta nie jest jednak widoczna dla niewprawnego programisty. Przykład 4 E.job_id, J.job_title, E.first_name ' ' E.last_name Name, J.min_salary '--' J.max_salary "Przedział", E.salary Employees E, Jobs J E.salary BETWEEN J.min_salary AND J.max_salary AND E.last_name LIKE 'Abel' ORDER BY E.last_name; E.job_id, J.job_title, E.first_name ' ' E.last_name Name, J.min_salary '--' J.max_salary "Przedział", E.salary Employees E INNER JOIN Jobs J ON (E.salary BETWEEN J.min_salary AND J.max_salary) E.last_name LIKE 'Abel' ORDER BY E.last_name; przykład pokazuje złączenie nierównościowe (ang. Theta Joins). Zdecydowanie rzadziej używane niż złączenia równościowe, w powyższym przykładzie wyświetlono listę pracowników oraz, na bazie tabeli Jobs, sprawdzono, czy zarobki poszczególnych pracowników mieszczą się w widełkach. Można przykładowo zauważyć, że pracownik o nazwisku Abel, pracujący na stanowisku Sales Representative zarabia kwotę , która to kwota mieści się w przedziale dla pięciu innych stanowisk, 233

10 J. Gramacki, A. Gramacki złączenie jest bardzo pracochłonne do wykonania. Wymaga najpierw utworzenia iloczynu kartezjańskiego a następnie wybraniu z niego wierszy, dla których zadany warunek jest spełniony: -- Wynik zapytania JOB_ID JOB_TITLE NAME Przedział SALARY SA_REP Finance Manager Ellen Abel ,00 SA_REP Accounting Manager Ellen Abel ,00 SA_REP Sales Representative Ellen Abel ,00 SA_REP Sales Manager Ellen Abel ,00 SA_REP Marketing Manager Ellen Abel ,00 SA_REP Purchasing Manager Ellen Abel , Złączenia wykluczające (ang. Antijoins) Zdarzają się sytuacje, w których intuicyjnie gorsza wersja zapytania jest / może być wydajnościowo lepsza w innej jego postaci. Właściwy wybór uzależniony jest od umiejętności dostrzegania takich przypadków w pisanych zapytaniach. Przykład 5 -- Antijoins E.job_id, E.first_name ' ' E.last_name Name, E.salary Employees E department_id NOT IN ( department_id Departments location_id BETWEEN 1700 AND 2700); -- Equijoins E.job_id, E.first_name ' ' E.last_name Name, E.salary Departments D, Employees E D.department_id=E.department_id AND D.location_ID NOT BETWEEN 1700 AND 2700; -- Antijoins Nie dotyczy -- Equijoins E.job_id, E.first_name ' ' E.last_name Name, E.salary Departments D INNER JOIN Employees E USING (department_id) D.location_ID NOT BETWEEN 1700 AND 2700; Plany wykonania -- Antijoins STATEMENT FILTER TABLE ACCESS FULL EMPLOYEES TABLE ACCESS BY INDEX ROWID DEPARTMENTS INDEX RANGE SCAN DEPT_LOCATION_IX -- Equijoins STATEMENT 234

11 CONCATENATION TABLE ACCESS BY INDEX ROWID EMPLOYEES NESTED LOOPS TABLE ACCESS BY INDEX ROWID DEPARTMENTS INDEX RANGE SCAN DEPT_LOCATION_IX INDEX RANGE SCAN EMP_DEPARTMENT_IX TABLE ACCESS BY INDEX ROWID EMPLOYEES NESTED LOOPS TABLE ACCESS BY INDEX ROWID DEPARTMENTS INDEX RANGE SCAN DEPT_LOCATION_IX INDEX RANGE SCAN EMP_DEPARTMENT_IX Złączenia wewnętrzne w bazach danych przykład pokazuje zapytanie, w którym interesuje nas BRAK zachodzenia danej relacji (złączenie Antijoins). Pokazano pracowników pracujących na wydziałach zlokalizowanych w wybranych lokalizacjach (poprzez negacje pozostałych), dla Antijoins występuje podzapytanie. Dyskusja nad użyciem składni ANSI jest wiec dla tego przykładu bezprzedmiotowa, ten sam wynik osiągnąć można stosując zwykłe złączenia równościowe dwóch tabel, plan wykonania zapytania Equijoins w stosunku do planu zapytania Antijoins będzie jednak bardziej złożony. W planie dla Antijoins występuje jednakże operacja TABLE ACCESS FULL. W konkurencyjnym planie wszędzie korzystamy z indeksów, decyzję, czy użyć złączenia Antijoins, czy zwykłego równościowego Equijoins powinna poprzedzić analiza planu zapytania pod kątem ewentualnych korzyści i/lub strat. 4.5 Iloczyn kartezjański (ang. Cartesian Product) Przykład 6 D.department_name, L.city, departments D, locations L; D.department_name, L.city departments D CROSS JOIN locations L; iloczyn kartezjański najczęściej pojawia się jako niezamierzony wynik (brak jakiegoś koniecznego złączenia). Nowa składnia wymaga jawnego wskazania, że intencją programisty był iloczyn kartezjański, ponieważ jednak tradycyjna składnia ciągle jest (i pewnie będzie) obsługiwana przez bazę Oracle, więc praktyczna użyteczność CROSS JOIN w sensie eliminacji błędów jest bardzo dyskusyjna. Porządkuje jedynie sprawę pod katem terminologicznym. 5 Wnioski W rozdziale pokazano, że z pozoru proste zagadnienia jakim są złączenia relacyjne, po uwzględnieniu wielu zagadnień szczegółowych, stają się podatne na błędy. Jeśli dodatkowo uwzględni się możliwość korzystania z nowej składni ANSI, ewentualnych problemów przybędzie. SQL nie zawsze jest w 100% odpowiednikiem składni dotychczasowej. Warto o tym zawsze pamiętać. Na wyniki zapytań ze złączeniami istotnie wpływać mogą również przyjęte założenia projektowe odzwierciedlone w modelu relacyjnym. 235

12 J. Gramacki, A. Gramacki Literatura 1. Oracle Database, Sample Schemas, 10g Release 1 (10.1), Part No. B Gennick J.: An Incremental Approach to Developing SQL Queries. Oracle Magazine, July/August 2000, Volume XIV, Issue 4 3. Czuprynski J.: Getting ANSI About Joins, dostępne na otn.oracle.com 4. Oracle Database SQL Reference 10g Release 1 (10.1) Part Number B Oracle Database SQL Reference 9i Release 2 (9.2) Part Number A Gramacki J., Gramacki A.: Połączenia - pułapki i nowe możliwości, Systemy informatyczne. Projektowanie, implementowanie, eksploatowanie - PLOUG : X Konferencja użytkowników i deweloperów ORACLE. Kościelisko, Polska, 2004, Warszawa, Stowarzyszenie Polskiej Grupy Użytkowników Systemu Oracle, 2004, strony

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

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

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

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

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

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

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

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

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

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

Wprowadzenie do projektowania i wykorzystania baz danych Relacje

Wprowadzenie do projektowania i wykorzystania baz danych Relacje Wprowadzenie do projektowania i wykorzystania baz danych Relacje Katarzyna Klessa Dygresja nt. operatorów SELECT 2^2 SELECT 2^30 SELECT 50^50 2 Dygresja nt. operatorów SELECT 2^30 --Bitwise exclusive OR

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

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

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

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 3 (Tworzenie bazy danych z użyciem UML, proste

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 3 (Tworzenie bazy danych z użyciem UML, proste

Bardziej szczegółowo

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Instytut Mechaniki i Inżynierii Obliczeniowej   fb.com/groups/bazydanychmt/ Instytut Mechaniki i Inżynierii Obliczeniowej www.imio.polsl.pl fb.com/imiopolsl @imiopolsl fb.com/groups/bazydanychmt/ Wydział Mechaniczny technologiczny Politechnika Śląska Laboratorium 3 (Tworzenie

Bardziej szczegółowo

PRZESTRZENNE BAZY DANYCH WYKŁAD 2

PRZESTRZENNE BAZY DANYCH WYKŁAD 2 PRZESTRZENNE BAZY DANYCH WYKŁAD 2 Baza danych to zbiór plików, które fizycznie przechowują dane oraz system, który nimi zarządza (DBMS, ang. Database Management System). Zadaniem DBMS jest prawidłowe przechowywanie

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

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

Technologie baz danych

Technologie baz danych Plan wykładu Technologie baz danych Wykład 6: Algebra relacji. SQL - cd Algebra relacji operacje teoriomnogościowe rzutowanie selekcja przemianowanie Małgorzata Krętowska Wydział Informatyki Politechnika

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

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

Marek Rakowski Zdanie SELECT wybieranie danych z wielu tabel Strona 1 z 6

Marek Rakowski Zdanie SELECT wybieranie danych z wielu tabel Strona 1 z 6 Marek Rakowski Zdanie SELECT wybieranie danych z wielu tabel Strona 1 z 6 Wybieranie danych z wielu tabel polega na użyciu więcej niż jednej tabeli w klauzuli FROM i, najczęściej, kolumn z więcej niż jednej

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

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

Algebra relacji. nazywamy każdy podzbiór iloczynu karteziańskiego D 1 D 2 D n.

Algebra relacji. nazywamy każdy podzbiór iloczynu karteziańskiego D 1 D 2 D n. Algebra relacji Definicja 1 (Relacja matematyczna). Relacją R między elementami zbioru D 1 D 2 D n, gdzie przypomnijmy D 1 D 2 D n = {(d 1, d 2,..., d n ) : d i D i, i = 1, 2,..., n}, nazywamy każdy podzbiór

Bardziej szczegółowo

Technologie baz danych

Technologie baz danych Plan wykładu Technologie baz danych Wykład 2: Relacyjny model danych - zależności funkcyjne. SQL - podstawy Definicja zależności funkcyjnych Reguły dotyczące zależności funkcyjnych Domknięcie zbioru atrybutów

Bardziej szczegółowo

Złączenia pułapki i nowe możliwości

Złączenia pułapki i nowe możliwości X Konferencja PLOUG Kościelisko Październik 2004 Złączenia pułapki i nowe możliwości Jarosław Gramacki, Artur Gramacki Uniwersytet Zielonogórski Instytut Informatyki i Elektroniki ul. Podgórna 50, 65-246,

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 1 Algebra relacyjnych baz danych jako podstawa języka SQL i jego implementacji w systemach baz danych Oracle Bazy danych. Wykład

Bardziej szczegółowo

Wykład 2. Relacyjny model danych

Wykład 2. Relacyjny model danych Wykład 2 Relacyjny model danych Wymagania stawiane modelowi danych Unikanie nadmiarowości danych (redundancji) jedna informacja powinna być wpisana do bazy danych tylko jeden raz Problem powtarzających

Bardziej szczegółowo

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL.

Bazy danych. Plan wykładu. Zależności funkcyjne. Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL. Plan wykładu Bazy danych Wykład 2: Relacyjny model danych - zależności funkcyjne. Podstawy SQL. Deficja zależności funkcyjnych Klucze relacji Reguły dotyczące zależności funkcyjnych Domknięcie zbioru atrybutów

Bardziej szczegółowo

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy)

opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje nazwy tabel lub widoków warunek (wybieranie wierszy) Zapytania SQL. Polecenie SELECT jest używane do pobierania danych z bazy danych (z tabel lub widoków). Struktura polecenia SELECT SELECT FROM WHERE opisuje nazwy kolumn, wyrażenia arytmetyczne, funkcje

Bardziej szczegółowo

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia?

D D L S Q L. Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L Co to jest DDL SQL i jakie s jego ą podstawowe polecenia? D D L S Q L - p o d s t a w y DDL SQL (Data Definition Language) Jest to zbiór instrukcji i definicji danych, którym posługujemy się

Bardziej szczegółowo

Zasady transformacji modelu DOZ do projektu tabel bazy danych

Zasady transformacji modelu DOZ do projektu tabel bazy danych Zasady transformacji modelu DOZ do projektu tabel bazy danych A. Obiekty proste B. Obiekty z podtypami C. Związki rozłączne GHJ 1 A. Projektowanie - obiekty proste TRASA # * numer POZYCJA o planowana godzina

Bardziej szczegółowo

Wprowadzenie do języka SQL

Wprowadzenie do języka SQL Wprowadzenie do języka SQL język dostępu do bazy danych grupy poleceń języka: DQL (ang( ang.. Data Query Language) DML (ang( ang.. Data Manipulation Language) DDL (ang( ang.. Data Definition Language)

Bardziej szczegółowo

Wykład XII. optymalizacja w relacyjnych bazach danych

Wykład XII. optymalizacja w relacyjnych bazach danych Optymalizacja wyznaczenie spośród dopuszczalnych rozwiązań danego problemu, rozwiązania najlepszego ze względu na przyjęte kryterium jakości ( np. koszt, zysk, niezawodność ) optymalizacja w relacyjnych

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

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

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

RBD Relacyjne Bazy Danych

RBD Relacyjne Bazy Danych Wykład 7 RBD Relacyjne Bazy Danych Bazy Danych - A. Dawid 2011 1 Selekcja σ C (R) W wyniku zastosowania operatora selekcji do relacji R powstaje nowa relacja T do której należy pewien podzbiór krotek relacji

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

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

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę Podzapytania Rozdział 5 Podzapytania podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, klauzula WITH, operatory ANY, ALL i EXISTS, zapytania hierarchiczne Podzapytanie jest poleceniem

Bardziej szczegółowo

Rozpatrzymy bardzo uproszczoną bazę danych o schemacie

Rozpatrzymy bardzo uproszczoną bazę danych o schemacie Wykład 6 Algebraiczne podstawy implementacji strukturalnego języka zapytań (SQL) w systemach baz danych Oracle zapytania w języku algebry relacyjnych baz danych i ich odpowiedniki w SQL Rozpatrzymy bardzo

Bardziej szczegółowo

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2)

Laboratorium nr 8. Temat: Podstawy języka zapytań SQL (część 2) Laboratorium nr 8 Temat: Podstawy języka zapytań SQL (część 2) PLAN LABORATORIUM: 1. Sortowanie. 2. Warunek WHERE 3. Eliminacja powtórzeń - DISTINCT. 4. WyraŜenia: BETWEEN...AND, IN, LIKE, IS NULL. 5.

Bardziej szczegółowo

BAZY DANYCH LABORATORIUM. Studia niestacjonarne I stopnia

BAZY DANYCH LABORATORIUM. Studia niestacjonarne I stopnia BAZY DANYCH LABORATORIUM Studia niestacjonarne I stopnia Gdańsk, 2011 1. Cel zajęć Celem zajęć laboratoryjnych jest wyrobienie praktycznej umiejętności tworzenia modelu logicznego danych a nastepnie implementacji

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

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

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

Temat : SBQL 1 obiektowy język zapytań.

Temat : SBQL 1 obiektowy język zapytań. Laboratorium Języki i środowiska przetwarzania danych rozproszonych Temat : SBQL 1 obiektowy język zapytań. Historia zmian Data Wersja Autor Opis zmian 23.4.2012 1.0 Tomasz Kowalski Utworzenie dokumentu

Bardziej szczegółowo

PRZEWODNIK PO PRZEDMIOCIE

PRZEWODNIK PO PRZEDMIOCIE Nazwa przedmiotu: Bazy danych Database Kierunek: Rodzaj przedmiotu: obieralny Rodzaj zajęć: wykład, laboratorium Matematyka Poziom kwalifikacji: I stopnia Liczba godzin/tydzień: 2W, 2L Semestr: III Liczba

Bardziej szczegółowo

Język SQL. Rozdział 2. Proste zapytania

Język SQL. Rozdział 2. Proste zapytania Język SQL. Rozdział 2. Proste zapytania Polecenie SELECT, klauzula WHERE, operatory SQL, klauzula ORDER BY. 1 Wprowadzenie do języka SQL Język dostępu do bazy danych. Język deklaratywny, zorientowany na

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

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę

Podzapytania. Rozdział 5. Podzapytania. Podzapytania wyznaczające wiele krotek (1) Podzapytania wyznaczające jedną krotkę Podzapytania Rozdział 5 Podzapytania podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, klauzula WITH, operatory ANY, ALL i EXISTS, zapytania hierarchiczne Podzapytanie jest poleceniem

Bardziej szczegółowo

Optymalizacja poleceń SQL Metody dostępu do danych

Optymalizacja poleceń SQL Metody dostępu do danych Optymalizacja poleceń SQL Metody dostępu do danych 1 Metody dostępu do danych Określają, w jaki sposób dane polecenia SQL są odczytywane z miejsca ich fizycznej lokalizacji. Dostęp do tabeli: pełne przeglądnięcie,

Bardziej szczegółowo

Alicja Marszałek Różne rodzaje baz danych

Alicja Marszałek Różne rodzaje baz danych Alicja Marszałek Różne rodzaje baz danych Rodzaje baz danych Bazy danych można podzielić wg struktur organizacji danych, których używają. Można podzielić je na: Bazy proste Bazy złożone Bazy proste Bazy

Bardziej szczegółowo

SQL SERVER 2012 i nie tylko:

SQL SERVER 2012 i nie tylko: SQL SERVER 2012 i nie tylko: Wstęp do planów zapytań Cezary Ołtuszyk coltuszyk.wordpress.com Kilka słów o mnie Starszy Administrator Baz Danych w firmie BEST S.A. (Bazy danych > 1TB) Konsultant z zakresu

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

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

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

Indeksowanie w bazach danych

Indeksowanie w bazach danych w bazach Katedra Informatyki Stosowanej AGH 5grudnia2013 Outline 1 2 3 4 Czym jest indeks? Indeks to struktura, która ma przyspieszyć wyszukiwanie. Indeks definiowany jest dla atrybutów, które nazywamy

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

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

Złaczenia tablic: FROM, WHERE, JOIN

Złaczenia tablic: FROM, WHERE, JOIN JOIN Łączenie tablic 1 Bazy Danych Wykład p.t. Złaczenia tablic: FROM, WHERE, JOIN Antoni Ligęza ligeza@agh.edu.pl http://galaxy.uci.agh.edu.pl/~ligeza Wykorzystano materiały: http: //www.postgresql.org/docs/8.3/interactive/index.html

Bardziej szczegółowo

PHP: bazy danych, SQL, AJAX i JSON

PHP: bazy danych, SQL, AJAX i JSON 1 PHP: bazy danych, SQL, AJAX i JSON SYSTEMY SIECIOWE Michał Simiński 2 Bazy danych Co to jest MySQL? Jak się połączyć z bazą danych MySQL? Podstawowe operacje na bazie danych Kilka dodatkowych operacji

Bardziej szczegółowo

Bazy danych. Dr inż. Paweł Kasprowski

Bazy danych. Dr inż. Paweł Kasprowski Plan wykładu Bazy danych Podstawy relacyjnego modelu danych Dr inż. Paweł Kasprowski pawel@kasprowski.pl Relacyjne bazy danych Język SQL Zapytania SQL (polecenie select) Bezpieczeństwo danych Integralność

Bardziej szczegółowo

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING

Laboratorium nr 5. Temat: Funkcje agregujące, klauzule GROUP BY, HAVING Laboratorium nr 5 Temat: Funkcje agregujące, klauzule GROUP BY, HAVING Celem ćwiczenia jest zaprezentowanie zagadnień dotyczących stosowania w zapytaniach języka SQL predefiniowanych funkcji agregujących.

Bardziej szczegółowo

SIECI KOMPUTEROWE I BAZY DANYCH

SIECI KOMPUTEROWE I BAZY DANYCH KATEDRA MECHANIKI I ROBOTYKI STOSOWANEJ WYDZIAŁ BUDOWY MASZYN I LOTNICTWA, POLITECHNIKA RZESZOWSKA SIECI KOMPUTEROWE I BAZY DANYCH Laboratorium DB2: TEMAT: Relacyjne bazy danych Cz. I, II Cel laboratorium

Bardziej szczegółowo

Cel przedmiotu. Wymagania wstępne w zakresie wiedzy, umiejętności i innych kompetencji 1 Język angielski 2 Inżynieria oprogramowania

Cel przedmiotu. Wymagania wstępne w zakresie wiedzy, umiejętności i innych kompetencji 1 Język angielski 2 Inżynieria oprogramowania Przedmiot: Bazy danych Rok: III Semestr: V Rodzaj zajęć i liczba godzin: Studia stacjonarne Studia niestacjonarne Wykład 30 21 Ćwiczenia Laboratorium 30 21 Projekt Liczba punktów ECTS: 4 C1 C2 C3 Cel przedmiotu

Bardziej szczegółowo

Bazy danych Ćwiczenia projektowe

Bazy danych Ćwiczenia projektowe Bazy danych Ćwiczenia projektowe Przygotował: Piotr Hajder Katedra Informatyki Stosowanej i Modelowania Wydział Inżynierii Metali i Informatyki Przemysłowej, AGH Agenda 01. Typy danych 02. Polecenia DDL

Bardziej szczegółowo

Wykład 3 2014-04-25 12:45 BD-1 W_3

Wykład 3 2014-04-25 12:45 BD-1 W_3 Wykład 3 SQL - język operacji na bazach danych Schemat przykładowej bazy danych Uczelnia Skrypt SQL - utworzenie bazy Uczelnia Polecenia selekcji i projekcji Interakcyjny dostęp do bazy danych 2014-04-25

Bardziej szczegółowo

Bazy danych - wykład wstępny

Bazy danych - wykład wstępny Bazy danych - wykład wstępny Wykład: baza danych, modele, hierarchiczny, sieciowy, relacyjny, obiektowy, schemat logiczny, tabela, kwerenda, SQL, rekord, krotka, pole, atrybut, klucz podstawowy, relacja,

Bardziej szczegółowo

Podstawowym zadaniem, które realizuje

Podstawowym zadaniem, które realizuje Funkcje wyszukiwania i adresu INDEKS Mariusz Jankowski autor strony internetowej poświęconej Excelowi i programowaniu w VBA; Bogdan Gilarski właściciel firmy szkoleniowej Perfect And Practical; Pytania:

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

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

CREATE DATABASE ksiegarnia_internetowa DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci; Zestaw ćwiczeń1 Dzięki DDL (Data Definition Language) można operować na strukturach, w których dane są przechowywane czyli np. dodawać, zmieniać i kasować tabele lub bazy. Najważniejsze polecenia tej grupy

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

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

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

Administracja i programowanie pod Microsoft SQL Server 2000

Administracja i programowanie pod Microsoft SQL Server 2000 Administracja i programowanie pod Paweł Rajba pawel@ii.uni.wroc.pl http://www.kursy24.eu/ Zawartość modułu 5 Kursory w SQL Serverze Wprowadzenie Modele kursorów Używanie kursorów Rodzaje kursorów Praca

Bardziej szczegółowo

Laboratorium nr 10. Temat: Połączenia relacji

Laboratorium nr 10. Temat: Połączenia relacji Laboratorium nr 10 Temat: Połączenia relacji Dotychczas omawiane zapytania zawsze dotyczyły jednej relacji. MoŜliwe jest jednak pisanie zapytań, które odczytują i łączą dane z wielu relacji. Celem tego

Bardziej szczegółowo

Dane wejściowe. Oracle Designer Generowanie bazy danych. Wynik. Przebieg procesu

Dane wejściowe. Oracle Designer Generowanie bazy danych. Wynik. Przebieg procesu Dane wejściowe Oracle Designer Generowanie bazy danych Diagramy związków encji, a w szczególności: definicje encji wraz z atrybutami definicje związków między encjami definicje dziedzin atrybutów encji

Bardziej szczegółowo

SIECI KOMPUTEROWE I BAZY DANYCH

SIECI KOMPUTEROWE I BAZY DANYCH KATEDRA MECHANIKI I ROBOTYKI STOSOWANEJ WYDZIAŁ BUDOWY MASZYN I LOTNICTWA, POLITECHNIKA RZESZOWSKA SIECI KOMPUTEROWE I BAZY DANYCH Laboratorium DB2: TEMAT: Relacyjne bazy danych Cz. I, II Cel laboratorium

Bardziej szczegółowo

Bazy danych Wykład zerowy. P. F. Góra

Bazy danych Wykład zerowy. P. F. Góra Bazy danych Wykład zerowy P. F. Góra http://th-www.if.uj.edu.pl/zfs/gora/ 2012 Patron? Św. Izydor z Sewilli (VI wiek), biskup, patron Internetu (sic!), stworzył pierwszy katalog Copyright c 2011-12 P.

Bardziej szczegółowo

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli

Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa. Studia Podyplomowe dla Nauczycieli Projekt jest finansowany ze środków Unii Europejskiej, Europejskiego Funduszu Społecznego i budŝetu państwa Studia Podyplomowe dla Nauczycieli Bazy danych SQL Języki baz danych Interfejs DBMS składa się

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

Szkolenie autoryzowane. MS Tworzenie zapytań do Microsoft SQL Server Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje

Szkolenie autoryzowane. MS Tworzenie zapytań do Microsoft SQL Server Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje Szkolenie autoryzowane MS 10774 Tworzenie zapytań do Microsoft SQL Server 2012 Strona szkolenia Terminy szkolenia Rejestracja na szkolenie Promocje Opis szkolenia Uwaga! Szkolenie wycofane z oferty. Zapraszamy

Bardziej szczegółowo

1 Wstęp do modelu relacyjnego

1 Wstęp do modelu relacyjnego Plan wykładu Model relacyjny Obiekty relacyjne Integralność danych relacyjnych Algebra relacyjna 1 Wstęp do modelu relacyjnego Od tego się zaczęło... E. F. Codd, A Relational Model of Data for Large Shared

Bardziej szczegółowo

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota

3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota Laboratorium nr 3 1 Bazy Danych Instrukcja laboratoryjna Temat: Wprowadzenie do języka SQL, tworzenie, modyfikacja, wypełnianie tabel 3 Przygotowali: mgr inż. Barbara Łukawska, mgr inż. Maciej Lasota 1)

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

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery

XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery http://xqtav.sourceforge.net XQTav - reprezentacja diagramów przepływu prac w formacie SCUFL przy pomocy XQuery dr hab. Jerzy Tyszkiewicz dr Andrzej Kierzek mgr Jacek Sroka Grzegorz Kaczor praca mgr pod

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

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

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

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Bazy danych Algebra relacji Wykład dla studentów matematyki

Bazy danych Algebra relacji Wykład dla studentów matematyki Bazy danych Algebra relacji Wykład dla studentów matematyki 8 marca 2015 Algebra relacji Model teoretyczny do opisywania semantyki relacyjnych baz danych, zaproponowany przez T. Codda (twórcę koncepcji

Bardziej szczegółowo

Wprowadzenie do baz danych

Wprowadzenie do baz danych Wprowadzenie do baz danych Bazy danych stanowią obecnie jedno z ważniejszych zastosowań komputerów. Podstawowe zalety komputerowej bazy to przede wszystkim szybkość przetwarzania danych, ilość dostępnych

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

Uzupełnij pola tabeli zgodnie z przykładem poniżej,

Uzupełnij pola tabeli zgodnie z przykładem poniżej, 1. Wykonaj bazę danych biblioteki szkolnej, Otwórz MS Access a następnie z menu plik wybierz przycisk nowy, w oknie nowy plik wybieramy pusta baza danych nadaj jej nazwę Biblioteka i wybierz miejsce w

Bardziej szczegółowo