Osnovni upiti

DML - Data Manipulation Language

	SELECT [{ALL | DISTINCT}] select_item [AS alias] [,...]
	FROM { table_name [[AS] alias] | view_name [[AS] alias]} [,...]
	[ [join_type] JOIN join_condition ]
	[WHERE search_condition] [ {AND | OR | NOT} search_condition [...] ]
	[GROUP BY group_by_expression{group_by_columns}
	[HAVING search_condition] ]
	[ORDER BY {order_expression [ASC | DESC]} [,...] ]

SELECT

SELECT column_name,column_name as 'alias'
FROM table_name;

use STUDIJE
  • Prikazati spisak svih studenata
select *
from studenti
  • Prikazati Imes, indeks, upisan, mesto iz tabele STUDENTI
select Imes, indeks, upisan, mesto
from studenti
  • Prikazati Imes, Indeks, Upisan, Datr iz tabele studenti, gde je Datr naslovljena kao ‘Datum rodjenja’
select Imes, indeks, upisan, mesto, Datr as 'Datum rodjenja'
from studenti

DISTINCT

SELECT DISTINCT column_name,column_name
FROM table_name;
  • Selektovati različita mesta iz tabele Studenti, i dopisati kolonu sa NULL vrednostima
select distinct mesto, NULL
from studenti

WHERE

SELECT column_name,column_name
FROM table_name
WHERE predikat;
  • Prikazati podatke o studentima koji su upisani 2000 godine
select *
from studenti
where upisan = 2000

BETWEEN

SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
  • Prikazati sve studente koji su upisani izmedju 2000 i 2005
select *
from studenti
where upisan between 2000 and 2005

IN

SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
  • Prikazati Studente koji su iz Kragujevca ili Kraljeva
select *
from studenti
where mesto in ('Kragujevac', 'Kraljevo')
  • Prikazati Studente koji NISU iz Kragujevca ili Kraljeva
select *
from studenti
where mesto not in ('Kragujevac', 'Kraljevo')

LIKE

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
  • Prikazati sve studente koji dolaze iz grada čije ime počinje na “K”
select *
from studenti
where mesto like 'K%'
  • Prikazati studente za koje je nepoznat datum rodjenja
select *
from studenti
where datr is null

ORDER BY

SELECT column_name, column_name
FROM table_name
ORDER BY column_name ASC|DESC, column_name ASC|DESC;
  • Prikazati Studente koji NISU iz Kragujevca ili Kraljeva sortirane po imenu (od najmanjeg ka najvećem)
select *
from studenti
where mesto not in ('Kragujevac', 'Kraljevo')
order by Imes desc

CONCAT && CAST

SELECT CAST(column_name as TYPE)
FROM table_name

SELECT CONCAT(column_name, value, column_name, ...)
FROM table_name
  • Za svako ime studenta kreirati kolonu u kojoj će pisati njegov Indeks kao “br_indeksa/godina” (CONCAT i CAST)

I način

select Imes, CONCAT(Indeks, '/', Upisan) as Indeks
from Studenti

II način

select Imes, CAST(Indeks as varchar(5)) + '/' + CAST(Upisan as varchar(5))
from Studenti

CASE

I) Simple CASE expression:

CASE input_expression   
  WHEN when_expression THEN result_expression [ ...n ]   
  [ ELSE else_result_expression ]   
END

II) Searched CASE expression:

CASE  
  WHEN Boolean_expression THEN result_expression [ ...n ]   
  [ ELSE else_result_expression ]   
END
  • Pronađi smeštaj - Prikazati sve studente i dodati kolonu u kojoj za studente koji nisu iz kragujevca piše vrednost “Potraban smestaj”, u suprotnom piše “Lokalno”
select Imes,
case Mesto
  when 'Kragujevac' then 'LOKALNO'
  else 'POTREBAN SMESTAJ'
end as 'Smestaj'
from Studenti
  • Selektovati sve ocene iz prijava, i dodati kolonu koja za svaku ocenu ispisuje da li je ocena
    • “Ispod proseka” (5.6),
    • “Prosek” (7,8),
    • “Odlicna” (9)
    • “Izuzetna” (10)
select Indeks, Upisan, Spred,
case
  when Ocena > 5 and Ocena < 7 then 'Ispod proseka'
  when Ocena >= 7 and Ocena < 9 then 'Proseck'
  when Ocena = 9 then 'Odlicana'
  else 'Izuzetana'
end as Status
from Prijave

DATE FUNCTIONS

DATEDIFF ( datepart , startdate , enddate )
DATENAME ( datepart , date )
DATEPART ( datepart , date )
GETDATE  ( )
  • Prikazati godišta i starost, svih studenata koji imaju više od 25 godina
select Imes, Indeks, Upisan, DATEPART(year, datr) as 'Godina', DATEDIFF(year, datr, GETDATE()) as Starost
from Studenti
where DATEDIFF(year, datr, GETDATE()) > 25

AGREGATNE FUNKCIJE

COUNT, MIN, MAX, SUM, AVG
  • Prikazati broj studenata koji su upisani na PMF-u
select COUNT(*)
from Studenti
  • Prikazati broj studenata koji su upisani na PMF-u, a imaju poznat datum rodjenja
select COUNT(datr)
from Studenti
  • Prikazati prosecnu, minimalnu i maksimalnu ocenu na predmetu sa sifrom 23
select MAX(ocena) as minimalna, MIN(ocena) as maksimalna, AVG(cast(ocena as real)) as prosecna
from Prijave
where Spred = 23

select MAX(ocena) as minimalna, MIN(ocena) as maksimalna, AVG(ocena * 1.0) as prosecna
from Prijave
where Spred = 23

GROUP BY

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
  • Za svako mesto ispisati koliko studenata dolazi iz njega.
select Mesto,count(*) as 'broj studenata'
from Studenti
group by Mesto
  • Za svako godište studenata koje se pojavljuje u tabeli Studenti, ispisati broj studenata koji su rođeni te godine.
select datepart(year, Datr) godiste, COUNT(*) as 'broj studenata'
from studenti
group by datepart(year, Datr)
  • Sa svakog studenta (indeks, upisan) ispisati koliko ispita je polozio i njegovu prosečnu ocenu
select Indeks, Upisan, count(*) 'broj polozenih', Avg(cast(Ocena as real)) as Prosek
from Prijave
group by Indeks, Upisan