loading

Stanislav Duben

Stanislav Duben ICQ: 66800432 email: duben@seznam.cz Skype: sduben

9. leden 2007

Základy jazyka SQL a databází - I. díl

Databáze SQLTímto článekm začínám stručný úvod do databází a jazyka SQL pro naprosté začátečníky. V tomto prvním článku se ještě nedozvíte nějaké praktické rady, ale je to takové to nutné úvodní zlo, které musíte aspoň trošku znát, pokud chcete s databázemi něco dělat.

 

  

Princip práce s databází na principu SQL je založen na relační algebře a relací množin. Zjednodušeně lze říci, že je založen na tabulkovém uspořádání dat. Každá množina dat je uložena v určité tabulce a vztahy mezi tabulkami jsou určené relační vazbou. Tyto vazby mohou být více různých typů:

0:1 - první tabulka může, ale nemusí obsahovat vázaný záznam k tabulce druhé. Pokud takový záznam obsahuje musí být právě jeden odpovídající záznam v tabulce druhé.
1:1 - první tabulka musí obsahovat vázaný záznam k tabulce druhé. Odpovídající záznam musí být právě jeden v tabulce druhé.
0:N - první tabulka může, ale nemusí obsahovat vázaný záznam k tabulce druhé. Pokud tento záznam existuje může být v druhé tabulce více vázaných záznamů než jeden.
1:N - první tabulka musí obsahovat vázaný záznam k druhé tabulce. Odpovídajících záznamů v druhé tabulce může být více než jeden.
M:N - první tabulka může obsahovat více záznamů odpovídající více záznamům v tabulce druhé. (V praxi se tento poměr vždy dělí na 1:M a 1:N)

Jazyk SQL se dělí na dvě hlavní kapitoly na DDL a DML.
DDL je zkratka pro Data Definition Language a jedná se o příkazy definující jednotlivé objekty v databázi (tabulky, procedury, view apod.).
DML je zkratka pro Data Modification Language a jde o příkazy definující práci s databázovými objekty (výběr dat, modifikaci dat, mazání dat apod.)

Základní objekty v databázi se liší dle dané implementace konkrétní databáze. Základem je tabulka, která obsahuje jednotlivé položky. Položka (sloupec) je určená svým datovým typem. Datový typ určuje množinu dat, kterou lze do sloupce uložit a dále množinu operací kterou lze nad touto množinou dat dělat.
Příklady datových typů:
int - celočíselná hodnota
bit - používá se pro hodnotu ano/ne vyjádřená jako 0/1 v některých implementacích se lze místo 1 setkat s -1
varchar(x) - textová hodnota, kde "x" je číslo určující maximální počet znaků. Zde opět záleží na konkrétní implementaci, ale nikdy nebývá víc než 255 znaků.

Konkrétní výčet obvyklých datových typů si necháme do příštích kapitol.

Prací s databází obvykle rozumíme nějakou práci nad určitou množinou dat, kdy velikost této množiny určujeme právě pomocí SQL jazyka. Příklad takového příkazu je například:

SELECT jmeno, prijmeni FROM contacts

Takovýto příkaz vypíše seznam všechna jména a příjmení z tabulky contacts. Jak vidíte jazyk SQL je podobný anglické větě. Právě přiblížit tento jazyk co nejblíže běžnému anglickému jazyku bylo jedním z cílů autorů při vytváření jeho specifikace.

A teď už dost teorie a pojďme zkusit něco prakticky. Předpokladem pro následující ukázku je, že máte přístup k nějaké funkční SQL databázi. Například nějaké free MySQL (www.webzdarma.cz). Zde se snadno přihlásíte pomocí phpMySQLAdmina a máte možnost spouštět SQL příkazy a zároveň je zde hezky vidět vytvořené tabulky a máte možnost procházet data i bez základní znalosti SQL příkazů.

Nejprve si vytvoříme tabulku pro evidenci osob. Budeme tedy evidovat jméno, příjmení a telefonní číslo. Kvůli možným problémům s diakritikou budeme názvy polí definovat "bez hacku a carek" :)

CREATE TABLE Kontakty (
  Jmeno as varchar(50) not null,
  Prijmeni as varchar(70) not null,
  Telefon as varchar(15)
)


Co jsme konkrétně udělali? Vytvořili jsme tabulku Kontakty. Pro tabulku se obvykle používá množné číslo pro pole v tabulce pak cislo jednotné, jde o jisté nepsané pravidlo, které ale vychází z logiky věci, v tabulce je obvykle více záznaml patřící do stejné skupiny tedy kontakty a každý řádek obsahuje konkrétní jeden záznam. V této tabulce jsme vytvořili 3 pole, všechny jsou textové o různých velikostech s tím že jméno a příjmené musí být zadáno, to je ošetřeno příkazem "not null". Telefon není číslo ale textové pole, protože pokud bychom na začítku chtěli mít nulu, číselné pole by tyto nuly na začátku uřízlo. Příkaz CREATE TABLE patří do DDL tedy do příkazl definujících strukturu databáze.

Nyní vložíme do tabulky pár řádků dat:

INSERT INTO Kontakty (Jmeno, Prijemni, Telefon)
VALUES ('Karel', 'Novák', '123456789')

INSERT INTO Kontakty (Jmeno, Prijemni, Telefon)
VALUES ('Petr', 'Nováček', '987654321')

INSERT INTO Kontakty (Jmeno, Prijemni, Telefon)
VALUES ('Otakar', 'Přemysl', '')


Těmito třemi příkazy jsme vložili tři záznamy do tabulky konktatků. Zobrazit si vložená data můžeme například pomocí tohoto příkazu:

SELECT * FROM Kontakty

Případně můžeme výstup seřadit dle toho jako potřebujeme

SELECT * FROM Kontakty ORDER BY Prijemni, Jmeno


Tak to by pro lehký úvod asi mohlo stačit, v příští kapitole projdeme příkaz pro vytvoření tabulky a způsob úvahy při navrhování jednoduché databáze.