SQL

SQL (engl. Structured Query Language) je relacioni upitni jezik (ANSI i ISO standard). Relacije se kreiraju jednom naredbom i odmah su dostupne, što ga čini jednostavnim za korišćenje. Uniforman je, jer se svi podaci i rezultati operacija prikazuju u vidu tabele i omogućava interaktivno i klasično programiranje. Sve do verzije SQL:1999 ovaj jezik je bio neproceduralan, odnosno njime se specificiralo ŠTA, a ne i KAKO nešto treba uraditi.

Istorijat

Tvorac SQL-a je Donald Chamberlin, a nastao je u IBM-ovoj istraživačkoj laboratoriji (IBM Research Laboratory) u San Jose-u, Kalifornija 1974. godine, dakle na istom mestu gde je E. F. Kod 1970. definisao osnovne koncepte relacionog modela podataka. Jezik se u početku zvao SEQUEL (engl. Structured English Query Language) i predstavljao je programski interfejs (API) za System R, prototipski sistem za upravljanje bazom podataka (SUBP) koji se razvijao kao deo istraživačkog projekta pod istim nazivom.

Pojava komercijalnih relacionih sistema uvećala je značaj i ubrzala proces standardizacije relacionog upitnog jezika. Prva etapa tog procesa završila se 1986. godine usvajanjem SQL-a kao standardnog relacionog upitnog jezika. Ta prva verzija SQL standarda je poznata pod nazivom SQL-86. Njom su standardizovane osnovne karakteristike SQL-a kao deklarativnog relacionog upitnog jezika. Međutim, mnoge bitne karakteristike jezika ostale su nestandardizovane. To je dovelo do revizija standarda, koji je usvojen 1989. godine i kojom su standardizovane karakteristike koje se odnose na očuvanje integriteta baze podataka i povezivanje sa klasičnim programskim jezicima. Ta verzija SQL standarda poznata je pod nazivom SQL-89. 1992. godine usvojena je sledeća bitna revizija standarda, poznata pod nazivom SQL-92 ili SQL-2, kojom je SQL zaokružen kao programski jezik, a obim standarda uvećan šest puta u odnosu na polaznu verziju. Naredna verzija SQL standarda usvojena je 1999. godine.[1]

SQL: 1999

Iako su početne verzije SQL-a bile prilično jednostavne, bliske korisniku i u velikoj meri deklarativne za SQL:1999 se može reći da je kompleksan, proceduralno/deklarativan jezik. U nju su uključeni koncepti objektne tehnologije, mehanizam trigera, rekurzija i proceduralna proširenja. Da bi se povećala funkcionalnost jezika, u SQL-1999 standardu uvedena je proceduralna nadgradnja SQL-a, koju uglavnom čine upravljačke struktrure slične upravljačkim strukturama klasičnih programsih jezika. SQL-1999 standard definiše više načina korišćenja SQL-a. Dva osnovna načina su direktno (interaktivno) korišćenje SQL-a i povezivanje SQL-a sa klasičnim programskim jezicima („ugrađeni“ SQL).[1]

SQL naredbe

SQL-1999 standard razvrstava SQL naredbe u sledećih 7 kategorija:

  • Naredbe za šemu baze podataka (SQL-schema statements) - za kreiranje, izmenu i izbacivanje šema i objekata šema (CREATE, ALTER, DROP)
  • Naredbe za podatke (SQL-data statements) - za prikaz i ažuriranje podataka baze (SELECT, INSERT, UPDATE, DELETE)
  • Naredbe za transakcije (SQL-transaction statements) - za startovanje, završavanje i postavljanje parametara za transakcije (COMMIT, ROLLBACK)
  • Naredbe za kontrolu (SQL-contol statements), koje se koriste za kontrolu izvršavanja sekvence SQL naredbi (CALL, RETURN)
  • Naredbe za konekcije (SQL-connection statements) - za uspostavljanje i prekidanje SQL konekcije (CONNECT, DISCONNECT)
  • Naredbe za sesije (SQL-session statements) - za postavljanje default vrednosti i drugih parametara SQL sesije (SET)
  • Naredbe za dijagnostiku (SQL-diagnostic statements) - signalizuju izuzetke u SQL rutinama (GET DIAGNOSTIC)

Struktura SQL

Domeni

