SQL - opis języka
Zapraszam do zapoznania się z popularnym językiem używanym do tworzenia zapytań do baz danych - Structured Query Language - SQL.

Niektóre wyrazy w opisie są podkreślone. Przytrzymaj wtedy nad nim wskaznik myszy, a zobaczysz wyjaśnienie.

Język SQL jest wykorzystywany w większości relacyjnych systemów baz danych.
Składnię języka można podzielić na następujące podgrupy:
> DDL (Data Definition Language) - używana w celu utrzymania struktury bazy danych;
> DML (Data Manipulation Language) - używana do zapewnienia bezpieczeństwa dostępu do bazy danych;
> DCL (Data Control Language) - używana przez użytkowników mających dostęp do bazy danych.

Tabele
Aby stworzyć tabelę, w której będą przechowywane dane, należy zdefiniować jej kolejne kolumny, tzn. dla każdej kolumny musimy określić nazwę, typ danych jakie będą w niej przechowywane oraz ich długość, która będzie zależna od typu danych oraz to, czy zezwolimy na pozostawienie w kolumnie wartości pustej (NULL).

Typy danych
W kolumnie mogą znajdować się dane różnych typów, jak np.:
> SMALLINT - liczby całkowite z przedziału -32768...32767
> INTEGER - liczby całkowite z przedziału -2147483648...2147483647
> DECIMAL(x,y) - liczby rzeczywiste, gdzie x oznacza całkowitą liczbę cyfr a y oznacza liczbę cyfr po przecinku
> CHAR(x) - łańcuch znakowy o stałej długości (max. 255 znaków)
> VARCHAR(x) - łańcuch znakowy o zmiennej długości
> DATE - data
> TIME - czas

Nazwa tabeli
Nazwa tabeli składa się z dwóch członów:
> właściciela tabeli, np. UZYTKOWNIK_2
> nazwy tabeli, np. OSOBY

Jednak ta konwencja nie jest stosowana we wszystkich relacyjnych bazach danych. Niekiedy wystarczy w odwołaniu do tabeli wpisać OSOBY zamiast UZYTKOWNIK_2.OSOBY.

Tworzenie tabeli
Stwórzmy przykładową tabelę zawierającą niektóre dane naszych przyjaciół:
CREATE TABLE UZYTKOWNIK_2.OSOBY
(
 ID_OSOBA CHAR(3) NOT NULL
 IMIE VARCHAR(20) NOT NULL
 NAZWISKO VARCHAR(30) NOT NULL
 WIEK CHAR(2) NOT NULL
 ULICA VARCHAR(30)
 MIASTO VARCHAR(15)
 TELEFON VARCHAR(12)
 EMAIL VARCHAR(30) NOT NULL
)


W powyższym przykładzie "nakazaliśmy" wprowadzenie niektórych wartości poprzez parametr NOT NULL.

Możemy też ustawić domyślną wartość dla danej kolumny, wpisując:
NOT NULL WITH DEFAULT [(wartosc)]

Udostępnianie tabeli
Aby udostępnić nasze dane innym użytkownikom, musimy zastosować polecenie GRANT. Ściślej mówiąc, tym poleceniem nadajemy odpowiednie uprawnienia do "naszej" tabeli.

Aby np. udostępnić użytkownikowi UZYTKOWNIK_2 prawo dokonywania zapytań SELECT do "naszej" tabeli OSOBY, wpiszemy:
GRANT SELECT ON OSOBY TO UZYTKOWNIK_2;

Aby odebrać nadane wcześniej uprawnienia używamy polecenia REVOKE, jak w przykładzie poniżej:
REVOKE SELECT ON OSOBY FROM UZYTKOWNIK_2;

Oprócz udostępnienia użytkownikom tworzenia zapytań SELECT, możemy też udostępnić wstawianie (INSERT) oraz aktualizowanie (UPDATE) danych w "naszej" tabeli.

Zapytania SQL poleceniem SELECT
Polecenie SELECT jest najpopularniejszym poleceniem języka SQL. Służy ono do wyszukiwania danych wg określonych w zapytaniu warunków.

Ogólna struktura polecenia SELECT jest następująca:
> SELECT [nazwy kolumn, wyrażenia, funkcje]
> FROM [nazwy tabel lub widoków]
> WHERE [warunek wyboru wierszy]
> GROUP BY [nazwy kolumn wg]
> HAVING [warunek grupowania wybranych wierszy]
> ORDER BY [nazwy lub pozycje kolumn]


