# Charakterystyka składni języka SQL

### KOMENTARZE

- liniowy to podwójny znak myślnika "--"

- blokowy (obejmuje kilka wierszy). Początek bloku to " /* ", a koniec bloku to " */ ".

### OPERATOR KONKATENCJI

Pozwala na łąćzenie ze sobę ciągów, atrybutów, itp.. Operator ten to " + ".

np.: SELECT ('abc' + 'def'); uzyskamy "abcdef"

### LITERAŁY

Czyli stałe. (Wszystkie cyfry, ciągi znaków i daty, jeżeli nie są identyfikatorami, są traktowane jako stałe. W języku SQL ciągi znaków umieszcza się w apostrofach)

### SŁOWA KLUCZOWE

Czyli wyrazy interpretowane przez serwer bazodanowy w określony sposób. Słowa kluczowe to zastrzeżone, mające ściśle określone znaczenie ciągi znaków. Należą do nich instrukcje (SELECT, CREATE) i klauzule (WHERE,JOIN) języka SQL, nazwy typów danych (INTEGER, CHAR), nazwy funkcji systemowych (ISNUAL, ABS) oraz terminy zarezerwowane dla przyszłego użycia w danym serwerze bazodanowym.

### OPERATORY

odgrywają rolę spójników. Niektóre z nich mogą — ale nie powinny, bo instrukcje z nimi są czytelniejsze — być zastąpione odpowiednimi funkcjami. Operatory dzielą się arytmetyczne, znakowe, logiczne, porównania i dodatkowe, charakterystyczne dla języka SQL).

OPERATORY

Arytmetyczny | iloczyn | *
iloraz | /
modulo | %
suma | +
różnica | -
Znakowe | konkatencja | + lub ||
dowolna liczba znaków | %
zastępuje jeden znak | -
Logiczne | koniunkcja | AND
alternatywa | OR
negacja | NOT
Porównania | równy | =
mniejszy | <
większy | >
mniejszy lub równy | <=
większy lub równy | >=
różny lub nie równy | <> lub !=
Operatory relacji | przynależność do zbioru zamkniętego | BETWEN n AND n
przynależność do zbioru | IN(..)
dopasowanie do wzorca | LIKE
dopasowanie do wyrażenia regularnego | REGEXP, RLIKE
Sprawdzenie występowania wartości NULL | IS NULL

### SŁOWA KLUCZOWE

Podobnie jak w innych językach programowania są to słowa które nie mogą być użyte jako słowa klucze, ponieważ są zareserwowane (mają już określone co najmniej jedno znaczenie).
Np. identyfikator atrybutów nie może mieć nazwy "FROM", "SELECT", "CHAR", itp..

Przed wyborem identyfikatora kolumny należy sprawdzić dokumentację poszczególnych systemów bazodanowych, czy nie zamieszczono w niej słowa klucza.

# TYPY DANYCH

