plik


ÿþ Tabela Osoby Zarobk Dochod Miast Id Imi Nazwisko Kod i y o MikoBajcza 50- 1 RafaB 100 200 3 k 500 2 Marek Nowak 200 250 1 3 Kamil Osa 50 500 2 ZdzisBa 40- 4 Frckowiak 300 120 1 w 400 DANE NUMERYCZNE Mam nadziej, |e nikt z bardziej zaawansowanych programistów nie obrazi si je|eli stwierdz i| istnieje tylko jeden typ numeryczny i jest nim NUMBER (w innych bazach zwany te| np. NUMERIC czy LONG), a reszta typów to tylko jego odmiany z reguBy uBatwiajce |ycie. Jest to typ o najwikszym zakresie (w[ród standardowych), w którym mamy mo|liwo[ zdefiniowania ilo[ci miejsc po przecinku. Po zmodyfikowaniu tego typu mo|emy otrzyma tak|e: INT, INTEGER - czyli NUMBER o innym przedziale i bez miejsc po przecinku (liczba caBkowita); FLOAT - inny przedziaB; DECIMAL - inny przedziaB; SMALLINT, BIGINT - ró|ne przedziaBy dla liczb caBkowitych; SHORT, REAL, TINYINT, MEDIUMINT, DOUBLE i wiele wiele innych. Sortowanie liczb Sortowanie liczb typów numerycznych jest rzecz oczywist i nie wart opisywania - na wszelki wypadek jednak wspomn, |e odbywa si ono zgodnie z zasadami matematyki, co oznacza, |e np. cig: 1, 10, 2, 4, 35, 11, 3 po posortowaniu klauzul ORDER BY bdzie nastpujcy: 1, 2, 3, 4, 10, 11, 35. W przypadku, gdy nasz cig jest cigiem znaków zostanie posortowany w sposób nastpujcy: 1, 10, 11, 2, 3, 35, 4 - zgodnie z zasadami sortowania cigów znaków. Nale|y na ten szczegóB zawsze zwraca baczn uwag, gdy| jest on czst przyczyn powstawania nieporozumieD. Funkcje matematyczne Ju| we wcze[niejszych rozdziaBach operowali[my kilkoma funkcjami matematycznymi wystpujcymi w jzyku SQL (MIN, MAX, SUM, AVG, COUNT). Teraz przyszedB czas na przedstawienie ich wszystkich: Copyright© mgr in|. RafaB MikoBajczak  Kopiowanie i rozpowszechnianie zabronione FUNKCJA DZIAAANIE ABS (argument) Zwraca warto[ absolutn (moduB) CEIL (argument) Zwraca najmniejsz liczb caBkowit wiksz lub równ argumentowi COS (argument) Zwraca w radianach warto[ cosinusa COSH (argument) Zwraca w radianach warto[ cosinusa hiperbolicznego EXP ( [argument] ) Zwraca warto[ liczby e = 2,71828... FLOOR (argument) Zwraca najwiksz liczb caBkowit mniejsz lub równ argumentowi LN (argument) Zwraca warto[ logarytmu naturalnego LOG (baza, argument) Zwraca warto[ logarytmu o podstawie baza z argumentu MOD (argument, dzielnik) Zwraca reszt z dzielenia argumentu przez dzielnik Zwraca warto[ liczby Pi = 3,14.. z szesnastoma miejscami po PI ( ) przecinku POWER (argument, potga) Podnosi argument do potgi SING (argument) Zmienia znak argumentu SIN (argument) Zwraca w radianach warto[ sinusa SINH (argument) Zwraca w radianach warto[ sinusa hiperbolicznego SQRT (argument) Zwraca pierwiastek kwadratowy z argumentu TAN (argument) Zwraca w radianach warto[ tangensa TANH (argument) Zwraca w radianach warto[ tangensa hiperbolicznego Pozostaje tylko sprawdzi w Pomocy, które z powy|szych funkcji obsBuguje baza danych, na której pracujemy. Formatowanie liczb Wikszo[ baz danych pozwala na u|ycie funkcji ROUND (argument, precyzja), która pozwala na zmniejszenie precyzji wy[wietlanych liczb. Baza danych ORACLE wprowadza ponadto jeszcze inn funkcj o podobnym zastosowaniu a mianowicie - TRUNC(argument, precyzja). Ró|nic ich dziaBania jest to, |e funkcja ROUND dokonuje zaokrglenia podczas obcinania, natomiast TRUNC nie. PrzykBady wykorzystania: SELECT ROUND (4.5, 2), ROUND (4.568137, 2) FROM DUAL; ROUND (4.5, 2) ROUND (4.568137, 2) 4.5 4.57 SELECT TRUNC (4.568137, 2) FROM DUAL; TRUNC (4.568137, 2) 4.56 Copyright© mgr in|. RafaB MikoBajczak  Kopiowanie i rozpowszechnianie zabronione Trzeba tak|e pokaza jak te funkcje zachowaj si je|eli drugi argument bdzie ujemny. Otó| w takim przypadku zaokrglanie lub obcinanie przeprowadzane jest na lewo od przecinka, Bcznie z wszystkimi cyframi po prawej stronie miejsca dziesitnego: SELECT ROUND (175, -2), TRUNC (175, -2) FROM DUAL; ROUND (175, -2) TRUNC (175, -2) 200 100 SELECT ROUND (15.1, -1), TRUNC (15.1, -1) FROM DUAL; ROUND (15.1, -1) TRUNC (15.1, -1) 20 10 DANE AACCUCHOWE W jzyku SQL istniej dwa typy danych: CHAR i VARCHAR. Ró|nica midzy nimi polega na tym, |e CHAR zajmuje zawsze staB liczb bajtów, zdefiniowan w momencie tworzenia tabeli, natomiast VARCHAR zajmuje tyle miejsca, ile faktycznie zajmuje wprowadzona informacja (w tym przypadku definiujemy maksymalny rozmiar). Oba typy podczas porównaD zachowuj si identycznie. Oczywi[cie bazy danych wprowadzaj jeszcze inne typy przechowujce BaDcuchy tekstowe jak np. CLOB czy TEXT, które jednak maj niewiele wspólnego z dwoma podstawowymi. Konkatenacja BaDcuchów Wszystkie bazy danych udostpniaj operator konkatenacji, który umo|liwia "Bczenie BaDcuchów". PrzykBadowo dla bazy danych ORACLE operatorem tym jest "||", a dla Transact-SQL "+". PrzykBad: SELECT Imi || ' ' || Nazwisko AS Godno[ FROM Osoby; Godno[ RafaB MikoBajczak Marek Nowak Kamil Osa ZdzisBaw Frckowiak Mo|emy w ten sposób tak|e zapyta o konkretn osob: SELECT Id, Imi, Nazwisko FROM Osoby WHERE Imi || ' ' || Nazwisko = 'Marek Nowak'; Id Imi Nazwisko 2 Marek Nowak Copyright© mgr in|. RafaB MikoBajczak  Kopiowanie i rozpowszechnianie zabronione Funkcje BaDcuchowe Relacyjne bazy danych oferuj szereg funkcji przeznaczonych do manipulowania i formatowania BaDcuchów. Oczywi[cie nazwy tych funkcji mog si nieznacznie ró|ni, lecz s to ró|nice powierzchowne a efekt zawsze taki sam. Przeszukiwanie BaDcuchów polega na sprawdzeniu, czy zadany BaDcuch (szablon) zawarty jest w przeszukiwanym BaDcuchu. W ORACLE instrukcja ta o nazwie INSTR( ) przyjmuje nastpujc posta: INSTR (string_1, string_2 [, start [, wystpienie ] ] ); PrzykBady: INSTR ('a b c d e', 'c') - funkcja zwróci liczb 5, poniewa| 'c' jest na tej wBa[nie pozycji w cigu (spacja to te| znak); INSTR('a b c d a b c d', 'b', 4) - funkcja szuka znaku 'b' rozpoczynajc od czwartego znaku w cigu - czyli zwróci warto[ (o ile si nie pomyliBem) 11. INSTR ('a b c b a', 'a', 1, 2) - funkcja szuka znaku 'a' rozpoczynajc od pierwszego znaku w cigu, ale wy[wietli pozycj znaku dopiero wtedy, gdy napotka go po raz drugi (czwarty parametr funkcji) - czyli liczb 9; A teraz odwoBajmy si do nasze przykBadowej tabeli: SELECT Id, Imi, Nazwisko FROM Osoby WHERE INSTR (Nazwisko, 'a') <> 0; Wynikiem bd wszystkie osoby, poniewa| ka|de nazwisko zawiera literk  a Id Imi Nazwisko 1 RafaB MikoBajczak 2 Marek Nowak 3 Kamil Osa 4 ZdzisBaw Frckowiak Mo|liwo[ wydobywania okre[lonego cigu znaków z wikszego BaDcucha daj funkcje wycinajce PODCIGI. Do tego celu sBu| funkcje: SUBSTRING( ) w Transact-SQL i SUBSTR( ) w ORACLE a ich definicje przedstawiaj si nastpujco: SUBSTRING (string, start, dBugo[); SUBSTR (string, start [,dBugo[]); Jak wida w pierwszym przypadku podanie dBugo[ci jest konieczne, natomiast w drugim  opcjonalne. DziaBaj one w nastpujcy sposób: SUBSTRING ('Jan Kowalski', 7, 3) = 'wal'; SUBSTR ('Jan Kowalski', 1, 5) = 'Jan K' SUBSTR ('Jan Kowalski', 3) = 'n Kowalski' Copyright© mgr in|. RafaB MikoBajczak  Kopiowanie i rozpowszechnianie zabronione DANE OKREZLAJCE CZAS Najwikszy problem wykonywania operacji na danych zwizanych z czasem jest ich wizualna prezentacja. Komplikacje pojawiaj si w chwili, gdy umo|liwimy wprowadzanie dat u|ytkownikom. Trzeba wtedy zadba o ich odpowiednie formatowanie tak, aby mo|na je byBo wstawi do pól typu DATE. Kolejnym utrudnieniem jest fakt, i| daty s przetwarzane w ró|ny sposób w zale|no[ci od typu bazy danych. Dla przykBadu przedstawi wywoBania i efekt dziaBania funkcji wy[wietlajcej aktualny czas w ró|nych bazach danych: Funkcja Baza danych Wynik SYSDATE( ) Oracle 12-APR-99 GETDATE( ) Sybase 1999-07-20 11:08:18.267 GETDATE( ) MS SQL Server 1999-07-20 11:16:20 NOW( ) MySQL 1999-07-20 11:15:23 Formatowanie dat przed wyprowadzeniem i przed zapisem Rzadko bdzie nam potrzebna data (np. na wydruku) z dokBadno[ci do milisekund. W tym celu np. baza danych ORACLE daje nam funkcj TO_CHAR( ), która formatuje dat na BaDcuch znaków wedBug szablonu jaki zadamy. WywoBanie takiej funkcji mo|na przedstawi nastpujco: SELECT TO_CHAR( Bie|ca_data, 'MONTH DD, YYYY') FROM ... ; w wyniku czego data zostanie zamieniona na np. 'JANUARY 23, 2002'. Podobny problem pojawi si nam, gdy bdziemy w aplikacji posiadali pole tekstowe z dat, a nastpnie bdziemy chcieli j zapisa do bazy w pole typu DATE. Tu z kolei z pomoc mo|e nam przyj[ np. inna funkcja ORACLE - TO_DATE( ), która jest w zasadzie odwrotno[ci TO_CHAR( ). Dodawanie, odejmowanie i porównywanie dat Tu tak|e ró|nic jest wiele. Baza danych ORACLE pozwala na dodawanie dat poprzez zwykBy operator "+", ale nie mamy tu mo|liwo[ci przeprowadzenia operacji o dowoln jednostk czasu. SELECT SYSDATE, SYSDATE + 3 FROM Dual; SYSDATE SYSDATE + 3 14-APR-99 17-APR-99 Podobnie jest z odejmowaniem: SELECT TO_CHAR(SYSDATE, 'HH:MI:SS'), TO_CHAR(SYSDATE - (1/24), 'HH:MI:SS') FROM Dual; TO_CHAR(... TO_CHAR(... 07:17:20 06:17:20 Copyright© mgr in|. RafaB MikoBajczak  Kopiowanie i rozpowszechnianie zabronione Mo|emy te| dodawa miesice: SELECT SYSDATE, ADD_MONTHS(SYSDATE, 6) FROM Dual; SYSDATE ADD_MONTH 02-MAY-99 02-NOV-99 Transact-SQL pozwala natomiast np. na dodanie jednostki czasu w nastpujcy sposób: DATEADD(hour,1, GETDATE( )); a na odjcie: DATEADD(week, -1, GETDATE( )); Porównywanie dat opiera si na zasadach matematyki. Czasami jednak mo|e okaza si potrzebna informacja o OKRESIE jaki upBynB midzy dwoma datami. Wtedy w ORACLE przychodzi nam z pomoc np. funkcja MONTHS_BETWEEN(data_1, data_2), która zwraca liczb oznaczajc ilo[ miesicy jakimi ró|ni si daty. W Transact-SQL identyczn rol speBnia funkcja DATEDIFF(jednostka_czasu, data_1, data_2), w której dodatkowo mo|emy poda jednostk czasu wedBug której bdzie obliczana ró|nica np. DATEDIFF (YEAR, ...). KONWERTOWANIE DANYCH Wiemy ju|, |e dane tych samych typów mo|emy porównywa do woli. Tak|e bardzo czsto dane podobne ( CHAR i VARCHAR, liczby caBkowite i zmiennoprzecinkowe) mo|emy porównywa bez konieczno[ci konwersji jednej z nich. Czasami jednak musimy dokona porównania warto[ci z pól o ró|nych typach np. liczb i cig znaków w rzeczywisto[ci te| reprezentujcy liczb 500 < '400' . W takim przypadku np. bazy danych zgodne z Transact-SQL proponuj nam funkcj: CONVERT (typ_danych, wyra|enie [,styl]); , któr mo|emy zastosowa w nastpujcy sposób: SELECT Id, Imi, Dochody FROM Osoby WHERE CONVERT(CHAR(3), Dochody) = '500'; Id Imi Dochody 3 Kamil 500 Konwertowania za pomoc tej funkcji mo|na dokonywa w sposób prawie nieograniczony poza przypadkami, gdy istniej: à Przecinki w danych konwertowanych na typ caBkowity bdz pieni|ny; à Miejsca dziesitne w danych konwertowanych ta typ numeryczny; à Litery w danych konwertowanych na typ numeryczny; à BBdnie zapisane lub nieprawidBowe nazwy miesicy w danych konwertowanych na daty. Copyright© mgr in|. RafaB MikoBajczak  Kopiowanie i rozpowszechnianie zabronione Trzeba w tym momencie zwróci uwag, |e w ORACLE równie| istnieje funkcja CONVERT( ), lecz jej przeznaczenie jest zupeBnie inne. W takim przypadku funkcja ta sBu|y bowiem do transformacji danych BaDcuchowych z jednego zestawu do innego. Je|eli chodzi natomiast o konwersj, o której mowa, w bazie danych ORACLE, to stosuje si tu funkcje wcze[niej ju| opisane TO_CHAR( ), TO_DATE( ) oraz funkcj do konwersji na typ numeryczny TO_NUMBER( ). INNE PRZYDATNE FUNKCJE Jzyk SQL posiada jeszcze inne funkcje uBatwiajce wyszukiwanie rekordów w bazie danych. Do nich zaliczaj si m. in. opisane w poprzednim rozdziale UPPER( ) i LOWER( ), sBu|ce do rozró|niania wielko[ci liter. Inne to: TRIM( ) Funkcja ta sBu|y do odrzucania spacji znajdujcych si przed i za BaDcuchem. Je|eli do naszej przykBadowej tabeli kto[ wprowadziBby Imi w takiej formie " Karolina " to zapytanie: SELECT Imi FROM Osoby WHERE TRIM (Imi) = 'Karolina'; zwróciBoby prawd. Je|eli chcemy porówna BaDcuchy typu CHAR z VARCHAR, to czasami nale|y u|y funkcji RTRIM ( ). LENGTH( ) Funkcja ta zwraca warto[ typu caBkowitego okre[lajc ilo[ znaków w BaDcuchu. Mo|na ni osign taki sam efekt jak u|ywajc instrukcji LIKE z podaniem odpowiedniej ilo[ci podkre[leD, ale jest o wiele wygodniejsza w u|yciu: SELECT Id, Imi FROM Osoby WHERE LENGTH (Imi) = 5; Id Imi 1 RafaB 2 Marek 3 Kamil CONVERT( ) Funkcja sBu|y do konwersji jednego typu danych na inny, nie jest jednak implementowana we wszystkich bazach danych, a je|eli ju|, to i tak mog wystpi ró|nice w wywoBaniu. Wicej na ten temat bdzie w pózniejszych rozdziaBach omawiajcych konkretne bazy danych. Standardowo wywoBanie takiej funkcji wyglda nastpujco: Copyright© mgr in|. RafaB MikoBajczak  Kopiowanie i rozpowszechnianie zabronione CONVERT (typ_danych [ (dBugo[) ], nazwa_pola); , czyli podajemy nazw_pola, któr chcemy zmieni i okre[lamy na jaki typ_danych + ewentualnie mo|emy poda dBugo[. Copyright© mgr in|. RafaB MikoBajczak  Kopiowanie i rozpowszechnianie zabronione

Wyszukiwarka

Podobne podstrony:
czesc12 dod
wyk4
Fot wyk4 int
Wyk4 Obserwacje GPS
CZESC1 (2)
Motywacja i emocje w sluzbie reklamy czesc1
isd wyk4
czesc12
wyk4 MS11
wyk4 linux pipe fifo
Wyk4 BEZP i OCHR
Teoria C 1D czesc1
swietemu bogu oddaj czesc1
WYK4 met graficzna
czesc1 wyk3

więcej podobnych podstron