Introducere în MS SQL Server și T-SQL

Calcul relațional pe domenii

Calcul relațional pe tupluri

Expresiile din calculul relațional pe tupluri au forma:

(S | F(S)), Unde S– variabilă tuplu, F-formula.

Exemplu: toți agenții de vânzări care primesc un salariu mai mare de 10.000

(S | Vânzări(S) și S.Salariu>10000)

Formulele pot fi construite folosind operatii logice operații de conjuncție, disjuncție, negație și comparație. Se folosesc cuantificatori ai existenței și universalității, de exemplu:

Selectați toate tranzacțiile lui Ivanov:

(S | Tranzacții(S) și (B)(Vânzători(B) și B.N = S.N_Vânzător și B.Nume=’Ivanov’))

Expresia arată astfel: (d1, d2,…,dn | F(d1,d2,…, dm)); m>=n, Unde d1...dmdomeniul de aplicare variabil definiţii (domeniu). F– o formulă care poate fi o relație sau o expresie de comparație.

Exemplu: găsiți numerele și numele tuturor agenților de vânzări al căror salariu este > 10.000.

(N, Nume | (Oraș, Departament, N_Șef)(Vânzări(N, Nume, Departament, Oraș, Salariu, N_Șef)& (Salariu>10000)))

D/Z 5. Pentru exemplul unei baze de date relaționale din D/Z 4, dați exemple de toate operațiile, scrieți cererea în formele de calcul relațional pe tupluri și pe domenii.

Întrebări de autotest:

1. Care dintre cele trei fundamente matematice necesită programare procedurală (adică programare cu obținerea pas cu pas a rezultatelor) și ce necesită programare declarativă (adică o descriere a rezultatului dorit)?

Limbajul SQL (Structure Query Language) este un limbaj declarativ pentru lucrul cu baze de date relaționale, bazat pe calcul relațional pe tupluri. Natura declarativă a limbajului constă în faptul că, spre deosebire de limbajele imperative (de exemplu, C++), programatorul nu scrie o secvență de acțiuni pentru a obține rezultatul de care are nevoie, ci descrie rezultatul dorit. SGBD-ul însuși selectează un algoritm pentru găsirea rezultatului pe baza descrierii acestuia.

Limbajul SQL este format din trei sublimbaje, care sunt descrise în Tabel. 8:

Masă 8. Sublimbaje ale limbajului SQL

Operatorii pentru definirea și gestionarea datelor sunt simpli, adesea ascunși dezvoltatorului dacă folosește vrăjitori la crearea unei baze de date. Considerarea lor depășește scopul acestei cărți. Toată bogăția limbajului SQL constă în Selectați operatorul, care este utilizat cu operatorii auxiliari din tabel. 9.

Masă 9. Operatori auxiliari pentru Select

Grup de operatori Descrierea operatorilor
Tipul eșantionului Toate – selectați toate înregistrările Distinct – selectați înregistrările, eliminând duplicatele
Selectare, sortare și grupare ordonare după – sortarea în ordine crescătoare sau descrescătoare, Unde – selecția înregistrărilor, grupare după – grupare, având – selecția grupurilor, alăturare… pe – diverse tipuriîmbinări de masă
Operatori de comparație și operatori logici =, <>, >, <, >=, <= - операторы сравнения, Or, Аnd, Not – логические И, ИЛИ, отрицание, is null – проверка на (не)пустое значение in, between, like, starting,containing – операторы примерного совпадения полей строковых типов.
Operatori de agregare Count – numărarea numărului de rânduri, Sum – sum, Avg – valoare medie, Min – valoare minimă, Max – valoare maximă.
Cuantificatori Oricare - orice, Toate - totul, Singular - singurul, Există - există.
Setați operațiuni Unire – unire, Intersect – intersecție, Cu excepția – diferență.

Sintaxa instrucțiunii Select este complexă, o vom privi cu exemple de la simplu la complex, acordând atenție erorilor tipice pe care le întâlnește un programator SQL începător.

Introducere în SQL

Primele limbaje de interogare pentru bazele de date relaționale au apărut în anii 70. La acel moment, existau mai multe limbaje diferite de interogare, ceea ce a cauzat unele inconveniente pentru furnizorii SULD. Predecesorul imediat al limbajului SQL a fost limbajul SEQUEL.

