Funkcje. Rozdział 3. Funkcje. Funkcje znakowe (1) Funkcje wierszowe

Podobne dokumenty
Funkcje. Rozdział 3a Funkcje wierszowe. Funkcje znakowe (1) Funkcje wierszowe

Język SQL. Rozdział 3. Funkcje wierszowe

Język SQL. Rozdział 3. Zaawansowana selekcja danych

Język SQL. Rozdział 4. Funkcje grupowe Funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING.

SQL do zaawansowanych analiz danych część 1.

Klasyczna Analiza Danych

PL/SQL. Funkcje wbudowane

Ćwiczenie 3 funkcje agregujące

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

Język SQL. Rozdział 6. Podzapytania Podzapytania proste i skorelowane, podzapytania w klauzuli SELECT i FROM, operatory ANY, ALL i EXISTS.

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

Język SQL. Rozdział 2. Proste zapytania

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

Laboratorium Bazy danych SQL 3 1

Ćwiczenie 2 funkcje wierszowe

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

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

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

Przydatne sztuczki - sql. Na przykładzie postgres a.

Przestrzenne bazy danych Podstawy języka SQL

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

Podstawy SQL. 1. Wyświetl całość informacji z relacji ZESPOLY. 2. Wyświetl całość informacji z relacji PRACOWNICY

Rozdział 14 Funkcje analityczne

2. Język SQL SQL jest językiem deklaratywnym (Charakterystyczną cechą języków

Język SQL. Rozdział 7. Zaawansowane mechanizmy w zapytaniach

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

osiągnął długość podaną jako drugi parametr. Jeśli wynik jest dłuższy niż zadeklarowana długość, zostaje ucięty z prawej strony.

Język SQL. Rozdział 9. Język definiowania danych DDL, cześć 1. Tworzenie relacji, typy danych, wartości domyślne atrybutów, słownik bazy danych.

- język zapytań służący do zapisywania wyrażeń relacji, modyfikacji relacji, tworzenia relacji

Autor: Joanna Karwowska

Język PL/SQL. Rozdział 6. Procedury wyzwalane

Widok Connections po utworzeniu połączenia. Obszar roboczy

Wprowadzenie do języka SQL

Systemy GIS Tworzenie zapytań w bazach danych

BAZY DANYCH JĘZYK ZAPYTAŃ BAZ DANYCH SQL. Microsoft Access. Adrian Horzyk. Akademia Górniczo-Hutnicza

Autor: Joanna Karwowska

Wykład 8 Implementacja języka SQL w systemach baz danych Oracle specyficzne konstrukcje i funkcje Oracle SQL, funkcje numeryczne, znakowe, daty i

Procedury wyzwalane. Rozdział 13. Procedury wyzwalane. Cele stosowania procedur wyzwalanych. Definiowanie procedury wyzwalanej DML

Bazy danych. Andrzej Łachwa, UJ, /14

TECHNOLOGIE BAZ DANYCH

a) Polecenie: Wyświetl wszystkie rekordy z tabeli Pracownicy (wszystkie atrybuty)

Bazy danych SQL Server 2005

Ćwiczenie zapytań języka bazy danych PostgreSQL

Administracja i programowanie pod Microsoft SQL Server 2000

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

PL/SQL. Część 1 Oracle SQL. Piotr Medoń

Bazy Danych i Usługi Sieciowe

SQL praca z tabelami 4. Wykład 7

Wybór wszystkich danych: SELECT * FROM employee Wybór określonych kolumn lub wyrażeń: SELECT first_name, last_name, salary FROM employee

SQL (ang. Structured Query Language)

Zagadnienia podstawowe

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

Bazy danych - Materiały do laboratoriów IV

KOLEKCJE - to typy masowe,zawierające pewną liczbę jednorodnych elementów

Bazy danych. Plan wykładu. Dekompozycja relacji. Anomalie. Wykład 5: Projektowanie relacyjnych schematów baz danych. SQL - funkcje grupujce

Współczesne systemy baz danych

Procedury wyzwalane. (c) Instytut Informatyki Politechniki Poznańskiej 1

Optymalizacja poleceń SQL Metody dostępu do danych

Ćwiczenie 5 podzapytania

Wymagania: Konstrukcja prostych zapytań w języku SQL, umiejętność wykorzystania funkcji wierszowych i agregujących.

Relacyjne bazy danych. Podstawy SQL

