SZKOLENIE SQL DLA EKSPERTÓW CZYLI, CZY ZNASZ SQLA?
CO ROZUMIEMY PRZEZ POZIOM EKSPERCKI? OTWARTA FORMUŁA Na szkoleniu nie przewidujemy sztywnej agendy. Rozwiązujemy każdy problem, który przyniosą uczestnicy. Definiujemy jedynie obszary wiedzy, w których się poruszamy. ZESTAW TRUDNYCH ZADAŃ Przygotowujemy dużą dawkę wysokowydajnych rozwiązań, których poziom trudności wykracza poza powszechnie dostępne źródła wiedzy. Przykład prezentujemy w teście 9 przykładów. KONFRONTACJA DOŚWIADCZEŃ Chcemy porównać problemy z jakimi deweloperzy i administratorzy zderzają się na swoich środowiskach produkcyjnych i zaproponować optymalne rozwiązania.
TEST 9 PRZYKŁADÓW. SPRAWDŹ CZY ZNASZ SQL A. Wprowadzenie Często słyszymy stwierdzenie: problemy wydajnościowe biorą z ze zbyt słabych serwerów, przeznaczonych do hostowania Nie jest to prawdą. Problemy wydajnościowe biorą się ze złych zapytań. Ze złych zapytań i nadmiernego programowania. Jak można programować nadmiernie? To proste - programowanie powinno zacząć się tam, gdzie kończy się moc języka zapytań. Czy wiesz gdzie kończy się ta moc? Sprawdź swoją wiedzę! Schemat HR. Szkoleniowy schemat Oracle'a dostępny dla każdej wersji serwera. Wszystkiego 215 wierszy w 7 tabelkach. Nie da się wymyślić tu żadnego trudnego zadania. Z pewnością nic, co wymagałoby więcej niż jednego... góra dwóch podzapytań. Prawda?
TEST 9 PRZYKŁADÓW. SPRAWDŹ CZY ZNASZ SQL A. Część 1 z 3. Rozgrzewka. 1 Znajdź 2 najlepiej zarabiających pracowników w każdym departamencie. Dopuszcza się maksymalnie 1 podzapytanie. 2 Znajdź pracowników zatrudnionych w roku, w którym było najwięcej zatrudnień. Ale tak, żebym w razie kaprysu mógł znaleźć takich z roku, w którym było najmniej zatrudnień. Albo z roku drugiego w kolejności pod względem zatrudnień. Nieskalowalne zapytania potrafią dać się we znaki podczas kastomizacji systemu dla Klienta zwłaszcza w module raportowym. (Maks 1 podzapytanie) 3 Dla wszystkich departamentów wyświetl nazwę departamentu oraz identyfikatory wszystkich pracowników w nim pracujących - identyfikatory powinny być oddzielone znakiem #.
TEST 9 PRZYKŁADÓW. SPRAWDŹ CZY ZNASZ SQL A. Część 2 z 3. Zadania właściwe. 4 Częstym problemem nadmiernych twardych parsowań są dynamiczne zapytania, zwłaszcza takie, dla których trzeba dostawić do IN dynamiczną listę wartości. Czyli w zależności od sytuacji zbudować zapytanie SELECT cośtam FROM tabela WHERE filtr IN (10,20,30) a potem SELECT cośtam FROM tabela WHERE filtr IN (10,30) a potem SELECT cośtam FROM tabela WHERE filtr IN (40,50,60,70,80)... Wszystko w zależności od tego co zostanie przekazane wyżej z aplikacji. Zdefiniujcie tak zapytanie, żeby można było posłużyć się w tym przypadku tylko jedną zmienną wiązaną. Żeby po przekazaniu stringa w postaci '10,20,30' nie było konieczności budowania dynamicznego SQL'a. (Aha, jak się uprzeć to da się to zrobić bez użycia nadmiernego programowania w PL/SQL). 5 Chciałbym zatrudnić w departamencie IT 5 nowych specjalistów w przeciągu najbliższego (niedoprecyzowanego) czasu. Nie chcę ich zatrudniać na raz ale kolejno... w jakichś odstępach (bliżej nie doprecyzowanych). Zabawa polega na tym, że każdemu następnemu będę proponował równowartość 80% bieżącej średniej pensji w departamencie. Czyli każdy następny będzie dostawał coraz mniej. Zapytanie ma pokazywać jak kolejno będą się zmieniały pensje nowo zatrudnianych ludzi i jak będą rosły wydatki na pensje pracowników. Rozwiązanie tego problemu nie powinno pociągnąć za sobą nadmiernego ruchu I/O czy zmian kontekstów, dlatego postaraj się rozwiązać problem bez użycia poleceń DML i pętli kursorowych w PL/SQL idealny byłby sam SQL w postaci jednego zapytania.
TEST 9 PRZYKŁADÓW. SPRAWDŹ CZY ZNASZ SQL A. Część 3 z 3. Problemy produkcyjne. 6 Kiedyś na szkoleniu kursant miał ciekawy problem związany ze swoją produkcją. Miał w dosyć ciekawy sposób zdefiniowaną hierarchię na tabeli - w kolumnie odpowiedzialnej za kategorie i podkategorie były... litery alfabetu. Wyglądało to na zasadzie - A AA AB AC AAB AAC AAD ABA ABC AD B BA BD BAD... i tak dalej... Zbudujcie tabelkę z takimi wartościami a następnie zapytanie hierarchiczne, które ułoży z tego drzewko. 7 8 9 W pewnej firmie był dosyć ciekawy problem raportowy. Była tabelka z kolumnami: id_pracownika, data_podwyzki, procent_podwyzki. Dla każdego pracownika była znana jego pierwsza pensja - wszystkie podwyżki były zaś zdefiniowane w tabeli, reprezentowanej przez wspomniane przeze mnie kolumny. Zadanie polegało na uzupełnieniu tej tabeli kolumną pensja, w której wyrażone byłyby wartości pensji po kolejnych podwyżkach. Rozwiąż problem jednym zapytaniem. W firmie ubezpieczeniowej był system, który stał na bazie Oracle. W bazie Oracle była tabelka - id_konta, ilosc_subkont. Dla każdego konta trzeba było wygenerować żądaną ilość subkont o pewnej wyrafinowanej formie nazewniczej. Na potrzeby ćwiczenia przyjmijmy, że ta wyrafinowana forma to ID_KONTA_GLOWNEGO.KOLEJNY_NUMER_SUBKONTA. Uwaga na zmiany kontekstów i niepotrzebne operacje DML. Da się to zrobić jednym zapytaniem SQL. W library cache zlokalizuj zapytania o takich samych planach wykonania ale różnych treściach czyli takie, które uległy zbędnym twardym parsowaniom.
CO DALEJ? TAK CZY UDAŁO CI SIĘ ROZWIĄZAĆ PRZYKŁADOWE ZADANIA? NIE W TEMACIE SQLA PRAWDOPODOBNIE NIE MOŻEMY CI POMÓC ZAPRASZAMY NA SZKOLENIE. NAJBLIŻSZE: 18 20 LUTEGO W POZNANIU
INFORMACJE RAMOWE Termin: 18 20 lutego 2013 Czas trwania: 3 dni Cena netto: 1900 zł/os. Prowadzący: Kamil Stawiarski Liczebność grupy: do 10 osób
ZAPISZ SIĘ ul. Piątkowska 161 60-650 Poznań Kamila Marciniak Tel: 61 661 10 89 E-mail: kamila.marciniak@itschool.pl www.itschool.pl