Standardul limbajului SQL se extinde constant, așa că acum există mai multe opțiuni aprobate oficial:

1. SQL-89, prima versiune incompletă, practica a arătat rapid că trebuie extins.

2. SQL-92 (sau SQL-2), o versiune semnificativ extinsă, multe SGBD-uri garantează acum suport complet pentru SQL-2 și suport parțial pentru standardele ulterioare;

3. SQL-99, au fost introduse mai multe extensii.

4. SQL-2003, cea mai completă versiune a standardului, care ia în considerare multe soluții care au fost deja implementate de dezvoltatorii SGBD și au devenit un standard de facto (de exemplu, obiectul secvență, care a fost folosit de mult timp în unele SGBD-uri, de exemplu, Oracle, au fost standardizate, aproape toate tipurile încorporate au fost date standardizate utilizate în diferite SGBD-uri).

Standardul SQL-2003 conține destul de multe comenzi care acoperă diverse aspecte ale funcționării IS și sunt împărțite în 7 clase de comenzi. Cu toate acestea, baza limbajului SQL este alcătuită din două clase de comenzi, care sunt denumite în mod obișnuit limbaje: limbajul de definire a datelor și limbajul de manipulare a datelor. În original - DDL (limbaj de definire a datelor) și DML (limbaj de manipulare a datelor).

În acest modul de instruire vom lua în considerare doar aceste două clase (DDL și DML). Clasele rămase, care în standardul SQL-92 sunt numite colectiv „limbaj de control al datelor” (DCL), vor fi parțial discutate în următorul modul de instruire.

Când prezentăm materialul, ne vom concentra pe standardul SQL 2003, dar trebuie să ținem cont de faptul că comenzile pe care trebuie să le studiem au rămas practic neschimbate de la SQL-92.

Producătorii DBMS, deși susțin în general standardul SQL, uneori permit modificări minore de sintaxă în comenzile individuale. Aproape toate SGBD-urile conțin una sau alta extensie a limbajului SQL. Prin urmare, învățarea limbajului SQL fără a fi legată de vreun SGBD specific este posibilă doar teoretic. Deoarece scopul acestui modul este de a obține competențe (adică capacitatea de a aplica cunoștințele dobândite în practică), este necesar să ne concentrăm pe un SGBD specific care va fi folosit pentru a depana exemplele demonstrative și sarcinile practice ale modulului.

Oracle, cel mai răspândit pe piața mondială, a fost ales ca atare DBMS. În dialectul SQL pentru Oracle DBMS, abaterile de la standard sunt minime. Exemplele din acest capitol au fost depanate folosind utilitarul de consolă client SQL *Plus pe un server Oracle 10g.

Oriunde în descrierea comenzilor unde există chiar și o ușoară abatere a sintaxei Oracle de la standardul SQL 2003, aceasta va fi notă separat. Având în vedere utilizarea pe scară largă a unor astfel de SGBD-uri precum Microsoft SQL Server, MySQL și o serie de altele, caracteristicile acestor SGBD-uri vor fi uneori discutate.

Formatul de înregistrare a instrucțiunilor SQL este gratuit. Oriunde există un spațiu sau semn de punctuație, se pot introduce orice număr de spații sau linii noi. Când lucrați în utilitarul consolei SQL, *Plus folosește simbolul; (punct virgulă) ca semn al sfârșitului unei cereri - textul cererii, terminat cu punct și virgulă, este trimis imediat serverului pentru execuție. Cu toate acestea, punctul și virgulă nu face parte din comanda SQL, așa că nu va apărea în exemplele din această prelegere.

Când am descris limbajul, am constatat că este posibil să nu prezentăm sintaxa completă a fiecărei comenzi într-o formă formală (forme Backus-Naur sau diagrame de sintaxă), având în vedere concizia și simplitatea relativă a sintaxei, precum și prezența abaterilor de la standardul în dialectele limbii și variabilitatea standardului în sine și a dialectelor. Sintaxa comenzilor este descrisă informal, cu omiterea unor construcții nesemnificative, din punctul nostru de vedere, dar destul de strict:

· toate cuvintele cheie de limbă sunt scrise cu majuscule, iar numele generate de utilizatori sunt scrise cu litere mici, deși, din punctul de vedere al vocabularului limbajului SQL, diferențele în cazul caracterelor sunt nesemnificative;

