| |
|
|
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 + OPERATOR | WYNIK |
|
1
2
1
2
| czerwone AND nieparzyste | 1 |
|
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ń.
|
| |
|
|
|
|