Wyrażenia logiczne
Wyrażenia logiczne mogą występować w poleceniu SELECT w klauzulach WHERE i HAVING .
Operatory porównania
Najprostsze wyrażenie logiczne można przedstawić następująco:
Wartość1 op_porównania wartość2
gdzie:
wartośc1, wartość2 – wartości (wyrażenia) tego samego typu,
op_porównania - operator porównania.
Wybrane operatory porównania dostępne w języku SQL:
| Operator | Opis |
| = | równa się, |
| !=, <> | nie równa się, |
| >,< | większe od, mniejsze od, |
| >=<= | większe bądź równe, mniejsze bądź równe, |
| [NOT] IN | [nie] należy do zbioru, zbiór może być podany poprzez wyliczenie lub SELECT zagnieżdżony, |
| IS [NOT] NULL | [nie] jest NULL |
| [NOT] BETWEEN x AND y | [nie] większe lub równe x i mniejsze lub równe y |
| [NOT] LIKE x | wyszukiwanie tekstu wg. wzorca, znaki uogólniające: % – dowolna ilość, dowolnych znaków, – jeden, dowolny znak, |
Wartość NULL
Oprócz wartości TRUE i FALSE, wyrażenia logiczne w Oracle’u mogą przyjmować wartość NULL. Wartość NULL jest wartością specjalną, oznaczającą brak danych. Operacja porównania, w której jako jeden ze składników występuje wartość NULL, zwróci wartość logiczną NULL.
W poleceniach SQl, można stosować specjalną funkcję – NVL:
NVL{wyrażenie1, wyrażenie2) gdzie:
wyrażenie l - wyrażenie numeryczne lub znakowe,
wyrażenie2 - wyrażenie o typie zgodnym z typem wyrażenia1
Funkcja NVL zwraca wartość wyrażenia l jeżeli jest ona różna od NULL, albo wartość wyrażenia2 w przeciwnym przypadku.
Przykład Kto nie otrzymuje prowizji?
SQL> select ename,
2 comm
3 from emp
4 where nvl (comm, 0) = 0;
Wyrażenia arytmetyczne
Wyrażenia arytmetyczne mogą być budowane przy użyciu operatorów i funkcji arytmetycznych. W wyrażeniu arytmetycznym mogą występować nazwy kolumn numerycznych i stałe numeryczne. Dopuszczalne jest użycie wyrażeń arytmetycznych w we wszystkich klauzulach polecenia SELECT, oprócz klauzuli FROM.
Operatory arytmetyczne
Operatory arytmetyczne dostępne w języku SQL:
| Operator | Opis |
| - | wartość przeciwna, |
| +,- | dodawanie, odejmowanie, |
| *./ | mnożenie, dzielenie |
Funkcje arytmetyczne
Wybrane funkcje arytmetyczne dostępne w języku SQL:
| Operator | Opis |
| ABS(n) | wartość absolutna z n, |
| COS(n) | cosinus z n (kąt w radianach) |
| GREATEST(n1 [,n2]…) | największa wartość z listy, |
| LEAST(n1 [,n2]…) | najmniejsza wartość z listy, |
| LN(n) | logarytm naturalny z n. |
| LOG(m,n) | logarytm z n przy podstawie m, |
| POWER(m,n) | m do n-te] potęgi, |
| ROUND(m,[n]) | m zaokrąglone do n miejsc po przecinku, |
| SIGN(n) | znak n, |
| SIN(n) | sinus z n (kąt w radianach), |
| TO_CHAR(n) | konwersja liczby n na tekst, |
| TRUNC(m,[n]) | m obcięte do n miejsc po przecinku, |
Funkcje tekstowe
Wybrane funkcje tekstowe dostępne w języku SOŁ:
| Operator | Opis |
| INITCAP(t) | zwraca tekst t w postaci: pierwsza litera duża, pozostałe małe, |
| LOWER(t) | zwraca tekst t małymi literami, |
| LPAD( t1, n, [,t2]) | dodaje do t1 z lewej strony tyle wystąpień t2, aby łączna długość tekstu wynosiła n, |
| LTRIM(t1, t2 ) | usuwa wszystkie początkowe wystąpienia t2 w t1, |
| REPLACE( t1, t2, [t3] ) | zamienia wszystkie wystąpienia t2 w t1 na t3, |
| RPAD(t1, n, t2 ) | dodaje do t1 z prawej strony tyle wystąpień t2, aby łączna długość tekstu wynosiła n, |
| RTRIM( t1, t2 ) | usuwa wszystkie końcowe wystąpienia t2 w t1, |
| SUBSTR( t1, m, n ) | zwraca fragment t1 o długości n od pozycji m, |
| TRANSLATE( t1. t2, t3 ) | wykonuje translację znaków z t1 zamieniając znaki występujące w t2 na odpowiednie znaki w t3, |
| UPPER(t) | zwraca tekst t dużymi literami, |
| INSTR(t1,t2,[,n[,m]]) | przeszukuje tekst t1 począwszy od pozycji n i zwraca pozycję m-tego wystąpienia tekstu t2 w tl, |
| LENGH( t) | zwraca długość tekstu t, |
| TO_NUMBER(t) | wykonuje konwersję tekstu t na liczbę, pod warunkiem, że t jest w odpowiednim formacie. |
| DECODE(flag,’N',’Nie’,'T’,'Tak’) | zamienia wszystkie ‘N’ na ‘Nie’ , a ‘T’ na ‘Tak’ w polu flag |
Działania na datach
Data jest oddzielnym typem w Oracle’u. Wartość typu data zawiera zawsze pełną informację:
rok, miesiąc, dzień, godzina, minuta, sekunda. Format przechowywania daty jest formatem wewnętrznym Oracle’a. Jeżeli chcemy wybrać datę z bazy danych, musi zostać wykonana konwersja daty na postać znakową. Podobnie, wprowadzając datę używamy tekstu opisującego datę.
Format daty
Wprowadzając lub wybierając datę można określić jej format. W tym celu należy użyć funkcji:
do wybierania
TO_CHAR( data, ‘ format‘ )
do wprowadzania
TC_DATE( data, /format‘ )
gdzie:
data – wartość typu data, format - format daty.
Wybrane elementy formatu daty:
| Element formatu | Opis | |
|
-/,.;: „tekst” |
znaki interpunkcyjne, stała tekstowa wyświetlana z datą, | |
|
HH, HH24, AM, A.M., PM, P.M, |
godzina (1-12), godzina (0-23), wskaźnik przed/po południu, | |
|
MI |
minuta (0-59). | |
| SS,
ssss. |
sekunda (0-59), sekundy po północy (0-86399), | |
|
D, DAY, DY, DD, DDD |
dzień tygodnia (1-7), nazwa dnia tygodnia, skrót nazwy dnia, dzień miesiąca (1-31), dzień roku (1-336), | |
| MM, | miesiąc (1-12), | |
| MONTH, | nazwa miesiąca, | |
| MON, | skrót nazwy miesiąca, | |
| RM, | rzymski numer miesiąca (I-XII), | |
| YEAR, | rok słownie (tylko po angielsku), | |
| YYYY, YYY, YY, Y | rok: cztery cyfry, ostanie trzy cyfry, ostatnie dwie cyfry,ostatnia cyfra. | |
Format specjalny RR uwzględnia dwie ostatnie cyfry roku w następujący sposób:
| Dwie ostatnie cyfry bieżącego roku mieszczą się w przedziale:
0-49
50-99 |
Podane dwie ostatnie cyfry roku mieszczą się w przedziale:
0-49 50-99 |
|
| zwracana jest data w bieżącym stuleciu | zwracana jest data w poprzednim stuleciu | |
| zwracana jest data w następnym stuleciu | zwracana jest data w bieżącym stuleciu | |
Jeżeli przy wprowadzaniu/ wybieraniu daty nie użyjemy funkcji formatującej, będzie użyty format domyślny daty. Format domyślny daty zależy od wersji językowej bazy danych. Typowy format domyślny to ‘DD-MON-YY’.
Funkcje działające na datach
Wybrane funkcje działające na datach:
| Element formatu | Opis |
|
ADD_MONTHS(d, n) LASTDAY(d/) MONTHS_BETWEEN( dl, d2) SYSDATE
|
dodaje do daty d, n miesięcy, zwraca datę,
zwraca datę ostatniego dnia miesiąca zawartego w dacie d, zwraca liczbę miesięcy pomiędzy datami dl i d2, zwraca datę (pełną informację) bieżącą. |
Dodatkowo można wykonywać następujące operacje na datach:
datal – data2 - wynikiem jest liczba dni dzielących daty,
data1 +/- n - wynikiem jest data1 powiększona/ pomniejszona o n dni.
Funkcje grupowe
Funkcje grupowe liczą wartości dla grupy wierszy, uwzględniając opcje:
• DISTINCT – brane są tylko unikalne wartości,
• ALL – brane są wszystkie wartości, jest to opcja domyślna.
Wszystkie funkcje grupowe, oprócz COUNT, ignorują wartości NULL. Jeżeli zapytanie nie przekaże do funkcji grupowej żadnych wierszy, lub wiersze z wartościami NULL, to funkcja grupowa zwróci wartość NULL.
Wybrane funkcje działające na grupach wierszy:
| Funkcja | Opis |
| AVG([opcja]wyr)
COUNT( * | [opcja] wyr )
MAX([opcja]wyr) MIN([opcja]wyr) SUM([opcja]wyr)
|
wartość średnia wyrażenia wyr,
liczba wierszy wybranych zapytaniem, jeżeli argumentem jest *, to funkcja zwróci liczbę wszystkich wierszy łącznie z wartościami NULL, wartość maksymalna wyrażenia wyr, wartość minimalna wyrażenia wyr, suma wartości wyrażenia wyr, |
Operacje na zbiorach
Wyniki kilku poleceń SELECT można połączyć w jeden za pomocą operatorów działających na zbiorach. Zapytania połączone operatorem muszą mieć identyczną liczbę i typ wybieranych kolumn. Jeżeli więcej niż dwa zapytania łączymy w jeden zbiór to wynik jest wyliczany parami od lewej strony. Aby zmienić kolejność wyliczeń możemy użyć nawiasów.
Składnia
[ ( ] SELECT … [ ) ] opera tor zbioru. [ ( J SELECT ... [ ) ]
• • •
gdzie:
operator_zbioru – dowolny operator działający na zbiorach.
Operatory działające na zbiorach
| Operator | Opis |
| UNION | suma zbiorów, |
| UNION ALL | suma zbiorów powiększona o wiersze powielające się, |
| INTERSECT | część wspólna zbiorów, |
| MINUS | różnica zbiorów |
Źródło: ORACLE7 Serwer Język SQL © IFS Poland Sp. z o.o.
zmiany i opracownie własne