· toate elementele opționale de comandă sunt cuprinse între paranteze drepte;

· în cazurile în care un spațiu poate fi interpretat ambiguu, acesta este înlocuit cu o subliniere;

· Când se omite o parte dintr-o comandă, se utilizează punctele de suspensie.

Posibilele deficiențe ale abordării informale a descrierii sunt compensate de un număr mare de exemple și comentarii verbale suplimentare.

Unele versiuni localizate ale SGBD permit utilizarea caracterelor din alfabetele naționale în numele generate de utilizatori, dar vă recomandăm să utilizați această caracteristică cu precauție extremă. Caracterele limbii cheie nu pot fi folosite ca nume (de tabele, coloane, vizualizări etc.) - cele mai multe dintre aceste erori sunt detectate în timpul compilării, dar în cazuri rare erorile pot fi imprevizibile, mai ales când se folosesc caractere din alfabetele naționale.

SQL (Structured Query Language) este o abreviere pentru un limbaj de interogare structurat care oferă instrumente pentru crearea și procesarea datelor în baze de date relaționale. Independența față de specificul tehnologiei informatice, precum și suportul SQL de către liderii din industrie în domeniul tehnologiei bazelor de date relaționale, l-au făcut principalul limbaj standard al bazelor de date.

Toate limbajele de manipulare a datelor create înainte de apariția bazelor de date relaționale, dezvoltate pentru multe SGBD, 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 în cauză este axat pe operațiunile de date. prezentate sub forma unor seturi de tabele de relaţii interconectate logic. Cea mai importantă trăsătură a structurilor acestui limbaj este concentrarea sa pe rezultatul final al prelucrării datelor, și nu pe procedura acestei prelucrări. SQL însuși determină unde sunt datele, indexurile și chiar care este cea mai eficientă secvență de operații care trebuie utilizată pentru a obține rezultatul, deci nu trebuie să specificați aceste detalii în interogarea bazei de date.

Apariția teoriei bazelor de date relaționale a dat impuls dezvoltării unui număr de limbaje de interogare, care pot fi clasificate în două clase:

limbaje algebrice care permit exprimarea interogărilor folosind operatori specializați aplicați relațiilor;

limbaje de calcul predicat, care sunt un set de reguli pentru scrierea unei expresii care definește o nouă relație dintr-un set dat de relații existente. Prin urmare, calculul predicat este o metodă de determinare a relației care se dorește a fi obținută ca răspuns la o interogare din relațiile deja existente în baza de date.

În 1987, SQL a devenit standardul de limbaj pentru SGBD-urile relaționale profesionale și a început să fie implementat în toate sistemele comune. Acest lucru se datorează unui număr dintre următoarele puncte. Creșterea constantă a performanței, precum și scăderea consumului de energie, a dimensiunii și a costului calculatoarelor au dus la o extindere bruscă a posibilelor piețe pentru vânzările acestora, gama de utilizatori, varietatea tipurilor și prețurilor. Desigur, cererea pentru o varietate de software a crescut. În lupta pentru cumpărători, companiile de software au început să lanseze pe piață sisteme software din ce în ce mai inteligente și, prin urmare, voluminoase. Prin achiziționarea lor. multe organizații și utilizatori individuali nu le-au putut plasa adesea pe propriile computere. Pentru a face schimb de informații și a le disemina, s-au creat rețele de calculatoare, unde programe de generalizare și date au început să fie plasate pe servere speciale de fișiere.


SGBD-urile care lucrează cu servere de fișiere permit mai multor utilizatori de diferite computere situate destul de departe unul de celălalt să acceseze aceleași baze de date. În același timp, simplifică dezvoltarea diverselor sisteme de management automatizate pentru organizații, complexe educaționale, informații și alte sisteme în care mulți angajați sau studenți trebuie să utilizeze date comune și să facă schimb de informații create în procesul de lucru. 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 o cerere simplă, este necesar să citiți fișiere întregi de pe serverul de fișiere sau să scrieți pe server, iar acest lucru duce la situații de conflict și aglomerare a rețelei Pentru a elimina cele de mai sus Din cauza neajunsurilor, a fost propusă tehnologia client/server, totuși a fost nevoie de un limbaj unificat de comunicare cu serverul - iar ca acest limbaj a fost ales SQL.