Domen je u SQL-u prost, korisnički definisan imenovan objekat koji se može koristiti kao alternativa za predefinisan tip podatka nad kojim se definiše. Može imati default vrednost i jedno ili više ograničenja.

  • Domen se kreira naredbom:
CREATE DOMAIN <naziv domena> [AS] <predefinisani tip>
[DEFAULT <vrednost>]
[[CONSTRAINT <naziv ograničenja>] CHECK (<ograničenje>)] ..
  • Definicija domena se menja naredbom ALTER :
ALTER DOMAIN <naziv domena>
SET DEFAULT <vrednost> |
DROP DEFAULT |
ADD [CONSTRAINT <naziv ograničenja>] CHECK (<ograničenje>) |
DROP CONSTRAINT <naziv ograničenja>
  • Domen se uništava naredbom:
 DROP DOMAIN <naziv domena>

Indeksi

Indeksi su strukture podataka koje olakšavaju i čine efikasnijim pristup podacima baze. Vrednosti indeksiranih kolona mogu biti jedinstvene (primarni ključ) ukoliko se pri kreiranju izabere varijanta UNIQUE.

CREATE [UNIQUE] INDEX <naziv indeksa>
 ON  (<naziv tabele> ( <naziv kolone1> [, <naziv kolone2>, ..]) ;

Izbacivanje se vrši naredbom:

DROP INDEX <naziv indeksa>

Katalog

Katalog je imenovana kolekcija šema baze podataka u SQL-u. Svaki katalog sadrži šemu rečnika podataka sa nazivom INFORMATION SCHEMA. U SQL–u ne postoji mogućnost kreiranja i brisanja kataloga.

Šema

Šema predstavlja kolekciju svih objekata koji dele isti prostor imenovanja. Šema može sadržati jednu ili više tabela, a svaka tabela može pripadati logički tačno jednoj šemi. Šema se kreira naredbom:

 CREATE SHEMA <naziv šeme>

Izbacivanje šeme može biti CASCADE - izbacuje šemu i objekte iz nje ili RESTRICT - brisanje šeme koja je prazna i ostvaruje se naredbom:

DROP SHEMA <naziv šeme> CASCADE | RESTRICT

Pun naziv objekta specificira se u obliku:

<naziv kataloga>, <naziv šeme>, <naziv objekta>

Tipovi podataka

Numerički tipovi
Tačni
INTEGER (INT)
SMALLINT
NUMERIC
DECIMAL (DEC)
Približni
REAL
DOUBLE PRECISION
FLOAT
Tekstualni tipovi
CHARACTER (CHAR)
CHARACTER VARYING
(CHAR VARING, VARCHAR)

CHARACTER LARGE OBJECT(CHAR LARGE OBJECT, CLOB)
Binarni tipovi
BIT
BIT VARYING
BINARY LARGE OBJECT
(BLOB)
Datumski tipovi
DATE
TIME
TIMESTAMP
TIME WITH TIMEZONE
TIMESTAMP WITH TIME ZONE
Intervalni tipovi
Godina-mesec
INTERVAL YEAR
INTERVAL MOUNTH
INTERVAL YEAR TO MOUNTH
Dan-vreme(neki iz grupe)
INTERVAL DAY
INTERVAL DAY TO HOUR
INTERVAL HOUR TO MINUTE

Tabele

Podaci se u SQL-u čuvaju se i prikazuju u obliku tabela. Svaka kolona tabele ima ime i tip podatka ili domen. Red je najmanja jedinica podatka koja se može uneti u tabelu ili izbrisati iz nje.

U SQL-u koriste se:

  • Bazna tabela - vrsta tabele za čuvanje svih SQL podaka. Može biti:

Perzistentna tabela

CREATE TABLE <naziv tabele>
(<naziv kolone1> <tip podatka> NOT NULL],
<naziv kolone> <tip podatka> [NOT NULL], ..)

Globalna privremena tabela

 CREATE GLOBAL TEMPORARY TABLE  <naziv tabele>
(<naziv kolone1> <tip podatka> [ NOT NULL],
<naziv kolone> <tip podatka> [ NOT NULL], . .) ;

Kreirana lokalna privremena tabela

 CREATE LOCAL TEMPORARY TABLE  <naziv tabele>
