Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Windows 10
  • SQL: univerzalni jezik za rad s bazama podataka. Upit UPDATE i uvjet WHERE

SQL: univerzalni jezik za rad s bazama podataka. Upit UPDATE i uvjet WHERE

Funkcionalnost SQL jezik

Glavne funkcije SQL jezika navedene su u nastavku.

Definicija podataka. Ova SQL funkcija je opis strukture podržanih podataka i organizacije relacijskih odnosa (tablica). Operatori za izradu baze podataka, izradu tablica i pristup podacima namijenjeni su njegovoj implementaciji.

Izrada baze podataka. Za stvaranje nova baza podataka, koristi se operator CREATE DATABASE. Struktura operatora određuje ime stvorena baza podaci.

Izrada tablica. Osnovna tablica se kreira korištenjem naredbe CREATE TABLE. Ova izjava navodi nazive polja, vrste podataka za njih i duljinu (za neke vrste podataka). SQL koristi sljedeće vrste podataka:

INTEGER – cijeli broj;

CHAR – vrijednost znaka;

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

DECIMAL - decimalni broj;

FLOAT – broj s pomičnim zarezom;

DOUBLE PRECISION – pokretni zarez dvostruke preciznosti;

DATETIME – datum i vrijeme;

BOOL – Booleova vrijednost.

Izjava o stvaranju tablice navodi ograničenja na vrijednosti stupaca i na tablicu. Moguća ograničenja prikazani su u tablici. 4.8

Tablica 4.8 Ograničenja definiranih podataka

Za relacijski 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 izjavi, CHECK označava semantička ograničenja koja osiguravaju integritet podataka, kao što je ograničavanje skupa prihvatljive vrijednosti određeni stupac.

Naredbu za kreiranje tablice ne možete koristiti više od jednom na istoj tablici. Ako se nakon stvaranja otkriju netočnosti u njegovoj definiciji, promjene se mogu izvršiti korištenjem naredbe ALTER TABLE. Ovaj operator je namijenjen za promjenu strukture postojeću tablicu: Možete ukloniti ili dodati polje u postojeću tablicu.

Manipulacija podacima. SQL omogućuje korisniku ili aplikacijskom programu promjenu sadržaja baze podataka umetanjem novih podataka, brisanjem ili modificiranjem postojećih podataka.

Umetanje novih podataka je postupak za dodavanje redaka u bazu podataka i izvodi se pomoću naredbe INSERT.

Izmjena podataka uključuje promjene vrijednosti u jednom ili više stupaca tablice i izvodi se pomoću izjave UPDATE. Primjer:

SET iznos=iznos+1000,00

WHERE iznos>0

Uklanjanje redaka iz tablice pomoću naredbe DELETE. Sintaksa operatora je:

IZ stola

Odredba WHERE nije obavezna, ali ako nije uključena, svi unosi u tablici bit će izbrisani. Korisno je koristiti naredbu SELECT s istom sintaksom kao naredba DELETE kako biste unaprijed provjerili koji će zapisi biti izbrisani.

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

Uzorkovanje podataka- jedan od bitne funkcije baza podataka kojoj odgovara naredba SELECT. Primjer korištenja operatora razmatran je u prethodnom odjeljku.

U SQL-u možete stvoriti ugniježđene nizove upita (podupiti). postojati određene vrste upite koji se bolje implementiraju korištenjem podupita. Ovi upiti uključuju takozvane provjere postojanja. Pretpostavimo da želite dobiti podatke o studentima koji nemaju ocjenu sedam. Ako se vrati prazan set, to znači samo jedno - svaki učenik ima, barem, jedna takva procjena.

Povezivanje tablica. SQL naredbe omogućuju vam dohvaćanje podataka iz više od jedne tablice. Jedan od načina da to učinite je povezivanje tablica pomoću jednog zajedničkog polja.

Naredba SELECT mora sadržavati ograničenje podudaranja vrijednosti određenog stupca (polja). Zatim samo oni redovi u kojima su vrijednosti dati stupac podudarati se. Ime stupca navodi se samo zajedno s nazivom tablice; inače će izjava biti dvosmislena.

