Login lub e-mail Hasło   

Mini tutorial SQL Część 1

Tutorial języka SQL dla tych, którzy chcą rozpocząć swoją przygodę z bazami danych.
Wyświetlenia: 40.209 Zamieszczono 23/05/2006

1. WSTĘP
Na początek trochę teorii:
"SQL (ang. Structured Query Language) to strukturalny język zapytań używany do tworzenia, modyfikowania baz danych oraz do umieszczania i pobierania danych z baz danych."

Jeśli jeszcze nie macie zainstalowanego serwera na swoim komputerze to polecam Krasnal Serv, którego możecie pobrać z tąd. Komendy SQL będę pisał wielkimi literami, aby zwiększyć czytelność tekstu.

2. LOGOWANIE
Aby się zalogować należy włączyć serwer, po czym otwieramy wiersz poleceń i wpisujemy:
C:\usr\mysql\bin\mysql.exe -u root -p
(gdzie root to nazwa użytkownika)
Następnie zostaniemy poproszeni o hasło (w Krasnal Serv domyślnym jest "krasnal").
Po poprawnym zalogowaniu powinniśmy zobaczyć komunikat powitalny.

3. PIERWSZE KROKI
Po poprawnym zalogowaniu pewnie chciałbyś zobaczyć, jakie bazy danych są dostępne, posłużymy się tu komendą show databases.

SHOW databases;
+----------+
| Database |
+----------+
| krasnal  |
| mysql    |
+----------+
2 rows in set (0.00 sec)  


Jak widać polecenie show databases zostało zakończone średnikiem podobnie jak w php. SQL wymaga kończenia polecenia znakiem średnika co pozwala konstruować instrukcje w wielu linijkach, dzięki temu można w wygodniejszy sposób pisać dłuższe komenty.
Jak już zauważyłeś w powyższym przykładnie są 2 bazy danych, my stworzymy sobie następną bazę gdzie będziemy ćwiczyć. Polecenia CREATE DATABASE <nazwa_bazy> tworzy nową bazę danych.


CREATE DATABASE nasza_baza;
Query OK, 1 row affected (0.01 sec)

Utworzona została baza danych o nazwie nasza_baza. Posłuż się teraz poleceniem SHOW DATABASES i zobacz teraz bazy danych.
Stwórzmy jeszcze jedną bazę o nazwie kosz.
Jak stworzyliśmy bazę kosz to czemu jej nie wyrzucić :P Przyda nam się polecenie DROP DATABASE <nazwa_bazy>

  DROP DATABASE kosz;
Query OK, 0 rows affected (0.01 sec) 

4. TABELE

Aby robić operacje na tabelach (usuwać, dodawać, edytować) MYSQL musi wiedzieć, nad którą bazą ma pracować, aby to zrobić można:
a) używać ścieżki do tabeli <nasza_baza>.<nazwa_tabeli>,
b) bądź poleceniem USE <nazwa_bazy>
(osobiście polecam 2 sposób)


USE nasza_baza;
Database changed


MYSQL zwrócił komunikat, że została wybrana baza. Teraz możemy wykonywać na niej operacje.
Aby wyświetlić istniejące tabele wpisujemy:


SHOW TABLES;
Empty set (0.00 sec)


Komunikat informuje nas, że nasza baza jest pusta. Aby nie była stwórzmy tabele o nazwie notes.
Z odpowiednimi polami.


USE nasza_baza;
Database changed



CREATE TABLE adresy(
   -> id INT NOT NULL auto_increment,
   -> imie VARCHAR(15) DEFAULT 'anonim',
   -> nazwisko VARCHAR(25) DEFAULT 'anonim',
   -> telefon BLOB,
   -> PRIMARY KEY (id)
   -> );
Query OK, 0 rows affected (0.06 sec)


TYPY PÓL:

Kod: char - pole znakowe. Przechowuje teksty o ustalonej z góry długości. Ograniczone do 255 znaków.
varchar(M) - pole znakowe. Przechowuje taką długość tekstu, jaka jest używana.
blob - ciąg znaków o długości ograniczonej przez twoją pamięć,
integer - liczba całkowita z zakresu od do ,
date - data w formacie DBMS (uwaga format odwrotny do normalnego: YYYY-MM-DD),
year - rok, jeśli zostanie podany zły, jego wartość zmieni się w 0000,
decimal(x, y) - liczba dziesiętna, gdzie x oznacza maksymalną liczbę cyfr, a y maksymalną liczbę cyfr po przecinku.

Teraz wyjaśnię trochę bardziej to, co napisaliśmy. Stworzyliśmy 4 pola. Pole id pełni funkcję klucza (PRIMARY KEY) danego rekordu, a dzięki NOT NULL pole to nie może być puste. Jest ono także typu auto_increment, co oznacza, że MYSQL sam zwiększy jego wartość za każdym razem o +1 i po usunięciu rekordu dane te zostaną takie same (nie zmniejszą się).
Parametr DEFAULT oznacza domyślną wartość rekordu, np., gdy nie zostanie podane imię lub nazwisko rekord będzie miał wartość 'anonim'.
No i teraz możemy zobaczyć to, co stworzyliśmy:) Aby podejrzeć strukturę tabeli należy użyć polecenia describe nasza_baza


describe adresy;
+----------+-------------+------+-----+---------+---------------  -+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+---------------  -+
| id       | int(11)     |      | PRI | NULL    | auto_increment |
| imie     | varchar(15) | YES  |     | anonim  |                |
| nazwisko | varchar(25) | YES  |     | anonim  |                |
| telefon  | blob        | YES  |     | NULL    |                |
+----------+-------------+------+-----+---------+---------------  -+
4 rows in set (0.04 sec)



Do edycji pól w tabeli służy polecenia ALTER TABLE <nazwa_tabeli> <argumenty>
Skoro znamy polecenie do edycji tabeli do stwórzmy w naszej tabeli jeszcze jedno pole z adresem email:)


ALTER TABLE adresy ADD email VARCHAR(30);
Query OK, 0 rows affected (0.06 sec)


Do usunięcia pól z tabeli służy polecenie DROP.


ALTER TABLE adresy DROP email;
Query OK, 0 rows affected (0.08 sec)


Aby zmienić nazwa pola użyjemy CHANGE


ALTER TABLE adresy CHANGE telefon tel INT(30);
Query OK, 0 rows affected (0.19 sec)


Zmienione zostało pole telefon na tel.
Do zmiany nazwy tabeli służy RENAME.


ALTER TABLE adresy RENAME dane;
Query OK, 0 rows affected (0.01 sec)



4. REKORDY

Skoro mamy już stworzoną naszą tabele dane pora coś do niech wpisać :) Polecenia INSERT INTO <nazwa_bazy> VALUES <wartosci> dodaje rekord do tabeli.


NSERT INTO dane VALUES('', 'Jan', 'Kowalski', 0700880188);
Query OK, 1 row affected, 1 warning (0.02 sec)


Jak widać każda wartość jest między '' oprócz liczb of kors. Zamiast wartości id podaliśmy puste pole dlatego że zostanie ono automatycznie uzupełnione.
Można także dodawać dane w wybrane pola:


INSERT INTO dane(imie, nazwisko) VALUES('Czak', 'Noris');
Query OK, 1 row affected (0.02 sec)



Reszta pól przyjmie wartość domyślną bądź pozostaną puste. Skoro dodaliśmy rekordy do bazy to teraz ja zobaczymy je poleceniem SELECT <pola> FROM <nazwa_tabeli>:


SELECT * FROM dane;
+----+------+----------+-----------+
| id | imie | nazwisko | tel       |
+----+------+----------+-----------+
|  1 | Jan  | Kowalski | 700880188 |
|  2 | Czak | Noris    |      NULL |
+----+------+----------+-----------+
2 rows in set (0.00 sec)