(<naziv kolone1> <tip podatka> [ NOT NULL],
<naziv kolone> <tip podatka> [ NOT NULL], . .) ;

Deklarisana lokalna privremena tabela

 
 DECLARE LOCAL TEMPORARY TABLE MODULE  <naziv tabele>
(<naziv kolone1> <tip podatka> [NOT NULL],
<naziv kolone> <tip podatka> [ NOT NULL], . .) ;
  • Izvedena tabela - predstavlja rezultat izvršavanja upita.
  • Tabela pogleda – predstavlja rezultat poziva imenovanog upita(pogleda).
  • Dodavanje nove kolone
ALTER TABLE <naziv tabele>
[ADD COLUMN] <definicija kolone> ;
  • Izmena postojeće kolone
ALTER TABLE <naziv tabele>
[ALTER COLUMN] <naziv kolone>
SET DEFAULT <vrednost> |
DROP DEFAULT;
  • Izbacivanje kolone iz tabele
ALTER TABLE <naziv tabele>
DROP [COLUMN] <naziv kolone> ;
  • Dodavanje ili izbacivanje ograničenja na vrednosti
ALTER TABLE <naziv tabele>
ADD [CONSTRAINT <naziv ograničenja> ] <ograničenje tabele> |
DROP CONSTRAINT <naziv ograničenja> ;
  • Brisanje sadržaja tabele
DELETE TABLE <naziv tabele>;
  • Brisanje tabele i njenog sadržaja
DROP TABLE <naziv tabele>;

Vidi još

Reference

  1. 1,0 1,1 Lazarević B., Marjanović Z., Ančić N., Babarogić S., 2010, Baze podataka, Fakultet organizacionih nauka, Beograd. ISBN 978-86-7680-144-2.

Literatura

Spoljašnje veze

Медији везани за чланак SQL на Викимедијиној остави

Delete (SQL)

DELETE је наредба у SQL језику којом се бришу уноси из табеле. Брисање се може применити на одређене редове или на целу табелу. Неки језици, као што је MySQL дозвољавају и брисање из више табела помоћу једне DELETE наредбе.

Insert (SQL)

INSERT је наредба у SQL језику којом се додаје један или више нових уноса у табелу базе података.

Join (SQL)

SQL придруживање клаузула комбинује записе из две или више табела у референтне базе података. Креира сет који може бити снимљен као табела или искоришћен такав какав јесте. ПРИДРУЖИВАЊЕ је средство за комбиновање поља из две табеле (или више) користећи сродне вредности. ANSI-стандард SQL одређује пет типоваПРИДРУЖИВАЊА: УНУТРАШЊЕ, ЛЕВО СПОЉАШЊЕ, ДЕСНО СПОЉАШЊЕ, ПОТПУНО СПОЉАШЊЕ и УКРШТЕНО. Као специјалан случај, табела (базна табела, преглед, или придружена табела) може придружити себе у самопридруживање.

Програмер пише наредбу ПРИДРУЖИВАЊА за идентификацију записа за придруживање. Ако је израчунати предикат тачан, комбиновани запис је онда произведен у очекиваном формату, скуп записа или привремена табела.

Open Database Connectivity

У рачунарству, ODBC (енгл. Open Database Connectivity) обезбеђује стандардни софтверски интерфејс за приступ бази података система за управљање података. Дизајнер ODBC-a су имали за циљ да га одвоје од програмских језика, база података и оперативних система однсосно да ODBC подржавају сви програмски језици, системи, базе итд. Према томе, свака апликација може да користи ODBC за SQL упит из базе података, без обзира на платформу. Апликација треба да зна само ODBC синтаксу, а DBMS (Database Management Systems) враћа податке која апликација може да разуме.

PostgreSQL

PostgreSQL је робустан, објектно-релациони систем за управљање базама података (објектно-релациони DBMS или ORDBMS), произведен на основу Берклијевог система за управљање базама података Postgres. PostgreSQL садржи моћан објектно-релациони модел података, богат избор врста података, лаку надоградивост, као и надограђени сет наредби SQL језика.

SQL injekcija

SQLi (engl. SQL injection) je proces "injektovanja" posebnog koda u bazu podataka, što hakerima obično omogućava pristup administratorskom panelu i difejsovanje sajta. Obično su mete neosigurani sajtovi sa MySQL bazama podataka, koja ima sigurnosni propust. Sve je više takvih napada, a administratori se trude da poprave greške u sistemima. Uprkos tome hakeri i dalje pronalaze nove nedostatke sistema i svakog dana se hakuje mnoštvo sajtova.