Možete koristiti druge vrste povezivanja tablica: operator INTER JOIN (unutarnje spajanje) osigurava da rezultirajući skup zapisa sadrži podudarne vrijednosti u povezanim poljima. Vanjski priključci(OUTER JOIN) omogućuju vam da u rezultat upita uključite sve retke iz jedne tablice i odgovarajuće retke iz druge

Kontrola pristupa. SQL osigurava sinkronizaciju obrade baze podataka različitim aplikacijskim programima, štiteći podatke od neovlaštenog pristupa.

Pristup podacima u višekorisničkom okruženju kontrolira se pomoću naredbi GRANT i REVOKE. U svakoj izjavi potrebno je navesti korisnika, objekt (tablica, pogled) u odnosu na koji se postavljaju dopuštenja, te sama dopuštenja. Na primjer, izjava GRANT daje korisniku X mogućnost dohvaćanja podataka iz tablice PRODUCT:

ODOBRITE SELECT NA PROIZVODU X

Naredba REVOKE opoziva sve prethodno dodijeljene dozvole.

Ugradnja SQL-a u aplikacijske programe. Prave aplikacije obično napisan na drugim jezicima koji generiraju SQL kod i prenose ga u DBMS kao ASCII tekst.

IBM standard za SQL proizvode regulira korištenje ugrađenog SQL jezika. Kada pišete aplikacijski program, njegov tekst je mješavina naredbi iz glavnog programskog jezika (na primjer, C, Pascal, Cobol, Fortran, Assembler) i SQL naredbi s posebnim prefiksom, na primjer. ExecSQL. Struktura SQL izraza je proširena kako bi se prilagodile varijablama glavnog jezika u SQL konstrukciji.



SQL procesor modificira tip programa u skladu sa zahtjevima prevoditelja glavnog programskog jezika. Funkcija prevoditelja je prevesti (prevesti) program iz izvornog programskog jezika u jezik blizak strojnom jeziku. Nakon kompilacije aplikacijski program(aplikacija) je zaseban modul.

SQL dijalekti

