Računalništvo Strukturirani poizvedovalni jezik SQL Danijel Skočaj, Evelin Vatovec Krmac Univerza v Ljubljani Fakulteta za pomorstvo in promet Literatura: Evelin Vatovec Krmac, Računalništvo in informatika, pogl. 5 Računalništvo
SQL Structured Query Language Strukturiran poizvedovalni jezik za delo s podatkovnimi bazami Daleč najbolj razširjen poizvedovalni jezik Uporablja se praktično v vseh SUPB MS Access, DB2 Informix MS SQL Server Oracle, Sybase MySQL Uporabnik pove KAJ želi in ne kako naj se poizvedba izvede Za ad hoc poizvedovanja in poročila, ki niso v naprej predvidena SUPB ukaze interpretira, prevede logično sklicevanje na fizično izvedbo ukaza, ki vrne iskane podatke Računalništvo, Strukturirani poizvedovalni jezik SQL 2
Ukazi jezika SQL Ukaze jezika SQL delimo na dve skupini: Ukazi za poizvedbo in povpraševanje SELECT Ukazi za obdelavo podatkov: DELETE (brisanje) INSERT INTO (vstavljanje) UPDATE (spreminjanje vrednosti) Ukazi za rokovanje s podatki CREATE TABLE (ustvarjanje tabele) ALTER TABLE (spreminjanje tabele) DROP TABLE (brisanje tabele) CREATE INDEX (kreiranje indeksov) DROP INDEX (brisanje indeksov) Ukazi za delo s tabelami Računalništvo, Strukturirani poizvedovalni jezik SQL 3
MySQL SUPB MySQL Najbolj popularen odprtokodni sistem za upravljanje s podatkovnimi bazami http://dev.mysql.com/downloads/ Potrebujete: MySQL Community Server (MySQL 5.1 ali 5.5) MySQL Workbench (prej MySQL QueryBrowser) Deluje na principu odjemalec-strežnik MySQL server kot Windows servis Zaženemo odjemalca z grafičnim uporabniškim vmesnikom MySQL Workbench (ali MySQL QueryBrowser) Dostopamo do baze podatkov Delamo poizvedbe Računalništvo, Strukturirani poizvedovalni jezik SQL 4
Primer Podatkovna baza student Vsebuje tabele City tabela svetovnih mest Country tabela dežel sveta CountryLanguage tabela jezikov posameznih držav Računalništvo, Strukturirani poizvedovalni jezik SQL 5
Primeri City Country Računalništvo, Strukturirani poizvedovalni jezik SQL 6
Primeri CountryLanguage Računalništvo, Strukturirani poizvedovalni jezik SQL 7
Ukazi za delo s tabelami CREATE TABLE ustvari novo tabelo v podatkovni bazi CREATE TABLE ime_tabele { polje1 tip vrednost izbira, polje2 tip vrednost izbira, polje3 tip vrednost izbira, }; tip je lahko int celo število char niz date datum time čas currency denarna valuta, itn. vrednost je lahko null ali not null izbira je lahko auto_increment ali default Računalništvo, Strukturirani poizvedovalni jezik SQL 8
Ukazi za delo s tabelami SHOW TABLES prikaže vse tabele, ki so shranjene v podatkovni bazi SHOW TABLES ime_podatkovne_baze; DESCRIBE prikaže zgradbo posamezne tabele DESCRIBE ime_tabele; DROP TABLE brisanje tabele DROP TABLE ime_tabele; Računalništvo, Strukturirani poizvedovalni jezik SQL 9
Ukazi za delo s tabelami ALTER TABLE spreminjanje tabele: Dodajanje novega polja: ALTER TABLE ime_tabele ADD ime_polja tip_polja; Brisanje obstoječega polja: ALTER TABLE ime_tabele DROP ime_polja; Preimenovanje polja ALTER TABLE ime_tabele CHANGE staro_ime novo_ime lastnosti; Računalništvo, Strukturirani poizvedovalni jezik SQL 10
Ukazi za delo s tabelami Delo z indeksi Omogočajo hitrejše razvrščanje in iskanje po določenih poljih Dodelimo jih poljih po katerih pogosto iščemo ali jih uporabljamo za povezavo z drugimi tabelami Pohitrijo iskanje, upočasnijo dodajanje in brisanje CRATE INDEX kreiranje indeksa CREATE INDEX ime_indeksa ON ime_tabele (polje1, polje2 ); DROP INDEX - brisanje indeksa DROP INDEX ime_indeksa ON ime_tabele Računalništvo, Strukturirani poizvedovalni jezik SQL 11
Ukazi za delo s tabelami Tabelo lahko indeksiramo tudi med kreiranjem: CREATE TABLE ime_tabele { polje1 tip vrednost izbira, polje2 tip vrednost izbira, polje3 tip vrednost izbira, INDEX ime_indeksa(polje) }; Med kreiranjem tabele lahko tudi povemo katero polje (polja) je glavni ključ (za povezave med tabelami) CREATE TABLE ime_tabele { polje1 tip vrednost izbira, polje2 tip vrednost izbira, polje3 tip vrednost izbira, PRIMARY KEY (polje) }; Računalništvo, Strukturirani poizvedovalni jezik SQL 12
Primer CREATE TABLE `City` { `ID` int(11) NOT NULL auto_increment, `Name` char(35) NOT NULL default '', `CountryCode` char(3) NOT NULL default '', `District` char(20) NOT NULL default '', `Population` int(11) NOT NULL default '0', PRIMARY KEY (`ID`) } Računalništvo, Strukturirani poizvedovalni jezik SQL 13
Ukazi za obdelavo podatkov INSERT INTO vstavljanje zapisa v tabelo INSERT INTO ime_tabele (stolpec1, stolpec2 ) VALUES (vrednost1, vrednost2 ); DELETE brisanje poljubnih podatkov iz izbranih zapisov DELETE FROM ime_tabele WHERE pogoj; UPDATE spreminjanje vrednosti zapisov UPDATE ime_tabele SET stolpec1=nova_vrednost1 stolpec2=nova_vrednost2 WHERE pogoj Računalništvo, Strukturirani poizvedovalni jezik SQL 14
Ukazi za obdelavo podatkov INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000); INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500); INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800); INSERT INTO `City` VALUES (4,'Mazar-e-Sharif','AFG','Balkh',127800); INSERT INTO `City` VALUES (5,'Amsterdam','NLD','Noord-Holland',731200); INSERT INTO `City` VALUES (6,'Rotterdam','NLD','Zuid-Holland',593321); INSERT INTO `City` VALUES (7,'Haag','NLD','Zuid-Holland',440900); INSERT INTO `City` VALUES (8,'Utrecht','NLD','Utrecht',234323); INSERT INTO `City` VALUES (9,'Eindhoven','NLD','Noord-Brabant',201843); Računalništvo, Strukturirani poizvedovalni jezik SQL 15
Ukaz SELECT Ukaz SELECT prikaže v obliki tabele podatke(iz stolpcev, ki jih navedemo), ki ustrezajo podani zahtevi SELECT polje1, polje2 FROM ime_tabele WHERE pogoji Izpiše podatke iz polj polje1, polje2, itn. iz tabele ime_tabele, ki ustrezajo pogojem pogoji. Računalništvo, Strukturirani poizvedovalni jezik SQL 16
Ukaz SELECT Prikaz vseh podatkov tabele SELECT * FROM ime_tabele; polje1 polje2 polje3 polje4 Prikaz vseh podatkov poljubnega polja SELECT polje3 FROM ime_tabele; polje1 polje2 polje3 polje4 Prikaz polj v poljubnem vrstnem redu: SELECT polje4, polje1, polje2 FROM ime_tabele; polje4 polje1 polje2 Stolpce lahko združimo in preimenujemo: SELECT CONCAT(polje1,, polje2) AS novo_ime_polja FROM ime_tabele; Prikaz novih vrednosti (uporaba matematičnih funkcij): SELECT polje1, polje2*1.2, polje1 FROM ime_tabele; Računalništvo, Strukturirani poizvedovalni jezik SQL 17
Primeri - prikaži vse podatke o vseh mestih SELECT * FROM City - prikaži ime ter število prebivalcev vsakega mesta SELECT Name, Population FROM City - prikaži oznako, ime in celino vsake države SELECT Code, Name, Continent FROM Country Računalništvo, Strukturirani poizvedovalni jezik SQL 18
Ukaz SELECT WHERE SELECT polje1, polje2 FROM ime_tabele WHERE pogoji... WHERE pogoj polje1 polje2 polje3 polje4 enostaven sestavljen ime_polja operator vrednost pogoj 1 operator pogoj 2... številska, =, <> ali!=, znakovna <, >,=<, >=, BETWEEN... AND, LIKE AND polje1 polje2 polje3 polje4 OR polje1 polje2 polje3 polje4 NOT pogoj polje1 polje2 Računalništvo, Strukturirani poizvedovalni jezik SQL 19
Operator LIKE Operator LIKE... WHERE ime_polja LIKE vrednost Določilo % - vsi, ki se začnejo na črko V:... LIKE 'V%' - vsi, ki se končajo s številom 6:... LIKE '%6' Določilo _ - vsi, ki imajo kot tretjo črko ž:... LIKE ' ž%' - vsi, ki imajo prvo črko a, tretjo pa n:... LIKE a_n%' - vsi, ki vsebujejo niz MEDVED:... LIKE '%MEDVED%' Računalništvo, Strukturirani poizvedovalni jezik SQL 20
Primeri - prikaži imena vseh mest, ki imajo 300.000 ali več prebivalcev SELECT Name FROM City WHERE Population >= 300000 - prikaži seznam imen držav, ki se začnejo na črko S SELECT Name FROM Country WHERE Name LIKE S% Računalništvo, Strukturirani poizvedovalni jezik SQL 21
Primeri - prikaži imena držav in število prebivalcev za tiste države, ki imajo v imenu drugo črko s SELECT Name, Population FROM Country WHERE Name LIKE _s% - poglej, ali je med mesti tudi Ljubljana in izpiši vse podatke za to mesto SELECT * FROM City WHERE Name = Ljubljana Računalništvo, Strukturirani poizvedovalni jezik SQL 22
Primeri - izpišimo vsa slovenska mesta (najprej poiščemo kodo Slovenije) SELECT Name, Code FROM Country WHERE Name = Slovenija SELECT Name FROM City WHERE CountryCode = SVN Računalništvo, Strukturirani poizvedovalni jezik SQL 23
Operator BETWEEN AND Operator BETWEEN AND... WHERE ime_polja BETWEEN vrednost1 AND vrednost2 vrednost1 vrednost2... WHERE ime_polja NOT BETWEEN vrednost1 AND vrednost2 vrednost1 vrednost2 Računalništvo, Strukturirani poizvedovalni jezik SQL 24
Primeri - izpiši vse podatke o državah, ki imajo število prebivalcev med 100000 in 200000 SELECT * FROM Country WHERE Population BETWEEN 100000 AND 200000 - izpiši imena vseh držav, ki se začenjajo s črkami od A do C SELECT Name FROM Country WHERE Name BETWEEN A% AND D% Računalništvo, Strukturirani poizvedovalni jezik SQL 25
Logični operatorji Logični operatorji AND (in), OR (ali) in NOT (ne) Sočasno iskanje rezultatov prek večjega števila pogojev AND vrne podatke, ki ustrezajo vsem pogojem polje1 polje2 polje3 polje4 OR vrne podatke, ki ustrezajo enemu od pogojev polje1 polje2 polje3 polje4 NOT zanika pogoj polje1 polje2 Prednostni vrstni red: AND, OR, NOT Računalništvo, Strukturirani poizvedovalni jezik SQL 26
Primeri - izpiši imena mest ter število njihovih prebivalcev, ki se začnejo na M in imajo več kot pol milijona prebivalcev SELECT Name, Population FROM City WHERE (Name LIKE M% ) AND (Population > 500000) - izpiši vse podatke o državah, ki so bodisi v Evropi bodisi v Afriki SELECT * FROM Country WHERE (Continent = Europe ) OR (Continent = Africa ) Računalništvo, Strukturirani poizvedovalni jezik SQL 27
Primeri - izpiši vse podatke o državah, ki so bodisi v Evropi bodisi v Afriki in imajo več kot 350000 prebivalcev SELECT * FROM Country WHERE ((Continent = Europe ) OR (Continent = Africa )) AND (Population > 350000) - izpišimo imena vseh evropskih držav, ki imajo število prebivalcev med pol in enim milijonom SELECT Name FROM Country WHERE (Continent = Europe ) AND (Population >= 500000) AND (Population =< 1000000) Računalništvo, Strukturirani poizvedovalni jezik SQL 28
Operator IN... ime_polja IN (vrednost1,..., vrednost n) SELECT ime_polja FROM ime_tabele WHERE ime_polja IN (vrednost1,..., vrednostn) polje1 polje2 polje3 polje4 3 0 1 2 SELECT polje3 FROM tabela WHERE polje3 IN (0,1,3) polje3 3 0 1 polje1 polje2 polje3 polje4 A B A C SELECT polje3 FROM tabela WHERE polje3 IN ( A, C ) polje3 A A C Računalništvo, Strukturirani poizvedovalni jezik SQL 29
Primeri - izpiši vse podatke o državah, ki so bodisi v Evropi bodisi v Afriki SELECT * FROM Country WHERE Continent IN ( Europe, Africa ) - izpiši imena vseh držav ter število njihovih prebivalcev, ki imajo 200000 ali 500000 prebivalcev Računalništvo, Strukturirani poizvedovalni jezik SQL 30
Operator ORDER BY Razvrščanje prikazanih podatkov... ORDER BY ime_polja ASC... ORDER BY ime_polja DESC (naraščajoče) (padajoče) SELECT ime_polja FROM ime_tabele ORDER BY ime_polja ali SELECT ime_polja FROM ime_tabele ORDER BY ime_polja ASC SELECT ime_polja FROM ime_tabele ORDER BY ime_polja DESC Računalništvo, Strukturirani poizvedovalni jezik SQL 31
Primer - prikaži podatke o imenih severnoameriških držav, ki imajo 400000 prebivalcev ali več, razvrščene po abecednem vrstnem redu od prve proti zadnji SELECT Name FROM Country WHERE Continent = North America AND Population >= 400000 ORDER BY Name Računalništvo, Strukturirani poizvedovalni jezik SQL 32
Primer - prikaži podatke o imenih severnoameriških držav, ki imajo 400000 prebivalcev ali več, razvrščene po abecednem vrstnem redu od zadnje proti prvi SELECT Name FROM Country WHERE Continent = North America AND Population >= 400000 ORDER BY Name DESC Računalništvo, Strukturirani poizvedovalni jezik SQL 33
Funkcije jezika SQL različne vrednosti posameznih stolpcev združimo v en sam zapis SELECT funkcija(stolpec)from ime_tabele AVG COUNT MAX MIN SUM vrne povprečno vrednost poljubnega stolpca vrne število vseh zapisov oziroma vrstic v poljubnem stolpcu vrne največjo vrednost podatka v izbranem stolpcu vrne najmanjšo vrednost podatka v izbranem stolpcu vrne vsoto vseh števil v izbranem stolpcu Računalništvo, Strukturirani poizvedovalni jezik SQL 34
Primeri - izračunaj povprečno število prebivalcev v vseh evropskih državah SELECT AVG(Population) FROM Country WHERE Continent = Europe - seštej število prebivalcev mest, ki se začnejo z besedo New SELECT SUM(Population) FROM City WHERE Name LIKE New% Računalništvo, Strukturirani poizvedovalni jezik SQL 35
Primeri -preštej, koliko je v tabeli afriških držav, ki imajo število prebivalcev pod milijonom SELECT COUNT(Population) FROM Country WHERE Continent = Africa AND Population < 1000000 - izpiši najmanjše število prebivalcev SELECT MIN(Population) FROM City - izpiši največje število prebivalcev SELECT MAX(Population) FROM City Računalništvo, Strukturirani poizvedovalni jezik SQL 36
Povezovanje tabel Združujemo podatke iz večjega števila tabel Delamo poizvedbe z uprabo podatkov iz večjega števila tabel hkrati Tabele povezujemo prek ključev Glavni ključ ene tabele povežemo z zunanjim ključem druge tabele Uporabljamo operator pika za določitev na katero tabelo se nanaša neko polje SELECT ime_tabele1.ime_polja1, ime_polja2 FROM ime_tabele1, ime_tabele2 WHERE ime_tabele1.ime_polja1 operator ime_tabele2.ime_polja2; Računalništvo, Strukturirani poizvedovalni jezik SQL 37
Primer - izpišimo seznam imen mest posameznih držav SELECT City.Name, Country.Name FROM City, Country WHERE City.CountryCode = Country.Code Računalništvo, Strukturirani poizvedovalni jezik SQL 38