Zastosowanie SQL w Visual Basic

Na podstawie poniższych przykładów omówię krótko każdy "składnik" polecenia SELECT.

Wybieranie wszystkich kolumn
Aby wybrać wszystkie kolumny z tabeli, wpisujemy:
SELECT *
FROM UZYTKOWNIK_2.OSOBY;


Wybieranie określonych kolmun
Aby wybrać wybrane kolumny z tabeli, wpisujemy:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY;


Wybieranie określonych kolmun z ich porządkowaniem
Aby wybrać wybrane kolumny z tabeli, uporządkowane alfabetycznie wg imion, wpisujemy:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
ORDER BY IMIE ASC;


Słowo kluczowe ASC określa sortowanie w porządku rosnącym (jest to sortowanie domyślne, więc używanie tego słowa kluczowego jest zbędne). Porządek malejący określa słowo DESC.

Ważne jest, żeby kolumna występująca w klauzuli ORDER BY występowała w zapytaniu.

Jeśli jest potrzeba sortowania wg dwóch (lub więcej kolumn), jest to możliwe poprzez umieszczenie większej liczby kolumn w klauzuli ORDER BY, jak poniżej:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
ORDER BY NAZWISKO, ULICA;


W klauzuli ORDER BY możemy się odwołać do kolumny poprzez wpisanie jej pozycji na liście SELECT. Powyższy przykład jest identyczny z:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
ORDER BY 2, ULICA;


W zapytaniu SELECT można użyć tylko jednej klauzuli ORDER BY, którą umieszczamy zawsze na końcu zapytania.

Wybieranie niepowtarzających się wierszy
Aby w wyniku wyszukiwania uniknąć powtarzających się wierszy, należy użyć słowa kluczowego DISTINCT, np.:
SELECT DISTINCT IMIE
FROM UZYTKOWNIK_2.OSOBY


Wybieranie określonych wierszy
Do wybierania określonych wierszy stosuje się klauzulę WHERE, w której określamy warunek dla szukanych wierszy, np.:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE IMIE='TOMASZ'


Imię "Tomasz" zostało otoczone apostrofami, ponieważ jest to zmienna typu tekstowego. W przypadku porównywania wartości liczbowych, nie muszą one być otoczone apostrofami (np. WHERE CENA>2000).

Stosowanie operatorów
W klauzuli WHERE możemy używać następujących operatorów logicznych:
> = (równe)
> <> (różne)
> > (większe)
> < (mniejsze)
> >= (większe lub równe)
> <= (mniejsze lub równe)

Ponadto, można także użyć operatorów AND i OR.
Pierwszy z nich określa, że conajmniej jeden z dwóch warunków musi zostać spełniony, natomiast drugi (OR) - wystarczy, że zostanie spełniony tylko jeden.

W poniższej tabeli przedstawiono różnice między operatorami AND i OR:

ZBIÓR FUNKCJA + OPERATORWYNIK
1 2 1 2 czerwone AND nieparzyste1
1 2 1 2 czerwone OR nieparzyste 1 1 2

Teraz możemy użyć operatorów w zapytaniu SQL, np. szukamy znajomych o imieniu "Tomasz" i wieku 25 lat:
SELECT IMIE, NAZWISKO, WIEK
FROM UZYTKOWNIK_2.OSOBY
WHERE IMIE='TOMASZ'
AND WIEK=25;


Podobnie, gdy np. szukamy osób mieszkających przy ul. Głogowskiej oraz - niezależnie od tego - pełnoletnich:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE ULICA='GLOGOWSKA'
OR WIEK>18;


Oczywiście operatory możemy łączyć w celu uzyskania bardziej złożonych warunków poszukiwań, np. znajdzmy pełnoletnich z ul. Głogowskiej oraz wszystkich o imieniu "Tomasz":
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE ULICA='GLOGOWSKA'
AND WIEK>18
OR IMIE='TOMASZ';


Jeżeli warunków nie otoczymy nawiasami, operator AND będzie "nadrzędny". Możemy to zmienić poprzez wstawienie do warunku wyszukiwania nawiasów:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE ULICA='GLOGOWSKA'
AND (WIEK>18
OR IMIE='TOMASZ');


W tym przypadku na liście znajdą się te osoby mieszkające na ul. Głogowskiej, które są pełnoletnie lub mają na imię Tomasz.

Predykat IN - porównywanie ze zbiorem
Predykat IN pozwala nam określić bezpośrednio w zapytaniu zbiór wartości do porównania, np.:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE IMIE IN ('TOMASZ', 'ANNA');


