Podstawy MySQL

Bazy danych oparte o język SQL ( Structured Query Language ) są niewątpliwe bardzo popularne ( a są jakieś inne ? 😉 ) stąd powstało wiele systemów wykorzystujący ten język, który pod względem semantyki jest łatwy do zrozumienia dla człowieka. Jednym z najpopularniejszych systemów bazo-danowych jest MYSQL. Aby wykorzystywać możliwości tego systemu musimy poznać podstawowe zapytania SQL.

Przedstawię w poniższym opracowaniu przykłady pokazujące kilka podstawowych zapytań służących do: pobierania danych, aktualizowania i usuwania danych z naszej bazy.

W telegraficznym skrócie baza danych to zbiór tabel z danymi w których każda ma wiersze ( rekordy ) i pola ( kolumny ). Jest to uporządkowana struktura danych, która może mieć także relacje ale to już nie są podstawy więc ten temat tutaj pominiemy :)
Zaczynamy od najbardziej popularnego polecenia: SELECT

Terminologia

W poniższym artykule będziemy posługiwać się terminologią związaną z językiem SQL, takimi jak: rekord ( wiersz ), kolumna ( pole ), polecenie, klauzula, operatory logiczne.
W bazie danych mamy najczęściej jakiś zbiór tabel w których są trzymane nasze dane. Pojedyncza tabela wygląda tak:

rekordy i kolumny

rekordy i kolumny

Aby pracować z naszymi danymi potrzebna jest znajomość definiowania zapytań w języku SQL. Jeśli chodzi o polecenia SQL to najpopularniejsze z nich to: SELECT, UPDATE, DELETE, DROP i z takich poleceń będzie korzystań w niniejszym opracowaniu.
Jeśli chodzi o termin: klauzula dotyczy części składowych polecenia ( słowa kluczowe ). Klauzule, które będą wykorzystywane w poniższych przykładach to np.: WHERE, LIMIT, ORBER BY, LIMIT

1. Pobieranie danych:

* WYŚWIETL WSZYSTKO:

Poniżej mamy pierwszy przykład polecenia SQL, jest to polecenie SELECT

SELECT * FROM `nazwa_tabeli`;

Wyświetli wszystkie rekordy i pola z naszej tabeli: nazwa_tabeli. Każde polecenie SQL musi być zakończone średnikiem !

Jeśli chcemy wyświetlić tylko unikalne rekordy ( bez powtórzeń / duplikatów ) należy skorzystać z klauzuli DISTINCT zaraz po słowie SELECT:

SELECT DISTINCT * FROM `nazwa_tabeli`;
SELECT - określa pola jakie mają zostać pobrane. Symbol * oznacza: wszystkie pola !
FROM - z jakiej tabeli ma pobrać dane