Perspektywy Stosowanie perspektyw, tworzenie perspektyw prostych i złożonych, perspektywy modyfikowalne i niemodyfikowalne, perspektywy wbudowane.

Współczesne systemy baz danych

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

Podstawowe zapytania SELECT (na jednej tabeli)

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

Bazy danych 7/15. Andrzej Łachwa, UJ,

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

Bazy danych 2. Wykład 4 Structured Query Language (SQL)

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Ref. 7 - Język SQL - polecenia DDL i DML

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

Typy Oracle atrybutów relacji Typ NUMBER (1)

Typy Oracle atrybutów relacji Typ NUMBER (1)

Ćwiczenie 6 - DML. Tworzenie, modyfikacja i usuwanie krotek. Podstawy poleceń COMMIT i ROLLBACK. Ćwiczenie 6 DML. Wymagania: Bazy Danych

Ściągawka z funkcji i właściwości systemowych VBA. Opis działania i parametrów. Nazwa funkcji. Składnia zwracanej wartości

Zajęcia 2 podstawy języka SQL

Podstawy języka SQL cz. 2

kończy wysyłanie danych do pliku tworzy strukturę tabeli wyświetla opis struktury tabeli zmiana nazwy tabeli usuwanie tabeli

Technologie baz danych

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

SELECT * FROM tabela WHERE warunek wybiera dane spełniające podany warunek

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

1 Wprowadzenie do funkcji

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

Bazy danych 6. SQL funkcje daty i czasu, zmienne tymczasowe, aliasy

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

SQL, LIKE, IN, CASE, EXISTS. Marcin Orchel

Zadania SELECT do schematu EDS (EMP, DEPT, SALGRADE)

Wykład 5. SQL praca z tabelami 2

Autor: Joanna Karwowska

Język PL/SQL. Rozdział 2. Kursory

Kursor jawny. Rozdział 10a Kursory. Deklarowanie kursora (1) Deklarowanie kursora (2)

Temporalne bazy danych

Kursor. Rozdział 10a Kursory. Otwieranie kursora. Deklarowanie kursora

ACESS- zadania z wykorzystaniem poleceń SQL

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

Kursory i wyjątki. (c) Instytut Informatyki Politechniki Poznańskiej 1

Relacyjne bazy danych. Podstawy SQL

Transkrypt:

Funkcje Rozdział 3 Funkcje Funkcje wierszowe (funkcje znakowe, funkcje liczbowe, funkcje operujące na datach, funkcje konwersji, funkcje polimorficzne), funkcje grupowe, podział relacji na grupy, klauzule GROUP BY i HAVING Przekształcają dane, pobrane przez polecenie SQL, lub wyliczają nowe dane. Podział ze względu na zakres działania: funkcje wierszowe operują na wartościach atrybutów jednego rekordu, funkcja zwraca tyle wyników ile rekordów przetwarza polecenie SQL, funkcje grupowe (agregujące) operują na wartościach wielu rekordów (grupy rekordów), funkcja zwraca jeden wynik dla kaŝdej grupy rekordów, przetwarzanej przez polecenie SQL Podział ze względu na pochodzenie: funkcje predefiniowane, funkcje uŝytkownika. 1 2 UŜycie: Funkcje wierszowe SELECT atrybut_1, funkcja_a(wyraŝenie_1, wyraŝenie_2) AS wynik FROM nazwa_relacji WHERE funkcja_b(wyraŝenie_3) operator wyraŝenie_4... ORDER BY funkcja_c; Podział: funkcje znakowe funkcje liczbowe funkcje operujące na datach i interwałach czasowych funkcje konwersji pozostałe funkcje Funkcje znakowe (1) LOWER(wartość) zamienia WIELKIE litery na małe UPPER(wartość) zamienia małe litery na WIELKIE INITCAP(wartość) zamienia pierwsze litery w słowie na duŝe LPAD(wartość, n [, ciąg ]), RPAD(wartość, n [, ciąg ]) Uzupełnia kolumny z lewej (prawej) strony podanym ciągiem aŝ do długości n znaków. Jeśli ciąg nie został podany to wypełnia spacjami SELECT LOWER(nazwa), INITCAP(' mieści się na '), UPPER(adres) FROM zespoly; SELECT LPAD(nazwa,25,'*'), LPAD(nazwa,25), RPAD(nazwa,25,'.') FROM zespoly; 3 4