Znak * odczytuje wszystkie pola z tabeli. Aby odczytać wybrane pola wpiszmy:


SELECT imie, nazwisko FROM dane;
+------+----------+
| imie | nazwisko |
+------+----------+
| Jan  | Kowalski |
| Czak | Noris    |
+------+----------+
2 rows in set (0.00 sec)


W każdym z wymienionych przykładów odczytujemy wszystkie rekordy z tabeli.

Aby wyświetlić rekord o największym id wpiszmy:


SELECT MAX(id) FROM dane;
+---------+
| MAX(id) |
+---------+
|       2 |
+---------+
1 row in set (0.01 sec)


Aby wyświetlić ilość rekordów w bazie posłużmy się poleceniem COUNT:


SELECT COUNT(id) FROM dane;
+-----------+
| COUNT(id) |
+-----------+
|         2 |
+-----------+
1 row in set (0.01 sec)


Poniżej podam jeszcze kilka przydatnych przykładów:

- SUM - zlicza sume pól
- AVG - zlicza średnią pól
- MIN - przeciwieństwo MAX

Możemy ograniczać wyszukiwanie przez wiele przydatnych poleceń:

a) WHERE


SELECT * FROM dane WHERE id=2;
+----+------+----------+------+
| id | imie | nazwisko | tel  |
+----+------+----------+------+
|  2 | Czak | Noris    | NULL |
+----+------+----------+------+
1 row in set (0.00 sec)


Wyświetla rekord gdzie pole id = 2

b) BETWEEN (pomiędzy)


SELECT * FROM dane WHERE id BETWEEN 1 AND 2;
+----+------+----------+-----------+
| id | imie | nazwisko | tel       |
+----+------+----------+-----------+
|  1 | Jan  | Kowalski | 700880188 |
|  2 | Czak | Noris    |      NULL |
+----+------+----------+-----------+
2 rows in set (0.00 sec)


Przeszukuje rekordy gdzie id jest między liczbą 1 a liczbą 2

c) IN


SELECT * FROM dane WHERE imie IN('Zenek', 'Czak');
+----+------+----------+------+
| id | imie | nazwisko | tel  |
+----+------+----------+------+
|  2 | Czak | Noris    | NULL |
+----+------+----------+------+
1 row in set (0.00 sec)


Przeszukuje rekordy gdzie imie = wartością danych w nawiasie. Dzięki temu nie musimy pisać długich zapytań typu SELECT * FROM dane WHERE imie='ZENEK' OR imie='Czak'

d) LIKE


SELECT * FROM dane WHERE imie LIKE 'C%';
+----+------+----------+------+
| id | imie | nazwisko | tel  |
+----+------+----------+------+
|  2 | Czak | Noris    | NULL |
+----+------+----------+------+
1 row in set (0.00 sec)


Przeszukuje rekordy gdzie "imie" zaczyna się na "C". "%" oznacza dowolne znaki. Przydatne jest przy różnego rodzaju wyszukiwarkach.

Wszystkie z podanych wyżej przykładów można zaprzeczyć (negacja). Przykład:

SELECT * FROM dane WHERE imie NOT IN('Zenek', 'Czak');
SELECT * FROM dane WHERE imie NOT LIKE 'C%';
SELECT * FROM dane WHERE id  NOTBETWEEN 1 AND 2;


Można także stosować operatory przy wyszukiwaniach:

< - mniejszy od
> - większy od
<> różny od
<= - mniejszy bądź równy
>= - większy bądź równy
AND - i
OR - lub


Wyświetlane rekordy można sortować oraz stosować limity.


SELECT * FROM dane ORDER BY id;
+----+------+----------+-----------+
| id | imie | nazwisko | tel       |
+----+------+----------+-----------+
|  1 | Jan  | Kowalski | 700880188 |
|  2 | Czak | Noris    |      NULL |
+----+------+----------+-----------+
2 rows in set (0.00 sec)


Rekordy zostały posortowane według id(od najmniejszego);
Można przedstawiać dane także w odwrotnej kolejności:


SELECT * FROM dane ORDER BY nazwisko DESC;
+----+------+----------+-----------+
| id | imie | nazwisko | tel       |
+----+------+----------+-----------+
|  2 | Czak | Noris    |      NULL |
|  1 | Jan  | Kowalski | 700880188 |
+----+------+----------+-----------+
2 rows in set (0.00 sec)


Do stosowanie limitów w wyświetlaniach bądź ich porcjowania służy LIMIT:


SELECT * FROM dane LIMIT 1;
+----+------+----------+-----------+
| id | imie | nazwisko | tel       |
+----+------+----------+-----------+
|  1 | Jan  | Kowalski | 700880188 |
+----+------+----------+-----------+
1 row in set (0.00 sec)


W poniższym przykładzie rekordy zostaną wyświetlone od pierwszego do piątego.


SELECT * FROM dane LIMIT 1, 5;
+----+------+----------+------+
| id | imie | nazwisko | tel  |
+----+------+----------+------+
|  2 | Czak | Noris    | NULL |
+----+------+----------+------+
1 row in set (0.00 sec)

 
Teraz nauczymy się kasować dany rekord, służy temu polecenia DELETE.


DELETE FROM dane WHERE id=1;
Query OK, 1 row affected (0.00 sec)


Oczywiście możemy przy tym stosować różne kombinacje IN, BETWEEN itp.

Możemy także edytować wybrany rekord:


UPDATE dane SET imie='Chack' WHERE imie='Czak';
Query OK, 1 row affected (0.00 sec)



Można edytować wiele pól naraz (oraz rekordów):


UPDATE dane SET imie='Chack', nazwisko='Wszechmogący',  tel=0800888111 WHERE imie='Czak';
Query OK, 1 row affected (0.00 sec)



Narazie jest koniec tutorialu o SQL, w najbliższym czasie postaram się więcej naskrobać :)

Przydatne linki:
[ www ]
[ www ]
[ www ]
[ www ]

----------------

Tutorial można rozprowadzać itp pod warunkiem że zostanie info o autorze.

Pozdrawiam button

Podobne artykuły


49
komentarze: 27 | wyświetlenia: 60726
48
komentarze: 18 | wyświetlenia: 62657
10
komentarze: 1 | wyświetlenia: 83982
35
komentarze: 9 | wyświetlenia: 26118
40
komentarze: 19 | wyświetlenia: 32256
31
komentarze: 12 | wyświetlenia: 24580
5
komentarze: 1 | wyświetlenia: 12499
5
komentarze: 0 | wyświetlenia: 12750
12
komentarze: 3 | wyświetlenia: 47111
10
komentarze: 13 | wyświetlenia: 12762
9
komentarze: 2 | wyświetlenia: 5691
8
komentarze: 3 | wyświetlenia: 7100
18
komentarze: 10 | wyświetlenia: 20535
 
Autor
Dodał do zasobów: Mariusz Żurawek
Artykuł



  toszcze  (www),  04/07/2006

Pozwolę sobie wytknąć kilka błędów w tym tekście.

Po pierwsze (i najważniejsze) - w tekście nie zostało jasno powiedziane, że dotyczy on MySQLa. Odniesienie do Krasnala nie jest (moim zdaniem) wystarczające - nie każdy zna ten "świetny" pakiet.

Po drugie - błędy ortograficzne ("z tąd", "komenty" (sic!)).

Po trzecie - błędy gramatyczne.

...  wyświetl więcej

ja sie tylko zastanawiam dlaczego ciagle opisy dotycza mysql, postgresql jest lepszy z tez darmowy...



Dodaj swoją opinię
W trosce o jakość komentarzy wymagamy od użytkowników, aby zalogowali się przed dodaniem komentarza. Jeżeli nie posiadasz jeszcze swojego konta, zarejestruj się. To tylko chwila, a uzyskasz dostęp do dodatkowych możliwości!
 

© 2005-2017 grupa EIOBA. Wrocław, Polska