Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 10
  • SQL: univerzalni jezik za rad sa bazama podataka. Uvjet UPDATE i WHERE

SQL: univerzalni jezik za rad sa bazama podataka. Uvjet UPDATE i WHERE

Funkcionalnost SQL jezik

Glavna funkcionalnost SQL jezika je data u nastavku.

Definicija podataka. Ova SQL funkcija je opis strukture podržanih podataka i organizacije relacijskih odnosa (tablica). Operatori za kreiranje baze podataka, kreiranje tabela i pristup podacima su namijenjeni da je implementiraju.

Kreiranje baze podataka. Za stvaranje nova baza podataka, koristi se izraz CREATE DATABASE. Struktura operatora specificira ime kreirana baza podaci.

Kreiranje tabela. Osnovna tablica je kreirana korištenjem izraza CREATE TABLE. Ova izjava specificira imena polja, tipove podataka za njih i dužinu (za neke tipove podataka). SQL koristi sljedeće tipove podataka:

INTEGER – cijeli broj;

CHAR – vrijednost znakova;

VARCHAR – vrijednost znakova, pohranjuju se samo znakovi koji nisu prazni;

DECIMAL – decimalni broj;

FLOAT – broj s pomičnim zarezom;

DOUBLE PRECISION – plutajući zarez dvostruke preciznosti;

DATETIME – datum i vrijeme;

BOOL – Boolean vrijednost.

Naredba za kreiranje tablice navodi ograničenja na vrijednosti stupaca i na tablicu. Moguća ograničenja prikazani su u tabeli. 4.8

Tabela 4.8 Ograničenja za definirane podatke

Za relacioni model podataka, bitno je navesti strani ključ (FOREIGNKEY). Kada deklarirate strane ključeve, morate nametnuti odgovarajuća ograničenja na stupac, na primjer, NOT NULL.

U SQL naredbi, CHECK označava semantička ograničenja koja osiguravaju integritet podataka, kao što je ograničavanje skupa prihvatljive vrijednosti određenu kolonu.

Ne možete koristiti naredbu kreiranja tablice više od jednom na istoj tablici. Ako se nakon njegovog kreiranja otkriju netočnosti u njegovoj definiciji, tada se promjene mogu izvršiti korištenjem naredbe ALTER TABLE. Ovaj operator je namijenjen za promjenu strukture postojeća tabela: Možete ukloniti ili dodati polje postojećoj tabeli.

Manipulacija podacima. SQL dozvoljava korisniku ili aplikacijskom programu da promijeni sadržaj baze podataka umetanjem novih podataka, brisanjem ili modifikacijom postojećih podataka.

Umetanje novih podataka je procedura za dodavanje redova u bazu podataka i izvodi se pomoću INSERT izraza.

Modifikacija podataka uključuje promjene vrijednosti u jednoj ili više kolona tabele i izvodi se pomoću naredbe UPDATE. primjer:

SET iznos=iznos+1000,00

WHERE iznos>0

Uklanjanje redova iz tablice koristeći naredbu DELETE. Sintaksa operatora je:

OD stola

Klauzula WHERE je opciona, ali ako nije uključena, svi unosi u tabeli će biti izbrisani. Korisno je koristiti izraz SELECT s istom sintaksom kao i izraz DELETE da unaprijed provjerite koji će zapisi biti obrisani.

Osiguravanje integriteta podataka. SQL jezik vam omogućava da definirate prilično složena ograničenja integriteta, čije će se zadovoljenje provjeravati za sve modifikacije baze podataka. Praćenje rezultata transakcije, greške u obradi i koordinacija paralelni rad sa bazom podataka od nekoliko aplikacija ili korisnika obezbjeđuju COMMIT naredbe (bilježi uspješan završetak trenutne transakcije i početak nove) i ROLLBACK (potreba vraćanja - automatski oporavak stanje baze podataka na početku transakcije)

Uzorkovanje podataka- jedan od bitne funkcije bazu podataka kojoj odgovara SELECT izraz. Primjer korištenja operatora razmatran je u prethodnom dijelu.

U SQL-u možete kreirati ugniježđene nizove upita (potupita). Postoji određene vrste upite koji se bolje implementiraju korištenjem potupita. Ovi upiti uključuju takozvane provjere postojanja. Pretpostavimo da želite da dobijete podatke o učenicima koji nemaju ocjenu od sedam bodova. Ako se vrati prazan skup, to znači samo jedno - svaki učenik ima, najmanje, jedna takva procjena.

Povezivanje tabela. SQL izrazi vam omogućavaju da dohvatite podatke iz više od jedne tablice. Jedan od načina da to učinite je da povežete tabele koristeći jedno zajedničko polje.

Naredba SELECT mora sadržavati ograničenje za podudaranje vrijednosti određene kolone (polja). Zatim samo oni redovi u kojima su vrijednosti data kolona podudaraju se. Ime kolone je naznačeno samo zajedno sa imenom tabele; inače će izjava biti dvosmislena.

Možete koristiti druge vrste povezivanja tablica: INTER JOIN operator (unutrašnje spajanje) osigurava da rezultirajući skup zapisa sadrži odgovarajuće vrijednosti u povezanim poljima. Eksterne veze(OUTER JOIN) omogućava vam da u rezultat upita uključite sve redove iz jedne tabele i odgovarajuće redove iz druge

Kontrole pristupa. SQL osigurava sinhronizaciju obrade baze podataka raznim aplikativnim programima, štiteći podatke od neovlaštenog pristupa.

