Bazy danych Złączenia zewnętrzne
Transkrypt
Bazy danych Złączenia zewnętrzne
Małgorzata Krętowska Politechnika Białostocka Wydział Informatyki Bazy danych Pracownia specjalistyczna nr 5 Złączenia zewnętrzne. Zapytania złożone. Zadania 1. Dla każdego departamentu podać liczbę pracujących tam osób (wypisać wszystkie departamenty). 2. Wypisać nazwiska wszystkich pracowników (nawet tych bez kierowników) wraz z danymi ich kierowników (id, nazwisko). Wyniki powinny być posortowane względem nazwiska kierownika rosnąco, a następnie względem nazwiska pracownika malejąco. 3. Podać jaką kwotę wydano na realizację każdego zapisanego w bazie projektu (nazwa projektu). 4. Dla każdego pracownika w bazie (nazwisko) podać ile zarobił przy realizacji projektów. 5. Wyznaczyć wszystkich tych pracowników, którzy pracują na tym samym stanowisku co p. Nazwisko3. 6. Podać listę pracowników, którzy zarabiają więcej niż p. Nazwisko4 mniej niż p. Nazwisko7. 7. Podać nazwisko i identyfikator najdłużej pracującego pracownika. 8. Podać listę pracowników zatrudnionych później niż p. Nazwisko3. 9. Pracownicy zarabiający mniej niż średnia wartość pensji. (+ z tego samego departamentu co p.Nazwisko5) 10. Podać nazwiska tych pracowników, którzy zarabiają więcej niż p.Nazwisko5. 11. Dla każdego departamentu wyznaczyć najlepiej zarabiającego pracownika. 12. Podać departament, w którym pracuje najmniej pracowników. Pomoc Złączenia zewnętrzne Złączenie lewe - LEFT OUTER JOIN W złączeniu zewnętrznym lewym zwracane są wszystkie wiersze występujące w tabeli z lewej strony, a wiersze z prawej tabeli, które nie zostały znalezione, wypełnione są wartościami null. SELECT * FROM Tab1 LEFT OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID; lub SELECT tab1.*,tab2.Field1 FROM tab1, tab2 WHERE tab1.ID=tab2.ID(+); Złączenie prawe - RIGHT OUTER JOIN W złączeniu zewnętrznym prawym zwracane są wszystkie wiersze występujące w tabeli z prawej strony, a wiersze z lewej tabeli, które nie zostały znalezione, wypełnione są wartościami null. SELECT * FROM Tab1 RIGHT OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID; lub SELECT tab1.*,tab2.Field1 FROM tab1, tab2 WHERE tab1.ID(+)=tab2.ID; Złączenie pełne - FULL OUTER JOIN W rezultatach zapytania SQL obecne są wiersze złączone wewnętrznie, rozszerzone o rekordy nie zwrócone z obydwu tabel, wypełnione nullami SELECT * FROM Tab1 FULL OUTER JOIN Tab2 ON Tab1.ID = Tab2.ID ; Zapytania złożone Podzapytanie - polecenie SELECT zagnieżdżone w innym poleceniu SELECT. Umożliwia konstruowanie zapytania odwołującego się do wartości wybranych przez inne polecenie SELECT. SELECT kolumna1, kolumna2,... FROM tabela WHERE kolumna = (SELECT kolumna FROM tabela WHERE warunek) Przebieg wykonania zapytania: • realizacja zapytania wewnętrznego • na podstawie wartości zwróconej przez blok wewnętrzny przetwarzany jest blok główny zapytania W przypadku zapytań zwracających jeden wiersz mogą być stosowane zwykłe operatory porównania: =, >, <=,... Porównanie kilku wartości WHERE (kolumna1, kolumna 2...) = (SELECT kol1, kol2...) • kolumny w bloku zewnętrznym powinny być ujęte w nawiasy i oddzielone przecinkami • powinna być zgodność co do liczby i typu kolumn wybieranych w bloku wewnętrznym i kolumn bloku zewnętrznego porównywanych z nimi Operatory ANY i ALL WHERE kol1 >ANY (select kol ….) • Operatory ANY i ALL można stosować w podzapytaniach zwracających więcej niż jeden wiersz. Wykorzystuje się je w klauzulach WHERE I HAVING łącznie z operatorami porównywania (=; !=; <; >; <=; >=) • Operator ANY powoduje akceptację (spełnienie warunku) po stwierdzeniu zgodności wyrażenia z którąkolwiek z wartości zwracanych przez podzapytanie • Operator ALL służy do porównania z wszystkimi wartościami zwracanymi przez podzapytanie • Przed operatorami ANY i ALL można stosować zaprzeczenie – NOT