Składnia zapytań

Wybór rekordów z bazy
Przypuśćmy, że posiadamy bazę, w której istnieje tabela pracownicy. W tabeli zgromadzone są imiona, nazwiska oraz pensje pracowników, oraz unikalny numer. W tabeli początkowo znajduje się pięć rekordów, dopisywanych po zatrudnieniu kolejnych pracowników (kolejność nie zależy od nazwisk ani wynagrodzeń).

Wśród programistów przyjęło się, że dla czytelności słowa kluczowe specyficzne dla zapytań piszemy wielkimi literami. Ciągi znaków należy otaczać apostrofami, natomiast nazwy kolumn opcjonalnie można otaczać apostrofami lub odwrotnymi apostrofami.

Wybór wszystkich rekordów i wszystkich kolumn
Aby wybrać wszystkie rekordy z bazy i wyświetlić wszystkie kolumny w kolejności występowania, zapytanie powinno wyglądać następująco:

SELECT * FROM pracownicy

Zobaczmy, jakie dane zwróci powyższe zapytanie:

id imię nazwisko wynagrodzenie
1 Jan Kowalski 2300
2 Anna Nowak 2500
3 Robert Dąbrowski 1700
4 Wojciech Jaworski 1800
5 Agnieszka Ledwanowska 3500

Wybór konkretnych kolumn
Przy większych bazach wybieranie tylko potrzebnych kolumn może przynieść oszczędność czasu i zasobów potrzebnych na zwrócenie danych przez bazę.

SELECT imie, nazwisko FROM pracownicy

Otrzymamy tylko kolumny z imionami i nazwiskami:

imię nazwisko
Jan Kowalski
Anna Nowak
Robert Dąbrowski
Wojciech Jaworski
Agnieszka Ledwanowska

Wybór zakresu rekordów
Wyświetlenie osób zarabiających powyżej 2000 wymaga dopisania do zapytania warunku:

SELECT * FROM pracownicy WHERE wynagrodzenie>2000

Jeśli chcemy wyświetlić osoby z określonego przedziału zarobków, możemy użyć łączenia warunków:

SELECT * FROM pracownicy WHERE wynagrodzenie>2000 AND wynagrodzenie<3000

Warunki mogą posiadać również operator OR, a także być grupowane za pomocą nawiasów:

SELECT * FROM pracownicy WHERE (wynagrodzenie>2500 AND wynagrodzenie<3000) OR wynagrodzenie<2000

Sortowanie wyników
Baza danych oferuje sortowanie wyników według dowolnych kolumn i w dowolnym kierunku.

I tak, jeśli chcemy wyświetlić pracowników w kolejności alfabetycznej:

SELECT * FROM pracownicy ORDER BY nazwisko

Od najmniej zarabiających:

SELECT * FROM pracownicy ORDER BY wynagrodzenie DESC

Limitowanie rekordów
Wybierzmy z bazy trzech pracowników najlepiej zarabiających:

SELECT * FROM pracownicy ORDER BY wynagrodzenie DESC LIMIT 3

Witryny internetowe powszechnie stosują mechanizm stronicowania, na przykład wyświetlając tylko 10 komentarzy na jednej podstronie. Następne komentarze są wyświetlane na następnych podstronach. Przykładowe zapytanie dla trzeciej strony komentarzy mogło by wyglądać tak:

SELECT * FROM comments ORDER BY data DESC LIMIT 20, 10

Pierwsza wartość oznacza od którego rekordu rozpoczynamy wybór rekordów (począwszy od zera), druga ile rekordów chcemy wybrać. Oczywiście w skryptach PHP, za pierwszą wartość podstawimy zmienną, by skrypt działał dla każdej podstrony z wynikami.

Dopisywanie rekordów
Jeżeli chcemy wypełnić wszystkie pola, możemy użyć poniższego zapytania:

INSERT INTO pracownicy VALUES(6,'Arkadiusz','Krasicki',2300)

Proszę zwrócić uwagę, że otaczamy apostrofami tylko te wartości, które są ciągami znaków.

Pole id jest polem o automatycznie zwiększanej wartości (auto increment), zatem nie musimy podawać tej wartości. Wówczas musimy określić do których pól dopisujemy dane:

INSERT INTO pracownicy(imie,nazwisko,wynagrodzenie) VALUES('Jaroslaw','Myszkowski',2100)

Uaktualnianie rekordów
Uaktualnianie rekordów łączymy zazwyczaj z selekcją wyników, ponieważ gdybyśmy jej nie użyli, uaktualnilibyśmy wszystkie rekordy. Przykładowo, chcemy zwiększyć wynagrodzenie do kwoty 2000 tym pracownikom, którzy zarabiają mniej.

UPDATE pracownicy SET wynagrodzenie=2000 WHERE wynagrodzenie<2000

Możemy także zwiększyć wartość pola o konkretną wartość:

UPDATE pracownicy SET wynagrodzenie=(wynagrodzenie+300)  WHERE wynagrodzenie<2000

Usuwanie rekordów
Usuwanie rekordów również wymaga selekcji:

DELETE FROM pracownicy WHERE imie='Arkadiusz' AND nazwisko='Krasicki'

Łączenie tabel
Pobieranie danych z dwóch tabel jednocześnie jest bardzo dobrym pomysłem na ograniczenie liczby zapytań. Przypuśćmy, że posiadamy w bazie jeszcze jedną tabelę w której gromadzimy miejsce urodzenia naszych pracowników:

id miasto
1 Warszawa
2 Warszawa
3 Tarnów
4 Poznań
5 Bytom

Nie przechowujemy w niej już imion i nazwisk, tylko identyfikatory użytkowników. Aby pobrać imiona, nazwiska i miejsce urodzenia, należy użyć następującego zapytania:

SELECT imie, nazwisko, miasto FROM pracownicy  JOIN LEFT miasta ON pracownicy.id=miasta.id

imię nazwisko miasto
Jan Kowalski Warszawa
Anna Nowak Warszawa
Robert Dąbrowski Tarnów
Wojciech Jaworski Poznań
Agnieszka Ledwanowska Bytom

Powyższy efekt możemy uzyskać także za pomocą aliasów:

SELECT p.imie, p.nazwisko, m.miasto FROM pracownicy p, miasta m WHERE p.id = m.id