Pristup podacima u višekorisničkom okruženju kontrolira se korištenjem GRANT i REVOKE izraza. U svakom iskazu potrebno je navesti korisnika, objekat (tabelu, pogled) u odnosu na koji se postavljaju dozvole i same dozvole. Na primjer, izraz GRANT daje korisniku X mogućnost da preuzme podatke iz tablice PRODUCT:

ODOBRITE IZBOR PROIZVODA X

Naredba REVOKE opoziva sve prethodno date dozvole.

Ugrađivanje SQL-a u aplikacijske programe. Real Applications obično napisan na drugim jezicima koji generiraju SQL kod i prenose ga u DBMS kao ASCII tekst.

IBM standard za SQL proizvode regulira upotrebu ugrađenog SQL jezika. Prilikom pisanja aplikacijskog programa, njegov tekst je mješavina naredbi iz glavnog programskog jezika (na primjer, C, Pascal, Cobol, Fortran, Assembler) i SQL naredbi sa posebnim prefiksom, na primjer. ExecSQL. Struktura SQL naredbi je proširena kako bi se prilagodile varijablama jezika domaćina u SQL konstrukciji.



SQL procesor mijenja tip programa u skladu sa zahtjevima kompajlera glavnog programskog jezika. Funkcija kompajlera je da prevede (prevede) program iz izvornog programskog jezika u jezik blizak mašinskom jeziku. Nakon kompilacije aplikativni program(aplikacija) je poseban modul.

SQL dijalekti

Moderni relacijski DBMS koriste dijalekte SQL jezika za opisivanje i manipulaciju podacima. Podskup SQL jezika koji vam omogućava da kreirate i opišete bazu podataka naziva se DDL (Jezik definicije podataka).

U početku se SQL jezik zvao SEQUEL (Structured English Query Language), zatim SEQUEL/2, a zatim jednostavno SQL. Danas je SQL de facto standard za relacijske DBMS-ove.

Prvi jezički standard pojavio se 1989. godine - SQL-89 i podržan je od skoro svih komercijalnih relacionih DBMS-ova. Bilo je opšte prirode i podložno širokom tumačenju. Prednosti SQL-89 se mogu smatrati standardizacijom sintakse i semantike operatora za uzorkovanje i manipulaciju podacima, kao i fiksiranje sredstava za ograničavanje integriteta baze podataka. Međutim, nedostajao je tako važan dio kao što je manipulacija šemom baze podataka. Nepotpunost standarda SQL-89 dovela je do pojave 1992. godine. sledeća verzija SQL jezik.

SQL2 (ili SQL-92) pokriva skoro sve neophodni problemi: Manipulacija šemama baze podataka, upravljanje transakcijama i sesijama, podržava klijent-server arhitekture ili alate za razvoj aplikacija.

Sledeći korak razvoj jezika je SQL opcija 3. Ova verzija jezika je dopunjena mehanizmom okidača, definicijom proizvoljnog tipa podataka i ekstenzijom objekta.

Trenutno postoje tri nivoa jezika: početni, srednji i potpuni. Mnogi proizvođači svojih DBMS koriste sopstvene implementacije SQL baziran barem na ulazni nivo odgovarajući ANSI standard, i koji sadrži neke ekstenzije specifične za određeni DBMS. U tabeli 4.9 daje primjere SQL dijalekata.

Tablica 4.9 SQL dijalekti

DBMS Jezik upita
System R DBMS SQL
DB2 SQL
Pristup SQL
SYBASE SQL Bilo gdje Watcom-SQL
SYBASE SQL Server Transact_SQL
Moj SQL SQL
Oracle PL/SQL

Objektno orijentirane baze podataka koriste jezik upita objekata OQL (Object Query Language). OQL jezik je bio baziran na naredbi SELECT jezika SQL2 i dodao je mogućnost usmjeravanja upita na objekt ili kolekciju objekata, kao i mogućnost pozivanja metoda unutar jednog upita.

Kompatibilnost mnogih korištenih SQL dijalekata određuje kompatibilnost DBMS-a. Dakle, SYBASE SQL Anywhere DBMS je što je moguće više kompatibilan za DBMS ove klase sa SYBASE SQL Server DBMS-om. Jedan od aspekata ove kompatibilnosti je podrška u SYBASE SQL Anywhere takvog dijalekta SQL jezika kao što je Transact-SQL. Ovaj dijalekt se koristi u SYBASE SQL Serveru i može se koristiti u SYBASE SQL bilo gdje zajedno sa izvornim SQL dijalektom - Watcom-SQL.

Kontrolna pitanja

1. Kako se DBMS može klasificirati?

2. Koji modeli baza podataka postoje?

3. Koji su glavni elementi informacionih modela?

4. Koje vrste odnosa između entiteta postoje?

5. Šta su ER dijagrami i za šta se koriste?

6. Šta vam omogućava procedura normalizacije tabele?

7. Imenujte jezik i softver DBMS?

8. Koja je vrsta MS Access DBMS-a?

9. Koji su glavni objekti MS Access DBMS-a?

10. Za šta se koriste glavni SQL operatori?

baze podataka koje bi mogle funkcionirati u brojnim kompjuterski sistemi razne vrste. Zaista, uz njegovu pomoć, korisnici mogu manipulirati podacima bez obzira da li rade na ličnom računaru, mrežnoj radnoj stanici ili glavnom računaru.