Funkcje znakowe (2) SUBSTR(wartość,n [,m]) z podanego łańcucha znaków wycina m znaków począwszy od pozycji n-tej INSTR(wartość, ciąg [,m,n]) wskazuje miejsce pierwszego (n-tego) wystąpienia ciągu w łańcuchu znaków począwszy od pozycji m-tej LTRIM(wartość [, znaki ]), RTRIM(wartość [, znaki ]) usuwa z lewej (prawej) strony podane znaki (spacje) LENGTH(wartość) zwraca długość łańcucha znaków SELECT SUBSTR(nazwisko,3,4), INSTR(etat,'PROF'), LENGTH(etat) Funkcje znakowe (3) TRANSLATE(źródło,z,na) KaŜde wystąpienie w źródle znaku z ciągu z zostanie zastąpione odpowiadającym mu znakiem z ciągu na REPLACE(źródło,wzór,nowy) KaŜde wystąpienie w źródle ciągu wzorzec zostanie zastąpione przez ciąg nowy SELECT etat, REPLACE(etat,'AS','**'), TRANSLATE(etat,'AS','**'), REPLACE(etat,'ASY','**'), TRANSLATE(etat,'ASY','**') SELECT nazwa, LTRIM(nazwa,'ABCD') FROM zespoly; 5 6 Funkcje liczbowe (1) Funkcje liczbowe (2) ROUND(wartość,n) zaokrągla wartość do n-tego dziesiętnego miejsca po przecinku TRUNC(wartość,n) obcina wartość do n-tego dziesiętnego miejsca po przecinku CEIL(wartość), FLOOR(wartość) najmniejsza (największa) liczba całkowita większa lub równa (mniejsza lub równa) podanej wartości POWER(wartość,n) podnosi wartość do podanej potęgi SQRT(wartość) oblicza pierwiastek kwadratowy z podanej wartości ABS(wartość) oblicza wartość bezwzględną wyraŝenia MOD(wartość1, wartość2) SELECT ROUND(123.456,1), ROUND(123.456), ROUND(123.456,-1), TRUNC(123.456,1), TRUNC(123.456), TRUNC(123.456,-1) SELECT FLOOR(1.5), CEIL(1.5) zwraca resztę z dzielenia SIGN(wartość) zwraca 1 jeśli wartość jest ujemna, 0 dla 0 i 1 jeśli wartość jest dodatnia SELECT POWER(2,16), SQRT(64), ABS(-100), MOD(123456789,10) 7 8

Funkcje operujące na datach (1) Funkcje operujące na datach (2) Oracle przechowuje daty w polach typu DATE zawierających stulecie, rok, miesiąc, dzień, godzinę, minutę i sekundę. Zakres dat to 1 stycznia 4712 p.n.e do 31 grudnia 9999. Funkcje CURRENT_DATE i CURRENT_TIMESTAMP zwracają bieŝącą datę i znacznik czasowy. Funkcja Oracle SYSDATE zwraca bieŝącą datę systemową. Słowo kluczowe DATE słuŝy do reprezentacji literałów typu DATE w domyślnym formacie rrrr-mm-dd. Wewnętrznie daty są przechowywane w postaci liczb, moŝliwe jest stosowanie operatorów dodawania i odejmowania. SELECT CURRENT_DATE, CURRENT_TIMESTAMP EXTRACT (YEAR/MONTH/DAY/HOUR/MINUTE/SECOND/ TIMEZONE_HOUR/TIMEZONE_MINUTE/TIMEZONE_REGION/ TIMEZONE_ABBR FROM data/czas/interwał) Zwraca jeden ze składników daty, znacznika czasowego lub interwału czasowego (np. dzień, rok, godzinę,...) SELECT EXTRACT (YEAR FROM DATE '2003-10-01') SELECT EXTRACT (HOUR FROM CURRENT_TIMESTAMP) ':' EXTRACT (MINUTE FROM CURRENT_TIMESTAMP) AS now SELECT zatrudniony, SYSDATE, SYSDATE-zatrudniony WHERE zatrudniony > DATE '1990-01-01'; SELECT EXTRACT (YEAR FROM zatrudniony) AS rok_zatrudnienia 9 10 Funkcje operujące na datach (3) Operacje na interwałach czasowych (1) MONTHS_BETWEEN(data1,data2) Zwraca liczbę miesięcy jakie upłynęły między datami ADD_MONTHS(data,n) Zwraca datę plus n miesięcy kalendarzowych NEXT_DAY(data,dzień) Zwraca następną datę po podanej przypadającą na podany dzień LAST_DAY(data) Zwraca datę ostatniego dnia w miesiącu podanej daty SELECT MONTHS_BETWEEN(SYSDATE, zatrudniony) SELECT NEXT_DAY(SYSDATE,'WTOREK') SELECT LAST_DAY(DATE '1992-02-01') Interwał czasowy reprezentuje róŝnicę w czasie między datami i znacznikami czasowymi. Typy interwałów: YEAR TO MONTH, DAY TO SECOND Słowo kluczowe INTERVAL słuŝy do reprezentacji literałów typu interwał czasowy. Przykłady literałów interwałowych: INTERVAL 4 5:12 DAY TO MINUTE - 4 dni, 5 godz. i 12 minut. INTERVAL 400 5 DAY(3) TO HOUR - 400 dni 5 godz. INTERVAL 10 HOUR - 10 godz. INTERVAL 10:22 MINUTE TO SECOND - 10 minut 22 sekundy. INTERVAL 10 MINUTE - 10 minut. INTERVAL 4 DAY - 4 dni. INTERVAL 1-6 YEAR TO MONTH półtora roku INTERVAL 120 HOUR(3) - 120 godz. INTERVAL 30.12345 SECOND(2,4) 30.12354 sek. 11 12