Implementarea conceptului de operații axat pe reprezentarea tabelară a datelor în SQL a făcut posibilă crearea unui limbaj compact cu un set mic de clauze. SQL poate fi folosit atât pentru a executa interogări, cât și pentru a construi programe de aplicație. Acesta conține:

propuneri de definire a datelor - definirea bazei de date, precum și definirea și distrugerea de tabele și indici;

cereri de selectare a datelor - clauza SELECT;

propuneri de modificare a datelor - adăugarea, ștergerea și modificarea datelor;

propuneri de gestionare a datelor - acordarea și revocarea privilegiilor de acces la date, gestionarea tranzacțiilor și altele.

Pe lângă asta. SQL oferă capacitatea de a face în aceste clauze:

Calcule aritmetice, inclusiv diverse transformări funcționale, procesarea șirurilor de text și efectuarea de operații de comparare a valorilor expresiilor și textelor aritmetice;

Aranjarea rândurilor sau coloanelor la afișarea conținutului tabelelor pe tipărire sau pe un ecran de afișare;

Crearea de vizualizări care permit utilizatorilor să interpreteze datele fără a crește volumul acestora în baza de date;

Salvarea conținutului unui tabel, a mai multor tabele sau a unei vizualizări afișate la cerere într-un alt tabel;

Gruparea datelor și aplicarea unor operații la aceste grupuri, cum ar fi medie, sumă, maxim, minim, număr de elemente etc.

Standardul SQL este definit de ANSI (American National Standards Institute) și este în prezent adoptat și de ISQ (International Standards Organization). Cu toate acestea, majoritatea programelor comerciale de baze de date extind SQL fără notificare ANSI, adăugând diferite alte caracteristici la limbaj care cred că le va fi foarte util. Uneori, acest lucru încalcă oarecum standardul limbii, deși ideile bune tind să evolueze și să devină în curând standarde.

Limbajul SQL este baza multor SGBD-uri, deoarece este responsabil pentru structurarea fizică și scrierea datelor pe disc, precum și pentru citirea fizică a datelor de pe disc și îi permite să accepte interogări SQL de la alte componente DBMS și aplicații utilizator. Astfel, SQL este un instrument puternic care oferă utilizatorilor, programelor și sistemelor de calcul acces la informațiile conținute în bazele de date relaționale.

Principalele avantaje ale limbajului SQL sunt următoarele:

Standarditatea limbajului SQL - așa cum sa menționat deja, utilizarea sa în programe este standardizată de organizațiile internaționale;

Independență față de anumite SGBD - toate SGBD-urile comune folosesc SQL, deoarece o bază de date relațională și programele care funcționează cu ea pot fi transferate de la un SGBD la altul cu modificări minime;

Posibilitate de transfer de la un sistem informatic la altul - SGBD-ul poate fi vizat către diferite sisteme informatice, cu toate acestea, aplicațiile create folosind SQL pot fi folosite atât pentru baze de date locale, cât și pentru sisteme mari multi-utilizator;

Baza relațională a limbajului - SQL este un limbaj de baze de date relaționale, așa că a devenit popular atunci când modelul de reprezentare a datelor relaționale a devenit popular. Structura tabulară a unei baze de date relaționale este bine înțeleasă, astfel încât limbajul SQL este simplu și ușor de învățat;

Capacitatea de a crea interogări interactive - SQL oferă utilizatorilor acces imediat la date, în timp ce interactiv puteți obține rezultatul interogării într-un timp foarte scurt fără a scrie un program complex capacitatea de a accesa baza de date în mod programatic - limbajul SQL poate fi; ușor de utilizat în aplicațiile care trebuie să acceseze baza de date. Aceleași instrucțiuni SQL sunt utilizate atât pentru accesul interactiv, cât și pentru acces programatic, astfel încât părți ale programelor care conțin apeluri la baze de date pot fi mai întâi testate interactiv și apoi încorporate în program;

Furnizarea de vizualizări diferite ale datelor - folosind SQL, puteți furniza o structură de date astfel încât un anumit utilizator să vadă vederi diferite ale datelor. În plus, datele din diferite părți ale bazei de date pot fi combinate și prezentate utilizatorului sub forma unui tabel simplu, ceea ce înseamnă că vizualizările pot fi utilizate pentru a îmbunătăți securitatea bazei de date și pentru a o personaliza la cerințele specifice ale utilizatorilor individuali. ;