Jedan od jezika koji je nastao kao rezultat razvoja relacionog modela podataka je SQL jezik (Structured Query Language), koji je sada postao vrlo raširen i zapravo postao standardni jezik relacione baze podataka podaci. Standard SQL je objavio Američki nacionalni institut za standarde (ANSI) 1986. godine, a međunarodno ga je usvojila Međunarodna organizacija za standarde (ISO) 1987. godine. Trenutni SQL standard je poznat kao SQL/92.

Upotreba bilo kojeg standarda uključuje ne samo brojne i potpuno očigledne prednosti, ali i određene nedostatke. Prije svega, standardi usmjeravaju razvoj relevantne industrije u određenom pravcu; U slučaju SQL jezika, postojanje jakih temeljnih principa na kraju dovodi do kompatibilnosti između njegovih različitih implementacija i pomaže u povećanju prenosivosti softver i baze podataka općenito, te svestranost rada administratora baza podataka. S druge strane, standardi ograničavaju fleksibilnost i funkcionalnost određene implementacije. Ispod implementacija jezika SQL se razumije softver SQL odgovarajućeg proizvođača. Za proširenje funkcionalnost mnogi programeri koji se pridržavaju prihvaćenim standardima, dodaj standardni jezik SQL razne ekstenzije. Treba napomenuti da standardi zahtijevaju bilo koje ispunjenje jezičke implementacije SQL prisutnost određenih karakteristika i in generalni nacrt odražavaju glavne trendove koji ne samo da dovode do kompatibilnosti između svih konkurentskih implementacija, već i pomažu u povećanju vrijednosti SQL programera i korisnika relacione baze podataka on moderno tržište softver.

Sve konkretno jezičke implementacije donekle se razlikuju jedno od drugog. U interesu samih proizvođača je da osiguraju da njihova prodaja bude u skladu sa savremenim standardima ANSI za prenosivost i korisničko iskustvo. Međutim, svaka implementacija SQL-a sadrži poboljšanja koja zadovoljavaju zahtjeve određenog poslužitelja baze podataka. Ova poboljšanja ili proširenja za SQL jezik su dodatne komande i opcije koje su dopuna standardni paket i dostupan u ovoj konkretnoj implementaciji.

Trenutno, jezik SQL podržava mnogo desetina DBMS-ova razne vrste, dizajniran za širok spektar računarskih platformi, u rasponu od personalni računari i završavajući sa glavnim računarima.

Svi jezici za manipulaciju podacima kreirani za mnoge DBMS-ove prije pojave relacione baze podataka, bili su fokusirani na operacije sa podacima predstavljenim u obliku zapisa logičke datoteke. Naravno, ovo je zahtijevalo od korisnika detaljno poznavanje organizacije skladištenja podataka i ozbiljan napor da precizira koji su podaci potrebni, gdje se nalaze i kako do njih doći.

Razmatrani SQL jezik fokusiran je na operacije sa podacima predstavljenim u obliku logički povezanih skupova relacionih tabela. Ključna karakteristika njegove strukture su fokusirane na konačni rezultat obrade podataka, a ne na proceduru ove obrade. Sam SQL jezik određuje gdje se nalaze podaci, indekse, pa čak i koji najefikasniji redoslijed operacija treba koristiti za dobivanje rezultata, tako da nije potrebno specificirati ove detalje u upitu baze podataka.

Uvod u klijent-server tehnologiju

Zbog širenja tržišta informacione usluge proizvođači softvera počeli su izdavati sve inteligentnije, a samim tim i obimnije softverski sistemi. Mnoge organizacije i pojedinačni korisnici često nisu mogli staviti kupljene proizvode na vlastite računare. Za razmjenu informacija i njihovu distribuciju stvorene su kompjuterske mreže, a generalizirajući programi i podaci počeli su se instalirati na posebnim serverima datoteka.

Zahvaljujući DBMS-ovima koji rade sa serverima datoteka, mnogi korisnici imaju pristup istim bazama podataka. Pojednostavljuje razvoj raznih automatizovani sistemi upravljanje organizacijama. Međutim, ovakvim pristupom, sva obrada zahtjeva iz programa ili sa korisničkih računarskih terminala obavlja se na njima, dakle, da se implementira čak i jednostavan zahtjev mora se čitati iz server datoteka ili u njega upišite cijele datoteke, a to dovodi do konfliktne situacije i zagušenje mreže. Da bi se otklonili ovi nedostaci, predloženo je klijent-server tehnologija, ali istovremeno je bio potreban zajednički jezik za komunikaciju sa serverom - izbor je pao na SQL.

Tehnologija klijent-server znači ovaj način interakcije softverske komponente, na kojoj se formiraju unificirani sistem. Kao što samo ime govori, postoji određeni klijentski proces koji zahtijeva određene resurse, kao i serverski proces, koji obezbjeđuje ove resurse. Nije neophodno da budu na istom računaru. Obično je uobičajeno da se server hostuje na jednom čvoru lokalna mreža, a klijenti - na drugim čvorovima.

U kontekstu baze podataka, klijent kontroliše korisnički interfejs i logika aplikacije, koja se ponaša kao radna stanica na kojoj se pokreću aplikacije baze podataka. Klijent prihvaća zahtjev od korisnika, provjerava sintaksu i generira upit baze podataka u SQL-u ili drugom jeziku baze podataka koji odgovara logici aplikacije. Zatim šalje poruku serveru, čeka odgovor i formatira primljene podatke za prezentaciju korisniku. Server prima i obrađuje zahtjeve prema bazi podataka, a zatim rezultate šalje nazad klijentu. Ova obrada uključuje provjeru akreditiva klijenta, osiguravanje zahtjeva za integritetom i ispunjavanje zahtjeva i ažuriranje podataka. Osim toga, podržana je kontrola istodobnosti i oporavak.

