Poniżej zamieszczam odrobinę wiedzy ogólnej z baz danych. Za punkt wyjściowy obiorę bazy danych Oracla, choć wiedza zawarta w tym artykuje jest bardziej ogólna.
Bazą danych możemy nazwać uporządkowany zbiór danych. Jest to chyba najprostrze możliwe wytłumaczenie. Dostęp do takich danych na komputerze odbywa się z kolei przez system zarządzania bazą danych (ang. database management system, DBMS). Dokładniej rzecz biorąc DBMS jest oprogramowaniem komputerowym, które umożliwia nam interakcje pomiędzy użytkownikiem, innymi apikacjami i danymi w bazie danych. Bazy danych dzielą się na rózne rodzaje. Nie będę zanudzał Was opisywaniem każdego rodzaju z osobna. To co napewno musisz wiedzieć na ten temat to to, że wśród tych wszystkich rodzajów baz danych mamy relacyjne bazy danych (SQL) i nierelacyjne bazy danych (NoSQL). W bazach relacyjnym mamy doczynienia z relacjami (powiązaniami) pomiędzy strukturami bazy danych (tabelami). W bazach NoSQL nacisk jest kładziony specyficzne zastosowania, np. na szybkość odczytu i zapisu dancyh. Mamy tutaj doczynienia z prostymi strukturami, np. klucz - wartość.
W relacyjnych bazach danych głównym sposobem operacji na danych jest język zapytań SQL (ang. Structured Query Language). Jak nazwa wskazuje jest to język operujący na zapytaniach. W jego skład wchodzą: - DML - język manipulowania danymi (Data Manipulation Language) - SELECT, INSERT, UPDATE, DELETE, MERGE - DDL - język definicji danych (Data Definition Language) - CREATE, ALTER, DROP, RENAME, TRUNCATE, COMMENT - DCL - język kontroli danych (Data Control Language) - GRANT, REVOKE Idąc w drugą stronę, poza składowymi SQL'a można także wyróżnić jego rozszerzenia takie jak np. PL/SQL, PL/pgSQL. Jest ich oczywiście o wiele więcej. Są to proceduralne języki programowania umożliwiające m.in. stosowanie zaawansowanych struktur sterujących.
Skoro wspomniałem o proceduralnych językach programowania w bazach danych, to tak samo jak w przypadku innych języków programowania warto wspomnieć o typach danych. Poniżej kilka z wielu typów występujących w Oracle. - VARCHAR2(size) - dane znakowe o zmiennej długości "size" (musi być określony maksymalny rozmiar nie przekraczający 4000 znaków, rozmiar minimalny to 1 znak. - CHAR[(size)] - dane znakowe o ustalonej długości "size" (rozmiar maksymalny nie może przekraczać 2000 znaków, rozmiar minimalny i domyślny to 1 znak. - NUMBER[(p,s)] - liczba o precyzji "p" i skali "s" (zakres precyzji wynosi od 1 do 38, zakres skali od -84 do 127). - DATE - wartość daty i godziny z dokładnością do sekundy, miedzy 1 stycznia 4712 r p.n.e. a 31 grudnia 9999 r n.e. - CLOB, BLOB - duże obiekty znakowe i binarne (do 4 GB). - BFILE - dane binarne przechowywane w pliku zewnętrznym. W Oracle mamy brak typu BOOL. Możemy zastąpić go char'em, np:
CREATE TABLE "table_name" ("column_name" CHAR CHECK ("column_name" IN ('N','Y'));ALTER TABLE "table_name" modify "column_name" CHECK ("column_name" IN ('N', 'Y'));
Więzy integralność to system reguł(warunków) gwarantujących, że relacje między wierszami w tabelach pokrewnych są prawidłowe, a użytkownik nie może przypadkowo usunąć lub zmienić danych pokrewnych. Więzy integralności wymuszają spójność danych w tabelach. NOT NULL - określa, że kolumna nie może zawierać wartości NULL. UNIQUE - określa kolumnę, której wartości muszą być unikatowe dla wszystkich wierszy w tabeli. PRIMARY KEY - klucz główny danej tabeli wymusza na wierszach unikatowość (tak jak ma to miejsce w przypadku UNIQUE). FOREIGN KEY - klucz obcy, ustanawia i wymusza związek klucza obcego miedzy dana kolumną, a kolumną tabeli, do której następuje odwołanie. CHECK - określa warunek, który musi być prawdziwy.
Funkcją możemy nazwac jakiś podprogram, który uruchamiamy z parametrami wejściowymi, a po zakończeniu działania funkcji dostajemy wynik. W bazach danych jak i w ogólnopojętym programowaniu mamy do czynienia z funkcjami wbudowanymi i funkcjami napisanymi przez nas. Poniżej kilka częsciej używanych funkcji wbudowanych. Funkcje operujące wielkością liter: LOWER(string) - konwertuje litery na małe litery. UPPER(string) - konwertuje litery na wielkie litery. INITCAP(string) - konwersja liter, pierwsza na dużą, pozostałe na małe. FUNKCJE OPERUJĄCE ZNAKAMI: CONCAT(string1, string2) - inaczej "||", łączy dwa stringi w jeden ciąg. Można łaczyć różne typy danych: CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, NCLOB. SUBSTR(n, m [, length]) - zwraca określonych n znaków z wart. znakowej począwszy od pozycji m. Opcjonalnie można podać liczbę znaków do zwrócenia. Domyślnie funkcja SUBSTR zwraca cały string. LENGHT(string) - zwraca długość stringa (ilość znaków). LPAD(string , length [, pad-string]) - uzupełnia wartość danym stringiem z lewej.
LPAD('Page 1',15,'*.')Result: '*.*.*.*.*Page 1'
RPAD(string , length [, pad-string]) - uzupełnia wartość danym stringiem z lewej.
RPAD('tech', 8, '0')Result: 'tech0000'
FUNKCJE LICZBOWE: ROUND(date|number [, decimal_places]) - zaokrąglenie danel liczby/daty.
ROUND(125.315)Result: 125
TRUNC(date|number [, format]) - ucięcie końcówki liczbowej/daty.
TRUNC(TO_DATE('22-AUG-03'), 'YEAR') Result: '01-JAN-03'
SELECT TRUNC(15.79,1) "Truncate" FROM DUAL; Truncate ---------- 15.7
FUNKCJE GRUPUJĄCE: AVG(col|expr) - średnia. COUNT(*|DISTINCT col) - liczba wierszy wraz z NULL, DISTINCT - liczba różnych wartości col. MAX(col|expr) - maksymalna wartość w "col|expr". MIN(col|expr) - minimalna wartość w "col|expr". SUM(col|expr) - suma wartości w "col|expr".
FUNKCJE OPERUJĄCE NA DATACH: SYSDATE - zwraca bieżącą datę i czas. MONTHS_BETWEEN(date1, date2) - liczba miesięcy między dwiema datami ADD_MONTHS(date, n) - dodanie "n" miesięcy do daty. NEXT_DAY(date, char) - nastęny dzień tygodnia po dacie, char może przyjmować wartości liczbowe określające dzień tygodnia.
SELECT NEXT_DAY('02-FEB-2001','TUESDAY') "NEXT DAY" FROM DUAL; NEXT DAY ----------- 06-FEB-2001
LAST_DAY(date) - ostatni dzień miesiąca.
SELECT SYSDATE, LAST_DAY(SYSDATE) "Last", LAST_DAY(SYSDATE) - SYSDATE "Days Left" FROM DUAL; SYSDATE Last Days Left --------- --------- ---------- 30-MAY-01 31-MAY-01 1
FUNKCJE KONWERTUJĄCE: TO_CHAR(number|date [, fmt] [, nlsparams]) - konwertuje liczbe/date na napis. TO_NUMBER(string [, fmt] [, nlsparams]) - konwertuje napis zawierający cyfry na liczbę. TO_DATE(string [, fmt] [, nlsparams]) - konwertuje napis reprezentujący datę na wartość daty. NVL(number|date|char, expr2) - konwersja wartośći NULL na rzeczywistą wartość takie samego typu. NVL2(expr1, expr2, expr3) - jeżeli expr1 nie jest NULL, funkcja zwraca expr2. W przeciwnym wypadku zwraca expr3. NULLIF(expr1, expr2) - porównuje dwa wyrażenia i zwraca NULL, jeżeli są równe. W przeciwnym wypadku zwraca expr1. COALESCE(expr1, expr2,..., exprn) - zwraca pierwsze wyrażenie z listy, które nie jest NULL.