SQL
Za rad s relacijskim bazama podataka koristi se SQL (Structured Query Language). Iako se nad SQL-om već godinama provodi standardizacija, različiti proizvođači baza podataka u jezik dodaju svoja vlastita proširenja, zbog čega se često isti upiti ne mogu izravno izvoditi na drugim relacijskim bazama podataka.
Naredbe SQL jezika mogu se podijeliti u četiri velike grupe:
DDL – Data Definition Language (definiranje različitih objekata u bazi podataka)
DQL – Data Query Language (postavljanje upita nad postojećim podacima u bazi)
DML – Data Manipulation Language (rukovanje podacima – dodavanje, izmjena, brisanje)
DCL – Data Control Language (dodjeljivanje prava na korištenje pojedinih objekata)
Evo primjera nekoliko povezanih DDL naredbi za kreiranje tablica i pratećih objekata u MySQL bazi podataka. Neophodno je detaljno opisati svaki stupac tablice, kao i sve potrebne prateće objekte poput primarnih ključeva ili indeksa.
DROP TABLE IF EXISTS `orders`;
CREATE TABLE IF NOT EXISTS `orders` (
`orders_id` int(11) NOT NULL,
`customers_id` int(11) NOT NULL,
`customers_name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`customers_company` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`customers_street_address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`customers_suburb` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`customers_city` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`customers_postcode` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`customers_state` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`customers_country` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`customers_telephone` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`customers_email_address` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`customers_address_format_id` int(5) NOT NULL,
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
ALTER TABLE `orders`
ADD PRIMARY KEY (`orders_id`),
ADD KEY `idx_orders_customers_id` (`customers_id`),
ADD KEY `idxSCCode` (`sccode`);
ALTER TABLE `orders`
MODIFY `orders_id` int(11) NOT NULL AUTO_INCREMENT
Primjer izvođenja SQL upita potrebno je dobro poznavati objekte i točno definirati što se želi dobiti iz baze podataka.
Najvažnije stvari povezane s korištenjem SQL naredbi najjednostavnije je prikazati na primjeru DQL naredbe SELECT. Evo jednog primjera sa spajanjem tablica:
select p.products_id, pd.products_viewed, c.categories_image
from products p
inner join products_description pd on p.products_id = pd.products_id
inner join products_to_categories ptc on p.products_id = ptc.products_id
inner join categories c on ptc.categories_id = c.categories_id
where pd.products_viewed > 7000
order by pd.products_viewed desc
Na temelju prethodnog primjera lako je vidljivo da je prilikom pripreme SQL ùpita:
Potrebno dobro poznavati postojeće objekte u bazi podataka, jer su podaci o pojedinom objektu iz stvarnog svijeta vrlo često podijeljeni u veći broj tablica.
Treba točno definirati što se sve želi dobiti iz baze podataka i na koji način.
Budući da su podaci u bazi podataka normalizirani, za dobivanje potrebnih podataka u pravilu je potrebno međusobno spojiti više tablica.
Već smo ranije spomenuli prednost baza dokumenata u odnosu na relacijske baze podataka u situacijama postojanja većeg broja nestrukturiranih podataka. Prethodna točka 3, kao što ćete vidjeti u nastavku teksta, predstavlja mjesto gdje graf baze podataka također mogu predstavljati bolje rješenje, ako se pri relacijskom modelu podataka pojavi potreba za mnogostrukim spajanjem različitih tablica. U određenim upitima može se pojaviti čak i zahtjev za većim brojem uključivanja iste tablice u upit pod različitim aliasima. U takvim slučajevima upit postavljen na graf baze podataka mnogo je jednostavniji za pisanje i razumijevanje od SQL upita.
Rezultati SQL upita vraćaju se kao skupina redova tablice (ili stupaca iz spojenih tablica), zbog čega ih je onda prilično jednostavno kopirati u druge relacijske baze podataka. ili spremiti u formate datoteka za prijenos/razmjenu podataka između različitih izvora kao što su CSV ili Excel tablice.