Select (SQL)

SELECT је наредба у SQL језику којом се врши избор уноса из одређених табела у бази података.Она може да врати нула или више уноса. У оквиру ње могуће је користити више необавезних клаузула:

WHERE - враћа редове који испуњавају услов наведен у WHERE клаузули

GROUP BY - групише редове који деле исту особину, тако да се на сваку групу могу применити агрегатне функције

ORDER BY - сортира податке по одређеној колони

HAVING - ради исто као WHERE, али после груписања

Trigeri

Triger predstavlja blok PL/SQL koda koji se automatski izvršava kada korisnik pokuša modifikaciju podataka u okviru određene tabele u bazi podataka. Uglavnom se koristi za čuvanja integriteta podataka u bazi podataka. U zavisnosti od toga koje operacije baze podataka izazivaju okidanje trigera mogu se podeliti na: INSERT, UPDATE, DELETE trigere. Mogu se okinuti neposredno pre (BEFORE) ili posle (AFTER) izvršavanja SQL naredbe.

Trigeri se najčešće koriste za:

nadgledanje (potencijalnih) promena u bazi podataka

forsiranje ograničenja

automatsko postavljanje ID-ova i izvedenih vrednosti

automatsko čuvanje starijih verzija podataka

sprečavanje izmena

automatsko ažuriranje dnevnika promena

reviziju promena

primenjivanje pravila poslovanja

poboljšavanje pravila poslovanjaGlavne karakteristike i efekti trigera su:

ne prihvataju parametre i argumente

može otkazati određenu operaciju

može izazovati multipliciranje grešaka za odgovarajaću tabelu, ako je loše napisan

ne može vratiti na pređašnje stanje pre izvršenja SQL naredbe.

Булов тип података

У рачунарској науци, Булов тип података је тип података, који има две вредности (обично означене као тачно и нетачно). Он показује истинитосну вредност логике и Булове алгебре. Добио је име по Џорџу Булу, који је први дефинисао алгебарски систем логике средином деветнаестог века. Логички тип података је пре свега повезан са условним изјавама, које омогућавају различите акције и које мењају контролу тока у зависности од тога да ли програмски наведен логички услов има вредност тачно или нетачно. То је специјалан случај логичког типа података; логика не мора увек да буде Булова.

Декларативно програмирање

У информатици, декларативно програмирање је парадигма програмирања, стил изградње структура и елемената рачунарских програма, који изражавају логику рачунања без описивања њеног контролног тока. Многи језици примењују овај покушај да се смање или елиминишу нежељени ефекти описујући шта програм треба да постигне у смислу домена проблема, пре него описује како остварује низ у програмском језику примитивног стила (у колико се лево од реализације језика). Ово је у супротности са императивним програмирањем, у којој се алгоритми спроводе у смислу експлицитних корака.

Декларативно програмирање често сматра програме као теорија у формалне логике, и израчунавања као одбитке у том логичком простору. Декларативно програмирање може у великој мери поједноставити писање паралелних програма.Уобичајени декларативни језици укључују оне базе језика упита система (на пример, SQL, XQuery), регуларни изрази, логичко програмирања, функционално програмирање и управљање конфигурацијом система.

Мај Ес-Кју-Ел

Мај Ес-Кју-Ел (енгл. MySQL) вишенитни је вишекориснички SQL систем за управљање базама података.

Систем ради као сервер, обезбјеђујући вишекориснички интерфејс за приступ бази података.

16. јануара 2008. године, MySQL AB је објавио да је Sun Microsystems откупио MySQL за око милијарду америчких долара.

Очекује се крај откупа у трећој или четвртој четвртини фискалне године, која завршава 30. јуна 2008.

Примарни кључ

У дизајну релационих база података, јединствени кључ или примарни кључ је кандидат за кључ који јединствено идентификује сваку врсту у табели. Јединствени или примарни кључ може да се састоји од једне или више колона. Две различите врсте у табели не могу да имају исту вредност у тим колонама. У зависности од дизајна, табела може да има произвољан број јединствених кључева, али и само један примарни кључ.

