Funkcje wbudowane
Oprócz samych zdań SQL system RDBMS pozwala używać w kwerendach pewnych funkcji (często nazywa się je funkcjami wbudowanymi SQL). Można ich używać w różnych fragmentach kwerendy, np. w wyrażeniu określającym, co ma być wybrane (wyrażenie po SELECT), w kryteriach wyboru (opcja WHERE), a także w opcji ORDER BY (nie każdej funkcji można używać w każdym miejscu kwerendy, patrz dalej). Funkcję wywołuje się, podając jej nazwę i w nawiasach (nie oddzielonych spacją od nazwy funkcji) - argument lub argumenty funkcji, oddzielone przecinkami (istnieją funkcje bezargumentowe). Argumentami funkcji są najczęściej pola w rekordzie (faktycznie nazwy kolumn w tabeli).
Funkcje wbudowane SQL są różne. Najbardziej popularne to tzw. funkcje agregujące. Bardzo często chcemy dokonać na bazie jakichś zapytań zbiorczych: obliczyć ile mamy rekordów spełniających pewien warunek, znaleźć minimalną, maksymalną lub średnią wartość w pewnej kolumnie (np. pensję pracowników) etc. Język SQL dostarcza użytkownikowi funkcji, które można wykorzystać w takich zapytaniach. Najbardziej znane z nich to funkcje standardowe: COUNT, SUM, AVG, MIN i MAX.
Nie są to oczywiście jedyne funkcje wbudowane SQL. Jest wiele innych, w tym m.in. do kalkulacji dat i okresów czasowych, przetwarzania ciągów znaków etc. Wybrane z nich poznasz na następnych stronach.
Funkcja
COUNT może być używana w dwojaki sposób. Pierwszym i najbardziej
popularnym jest liczenie rekordów spełniających dane kryteria. Takie
wywołanie funkcji ma postać COUNT(*).
Dwie
następne funkcje, MIN i MAX, zwracają odpowiednio wartość najmniejszą i
największą w danej kolumnie (ściślej: wyrażenia będącego ich
argumentem). A skoro operatory porównania > i < mogą się odnosić
także do dat, zatem w sposób naturalny można wobec dat stosować funkcje
MIN i MAX (np. MIN(Data_urodzenia) znajdzie najmniejszą
(najwcześniejszą) datę wśród dat urodzin).
Funkcje tekstowe Argumentem
funkcji tekstowych są ciągi znaków (dane typów char, varchar lub
text). Typ danych zwracanych przez funkcje tekstowe jest
podstawą do ich dalszego podziału: wyróżniamy funkcje tekstowe
zwracające wartość znakową i funkcje tekstowe zwracające liczbę.
CONCAT() - Funkcja łączy (konkatenuje) przekazane jako parametr i
oddzielone przecinakami ciągi znaków. Używaliśmy już tej funkcji, a w
następnych listingach użyjemy jej jeszcze kilka razy.
LOWER() - Wynikiem działania funkcji LOWER() jest ciąg
znaków podany jako argument, ale składający się wyłącznie z małych
liter. Za pomocą tej funkcji wszystkie wielkie litery argumentu zostaną
zamienione na małe.
UPPER()
Wynikiem
działania funkcji UPPER() jest ciąg znaków podany jako
argument, ale składający się wyłącznie z wielkich liter. Za pomocą tej
funkcji wszystkie małe litery argumentu zostaną zamienione na wielkie.
Funkcje liczbowe
ROUND()
Działanie funkcji ROUND() polega na
zaokrągleniu liczby do określonej liczby cyfr po przecinku. Pierwszy
parametr jest liczbą do zaokrąglenia, drugi wskazuje, do ilu pozycji
chcemy zaokrąglić. Ujemna liczba powoduje zaokrąglenie liczby z lewej
strony przecinka; 0 spowoduje zaokrąglenie do najbliższej liczby
całkowitej. Jeżeli drugi parametr nie jest podany, SZBD przyjmuje
domyślnie jego wartość jako równą 0.
TRUNCATE()
Funkcja
TRUNCATE() powoduje obcięcie liczby do określonej
liczby cyfr po przecinku. Pierwszy parametr jest liczbą do obcięcia,
drugi wskazuje, do ilu pozycji chcemy liczbę skrócić. Ujemna liczba
powoduje dodanie określonej liczby zer z lewej strony przecinka. Jeżeli
drugi parametr nie jest podany, MySQL przyjmuje domyślnie jego wartość
jako równą 0.
ABS()
Wynikiem
działania funkcji ABS() jest wartość bezwzględna liczby
(liczba bez znaku). Jako parametr podaje się liczbę, której wartość
bezwzględną należy obliczyć.
CEILING(), FLOOR()
Za pomocą funkcji CEILING() zwrócona zostanie
najmniejsza liczba całkowita równa liczbie podanej jako argument
funkcji lub większa. Funkcja FLOOR() zwraca największą liczbę całkowitą
równą liczbie podanej jako argument funkcji lub mniejszą.
Funkcje daty i czasu
CURDATE(), CURTIME()
Wynikiem działania funkcji CURDATE() jest
bieżąca data, a funkcji CURTIME() — bieżący czas.
Częstym zastosowaniem funkcji jest automatyczne wstawianie informacji o
czasie utworzenia lub zmodyfikowania danych.
NOW()
Funkcja NOW() zwraca zarówno datę, jak i czas systemowy.
DAYOFMONTH(), DAYOFWEEK(), DAYOFYEAR()
Funkcje DAYOFMONTH(), DAYOFWEEK(),
DAYOFYEAR() zwracają numer dnia odpowiednio: miesiąca
(liczba z zakresu od 1 do 31), tygodnia (liczba z zakresu od 1 do 7,
gdzie 1 oznacza niedzielę — pierwszy dzień tygodnia, a 7 sobotę — siódmy
dzień tygodnia) i roku (liczba z zakresu od 1 do 365).
Funkcje konwersji
ASCII()
W wyniku
działania funkcji ASCII() zostaje zwrócony kod ASCII znaku podanego jako parametr wywołania. Jeżeli jako parametr podamy
ciąg znaków, za pomocą tej funkcji zostanie obliczony i zwrócony kod
ASCII pierwszego znaku w ciągu.
CHR()
Działanie
funkcji CHR() jest przeciwieństwem działania funkcji ASCII() — zamiast zamiany tekstu na liczbę przeprowadza konwersję liczby na
odpowiadające jej znaki kodu ASCII.
BIN()
Funkcja BIN() zwraca binarną reprezentację podanej liczby dziesiętnej .
CAST()
Funkcja CAST() pozwala przekonwertować (rzutować) dane przekazane jako pierwszy
parametr wywołania na typ podany jako drugi parametr funkcji.
Funkcje trygonometryczne — SIN(), COS(), TAN() i COT() W wyniku działania funkcji SIN() (sinus), COS()
(cosinus), TAN() (tangens) i COT() (cotangens) zwrócona zostanie wartość odpowiednich funkcji
trygonometrycznych — dla parametru będącego kątem w radianach będzie
obliczony odpowiednio: sinus, cosinus, tangens lub cotangens. Aby
przeliczyć kąty z radianów na stopnie, należy posłużyć się wzorem:
stopnie · PI()/180 = radiany.
Funkcje mieszania
Funkcje
mieszania (ang. Hash) są funkcjami jednokierunkowymi, czyli
teoretycznie niemożliwe jest odtworzenie oryginalnych danych na
podstawie znajomości wyliczonego za ich pomocą ciągu bajtów. W tym
sensie do funkcji mieszania można by też zaliczyć np. funkcję modulo, jednak kryptograficzne
funkcje mieszania musi cechować maksymalna losowość wyniku, minimalna
szansa zwrócenia tego samego wyniku dla różnych wiadomości i maksymalne
zróżnicowanie wyniku dla niewielkich zmian wiadomości.
Funkcje mieszania dla dowolnego zbioru danych zwracają
sygnaturę o ściśle określonej długości. W ten sposób
niemożliwe jest wyliczenie wielkości zbioru danych źródłowych na
podstawie przechwyconej wartości funkcji skrótu. Funkcje mieszania nie
umożliwiają szyfrowania danych, ale doskonale nadają się do sprawdzenia,
czy oryginalne dane nie zostały zmodyfikowane. W tym celu wystarczy np.
wyliczyć wartość funkcji mieszania dla wysłanej wiadomości e-mail czy
zapisanego na dysku twardym pliku, a potem porównać ją z wartością
wyliczoną przez odbiorcę wiadomości. Jeżeli oba wyniki są identyczne, to
znaczy, że dane nie zostały zmodyfikowane.
Współcześnie powszechnie stosowane są dwie funkcje
skrótu:
1. MD5 (ang. Message Digest Algorithm 5)
— funkcja skrótu zdefiniowana w dokumencie RFC 1231, szybka, ale nieuważana już za
bezpieczną, zwraca wyniki o długości 128 bitów.
2. SHA-1 (ang. Secure Hash Algorithm)
— funkcja mieszania wolniejsza, ale bezpieczniejsza od poprzedniej,
tworząca wyniki o długości 160 bitów. Funkcja ta jest standardem
stosowanym przez agencje rządowe Stanów Zjednoczonych Ameryki Północnej.
Dodatkowym ryzykiem związanym ze stosowaniem
funkcji skrótu jest ich podatność na ataki urodzinowe(ang. Birthday attack).
Nazwa ataku pochodzi od ciekawego paradoksu — w grupie 23 osób
prawdopodobieństwo, że dwie osoby obchodzą tego samego dnia urodziny (prawdopodobieństwo kolizji),
przekracza 50 procent. Ataki tego typu wykorzystują fakt, że
znalezienie zbioru danych, dla którego wyliczona funkcja skrótu będzie
taka sama jak dla oryginalnego zbioru, jest wielokrotnie łatwiejsze niż
odgadnięcie tego zbioru.
|