Zalecane jest używanie znaku lewego apostrofu pomiędzy ` nazwami pól jak i tabel.

* WYŚWIETLANIE OKREŚLONEJ LICZBY REKORDÓW:

Jeśli chcemy ograniczyć ilość wyświetlanych rekordów lub pobrać określony zakres rekordów należy skorzystać ze słowa kluczowego: LIMIT:

SELECT `nazwa_1`, `nazwa_2` FROM `nazwa_tabeli` LIMIT 0, 30;

Wyświetli 30 rekordów poczynając od pobrania pierwszego rekordu – rekordy liczymy od 0, stąd też 0 to będzie nasz pierwszy rekord !
Żeby była jasność numer rekordu nie jest tożsamy z polem w którym mamy ID rekordu o atrybucie AUTO_INCREMENT, gdyż skasowanie rekordu/rekordów nie zmienia numeracji tych pól – numeracja w takim przypadku jest niezmienna i unikalna. Innymi słowy skasowanie pola , które ma ID = 15 nie spowoduje ponownego „przenumerowania”, poprostu pola o takim ID nie istnieje i tak powinno być aby była zachowana integralność bazy w kontekście relacyjności ( powiązań ) tabel.

Dla usystematyzowania wiedzy o klauzuli LIMIT jej składnia wygląda następująco:

LIMIT "nr rekordu", "ile rekordów pobrać"

I dwa warianty LIMIT:

LIMIT 5, 10 - pokaże 10 rekordów licząc od 6 ( numeracja od 0 ! )
LIMIT 5     - pokaże 5 pierwszy rekordów

Klauzule LIMIT dopisujemy na końcu naszego zapytania !

* WARUNKOWE POBIERANIE DANYCH

Pobieranie rekordów uwzględniając warunek, który musi być spełniony dla określonego pola/pól w każdym rekordzie – jeśli ma zostać wyświetlony:

SELECT * FROM `wp_users` WHERE `user_login` = 'patryk';

W tym wypadku zapytanie pobierze z bazy wszystkie rekordy, które zawierają wyraz ( literał ): patryk. Literały zaleca się umieszczać pomiędzy apostrofami pionowymi ( tzw. pojedynczy cudzysłów ). Jak ktoś jest spostrzegawczy zauważy, że zapytanie posiada nazwy tabeli i pola z bazy WordPressa :)

* WARUNEK DLA WZORCÓW

Jeśli jednak chcemy podczas porównywania wziać tylko część łańcucha tekstowego w polu, należy skorzystać z operatora LIKE:

SELECT * FROM `wp_users` WHERE `user_login` LIKE 'mac%' LIMIT 0, 5;

Wyświetli dane, jeśli w polu user_login znajdzie się ciąg pasujący do wzorca mac% czyli w naszym przypadku ( jeśli w user_login są nazwy użytkowników ) pobierze wszystkich użytkowników, których nazwa zaczyna się od: mac.
Samo LIKE nie bierze pod uwagę wielkości liter ! Jeśli wymagana jest dokładność dotycząca wielkości liter wykorzystujemy operator złożony: LIKE BINARY.

* SORTOWANIE

Proste sortowanie możemy wykonać wykorzystując klauzulę ORDER BY.
Dla przykładu tabela z użytkownikami systemu WordPress:

SELECT * FROM `wp_users` ORDER BY `ID` DESC;

Po klauzuli ORDER BY podaje się pole/pola wg których ma być dokonywane sortowanie. Domyślnym parametrem tej klauzuli jest ASC czyli sortowanie rosnące, jeśli chcemy skorzystać z sortowania malejącego korzystamy z parametru DESC.

* OPERATORY LOGICZNE – ZŁOŻONE WARUNKI

Nierzadko zachodzi potrzeba, aby pobrać dane uwzględniające kilka warunków pobierających dane z bazy w celu uściślenia wyników naszego zapytania.
Służą do tego operatory logiczne takie jak:
AND, OR, IN, BETWEEN, NOT.

+ Operator AND ( i ) łączy dwa warunki i oba muszą być spełnione ( TRUE ) aby rekord został wyświetlony. Jeśli pierwszy z nich jest fałszywy to drugiego już system nie musi sprawdzać w związku z tym kolejność warunku pod kątem optymalizacji ma znaczenie :)

SELECT * FROM `nazwa_tabeli` WHERE `pole` > 5 AND `pole` < 15;

W wyniku otrzymamy wszystkie rekordy, których pole ma wartości większe od 5 i jednocześnie mniejsze od 15. W ten sposób zapytanie zwraca nam określony zakres rekordów.

+ Operator OR ( lub ) jeden z warunków musi być prawdziwy:

SELECT * FROM `nazwa_tabeli` WHERE `miasto` = 'Warszawa' OR 'Szczecin';

Wyniki będą zawierać tylko te rekordy w których pole miasto zawierało nazwę miasta Warszawa lub Szczecin.

+ Operator BETWEEN pobiera dane z określonego przedziału:

SELECT * FROM `nazwa_tabeli` WHERE `ID` BETWEEN 10 AND 15;

Zostaną pobrane wszystkie rekordy począwszy od rekordu 10-tego a kończąc na 15-stym. To samo możemy uzyskać wykorzystując operator AND i znaki określające mniejszość/większość lub równość:

SELECT * FROM `wp_users` WHERE `ID` >= 10 AND `ID` <= 15;

Trzeba pamiętać, że operator BETWEEN dotyczy operacji na jednym polu a w przypadku operatora AND możemy a nawet musimy podać 2 pola, więc jeśli musimy brać pod uwagę dwa różne pola to trzeba skorzystać z operatora AND.

2. Modyfikacja danych

Do modyfikowania danych w tabelach bazy danych służy polecenie UPDATE, co pokazuje poniższy przykład:

UPDATE `nazwa_tabeli` SET `nasze_pole`='nowa_wartosc' WHERE `id` = 15;

Zostanie zaktualizowane pole: „nasze_pole” zastępując starą wartość nową: „nowa_wartosc„. Aktualizacja dotyczy tylko i wyłącznie rekordu w którym pole „id” ma wartość 15. Gdyby jednak w innych rekordach pola „id” miały również wartość: 15 to one także zostałyby zaktualizowane.
UWAGA: jeśli nie podasz warunku, który określałby jakie rekordy mają być aktualizowane, wtedy wszystkie rekordy będą brane pod uwagę przy zmianie naszego pola – co może grozić małą katastrofą. Także tutaj szczególnie należy uważać !!!

3. Usuwanie rekordów

Do usuwania rekordów z tabeli służy polecenie DELETE. Oto przykład:

DELETE FROM `nazwa_tabeli` WHERE `imie` = 'Alvaro';

Zostaną skasowane wszystkie rekordy w których pole „imie” zawierało ciąg tekstowy: Alvaro.
UWAGA: Pominięcie warunku WHERE będzie skutkowało usunięciem wszystkich rekordów w tabeli !

4. Usuwanie tabeli

Tutaj sprawa jest dość prosta, gdyż i zapytanie jest krótkie i jasne:

DROP TABLE `nazwa_tabeli`;

Jeśli tabela nie zostanie skasowana to znaczy, że najprawdopodobniej nie mam uprawnień do tego polecenia !

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *


+ 3 = sześć

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre user="" computer="" escaped="">