Abilitatea de a schimba și extinde în mod dinamic structura bazei de date - limbajul SQL vă permite să manipulați structura bazei de date chiar și în timp ce accesați conținutul. Acesta este un mare avantaj față de limbajele statice de definire a datelor, care refuză accesul la baza de date în timp ce structura acesteia este modificată. Astfel, SQL oferă flexibilitate în ceea ce privește adaptarea bazei de date la cerințele în schimbare ale domeniului fără a întrerupe funcționarea în timp real a aplicației;

Suport pentru arhitectura client/server - SQL este unul dintre cele mai bune instrumente pentru implementarea aplicațiilor pe platforma client/server. În același timp, SQL servește ca o legătură între sistemul client, care interacționează cu utilizatorul, și sistemul server, care gestionează baza de date, permițând fiecăruia să se concentreze pe îndeplinirea funcțiilor sale directe.

Trebuie spus că, deși SQL a fost intenționat să fie un instrument pentru utilizatorul final, în cele din urmă a devenit atât de complex încât a devenit o unealtă de programator. Crearea aplicațiilor de procesare a datelor folosind SQL este discutată la sfârșitul acestui capitol.

SQL definește două subseturi ale limbajului:

· SQL-DDL(Data Definition Language) - un limbaj pentru definirea structurilor și a constrângerilor de integritate ale bazelor de date. Acestea includ comenzi pentru crearea și ștergerea bazelor de date; crearea, modificarea și ștergerea tabelelor; managementul utilizatorilor etc.

· SQL-DML(Data Manipulation Language) - limbaj de manipulare a datelor: adăugarea, modificarea, ștergerea și preluarea datelor, gestionarea tranzacțiilor

Aceasta nu este o descriere riguroasă a tuturor caracteristicilor SQL-92. În primul rând, niciun DBMS nu le acceptă pe deplin și, în al doilea rând, furnizorii de DBMS oferă adesea propriile extensii SQL care sunt incompatibile între ele. Prin urmare, luăm în considerare un anumit subset al limbii, care oferă o idee generală despre specificul și capacitățile sale. În același timp, acest subset este suficient pentru a începe să lucreze independent cu orice SGBD. O revizuire mai formală (și mai completă) a standardelor SQL este făcută în articolul lui S. D. Kuznetsov „Standarde ale limbajului bazei de date relaționale SQL: o scurtă prezentare”, revista DBMS N 2, 1996. Puteți face cunoștință cu traducerea rusă a standardul SQL pe serverul Centrului de Tehnologia Informației, o descriere comparativă a diferitelor versiuni ale limbajului (pentru DBMS Sybase SQL Server, Sybase SQL Anywhere, Microsoft SQL Server, Informix, Oracle Server) este dată în cartea lui J. Bowman , S. Emerson, M. Darnovsky „Un ghid practic pentru SQL”, Kiev, Dialectika, 1997.

De asemenea, trebuie remarcat faptul că, spre deosebire de terminologia „teoretică” folosită pentru a descrie modelul relațional ( relație, atribut, tuplu), în literatura de specialitate, atunci când se descrie SQL, se folosește adesea terminologia „practic” (respectiv - tabel, coloană, rând). Aici urmam aceasta traditie.

Toate exemplele sunt construite în raport cu baza de date publicații, conținând informații despre publicații (atât tipărite, cât și electronice) legate de tema acestui curs. Structura acestei baze de date poate fi vizualizată aici, designul acesteia este descris în secțiunea 5.4, accesul la ea pentru exerciții practice poate fi obținut prin Internet folosind SGBD Leap (algebră relațională) sau SGBD PostgreSQL. (limbaj SQL).

limbaj structurat cereri. Acest limbaj face posibilă crearea, editarea și ștergerea informațiilor stocate în baze de date, crearea de noi baze de date și multe altele. SQL este un standard ANSI (American National Standards Institute) și ISO (International Organization for Standardization).

Puțină istorie

Primul standard internațional pentru limbajul SQL a fost adoptat în 1989, adesea denumit SQL/89. Printre dezavantajele acestui standard, cel mai notabil este că a specificat multe proprietăți importante ca fiind definite de implementare. Acest lucru a dus la multe discrepanțe în implementări ale limbajului de diferiți producători. Au existat, de asemenea, plângeri cu privire la lipsa de referință a standardului la aspectele practice ale limbajului, cum ar fi integrarea acestuia în limbajul de programare C.

Următorul standard internațional pentru limbajul SQL a fost adoptat la sfârșitul anului 1992 și a devenit cunoscut sub numele de SQL/92. S-a dovedit a fi mult mai precis și complet decât SQL/89, deși nu a fost lipsit de deficiențele sale. În prezent, majoritatea sistemelor implementează acest standard aproape complet. Cu toate acestea, după cum știți, progresul nu poate fi oprit și în 1999 a apărut un nou standard SQL:1999, cunoscut și sub numele de SQL3. SQL3 este caracterizat ca „SQL orientat pe obiecte” și stă la baza mai multor sisteme de gestionare a bazelor de date obiect-relaționale (de exemplu, Oracle's ORACLE8, Informix's Universal Server și IBM's DB2 Universal Database). Acest standard nu este doar o fuziune a SQL-92 și a tehnologiei obiect. Conține o serie de extensii la SQL tradițional și este conceput pentru a facilita eforturile viitoare de standardizare.

MySQL este SQL92 entry-level, conține mai multe extensii la acel standard și se străduiește să susțină pe deplin standardul ANSI SQL99 fără a compromite viteza și calitatea codului.

Operatori SQL de bază

Funcțiile oricărui SGBD includ:

  1. crearea, ștergerea, modificarea unei baze de date (DB);
  2. adăugarea, modificarea, ștergerea, atribuirea de drepturi de utilizator;
  3. introducerea, ștergerea și modificarea datelor din baza de date (tabele și înregistrări);
  4. preluarea datelor din baza de date.

Doar administratorii SGBD sau utilizatorii privilegiați au acces la primele două funcții. Să ne uităm la cum sunt rezolvate ultimele două probleme (de fapt, sunt șapte probleme).

Înainte de a face ceva cu datele, trebuie să creați tabele în care vor fi stocate aceste date, să aflați cum să modificați structura acestor tabele și să le ștergeți dacă este necesar. În acest scop, există operatori în limbaj SQL CREAȚI TABEL, ALTER TABLEŞi DROP TABLE.

Instrucțiunea CREATE TABLE

Operator CREAȚI TABEL creează un tabel cu numele dat în baza de date curentă. Regulile pentru numele de tabel valide sunt date în documentație. Dacă nu există o bază de date activă sau tabelul specificat există deja, comanda va eșua.

În MySQL versiunea 3.22 și mai târziu, numele tabelului poate fi specificat ca nume_bază de date.nume_tabel. Această formă de intrare funcționează indiferent dacă baza de date specificată este actuală.

În MySQL 3.23, puteți utiliza cuvântul cheie atunci când creați un tabel TEMPORAR. Tabelul temporar este șters automat la sfârșitul conexiunii, iar numele său este valabil doar pe durata conexiunii. Aceasta înseamnă că două conexiuni diferite pot folosi tabele temporare cu același nume fără a intra în conflict între ele sau cu un tabel existent cu același nume (tabelul existent este ascuns până când tabelul temporar este șters). În MySQL 4.0.2, trebuie să aveți privilegii CREATE pentru a crea tabele temporare TABELE TEMPORARE.

În MySQL 3.23 și versiunile ulterioare, puteți utiliza cuvintele cheie IF NOT EXISTS pentru a preveni o eroare dacă tabelul specificat există deja. Vă rugăm să rețineți că identitatea structurilor acestor tabele nu este verificată.

Fiecare tabel este reprezentat de un set de fișiere specifice în directorul bazei de date.

Sintaxă

CREATE TABLE nume_tabel [(definiție_coloană,...)] [opțiuni_tabel]

În exprimare definiție_coloană enumerați ce coloane trebuie create în tabel. Fiecare coloană a tabelului poate fi goală (NULL), poate avea o valoare implicită, poate fi o cheie sau se poate incrementa automat. În plus, pentru fiecare coloană trebuie indicat tipul de date care vor fi stocate în ea. Dacă nu este specificat nici NULL, nici NOT NULL, atunci coloana este interpretată ca și cum ar fi specificat NULL. Dacă un câmp este marcat ca auto-increment (AUTO_INCREMENT), atunci valoarea acestuia este mărită automat cu unu de fiecare dată când date sunt adăugate în tabel și o valoare goală (NULL, adică nu este scris nimic) sau 0 este scris în acest câmp. Într-un tabel poate exista o singură incrementare automată și trebuie indexată. Secvența AUTO_INCREMENT începe la 1. Prezența incrementării automate este una dintre caracteristicile MySQL. Formal, descrierea coloanei (column_definition) arată astfel:

tipul nume_coloană

Tipul de coloană (tip în expresia column_definition) poate fi unul dintre următoarele:

  • întreg: INT[(lungime)] [ UNSIGNED ]
  • valabil: REAL[(lungime,zecimale)] [ NESEMNAT ]
  • caracter: CHAR(lungime) și VARCHAR(lungime)
  • data și ora: DATA și ORA
  • pentru lucrul cu obiecte mari: BLOB
  • text: TEXT
  • set enumerabil: ENUM (valoare1,valoare2,valoare3,...)și SET(valoare1,valoare2,valoare3,...)

Pentru o listă completă de tipuri, consultați documentația

În cele două articole anterioare din această serie, publicate în numerele 6 și 7 ale revistei noastre, am analizat diferite mecanisme de acces la date, inclusiv ADO, BDE și alternativele acestora. Acum știm cum să alegem o tehnologie de acces la date pentru o anumită pereche „DBMS - instrument de dezvoltare”.

Cu tehnologia de acces la date, ne putem gândi în sfârșit la modul în care datele și metadatele în sine ar trebui manipulate. Metodele de manipulare pot fi specifice unui anumit SGBD (de exemplu, utilizarea obiectelor din partea client a acestui SGBD pentru a accesa obiectele bazei de date) sau unui anumit mecanism de acces la date. Cu toate acestea, există o modalitate mai mult sau mai puțin universală de manipulare a datelor, susținută de aproape toate SGBD-urile relaționale cu server și de majoritatea mecanismelor universale de acces la date (inclusiv atunci când sunt utilizate împreună cu SGBD-urile desktop). Această metodă este de a utiliza limbajul SQL (Structured Query Language). Mai jos vom analiza scopul și caracteristicile acestui limbaj și, de asemenea, vom învăța cum să îl folosim pentru a extrage și a rezuma date, a adăuga, șterge și modifica înregistrări, a proteja datele de accesul neautorizat și a crea baze de date. Pentru un studiu mai detaliat al SQL, vă putem recomanda cărțile lui Martin Graber „Introduction to SQL” (M., Laurie, 1996) și „SQL. Ghid de referință” (M., Lori, 1997).

Introducere

Structured Query Language este un limbaj non-procedural utilizat pentru gestionarea datelor în SGBD-urile relaționale. Termenul „non-procedural” înseamnă că o anumită limbă poate formula ceea ce trebuie făcut cu datele, dar nu poate instrui cum exact ar trebui făcut. Cu alte cuvinte, acest limbaj nu are constructe algoritmice precum etichete, operatori de buclă, salturi condiționate etc.

Limbajul SQL a fost creat la începutul anilor 70 ca urmare a unui proiect de cercetare IBM al cărui scop a fost să creeze un limbaj pentru manipularea datelor relaționale. Inițial a fost numit SEQUEL (Structured English Query Language), apoi SEQUEL/2 și apoi pur și simplu SQL. Standardul oficial SQL a fost publicat de ANSI (American National Standards Institute, SUA) în 1986 (aceasta este cea mai utilizată implementare a SQL în prezent). Acest standard a fost extins în 1989 și 1992, așa că cel mai recent standard SQL se numește SQL92. În prezent se lucrează la standardul SQL3, care conține unele extensii orientate pe obiecte.

Există trei niveluri de conformitate ANSI - Începător, Intermediar și Complet. Mulți furnizori de SGBD de server, precum IBM, Informix, Microsoft, Oracle și Sybase, folosesc propriile implementări SQL bazate pe standardul ANSI (întâlnind cel puțin nivelul inițial de conformitate cu standardul) și care conțin unele extensii specifice SGBD.

Informații mai detaliate despre conformitatea versiunii de SQL utilizate într-un anumit SGBD pot fi găsite în documentația furnizată cu acel SGBD.

Cum funcționează SQL

Să vedem cum funcționează SQL. Să presupunem că există o bază de date gestionată folosind un fel de SGBD. Pentru a extrage date din acesta, se folosește o interogare formulată în SQL. SGBD procesează această solicitare, preia datele solicitate și le returnează. Acest proces este reprezentat schematic în Fig. 1.

După cum vom vedea mai târziu, SQL vă permite nu numai să preluați date, ci și să definiți structura datelor, să adăugați și să ștergeți date, să restricționați sau să acordați acces la date și să mențineți integritatea referențială.

Vă rugăm să rețineți că SQL în sine nu este nici un DBMS, nici un produs separat. Acesta este un limbaj folosit pentru a interacționa cu SGBD și, într-un anumit sens, este parte integrantă a acestuia.

Limbajul de definire a datelor (DDL)

Limbajul de definire a datelor conține operatori care vă permit să creați, să modificați și să distrugeți baze de date și obiecte din ele (tabele, vizualizări etc.).

Acești operatori sunt enumerați în tabel. 1.

Tabelul 1

Operator

Descriere

Folosit pentru a adăuga un nou tabel la baza de date

Folosit pentru a elimina un tabel dintr-o bază de date

Folosit pentru a schimba structura unui tabel existent

Folosit pentru a adăuga o nouă vizualizare la baza de date

Folosit pentru a crea un index pentru un anumit câmp

Folosit pentru a șterge un index existent

Folosit pentru a crea o nouă schemă în baza de date

Folosit pentru a elimina o schemă din baza de date

Folosit pentru a crea un domeniu nou

Folosit pentru a redefini un domeniu

Folosit pentru a elimina un domeniu din baza de date

Limbajul de manipulare a datelor (DML)

Limbajul de manipulare a datelor conține operatori care vă permit să selectați, să adăugați, să ștergeți și să modificați date. Rețineți că aceste declarații nu sunt necesare pentru a finaliza tranzacția în cadrul căreia sunt apelate. Declarațiile DML sunt prezentate în tabel. 2.

Tabelul 2

Instrucțiunea SELECT este uneori clasificată într-o categorie separată numită Data Query Language (DQL).

Limbajul de control al cursorului (CCL)

Instrucțiunile limbajului de control al cursorului sunt folosite pentru a defini un cursor, pentru a pregăti instrucțiuni SQL pentru execuție și alte câteva instrucțiuni. Declarațiile CCL sunt prezentate în tabel. 5.

Tabelul 5

Tabelul 1

Operator

Folosit pentru a determina cursorul pentru cerere

Folosit pentru a descrie un plan de interogare. Această declarație este o extensie SQL pentru Microsoft SQL Server 7.0. Nu este necesar să ruleze în alte SGBD. De exemplu, în cazul Oracle, trebuie folosită instrucțiunea EXPLAIN PLAN

Folosit pentru a deschide cursorul la primirea rezultatelor interogării

Folosit pentru a obține un șir din rezultatele interogării

Folosit pentru a închide cursorul

Folosit pentru a pregăti o instrucțiune SQL pentru execuție

Folosit pentru a executa instrucțiuni SQL

Folosit pentru a descrie o cerere pregătită

Toate instrucțiunile SQL au forma prezentată în Fig. 2.

Fiecare instrucțiune SQL începe cu un verb, care este un cuvânt cheie care specifică ce face instrucțiunea (SELECT, INSERT, DELETE...). Declarația conține, de asemenea, propoziții care conțin informații despre ce date sunt efectuate operațiunile. Fiecare clauză începe cu un cuvânt cheie, cum ar fi FROM, WHERE etc. Structura clauzei depinde de tipul acesteia - unele clauze conțin nume de tabel sau câmpuri, altele pot conține cuvinte cheie, constante sau expresii suplimentare.

Cum puteți executa instrucțiuni SQL?

Toate SGBD-urile server moderne (precum și multe SGBD-uri desktop populare) conțin utilitare care vă permit să executați o instrucțiune SQL și să vizualizați rezultatul acesteia. În special, partea client Oracle conține utilitarul SQL Plus, iar Microsoft SQL Server conține utilitarul SQL Query Analyzer.