Rozdział 7: Pobieranie danych

Mamy zainstalowaną bazę danych MySQL u siebie. Mamy stworzoną bazę oraz tabele. Jesteśmy w stanie modyfikować owe tabele, tworzyć nowe oraz relacje między nimi. Za pomocą zapytania „insert” dodajemy treści do naszej bazy, natomiast nie jesteśmy w stanie ich ciągle odczytać. To zmieni się za chwilę.

Do wyciągania danych z bazy służy zapytanie „select„, ale po kolei.

Sprawdźmy jakie mamy bazy danych:

show databases;

Zobaczymy kolumnę z listą baz danych oczywiście, możemy teraz zacząć korzystać z jednej z nich wpisując:

use {nazwa_bazy};

Teraz możemy zobaczyć jakie mamy tabele:

show tables;
games
offers
users

Zapytanie select

Możemy teraz wyciągnąć informacje zawarte w jednej z tych kolumn za pomocą zapytania „select„.

SELECT * FROM `games`;

Rozbijmy powyższe zapytanie na części:

  • SELECT = pobierz
  • * = wszystko
  • FROM = z
  • `games` = tabelki o nazwie ‚games’

Efekt zapytania to oczywiście wyświetlenie wszystkich danych z tabeli „games„:

idtitle
1game1
2game2
3game3

Taki sam efekt osiągniemy jeśli wpiszemy np:

SELECT id, title FROM `baza`.`games`;

Jedna z różnic jakie wprowadza powyższy zapis to deklaracja nie tylko tabeli z której pragniemy pobrać dane, ale również nazwa bazy, możemy się więc śmiało domyśleć że zastępuje nam to użycie zapytania poprzedzającego „select„, czyli „use {nazwa_bazy}„.

Kolejną różnicą jest zastąpienie gwiazdki nazwami kolumn oddzielonych przecinkiem. Domyśleć się możemy, że dzięki takiemu zapisowi możemy zdecydować jakie kolumny nas interesują, nie musimy bowiem pobierać wszystkich, a jedynie wybrane kolumny.

Poniżej przedstawię to samo zapytanie, ale kolejny raz zmodyfikowane:

SELECT title as "nazwa gry" FROM `games`;

Przypuśćmy, że słowo „title” nie wiele mi mówi, wolał bym „nazwa gry” oraz kolumna „id” jest mi zbędna, problem ten rozwiązałem powyższym zapytaniem. Nie modyfikuje ono nazwy kolumny w bazie (nie jest to „alter table„) a jedynie modyfikuje wyświetlenie kolumny po pobraniu danych.

nazwa gry
game1
game2
game3

Nie jest łatwo, wprowadzam kolejne modyfikacje:

SELECT `games`.`title` as "nazwa gry" FROM `games`;

Zmiana polega na tym, że informuję bazę danych o którą kolumnę o nazwie „title” mi chodzi. Jaki jest tego sens ? Przecież w tabeli „games” mamy tylko jedną taką kolumnę i co więcej, nie możemy mieć drugiej o takiej samej nazwie.

Ma to sens w momencie gdy pobieramy dane z wielu tabel przy użyciu oczywiście jednego zapytania. W przypadku pobierania danych z wielu tabel, może nastąpić konflikt nazw kolumn, w takich przypadkach przy pomocy powyższego zapisu informujemy bazę, że pod nazwą „nazwa gry” chcemy wartość która jest w tabeli „games” i kolumnie „title„.