Moderni relacijski DBMS-ovi koriste dijalekte SQL jezika za opisivanje i rukovanje podacima. Podskup SQL jezika koji vam omogućuje stvaranje i opisivanje baze podataka naziva se DDL (Jezik za definiranje 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čni standard pojavio se 1989. godine - SQL-89 i podržavali su ga gotovo svi komercijalni relacijski DBMS-ovi. Bio je općenite naravi i podložan širokom tumačenju. Prednosti SQL-89 mogu se 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 odjeljak kao što je manipulacija shemom baze podataka. Nepotpunost standarda SQL-89 dovela je do pojave 1992. sljedeća verzija SQL jezik.

SQL2 (ili SQL-92) pokriva gotovo sve potrebni problemi: Manipulacija shemom baze podataka, upravljanje transakcijama i sesijama, podržava klijent-poslužiteljske arhitekture ili alate za razvoj aplikacija.

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

Trenutno postoje tri razine jezika: početni, srednji i potpuni. Mnogi proizvođači koriste svoje DBMS vlastite implementacije SQL temeljen na barem početna razina odgovarajući ANSI standard i sadrži neka proširenja specifična za određeni DBMS. U tablici 4.9 daje primjere SQL dijalekata.

Tablica 4.9 SQL dijalekti

DBMS Jezik upita
Sustav R DBMS SQL
DB2 SQL
Pristup SQL
SYBASE SQL bilo gdje Watcom-SQL
SYBASE SQL poslužitelj Transact_SQL
Moj SQL SQL
Oracle PL/SQL

Objektno orijentirane baze podataka koriste objektni upitni jezik OQL (Object Query Language). Jezik OQL temeljio se 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. Stoga je SYBASE SQL Anywhere DBMS što je više moguće kompatibilan za DBMS ove klase sa SYBASE SQL Server DBMS. Jedan od aspekata ove kompatibilnosti je podrška u SYBASE SQL Anywhere dijalektu SQL jezika kao što je Transact-SQL. Ovaj dijalekt se koristi u SYBASE SQL Serveru i može se koristiti u SYBASE SQL Anywhere zajedno s izvornim SQL dijalektom - Watcom-SQL.

Kontrolna pitanja

1. Kako se može klasificirati DBMS?

2. Koji modeli baza podataka postoje?

3. Koji su glavni elementi informacijskih modela?

4. Koje vrste odnosa između entiteta postoje?

5. Što su ER dijagrami i čemu služe?

6. Što vam omogućuje postupak normalizacije tablice?

7. Imenujte jezik i softver DBMS?

8. Koja je to vrsta MS Access DBMS-a?

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

10. Za što se koriste glavni SQL operatori?

baze podataka koje bi mogle funkcionirati u brojnim računalni sustavi različite vrste. Dapače, uz njegovu pomoć korisnici mogu manipulirati podacima neovisno o tome rade li na osobnom računalu, mrežnoj radnoj stanici ili glavnom računalu.

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

Korištenje bilo kojih standarda uključuje ne samo brojne i potpuno očite prednosti, ali i određene nedostatke. Prije svega, standardi usmjeravaju razvoj relevantne industrije u određenom smjeru; U slučaju SQL jezika, postojanje jakih temeljnih načela u konačnici dovodi do kompatibilnosti između njegovih različitih implementacija i pomaže u povećanju prenosivosti softver i baza podataka općenito, te svestranost rada administratora baza podataka. S druge strane, standardi ograničavaju fleksibilnost i funkcionalnost određene implementacije. Pod, 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 u standardni jezik SQL razne ekstenzije. Treba napomenuti da standardi zahtijevaju bilo koji dovršen jezične implementacije SQL prisutnost određenih karakteristika i in opći nacrt odražavaju glavne trendove koji ne samo da dovode do kompatibilnosti između svih konkurentskih implementacija, već također pomažu povećati vrijednost SQL programera i korisnika relacijske baze podataka na moderno tržište softver.

Sve specifično jezične implementacije međusobno se donekle razlikuju. U interesu je samih proizvođača osigurati da njihova prodaja bude u skladu s modernim standardima ANSI za prenosivost i korisničko iskustvo. Međutim, svaka implementacija SQL-a sadrži poboljšanja za ispunjavanje zahtjeva određenog poslužitelja baze podataka. Ova poboljšanja ili proširenja SQL jezika su dodatne naredbe i opcije koje su dodaci standardni paket i dostupan u ovoj konkretnoj implementaciji.

Trenutno, SQL jezik podržava mnogo desetaka DBMS-ova različite vrste, dizajniran za široku paletu računalnih platformi, u rasponu od osobnih računala a završava s glavnim računalima.

Svi jezici za manipulaciju podacima stvoreni za mnoge DBMS-ove prije pojave relacijske baze podataka, bili su usmjereni na rad s podacima prikazanim u obliku zapisa logičke datoteke. Naravno, to je od korisnika zahtijevalo detaljno poznavanje organizacije pohranjivanja podataka i ozbiljan trud da specificira koji su podaci potrebni, gdje se nalaze i kako ih dobiti.

Razmatrani SQL jezik fokusiran je na operacije s podacima predstavljenim u obliku logički međusobno povezanih skupova relacijskih tablica. Glavna značajka njegove su strukture usmjerene na konačni rezultat obrade podataka, a ne na postupak te obrade. SQL jezik sam određuje gdje se podaci nalaze, indekse, pa čak i koji najučinkovitiji slijed operacija treba koristiti za dobivanje rezultata, tako da nije potrebno specificirati ove detalje u upitu baze podataka.

Uvod u tehnologiju klijent-poslužitelj

Zbog širenja tržišta informacijske usluge proizvođači softvera počeli su izdavati sve inteligentnije, a samim time i obimnije programski sustavi. Mnoge organizacije i pojedinačni korisnici često nisu mogli staviti kupljene proizvode na vlastita računala. Za razmjenu informacija i njihovu distribuciju stvorene su računalne mreže, a generalizirajući programi i podaci počeli su se instalirati na posebne datotečne poslužitelje.

Zahvaljujući DBMS-ovima koji rade s poslužiteljima datoteka, mnogi korisnici imaju pristup istim bazama podataka. Pojednostavljuje razvoj raznih automatizirani sustavi upravljanje organizacijama. Međutim, s ovim pristupom, sva obrada zahtjeva iz programa ili s korisničkih računalnih terminala obavlja se na njima, dakle, implementirati čak i jednostavan zahtjev mora se čitati iz poslužitelj datoteka ili zapišite cijele datoteke na njega, a to vodi do konfliktne situacije i zagušenja mreže. Za uklanjanje ovih nedostataka predloženo je klijent-poslužitelj tehnologija, ali je istovremeno bio potreban zajednički jezik za komunikaciju s poslužiteljem - izbor je pao na SQL.

Tehnologija klijent-poslužitelj znači ovaj način interakcije softverske komponente, pri čemu nastaju jedinstveni sustav. Kao što samo ime sugerira, postoji određeni proces klijenta koji zahtijeva određene resurse, kao i poslužiteljski proces, koji osigurava ove resurse. Nije nužno da budu na istom računalu. Obično je uobičajeno hostirati poslužitelj na jednom čvoru lokalna mreža, a klijenti - na drugim čvorovima.

U kontekstu baze podataka, klijent kontrolira korisničko sučelje i logika aplikacije, ponašajući se 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 poslužitelju, čeka odgovor i formatira primljene podatke za prezentaciju korisniku. Poslužitelj prima i obrađuje zahtjeve prema bazi podataka, a zatim šalje rezultate natrag klijentu. Ova obrada uključuje provjeru vjerodajnica klijenta, osiguravanje zahtjeva integriteta te ispunjavanje zahtjeva i ažuriranje podataka. Osim toga, podržana je kontrola paralelnosti i oporavak.

Arhitektura klijent-poslužitelj ima niz prednosti.

Zadnja izmjena: 24.06.2017

SQL Server je jedan od naj popularni sustavi upravljanje bazom podataka (DBMS) u svijetu. Ovaj DBMS je prikladan za širok raspon projekata: od malih aplikacija do velikih, visoko opterećenih projekata.

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

SQL poslužitelj dugo vremena je bio isključivo sustav za upravljanje bazom podataka za Windows, ali od verzije 16 ovaj sustav je dostupan i na Linuxu.

SQL Server karakteriziraju značajke kao što su:

    Izvođenje. SQL Server je vrlo brz.

    Pouzdanost i sigurnost. SQL Server pruža enkripciju podataka.

    Jednostavnost. Ovaj DBMS je relativno jednostavan za rad i administraciju.

Središnji aspekt MS SQL Servera, kao i svakog DBMS-a, je baza podataka. Baza podataka je spremište organiziranih podataka na određeni način. Često baza podataka fizički predstavlja datoteku na tvrdom disku, iako to dopisivanje nije potrebno. Sustavi za upravljanje bazama podataka koriste se za pohranjivanje i administriranje baza podataka. sustav upravljanja) ili DBMS. A upravo je MS SQL Server jedan od takvih DBMS-a.

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

Relacijski model uključuje pohranu podataka u obliku tablica, od kojih se svaka sastoji od redaka i stupaca. Svaki red pohranjuje zaseban objekt, a stupci sadrže atribute tog objekta.

Primarni ključ se koristi za identifikaciju svakog retka unutar tablice. Primarni ključ može biti jedan ili više stupaca. Pomoću primarnog ključa možemo referencirati određeni redak u tablici. Prema tome, dva retka ne mogu imati isti primarni ključ.

Preko ključeva se jedna tablica može povezati s drugom, odnosno mogu se organizirati odnosi između dvije tablice. I sama tablica se može prikazati 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 izvorno razvio IBM za sustav baze podataka pod nazivom System/R. Ujedno je i sam jezik nazvan 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 sustav za upravljanje bazom podataka, nazvan Oracle, koji je koristio SQL jezik. Zbog uspjeha ovog proizvoda tvrtka je preimenovana u Oracle.

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

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) koristi se u SQL Serveru. Zapravo, to je razlog zašto ćemo T-SQL razmatrati u ovom vodiču.

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

    DDL (Jezik za definiranje podataka). Ova vrsta uključuje razne naredbe, koji stvaraju bazu podataka, tablice, indekse, pohranjene procedure itd. Općenito, podaci su određeni.

    Konkretno, sljedeće naredbe možemo klasificirati kao ovu vrstu:

    • CREATE : stvara objekte baze podataka (samu bazu podataka, tablice, indekse itd.)

      ALTER: mijenja objekte baze podataka

      DROP: Uklanja objekte baze podataka

      TRUNCATE: uklanja sve podatke iz tablica

    DML (jezik za manipulaciju podacima). U ovu vrstu spadaju naredbe za odabir podataka, njihovo ažuriranje, dodavanje, brisanje – općenito sve one naredbe kojima možemo upravljati podacima.

    Ovoj vrsti pripadaju sljedeće naredbe:

    • SELECT: dohvaća 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). Ova vrsta uključuje naredbe koje upravljaju pravima pristupa podacima. Konkretno, to su sljedeće naredbe:

    • GRANT: daje dopuštenja za pristup podacima

      REVOKE: opoziva prava pristupa podacima

Jezik strukturirani upiti Structure Query Language (SQL) nastao je kao rezultat razvoja relacijskog modela podataka i trenutno je de facto standardni jezik za relacijske DBMS-ove. SQL jezik podržan danas ogroman iznos DBMS raznih vrsta.

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

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

Stvaranje baza podataka i tablica puni opis njihove strukture

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

Izvršite jednostavne i složene upite.

SQL jezik je relacijski potpun.

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

SQL jezik ima dvije glavne komponente:

DDL (Data Definition Language) za definiranje struktura baze podataka i kontrolu pristupa podacima

DML (Data Manipulation Language) jezik dizajniran za dohvaćanje i ažuriranje podataka.

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

SELECT - odabir podataka iz baze podataka

INSERT - umetanje podataka u tablicu

UPDATE - ažuriranje podataka u tablici

DELETE - brisanje podataka iz tablice

SELECT izjava

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

Najjednostavniji SQL upit koji ga koristi izgleda ovako:

SELECT col_name FROM tbl

Iza ključne riječi select slijedi popis stupaca odvojenih zarezima čije će podatke vratiti upit. Ključna riječ from određuje iz koje se tablice (ili prikaza) podaci dohvaćaju.

Rezultat upita odabira uvijek je tablica koja se naziva tablica rezultata. Štoviše, rezultati upita izvršenog pomoću naredbe select mogu se koristiti za stvaranje novi stol. Ako rezultati dvaju upita za različite tablice imaju isti format, mogu se kombinirati u jednu tablicu. Također, tablica dobivena kao rezultat upita može biti predmet daljnjih upita.

Da biste odabrali sve stupce i sve retke tablice, samo učinite SELECT upit* IZ tbl;

Razmotrite tablicu proizvoda koja sadrži podatke o cijeni različite vrste proizvodi:

Rezultat zahtjeva

SELECT * FROM Product;

bit će cijela tablica proizvoda.

Pomoću upita možete odabrati određene stupce tablice

SELECT col1, col2, … , coln FROM tbl;

Dakle, rezultat zahtjeva

ODABERITE vrstu, cijenu IZ proizvoda;

bit će stol

Na popis stupaca u odaberite izjavu Također pribjegavaju ako je potrebno promijeniti redoslijed stupaca u rezultirajućoj tablici:

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

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

SELECT * FROM Product where Price<3200;

Njegov rezultat:

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

Korištenje konstrukcije BETWEEN var1 AND var2 omogućuje vam da provjerite spadaju li vrijednosti bilo kojeg izraza u raspon od var1 do var2 (uključujući ove vrijednosti):

ODABERITE * IZ Proizvoda gdje je cijena IZMEĐU 3000 I 3500;

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

Nazivi stupaca navedeni 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 Type AS model, Type_id AS num FROM Product where Type_id =3

vratit će se (pseudonimi trebaju biti napisani bez navodnika):

Operator LIKE dizajniran je za usporedbu niza s uzorkom:

SELECT * FROM tbl where col_name LIKE "abc"

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

Uzorak smije koristiti dva zamjenska znaka: "_" i "%". Prvi od njih zamjenjuje jedan proizvoljni znak u predlošku, a drugi niz proizvoljnih znakova. Dakle, "abc%" odgovara bilo kojem nizu koji počinje s abc, "abc_" odgovara nizu od 4 znaka koji počinje s abc, "%z" odgovara bilo kojem nizu koji završava sa z, i na kraju, "%z%" - nizovi znakova koji sadrže z.

Sve zapise tablice proizvoda u kojima vrijednost tipa počinje slovom "a" možete pronaći ovako:

SELECT * FROM Product where Type LIKE "a%";

kamionske vage

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

"%|_%" BIJEG "|"

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

LIKE "20#%" EXCAPE "#"

Operator IS NULL omogućuje vam da provjerite odsutnost (prisutnost) vrijednosti NULL u poljima tablice. Korištenje redovitih operatora usporedbe u ovim slučajevima može proizvesti netočne rezultate jer usporedba s NULL rezultira UNKNOWN. Dakle, uvjet odabira trebao bi izgledati ovako:

gdje je col_name NULL, umjesto where col_name=NULL.

Zadani rezultat odabira vraća zapise istim redoslijedom kojim su pohranjeni u bazi podataka. Ako želite sortirati zapise prema jednom od stupaca, morate koristiti klauzulu ORDER BY, nakon koje slijedi naziv tog stupca:

SELECT * FROM tbl ORDER BY col_name;

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

Također možete sortirati zapise po više stupaca. 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 s odgovarajućom vrijednošću u stupcu col_name1, oni će biti sortirani prema polju col_name2.

Ako želite sortirati zapise obrnutim redoslijedom (na primjer, padajući po datumu), morate navesti ORDER BY col_name DESC.

Za izravno sortiranje postoji ključna riječ ASC, koja je prihvaćena kao zadana vrijednost.

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

Stoga su informacije često podijeljene na stranice i prezentirane korisniku u dijelovima. 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 dok istovremeno sortira unatrag u polju col_name1:

SELECT * FROM tbl ORDER BY col_name1 DESC LIMIT 10

Za dohvaćanje sljedećih 10 zapisa upotrijebite ključnu riječ limit s dvije vrijednosti: prva određuje poziciju s koje se rezultat treba ispisati, a druga određuje broj zapisa za dohvaćanje:

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. Sam SQL nije Turingov potpuni programski jezik, ali njegov standard dopušta stvaranje proceduralnih proširenja za njega koja proširuju njegovu funkcionalnost u potpuni programski jezik.

Jezik je stvoren 1970-ih pod imenom "SEQUEL" za sustav upravljanja bazom podataka (DBMS) System R. Kasnije je preimenovan u "SQL" kako bi se izbjegli sukobi zaštitnih znakova. Godine 1979. SQL je prvi put objavljen kao komercijalni proizvod, Oracle V2.

Prvi službeni jezični standard prihvatili su ANSI 1986. i ISO 1987. Od tada je stvoreno još nekoliko verzija standarda, od kojih su neke ponavljale prethodne s manjim varijacijama, a druge su preuzele značajne nove značajke.

Unatoč postojanju standarda, većina uobičajenih SQL implementacija toliko se razlikuje da se kod rijetko može prenijeti iz jednog sustava za upravljanje bazom podataka u drugi bez značajnih promjena. To je zbog duljine i složenosti standarda, kao i nedostatka specifikacija u nekim važnim područjima provedbe.

SQL je stvoren kao jednostavan, standardiziran način za dohvaćanje i rukovanje podacima sadržanim u relacijskoj bazi podataka. Kasnije je postao složeniji nego što je planirano i postao je alat za razvojne programere, a ne alat za krajnjeg korisnika. Trenutno je SQL (uglavnom onako kako ga implementira Oracle) i dalje najpopularniji jezik za upravljanje bazom podataka, iako postoji niz alternativa.

