Tablice_informatyczne_SQL_Wydanie_III_tisql3.pdf

(165 KB) Pobierz
SQL
STRUKTURALNY JĘZYK
ZAPYTAŃ (SQL)
SQL (ang.
Structured Query Language)
jest jednym z najpopu-
larniejszych języków programowania i najczęściej używanym
językiem w pracy z danymi. Sukces ten język SQL zawdzięcza:
• Swojej prostocie. Język SQL jest językiem deklaratywnym,
czyli zamiast krok po kroku określać, jak serwer bazo-
danowy ma wykonać określone polecenie, użytkownik
deklaruje, w języku przypominającym potoczny angiel-
ski, spodziewany wynik. W przeciwieństwie do języków
proceduralnych
SQL pozwala określić wynik, nie sposób
jego osiągnięcia.
• Wydajności i skalowalności. Serwery relacyjnych baz
danych są w stanie w czasie rzeczywistym przetwarzać
terabajty danych, o ile tylko użyte zostaną poprawne
instrukcje języka SQL. Możliwe jest to dzięki wyjąt-
kowej cesze języka SQL — w odróżnieniu od innych
języków
SQL umożliwia przetwarzanie wielu rekordów
za pomocą pojedynczej instrukcji.
Instrukcje języka
SQL przed wykonaniem są interpretowane przez ser-
wer bazodanowy. Wynikiem tej interpretacji jest plan
wykonania instrukcji, który następnie jest realizowany
przez serwer.
Wydanie III
TABLICE INFORMATYCZNE •
Marcin Szeliga
Schemat przykładowej bazy danych Northwind udostępnianej przez firmę Microsoft.
Relacyjny model baz danych
Bazą danych jest zbiór informacji o ściśle określonej struk-
turze — dane te są przechowywane w tabelach i są uzu-
pełnione o metadane (dane o samych tabelach, np. typach
ich kolumn). W modelu relacyjnym dane są przechowywane
w wielu odrębnych, ale powiązanych ze sobą tabelach —
dwuwymiarowych obiektach zbudowanych z pionowych
kolumn i poziomych wierszy, na których przecięciu umiesz-
czone są komórki.
W poszczególnych kolumnach tabeli znajdują się
zawsze dane tego samego typu (np. ceny), z kolei w po-
szczególnych wierszach znajduje się komplet informacji
o konkretnych obiektach (np. o towarze). Ważną cechą
tabeli jest to, że każdy jej rekord składa się z takiej samej
liczby pól (kolumn).
Niezbędna dla opanowania języka SQL jest umie-
jętność wyobrażenia sobie tabel jako zbiorów rekordów.
W zbiorze kolejność elementów nie ma znaczenia, a więc
kolejność wierszy i kolumn tabeli również jest bez znaczenia.
Ponadto zbiory nie zawierają kopii tego samego elemen-
tu. Ponieważ powtórzenie w tabeli tego samego rekordu
prowadzi do niespójności danych, przyjęło się dodawać do
tabeli specjalną kolumnę, w której zapisuje się identyfikatory
poszczególnych wierszy. Taka kolumna nazywa się
kluczem
podstawowym
tabeli.
DEFAULT
przekazuje do procedury domyślne, okre-
ślone podczas jej tworzenia wartości parametrów
wywołania;
WITH RECOMPILE
wymusza ponowną kompilację kodu
wywoływanej procedury lub funkcji, co wiąże się z ob-
liczeniem nowego planu jej wykonania, bazującego na
aktualnych statystykach.
Operatory logiczne
Operatory logiczne są wykorzystywane najczęściej do
łączenia warunków umieszczonych w klauzulach
WHERE
i
HAVING.
Występują trzy operatory logiczne:
• Koniunkcji (AND), zwracający wartość
1
(prawda), jeżeli
oba wyrażenia są prawdziwe. Operator
AND
jest opera-
torem dwuargumentowym. W klasycznej logice koniunk-
cja jest prawdziwa tylko wtedy, gdy oba argumenty są
prawdziwe, w pozostałych przypadkach jej wynikiem jest
fałsz. Wszystkie kombinacje parametrów tego operatora
możliwe w języku SQL zostały przedstawione poniżej.
A
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
NULL
NULL
NULL
B
TRUE
FALSE
NULL
TRUE
FALSE
NULL
TRUE
FALSE
NULL
A AND B
TRUE
FALSE
UNKNOWN
FALSE
FALSE
FALSE
UNKNOWN
FALSE
UNKNOWN
Wyrażenia
Wyrażenia są połączeniem symboli i operatorów, które repre-
zentują pojedynczą wartość. Typ reprezentowanych danych
zależy od typu elementów wyrażenia.
Zmienne
Zmienne charakteryzują się nazwą, typem i wartością. Dzięki
zmiennym możemy:
• Przechowywać wartości zwrócone przez funkcje
w celu ich późniejszego wykorzystania (w standardzie
SQL funkcjonalnym odpowiednikiem zmiennych są
podzapytania).
• Wielokrotnie wykorzystywać ten sam kod do wykonywania
operacji na różnych danych wejściowych.
Instrukcja DECLARE
Wykonanie instrukcji
DECLARE
spowoduje utworzenie
zmiennej o określonej nazwie i typie. Wartość zadeklarowanej
zmiennej domyślnie jest ustawiana na
NULL.
Składnia DECLARE
DECLARE
{{@zmienna [AS]
typ
} | [ =
wartość
] }
| {@kursor CURSOR}
| {typ_tabeli}
} [,…n]
<
typ_tabeli
> ::=
TABLE ({<
definicja_kolumny
> |
<
ograniczenie
>} [,…n]
)
Identyfikatory
Identyfikatory określające obiekty (np. tabele) i umożliwiające
odwoływanie się do przechowywanych w nich danych lub
do ich metod, zdarzeń czy właściwości muszą być zgodne
z przyjętą konwencją nazewniczą:
• Identyfikatory mogą składać się z nie więcej niż 128
znaków.
• Pierwszym znakiem identyfikatora musi być litera al-
fabetu.
• Identyfikator nie może być słowem zastrzeżonym ję-
zyka SQL.
• Identyfikator może zawierać litery, cyfry oraz symbole:
@,
#, _.
Wynika z tego, że identyfikatory nie mogą zawierać
spacji ani pozostałych symboli specjalnych.
Identyfikatory niezgodne z konwencją nazewniczą muszą
być wyróżniane za pomocą cudzysłowów lub nawiasów
kwadratowych.
Znaczniki języka
Instrukcje języka SQL zapisuje się za pomocą słów i symboli
(znaczników) o ściśle określonym znaczeniu. Znaczniki struk-
turalnego języka zapytań można podzielić na dziewięć grup.
Komentarze
Komentarze to ciągi znaków ignorowane przez kompilator.
Tekst komentarza jest wyróżniany za pomocą znaków
/* */.
Kompilator ignoruje wszystkie znaki znajdujące się między
tymi znacznikami.
Zdefiniowanym w standardzie ANSI znakiem komen-
tarza na poziomie wiersza są dwa myślniki (—
—).
Kompilator
ignoruje znaki znajdujące się po prawej stronie myślników.
Dyrektywy sterujące wykonaniem instrukcji
Serwery baz danych ignorują występujące w instrukcjach
SQL znaki końca wiersza — dla poprawy czytelności instruk-
cji przyjęło się zapisywać ich poszczególne klauzule w no-
wych wierszach. Koniec instrukcji oznacza się symbolem
;.
Do wywołania procedury składowanej służy dyrektywa
CALL.
Umożliwia ona przekazanie parametrów do wywoływa-
nej procedury i odczytanie wyniku jej działania. W serwerze
SQL Server dyrektywa
CALL
została zastąpiona dyrektywą
EXEC
(EXECUTE). Oprócz wywołania procedury umożliwia
ona wykonywanie ciągu znaków, będącego instrukcją języka
SQL (wykonywanie tworzonych dynamicznie instrukcji SQL).
Składnia EXECUTE
[[EXEC [UTE]]
{
[@zwrócony_stan_wykonania =]
{nazwa_procedury [;liczba] |
@nazwa_
procedury
}
[[@parametr =] {wartość |
@zmienna
[OUTPUT]
| [DEFAULT]]
[,…n]
[WITH RECOMPILE]
• Alternatywy (OR), zwracający wartość
1
(prawda), jeżeli
którekolwiek z wyrażeń jest prawdziwe. Operator
OR
jest
operatorem dwuargumentowym. W klasycznej logice
alternatywa jest nieprawdziwa tylko wtedy, gdy oba jej
argumenty są nieprawdziwe, w pozostałych przypadkach
wynikiem alternatywy logicznej jest prawda. Wszystkie
kombinacje parametrów tego operatora możliwe w języku
SQL zostały przedstawione poniżej.
A
TRUE
TRUE
TRUE
FALSE
FALSE
FALSE
NULL
NULL
NULL
TRUE
FALSE
NULL
TRUE
FALSE
NULL
TRUE
FALSE
NULL
B
A OR B
TRUE
TRUE
TRUE
TRUE
FALSE
UNKNOWN
TRUE
UNKNOWN
UNKNOWN
gdzie:
CURSOR
określa, że zmienna będzie kursorem.
Instrukcja SET
Nadaje wartość zdefiniowanej zmiennej.
Składnia SET
SET
@zmienna
=
wyrażenie
Słowa kluczowe
Słowa kluczowe są ciągami znaków mających ściśle okre-
ślone znaczenie i interpretowanych przez serwer baz danych
w sposób charakterystyczny dla słowa kluczowego. Nie-
dopuszczalne jest używanie słów kluczowych niezgodnie
z określonymi dla nich zasadami syntaktycznymi (np. w nie-
właściwej dla słowa klauzuli) oraz niezgodnie z określonymi
dla nich zasadami semantycznymi (ich znaczeniem).
Przykład SET
DECLARE @znajdź VARCHAR(30) = ‘%’
DECLATE @wynik VARCHAR(50)
SET @znajdź = ‘Fra%’
SELECT @wynik = Address
FROM Customers
WHERE CompanyName LIKE @znajdź;
Operatory
Operatory odgrywają rolę spójników języka SQL i choć
w większości przypadków mogą być zastąpione odpo-
wiednią funkcją, to ich użycie poprawia czytelność kodu
programu. Funkcja każdego operatora zależy od kontekstu
jego wystąpienia.
Operatory arytmetyczne
W języku SQL występują takie oto operatory arytmetyczne:
• iloczyn (*),
• iloraz (/),
• modulo (%),
• suma (+),
• różnica (-).
Operator ciągów znaków
Jedynym operatorem ciągów znaków jest operator konkate-
nacji
||
(w serwerze SQL Server operatorem konkatenacji
jest znak
+).
Pozostałe operacje na ciągach znaków są
przeprowadzane przez odpowiednie funkcje ciągu znaków.
Funkcje
Funkcje języka SQL można podzielić na pięć kategorii:
1. Funkcje sterujące wykonaniem programu.
2. Funkcje skalarne, które zwracają pojedynczą wartość
obliczoną na podstawie zera lub większej liczby argu-
mentów skalarnych.
3. Funkcje grupujące, które zwracają pojedynczą wartość
dla zbioru argumentów wywołania.
4. Zwracające zbiory danych funkcje tabelaryczne, do któ-
rych można się odwoływać jak do tabel, w klauzuli
FROM
instrukcji
SELECT.
5. Funkcje analityczne (funkcje rankingu), które umożliwiają
przeprowadzenie obliczeń na zbiorach wierszy powiąza-
nych z wynikiem bieżącego zapytania.
gdzie:
@zwrócony_stan_wykonania
jest opcjonalną zmien-
ną lokalną, przechowującą informacje o stanie wykonania
wywoływanej procedury lub funkcji;
@nazwa_procedury
jest nazwą zmiennej lokalnej,
przechowującej nazwę wywoływanego obiektu;
OUTPUT
określa, że wywoływana procedura jest funkcją
zwracającą jakąś wartość;
• Negacji (NOT), zwracający wartość
1
(prawda), jeżeli wy-
rażenie było fałszem, i
0
w przeciwnym razie. Operator
NOT
jest operatorem jednoargumentowym. W klasycznej
logice jego wynikiem jest zaprzeczenie (negacja) argu-
mentu. W języku SQL może on również zwrócić wartość
UNKNOWN.
A
TRUE
FALSE
NULL
NOT A
FALSE
TRUE
UNKNOWN
Zgłoś jeśli naruszono regulamin