Operacje na interwałach czasowych (2) Operacje na interwałach czasowych (3) SQL> SELECT INTERVAL'20' DAY - INTERVAL'240' HOUR INTERVAL'20'DAY-INTERVAL'240'HOUR -------------------------------------------------------------- +000000010 00:00:00.000000000 SELECT (sysdate - zatrudniony ) DAY TO SECOND "Pracuje dni", (sysdate - zatrudniony ) YEAR TO MONTH "Pracuje lat" SQL> SELECT nazwisko, EXTRACT (DAY FROM (sysdate - zatrudniony ) DAY TO SECOND) "Pracuje dni", SQL> SELECT EXTRACT (DAY FROM (INTERVAL'20' DAY - INTERVAL'240' HOUR)) EXTRACT(DAYFROM(INTERVAL'20'DAY-INTERVAL'240'HOUR)) --------------------------------------------------- 10 EXTRACT (YEAR FROM (sysdate - zatrudniony ) YEAR TO MONTH) "Pracuje lat" NAZWISKO Pracuje dni Pracuje lat ----------------------------------------------------------- WEGLARZ 13091 35 BLAZEWICZ 11144 30 SLOWINSKI 9560 26 BRZEZINSKI 12909 35... 13 14 Funkcje konwersji CAST (wartość AS typ) ogólna standardowa funkcja konwersji TO_CHAR(liczba data [, format ]) TO_NUMBER( tekst ) TO_DATE( tekst, format ) SCC YYYY BC AD MM MONTH D DD DDD DAY AM PM HH HH24 MI SS Stulecie Rok Wskaźnik ery Miesiąc Nazwa miesiąca Dzień Nazwa dnia Wskaźnik pory dnia Godziny Godziny (24h) Minuty Sekundy SELECT nazwisko, CAST (placa_pod AS VARCHAR2(20)) SELECT TO_DATE('00_01_10','YY_DD_MM') SELECT TO_CHAR(SYSDATE, 'SCC YYYY MMTH DAY HH24 MI SS') SELECT TO_NUMBER('-12345,67890') Funkcje polimorficzne NVL(wyraŜenie1,wyraŜenie2) Jeśli wyraŝenie1 ma wartość róŝną od NULL to funkcja zwraca wyraŝenie1, w przeciwnym przypadku zwraca wyraŝenie2 NVL2(wyraŜenie1,wyraŜenie2, wyraŝenie3) JeŜeli wyraŝenie1 ma wartość róŝną od NULL to funkcja zwraca wyraŝenie2, w przeciwnym przypadku zwraca wyraŝenie3 GREATEST(w1,...) LEAST(w1,...) Zwraca największą (najmniejszą) wartość z listy SELECT nazwisko, NVL(placa_dod,0) AS NVL, NVL2(placa_dod,10,0) AS NVL2 SELECT nazwisko, GREATEST(placa_pod/30, NVL(placa_dod,0)) 15 16

