07.10: Uzimanje podataka iz tabele (SELECT ... FROM ,,, WHERE)
Za ove vežbe, zbog skraćenih časova u školi, koristimo tutorijal na web stranici:
https://www.quackit.com/mysql/tutorial/
U nastavku je sledeće:
Priprema za rad:
0 - Pokrenuti Xampp-Control, i u njemu pokruniti Apache i MySQL, a nakon toga pokrenuti PhpMyAdmin.
1 - Kreiranje baze podataka FruitShop:
DROP DATABASE IF EXISTS FruitShop;
CREATE DATABASE FruitShop;
Ili, ako želite, slobodno kopirajte kod iz jednog od crnih kvadrata sa web stranice:
2 - Kreiranje tabela u bazi:
Kopirajte kod koji se nalazi u najvećem crnom kvadratu na web stranici :
https://www.quackit.com/mysql/tutorial/mysql_create_table.cfm
3 - Provera je li sve ok:
Prvo da vidimo koje tabele imamo u bazi:
USE FruitShop;
SHOW TABLES;
Zatim da vidimo strukturu jedne od tabela:
DESCRIBE Fruit;
ili
DESC Fruit;
4 - Ubacivanje podataka u tabele
Da biste što brže popunili tabele sa nekim podacima, kopirajte kod koji se nalazi u najvećem crnom kvadratu na web stranici :
Prethodno navedeno nam je potrebno jer je lekcija koja se radi u stvari traženje podataka iz neke tabele u bazi - a za to nam je potrebna baza i tabele sa poacima u njoj. Lekcija sledi u nastavku
SELECT
Naredba SELECT je najčešće korišćena naredba u SQL-u. Ona omogućava
korisnicima baze podataka da pronađu određenu informaciju koju žele iz
operativne baze podataka. Pogledajte nekoliko primera.
Naredba koja je dole prikazana pronalazi sve informacije
koje su sadržane u tabeli FruitShop. Obratite pažnju na to da se
zvezdica u SQL-u koristi kao džoker karta. Naredba doslovno znači
„Odaberi sve iz tabele FruitShop.“
SELECT *
FROM FruitShop;
S
druge strane, korisnici bi možda želeli da ograniče atribute koji se
pretražuju iz baze podataka. Na primer, želimo da znamo samo nazive voća iz tabele. Sledeća naredba u SQL-u prikazaće
samo tu informaciju:
SELECT FriutName
FROM FruitShop;
Možete da tražite i da se prikaže samo FriutId i FruitName:
SELECT FruitId, FriutNameKlauzula WHERE može se koristiti da bi se ograničili zapisi koji se traže samo na one koji zadovoljavaju određene uslove. Sledeća naredba prikazuje koji je podatak sa FruitId=1 u tabeli FruitShop :
FROM FruitShop;
SELECT *
FROM FriutShop
WHERE FriutId = 1;
Znači:
Pretraživanje
i pribavljanje podataka su najĉešće operacije koje korisnici izvršavaju
u relacionoj bazi podataka. Za pretraživanje i pribavljanje podataka u
SQL-u koristi se naredba SELECT.
Naredba SELECT pribavlja podatke iz jedne tabele ili više povezanih tabela koje se nalaze u relacionoj bazi podataka. U svom osnovnom obliku naredba SELECT ne može ni na koji naĉin da izmeni podatke koji se nalaze u relacionoj bazi podataka.
Primeri koje smo radili na prvom delu časa su sa web stranice:
( Slobodno isprobajte sve primere koje nađete u crnim kvadratima )
Korišćenje aritmetičkih operatora:
SELECT * FROM Fruit
WHERE Inventory > 10;
Šta će se desiti ako u prethodnom primeru umesto znaka > napišete <, <>, <=, >= ? (otkrijte sami)
Korišćenje logičkih operatora:
SELECT * FROM Fruit
WHERE Inventory > 10
AND DateEntered > '2015-01-15';
Šta će se desiti ako u prethodnom primeru umesto AND napišete OR ? (otkrijte sami)
Operator NOT:
koristite ako hoćete da selektujete podatke koji NE ZADOVOLJAVAJU uslov koji sledi:
SELECT * FROM Fruit
WHERE NOT (FruitName = 'Apple');
U poslednjem delu časa smo koristili operatore BETWEEN i LIKE:
Primer sve govori:
SELECT * FROM FruitAko je potrebno, objašnjenje potražite u delu sa teorijom u daljem tekstu.
WHERE DateEntered BETWEEN '2015-01-15' AND '2015-02-25';
Drugi primer (gde se koristi LIKE):
SELECT * FROM Fruit
WHERE FruitName LIKE 'A%';
DETALJNIJE objašnjenje SELECT, WHERE, FROM, ... - OBAVEZNO PROČITATI:
Naredba SELECT je jedna od najkompleksnijih naredbi SQL programskog jezika. Ukljuĉuje veći broj kljuĉnih reĉi klauzula, a ovde će biti navedene samo neke:
SELECT - definiše listu kolona koje će biti ukljuĉene u rezultujuću tabelu
FROM - definiše tabele iz kojih se pribavljaju podaci za potrebe generisanja rezultujuće tabele. Klauzula FROM može da ukljuĉi jednu ili više opcionih JOIN klauzula za povezivanje tabela na osnovu kriterijuma zadatih od strane korisnika.
WHERE - definiše predikat na osnovu koga se ograniĉava broj vrsta u rezultujućoj tabeli. Ova klauzula iz rezultata eliminiše sve vrste za koje specificirani predikat ne vraća vrednost TRUE.
Klauzule SELECT i FROM :
Klauzule SELECT i FROM su jedine obavezne u okviru SELECT naredbe. Klauzula FROM specificira tabele iz kojih se pribavljaju podaci. Ukoliko se navede više tabela potrebno je specificirati naĉin spajanja tabela. Spajanje tabela će biti detaljno objašnjeno u nekoj od narednih lekcija.
Za sada ćemo se ograniĉiti samo na pribavljanje podataka iz jedne tabele.
Klauzula SELECT specificira kolone koje treba ukljuĉiti u rezultujuću tabelu. Mogu se koristiti sledeće opcije:
ALL - u rezultujućoj tabeli prikazuju se sve vrste koje zadovoljavaju navedeni predikat
DISTINCT - iz rezultujuće tabele izbacuju se duplikati vrsta
* - rezultujuća tabela ukljuĉuje sve kolone tabele ili tabela iz kojih se pribavljaju podaci
tabela.* - rezultujuća tabela uključuje sve kolone specificirane tabele
izraz - ime kolone ili funkcije nad kolonama koja će biti ukljuĉena u rezultujuću tabelu
AS pseudonim - novo ime kolone ili funkcije nad kolonama koje im se dodeljuje u rezultujućoj tabeli
U nastavku je dat SQL upit koji prikazuje kompletan sadržaj tabele FruitShop
SELECT * FROM FruitShop;
Rezultat bi bio isti ako bismo napisali upit kod koga su umesto * navedemo imena svih kolona u tabeli.
Ukoliko želimo da prikažemo samo određene kolone iz tabele FruitShop posle SELECT klauzule navešćemo imena kolona koje su od interesa. U nastavku je dat SQL upit koji prikazuje samo Id i nazive voćki.
SELECT FruitId, FruitName FROM FruitShop;
Redosled kojim su kolone navedene u klauzuli SELECT definiše redosled kolona u rezultujućoj tabeli. U nastavku je dat SQL upit koji prikazujeisto što i ovaj gore, ali u drugaĉijem redosledu.
SELECT FruitName, FruitId FROM ucenici;
Klauzula WHERE
Klauzula WHERE specificira
uslov na osnovu koga se kreira rezultujuća tabela. U
rezultujuću tabelu će biti ukljuĉene samo one vrste koje zadovoljavaju
specificirani uslov. U uslovu se mogu javiti:
1. Relacioni operatori
2. Logiĉki operatori
3. Operator BETWEEN
4. Operator IN
5. Operator LIKE
6. Operator IS NULL
SQL podržava šest relacionih operatora koji imaju sledeće znaĉenje:
2. <> Nije jednako (razliĉito)
3. < Manje od
4. > Veće od
5. <= Manje ili jednako od
6. >= Veće ili jednako od
Primer: U ovom primeru dat je SQL upit koji prikazuje podatke o voćkama kojih ima više od 10.
SELECT * FROM Fruit
WHERE Inventory > 10
Logički operatori:
SQL omogućava korišćenje standardnih logičkih operatora AND, OR, NOT, a sem toga i IN, BETWEEN koji omogućavaju jednostavnije korišćenje prethodno navedenih operatora u nekim slučajevima.
Prioritet logičkih operatora je sledeći:
- NOT
- AND
- OR
Logički poeratori AND i OR se koriste na standardan način. međutim, kod SQL-a, logički operator negacije NOT se navodi na početku logičkog izraza, a ne ispred operatora poređenja. Na primer, NOT A=B može da stoji nakon reči WHERE kao uslov, alI A NOT = B NE MOŽE!
Primer: Ako želimo da prikažemo podatke o voćkama kojih ima više od 10 a unesene su su pre 25 januara 2015, možemo koristiti SQL upit koji je dat u nastavku:
SELECT * FROM Fruit
WHERE Inventory > 10
AND DateEntered > '2015-01-15';
Primer: Sledeći primer je SQL upit koji daje sve voćke koje nisu Apple:
SELECT * FROM Fruit
WHERE NOT FruitName='Apple';
Da ne bi svi primeri bili iz iste tabele ili baze, u nastavku će biti korišćeni primeri za tabelu učenici koju smo kreirali na času u školi:
Operator IN
Operator
IN zamenjuje višestruku upotrebu operatora OR i =.
Operator NOT IN prikazuje sve vrste osim onih određenih datom listom.
Primer: U sledećem SQL upitu se korišćenjem operatora IN izdvajaju samo učenici koji se prezivaju Petrović ili Jovanović:
SELECT *Primer: Naredni upit pribavlja podatke o svim učenicima osim onih koji se prezivaju Petrović ili Jovanović:
FROM ucenici
WHERE prezime IN ("Petrović", "Jovanović" );
SELECT *
FROM ucenici
WHERE prezime NOT IN ("Petrović", "Jovanović" );
Operator BETWEEN
Operator BETWEEN zamenjuje višestruku upotrebu operatora AND i =. Ovaj operator omogućava ispitivanje da li je vrednost nekog atributa/kolone u zadatom opsegu.
Primer: Za prikazivanje podataka o učenicima čiji je prosek u opsegu od 1.5 do 5.0 (uključujući i granice opsega) možemo da koristimo operator BETWEEN:
SELECT *
FROM ucenici
WHERE prosek BETWEEN 1.5 AND 5.0 ;
Operator LIKE
Operator LIKE omogućava poređenje vrednosti kolone sa zadatim šablonom. Kod definisanja šablona koristi se procenat (%) i znak pitanja. Procenat (%) predstavlja bilo koji mogući znak (broj, slovo, interpunkcijski znak) ili skup znakova. Znak pitanja (?) zamenjuje samo jedan znak.
Primer: U sledećem upitu traži se spisak svih učenika čije prezime počinje na slovo P:
SELECT *Za nalaženje svih učenika koji sadrže slovo "P" negde u prezimenu,
FROM ucenici
WHERE prezime LIKE 'P%' ;
Operator NOT LIKE prikazuje suprotno - sve vrste koje ne odgovaraju datom opisu koji sledi nakon toga.
PAŽNJA: U zavisnosti od servera koji se koristi, koriste se različiti znakovi za zamenu : SQL Server koristi % za zamenu više znakova i _ za zamenu jednog znaka, dok MS Access umesto % koristi *, a umesto _ koristi ?
Operator IS NULL
Operator
IS NULL se koristi za poređanja sa NULL vrednostima. Treba voditi
računa da se na NULL vrednosti ne može primeniti ni jedan relacioni
operator. Može se samo proveravati da li kolona ima NULL vrednost ili
nema.
Primer: U nastavku je dat SQL upit koji izdvaja podatke o svim učenicima kojima nije unet datum rođenja, odnosno datum rođenja ima NULL vrednost:
SELECT *
FROM ucenici
WHERE datumRodj IS NULL ;
Video lekcije
Za dodatnu vizuelizaciju, pošto ima učenika koji rade od kuće, možete pogledati video lekcije koje već postoje na Youtube-u. One ne mogu da zamene čas u školi, ali mogu pomoći u rezumevanju.
SELECT:
WHERE, logički izrazi: