Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Windows 10
  • SQL: un limbaj universal pentru lucrul cu baze de date. Interogarea UPDATE și condiția WHERE

SQL: un limbaj universal pentru lucrul cu baze de date. Interogarea UPDATE și condiția WHERE

Funcționalitate Limbajul SQL

Funcționalitatea principală a limbajului SQL este prezentată mai jos.

Definiţia data. Această funcție SQL este o descriere a structurii datelor suportate și a organizării relațiilor relaționale (tabele). Operatorii pentru crearea unei baze de date, crearea tabelelor și accesarea datelor sunt destinate să o implementeze.

Crearea bazei de date. Pentru a crea noua baza date, se folosește operatorul CREATE DATABASE. Structura operatorului specifică numele bază creată date.

Crearea de tabele. Tabelul de bază este creat folosind instrucțiunea CREATE TABLE. Această declarație specifică numele câmpurilor, tipurile de date pentru acestea și lungimea (pentru unele tipuri de date). SQL utilizează următoarele tipuri de date:

INTEGER – număr întreg;

CHAR – valoarea caracterului;

VARCHAR – valoarea caracterului, sunt stocate doar caracterele neblank;

zecimală – numar decimal;

FLOAT – număr în virgulă mobilă;

DOUBLE PRECISION – virgulă flotantă de dublă precizie;

DATETIME – data și ora;

BOOL – valoare booleană.

Declarația de creare a tabelului specifică restricții asupra valorilor coloanei și asupra tabelului. Posibile restricții sunt prezentate în tabel. 4.8

Tabelul 4.8 Limitări ale datelor definite

Pentru model relațional date, este esențial să specificați o cheie străină (FOREIGNKEY). Când declarați chei străine, trebuie să impuneți restricții corespunzătoare asupra coloanei, de exemplu, NOT NULL.

Într-o instrucțiune SQL, CHECK denotă constrângeri semantice care asigură integritatea datelor, cum ar fi limitarea setului valori acceptabile o anumită coloană.

Nu puteți utiliza instrucțiunea create table de mai multe ori pe același tabel. Dacă, după crearea sa, se descoperă inexactități în definiția sa, atunci se pot face modificări folosind instrucțiunea ALTER TABLE. Acest operator are scopul de a schimba structura tabelul existent: Puteți elimina sau adăuga un câmp la un tabel existent.

Manipulare de date. SQL permite unui utilizator sau unui program de aplicație să modifice conținutul unei baze de date prin inserarea de date noi, ștergerea sau modificarea datelor existente.

Inserarea de date noi este o procedură pentru adăugarea de rânduri la o bază de date și se realizează folosind instrucțiunea INSERT.

Modificarea datelor implică modificări ale valorilor într-una sau mai multe coloane ale unui tabel și se efectuează folosind o instrucțiune UPDATE. Exemplu:

SET suma=suma+1000,00

UNDE suma>0

Eliminarea rândurilor dintr-un tabel folosind instrucțiunea DELETE. Sintaxa operatorului este:

DE LA masă

Clauza WHERE este opțională, dar dacă nu este inclusă, toate intrările din tabel vor fi șterse. Este util să folosiți instrucțiunea SELECT cu aceeași sintaxă ca și instrucțiunea DELETE pentru a verifica dinainte ce înregistrări vor fi șterse.

Asigurarea integritatii datelor. Limbajul SQL vă permite să definiți constrângeri de integritate destul de complexe, a căror satisfacție va fi verificată pentru toate modificările bazei de date. Monitorizarea rezultatelor tranzacțiilor, erori de procesare și coordonare munca paralela cu o bază de date cu mai multe aplicații sau utilizatori este furnizată de instrucțiunile COMMIT (înregistrează finalizarea cu succes a tranzacției curente și începutul uneia noi) și ROLLBACK (nevoia de rollback - recuperare automată starea bazei de date la începutul tranzacției)

Eșantionarea datelor- unul dintre funcții esențiale baza de date căreia îi corespunde instrucțiunea SELECT. Un exemplu de utilizare a operatorului a fost discutat în secțiunea anterioară.

În SQL, puteți crea secvențe imbricate de interogări (subinterogări). Exista anumite tipuri interogări care sunt mai bine implementate folosind subinterogări. Aceste interogări includ așa-numitele verificări ale existenței. Să presupunem că doriți să obțineți date despre elevii care nu au o notă de șapte puncte. Dacă se returnează un set gol, atunci aceasta înseamnă un singur lucru - fiecare elev are, macar, o astfel de evaluare.

Legătura de tabele. Instrucțiunile SQL vă permit să preluați date din mai mult de un tabel. O modalitate de a face acest lucru este să legați tabele folosind un câmp comun.

Instrucțiunea SELECT trebuie să conțină o constrângere privind potrivirea valorilor unei anumite coloane (câmp). Apoi doar acele rânduri în care valorile coloana dată se potrivesc. Numele coloanei este indicat numai împreună cu numele tabelului; altfel afirmaţia va fi ambiguă.

Puteți utiliza și alte tipuri de legături de tabele: operatorul INTER JOIN (inner join) asigură că setul de înregistrări rezultat conține valori corespunzătoare în câmpurile aferente. Conexiuni externe(OUTER JOIN) vă permit să includeți în rezultatul interogării toate rândurile dintr-un tabel și rândurile corespunzătoare dintr-un altul

Controlul accesului. SQL asigură sincronizarea procesării bazei de date de către diverse programe de aplicație, protejând datele de accesul neautorizat.

Accesul la date într-un mediu multi-utilizator este controlat folosind instrucțiuni GRANT și REVOKE. În fiecare instrucțiune este necesar să se specifice utilizatorul, obiectul (tabelul, vizualizarea) în raport cu care sunt setate permisiunile și permisiunile în sine. De exemplu, instrucțiunea GRANT oferă utilizatorului X posibilitatea de a prelua date din tabelul PRODUCT:

Acordați SELECTAREA PE PRODUS LUI X

Declarația REVOKE revocă toate permisiunile acordate anterior.

Încorporarea SQL în programele de aplicație. Aplicații reale scris de obicei în alte limbi care generează cod SQL și îl transmit DBMS ca text ASCII.

Standardul IBM pentru produsele SQL reglementează utilizarea limbajului SQL încorporat. Când scrieți un program de aplicație, textul acestuia este un amestec de comenzi din limbajul principal de programare (de exemplu, C, Pascal, Cobol, Fortran, Assembler) și comenzi SQL cu un prefix special, de exemplu. ExecSQL. Structura instrucțiunilor SQL a fost extinsă pentru a se adapta variabilelor limbajului gazdă într-un construct SQL.



Procesorul SQL modifică tipul de program în conformitate cu cerințele compilatorului limbajului principal de programare. Funcția compilatorului este de a traduce (traduce) un program din limbajul de programare sursă într-un limbaj apropiat de limbajul mașină. După compilare program de aplicare(aplicația) este un modul separat.

dialecte SQL

SGBD-urile relaționale moderne folosesc dialectele limbajului SQL pentru a descrie și a manipula datele. Un subset al limbajului SQL care vă permite să creați și să descrieți o bază de date se numește DDL (Data Definition Language).

Inițial, limbajul SQL a fost numit SEQUEL (Structured English Query Language), apoi SEQUEL/2 și apoi pur și simplu SQL. Astăzi, SQL este standardul de facto pentru SGBD-urile relaționale.

Primul standard de limbaj a apărut în 1989 - SQL-89 și a fost susținut de aproape toate SGBD-urile relaționale comerciale. Era de natură generală și supus unei interpretări ample. Avantajele SQL-89 pot fi considerate standardizarea sintaxei și semanticii operatorilor pentru eșantionare și manipulare a datelor, precum și fixarea mijloacelor pentru limitarea integrității bazei de date. Cu toate acestea, lipsea o secțiune atât de importantă precum manipularea schemei bazei de date. Incompletitudinea standardului SQL-89 a dus la apariția în 1992. următoarea versiune Limbajul SQL.

SQL2 (sau SQL-92) acoperă aproape totul problemele necesare: Manipularea schemei bazei de date, gestionarea tranzacțiilor și a sesiunilor, acceptă arhitecturi client-server sau instrumente de dezvoltare a aplicațiilor.

Urmatorul pas dezvoltarea limbajului este Opțiunea SQL 3. Această versiune a limbajului este completată de un mecanism de declanșare, definirea unui tip de date arbitrar și extensia obiectului.

În prezent există trei niveluri ale limbii: începător, intermediar și complet. Mulți producători de SGBD-uri folosesc implementari proprii SQL bazat pe cel puțin nivel de intrare standard ANSI corespunzător și care conține unele extensii specifice unui anumit SGBD. În tabel 4.9 oferă exemple de dialecte SQL.

Tabelul 4.9 Dialecte SQL

SGBD Limbajul de interogare
SGBD System R SQL
DB2 SQL
Acces SQL
SYBASE SQL oriunde Watcom-SQL
SYBASE SQL Server Transact_SQL
SQL-ul meu SQL
Oracol PL/SQL

Bazele de date orientate pe obiecte folosesc limbajul de interogare obiect OQL (Object Query Language). Limbajul OQL s-a bazat pe comanda SELECT a limbajului SQL2 și a adăugat capacitatea de a direcționa o interogare către un obiect sau colecție de obiecte, precum și capacitatea de a apela metode într-o singură interogare.

Compatibilitatea multor dialecte SQL utilizate determină compatibilitatea DBMS. Astfel, SGBD-ul SYBASE SQL Anywhere este cât se poate de compatibil pentru un SGBD din această clasă cu SGBD-ul SYBASE SQL Server. Unul dintre aspectele acestei compatibilități este suportul în SYBASE SQL Anywhere a unui astfel de dialect al limbajului SQL precum Transact-SQL. Acest dialect este folosit în SYBASE SQL Server și poate fi folosit în SYBASE SQL Anywhere împreună cu dialectul nativ SQL - Watcom-SQL.

Întrebări de control

1. Cum poate fi clasificat un SGBD?

2. Ce modele de baze de date există?

3. Care sunt principalele elemente ale modelelor informaţionale?

4. Ce tipuri de relații există între entități?

5. Ce sunt diagramele ER și pentru ce sunt folosite?

6. Ce vă permite procedura de normalizare a tabelului?

7. Denumiți limba și software DBMS?

8. Ce tip de MS Access DBMS este?

9. Care sunt principalele obiecte ale SGBD-ului MS Access?

10. Pentru ce se folosesc principalii operatori SQL?

baze de date care ar putea funcționa în numeroase sisteme informatice tipuri variate. Într-adevăr, cu ajutorul acestuia, utilizatorii pot manipula datele indiferent dacă lucrează pe un computer personal, o stație de lucru în rețea sau un mainframe.

Unul dintre limbajele care a apărut ca urmare a dezvoltării modelului de date relaționale este limbajul SQL (Structured Query Language), care acum a devenit foarte răspândit și de fapt a devenit limbaj standard baze de date relaționale date. Standard SQL a fost lansat de Institutul Național American de Standarde (ANSI) în 1986 și a fost adoptat la nivel internațional de Organizația Internațională de Standardizare (ISO) în 1987. Standardul SQL actual este cunoscut ca SQL/92.

Utilizarea oricăror standarde implică nu numai numeroase și complet avantaje evidente, dar și anumite dezavantaje. În primul rând, standardele direcționează dezvoltarea industriei relevante într-o anumită direcție; În cazul limbajului SQL, existența unor principii de bază puternice duce în cele din urmă la compatibilitatea între diferitele sale implementări și ajută atât la creșterea portabilității softwareși bazele de date în general și versatilitatea muncii administratorilor de baze de date. Pe de altă parte, standardele limitează flexibilitatea și funcționalitatea unei anumite implementări. Sub implementarea limbajului SQL este înțeles software SQL al producătorului corespunzător. Pentru extindere funcţionalitate mulți dezvoltatori care aderă la standarde acceptate, adaugă la limbaj standard SQL diverse extensii. Trebuie remarcat faptul că standardele necesită orice completat implementări ale limbajului Prezența SQL a anumitor caracteristici și în schiță generală reflectă tendințele majore care nu numai că duc la compatibilitate între toate implementările concurente, dar ajută și la creșterea valorii programatorilor și utilizatorilor SQL. baze de date relaționale pe piata moderna software.

Toate specifice implementări ale limbajului sunt oarecum diferite unele de altele. Este în interesul producătorilor înșiși să se asigure că vânzările lor respectă standarde moderne ANSI pentru portabilitate și experiență de utilizator. Cu toate acestea, fiecare implementare a SQL conține îmbunătățiri pentru a îndeplini cerințele unui anumit server de bază de date. Aceste îmbunătățiri sau extensii ale limbajului SQL sunt comenzi suplimentareși opțiuni care sunt completări la pachet standardși disponibile în această implementare specială.

În prezent, limbajul SQL este suportat de multe zeci de SGBD tipuri variate, conceput pentru o mare varietate de platforme de calcul, variind de la calculatoare personaleși terminând cu mainframe.

Toate limbajele de manipulare a datelor create pentru multe SGBD-uri înainte de apariția baze de date relaționale, s-au concentrat pe operațiuni cu date prezentate sub formă de înregistrări de fișiere logice. Desigur, acest lucru a necesitat utilizatorului să aibă cunoștințe detaliate despre organizarea stocării datelor și un efort serios pentru a specifica ce date sunt necesare, unde se află și cum să le obțină.

Limbajul SQL luat în considerare este axat pe operațiuni cu date prezentate sub formă de seturi de tabele de relații interconectate logic. Caracteristica cheie structurile sale sunt concentrate pe rezultatul final al prelucrării datelor, și nu pe procedura acestei prelucrări. Limbajul SQL însuși determină unde se află datele, indecșii și chiar care este cea mai eficientă secvență de operații care trebuie utilizată pentru a obține rezultatul, deci nu este necesar să specificați aceste detalii în interogarea bazei de date.

Introducere în tehnologia client-server

Datorită expansiunii pieței servicii de informare producătorii de software au început să lanseze din ce în ce mai inteligent, și, prin urmare, mai voluminos sisteme software. Multe organizații și utilizatori individuali de multe ori nu au putut plasa produsele achiziționate pe propriile computere. Pentru schimbul de informații și distribuirea acesteia s-au creat rețele de calculatoare, iar pe servere speciale de fișiere au început să fie instalate programe de generalizare și date.

Datorită SGBD-urilor care lucrează cu servere de fișiere, mulți utilizatori au acces la aceleași baze de date. Simplifica dezvoltarea diverselor sisteme automatizate managementul organizatiilor. Cu toate acestea, cu această abordare, toată procesarea solicitărilor de la programe sau de la terminalele computerului utilizatorului este efectuată pe acestea, prin urmare, pentru a implementa chiar și simpla cerere trebuie citit din server de fișiere sau scrieți fișiere întregi în el și acest lucru duce la situatii conflictualeși congestionarea rețelei. Pentru a elimina aceste neajunsuri, s-a propus tehnologie client-server, dar în același timp era nevoie de un limbaj comun pentru comunicarea cu serverul - alegerea a căzut pe SQL.

Tehnologia client-serverînseamnă acest mod de interacțiune componente software, la care se formează sistem unificat. După cum sugerează și numele, există un anumit proces client care necesită anumite resurse, precum și proces de server, care oferă aceste resurse. Nu este necesar ca ei să fie pe același computer. De obicei, este obișnuit să găzduiești serverul pe un singur nod retea locala, și clienți - pe alte noduri.

Într-un context de bază de date, clientul controlează interfața cu utilizatorulși logica aplicației, acționând ca stație de lucru pe care rulează aplicațiile de bază de date. Clientul acceptă o solicitare de la utilizator, verifică sintaxa și generează o interogare a bazei de date în SQL sau în alt limbaj de bază de date adecvat logicii aplicației. Apoi trimite un mesaj către server, așteaptă un răspuns și formatează datele primite pentru a le prezenta utilizatorului. Serverul primește și procesează cereri către baza de date, apoi trimite rezultatele înapoi către client. Această procesare include verificarea acreditărilor clientului, asigurarea cerințelor de integritate și îndeplinirea cererii și actualizarea datelor. În plus, sunt acceptate controlul simultan și recuperarea.

Arhitectura client-server are o serie de avantaje.

Ultima actualizare: 24.06.2017

SQL Server este unul dintre cele mai multe sisteme populare managementul bazelor de date (DBMS) în lume. Acest SGBD este potrivit pentru o mare varietate de proiecte: de la aplicații mici la proiecte mari, foarte încărcate.

SQL Server a fost creat de către Microsoft. Prima versiune a fost lansată în 1987. A Versiune curentă este versiunea 16, care a apărut în 2016 și va fi folosită în ghidul actual.

SQL Server pentru o lungă perioadă de timp a fost exclusiv un sistem de gestionare a bazelor de date pentru Windows, dar începând cu versiunea 16 acest sistem este disponibil și pe Linux.

SQL Server este caracterizat de caracteristici precum:

    Performanţă. SQL Server este foarte rapid.

    Fiabilitate și siguranță. SQL Server oferă criptarea datelor.

    Simplitate. Acest SGBD este relativ ușor de utilizat și de administrat.

Aspectul central în MS SQL Server, ca în orice SGBD, este baza de date. O bază de date este un depozit de date organizate într-un anumit fel. Adesea, baza de date reprezintă fizic un fișier de pe hard disk, deși această corespondență nu este necesară. Sistemele de gestionare a bazelor de date sunt folosite pentru a stoca și administra bazele de date. sistem de management) sau DBMS. Și doar MS SQL Server este unul dintre astfel de SGBD.

MS SQL Server folosește un model relațional pentru a organiza bazele de date. Acest model de bază de date a fost dezvoltat în 1970 de către Edgar Codd. Și astăzi este de fapt standardul pentru organizarea bazelor de date.

Modelul relațional presupune stocarea datelor sub formă de tabele, fiecare dintre ele constând din rânduri și coloane. Fiecare rând stochează un obiect separat, iar coloanele conțin atributele acelui obiect.

O cheie primară este utilizată pentru a identifica fiecare rând dintr-un tabel. Cheia primară poate fi una sau mai multe coloane. Folosind o cheie primară, putem face referire la un anumit rând dintr-un tabel. În consecință, două rânduri nu pot avea aceeași cheie primară.

Prin chei, un tabel poate fi legat de altul, adică se pot organiza relații între două tabele. Și masa în sine poate fi reprezentată ca o relație.

Pentru a interacționa cu baza de date, se folosește limbajul SQL (Structured Query Language). Clientul (de exemplu, un program extern) trimite o solicitare în SQL folosind un API special. SGBD interpretează și execută corect cererea și apoi trimite rezultatul execuției clientului.

SQL a fost dezvoltat inițial de IBM pentru un sistem de baze de date numit System/R. În același timp, limba în sine a fost numită SEQUEL (Structured English Query Language). Deși nici baza de date, nici limba în sine nu au fost ulterior publicate oficial, în mod tradițional, termenul SQL în sine este adesea pronunțat ca „o continuare”.

În 1979, Relational Software Inc. a dezvoltat primul sistem de gestionare a bazelor de date, numit Oracle, care a folosit limbajul SQL. Datorită succesului acestui produs, compania a fost redenumită Oracle.

Ulterior, au început să apară și alte sisteme de baze de date care foloseau SQL. Drept urmare, în 1989, Institutul Național American de Standarde (ANSI) a codificat limba și a publicat primul său standard. După aceasta, standardul a fost actualizat și completat periodic. Ultima sa actualizare a avut loc în 2011. Dar, în ciuda existenței unui standard, producătorii de DBMS folosesc adesea propriile implementări ale limbajului SQL, care sunt ușor diferite unele de altele.

Există două varietăți de limbaj SQL: PL-SQL și T-SQL. PL-SQL este folosit în SGBD-uri precum Oracle și MySQL. T-SQL (Transact-SQL) este utilizat în SQL Server. De fapt, acesta este motivul pentru care T-SQL va fi luat în considerare în ghidul actual.

În funcție de sarcina pe care o îndeplinește comanda T-SQL, aceasta poate fi unul dintre următoarele tipuri:

    DDL (Data Definition Language). Acest tip include diverse comenzi, care creează baza de date, tabele, indexuri, proceduri stocate etc. În general, datele sunt determinate.

    În special, putem clasifica următoarele comenzi ca acest tip:

    • CREATE : creează obiecte de bază de date (baza de date în sine, tabele, indecși etc.)

      ALTER: modifică obiectele bazei de date

      DROP: Elimină obiectele bazei de date

      TRUNCATE: elimină toate datele din tabele

    DML (Limbaj de manipulare a datelor). Acest tip include comenzi pentru selectarea datelor, actualizarea, adăugarea, ștergerea - în general, toate acele comenzi cu care putem gestiona datele.

    Următoarele comenzi aparțin acestui tip:

    • SELECT: preia datele din baza de date

      UPDATE: actualizează datele

      INSERT: adaugă date noi

      DELETE: șterge datele

    DCL (Data Control Language / Data Access Control Language). Acest tip include comenzi care gestionează drepturile de acces la date. În special, acestea sunt următoarele comenzi:

    • GRANT: acordă permisiuni de acces la date

      REVOCA: revocă drepturile de acces la date

Limba interogări structurate Structure Query Language (SQL) a fost creat ca urmare a dezvoltării modelului de date relaționale și este în prezent limbajul standard de facto pentru SGBD-urile relaționale. Limbajul SQL acceptat astăzi o sumă imensă SGBD de diferite tipuri.

Numele limbajului SQL este de obicei pronunțat „es-qu-el”. Uneori este folosit numele mnemonic „See-Quel”.

Limbajul SQL oferă utilizatorului (cu efort minim din partea sa) urmatoarele posibilitati:

Creați baze de date și tabele cu descriere completa structurile lor

Efectuați operațiuni de bază de manipulare a datelor: inserarea, modificarea, ștergerea datelor

Rulați atât interogări simple, cât și complexe.

Limbajul SQL este complet relațional.

Structura și sintaxa comenzilor sale sunt destul de simple, iar limbajul în sine este universal, adică sintaxa și structura comenzilor sale nu se schimbă la trecerea de la un SGBD la altul.

Limbajul SQL are două componente principale:

DDL (Data Definition Language) pentru definirea structurilor bazei de date și controlul accesului la date

Limbajul DML (Data Manipulation Language) conceput pentru preluarea și actualizarea datelor.

SQL este un limbaj non-procedural, ceea ce înseamnă că atunci când îl utilizați, trebuie să specificați ce informații trebuie obținute, nu cum pot fi obținute. Comenzile SQL sunt doar cuvinte în limba engleză(SELECTARE, INSERARE, etc.). Să ne uităm mai întâi la instrucțiunile SQL DML:

SELECT - selectarea datelor din baza de date

INSERT - inserarea datelor într-un tabel

UPDATE - actualizarea datelor dintr-un tabel

DELETE - ștergerea datelor dintr-un tabel

instrucțiunea SELECT

Operatorul SELECT efectuează acțiuni echivalente cu următoarele operații de algebră relațională: selecție, proiecție și unire.

Cea mai simplă interogare SQL care o folosește arată astfel:

SELECT col_name FROM tbl

Cuvântul cheie select este urmat de o listă de coloane separate prin virgulă ale căror date vor fi returnate de interogare. Cuvântul cheie from specifică din ce tabel (sau vizualizare) sunt preluate datele.

Rezultatul unei interogări select este întotdeauna un tabel numit tabel cu rezultate. Mai mult, rezultatele unei interogări executate folosind instrucțiunea select pot fi folosite pentru a crea masa noua. Dacă rezultatele a două interogări la mese diferite au același format, pot fi combinate într-un singur tabel. De asemenea, tabelul obținut în urma unei interogări poate face obiectul unor interogări ulterioare.

Pentru a selecta toate coloanele și toate rândurile unui tabel, trebuie doar să faceți interogare SELECT* DIN tbl;

Luați în considerare tabelul Produs, care conține informații despre prețul tipuri diferite produse:

Solicitați rezultatul

SELECT * FROM Produs;

va fi întregul tabel de produse.

Puteți selecta anumite coloane din tabel folosind o interogare

SELECT col1, col2, … , coln FROM tbl;

Deci, rezultatul cererii

SELECTează tipul, prețul din produs;

va fi o masă

La lista coloanelor din selectează declarația De asemenea, recurg dacă este necesar să se schimbe ordinea coloanelor din tabelul rezultat:

Pentru a selecta doar acele rânduri de tabel care îndeplinesc anumite restricții, o specială cuvânt cheie unde urmat de condiție logică. Dacă o înregistrare îndeplinește această condiție, este inclusă în rezultat. În caz contrar, intrarea este eliminată.

De exemplu, selectarea acelor produse din tabelul Produs al căror preț satisface condiția Preț<3200, можно осуществить, используя запрос

SELECTAȚI * FROM Produs unde Preț<3200;

Rezultatul lui:

Condiția poate fi compusă și combinată folosind operatorii logici NOT , AND, OR, XOR, de exemplu: unde id_ Price>500 AND Price<3500. Допускается также использование выражений в условии: where Price>(1+1) și constantele șirului de caractere: unde name= "autoweights".

Utilizarea constructului BETWEEN var1 AND var2 vă permite să verificați dacă valorile oricărei expresii se încadrează în intervalul de la var1 la var2 (inclusiv aceste valori):

SELECTAȚI * FROM Produs la care Prețul INTRE 3000 SI 3500;

Similar cu operatorul NOT BETWEEN, există operatorul NOT IN.

Numele de coloane specificate în clauza SELECT pot fi redenumite. Pentru aceasta se folosește cuvântul cheie AS, care, totuși, poate fi omis, întrucât este implicit subînțeles. De exemplu, cerere

SELECT Tip AS model, Type_id AS num FROM Product unde Type_id =3

va reveni (numele de alias trebuie scrise fără ghilimele):

Operatorul LIKE este conceput pentru a compara un șir cu un model:

SELECT * FROM tbl unde col_name LIKE "abc"

Această interogare returnează numai acele înregistrări care conțin valoarea șirului abc în coloana col_name.

Eșantionului i se permite să utilizeze două caractere joker: „_” și „%”. Primul dintre ele înlocuiește un caracter arbitrar din șablon, iar al doilea înlocuiește o secvență de caractere arbitrare. Deci, „abc%” se potrivește cu orice șir care începe cu abc, „abc_” se potrivește unui șir de 4 caractere care începe cu abc, „%z” se potrivește cu orice șir care se termină cu z și, în final, „%z%” - secvențe de caractere care conțin z.

Puteți găsi toate înregistrările din tabelul Produs în care valoarea Tip începe cu litera „a” astfel:

SELECT * FROM Produs unde Tip LIKE „a%”;

cântare de camion

Dacă șirul de căutare conține un caracter wildcard, atunci trebuie să specificați caracterul de escape în clauza ESCAPE. Acest caracter de control trebuie să fie utilizat în modelul înainte de caracterul wildcard, indicând faptul că caracterul wildcard trebuie tratat ca un caracter obișnuit. De exemplu, dacă ar trebui să căutați toate valorile într-un câmp care conține caracterul „_”, atunci modelul „%_%” ar avea ca rezultat returnarea tuturor înregistrărilor din tabel. În acest caz, șablonul trebuie scris după cum urmează:

"%|_%" ESCAPE "|"

Pentru a verifica valoarea conformității cu șirul „20%” puteți utiliza următorul operator:

LIKE „20#%” ESCAPE „#”

Operatorul IS NULL vă permite să verificați absența (prezența) unei valori NULL în câmpurile unui tabel. Utilizarea operatorilor de comparație obișnuiți în aceste cazuri poate produce rezultate incorecte, deoarece compararea cu rezultatele NULL în NECUNOSCUT. Astfel, condiția de selecție ar trebui să arate astfel:

unde col_name ESTE NULL, în loc de unde col_name=NULL.

Rezultatul implicit al selecției returnează înregistrările în aceeași ordine în care sunt stocate în baza de date. Dacă doriți să sortați înregistrările după una dintre coloane, trebuie să utilizați clauza ORDER BY, urmată de numele acelei coloane:

SELECT * FROM tbl ORDER BY col_name;

Această interogare va returna înregistrările în ordinea crescătoare a valorii atributului col_name.

De asemenea, puteți sorta înregistrările după mai multe coloane. Pentru a face acest lucru, numele lor trebuie specificate după ORDER BY separate prin virgule:

SELECTAȚI * FROM tbl ORDER BY col_name1, col_name2.

Înregistrările vor fi sortate după câmpul col_name1; dacă există mai multe înregistrări cu o valoare potrivită în coloana col_name1, acestea vor fi sortate după câmpul col_name2.

Dacă doriți să sortați înregistrările în ordine inversă (de exemplu, descrescătoare după dată), trebuie să specificați ORDER BY col_name DESC.

Pentru sortarea directă, există cuvântul cheie ASC, care este acceptat ca valoare implicită.

Dacă rezultatul eșantionului conține sute sau mii de înregistrări, producția și procesarea acestora durează considerabil.

Prin urmare, informațiile sunt adesea împărțite în pagini și prezentate utilizatorului în porțiuni. Paginarea este utilizată folosind cuvântul cheie limită urmat de numărul de intrări de afișat. Următoarea interogare preia primele 10 înregistrări în timp ce sortează simultan înapoi în câmpul col_name1:

SELECTAȚI * FROM tbl ORDER BY col_name1 DESC LIMIT 10

Pentru a prelua următoarele 10 înregistrări, utilizați cuvântul cheie limit cu două valori: prima specifică poziția din care trebuie tipărit rezultatul, iar a doua specifică numărul de înregistrări de preluat:

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

Pentru a prelua următoarele 10 înregistrări, trebuie să utilizați construcția LIMIT 20, 10.

Limbaj de programare

SQL (Structured Query Language) este un limbaj de gestionare a bazelor de date pentru baze de date relaționale. SQL în sine nu este un limbaj de programare complet Turing, dar standardul său permite crearea de extensii procedurale pentru acesta, care își extind funcționalitatea într-un limbaj de programare cu drepturi depline.

Limbajul a fost creat în anii 1970 sub numele „SEQUEL” pentru sistemul de management al bazelor de date (DBMS) System R. Ulterior a fost redenumit „SQL” pentru a evita conflictele de mărci înregistrate. În 1979, SQL a fost publicat pentru prima dată ca produs comercial, Oracle V2.

Primul standard de limbă oficială a fost adoptat de ANSI în 1986 și ISO în 1987. De atunci, au mai fost create câteva versiuni ale standardului, unele dintre ele repetându-le pe cele anterioare cu variații minore, altele luând noi caracteristici semnificative.

În ciuda existenței standardelor, cele mai obișnuite implementări SQL diferă atât de mult încât codul poate fi rareori portat de la un sistem de gestionare a bazelor de date la altul fără a face modificări semnificative. Acest lucru se datorează lungimii și complexității standardului, precum și lipsei sale de specificații în unele domenii importante de implementare.

SQL a fost creat ca o modalitate simplă, standardizată de a prelua și manipula datele conținute într-o bază de date relațională. Ulterior, a devenit mai complex decât intenționat și a devenit mai degrabă un instrument pentru dezvoltatori decât un instrument pentru utilizatorul final. În prezent, SQL (în cea mai mare parte implementat de Oracle) rămâne cel mai popular dintre limbajele de gestionare a bazelor de date, deși există o serie de alternative.

SQL este format din patru părți distincte:

  1. Data Definition Language (DDL) este folosit pentru a defini structurile de date stocate în baza de date. Instrucțiunile DDL vă permit să creați, să modificați și să ștergeți obiecte individuale din baza de date. Tipurile de obiecte valide depind de SGBD utilizat și includ de obicei baze de date, utilizatori, tabele și un număr de obiecte suport mai mici, cum ar fi roluri și indecși.
  2. Limbajul de manipulare a datelor (DML) este folosit pentru a prelua și modifica datele din baza de date. Instrucțiunile DML vă permit să preluați, să inserați, să modificați și să ștergeți date din tabele. Uneori, instrucțiunile de selectare pentru extragerea datelor nu sunt considerate parte a DML deoarece nu schimbă starea datelor. Toate declarațiile DML sunt de natură declarativă.
  3. Limbajul de definire a accesului la date (DCL) este utilizat pentru a controla accesul la datele din baza de date. Declarațiile DCL se aplică privilegiilor și vă permit să acordați și să revocați drepturi de a aplica anumite instrucțiuni DDL și DML anumitor obiecte de bază de date.
  4. Transaction Control Language (TCL) este folosit pentru a controla procesarea tranzacțiilor din baza de date. În mod obișnuit, declarațiile TCL includ commit to commit modificările făcute în timpul unei tranzacții, rollback pentru a le derula înapoi și salvare pentru a împărți tranzacția în mai multe părți mai mici.

Trebuie remarcat faptul că SQL implementează o paradigmă de programare declarativă: fiecare instrucțiune descrie doar acțiunea necesară, iar SGBD ia o decizie cu privire la modul de realizare a acesteia, de exemplu. planifică operaţiile elementare necesare efectuării unei acţiuni şi le realizează. Cu toate acestea, pentru a utiliza în mod eficient capabilitățile SQL, un dezvoltator trebuie să înțeleagă cum SGBD analizează fiecare instrucțiune și își creează planul de execuție.

Exemple:

Salut Lume!:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Șirul „Hello, World!” este selectat din tabelul dual încorporat, care este utilizat pentru interogări care nu necesită acces la tabele reale.

selectați „Bună ziua, lume!” din dual ;

factorial:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

SQL nu acceptă bucle, recursivitate sau funcții definite de utilizator. Acest exemplu demonstrează o posibilă soluție folosind:

  • nivel de pseudo-coloană pentru a crea pseudo-tabele t1 și t2 care conțin numere de la 1 la 16,
  • funcția agregată sum , care vă permite să însumați elementele unei mulțimi fără a utiliza în mod explicit o buclă,
  • și funcțiile matematice ln și exp, care vă permit să înlocuiți produsul (necesar pentru a calcula factorialul) cu o sumă (furnizată de SQL).

Linia „0! = 1” nu va fi inclus în setul de rânduri rezultat, deoarece încercarea de a evalua ln(0) are ca rezultat o excepție.

numerele Fibonacci:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

SQL nu acceptă bucle sau recursivitate, iar concatenarea câmpurilor din diferite rânduri dintr-un tabel sau interogare nu este o funcție de agregare standard. Acest exemplu folosește:

  • Formula lui Binet și funcțiile matematice ROUND, POWER și SQRT pentru calcularea celui de-al n-lea număr Fibonacci;
  • nivel de pseudo-coloană pentru a crea un pseudo-tabel t1 care conține numere de la 1 la 16;
  • funcția încorporată SYS_CONNECT_BY_PATH pentru concatenarea ordonată a numerelor primite.

SELECTARE REPLACE (MAX (SYS_CONNECT_BY_PATH (fib || ", " , "/" )), "/" , "" ) || „...” fiblist FROM ( SELECT n , fib , ROW_NUMBER () OVER (ORDER BY n ) r FROM ( selectați n , rotund ((putere ((1 + sqrt (5 ) )) * 0 . 5 , n ) - putere ((1 - sqrt (5 )) * 0 . 5 , n )) / sqrt (5 )) fib din (selectați nivelul n din conectarea duală după nivel<= 16 ) t1 ) t2 ) START WITH r = 1 CONNECT BY PRIOR r = r - 1 ;

Salut Lume!:

Exemplu pentru versiunile 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

selectați „Bună ziua, lume!” ;

factorial:

Exemplu pentru versiunile Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Se folosește o definiție recursivă a factorial, implementată printr-o interogare recursivă. Fiecare linie de interogare conține două câmpuri numerice, n și n!, iar fiecare linie ulterioară este calculată folosind datele din cea precedentă.

Puteți calcula doar factoriali întregi până la 20!. Când încerci să calculezi 21! Apare eroarea „Eroare de depășire aritmetică”, adică. grila de biți se revarsă.

Pentru numerele reale, factorialul este 100! (Pentru a face acest lucru, în exemplu trebuie să înlocuiți bigint cu float în a treia linie)

numerele Fibonacci:

Exemplu pentru versiunile Microsoft SQL Server 2005, Microsoft SQL Server 2008 R2, Microsoft SQL Server 2012

Se folosește determinarea iterativă a numerelor Fibonacci, implementată printr-o interogare recursivă. Fiecare linie de interogare conține două numere adiacente în succesiune, iar următoarea linie este calculată ca (ultimul număr, suma numerelor) a liniei anterioare. Astfel, toate numerele, cu excepția primului și ultimului, apar de două ori, astfel încât rezultatul include doar primele numere ale fiecărei linii.

factorial:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu demonstrează utilizarea operatorului model, disponibil în Oracle 10g, care permite ca șirurile de interogări să fie tratate ca elemente de matrice. Fiecare linie conține două câmpuri - numărul liniei n și factorialul său f.

selectați n || "! = " || factorul f din modelul dual returnează toate dimensiunile rândurilor prin (0 d) măsuri (0 f, 1 n) reguli iterate (17) (f [număr_iterație] = decodificare (număr_iterație, 0, 1, f [număr_iterație - 1] * număr_iterație) , n [ iteration_number ] = iteration_number );

numerele Fibonacci:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu demonstrează utilizarea operatorului model, disponibil în Oracle 10g, care permite ca șirurile de interogări să fie tratate ca elemente de matrice. Fiecare linie conține două câmpuri - numărul Fibonacci însuși și concatenarea tuturor numerelor mai mici sau egale cu acesta. Concatenarea iterativă a numerelor în aceeași interogare care le generează este mai ușoară și mai rapidă decât agregarea ca operație separată.

