strona nr 1 Warunki Warunki w zapytaniu SELECT umożliwiaj ą dokładniejsze określanie, jakie rekordy maj ą zosta ć wybrane. Możesz wybra ć na przykład rekord o numerze id równym 3. Jak zwykle w warunkach możesz używa ć operatorów porównania. Poniższa tabela przedstawia dostępne operatory dla warunków: = Równość <>,!= Nierówność < Mniejsze > Wię ksze <= Mniejsze równe >= Wię ksze równe Spójrzmy ma przykład wybierający rekord o numerze id równym 3: SELECT * FROM ksiazka_adresowa WHERE id = 3; -------------------+-----------+-------+ telefon email -------------------+-----------+-------+ 3 <podaj imie> ul. Warszawska 15 468-34-75 NULL -------------------+-----------+-------+ 1 row in set (0.06 sec) Możesz oczywiście podawa ć więcej ni ż jeden warunek. Do łączenia warunków słu żą operatory logiczne, takie jak AND i OR: SELECT id, imie, telefon FROM ksiazka_adresowa WHERE (id>=2 AND id<4) OR (imie='jan'); -----------+ id imie telefon -----------+ 1 Jan 888-55-41 2 777-33-84 3 <podaj imie> 468-34-75 -----------+ 3 rows in set (0.05 sec) Jak wida ć na powyższym przykładzie, grupy warunków umieszcza si ę w nawiasach. Wyraż enie IN Zamiast podawa ć grupy warunków dla wartości, które mog ą znale źć si ę w grupie wyników, można posłuży ć si ę wyrażeniem IN. Spójrzmy najpierw na przykład wybierania rekordów zawierających numer id równy 1, 2 lub 4: SELECT id, adres FROM ksiazka_adresowa WHERE id=1 OR id=2 OR id=4;
strona nr 2 id adres 1 ul. Wrocł 2 ul Krakowska 16 4 NULL To samo można zapisa ć znacznie prościej za pomoc ą wyrażenie IN, które definiuje grup ę dopuszczalnych wartoś ci dla pola: SELECT id, adres FROM ksiazka_adresowa WHERE id IN(1,2,4); id adres 1 ul. Wrocł 2 ul Krakowska 16 4 NULL Jak wida ć użycie tego wyraż enia znacznie upraszcza zapytanie SQL. Wyraż enie BETWEEN Wyrażenie between ( ang: pomię dzy) umożliwia określenie górnego i dolnego zakresu dla wartości pól rekordu. Spójrzmy najpierw na przykład wybierania rekordów o numerach id od 1 do 3 za pomoc ą standardowego WHERE: SELECT id, telefon, email FROM ksiazka_adresowa WHERE id>=1 AND id<=3; id telefon email 1 888-55-41 jan@email.pl 2 777-33-84 zebra@zoo.pl 3 468-34-75 NULL A teraz za pomoc ą wyrażenia BETWEEN: SELECT id, telefon, email FROM ksiazka_adresowa WHERE id BETWEEN 1 AND 3; id telefon email 1 888-55-41 jan@email.pl 2 777-33-84 zebra@zoo.pl 3 468-34-75 NULL
strona nr 3 Jak wida ć, użycie tego wyraż enia znacznie upraszcza zapytanie. Wyraż enie NOT Wyrażenie NOT pozwala zanegowa ć wyrażenie takie jak IN czy BETWEEN. Spójrzmy na przykład wybierania rekordów z pominięciem rekordów o id równym 1 i 3: SELECT id, imie, adres FROM ksiazka_adresowa WHERE id NOT IN(1,3); 4 <podaj imie> NULL Spójrzmy jeszcze na przykład wybierania rekordów, których numer przedziale od 2 do 4: id nie zawiera si ę w SELECT id, telefon FROM ksiazka_adresowa WHERE id NOT BETWEEN 2 AND 4; +----+-----------+ id telefon +----+-----------+ 1 888-55-41 +----+-----------+ 1 row in set (0.00 sec) Sortowanie Domyślnie wybrane rekordy s ą sortowane w takiej kolejności, w jakiej zostały dodane do bazy. Można jednak t ę kolejno ść zmieni ć używając polecenia ORDER BY. Spójrzmy na przykład wybierający z bazy danych rekordy posortowane wedł ug imienia: SELECT id, imie, adres FROM ksiazka_adresowa ORDER BY imie; 3 <podaj imie> ul. Warszawska 15 4 <podaj imie> NULL 1 Jan ul. Wrocł
strona nr 4 4 rows in set (0.00 sec) Kolejno ść rekordów zmieniła si ę, co najlepiej uwidacznia kolumna z numerami id. Spróbujmy jeszcze posortowa ć rekordy wedł ug dwu pól: imienia i adresu: SELECT id, imie, adres FROM ksiazka_adresowa ORDER BY imie, adres; 4 <podaj imie> NULL 3 <podaj imie> ul. Warszawska 15 1 Jan ul. Wrocł 4 rows in set (0.00 sec) Jak wida ć, wyniki zostały posortowane według imienia, a te, które miały tak ą sam ą warto ść w tym polu, zostały dodatkowo posortowane według pola adres. Możesz wpływa ć na kierunek sortowania za pomoc ą słów kluczowych ASC (domyślnie) i DESC (kierunek odwrotny). Spróbujmy zatem posortowa ć numery id w odwrotnej kolejnoś ci: SELECT id, imie, adres FROM ksiazka_adresowa ORDER BY id DESC; 4 <podaj imie> NULL 3 <podaj imie> ul. Warszawska 15 1 Jan ul. Wrocł 4 rows in set (0.00 sec) Sł owo kluczowe DISTINCT Czasem zachodzi potrzeba, aby wśród podanych w jednej kolumnie wyników zapytania nie powtarzały si ę wartości. Do tego celu służy słowo kluczowe DISTINCT. Spójrzmy najpierw na normalne wybieranie wartości kolumny SELECT imie FROM ksiazka_adresowa; imie Jan <podaj imie> <podaj imie> imie:
strona nr 5 4 rows in set (0.00 sec) Jak wida ć warto ść '<podaj imie>' występuje dwa razy. Spójrzmy teraz na wynik po użyciu słowa kluczowego DISTINCT: SELECT DISTINCT imie FROM ksiazka_adresowa; imie Jan <podaj imie> Jak wida ć wartości si ę ju ż nie powtarzaj ą. Porównanie LIKE Porównanie LIKE umożliwia tworzenie wzorców w zapytaniach. Spójrzmy na przykład wybierający pozycj ę w których pole imie na warto ść '<podaj imie>', za pomoc ą typowego warunku WHERE: SELECT id, imie FROM ksiazka_adresowa WHERE imie='<podaj imie>'; id imie 3 <podaj imie> 4 <podaj imie> A teraz za pomoc ą porównania LIKE: SELECT id, imie FROM ksiazka_adresowa WHERE imie LIKE '<%>'; id imie 3 <podaj imie> 4 <podaj imie> Jak wida ć, wynik jest ten sam, a możliwości wię ksze. Znak % onacza dowolny ciąg znaków, natomiast znak _ oznacza dokł adnie jeden znak:
strona nr 6 SELECT id, imie, adres FROM ksiazka_adresowa WHERE imie LIKE '_an'; 1 Jan ul. Wrocł 1 row in set (0.00 sec) Porcjowanie wyników zapytania Jeżeli nie interesuj ą nas wszystkie rekordy pasujące do zapytania, a na przykład jedynie pierwsze 10, możesz posłuży ć si ę klauzul ą LIMIT. Spójrzmy na przykład wybierający z naszej książki adresowej tylko pierwsze dwa rekordy: SELECT id, imie, adres FROM ksiazka_adresowa LIMIT 2; 1 Jan ul. Wrocł Jak wida ć, aby zaznaczy ć, że chcesz otrzyma ć określon ą liczb ę rekordów, powinno si ę posłuży ć si ę klauzul ą LIMIT, po której podasz odpowiedni ą warto ść. Spójrzmy na przykład pobierania dwóch rekordów, począwszy od drugiego (dla MySQL-a będzie to jednak rekord 1, poniewa ż tutaj rekordy liczy si ę, zaczynają c od zera): SELECT id, imie, adres FROM ksiazka_adresowa LIMIT 1,2; 3 <podaj imie> ul. Warszawska 15 Jak wida ć z powyższego przykładu, aby pobra ć określon ą liczb ę rekordów, począwszy od ustalonego, podajemy po przecinku numer rekordu początkowego i liczb ę rekordów z zbiorze zapytania. Pierwszy przykład pobierania dwóch rekordów można równie ż zapisa ć, podając rekord, od którego ma si ę zacz ąć pobieranie wyników (czyli podamy zera jako pozycj ę pierwszego rekordu):
strona nr 7 SELECT id, imie, adres FROM ksiazka_adresowa LIMIT 0,2; 1 Jan ul. Wrocł MODYFIKACJA REKORDÓW Zauważyłe ś pewnie że pozycja dodana jako druga, po skrócie 'ul' nie zawiera kropki. Spróbujmy teraz to poprawi ć za pomoc ą polecenia UPDATE. Składnia tego polecenia przedstawia si ę następują co: UPDATE <nazwa_bazy>.<nazwa_tabeli> SET <nazwa_pola> = 'warto ść' WHERE <warunek> lub UPDATE <nazwa_tabeli> SET <nazwa_pola> = 'warto ść ' WHERE <warunek> jeżeli wcześniej zostało uż yte polecenie use <nazwa_bazy>. Spróbujmy zatem poprawi ć warto ść pola adres, które ma id numer 2: UPDATE ksiazka_adresowa SET adres = 'ul. Krakowska 16' WHERE id = 2; Query OK, 1 row affected (0.05 sec) Rows matched: 1 Changed: 1 Warnings: 0 Spójrzmy teraz na rekord o numerze id równym 2: SELECT * FROM ksiazka_adresowa WHERE id = 2; ----------- telefon email ----------- 2 ul. Krakowska 16 777-33-84 zebra@zoo.pl ----------- 1 row in set (0.00 sec) USUWANIE REKORDÓW Na koniec zajmiemy si ę usuwaniem rekordów, Służy do tego celu polecenie DELETE, którego składnia przedstawia si ę następują co: DELETE FROM <nazwa_bazy>.<nazwa_tabeli> WHERE <warunek>
strona nr 8 lub DELETE FROM <nazwa_tabeli> WHERE <warunek> jeżeli wcześniej zostało użyte polecenie use <nazwa_bazy>. Jeżeli warunek WHERE... nie zostanie podany, zawarto ść całej tabeli zostanie usunię ta. Spróbujmy teraz usun ąć rekord o id równym 3: DELETE FROM ksiazka_adresowa WHERE id = 3; Query OK, 1 row affected (0.06 sec) I spójrzmy jak teraz wygląda zawarto ść naszej tabeli 'ksiazka_adresowa': SELECT * FROM ksiazka_adresowa; ----------- telefon email ----------- 1 Jan ul. Wrocł 888-55-41 jan@email.pl 2 ul. Krakowska 16 777-33-84 zebra@zoo.pl 4 <podaj imie> NULL 471-84-36 my@email.pl ----------- Jak wida ć, wartości numerów id nie przeindeksowały si ę (pole auto_increment), a następny numer id, jaki zostanie dodany, będzie mia ł warto ść o jeden większ ą od największego, czyli 5. Ć wiczenie 1 Utwórz tabel ę o nazwie moja w swojej bazie danych. Niech tabela zawiera trzy kolumny: imi ę, nazwisko, wiek. Kolumny niech będ ą typu znakowego o zmiennej długości (VARCHAR). Pamiętaj aby wcześniej wybra ć odpowiedni ą baz ę, w tórej chcesz utworzy ć tabel ę. Aby wybra ć baz ę danych należy posłuży ć si ę poleceniem USE. Polecenie to wymaga podania nazwy bazy. np.: use baza1. Aby stworzy ć tabele w SQL-u należy uż yć polecenia: CREATE TABLE nazwa_tabeli (nazwa_pola1 właściwości_pola1, nazwa_pola2 właściwoś ci_pola2, itd.) Nazwa_tabeli to wybrana przez nas nazwa dla danej tabeli. Nie może ona zawiera ć spacji, polskich liter ani innych znaków specjalnych. To samo dotyczy nazwy_pola. Właściwo ść_pola to dane które określaj ą pole. Informacje o możliwych wartoś ciach znajdziecie w dokumentacji bazy danych w której pracujecie. Ć wiczenia 2 Wpisz 5 rekordów do utworzonej tabeli Kiedy mamy ju ż stworzon ą tabel ę musimy wprowadzi ć do niej dane. Robimy to za pomoc ą
strona nr 9 polecenia: INSERT INTO nazwa_tabeli (pole1, pole2) VALUES ("wartość1", "wartość2", itd); Wartości wprowadzamy w kolejności pól w tabeli któr ą poprzednio stworzyliśmy. Należy pamięta ć aby umieszcza ć wartości w tzw. " uszkach" czyli wewną trz znaczników ' '. Ć wiczenie 3 Wyś wietl wprowadzone rekordy do swojej bazy danych Kiedy mamy nasz ą tabele i wypełniliśmy j ą odpowiedni ą ilości ą danych czas na ich wyświetlenie. Aby wyświetli ć wpisy z tabeli uż ywamy polecenia: SELECT * FROM nazwa_tabeli W ten sposób otrzymamy wszystkie rekordy w danej tabeli w kolejności w jakiej zostały do niej wprowadzone. Np: Aby wyświetli ć list ę autorów z utworzonej tabeli autor używamy polecenia. SELEST * FROM autor W ten sposób na ekranie pojawi ą mi si ę wszystkie rekordy tej tabeli. Ć wiczenie 4 Wyświetl zawarto ść swojej tabeli w sposób posortowany a)wedł ug imienia od a do z b)wedł ug nazwiska od z do a Jeżeli chcemy posortowa ć wyniki uzyskane poprzez wyświetlenie wszystkich rekordów w bazie to musimy wybra ć pole według którego chcemy sortowa ć, a następnie sposób sortowania wyników. SELECT * FROM nazwa_tabeli ORDER BY nazwa_pola sposób_sortowania Nazwa_pola jest polem według którego sortujemy, a sposób sortowania to: DESC - sortowanie od Z do A ASC - sortowanie od A do Z Np: Dla stworzonej tabeli z autorami jeżeli chcielibyśmy posortowa ć j ą w kolejności od Z do A i sortowanie miało by si ę odbywa ć względem wartości w polu nazwisko to polecenie wygląda następują co: SELECT * FROM autor ORDER BY nazwisko DESC W ten sposób wyświetlaj ą nam si ę wszyscy autorzy w kolejnoś ci od Z do A Ć wiczenie 5 Uaktualnianie danych w tabeli. Zmie ń wszystkie imiona na "Jan". Aby zmieni ć warto ść pola tabeli lub j ą nadpisa ć uż ywamy polecenia UPDATE nazwa_tabeli SET nazwa_pola="warto ść " Nazwa_pola to oczywiście pole którego warto ść chcemy zmieni ć, a warto ść to dane jakie do tego pola wpisujemy. Np: Dla tabeli autor wyglądało by to następująco UPDATE autor SET imie=" Łukasz" Te polecenie zmieni imiona wszystkich autorów na Łukasz. Jeżeli mamy na przykład warto ść liczbow ą w danym polu i chcemy doda ć do niej jeszcze inn ą warto ść to należy wykona ć to tak: UPDATE nazwa_tabeli SET nazwa_pola="warto ść+kolena_warto ść" Wtedy w polu o podanej nazwie do istniejącej ju ż tam wartości zostanie dodana nowa. Np: Dodałem do tabeli autor pole o nazwie zarobek i wstawiłem do niego sum ę jak ą otrzymałem za napisanie jakiego ś artykułu. Pole te ma właściwo ść INT przez co będzie ono przyjmowało tylko liczby. No więc chcąc doda ć do wartości tego pola jeszcze dodatkow ą kwot ę za napisanie kolejnego artykułu napisze polecenie: UPDATE autor SET zarobek="zarobek+200" Spowoduje to zwiększenie si ę wartoś ci pola zarobek o 200. Ć wiczenie 6 Wyświetlanie warunkowe Kiedy ś na pewno zajdzie potrzeba wyświetlenia rekordów
strona nr 10 odpowiadających odpowiednim warunkom. W tedy należy uży ć konstrukcji. SELECT * FROM nazwa_tabeli WHERE nazwa_pola="warto ść" Nazwa_pola to oczywiście pole wobec którego chcemy posegregowa ć dane, a warto ść to odpowiednie dane zapisane w tym polu. Np: Gdybym z tabeli autor chcia ł wyświetli ć wszystkich których zarobek wynosi 400 to użyłbym polecenia: SELECT * FROM autor WHERE zarobek="400" Otrzymam wszystkie rekordy spełniające powyższy warunek. Jest jeszcze możliwe określenie kilku warunków dla danego pola. Dokonuje si ę tego za pomoc ą operatora AND. SELECT * FROM nazwa_tabeli WHERE nazwa_pola="warto ść" AND nazwa_pola="warto ść" Wyświetl ą si ę tylko rekordy spełniające oba warunki jednocześnie. Np: Gdyby z tabeli autor chcie ć wyświetli ć wszystkich których zarobek wynosi 400 i na imi ę maj ą Łukasz użyłbym konstrukcji: SELECT * FROM autor WHERE zarobek="400" AND imie=" Łukasz" Otrzymam tylko rekordy spełniające te warunki. Jest jeszcze możliwe określenie kilku róż nych warunków dla danego pola. Dokonuje si ę tego z pomoc ą operatora OR. SELECT * FROM nazwa_tabeli WHERE nazwa_pola="warto ść" OR nazwa_pola="warto ść" Wyświetl ą si ę tylko rekordy które spełniaj ą warunek pierwszy lub spełniaj ą warunek drugi. Np: Gdyby z tabeli autor chcie ć wyświetli ć wszystkich których zarobek wynosi 400 lub na imi ę maj ą Łukasz użyłbym konstrukcji: SELECT * FROM autor WHERE zarobek="400" OR imie=" Łukasz" Otrzymam tylko rekordy spełniają ce jeden z tych warunków. Ć wiczenie 7 Wyświetlanie rekordu zawierającego słowo Jeżeli chcemy wyświetli ć wszystkie rekordy zawierające jaki ś wyraz lub jak ąś liter ę, lub te ż cze ść wyrazu, używamy polecenia: SELECT * FROM nazwa_tabeli WHERE nazwa_pola LIKE "warto ść" Nazwa_pola to oczywiście pole względem którego wartości szukamy. Jeżeli nie znamy pełnego wyrazu to jego brakujące części zastępujemy znakiem procentu "%" Np: Jeżeli początek wyrazu to "ba", a reszty nie znamy to taki sposób zapisu wygląda następująco "ba%". Jeżeli koniec wyrazu to "za", a początku nie znamy to taki sposób zapisu wygląda następująco "%za". Jeżeli środek wyrazu to "az", a reszty nie znamy to taki sposób zapisu wygląda następująco "%az%". Zastępujemy litery początkowe i końcowe znakiem procenta "%" co pozwoli na wstawienie w ich miejsce dowolnej wartości. Np: Jeżeli z tabeli autor poszukujemy kogo ś o imieniu zaczynającym si ę na " Łuka" i nie znamy reszty to takie polecenie wygląda następująco. SELECT * FROM autor WHERE imie LIKE " Łuka%" W ten sposób otrzymamy rekordy spełniające dany warunek. Można także wymyśli ć sobie to, aby na przykład dane pole nie zawierało ciągu znaków. Postępujemy tak jak poprzednio z tym, że zmienia si ę cze ść komendy. Przed LIKE wstawiamy operator NOT. SELECT * FROM nazwa_tabeli WHERE nazwa_pola NOT LIKE "warto ść " Ć wiczenie 8 Wartości pomiędzy Jeżeli chcemy wyświetli ć wszystkie rekordy w których w danym polu znajduj ą si ę wartości pomiędzy jakimi ś przedziałami to używamy polecenia: SELECT * FROM nazwa_tabeli WHERE nazwa_pola BETWEEN "warto ść" AND "warto ść" Nazwa_pola to pole wobec którego zamierzamy sortowa ć. Np: Z tabeli autor mamy zamiar wyświetli ć wszystkie osoby których zarobek mieści si ę pomiędzy 200 a 600. Aby to zrobi ć używamy polecenia: SELECT * FROM autor WHERE zarobek BETWEEN "200" AND "600" Ć wiczenie 9 Liczenie ilości rekordów Aby policzy ć ile rekordów znajduje si ę w naszej bazie danych używamy polecenia: SELECT COUNT(*) FROM nazwa_tabeli Nazwa_tabeli to tabela dla
strona nr 11 której stosujemy operacj ę Np: Aby policzy ć ile rekordów jest w naszej tabeli autor używamy polecenia: SELECT COUNT(*) FROM autor W odpowiedzi otrzymamy liczb ę całkowit ą. Ć wiczenie 10 Sumowanie wartości pola Często zachodzi potrzeba sumowania wartości pola. Robimy to poleceniem: SELECT SUM(nazwa_pola) FROM nazwa_tabeli Nazwa_pola to pole którego warto ść będziemy sumowa ć. Np: Aby zsumowa ć zarobek wszystkich autorów w tabeli autor polecenie musi wygląda ć następująco: SELECT SUM(zarobek) FROM autor W odpowiedzi otrzymamy warto ść liczbow ą Ć wiczenie 11 Zmiana rozmiaru liter Jeżeli zaistnieje potrzeba zmiany zapisanych w danym polu liter z małych na duże to używamy polecenia: UPDATE nazwa_tabeli SET nazwa_pola=upper(nazwa_pola) Nazwa_pola to pole wobec którego chcemy zastosowa ć t ą funkcj ę. Np: Aby zmieni ć wielko ść liter w naszej tabeli autor w polu nazwisko z małych na duże wpisujemy polecenie: UPDATE autor SET nazwisko=upper(nazwisko) W ten sposób warto ść pola nazawisko została zamieniona na wielkie litery. Można zrobi ć te ż na odwrót, to znaczy zmieni ć duże litery na małe, wystarczy tylko uży ć polecenia LOWER UPDATE nazwa_tabeli SET nazwa_pola=lower(nazwa_pola) Ć wiczenie 12 Kasowanie rokordów Usuwania rekordów dokonuje si ę za pomoc ą polecenia: DELETE FROM nazwa_tabeli WHERE nazwa_pola LIKE "warto ść" Taka komenda usuwa rekordy z danej tabeli, które spełniaj ą warunek. Np: Aby usun ąć z tabeli autor wpis określający mnie należało by wpisa ć jedno z następujących polece ń: DELETE FROM autor WHERE imie LIKE " Łukasz" lub DELETE FROM autor WHERE nazwisko LIKE "Sosna" lub DELETE FROM autor WHERE zarobek LIKE "400" Należy przy tym uważa ć aby nie usuną ć przypadkiem jakiego ś innego rekordu spełniającego ten warunek. Najlepiej więc posłuży ć si ę ID danego rekordu. Jako i ż wprowadziłem si ę do bazy jako pierwsz ą pozycje moje ID wynosi 0. Prawidłowe polecenie wygląda więc: DELETE FROM autor WHERE id_autor LIKE "0" To gwarantuje usunięcie tylko jednego wpisu. ID nie powtarza si ę w żadnym innym rekordzie. Baza danych na to nie pozwoli.