Administracja bazami danych
III Wyszukiwanie informacji w bazie MySQL
1. Wyświetlanie i wyszukiwanie informacji w bazie
Oczywiste jest, że jeśli dodamy do tabeli tabele i rekordy, to możemy je też następnie
wyświetlić. Do wyświetlania rekordów w bazie służy polecenie „SELECT”, które posiada
całkiem sporo możliwości filtrowania i sortowania wyświetlanych informacji.
2. Wyświetlenie wszystkich rekordów i wszystkich kolumn tabeli
Aby wybrać wszystkie rekordy z bazy i wyświetlić wszystkie kolumny w kolejności
występowania, zapytanie powinno wyglądać następująco:
mysql> SELECT * FROM uczniowie;
Zapytanie wyświetli nam wszystkie informacje z tabeli „uczniowie”. Lista ta wyświetla
nam dane w takiej kolejności, w jakiej były one wpisywane do tabeli.
3. Wyświetlenie wybranych kolumn w tabeli
Nie zawsze chcemy jednak wyświetlać wszystkie kolumny w tabeli. Na szczęście
możemy ograniczyć ilość wyświetlanych informacji do tylko wybranych kolumn.
Przykładowo zapytanie:
mysql> SELECT imie, nazwisko FROM uczniowie;
Wyświetli nam wyłącznie imiona i nazwiska kolejnych uczniów.
4. Wybór zakresu rekordów
Oprócz limitowania wyświetlanych kolumn, możemy też przefiltrować rekordy, które
mają być wyświetlane. Możemy to zrobić dla liczb, np.
mysql> SELECT * from uczniowie WHERE id > 1';
oraz dla tekstów, przykładowo:
mysql> SELECT * from uczniowie WHERE miasto = 'Gdynia ';
Warto pamiętać, że w przeciwieństwie do programowania, tutaj znak równa się piszemy
za pomocą „=”, a nie „==”. Warunki też możemy łączyć, korzystając z operatorów „AND”
oraz „OR” przykładowo:
mysql> SELECT * FROM pracownicy WHERE wynagrodzenie>2000 AND
wynagrodzenie<3000;
5. Wybór zakresu rekordów przez dopasowanie
W poprzednim punkcie mogliśmy wybrać rekordy, które spełniały jakieś nałożone przez
nas kryteria. Jednak co, jeśli nie chcemy wyszukać wszystkich osób mieszkających w
Gdyni, tylko wszystkich, których miasto zamieszkania zaczyna się na literkę „G” lub
osoby, których imię kończy się na „a”. Jest na to rozwiązanie. Poniższe zapytanie wypisze
nam wszystkich uczniów, których nazwa miejscowości zaczyna się na litery „Gd”:
mysql> SELECT * FROM uczniowie WHERE miasto LIKE 'gd%';
Z kolei poniższe zapytanie wyświetli osoby, których imię kończy się na literę „a”.
mysql> SELECT * FROM uczniowie WHERE imie LIKE '%a';
Jednak możliwości dopasowania jest dużo więcej. Możemy wyświetlić osoby, których
nazwa miasta zawiera literkę „w”:
mysql> SELECT * FROM uczniowie WHERE miasto LIKE '%w%';
Możemy określić z ilu znaków ma składać się np. ich imię (ilość znaków podkreślenia
(„_”) – poniżej akurat 3).
mysql> SELECT * FROM uczniowie WHERE imie LIKE '___';
6. Sortowanie wyników
Dotychczas wszystkie rekordy wyświetlane były w kolejności ich wpisywania do tabeli.
Jednak baza danych oferuje sortowanie wyników według dowolnych kolumn i w
dowolnym kierunku. I tak, jeśli chcemy wyświetlić uczniów w kolejności alfabetycznej:
mysql> SELECT * FROM uczniowie ORDER BY nazwisko;
Natomiast jeśli chcielibyśmy posortować ich w odwrotnej kolejności, to musimy dodać,
po nazwie kolumny po które chcemy sortować, słowo kluczowe „DESC”:
mysql> SELECT * FROM uczniowie ORDER BY nazwisko DESC;
7. Limitowanie rekordów
Oprócz limitowania zakresu rekordów, możemy też po prostu ograniczyć liczbę wpisów,
które będą wyświetlane na ekranie. Poniższe zapytanie ograniczy liczbę wypisywanych
uczniów do jednego:
mysql> SELECT * FROM uczniowie LIMIT 1;
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:
mysql> 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ść podstawilibyśmy zmienną, by skrypt działał dla każdej podstrony z
wynikami.
8. Dodatkowe informacje
• Składnia zapytań wyszukujących:
http://www.webhelper.pl/kurs-
mysql/skladnia
• Dopasowanie rekordów:
http://dev.mysql.com/doc/refman/5.0/en/pattern-
matching.html
Zadania:
1. Utwórz bazę danych o nazwie szkola. Dodaj w tej bazię tabelę o nazwie „przedmioty”.
Niech ta tabela posiada kolumny: id, prowadzacy, nazwa_przedmiotu, ilosc_godzin.
Nadaj im odpowiednie typy oraz atrybuty. Dodaj do tej tabeli 10 rekordów.
2. Utwórz zapytanie, które wyświetli kolumny „prowadzący”, „nazwa_przedmiotu”, a
następnie ograniczy wyniki tylko do tych rekordów, gdzie ilosc_godzin jest większa od
100.
3. Utwórz zapytanie, które wyświetli wyłącznie nazwy przedmiotów, które kończą się na
literkę „a” i następnie ograniczy ich liczbę do 3, posortowaną w kolejności odwrotnej do
alfabetycznej.