Јединствени кључ мора да јединствено идентификује све могуће врсте које могу да се јаве у табели, а не само тренутно постојеће. Примери јединствених кључева су ЈМБГ (који идентификује особу) или ISBN (који идентификује књигу). Име и презиме не представљају јединствени кључ особе јер не идентификују особу јединствено.

Примарни кључ је специјални случај јединственог кључа. Главна разлика је што код јединствених кључева имплицитно NOT NULL ограничење није аутоматски осигурано док код примарних кључева јесте. Стога вредности у колонама јединственог кључа могу да имају вредност NULL. Још једна разлика је у томе да се примарни кључ дефинише посебном синтаксом.

Релациони модел, изражен релационом алгебром и релационим рачуном не прави разлику између примарних кључева и осталих типова кључева. Примарни кључеви су додати у стандард SQL првенствено да би олакшали посао програмерима.

На јединствене кључеве као и на примарне кључеве могу да референцирају страни кључ еви.

Програмски језик

Програмски језик је формални језик који се може користити за контролу понашања машине, нарочито рачунара.Најранија позната програмибилна машина која је претходила изуму дигиталног рачунара био је аутоматски флаутиста, направа коју су у 9. веку описала браћа Муса из Багдада, током Исламске златне ере. Од раних 1800-их, „програми” су кориштени за управљање радом машина као што је [[Jacquard loom}}

Програмски језици се користе да олакшају комуникацију са рачунаром приликом организовања и манипулације информација, али и да прецизно изразе алгоритме. Неки аутори ограничавају израз „програмски језик“ само на језике којима се могу изразити сви могући алгоритми, а понекад се користи израз „рачунарски језик“, који се односи на више ограничене вештачке језике. Створено је више хиљада програмских језика, и нови се стварају сваке године. Многи програмски језици језици захтевају да се прорачун специфицира у императивној форми (нпр., као секвенца операција које се морају извршити), док други језици користе друге форме програмских спецификација, као што је декларативна форма (нпр. жељени резултат се специфицира, а не како да се оствари).

Опис програмског језика се обично дели у две компоненте синтаксу (форму) и семантику (значење). Неки језици су дефинисани спецификационим документом (на пример, C програмски језик је специфициран путем ISO стандарда), док други језици (као што је Перл) имају доминантну имплементацију која се третира као референца. Неки језици имају оба вида дефиниције, при чему је основни језик дефинисан стандардом, а екстензије се узимају из доминантне имплементације.

Процес-оријентисано програмирање

Процес-оријентисано програмирање је парадигма програмирања која раздваја забринутост структуре података и истовремене процесе који делују на њих. Структуре података у овом случају су обично упорне, комплексне, и великих размера - предмет опште намене апликација, за разлику од специјализоване обраде специјализованог сета података виђених у високим апликацијама продуктивности (ВАП). Модел омогућава стварање апликација великих обима да делимично деле заједничке сетове података. Програми се функционално разлажу у паралелним процесима који стварају и поступају по логично заједничким подацима.

Парадигма је првобитно измишљена за паралелне рачунаре 1980-те, посебно рачунарима изграђеним са транспутер микропроцесорима од стране INMOS, или сличних архитектура. Она еволуирала да задовољи недостатке у поруци пролаза парадигме Occam-а (уреди) и омогући равномерну ефикасност када дође до портања апликација између дистрибуиране меморије и заједничке меморије паралелних рачунара.

Први пример парадигме појављује се у програмском језику Ease дизајан на универзитету Јејл 1990. Слични модели су се појавили у лабавој комбинацији SQL базе података и објектно оријентисаног језика као што је Јава, често се назива објектно-релациони модел и нашироке је користи у великој мери дистрибуираних система данас. Парадигма ће се вероватно појавити на десктоп рачунарима кад микропроцесор повећа број процесора (мултикор) по чипу.

Релационе базе података

Релациона база података је посебан тип базе података код којег се организација података заснива на релационом моделу. Подаци се у оваквим базама организују у скуп релација између којих се дефинишу одређене везе. Релација се дефинише као скуп н-торки са истим атрибутима, дефинисаних над истим доменима из којих могу да узимају вредности. У релационим базама података, свака релација мора да има дефинисан примарни кључ, који представља атрибут помоћу којег се јединствено идентификује свака н-торка. Релација опционо може да поседује и спољни кључ, преко којег остварује везу са другим релацијама.