Nazwa | Opis
--- | ---
TINYINT | 1-bajtowe pole, przechowujące wartości całkowite bez znaku z przedziału od 0 do 255 lub ze znakiem z przedziału od -127 do 127
SMALLINT | 2-bajtowa wartość całkowita. Zakres wartości bez znaku od 0 do 65 535 lub ze znakiem od -32 768 do 32 768
MEDIUMINT | 3-bajtowa wartość całkowita. Zakres wartości od 0 do 16 777 215 lub ze znakiem od -8 388 608 do 8 388 608
INT | 4-bajtowa wartość całkowita. Zakres wartości ze znakiem od -2 147 483 648 do 2 147 483 647 lub bez znaku od 0 do 4 294 967 295
BIGINT | 8-bajtowa wartość całkowita. Typ BIGINT jest używany podczas przeprowadzania obliczeń. Stosując pola tego typu we własnej bazie danych należy uważać, aby ich wartości nie były zbyt duże, ponieważ użyte w obliczeniach mogą doprowadzić do błędu przepełnienia
FLOAT(dokładność) | Liczba zmiennoprzecinkowa z precyzją wyrażaną liczbą bajtów. Dwie wartości akceptowane jako precyzja to 4 i 8. Użycie 4 tworzy liczbę zmiennoprzecinkową o pojedynczej precyzji, natomiast 8 - liczbę zmiennoprzecinkową o podwójnej precyzji. Szczegóły dotyczące tych dwóch typów danych opisują pola FLOAT i DOUBLE
FLOAT | 4-bajtowa liczba zmiennoprzecinkowa z zakresu od -1.402823466E+38 do -1.175494351E-38, 0 i 1.175494351E-38 do 3.402823466E+38
DOUBLE | 8-bajtowa liczba zmiennoprzecinkowa przechowująca wartości z zakresu od -1.7976931348623157E+308 do -2.2250738585072014E-308, 0, i 2.2250738585072014E-308 do 1.7976931348623157E+308
DECIMAL | Pole zmiennoprzecinkowe o takiej samej pojemności jak DOUBLE. Liczba, zamiast zostać zredukowana do postaci szesnastkowej, pamiętana jest w formacie znakowym
DATE | Data (bez czasu), wyświetlana w formacie RRRR-MM-DD. Akceptuje daty w różnych formatach z zakresu od 1000-01-01 do 9999-12-31
DATETIME | Pole daty z czasem dnia wyświetlane według formatu RRRR-MM-DD GG:MM:SS. Może przechowywać wartości z zakresu od 1000-01-01 00:00:00 do 9999-12-31 23:59:59
TIMESTAMP | Data i czas liczony od początku epoki systemu UNIX, 1970-01-01 00:00:00, do momentu kiedy 32-bitowe pole przechowujące liczbę sekund, jaka upłynęła od tej daty ulegnie przepełnieniu w roku 2037. Jeśli polu temu nie została nadana wartość przez wyrażenie INSERT lub UPDATE, domyślnie otrzyma ono wartość daty bieżącej
TIME | Czas mieszczący się w przedziale od -838:59:59 do 838:59:59
YEAR | Rok. Dozwolone wartości to przedział od 1901 do 2155 oraz wartość 0000. MySQL wyświetla wartość typu YEAR w formacie RRRR
CHAR | Pole znakowe o stałej długości z zakresu od 1 do 255 bajtów. Po wstawieniu wartości puste miejsca pola CHAR są uzupełniane z prawej strony spacjami
VARCHAR | Pole znakowe o zmiennej długości z zakresu od 1 do 255 bajtów. Zajmowany jest jedynie taki obszar pamięci, jakiego wymaga wartość wstawiona w to pole
TINYBLOB, TINYTEXT | Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 255 bajtów
BLOB, TEXT | Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 65 535 bajtów
MEDIUMBLOB, MEDIUMTEXT | Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 16 777 215 bajtów
LONGBLOB, LONGTEXT | Kolumna binarna lub tekstowa o rozmiarze nie przekraczającym 4 294 967 295 bajtów
ENUM('elem1', 'elem2', ...) | Kolumna łańcuchowa, która może zawierać jedną z wartości wymienionych na liście wartości w definicji tej kolumny
SET('elem1', 'elem2', ...) | Kolumna łańcuchowa, która może zawierać dowolną liczbę wartości spośród wartości występujących na liście w definicji tej kolumny

# ZASADY TWORZENIA INDENTYFIKATORÓW

- maksymalna długość to 128 znaków
- identyfikatory nie zaczynają się od cyfr
- nie zawierają znaków: @ $ #
- identyfikatory zaczynające się "@" oznaczją zmienną
- identyfikatory zaczynające się "#" oznaczją obiekt tymczasowy
- identyfikatory nie mogą być słowami kluczowymi
- identyfikatory powinny opisywać jednoznacznie obiekt
- w nazwie nie stosuje się spacji - jeżeli zachodzi konieczność utworzenia identyfikatora 2-wyrazowego to wyrazy łączy się ze sobą (IdentyfikatorDwuwyrazowy)
- nie powinno się stosować mieszaniny dużych i małych liter (IdEnTyFiKaToR)
- identyfikatory funkcji definiowanych przez użytkownika powinny się zaczynać słowem "udf" (user define function - udfsinus)
- identyfikatory procedury definiowanej przez użytkownika powinien się zaczynać słowem "usp" (user store procedure - uspusun)
- identyfikatory widoku powinny się zaczynać literką "v" (view - vmojwidok)
- identyfikatory wyzwalacza powinien się zaczynać słowem "tr" (trigger - trmojwyzwalacz)
- przy nazwach tabel wielkość liter ma znaczenie

⇒ Spis treści ⇐

⇐ PREV NEXT ⇒