selectați max(uri) || ", ..." din (selectați s din modelul dual returnează toate dimensiunile rândurilor cu ( 0 d ) măsuri ( turn ( " " ca varchar2 (200 )) s , 0 f ) reguli iterate ( 16 ) ( f [ iterație_număr ] = decode (număr_iterație, 0, 1, 1, 1, f [număr_iterație - 1] + f [număr_iterație - 2]), s [număr_iterație] = decode (număr_iterație, 0, to_char (f [număr_iterație - [iterație]),_număr 1 ] || ", " || to_char (f [ iteration_number ])) ) );

factorial:

Exemplu pentru versiunile MySQL 5

selectați concat (cast (t2 . n ca char ), "!= " , cast ( exp (suma (log (t1 . n ))) ca char )) din ( selectați @ i : = @ i + 1 AS n din TABLE , (selectați @ i : = 0 ) ca limită sel1 16 ) t1 , ( selectați @ j : = @ j + 1 AS n din TABEL , (selectați @ j : = 0 ) ca limită sel1 16 ) t2 unde t1 . n<= t2 . n group by t2 . n

numerele Fibonacci:

Exemplu pentru versiunile MySQL 5

Înlocuiți TABLE cu orice tabel pe care îl puteți accesa, cum ar fi mysql.help_topic .

selectați concat (group_concat (f separator ", " ), ", ..." ) din (selectați @ f : = @ i + @ j ca f , @ i : = @ j , @ j : = @ f din TABLE , (selectați @ i : = 1 , @ j : = 0 ) sel1 limită 16 ) t

Salut Lume!:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu folosește un bloc PL/SQL anonim care imprimă un mesaj la ieșirea standard folosind pachetul dbms_output.

începe dbms_output . put_line("Bună, lume!"); Sfârşit ;

factorial:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu demonstrează calculul iterativ al factorial folosind PL/SQL.

declara n număr := 0 ; număr f := 1 ; începe în timp ce (n<= 16 ) loop dbms_output . put_line (n || "! = " || f ); n : = n + 1 ; f : = f * n ; end loop ; end ;

numerele Fibonacci:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu folosește determinarea iterativă a numerelor Fibonacci. Numerele deja calculate sunt stocate într-o structură de date varray - un analog al unui tablou.

vectorul tip declara este varray (16) de număr; vector fib := vector(); i număr; s varchar2(100); începe fib . extinde(16); fib (1) := 1; fib (2) := 1; s : = fib (1 ) || ", " || fib(2) || ", "; pentru i în 3 .. 16 buclă fib (i) : = fib (i - 1) + fib (i - 2); s := s || fib(i) || ", "; buclă de capăt; dbms_output. put_line (s || "..." ); Sfârşit ;

Ecuația pătratică:

Exemplu pentru versiunile Oracle 10g SQL, Oracle 11g SQL

Acest exemplu a fost testat în SQL*Plus, TOAD și PL/SQL Developer.

Pure SQL vă permite să introduceți variabile în timpul execuției interogării sub formă de variabile înlocuibile. Pentru a defini o astfel de variabilă, numele ei (în acest caz, A, B și C) trebuie folosit cu ampersand și în fața ei ori de câte ori variabila trebuie să fie referită. Când se execută o interogare, utilizatorului i se solicită să introducă valorile tuturor variabilelor de înlocuire utilizate în interogare. Odată introduse valorile, fiecare referință la o astfel de variabilă este înlocuită cu valoarea acesteia, iar cererea rezultată este executată.

Există mai multe moduri de a introduce valori pentru variabilele de înlocuire. În acest exemplu, prima referință la fiecare variabilă este precedată de un ampersand dublu && în loc de un singur ampersand. În acest fel, valoarea pentru fiecare variabilă este introdusă o singură dată, iar toate referințele ulterioare la aceasta vor fi înlocuite cu aceeași valoare (atunci când se utilizează un singur și în SQL*Plus, valoarea pentru fiecare referință la aceeași variabilă trebuie introdusă separat ). În PL/SQL Developer, toate referințele la variabile trebuie să fie precedate de un singur caracter &, altfel va apărea o eroare ORA-01008 „Nu toate variabilele sunt legate”.

Prima linie a exemplului specifică caracterul pentru separatorul zecimal, care este utilizat la convertirea numerelor rădăcină în șiruri.

Cererea în sine constă din patru cereri diferite. Fiecare interogare returnează un șir care conține rezultatul calculului într-unul dintre cazuri (A=0, D=0, D>0 și D<0) и ничего — в трех остальных случаях. Результаты всех четырех запросов объединяются, чтобы получить окончательный результат.

modificare sesiunea set NLS_NUMERIC_CHARACTERS = "." ; selectați „Nu este o ecuație pătratică”. și de la dual unde && A = 0 unire selectați "x = " || to_char (-&& B / 2 /& A ) din dual unde & A != 0 și & B *& B - 4 *& A *&& C = 0 unire selectează "x1 = " || to_char ((-& B + sqrt (& B *& B - 4 *& A *& C )) / 2 /& A ) || ", x2 = " || to_char (-& B - sqrt (& B *& B - 4 *& A *& C )) / 2 /& A din dual unde & A != 0 și & B *& B - 4 *& A *& C > 0 unire selectați „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 ) || ")" din dual unde & A != 0 și & B *& B - 4 *& A *& C< 0 ;

Cele mai bune articole pe această temă