Wartości w zbiorze mogą być wszystkich typów (tekst, data, czas).

Predykat BETWEEN - szukanie w zakresie
Predykat BETWEEN pozwala sprawdzić, czy poszukiwana wartość zawiera się w wybranym zakresie, np.:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE WIEK BETWEEN 18 AND 25;


Powyższy warunek można też zapisać:
WHERE WIEK>18 AND WIEK<25;

Predykat NULL - szukanie wartości pustych
Aby wyszukać wiersze z wartościami pustymi (NULL), stosujemy predykat NULL, jak poniżej:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE EMAIL IS NULL;

Aby z kolei wyświetlić tylko te osoby, które posiadają adres e-mail, stosujemy predykat NOT NULL:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE EMAIL IS NOT NULL;


Predykat LIKE - szukanie częściowe
Jeśli chcemy wyszukać np. osoby, których imiona zaczynają się na wybraną literę, lub których nazwiska kończą się wg wybranej kombinacji, stosujemy predykat LIKE, jak poniżej:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE IMIE LIKE 'T%';


Powyższy zapis oznacza wskazanie pierwszej litery imienia. Aby wskazać zakończenie np. nazwiska, użyjemy:
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE NAZWISKO LIKE '%SKA';


Oczywiście, można powyższe kombinacje łączyć, uzyskując ciekawe zapytania. Np. znajdzmy osoby, których imiona mają drugą literę 'a' a nazwiska nie kończą się na 'ski':
SELECT IMIE, NAZWISKO
FROM UZYTKOWNIK_2.OSOBY
WHERE IMIE LIKE '_A'
AND NAZWISKO NOT LIKE '%SKI';


Jak widać, użyto znaku '_', który zastępuje dowolny jeden znak oraz predykatu NOT LIKE.

Funkcje arytmetyczne
W zapytaniu SQL możemy użyć następujących operatorów arytmetycznych w celu obliczenia nowych wartości:
+ dodawanie
- odejmowanie
* mnożenie
/ dzielenie


Operatorów tych możemy użyc do budowy bardziej rozbudowanych wyrażeń matematycznych, włącznie z użyciem nawiasów w celu zaznaczenia kolejności wykonywania działań, np.
SELECT IMIE, NAZWISKO, KIESZONKOWE, PENSJA + KIESZONKOWE
FROM UZYTKOWNIK_2.OSOBY
WHERE KIESZONKOWE > 100
ORDER BY NAZWISKO


Wynik zapytania zawiera obliczoną kolumnę, która domyślnie przyjmie nazwę 4, ponieważ jest 4-ta "w kolejności". Aby nazwać kolumnę wynikową, stosujemy słowo kluczowe AS, jak poniżej:
SELECT IMIE, NAZWISKO, KIESZONKOWE, PENSJA + KIESZONKOWE AS PIENIADZE_RAZEM
FROM UZYTKOWNIK_2.OSOBY
WHERE KIESZONKOWE > 100
ORDER BY NAZWISKO


W przypadku, gdy jakaś osoba z bazy danych będzie miała wpisane w pole PENSJA wartość NULL, wynik opisywanego powyżej zapytania SQL da nam w wybranym wierszu pustą wartość (tzn. w komórce nie będzie żadnego wpisu).
Aby uchronić się przed tym (a więc umożliwić wykonywanie operacji na pustych - zerowych - wpisach), stosujemy funkcję COALESCE, która zamienia wystąpienia wartości NULL na wartość zera, dzięki czemu staje się możliwe obliczanie funkcji arytmetycznych dla wierszy, które mają wpisane w wybranych kolumnach wartości NULL. Spójrzmy na przykład:
SELECT IMIE, NAZWISKO, KIESZONKOWE,
COALESCE (PENSJA, 0) + KIESZONKOWE AS PIENIADZE_RAZEM
FROM UZYTKOWNIK_2.OSOBY
WHERE KIESZONKOWE > 100
ORDER BY NAZWISKO


Funkcja COLAESCE umożliwia nam zastąpienie wartości NULL dowolnym wpisem, np.
SELECT IMIE, NAZWISKO,
COLAESCE (PENSJA, 'Nie pobiera pensji')
ORDER BY NAZWISKO


Polecam książki
Oto książki, z których dowiesz się więcej na temat opisywanych powyżej zagadnień.


To są tylko moje propozycje. Możesz samodzielnie poszukać książki:

 

 

Data ostatniej aktualizacji TEJ strony: 2002.01.01