WyraŜenie CASE CASE wyraŝenie WHEN wartość 1a THEN wartość 1b WHEN wartość 2a THEN wartość 2b [ ELSE wartość 3 ] END SELECT nazwisko, etat, ( CASE etat WHEN 'DYREKTOR' THEN ' *** ' WHEN 'PROFESOR' THEN ' *** ' ELSE TO_CHAR(placa_pod) END) AS placa_pod CASE WHEN warunek 1 THEN wartość 1 WHEN warunek 2 THEN wartość 2 [ ELSE wartość 3 ] END DECODE(wyraŜenie,S1,W1,[S2,W2,...] domyślne) Jeśli wyraŝenie równa się S1 to funkcja zwraca W1, jeśli wyraŝenie równa się S2 to funkcja zwraca W2,..., w przeciwnym wypadku funkcja zwraca wartość domyślną. Niestandardowa funkcja w Oracle Funkcja DECODE Częściowo pokrywa funkcjonalność CASE SELECT nazwisko, DECODE(etat, 'PROFESOR', ' *** ', 'DYREKTOR', ' *** ', TO_CHAR(placa_pod) ) AS placa_pod SELECT nazwisko, etat, ( CASE WHEN etat IN ('DYREKTOR','PROFESOR') THEN ' *** ' ELSE TO_CHAR(placa_pod) END) AS placa_pod 17 18 Funkcje grupowe (agregujące) Operują na podzbiorach krotek relacji, nazywanych grupami, wyznaczają wartość skalarną operując na zbiorze wartości odczytanych z wielu krotek. PLACA funkcje:... 200 AVG ([distinct all] wyraŝenie)... 340 COUNT([distinct all] wyraŝenie) MAX([distinct all] wyraŝenie) MIN([distinct all] wyraŝenie)...... null 456 ([distinct all] wyraŝenie)... 120 VARIANCE([distinct all] wyraŝenie) STDDEV([distinct all] wyraŝenie) SELECT COUNT(*), MAX(placa_dod) WHERE id_zesp=20; SELECT AVG(placa_pod) Podział krotek na grupy - klauzula GROUP BY (1) NAZWISKO... ID_Z PLACA WEGLARZ... 10 1730 BLAZEWICZ... 40 1350 SLOWINSKI... 30 1070 BRZEZINSKI... 20 960 MORZY... 20 830 KOSZLAJDA... 20 590 ZAKRZEWICZ... 30 208 BIALY... 30 250 NAZWISKO... ID_Z PLACA WEGLARZ... 10 1730 BRZEZINSKI... 20 960 MORZY... 20 830 KOSZLAJDA... 20 590 SLOWINSKI... 30 1070 BIALY... 30 250 ZAKRZEWICZ... 30 208 BLAZEWICZ... 40 1350 19 20

Podział krotek na grupy - klauzula GROUP BY (2) Podział krotek na grupy - klauzula GROUP BY (3) Dla kaŝdego zespołu wylicz średnią płacę zatrudnionych w nim pracowników SELECT id_zesp, AVG(placa_pod) GROUP BY id_zesp; UWAGA!!!!! Na liście atrybutów w klauzuli SELECT mogą się pojawić TYLKO funkcje agregujące i atrybuty grupujące. Obecność kaŝdego innego atrybutu spowoduje błąd. Podział grup na podgrupy W ramach kaŝdego zespołu dla kaŝdego etatu występującego w zespole oblicz najwyŝszą płacę SELECT id_zesp, etat, MAX(placa_pod) GROUP BY id_zesp, etat; SELECT etat, nazwisko, MAX(placa_pod) GROUP BY etat; SELECT etat, nazwisko, MAX(placa_pod) * BŁĄD w linii 1: ORA-00979: not a GROUP BY expression BŁĄD!!! 21 22 Klauzula HAVING Pozwala na wybór grup spełniających określone warunki, działa dla grup analogicznie jak klauzula WHERE dla pojedynczych krotek wyświetl grupy etatowe, których maksymalna płaca podstawowa przekracza 1000 złotych Sortowanie po grupowaniu W klauzuli ORDER BY, zastosowanej w zapytaniu z grupowaniem, moŝemy umieścić jedynie atrybuty grupujące i/lub funkcje grupowe SELECT etat, (placa_pod) GROUP BY etat SELECT id_zesp, AVG(placa_pod) GROUP BY id_zesp HAVING MAX(placa_pod) > 1000; HAVING (placa_pod) > 3000 wyświetl nazwy etatów i liczbę zatrudnionych na danym etacie, uwzględnij tylko etaty, na których jest zatrudnionych co najmniej 2 pracowników otrzymujących płacę dodatkową ORDER BY MAX(placa_pod) DESC; SELECT etat, COUNT(*) WHERE placa_dod IS NOT NULL GROUP BY etat HAVING COUNT(*) >= 2; 23 24