|
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 |