Kurs - Podstawy MySQL.doc

(14064 KB) Pobierz

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¹:

mysql> select database();

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

mysql> select database();

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');

Query OK, 1 row affected (0.00 sec)

Dodajmy jeszcze jednego u¿ytkownika, tym razem znaj¹c tylko jego imiê, nazwisko i email.

imiê: Adam,

nazwisko: Kowalski,

email: adam@firma.com.pl

mysql> insert into dane

-> (imie,nazwisko,email)

-> values ('Adam','Kowalski','adam@firma.com.pl');

Query OK, 1 row affected (0.00 sec)

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...

Zgłoś jeśli naruszono regulamin