Управљање оваквим базама података се реализује преко система за управљање релационим базама података. Међу најпопуларнијим таквим системима данас су: Microsoft SQL Server, Oracle Database, MySQL и други. Већина тих система користи упитни језик SQL за манипулацију подацима.

Страни кључ

У контексту релационих база података, страни кључ је референцијално ограничење између две табеле. Страни кључ идентификује колону или скуп колона у једној (референцирајућој) табели, која реферише на колону или скуп колона у другој (референцираној) табели. Колоне у референцирајућој табели морају да буду примарни кључ или кандидат за кључ у референцираној табели. Вредности референцирајућих колона из једног реда морају да се појављују у тачно једном реду референциране табеле. Стога, ред у референцирајућој табели не сме да садржи вредности које не постоје у референцираној табели (изузев можда вредности NULL). На овај начин референце могу да повезују податке из различитих табела. Страни кључ представља суштински део нормализације база података. Више редова у референцирајућој табели може да показује на исти ред у референцираној табели.

Референцирајућа и референцирана табела могу да буду иста табела, то јест страни кључ може да показује на исту табелу. Такав страни кључ је у SQL:2003 познат као самореференцирајући или рекурзивни страни кључ.

Једна табела може да има више страних кључева, и сваки страни кључ може да показује на различиту табелу. О интегритету сваког страног кључа се систем базе података стара појединачно.

Неисправни односи страни кључ/примарни кључ или нефорсирање спровођења тих односа често представљају узрок многих проблема при моделирању података.

Табела (база података)

У релационим базама података, табела је скуп елемената података (вредност) који су организовани по моделу вертикалних колона (које су идентификоване од стране свог имена) и хоризонталних редова. Табела има одређени број колона, али могу имати и било који број редова. Обично прва колона је примарни кључ, односно значи да та колона једнозначно одређује сваки ред у табели.

Функционално програмирање

У рачунарству, функционално програмирање је програмска парадигма која третира програм као израчунавање математичких функција и избегава стања и променљиве податке. Акценат је на примени функција, у супротности са стилом императивног програмирања, код кога је нагласак на промени стања. Корени функционалног програмирања леже у ламбда рачуну, формалном систему развијеном током 1930-их ради проучавања дефиниције и примене функција и рекурзије. Многи функционални програмски језици могу да се посматрају као окићени ламбда рачуна.У пракси, разлика између математичке функције и појма функције који се користи у императивном програмирању је у томе што императивне функције могу да имају бочне ефекте, због тога што могу да промене вредности већ извршених израчунавања. Због овога, њима недостаје референцијална транспарентност, то јест, исти израз може да доведе до различитих резултата у различитим тренуцима, у зависности од стања програма који се извршава. Са друге стране, у функционалном коду, излазна вредност функције зависи само од аргумената који се проследе функцији, па тако позивање функције f два пута, са истом вредношћу аргумента x ће произвести исти резултат, f(x) оба пута. Елиминисањем бочних ефеката разумевање и предвиђање понашања програма може да постане много лакђе, и ово је једна од кључних мотивација за развој фунцкионалног програмирања.Функционални програмски језици, посебно они који су чисто функционални, се више користе на универзитетима него у комерцијалном развоју софтвера. Међутим међу значајнијим функционалним програмским језицима који се користе у комерцијалној примени су

Ерланг, OCaml,Хаскел,Scheme

и домен-специфични програмски језици као што су

R (статистика), Mathematica (симболичка математика),J и K (финансијска анализа), и XSLT (XML). Широко коришћени декларативни домен-специфични језици као што су SQL и Lex/Yacc, користе неке елементе функционалног програмирања, посебно у избегавању променљивих вредности. Спредшитови такође могу да се посматрају као функционални програмски језици.Програмирање у функционалном стилу може да се постигне и у језицима као што су C, C++, Python, или Java, који нису специфично дизајнирани за функционално програмирање.

SQL
Верзије
Кључне речи
Повезан
ISO/IEC SQL делови

На другим језицима

This page is based on a Wikipedia article written by authors (here).
Text is available under the CC BY-SA 3.0 license; additional terms may apply.
Images, videos and audio are available under their respective licenses.