Klijent-server arhitektura ima niz prednosti.

Posljednje ažuriranje: 24.06.2017

SQL Server je jedan od najpopularnijih popularni sistemi upravljanje bazom podataka (DBMS) u svijetu. Ovaj DBMS je pogodan za širok spektar projekata: od malih aplikacija do velikih, visoko opterećenih projekata.

SQL Server je kreiran od strane Microsofta. Prva verzija objavljena je 1987. A trenutna verzija je verzija 16, koja je izašla 2016. godine i koristit će se u trenutnom vodiču.

SQL Server dugo vremena bio je isključivo sistem upravljanja bazom podataka za Windows, ali od verzije 16 ovaj sistem je dostupan i na Linuxu.

SQL Server karakterišu karakteristike kao što su:

    Performanse. SQL Server je veoma brz.

    Pouzdanost i sigurnost. SQL Server obezbeđuje enkripciju podataka.

    Jednostavnost. Ovaj DBMS je relativno lak za rad i administriranje.

Centralni aspekt u MS SQL Serveru, kao iu svakom DBMS-u, je baza podataka. Baza podataka je repozitorijum organizovanih podataka na određeni način. Često baza podataka fizički predstavlja datoteku na tvrdom disku, iako ova korespondencija nije neophodna. Sistemi za upravljanje bazama podataka se koriste za skladištenje i administriranje baza podataka. sistem upravljanja) ili DBMS. A upravo MS SQL Server je jedan od takvih DBMS-a.

MS SQL Server koristi relacijski model za organiziranje baza podataka. Ovaj model baze podataka razvio je Edgar Codd još 1970. godine. A danas je to zapravo standard za organizovanje baza podataka.

Relacioni model uključuje pohranjivanje podataka u obliku tabela, od kojih se svaka sastoji od redova i kolona. Svaki red pohranjuje poseban objekt, a stupci sadrže atribute tog objekta.

Primarni ključ se koristi za identifikaciju svakog reda u tabeli. Primarni ključ može biti jedan ili više stupaca. Koristeći primarni ključ, možemo referencirati određeni red u tabeli. Prema tome, dva reda ne mogu imati isti primarni ključ.

Preko ključeva se jedna tabela može povezati sa drugom, odnosno mogu se organizovati odnosi između dve tabele. I sama tabela se može predstaviti kao odnos.

Za interakciju s bazom podataka koristi se jezik SQL (Structured Query Language). Klijent (na primjer, vanjski program) šalje zahtjev u SQL-u koristeći poseban API. DBMS ispravno tumači i izvršava zahtjev, a zatim šalje rezultat izvršenja klijentu.

SQL je prvobitno razvio IBM za sistem baze podataka pod nazivom System/R. Istovremeno, sam jezik se zvao SEQUEL (Structured English Query Language). Iako ni baza podataka ni sam jezik kasnije nisu službeno objavljeni, tradicionalno se sam izraz SQL često izgovara kao "nastavak".

Godine 1979. Relational Software Inc. razvio prvi sistem za upravljanje bazom podataka, nazvan Oracle, koji je koristio SQL jezik. Zbog uspjeha ovog proizvoda, kompanija je preimenovana u Oracle.

Kasnije su se počeli pojavljivati ​​drugi sistemi baza podataka koji su koristili SQL. Kao rezultat toga, 1989. godine, Američki nacionalni institut za standarde (ANSI) je kodificirao jezik i objavio njegov prvi standard. Nakon toga, standard je povremeno ažuriran i dopunjavan. Njegovo posljednje ažuriranje dogodilo se 2011. Ali unatoč postojanju standarda, proizvođači DBMS-a često koriste vlastite implementacije SQL jezika, koje se malo razlikuju jedna od druge.

Postoje dvije varijante SQL jezika: PL-SQL i T-SQL. PL-SQL se koristi u DBMS-ovima kao što su Oracle i MySQL. T-SQL (Transact-SQL) se koristi u SQL Serveru. U stvari, to je razlog zašto će T-SQL biti razmatran u okviru trenutnog vodiča.

Ovisno o zadatku koji T-SQL naredba izvodi, može biti jedan od sljedećih tipova:

    DDL (Jezik za definiciju podataka). Ova vrsta uključuje razne komande, koji kreiraju bazu podataka, tabele, indekse, pohranjene procedure itd. Općenito, podaci su određeni.

    Konkretno, sljedeće komande možemo klasificirati kao ovaj tip:

    • CREATE : kreira objekte baze podataka (samu bazu podataka, tabele, indekse, itd.)

      ALTER: mijenja objekte baze podataka

      DROP: Uklanja objekte baze podataka

      TRUNCATE: uklanja sve podatke iz tabela

    DML (Jezik za upravljanje podacima). Ovaj tip uključuje komande za odabir podataka, njihovo ažuriranje, dodavanje, brisanje - općenito, sve one naredbe pomoću kojih možemo upravljati podacima.

    Ovom tipu pripadaju sljedeće naredbe:

    • SELECT: preuzima podatke iz baze podataka

      AŽURIRANJE: ažurira podatke

      INSERT: dodaje nove podatke

      DELETE: briše podatke

    DCL (Jezik kontrole podataka / Jezik kontrole pristupa podacima). Ovaj tip uključuje komande koje upravljaju pravima pristupa podacima. Konkretno, ovo su sljedeće naredbe:

    • GRANT: daje dozvole za pristup podacima

      REVOKE: opoziva prava pristupa podacima

Jezik strukturiranim upitima Structure Query Language (SQL) nastao je kao rezultat razvoja relacionog modela podataka i trenutno je de facto standardni jezik za relacijske DBMS. Danas je podržan SQL jezik ogromna količina DBMS različitih tipova.

Naziv SQL jezika obično se izgovara kao "es-qu-el". Ponekad se koristi mnemonički naziv "See-Quel".

SQL jezik pruža korisniku (sa minimalan napor s njegove strane) sljedeće mogućnosti:

Kreirajte baze podataka i tabele sa puni opis njihove strukture

Izvršite osnovne operacije manipulacije podacima: ubacivanje, mijenjanje, brisanje podataka

Pokrenite jednostavne i složene upite.

SQL jezik je relaciono potpun.

Struktura i sintaksa njegovih naredbi su prilično jednostavne, a sam jezik je univerzalan, odnosno sintaksa i struktura njegovih naredbi se ne mijenja pri prelasku s jednog DBMS-a na drugi.

SQL jezik ima dvije glavne komponente:

DDL (Jezik definicije podataka) za definisanje struktura baze podataka i kontrolu pristupa podacima

DML (Jezik za upravljanje podacima) jezik dizajniran za preuzimanje i ažuriranje podataka.

SQL je neproceduralni jezik, što znači da kada ga koristite, morate specificirati koje informacije treba dobiti, a ne kako se mogu dobiti. SQL naredbe su samo riječi na engleskom(IZABIR, UMETNI, itd.). Pogledajmo prvo SQL DML izraze:

SELECT - odabir podataka iz baze podataka

INSERT - ubacivanje podataka u tabelu

UPDATE - ažuriranje podataka u tabeli

DELETE - brisanje podataka iz tabele

SELECT izraz

Operator SELECT izvodi akcije ekvivalentne sljedećim operacijama relacijske algebre: odabir, projekcija i spajanje.

Najjednostavniji SQL upit koji ga koristi izgleda ovako:

SELECT col_name FROM tbl

Nakon ključne riječi select slijedi lista kolona razdvojenih zarezima čije podatke će upit vratiti. Ključna riječ from određuje iz koje tablice (ili pogleda) se podaci preuzimaju.

Rezultat upita za odabir uvijek je tabela koja se zove tabela rezultata. Štaviše, rezultati upita koji se izvršavaju pomoću naredbe select mogu se koristiti za kreiranje novi sto. Ako rezultati dva upita za različiti stolovi imaju isti format, mogu se kombinovati u jednu tabelu. Takođe, tabela dobijena kao rezultat upita može biti predmet daljih upita.

Da izaberete sve kolone i sve redove tabele, samo uradite SELECT upit* OD tbl;

Razmotrite tabelu proizvoda koja sadrži informacije o cijeni različite vrste proizvodi:

Zatražite rezultat

SELECT * FROM Product;

će biti cijela tabela proizvoda.

Možete odabrati određene stupce tabele pomoću upita

SELECT col1, col2, … , coln FROM tbl;

Dakle, rezultat zahtjeva

SELECT Tip, Price from Product;

biće sto

Na listu kolona u izaberite izjavu Oni također pribjegavaju ako je potrebno promijeniti redoslijed stupaca u rezultirajućoj tabeli:

Da biste odabrali samo one redove tablice koji zadovoljavaju određena ograničenja, poseban ključna riječ gdje slijedi logično stanje. Ako zapis zadovoljava ovaj uslov, on se uključuje u rezultat. U suprotnom, unos se odbacuje.

Na primjer, odabir onih proizvoda iz tabele proizvoda čija cijena zadovoljava uvjet Cijena<3200, можно осуществить, используя запрос

ODABERITE * IZ proizvoda gdje je cijena<3200;

Njegov rezultat:

Uslov se može složiti i kombinovati pomoću logičkih operatora NOT , AND, OR, XOR, na primjer: gdje je id_ Cijena>500 I Cijena<3500. Допускается также использование выражений в условии: where Price>(1+1) i string konstante: gdje je ime= "autoweights".

Korištenje konstrukcije IZMEĐU var1 I var2 omogućava vam da provjerite da li vrijednosti bilo kojeg izraza spadaju u raspon od var1 do var2 (uključujući ove vrijednosti):

ODABIR * IZ proizvoda gdje je cijena IZMEĐU 3000 I 3500;

Slično operatoru NOT BETWEEN, postoji operator NOT IN.

Imena kolona navedena u klauzuli SELECT mogu se preimenovati. Za to se koristi ključna riječ AS, koja se, međutim, može izostaviti, jer se implicitno podrazumijeva. Na primjer, zahtjev

SELECT Tip AS model, Type_id AS broj FROM proizvoda gdje je Type_id =3

će se vratiti (pseudonim treba pisati bez navodnika):

Operator LIKE je dizajniran da uporedi niz sa uzorkom:

SELECT * FROM tbl gdje col_name LIKE "abc"

Ovaj upit vraća samo one zapise koji sadrže vrijednost stringa abc u stupcu col_name.

Uzorku je dozvoljeno korištenje dva zamjenska znaka: "_" i "%". Prvi od njih zamjenjuje jedan proizvoljni znak u šablonu, a drugi niz proizvoljnih znakova. Dakle, "abc%" odgovara bilo kojem nizu koji počinje sa abc, "abc_" odgovara nizu od 4 znaka koji počinje sa abc, "%z" odgovara bilo kojem nizu koji završava sa z, i na kraju, "%z%" - nizovima znakova koji sadrže z.

Možete pronaći sve zapise tabele proizvoda u kojima vrijednost Type počinje slovom "a" ovako:

SELECT * FROM Product gdje Upišite LIKE "a%";

kamionske vage

Ako niz za pretraživanje sadrži zamjenski znak, tada morate navesti izlazni znak u klauzuli ESCAPE. Ovaj kontrolni znak se mora koristiti u obrascu prije zamjenskog znaka, što pokazuje da zamjenski znak treba tretirati kao običan znak. Na primjer, ako biste tražili sve vrijednosti u polju koje sadrži znak "_", tada bi obrazac "%_%" rezultirao vraćanjem svih zapisa iz tabele. U ovom slučaju, obrazac treba napisati na sljedeći način:

"%|_%" ESCAPE "|"

Za provjeru usklađenosti vrijednosti sa nizom "20%" možete koristiti sljedeći operator:

LIKE "20#%" BJEŽITE "#"

Operator IS NULL vam omogućava da provjerite odsustvo (prisustvo) NULL vrijednosti u poljima tabele. Korištenje regularnih operatora poređenja u ovim slučajevima može proizvesti netačne rezultate jer poređenje sa NULL rezultira u UNKNOWN. Dakle, uvjet odabira bi trebao izgledati ovako:

gdje je col_name NULL, umjesto gdje col_name=NULL.

Zadani rezultat odabira vraća zapise istim redoslijedom u kojem su pohranjeni u bazi podataka. Ako želite sortirati zapise po jednoj od kolona, ​​morate koristiti klauzulu ORDER BY, nakon koje slijedi naziv te kolone:

SELECT * FROM tbl ORDER BY col_name;

Ovaj upit će vratiti zapise uzlaznim redoslijedom vrijednosti atributa col_name.

Takođe možete sortirati zapise po više kolona. Da biste to učinili, njihova imena moraju biti navedena nakon ORDER BY odvojena zarezima:

SELECT * FROM tbl ORDER BY col_name1, col_name2.

Zapisi će biti sortirani po polju col_name1; ako postoji nekoliko zapisa sa odgovarajućom vrijednošću u stupcu col_name1, oni će biti sortirani po polju col_name2.

Ako želite da sortirate zapise obrnutim redoslijedom (na primjer, opadajuće po datumu), morate navesti ORDER BY col_name DESC.

Za direktno sortiranje postoji ključna reč ASC, koja je prihvaćena kao podrazumevana vrednost.

Ako rezultat uzorka sadrži stotine ili hiljade zapisa, njihov izlaz i obrada zahtijevaju dosta vremena.

Stoga su informacije često podijeljene na stranice i predstavljene korisniku u porcijama. Paginacija se koristi pomoću ključne riječi limit nakon koje slijedi broj unosa za prikaz. Sljedeći upit dohvaća prvih 10 zapisa uz istovremeno sortiranje unatrag u polju col_name1:

SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10

Da biste dohvatili sljedećih 10 zapisa, koristite ključnu riječ limit s dvije vrijednosti: prva specificira poziciju s koje treba ispisati rezultat, a druga specificira broj zapisa za preuzimanje:

SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10,10

Da biste dohvatili sljedećih 10 zapisa, morate koristiti konstrukciju LIMIT 20, 10.

Programski jezik

SQL (Structured Query Language) je jezik za upravljanje bazom podataka za relacijske baze podataka. SQL sam po sebi nije Turing-kompletan programski jezik, ali njegov standard dozvoljava kreiranje proceduralnih ekstenzija za njega koje proširuju njegovu funkcionalnost u punopravni programski jezik.

Jezik je kreiran 1970-ih pod imenom “SEQUEL” za sistem upravljanja bazama podataka System R (DBMS). Kasnije je preimenovan u “SQL” kako bi se izbjegao sukob žigova. 1979. godine SQL je prvi put objavljen kao komercijalni proizvod, Oracle V2.

Prvi službeni jezički standard usvojio je ANSI 1986. godine i ISO 1987. Od tada je stvoreno još nekoliko verzija standarda, od kojih neke ponavljaju prethodne sa manjim varijacijama, a druge preuzimaju značajne nove karakteristike.

Uprkos postojanju standarda, najčešće implementacije SQL-a se toliko razlikuju da se kod rijetko može prenijeti iz jednog sistema upravljanja bazom podataka u drugi bez značajnih promjena. To je zbog dužine i složenosti standarda, kao i zbog nedostatka specifikacije u nekim važnim oblastima implementacije.

SQL je kreiran kao jednostavan, standardiziran način za pronalaženje i manipulaciju podacima sadržanim u relacijskoj bazi podataka. Kasnije je postalo složenije nego što je bilo zamišljeno i postalo je alat za programere, a ne alat za krajnjeg korisnika. Trenutno, SQL (uglavnom kako ga implementira Oracle) ostaje najpopularniji od jezika za upravljanje bazama podataka, iako postoje brojne alternative.

SQL se sastoji od četiri različita dijela:

  1. Jezik definicije podataka (DDL) se koristi za definiranje struktura podataka pohranjenih u bazi podataka. DDL izrazi vam omogućavaju da kreirate, modificirate i izbrišete pojedinačne objekte u bazi podataka. Važeći tipovi objekata ovise o korištenom DBMS-u i obično uključuju baze podataka, korisnike, tablice i niz manjih objekata podrške kao što su uloge i indeksi.
  2. Jezik za manipulaciju podacima (DML) se koristi za dohvaćanje i modificiranje podataka u bazi podataka. DML izrazi vam omogućavaju da preuzmete, umetnete, modificirate i izbrišete podatke u tablicama. Ponekad se naredbe odabira preuzimanja podataka ne smatraju dijelom DML-a jer ne mijenjaju stanje podataka. Sve DML izjave su deklarativne prirode.
  3. Jezik definicije pristupa podacima (DCL) se koristi za kontrolu pristupa podacima u bazi podataka. DCL izrazi se primjenjuju na privilegije i dozvoljavaju vam da dodijelite i opozovete prava za primjenu određenih DDL i DML izraza na određene objekte baze podataka.
  4. Jezik kontrole transakcija (TCL) se koristi za kontrolu obrade transakcija u bazi podataka. Tipično TCL izjave uključuju urezivanje za urezivanje promjena napravljenih tokom transakcije, vraćanje na njihovo vraćanje i tačku spremanja za razbijanje transakcije na nekoliko manjih dijelova.

Treba napomenuti da SQL implementira paradigmu deklarativnog programiranja: svaki izraz opisuje samo potrebnu radnju, a DBMS donosi odluku o tome kako će je izvesti, tj. planira osnovne operacije potrebne za izvođenje radnje i izvodi ih. Međutim, da bi efektivno koristio SQL mogućnosti, programer mora razumjeti kako DBMS analizira svaki izraz i kreira njegov plan izvršenja.

primjeri:

Zdravo svijete!:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

Niz 'Hello, World!' se bira iz ugrađenog duala tabele, koji se koristi za upite koji ne zahtevaju pristup stvarnim tabelama.

odaberite "Hello, World!" od dual ;

Faktorski:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

SQL ne podržava petlje, rekurziju ili korisnički definirane funkcije. Ovaj primjer pokazuje moguće rješenje pomoću:

  • nivo pseudo-kolona za kreiranje pseudotabela t1 i t2 koje sadrže brojeve od 1 do 16,
  • agregatna funkcija sum, koja vam omogućava da zbrojite elemente skupa bez eksplicitne upotrebe petlje,
  • i matematičke funkcije ln i exp, koje vam omogućavaju da zamijenite proizvod (potreban za izračunavanje faktorijala) sa zbrojem (koji pruža SQL).

Red “0! = 1” neće biti uključeno u rezultirajući skup redova, jer pokušaj procjene ln(0) rezultira izuzetkom.

Fibonačijevi brojevi:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

SQL ne podržava petlje ili rekurziju, a spajanje polja iz različitih redova u tablici ili upitu nije standardna agregatna funkcija. Ovaj primjer koristi:

  • Binetova formula i matematičke funkcije ROUND, POWER i SQRT za izračunavanje n-tog Fibonačijevog broja;
  • nivo pseudo-kolona za kreiranje pseudo-tabele t1 koja sadrži brojeve od 1 do 16;
  • ugrađena funkcija SYS_CONNECT_BY_PATH za uređenu konkatenaciju primljenih brojeva.