SQL se sastoji od četiri različita dijela:

  1. Jezik za definiranje podataka (DDL) koristi se za definiranje struktura podataka pohranjenih u bazi podataka. DDL naredbe omogućuju stvaranje, izmjenu i brisanje pojedinačnih objekata u bazi podataka. Valjani tipovi objekata ovise o korištenom DBMS-u i obično uključuju baze podataka, korisnike, tablice i niz manjih pratećih objekata kao što su uloge i indeksi.
  2. Jezik za manipulaciju podacima (DML) koristi se za dohvaćanje i modificiranje podataka u bazi podataka. DML izjave omogućuju vam dohvaćanje, umetanje, mijenjanje i brisanje podataka u tablicama. Ponekad se izjave odabira dohvaćanja podataka ne smatraju dijelom DML-a jer ne mijenjaju stanje podataka. Sve DML izjave su deklarativne prirode.
  3. Jezik definicije pristupa podacima (DCL) koristi se za kontrolu pristupa podacima u bazi podataka. DCL izjave primjenjuju se na privilegije i omogućuju vam dodjeljivanje i opoziv prava za primjenu određenih DDL i DML izjava na određene objekte baze podataka.
  4. Transaction Control Language (TCL) koristi se za kontrolu obrade transakcija u bazi podataka. Tipično TCL izjave uključuju commit to commit promjene napravljene tijekom transakcije, rollback za njihovo vraćanje i točku spremanja za razbijanje transakcije na nekoliko manjih dijelova.

Treba napomenuti da SQL implementira deklarativnu programsku paradigmu: svaka izjava opisuje samo potrebnu radnju, a DBMS donosi odluku o tome kako će je izvesti, tj. planira elementarne operacije potrebne za izvođenje radnje i provodi ih. Međutim, da bi učinkovito koristio mogućnosti SQL-a, programer mora razumjeti kako DBMS analizira svaku izjavu i stvara svoj plan izvršenja.

Primjeri:

Pozdrav svijete!:

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

Niz 'Hello, World!' odabire se iz ugrađene dvojne tablice koja se koristi za upite koji ne zahtijevaju pristup stvarnim tablicama.

odaberite "Hello, World!" od dualnog ;

Faktorijel:

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 zaobilazno rješenje koristeći:

  • razina pseudo-stupca za stvaranje pseudo-tablica t1 i t2 koje sadrže brojeve od 1 do 16,
  • agregatna funkcija sum , koja vam omogućuje zbrajanje elemenata skupa bez eksplicitne upotrebe petlje,
  • i ln i exp matematičke funkcije, koje vam omogućuju da zamijenite umnožak (potreban za izračun faktorijela) sa zbrojem (koji pruža SQL).

Redak „0! = 1” neće biti uključen u rezultirajući skup redaka, jer pokušaj evaluacije ln(0) rezultira iznimkom.

Fibonaccijevi brojevi:

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

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

  • Binetova formula i matematičke funkcije ROUND, POWER i SQRT za izračun n-tog Fibonaccijevog broja;
  • razina pseudo-stupca za stvaranje pseudo-tablice t1 koja sadrži brojeve od 1 do 16;
  • ugrađena funkcija SYS_CONNECT_BY_PATH za ulančavanje primljenih brojeva.

