Kurs
–
Podstawy MySQL
Krótkie info.
Autorem kursu jest Piotr Jêdrusik.
Kurs jest w³asnoœci¹ ser wisu MySQL FAQ
www.mysqlfaq.prv.pl
, email:
mysqlfaq@twister.pl
.
1. Tworzymy bazê.
Stworzymy pierwsz¹ bazê o nazwie user.
mysql> create datab ase user;
Poprawne wykon anie polecenia powinno daæ wynik:
Query OK, 1 row affected (0.00 sec)
Po stworzeniu bazy, mo¿emy przejœæ do tworzenia tabel. Jednak samo stworzenie bazy, nie
oznacza ¿e staje siê ona baz¹ bie¿¹c¹ i mo¿emy na niej wykonywaæ operacje.
Pokazuje to poni¿sze polecenie, sprawdzaj¹ce jaka baza jest obecnie u¿ywana.
mysql> select database();
Efektem polecenia bêdzie:
Ab y móc korzystaæ z konkretnej bazy, n ale¿y wybraæ j¹ jako bazê bie¿¹c¹:
mysql> use user;
Po poprawn ym wykonaniu polecenia, MySQL po winien zwróciæ komunikat:
Database changed
OK. Teraz mo¿emy ponownie sprawdziæ jaka baza jest baz¹ bie¿¹c¹:
Od tej por y wszystkie operacje bêd¹ wykonywane na bazie user.
Innym sposobem wyboru bazy jest wymienienie jej nazwy w wierszu poleceñ podczas
wywo³ania mysql:
C:/>mysql user
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 5 to server version: 3.23.32
2. Tworzymy tabele.
Stworzymy teraz tabelê dane, w której bêdziemy przechowywaæ dane odnoœnie
u¿ytkowników.
mysql> create table dane
-> (
-> imie varchar(15) not null,
-> nazwisko varchar(20) not null,
-> email varchar(50) null,
-> ulica varchar(50) null,
-> miasto varchar(50) null,
-> data_ur date null default '0000-00-00'
-> );
Ab y sprawdziæ czy tabela zosta³a stworzona poprawnie wykonujemy poni¿sze polecenie:
mysql> describe dane;
Instrukcja describe (mo¿na j¹ u¿ywaæ skrótowo desc) pokazuje informacje odnoœnie podanej
tabeli.
A jak sprawdziæ jakie tabele zawiera konkretna baza ?
Umo¿liwia to polecenie SHOW.
mysql> show tables;
W ten sam sposób mo¿emy sprawdziæ jakie bazy istniej¹ na serwerze.
mysql> show databases;
Wracaj¹c do tworzenia tabel. Ab y nie wpisywaæ ca³ej instrukcji tworzenia tabeli mo¿emy
wczeœniej stworzyæ plik z rozszerzeniem .sql, w którym wpisujemy ca³¹ sk³adniê tworzenia
tabeli, a nastêpnie wywo³ujemy jed ynie proste polecenie:
C:/>mysql user < user.sql
3. Dodawanie nowych rekordów.
Stworzyliœmy bazê user i tabelê dane. Teraz zajmijmy siê wprowadzeniem kilku rekordów do
tabeli z danymi u¿ytkowników.
Dane dodawanego usera:
imiê: Piotr,
nazwisko: Walczak
email: walus@plus.pl
ulica: Lesna
miasta: Warszawa
data urodzenia: 1980-02-25
A wiêc wprowadzamy dane:
mysql> insert into dane
-> values('Piotr','Walczak','walus@plus.pl','Lesna','Warszawa','1980-02-25');
Dodajmy jeszcze jednego u¿ytkownika, tym razem znaj¹c tylko jego imiê, nazwisko i email.
imiê: Adam,
nazwisko: Kowalski,
email: adam@firma.com.pl
-> (imie,nazwisko,email)
-> values ('Adam','Kowalski','adam@firma.com.pl');
Oczywiœcie zamiast wpisywaæ wszystkich naszych u¿ytkowników rêcznie, mo¿emy ich dane
zgromadziæ w pliku, z którego dane mo¿emy wczytaæ do tabeli:
mysql>load data local infile ”dane.txt” into table dane;
Domyœlnie instrukcja Load Data zak³ada, ¿e wartoœci kolumn bêd¹ ograniczone przez
tabulatory i ¿e wiersze bêd¹ siê koñczyæ przy u¿yciu znaków koñca wierszy. Zak³ada siê
równie¿, ¿e wartoœci wystêpuj¹ w kolejnoœci, w której kolumny s¹ przechowywane w tabeli.
Mo¿liwe jest zdefiniowanie innego formatu pliku lub okreœlenie innego porz¹dku kolumn.
Jednak w tym kursie tym zajmowaæ siê nie bêdziemy.
Ab y za³adowaæ dane z pliku mo¿emy równie¿ u¿yæ pro gramu mysqlimport, który generuje
instrukcjê LOAD DATA, która pozwala na za³adowanie danych z pliku dane.txt do tabeli
dane.
mysqlimport --local user dane.tx t
4. Pobieranie informacji.
Instrukcja SELECT pozwala pobieraæ i wyœwietlaæ informacje z tabel, ogólnie lub bardzo
szczegó³owo.
Ogólna postaæ instrukcji SELECT jest nastêpuj¹ca:
SELECT co_pobraæ
FROM tabela lub tabele
WHERE warunki_które_ musz¹_spe³niaæ_dane
Ab y wyœwietliæ ca³¹ zawartoœæ tabeli wykonujemy:
mysql> select * from dane;
Mo¿na wybraæ tylko jedn¹ kolumnê z tabeli:
mysql> select email from dane;
A tak¿e kilka kolumn:
mysql> select ulica,miasto from dane;
Mo¿na tak¿e przestawiaæ kolejnoœæ kolumn, a tak¿e podawaæ kilka razy jedn¹ kolumnê.
mysql> select miasto,email,imie from dane;
5. Okreœlenie kryteriów pobierania danych.
Ab y ograniczyæ zbiór pobranych rekordów przez instrukcjê SELECT, nale¿y u¿yæ klauzuli
WHERE, która okreœla kryteria wyboru wierszy.
Wybierzmy osoby, które urodzi³y si ê przed 01-01-1970.
mysql> select imie,nazwisko from dane where data_ur<'1970-01-01';
W kolejnym przyk³adzie spróbujmy wybraæ osoby zamieszka³e w Krakowie.
mysql> select imie,nazwisko from dane where miasto='krakow';
A teraz po³¹czmy dwa po przednie przyk³ady i wybierzmy osoby zamieszka³e poza Krakowem
i urodzone po 01-01-1970.
mysql> select imie,nazwisko,miasto,data_ur from dane
-> where data_ur>'1970-01-01'
-> and miasto <> 'Krakow';
Przy wyborze dan ych mo¿emy stosowaæ operatory ar ytmetyczne, porównania i logiczne.
Operator y arytmetyczne:
+ dodawanie
- odejmowanie
* mno¿enie
/ dzielenie
Operator y porównania:
< mniejsze ni¿
<= mniejsze ni¿ lub równe
= równe
!= lub <> nierówne
>= wiêksze ni¿ lub równe
> wiêksze ni¿
Operator y logiczne:
AND logiczne „i”
OR logiczne „lub”
NOT logiczne przeczenie
6. Sortowanie wyników zapytania.
Ab y uporz¹dkowaæ pobierane rekordy, nale¿y u¿yæ klauzuli ORDER BY.
Na pocz¹tek spróbujmy posortowaæ pobierane dane wed³u g nazwiska (od A do Z).
mysql> select imie,nazwisko from dane order by nazwisko;
Mo¿emy okreœliæ w jaki sposób sortowaæ rekordy, czy w kierunku rosn¹cym ASC lub
malej¹cym DESC.
A wiêc pobierzmy te same dane co w poprzednim przyk³adzie ale posortujmy je w odwrotnej
kolejnoœci czyli malej¹cej:
mysql> select imie,nazwisko from dane order by nazwisko desc;
Porz¹dek rosn¹cy jest domyœlny, jeœli nie okreœlimy inaczej.
Mo¿emy sortowaæ dwie kolumny:
mysql> select imie,nazwisko from dane order by imie asc, nazwisko asc;
7. Ograniczanie wyników zapytañ.
Gdy rezultatem zapytania jest bardzo du¿o wierszy, mo¿emy ograniczyæ wynik u¿ywaj¹c
klauzuli LIMIT. Klauzula LIMIT pozwala ograniczyæ wynik zapytania do n wierszy ca³ego
rezultatu.
W naszej tabeli mamy 6 rekordów. Ograniczmy wynik zapytania do 3 rek ordów:
mysql> select imie,email from dane limit 3;
Mo¿emy wyœwietliæ wynik zapytania pocz¹wszy od jakiegoœ rekordu, w naszym przypadku
wyœwietlmy rekordy pocz¹wszy od 2 (pierwszy rekord ma numer 0, nie 1), wyœwietlaj¹c dwa
kolejne rekord y:
mysql> select imie,email from dane limit 1,2;
8. £¹czenie i nazywanie wartoœci kolumn wyjœciowych.
Wybierzmy z naszej tabeli imiona i nazwiska, po³¹czmy je w jedn¹ kolumn¹ o nazwie Imiê –
Nazwisko.
mysql> select concat(imie," ",nazwisko) as "Imie - Nazwisko" from dane;
9. Praca z datami.
Przetestujmy kilka przyk³adów, myœlê ¿e nie sprawia one zbytnich k³opotów.
mysql> select email,data_ur from dane where data_ur = '1980-02-25';
mysql> select email,data_ur from dane where data_ur >= '1955-01-01' and data_ur
<= '1980-01-01';
Ab y sprawdziæ lub pobraæ czêœæ daty, mo¿na u¿yæ funkcji takich jak YEAR(), MONTH(),
DAYOFMONTH().
mysql> select imie,data_ur from dane where month(data_ur) = 9;
mysql> select imie,data_ur from dane where year(data_ur) > 1970;
Spróbujmy teraz stworzyæ trochê bardziej skomplikowane zapytanie, obliczaj¹ce wiek danej
osoby.
mysql> select imie,nazwisko,
-> floor((to_days(curd ate()) - to_days(data_ur))/365) as wiek
-> from dane;
U¿yta tutaj funkcja FLOOR obcina czêœæ u³amkow¹ wieku aby uzyskaæ liczbê ca³kowit¹.
Po wiêcej informacji odnoœnie funkcji operuj¹cych na datach odsy³am do dzia³u
PODSTAWY->Funkcje cz.IV.
10. Dopasowanie do wzorca.
Przy wybieraniu rekordów mo¿emy wykonaæ operacjê dopasowania do wzorca, w ten sposób
mo¿na wybraæ rekord y bez podawania dok³adnej wartoœci.
Ab y wykonaæ operacje d opasowania nale¿y u¿yæ specjaln ych operatorów LIKE lub NOT
LIKE i okreœliæ ci¹g znaków zawieraj¹cych znaki zastêpcze.
mysql> select imie,nazwisko from dane where nazwisko like 'w%';
Znak % oznacza dopasowanie do jakiejkolwiek sekwencji znaków.
mysql> select imie,email from dane where imie like '_____';
Znak _ okreœla pojedynczy znak. W powy¿szym przyk³adzie aby wybraæ imiona sk³adaj¹ce
siê z piêciu liter nale¿y podaæ znak _ piêæ razy.
I jeszcze jeden prosty przyk³ad. ZnajdŸmy osoby, które skrzynki e-mail maj¹ za³o¿one na
serwerze firma.com.pl lub firma.pl:
mysql> select imie,nazwisko,email from dane where email like '%firma%';
11. Tworzenie podsumowañ.
Ab y odrzuciæ w wyniku zapytania wszystkie wiersze, które siê powtarzaj¹ u¿ywamy s³owa
kluczowego DISTINCT.
Polecenie bez u¿ycia powy¿szego s³owa kluczowego da nam wynik:
mysql> select miasto from dane;
Gd y u¿yjem y s³owa kluczowego, zap ytanie zwróci nam wynik:
mysql> select distinct miasto from dane;
czyli odrzuci rekord y, które siê powtarzaj¹.
Bardzo przydatna jest fu nkcja COUNT(), która zlicza liczbê wierszy otrzymanych w wyniku
zapytania.
Poni¿sze polecenie zwró ci nam iloœæ wszystkich rekordów w tabeli dane:
mysql> select count(*) from dane;
Mo¿emy obliczyæ ile osób pochodzi z Warszawy:
mysql> select count(*) from dane where miasto = 'warszawa';
I jeszcze jeden przyk³ad, w któr ym obliczymy ile osób mieszka w dan ym mieœcie:
mysql> select miasto, count(*) from dane group by miasto;
Wa¿na uwaga. W takim zapytaniu musimy u¿yæ przed zliczeniem miast, grupowania
wyników wed³ug miasta, gdy¿ w przeciwnym przypadku zapytanie zwróci nam b³¹d.
Oprócz funkcji zliczaj¹cej COUNT(), mamy równie¿ dostêpne funkcje MIN(), MAX(),
SUM() i AVG().
Wybierzmy teraz najstarszego u¿ytkownika;
mysql> select min(data_ur) as "NAJSTARSZY" from...
madzienx