SELECT REPLACE (MAX (SYS_CONNECT_BY_PATH (fib || ", " , "/" )), "/" , "" ) || "..." fiblista FROM ( SELECT n , fib , ROW_NUMBER () PREKO (ORDER BY n ) r FROM ( odaberite n , okrugli ((power ((1 + sqrt (5)) * 0 . 5 , n ) - snaga ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib iz (odaberite nivo n iz dvostrukog povezivanja po nivou<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Zdravo svijete!:

Primjer za verzije Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012, MySQL 5, PostgreSQL 8.4, PostgreSQL 9.1, sqlite 3.7.3

odaberite "Hello, World!" ;

Faktorski:

Primjer za verzije Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Koristi se rekurzivna definicija faktorijala, implementirana kroz rekurzivni upit. Svaki red upita sadrži dva numerička polja, n i n!, a svaki sljedeći red se izračunava na osnovu podataka iz prethodnog.

Možete izračunati samo cjelobrojne faktorijele do 20!. Prilikom pokušaja izračunavanja 21! Pojavljuje se greška „greška aritmetičkog prelivanja“, tj. bitna mreža se preliva.

Za realne brojeve faktorijel je 100! (Da biste to učinili, u primjeru trebate zamijeniti bigint sa float u 3. redu)

Fibonačijevi brojevi:

Primjer za verzije Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Koristi se iterativno određivanje Fibonačijevih brojeva, implementirano kroz rekurzivni upit. Svaki red upita sadrži dva susjedna broja u nizu, a sljedeći red se računa kao (posljednji broj, zbir brojeva) prethodnog reda. Dakle, svi brojevi osim prvog i posljednjeg pojavljuju se dva puta, tako da rezultat uključuje samo prve brojeve svakog reda.

Faktorski:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

Ovaj primjer pokazuje upotrebu operatora modela, dostupnog u Oracle 10g, koji omogućava da se nizovi upita tretiraju kao elementi niza. Svaki red sadrži dva polja - red broj n i njegov faktorijel f.

odaberite n || "! = " || f faktorijel iz dualnog modela vraća dimenziju svih redova po (0 d) mjere (0 f, 1 n) pravila iteracija (17) (f [broj_iteracije] = dekodiranje (broj_iteracije, 0, 1, f [broj_iteracije - 1] * broj_iteracije) , n [broj_iteracije] = broj_iteracije);

Fibonačijevi brojevi:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

Ovaj primjer pokazuje upotrebu operatora modela, dostupnog u Oracle 10g, koji omogućava da se nizovi upita tretiraju kao elementi niza. Svaki red sadrži dva polja – sam Fibonačijev broj i konkatenaciju svih brojeva koji su mu manji ili jednaki. Iterativno spajanje brojeva u istom upitu koji ih generiše je lakše i brže od agregiranja kao zasebne operacije.

odaberite max(e) || ", ..." iz (odabir s iz dualnog modela vraća dimenziju svih redova po ( 0 d ) mjerama ( cast ( " " kao varchar2 (200 )) s , 0 f ) pravila ponavljanje ( 16 ) ( f [ broj_iteracije ] = dekodiranje (broj_iteracije, 0, 1, 1, 1, f [broj_iteracije - 1] + f [broj_iteracije - 2]), s [broj_iteracije] = dekodiranje (broj_iteracije, 0, to_char (f [broj_iteracije]), s [broj_iteracije], s 1 ] || ", " || to_char (f [broj_iteracije]))) );

Faktorski:

Primjer za MySQL 5 verzije

odaberite concat (cast (t2. n kao char), "!= ", cast (exp (suma (log (t1. n ))) kao char)) iz (odaberite @ i: = @ i + 1 AS n iz TABLE , (odaberite @ i : = 0 ) kao sel1 limit 16 ) t1 , ( odaberite @ j : = @ j + 1 AS n iz TABELE , (odaberite @ j : = 0 ) kao sel1 limit 16 ) t2 gdje je t1 . n<= t2 . n group by t2 . n

Fibonačijevi brojevi:

Primjer za MySQL 5 verzije

Zamijenite TABLE sa bilo kojom tablicom kojoj možete pristupiti, kao što je mysql.help_topic .

odaberite concat (group_concat (f separator ", " ), ", ..." ) iz (odaberite @ f : = @ i + @ j kao f , @ i : = @ j , @ j : = @ f iz TABLE , (odaberite @ i : = 1 , @ j : = 0 ) sel1 limit 16 ) t

Zdravo svijete!:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

Ovaj primjer koristi anonimni PL/SQL blok koji ispisuje poruku na standardni izlaz koristeći paket dbms_output.

započeti dbms_output . put_line("Zdravo, svijet!"); kraj ;

Faktorski:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

Ovaj primjer pokazuje iterativno izračunavanje faktorijala koristeći PL/SQL.

deklarisati n broj := 0 ; f broj := 1 ; početi dok (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

Fibonačijevi brojevi:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

Ovaj primjer koristi iterativno određivanje Fibonačijevih brojeva. Već izračunati brojevi se pohranjuju u strukturu podataka varray - analogni nizu.

declare type vector je varray (16) broja; fib vektor := vektor(); i broj ; s varchar2(100); početi fib . proširiti(16); fib (1) := 1; fib (2) := 1; s : = fib (1) || ", " || fib(2) || ", " ; za i u 3 .. 16 petlja fib (i) : = fib (i - 1) + fib (i - 2); s := s || fib(i) || ", " ; end loop ; dbms_output. put_line (s || "..." ); kraj ;

Kvadratna jednadžba:

Primjer za verzije Oracle 10g SQL, Oracle 11g SQL

Ovaj primjer je testiran u SQL*Plus, TOAD i PL/SQL Developer.

Čisti SQL vam omogućava da uvedete varijable tokom izvršavanja upita u obliku zamjenjivih varijabli. Da bi se definisala takva promenljiva, njeno ime (u ovom slučaju, A, B i C) se mora koristiti sa znakom ampersanda & ispred nje kad god se varijabla treba referencirati. Kada se upit izvrši, od korisnika se traži da unese vrijednosti svih zamjenskih varijabli korištenih u upitu. Kada se unesu vrijednosti, svaka referenca na takvu varijablu zamjenjuje se njenom vrijednošću, a rezultirajući zahtjev se izvršava.

Postoji nekoliko načina za unos vrijednosti za zamjenske varijable. U ovom primjeru, prvoj referenci na svaku varijablu prethodi dvostruki ampersand && umjesto jednog ampersanda. Na ovaj način, vrijednost za svaku varijablu se unosi samo jednom, a sve naredne reference na nju će biti zamijenjene istom vrijednošću (kada koristite jedan ampersand u SQL*Plusu, vrijednost za svaku referencu na istu varijablu mora se uneti zasebno ). U PL/SQL Developeru, svim referencama varijabli mora prethoditi jedan znak &, inače će se pojaviti greška ORA-01008 “Nije sve varijable vezane”.

Prvi red primjera specificira znak za decimalni separator, koji se koristi kada se korijenski brojevi pretvaraju u nizove.

Sam zahtjev se sastoji od četiri različita zahtjeva. Svaki upit vraća niz koji sadrži rezultat izračuna u jednom od slučajeva (A=0, D=0, D>0 i D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

alter set session NLS_NUMERIC_CHARACTERS = "." ; odaberite "Nije kvadratna jednadžba." ans iz duala gdje && A = 0 unija odaberite "x = " || to_char (-&& B / 2 /& A ) iz dual gdje & A != 0 i & B *& B - 4 *& A *&& C = 0 unija odaberite "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ", x2 = " || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A iz dual gdje & A != 0 i & B *& B - 4 *& A *& C > 0 unije odaberite "x1 = (" || to_char (-& B / 2 /& A ) || "," || to_char (sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || "), " || "x2 = (" || to_char (-& B / 2 /& A ) || "," || to_char (- sqrt (-& B *& B + 4 *& A *& C ) / 2 /& A ) || ")" od dual gdje & A != 0 i & B *& B - 4 *& A *& C< 0 ;

Najbolji članci na ovu temu