SELECT REPLACE (MAX (SYS_CONNECT_BY_PATH (fib || ", " , "/" )), "/" , "" ) || "..." fiblist FROM ( SELECT n , fib , ROW_NUMBER () OVER (ORDER BY n ) r FROM ( select n , round ((potencija ((1 + sqrt (5)) * 0 . 5 , n ) - potencija ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib iz (odaberite razinu n iz dvostrukog povezivanja po razini<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Pozdrav 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!" ;

Faktorijel:

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

Koristi se rekurzivna definicija faktorijela, implementirana kroz rekurzivni upit. Svaki redak upita sadrži dva numerička polja, n i n!, a svaki sljedeći redak izračunava se pomoću podataka iz prethodnog.

Možete izračunati samo faktorijele cijelog broja do 20!. Kada pokušavate izračunati 21! Javlja se pogreška “Greška prekoračenja aritmetike”, tj. bitna mreža prelijeva se.

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

Fibonaccijevi brojevi:

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

Koristi se iterativno određivanje Fibonaccijevih brojeva, implementirano kroz rekurzivni upit. Svaki redak upita sadrži dva susjedna broja u nizu, a sljedeći redak se računa kao (zadnji broj, zbroj brojeva) prethodnog retka. Dakle, svi brojevi osim prvog i zadnjeg pojavljuju se dva puta, tako da rezultat uključuje samo prve brojeve svakog retka.

Faktorijel:

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

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

odaberite n || "! = " || f faktorijel iz dualnog modela vrati sve retke dimenzija prema (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);

Fibonaccijevi brojevi:

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

Ovaj primjer pokazuje upotrebu operatora modela, dostupnog u Oracle 10g, koji omogućuje da se nizovi upita tretiraju kao elementi niza. Svaki red sadrži dva polja - sam Fibonaccijev broj i ulančavanje svih brojeva manjih ili jednakih njemu. Iterativno ulančavanje brojeva u istom upitu koji ih generira lakše je i brže od zbrajanja kao zasebne operacije.

odaberite max(s) || ", ..." iz (odaberi s iz dvostrukog modela vrati sve retke dimenzija po ( 0 d ) mjere ( cast ( " " kao varchar2 (200 )) s , 0 f ) pravila iteracija ( 16 ) ( f [ broj_iteracije ] = dekodirati (broj_iteracije, 0, 1, 1, 1, f [broj_iteracije - 1] + f [broj_iteracije - 2]), s [broj_iteracije] = dekodirati (broj_iteracije, 0, to_char (f [broj_iteracije]), s [broj_iteracije - 1 ] || ", " || to_char (f [ broj_iteracije ])) ) );

Faktorijel:

Primjer za MySQL 5 verzije

odaberite concat (cast (t2 . n as char ), "!= " , cast (exp (sum (log (t1 . n ))) as char )) iz ( odaberite @ i : = @ i + 1 AS n iz TABLE , (odaberite @ i : = 0 ) kao ograničenje sel1 16 ) t1 , ( odaberite @ j : = @ j + 1 AS n iz TABLICE , (odaberite @ j : = 0 ) kao ograničenje sel1 16 ) t2 gdje je t1 . n<= t2 . n group by t2 . n

Fibonaccijevi brojevi:

Primjer za MySQL 5 verzije

Zamijenite TABLE 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 TABLICE, (odaberi @ i : = 1 , @ j : = 0 ) sel1 granica 16 ) t

Pozdrav svijete!:

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

Ovaj primjer koristi anonimni PL/SQL blok koji ispisuje poruku na standardni izlaz pomoću paketa dbms_output.

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

Faktorijel:

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

Ovaj primjer pokazuje iterativno izračunavanje faktorijela pomoću PL/SQL.

deklarirati 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 ;

Fibonaccijevi brojevi:

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

Ovaj primjer koristi iterativno određivanje Fibonaccijevih brojeva. Već izračunati brojevi pohranjuju se u podatkovnu strukturu varray - analog niza.

deklariraj tip vektora je niz (16) broja; fib vektor := vektor(); ja 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) || ", "; završna petlja; dbms_izlaz. 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 omogućuje uvođenje varijabli tijekom izvođenja upita u obliku zamjenjivih varijabli. Da bi se definirala takva varijabla, njeno ime (u ovom slučaju, A, B i C) mora se koristiti sa znakom & ispred kad god je potrebno referencirati varijablu. Kada se upit izvrši, od korisnika se traži da unese vrijednosti svih zamjenskih varijabli korištenih u upitu. Nakon što su vrijednosti unesene, svaka referenca na takvu varijablu zamjenjuje se njezinom 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 znak && umjesto jednog znaka &. Na ovaj način se vrijednost za svaku varijablu unosi samo jednom, a sve naredne reference na nju bit će zamijenjene istom vrijednošću (kada koristite jedan ampersand u SQL*Plus, vrijednost za svaku referencu na istu varijablu mora se unijeti zasebno ). U PL/SQL Developeru, svim referencama varijabli mora prethoditi jedan znak &, inače će se pojaviti pogreška ORA-01008 "Nisu sve varijable vezane".

Prvi redak primjera navodi znak za decimalni razdjelnik, koji se koristi pri pretvaranju korijenskih brojeva 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 session set NLS_NUMERIC_CHARACTERS = "." ; odaberite "Nije kvadratna jednadžba." ans iz dualnog gdje && A = 0 unija odaberite "x = " || to_char (-&& B / 2 /& A ) from dual where & A != 0 and & B *& B - 4 *& A *&& C = 0 union select "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 dualnog gdje je & A != 0 i & B *& B - 4 *& A *& C > 0 unija 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 duala gdje je & A != 0 i & B *& B - 4 *& A *& C< 0 ;

Najbolji članci na temu