Oracle SQL: Lista 1 – funkcje, podzapytania 1. „Stworzyć” nazwy

Transkrypt

Oracle SQL: Lista 1 – funkcje, podzapytania 1. „Stworzyć” nazwy
Oracle SQL: Lista 1 – funkcje, podzapytania
1. „Stworzyć” nazwy departamentów zawierające kod kraju, podkreślnik oraz identyfikator
dopełniony zerami do długości 6 znaków (LPad),
2. To samo zrobić za pomocą funkcji SUBSTR – do identyfikatora dodać stały napis ‘000000’ i
skopiować ostatnie 6 znaków.
3. Sprawdzić długość najdłuższego nazwiska w EMPLOYEES, następnie wyświetlić listę nazwisk i
imion w postaci „stabularyzowanej”: najpierw nazwisko + odpowiednia ilość spacji (zgodnie z
wyznaczoną
wcześniej
wartością
+
1),
potem
imię
UWAGA: aby zobaczyć „właściwy” wynik w SQLTools, należy kliknąć prawym klawiszem
myszki na tabeli z wynikami zapytania i wykonać komendę Open in Editor (tabela z wynikami
używa czcionek o zmiennej szerokości, edytor używa czcionek o stałej szerokości).
4. Używając funkcji TRANSLATE napisać komendę SELECT (na bazie pseudoperspektywy DUAL),
która usunie z napisu polskie literki (wstawi odpowiedniki bez ogonków).
5. Napisać komendę, która na podstawie pola STREET_ADDRES tablicy LOCATIONS stworzy
nazwy ulic bez dodatkowych oznaczeń (usuwamy cyfry, spacje myślnik z początku oraz cyfry,
spację, przecinek i kropkę z końca) - LTrim, RTrim.
6. Napisać komendę, która dla każdego pracownika zbuduje napis w postaci:
imię nazwisko (imię_manager nazwisko_manager) – w przypadku braku managera nawiasy i
końcowe spacje mają zostać usunięte (zastosować otwarte lewostronnie złączenie tablicy
EMPLOYEES samej ze sobą i funkcję REPLACE).
7. Napisać komendę SELECT, która dla każdego pracownika wyświetli datę wypłaty premii w
związku z upłynięciem kolejnego roku zatrudnienia w bieżącym roku kalendarzowym – za datę
wypłaty premii przyjmujemy ostatni dzień miesiąca w którym wypada rocznica daty zatrudnienia
(funkcje: to_char, to_number, to_date, SYSDATE, Last_Day, Add_Months)
8. Do poprzedniego zadania: wykorzystać zapytanie jako subselect i, korzystając z konstrukcji
CASE, wyświetlić daty wypłaty premii z ciągu najbliższego roku (jak data wypłaty mniejsza od
bieżącej, to dodaj 1 rok = 12 miesięcy).
9. Do poprzedniego zadania: wykorzystać zapytanie jako subselect, i wyświetlić wypłaty na
najbliższe pół roku (dla bieżącej daty za pomocą Last_Day znaleźć ostatni dzień miesiąca a potem
dodać do niego 6 miesięcy - Add_Months).
10. Zbudować zapytanie, które dla każdego pracownika wyświetli nazwisko, imię i datę zatrudnienia
w formacie: Poniedziałek, 17 marca 201 4.r (proszę zwrócić uwagę na odpowiednia wielkość liter
w nazwie dnia tygodnia) – zastosować To_Char (wielokrotnie), łączenie napisów i odpowiednie
formatowanie (oraz InitCap dla nazwy dnia i LTrim/RTrim – dzień, miesiąc). Proszę zwrócić
uwagę na fakt, że zarówno dzień jak i miesiąc są dopełniane spacjami.
11. To samo co w poprzednim zadaniu zrobić za pomocą konstrukcji CASE (dla dni tygodnia i
miesięcy) – nazwy miesięcy w dopełniaczu (tylko CASE i To_Char/To_Number)
12. jak w zadaniu 10 ale miesiące wyświetlić w postaci liczb rzymskich. Podobnie jak w zadaniu 10 –
spacje po nazwie miesiąca.
13. obliczyć ile dni pracował pierwszym miesiącu swojej pracy każdy z pracowników oraz
wyznaczyć ich pensję za pierwszy miesiąc (z dokładnością do dwóch miejsc po przecinku)
proporcjonalnie do czasu zatrudnienia (np. pracownik zatrudniony 13 marca – powinien dostać
pensję w wysokości (31-12)/31). Proszę nie opierać się o operacje arytmetyczne na datach. Można
wykorzystać zapytania z podzapytań (To_Char, To_Number, Last_Day, Round).

Podobne dokumenty