SQL „pentru manechin”: ce trebuie să știe începătorii? Introducere în MS SQL Server și T-SQL

Traducere: Alexandr Pyramidin

Acest articol vă prezintă structura limbajului SQL, precum și câteva concepte generale, cum ar fi tipurile de câmpuri de date pe care le pot conține și unele dintre ambiguitățile care există în SQL. Nu trebuie să vă amintiți fiecare detaliu menționat în acest articol. Aceasta este doar o scurtă prezentare generală; sunt oferite multe detalii, astfel încât să vă puteți referi la ele mai târziu, pe măsură ce stăpâniți limba.

Cum funcționează SQL?

SQL este un limbaj conceput special pentru baze de date relaționale (RDB). Face o mare parte din munca pe care ar trebui să o faceți dacă ați folosi un limbaj de programare de uz general, cum ar fi C. Pentru a forma un RDB în C, ar trebui să începeți de la zero. Ați defini un obiect numit tabel care ar putea crește pentru a avea orice număr de rânduri și apoi ați crea proceduri incrementale pentru a insera și a prelua valori.

Dacă doriți să găsiți anumite șiruri de caractere, va trebui să urmați o procedură pas cu pas, cum ar fi următoarea:

  • Luați în considerare un rând de masă.
  • Verificați dacă acest șir este unul dintre șirurile de care aveți nevoie.
  • Dacă da, salvați-l undeva până când întregul tabel a fost verificat.
  • Verificați dacă există alte rânduri în tabel.
  • Dacă există, reveniți la pasul 1.
  • Dacă nu mai există rânduri, imprimați toate valorile stocate la pasul 3.

(Desigur, acesta nu este setul real de comenzi C, ci doar logica pașilor care ar fi incluși într-un program real.) SQL va face toate acestea pentru tine. Comenzile din SQL pot funcționa pe toate grupurile de tabele ca o singură entitate și pot procesa orice cantitate de informații extrase sau derivate din ele ca o singură unitate.

Ce face ANSI?

Așa cum am spus în introducere, standardul SQL este definit folosind codul ANSI (American National Standards Institute). SQL nu a fost inventat de ANSI. Aceasta este în esență o invenție IBM. Dar alte companii au sărit pe SQL imediat. Cel puțin o companie (Oracle) a câștigat dreptul de a comercializa produse SQL de la IBM.

După ce pe piață au apărut o serie de programe SQL concurente, ANSI a definit standardul la care ar trebui să se conformeze. (Definirea unor astfel de standarde este funcția ANSI.) Cu toate acestea, după aceasta au apărut unele probleme. Ele au apărut ca urmare a standardizării ANSI, sub forma unor restricții. Deoarece ANSI nu definește întotdeauna ceea ce este cel mai util, programele încearcă să se conformeze standardului ANSI fără a-i permite să le limiteze prea mult. Acest lucru, la rândul său, duce la inconsecvențe aleatorii. Programele de baze de date adaugă de obicei caracteristici suplimentare la ANSI SQL și adesea relaxează multe dintre restricții. Prin urmare, vor fi luate în considerare și variantele ANSI comune. Deși evident că nu putem acoperi fiecare excepție sau variație, ideile bune tind să fie adoptate și utilizate într-o varietate de programe, chiar și atunci când nu sunt definite de standardul ANSI. ANSI este un tip de standard minim și puteți face mai mult decât vă permite, deși trebuie să urmați liniile directoare ale acestuia atunci când efectuați sarcinile pe care le specifică.

SQL interactiv și imbricat

Există două SQL-uri: interactive și imbricate. În cea mai mare parte, ambele forme funcționează la fel, dar sunt folosite diferit. SQL interactiv este utilizat pentru a rula direct pe baza de date pentru a produce rezultate pentru utilizare de către client. În acest SQL - când introduceți o comandă, aceasta va fi executată imediat și puteți vedea imediat rezultatul (dacă există).

SQL imbricat constă din comenzi SQL plasate în cadrul programelor care sunt de obicei scrise într-o altă limbă (cum ar fi COBOL sau PASCAL). Acest lucru face ca astfel de programe să fie mai puternice și mai eficiente.

Cu toate acestea, permiterea acestor limbi vine cu o structură SQL și un stil de gestionare a datelor care necesită unele extensii SQL interactive. Trecerea comenzilor SQL în SQL imbricat este „fișată” pentru variabilele sau parametrii utilizați de programul în care au fost imbricate.

În această carte, vom prezenta SQL într-un mod interactiv. Acest lucru ne va oferi posibilitatea de a discuta comenzile și acțiunile lor fără a ne îngrijora cum sunt interfațate cu alte limbi. SQL interactiv este cea mai utilă formă pentru non-programatori. Tot ceea ce înveți despre SQL interactiv se aplică în general unui formular imbricat. Modificările necesare pentru utilizarea unui formular imbricat vor fi tratate în ultimul capitol al acestei cărți.

Subsecțiuni SQL

Ambele forme interactive și imbricate de SQL au numeroase părți sau subsecțiuni. Deoarece probabil veți întâlni această terminologie când citiți SQL, vom oferi câteva clarificări. Din păcate, acești termeni nu sunt utilizați universal în toate implementările. Ele sunt specificate de ANSI și sunt utile la nivel conceptual, dar majoritatea programelor SQL nu fac nimic pentru a le gestiona separat, așa că devin în esență categorii funcționale de comenzi SQL.

  • DDL (Data Definition Language) - numit Schema Description Language în ANSI - constă din comenzi care creează obiecte (tabele, indexuri, vizualizări și așa mai departe) într-o bază de date.
  • DML (Data Manipulation Language) este un set de comenzi care determină ce valori sunt reprezentate în tabele la un moment dat.
  • DCD (Data Control Language) constă în instrumente care determină dacă să permită unui utilizator să efectueze sau nu anumite acțiuni. Ele fac parte din ANSI DDL.

Nu uitați aceste nume. Acestea nu sunt limbi diferite, ci secțiuni de comenzi SQL grupate după funcțiile lor.

Diverse tipuri de date

Nu toate tipurile de valori care pot fi găsite în câmpurile de tabel sunt logic aceleași. Cea mai evidentă diferență este între numere și text. Nu puteți pune numerele în ordine alfabetică sau nu puteți scădea un nume din altul.

Deoarece sistemele DDB se bazează pe relații între informații, diferitele tipuri de date trebuie diferențiate unele de altele, astfel încât să se poată face procese și comparații adecvate între ele. În SQL, acest lucru se realizează atribuind fiecărui câmp un tip de date care indică tipul de valoare pe care câmpul îl poate deține. Toate valorile din acest câmp trebuie să fie de același tip. În tabelul Clienți, de exemplu, cname și oraș conțin linii de text de evaluat, iar snum și cnum sunt numere. Din acest motiv, nu puteți introduce o valoare Cea mai mare sau o valoare Nici unul în câmpul de evaluare, care este un tip de date numerice. Această constrângere este bună, deoarece impune o anumită structură datelor dvs. Veți compara adesea unele sau toate valorile dintr-un anumit câmp, așa că este posibil să doriți să efectuați o acțiune numai pe anumite rânduri, mai degrabă decât pe toate. Nu ați putea face acest lucru dacă valorile câmpului au fost de tip mixt de date.

Din păcate, definirea acestor tipuri de date este un domeniu major în care majoritatea programelor de baze de date comerciale și standardul oficial SQL nu sunt întotdeauna de acord. Standardul ANSI SQL recunoaște doar textul și numărul, în timp ce majoritatea programelor comerciale folosesc alte tipuri speciale. Precum DATE și TIME sunt, de fapt, tipuri aproape standard (deși formatul lor exact variază). Unele pachete acceptă și tipuri precum MONEY și BINARY. (MONEY este un sistem special de „monedă” folosit de computere.)

Toate informațiile dintr-un computer sunt transmise în numere binare și apoi convertite în alte sisteme, astfel încât să le putem folosi și înțelege cu ușurință.

ANSI definește mai multe tipuri numerice, diferențele dintre care sunt destul de subtile și uneori confuze. Tipurile de date ANSI permise sunt enumerate în Anexa B. Complexitatea tipurilor numerice ANSI poate fi atribuită, cel puțin parțial, efortului de a face SQL imbricat compatibil cu o serie de alte limbaje. Cele două tipuri de numere ANSI, INTEGER și DECIMAL (care pot fi abreviate ca INT și, respectiv, DEC), vor fi adecvate pentru scopurile noastre, precum și pentru cele mai multe aplicații practice de afaceri. Desigur, tipul INTEGER poate fi reprezentat ca un NUMĂR DECIMAL, care nu conține nicio cifră la dreapta punctului zecimal.

Tipul de text este CHAR (sau CHAR), referindu-se la un șir de text. Un câmp CHAR are o lungime determinată de numărul maxim de caractere care pot fi introduse în câmp. Majoritatea implementărilor au, de asemenea, un tip non-standard numit VARCHAR, care este un șir de text și poate avea orice lungime până la un maxim definit de implementare (de obicei 254 de caractere). Valorile CHARACTER și VARCHAR sunt incluse între ghilimele simple ca „text”. Diferența dintre CHAR și VARCHAR este că CHAR trebuie să rezerve suficientă memorie pentru lungimea maximă a șirului, în timp ce VARCHAR alocă memorie după cum este necesar.

Tipurile de caractere constau din toate caracterele imprimabile, inclusiv numerele. Cu toate acestea, numărul 1 nu este același cu simbolul „1”. Caracterul „1” este doar o bucată de text tipărită, nedefinită de sistem ca valoare numerică 1. De exemplu, 1 + 1 = 2, dar „1” + „1” nu este egal cu „2”. Valorile caracterelor sunt stocate în computer ca valori binare, dar sunt afișate utilizatorului ca text tipărit.

Conversia se face într-un format determinat de sistemul pe care îl utilizați. Acest format de conversie va fi unul dintre cele două tipuri standard (eventual cu extensii) utilizate în sistemele informatice: codul ASCII (utilizat în toate computerele personale și mici) și codul EBCDIC (Extended Binary Decimal Information Interchange Code) (utilizat în computerele mari). Anumite operații, cum ar fi alfabetizarea valorilor câmpurilor, se vor schimba odată cu formatul.

Trebuie să urmărim piața, nu ANSI, în utilizarea tipului DATE. (Pe un sistem care nu recunoaște tipul DATE, puteți, desigur, să declarați data ca un caracter sau câmp numeric, dar acest lucru va face ca majoritatea operațiunilor să consume mai multă muncă.)

Ar trebui să vă revizuiți documentația pentru pachetul software pe care îl veți utiliza pentru a afla exact ce tipuri de date acceptă.

SQL. Incoerențe.

Puteți înțelege din discuția anterioară că există discrepanțe separate între produsele lumii SQL. SQL a apărut din lumea bazelor de date comerciale ca un instrument și a fost ulterior dezvoltat într-un standard ANSI. Din păcate, ANSI nu stabilește întotdeauna ce este cel mai util, așa că programele încearcă să se conformeze standardului ANSI fără a-l lăsa să le limiteze prea mult. ANSI este un fel de standard minim - puteți face mai mult decât vă permite, dar trebuie să puteți obține aceleași rezultate atunci când efectuați aceeași sarcină.

CE ESTE UN „UTILIZATOR”?

SQL rezidă de obicei pe sisteme informatice care au mai mult de un utilizator și, prin urmare, trebuie să facă diferența între ei (familia dvs. de PC-uri poate avea orice număr de utilizatori, dar de obicei nu are o modalitate de a diferenția un utilizator de altul).

De obicei, într-un astfel de sistem, fiecare utilizator are un fel de cod de verificare a drepturilor care îl identifică (terminologia variază). La începutul unei sesiuni cu un computer, utilizatorul se conectează (se înregistrează), spunând computerului cine este utilizatorul identificându-se folosind un ID specific. Orice număr de persoane care utilizează un ID de acces sunt utilizatori individuali; și, în mod similar, o persoană poate reprezenta un număr mare de utilizatori (la momente diferite) folosind diferite ID-uri de acces SQL. Acțiunile din majoritatea mediilor SQL sunt mapate la un identificator de acces specific care se potrivește exact unui anumit utilizator. Un tabel sau alt obiect este deținut de un utilizator care deține control total asupra acestuia. Utilizatorul poate avea sau nu privilegiul de a efectua o acțiune asupra obiectului. În scopurile noastre, vom fi de acord că orice utilizator are privilegiile necesare pentru a efectua orice acțiune până când vom reveni în mod specific la discuția despre privilegii din Capitolul 22. Valoarea specială USER poate fi folosită ca argument într-o comandă. Indică ID-ul disponibil al utilizatorului care emite comanda.

Convenții și terminologie

Cuvintele cheie sunt cuvinte care au o semnificație specială în SQL. Pot fi comenzi, dar nu text sau nume de obiecte. Vom evidenția cuvintele cheie tastându-le cu MAJUSCULE. Trebuie să aveți grijă să nu confundați cuvintele cheie cu termenii.

SQL are anumiți termeni speciali care sunt utilizați pentru a-l descrie. Printre acestea se numără cuvinte precum „interogare”, „clauză” și „predicat”, care sunt cele mai importante în descrierea și înțelegerea limbajului, dar nu înseamnă nimic independent pentru SQL.

Comenzile sau instrucțiunile sunt instrucțiuni prin care accesați o bază de date SQL.

Comenzile sunt formate din una sau mai multe părți logice separate numite clauze.

Propozițiile încep cu un cuvânt cheie și constau din cuvinte cheie și argumente. De exemplu, clauzele pe care le puteți întâlni sunt „FROM Salespeope” și „WHERE city = „Londra””. Argumentele completează sau schimbă sensul unei propoziții. În exemplele de mai sus, Salespeople este argumentul și FROM este cuvântul cheie al clauzei FROM. În mod similar, „oraș = „Londra”” este un argument pentru clauza WHERE.

Obiectele sunt structuri de baze de date cărora li se dau nume și sunt stocate în memorie. Aceasta include tabele de bază, vizualizări și indecși.

Pentru a vă arăta cum se formează echipele, vom face acest lucru cu exemple. Există, totuși, o metodă mai formală de descriere a comenzilor care utilizează convenții standardizate. Îl vom folosi în capitolele ulterioare pentru a înțelege aceste convenții în cazul în care le întâlniți în alte documente SQL.

Parantezele pătrate () vor indica părțile care nu pot fi utilizate, iar elipsele (...) indică faptul că tot ce le precede poate fi repetat de orice număr de ori. Cuvintele din paranteze unghiulare () sunt termeni speciali care explică ce sunt. Am simplificat foarte mult terminologia SQL standard, fără a o face dificil de înțeles.

rezumat

Am acoperit pe scurt elementele de bază în acest capitol. Dar intenția noastră a fost să acoperim rapid elementele de bază ale SQL, astfel încât să puteți acoperi întregul domeniu de aplicare al informațiilor.

Acum știți câteva lucruri despre SQL: care este structura sa, cum este utilizat, cum reprezintă datele și cum sunt definite (și unele inconsecvențe care vin odată cu el), unele convenții și termeni folosiți pentru a le descrie. Toate acestea sunt prea multe informații pentru un capitol; Nu ne așteptăm să vă amintiți toate aceste detalii, dar vă puteți referi la ele mai târziu dacă este necesar.

Limba SQL

Deci, ne-am familiarizat cu conceptele de bază ale teoriei bazelor de date, am instalat și configurat MySQL pentru a funcționa. Acum este momentul să învățați cum să manipulați datele stocate în bazele de date. Pentru asta avem nevoie SQL – limbaj de interogare structurat. 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 de limbă internațională SQL a fost adoptat în 1989 și este adesea numit SQL/89 . Printre dezavantajele acestui standard, cel mai notabil este că stabilește multe proprietăți importante ca fiind definite de implementare. Acest lucru a dus la multe discrepanțe în implementările de limbă de către 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 de Limbă 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 neajunsurile sale. În prezent, majoritatea sistemelor implementează acest standard aproape complet. Cu toate acestea, după cum știți, progresul nu poate fi oprit, iar în 1999 a apărut un nou standard SQL :1999, cunoscut și ca SQL3. SQL3 este caracterizat ca fiind „orientat pe obiecte” SQL ” ș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 SQL-92 și tehnologia obiectelor. Conține o serie de extensii la tradițional SQL , iar documentul în sine este conceput pentru a facilita munca de standardizare mai eficientă în viitor.

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.

Apoi, vorbind despre elementele de bază ale limbii SQL , vom adera la implementarea sa în SGBD-ul MySQL.

Operatori lingvistici de bază SQL

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 în limbaj SQL exista operatori CREAȚI TABEL, ALTER TABLEȘi DROP TABLE.

Instrucțiunea CREATE TABLE

mysql>CREATE TABLE Persoane (id INT PRIMARY KEY AUTO_INCREMENT, prenume VARCHAR(50), prenume VARCHAR(100), data_deces INT, descriere TEXT, fotografie INT, cetățenie CHAR(50) DEFAULT „Rusia”); Exemplul 10.1. Crearea tabelului Persoane

Folosind comanda SHOW specifică MySql, puteți vizualiza bazele de date existente, tabelele dintr-o bază de date și câmpurile dintr-un tabel.

Afișați toate bazele de date:

mysql>SHOW baze de date;

Faceți actuala baza de date a cărților și afișați toate tabelele din ea:

mysql>carte de utilizare; mysql>arata tabele;

Afișați toate coloanele din tabelul Persoane:

mysql> arată coloanele din Persons;

Declarația DROP TABLE

Operator DROP TABLEșterge unul sau mai multe tabele. Toate datele și definițiile din tabel sunt eliminate, așa că aveți grijă când utilizați această comandă.

Sintaxă:

DROP TABLE nume_tabel [, nume_tabel,...]

În MySQL 3.22 și mai târziu, puteți folosi cuvintele cheie IF EXISTS pentru a genera o eroare dacă tabelele specificate nu există.

Opțiunile RESTRICT și CASCADE facilitează transferul unui program din alte SGBD. Nu sunt în uz momentan.

mysql> DROP TABLE IF EXISTIS Persoane, Artefacte, test; Exemplul 10.2. Folosind instrucțiunea DROP TABLE

Instrucțiunea ALTER TABLE

Operator ALTER TABLE oferă posibilitatea de a schimba structura unui tabel existent. De exemplu, puteți adăuga sau elimina coloane, puteți crea sau distruge indecși sau puteți redenumi coloanele sau tabelul în sine. De asemenea, puteți modifica comentariul pentru tabel și tipul acestuia.

Sintaxă:

ALTER TABLE nume_tabel alter_specification [, alter_specification ...]

Puteți face următoarele modificări în tabel (toate acestea sunt înregistrate în alter_specification ):

  • adăugarea unui câmp:

    ADD coloană_definiție

    ADD (definiție_coloană, definiție_coloană,...)

  • adăugarea de indici:

    ADĂUGA INDEX [nume_index] (nume_coloană,...) sau ADAUGĂ CHEIE PRIMARĂ (nume_coloană,...) sau ADAUGĂ UNIQUE [nume_index] (nume_coloană,...) sau ADD FULLTEXT [nume_index] (nume_coloană,...)

  • modificare câmp:

    ALTER nume_coloană (SET DEFAULT literal | DROP DEFAULT) sau SCHIMBAți vechiul_nume_coloană definiția_coloanei sau MODIFICAȚI coloană_definiție

  • ștergerea unui câmp, index, cheie:

    DROP nume_coloană DROP PRIMARY KEY DROP INDEX nume_index

  • redenumire tabel:

    RENAME new_table_name

  • reordonarea câmpurilor tabelului:

    Câmpul ORDER BY

    table_options

Dacă operatorul ALTER TABLE este folosit pentru a modifica definiția tipului de coloană, dar DESCRIBE table_name arată că coloana nu s-a schimbat, atunci MySQL poate ignora această modificare din unul dintre motivele descrise în secțiunea specială a documentației. De exemplu, dacă încercați să schimbați o coloană VARCHAR în CHAR, MySQL va continua să folosească VARCHAR dacă tabelul în cauză conține alte coloane cu lungime variabilă.

Operator ALTER TABLEîn timpul rulării, creează o copie temporară a tabelului original. Modificarea necesară este efectuată asupra copiei, apoi tabelul original este șters și noul tabel este redenumit. Acest lucru se face astfel încât toate actualizările, cu excepția celor eșuate, să fie incluse automat în noul tabel. În timpul rulării ALTER TABLE tabelul original poate fi citit de alți clienți. Operațiunile de actualizare și scriere pe acest tabel sunt suspendate până când noul tabel este gata. Trebuie remarcat faptul că atunci când utilizați orice altă opțiune pentru ALTER TABLE, alta decât RENAME, MySQL va crea întotdeauna un tabel temporar, chiar dacă datele nu trebuie să fie strict copiate (de exemplu, când se schimbă numele unei coloane).

Exemplul 10.3. Să adăugăm un câmp la tabelul Persoane creat pentru a înregistra anul de naștere al persoanei:

mysql> ALTER TABLE Persoane ADD bday INTEGER AFTER last_name; Exemplul 10.3. Adăugarea unui câmp la tabelul Persoane pentru a înregistra anul de naștere al unei persoane

Așadar, am învățat cum să lucrăm cu tabele: să le creăm, să le ștergem și să le modificam. Acum să ne dăm seama cum să facem același lucru cu datele stocate în aceste tabele.

instrucțiunea SELECT

Operator SELECTAȚI folosit pentru a prelua rândurile selectate dintr-unul sau mai multe tabele. Adică, cu ajutorul lui specificăm coloanele sau expresiile care trebuie preluate (select_expressions), tabelele (table_references), din care ar trebui să se facă selecția și, eventual, condiția (where_definition), în care datele din acestea coloanele trebuie să corespundă și ordinea în care aceste date trebuie să fie emise.

În plus, operatorul SELECTAȚI poate fi folosit pentru a prelua rândurile calculate fără referire la niciun tabel. De exemplu, pentru a calcula cu ce este egal 2*2, scrieți pur și simplu

mysql> SELECT 2*2;

Structura operatorului simplificată SELECTAȚI poate fi reprezentat astfel:

Parantezele pătrate înseamnă că operatorul pe care îl conțin este opțional; bară verticală | înseamnă o listă de opțiuni posibile. După cuvântul cheie ORDER BY, indicați numele coloanei, numărul (întreg fără semn) sau formula și metoda de ordonare (crescător - ASC sau descrescător - DESC). Ordonarea implicită este crescătoare.

Când scriem „*” în select_expression, aceasta înseamnă selectarea tuturor coloanelor. În plus față de „*”, funcții precum max , min și avg pot fi folosite în select_expressions.

Exemplul 10.4. Selectați din tabelul Persoane toate datele pentru care câmpul first_name are valoarea „Alexander”:

Selectați numele și descrierea (titlu, descriere) artefactului numărul 10:

instrucțiunea INSERT

Operator INTRODUCE inserează rânduri noi într-un tabel existent. Operatorul are mai multe forme. Parametrul table_name din toate aceste forme specifică tabelul în care trebuie scrise rândurile. Coloanele pentru care sunt setate valori sunt specificate în lista de nume de coloane (nume_coloană) sau în partea SET.

Sintaxă:

    INSERT nume_tabel [(nume_coloană,...)] VALORI (expresie,...),(...),...

    Acest formular de comandă INTRODUCE inserează rânduri conform valorilor exacte specificate în comandă. Coloanele sunt listate în paranteze după numele tabelului, iar valorile lor sunt enumerate după cuvântul cheie VALUES.

    De exemplu:

    mysql> INSERT INTO Persons (nume, zi) VALORI ("Ivanov", "1934");

    va insera un rând în tabelul Persoane în care valorile numelui (nume) și datei nașterii (zi) vor fi setate, respectiv, ca „Ivanov” și „1934”.

    INSERT nume_tabel [(nume_coloană,...)] SELECT ...

    Acest formular de comandă INTRODUCE inserează rânduri selectate dintr-un alt tabel sau tabele.

    De exemplu:

    va insera în tabelul Artefacte în câmpul „autor” valoarea identificatorului selectat din tabelul Persoane cu condiția ca numele persoanei să fie Ivanov.

    INSERT table_name SET column_name=expresie, column_name=expresie, ...

    De exemplu:

    mysql> INSERT INTO Persons SET last_name="Petrov", first_name="Ivan";

    Această comandă va insera valoarea „Petrov” în tabelul Persons în câmpul last_name, iar șirul „Ivan” în câmpul first_name.

Formă INSERT...VALORI cu o listă de valori multiple este acceptată în MySQL 3.22.5 și mai târziu. Sintaxa expresiei column_name=expresie acceptat în MySQL versiunea 3.22.10 și ulterioară.

Se aplică următoarele acorduri.

  • Dacă nu este specificată nicio listă de coloane pentru INSERT...VALORI sau INSERT...SELECT, atunci valorile pentru toate coloanele trebuie definite în lista VALUES() sau ca urmare a SELECTAȚI. Dacă ordinea coloanelor din tabel este necunoscută, puteți utiliza DESCRIBE table_name.
  • Orice coloană căreia nu i se dă în mod explicit o valoare va fi setată la valoarea implicită. De exemplu, dacă o listă de coloane dată nu specifică toate coloanele dintr-un tabel dat, atunci coloanele nemenționate sunt setate la valorile implicite.
  • expresia se poate referi la orice coloană care a fost inclusă anterior în lista de valori. De exemplu, puteți specifica următoarele:

    mysql> INSERT INTO table_name (col1,col2) VALUES(15,col1*2);

    Dar nu poți specifica:

    mysql> INSERT INTO table_name (col1,col2) VALUES(col2*2,15);

Nu am discutat încă trei parametri opționali care sunt prezenți în toate cele trei forme ale comenzii: LOW_PRIORITY, DELAYED și IGNORE.

Parametrii LOW_PRIORITY și DELAYED sunt utilizați atunci când un număr mare de utilizatori lucrează cu tabelul. Acestea cer ca o anumită operațiune să aibă prioritate față de operațiunile altor utilizatori. Dacă este specificat cuvântul cheie LOW_PRIORITY, atunci execuția acestei comenzi INTRODUCE va fi amânată până când alți clienți vor termina de citit acest tabel. În acest caz, clientul trebuie să aștepte până când comanda de inserare este finalizată, ceea ce poate dura o perioadă semnificativă de timp dacă tabelul este utilizat intens. În schimb, comanda INSERARE ÎNTÂRZIAT permite unui anumit client să continue imediat o operațiune, indiferent de ceilalți utilizatori.

Dacă în echipă INTRODUCE Dacă este specificat cuvântul cheie IGNORE, atunci toate rândurile care au chei duplicate PRIMAR sau UNICîn acest tabel vor fi ignorate și nu introduse în tabel. Dacă nu specificați IGNORE , operația de inserare se anulează atunci când întâlnește un rând care are o valoare duplicată pentru o cheie existentă.

Declarație UPDATE

Sintaxă:

Operator ACTUALIZAȚI Actualizează valorile coloanelor existente din tabel în funcție de valorile introduse. Instrucțiunea SET specifică ce coloane trebuie modificate și ce valori ar trebui stabilite în ele. Clauza WHERE, dacă este prezentă, specifică ce rânduri sunt actualizate. În caz contrar, toate rândurile sunt actualizate. Dacă este specificată o expresie ORDER BY, rândurile vor fi actualizate în ordinea specificată în ea.

Dacă este specificat cuvântul cheie LOW_PRIORITY, atunci execuția acestei comenzi ACTUALIZAȚI este amânată până când ceilalți clienți au terminat de citit acest tabel.

Dacă este specificat cuvântul cheie IGNORE, comanda de actualizare nu se va anula chiar dacă apare o eroare de cheie duplicată. Rândurile care provoacă conflicte nu vor fi actualizate.

Dacă expresia care specifică noua valoare a coloanei folosește numele acelui câmp, atunci comanda ACTUALIZAȚI folosește valoarea curentă a acestei coloane. De exemplu, următoarea comandă setează coloana death_date la o valoare cu unul mai mare decât valoarea sa actuală:

mysql> UPDATE Persons SET death_date=death_date+1;

În MySQL versiunea 3.23, puteți utiliza parametrul LIMIT # pentru a vă asigura că numai numărul specificat de rânduri a fost modificat.

De exemplu, o astfel de operațiune va înlocui titlul titlului din primul rând al tabelului nostru de exponate cu șirul „Tube computer”:

mysql> UPDATE Artefacte SET title="Tube computer" Limit 1;!}

Declarația DELETE

Operator ȘTERGE elimină rândurile din tabel table_name care îndeplinesc condițiile specificate în where_definition și returnează numărul de înregistrări eliminate.

Dacă operatorul ȘTERGE este rulat fără o definiție WHERE, toate rândurile sunt șterse.

Sintaxă:

De exemplu, următoarea comandă va fi eliminată din tabelul Persoane

LIMBAJUL SQL: MANIPULARE DATE

IN ACEASTA PRELEGERE...

· Scopul Structure Query Language (SQL) și rolul său special atunci când lucrați cu baze de date.

· Istoria apariției și dezvoltării limbajului SQL.

· Scrierea de instrucțiuni SQL.

· Preluarea informațiilor din baze de date folosind instrucțiunea SELECT.

· construcția de instrucțiuni SQL caracterizate prin următoarele caracteristici:

· folosirea constructului WHERE pentru a selecta rânduri care satisfac diverse condiții;

· sortarea rezultatelor interogării folosind constructul ORDER BY;

· utilizarea funcţiilor de agregare SQL;

· gruparea datelor selectate folosind constructul GROUP BY;

· utilizarea subinterogărilor;

· utilizarea table joins;

· aplicarea operatiilor cu multimi (UNIREA, INTERSECT, EXCEPT.).

· Efectuarea de modificări în baza de date utilizând instrucțiunile INSERT, UPDATE și DELETE.

Unul dintre limbajele care a apărut ca urmare a dezvoltării modelului de date relaționale este SQL, care acum a devenit foarte răspândit și a devenit de fapt limbajul standard pentru bazele de date relaționale. Standardul de limbaj SQL a fost lansat de Institutul Național de Standarde al SUA (ANSI) în 1986, iar în 1987 Organizația Internațională pentru Standardizare (ISO) a adoptat acest standard ca standard internațional. În prezent, limbajul SQL este susținut de sute de tipuri diferite de SGBD-uri, dezvoltate pentru o mare varietate de platforme de calcul, de la computere personale la mainframe.

Această prelegere folosește definiția ISO a SQL.

Introducere în SQL

În această parte, ne vom uita la scopul limbajului SQL, ne vom familiariza cu istoria acestuia și vom analiza motivele pentru care a devenit acum atât de important pentru aplicațiile de baze de date.

Scopul limbajului SQL

Orice limbaj conceput pentru a funcționa cu baze de date trebuie să ofere utilizatorului următoarele capabilități:

· creați baze de date și tabele cu o descriere completă a structurii acestora;



· Efectuați operațiuni de bază de manipulare a datelor, cum ar fi inserarea, modificarea și ștergerea datelor din tabele;

· Efectuați interogări simple și complexe.

În plus, limbajul bazei de date trebuie să rezolve toate problemele de mai sus cu un efort minim din partea utilizatorului, iar structura și sintaxa comenzilor sale trebuie să fie destul de simple și ușor de învățat.

Și în sfârșit, limbajul trebuie să fie universal, adică. respectă un standard recunoscut, care va permite utilizarea aceleiași sintaxe și structuri de comandă atunci când se trece de la un SGBD la altul. Standardul modern al limbajului SQL satisface aproape toate aceste cerințe.

SQL este un exemplu de limbaj de transformare a datelor sau un limbaj conceput pentru a funcționa cu tabele pentru a transforma datele de intrare în forma de ieșire dorită. Limbajul SQL, care este definit de standardul ISO, are două componente principale:

· Data Definition Language (DDL), conceput pentru a defini structurile bazelor de date și a controla accesul la date;

· Limbajul de manipulare a datelor (DML), conceput pentru preluarea și actualizarea datelor.

Înainte de apariția standardului SQL3, SQL includea doar comenzi pentru definirea și manipularea datelor; îi lipseau orice comenzi pentru a controla progresul calculelor. Cu alte cuvinte, acest limbaj nu avea IF ... THEN ...ELSE, GO TO, DO ... WHILE și orice alte comenzi menite să controleze progresul procesului de calcul. Astfel de sarcini trebuiau rezolvate programatic, folosind limbaje de programare sau de control al sarcinilor, sau interactiv, ca urmare a acțiunilor efectuate de utilizatorul însuși. Datorită acestei incompletitudini, din punct de vedere al organizării procesului de calcul, limbajul SQL ar putea fi utilizat în două moduri. Prima a implicat o muncă interactivă, constând în introducerea de către utilizator a instrucțiunilor SQL individuale din terminal. Al doilea a fost de a încorpora instrucțiunile SQL în programele de limbaj procedural.

Avantajele limbajului SQL3, a cărui definiție formală a fost adoptată în 1999:

· Limbajul SQL este relativ ușor de învățat.

· Este un limbaj non-procedural, deci trebuie să specifice ce informații ar trebui obținute, nu cum pot fi obținute. Cu alte cuvinte, limbajul SQL nu necesită specificarea metodelor de acces la date.

· La fel ca majoritatea limbilor moderne, SQL acceptă un format gratuit pentru scrierea declarațiilor. Aceasta înseamnă că elementele individuale ale operatorului nu sunt asociate cu poziții fixe de pe ecran pe măsură ce tastați.

· Structura comenzii este specificată de un set de cuvinte cheie, care sunt cuvinte obișnuite în limba engleză, cum ar fi CREATE TABLE - Create a table, INSERT - Insert, SELECT - Select.

De exemplu:

CREATE TABLE [Vânzări] ( (S), [Nume obiect] VARCHAR(15), [Cost] DECIMAL(7,2));

INSERT INTO [Obiect] VALUES ("SG16", "Maro", 8300);

SELECT, [Nume obiect], [Cost];

DE LA [Vânzări]

UNDE [Cost] > 10000;

· Limbajul SQL poate fi folosit de o gamă largă de utilizatori, inclusiv administratorii de baze de date (DBA), personalul de conducere al companiei, programatorii de aplicații și mulți alți utilizatori finali de diferite categorii.

În prezent, există standarde internaționale pentru limbajul SQL care îl definesc în mod oficial ca limbaj standard pentru crearea și manipularea bazelor de date relaționale, ceea ce este de fapt.

Istoria limbajului SQL

Istoria modelului de date relaționale, și indirect a limbajului SQL, a început în 1970 odată cu publicarea unui articol fundamental al lui E. F. Codd, care în acel moment lucra la laboratorul de cercetare IBM din San Jose. În 1974, D. Chamberlain, care a lucrat în același laborator, a publicat o definiție a unei limbi numită „Structured English Query Language” sau SEQUEL. O versiune revizuită a acestui limbaj, SEQUEL/2, a fost lansată în 1976; ulterior, numele său a trebuit să fie schimbat în SQL din motive legale - abrevierea SEQUEL era deja folosită de filologi. Dar până în ziua de azi, mulți oameni încă pronunță acronimul SQL ca „sequel”, deși oficial este recomandat să îl citiți ca „es-qu-el”.

În 1976, IBM a lansat un prototip DBMS bazat pe limbajul SEQUEL/2, numit „System R”. Scopul acestui studiu a fost de a testa fezabilitatea implementării modelului relațional. Printre alte aspecte pozitive, cel mai important rezultat al acestui proiect poate fi considerat dezvoltarea limbajului SQL în sine, însă rădăcinile acestui limbaj se întorc în limbajul SQUARE (Specifying Queries as Rational Expressions), care a fost predecesorul limbajului. Proiectul System R. Limbajul SQUARE a fost dezvoltat ca instrument de cercetare pentru implementarea algebrei relaționale prin fraze compuse în limba engleză.

La sfârșitul anilor 1970, compania care a devenit acum Oracle Corporation a lansat Oracle DBMS. Poate că aceasta este prima implementare comercială a unui SGBD relațional construit folosind limbajul SQL.

Puțin mai târziu, a apărut DBMS-ul INGRES, folosind limbajul de interogare QUEL.

Acest limbaj era mai structurat decât SQL, dar semantica sa era mai puțin apropiată de engleza obișnuită. Mai târziu, când SQL a fost adoptat ca limbaj standard pentru bazele de date relaționale, INGRES DBMS a fost complet convertit pentru a-l utiliza. În 1981, IBM a lansat primul său SGBD relațional comercial, numit SQL/DS (pentru mediul DOS/VSE). În 1982, a fost lansată o versiune a acestui sistem pentru mediul VM/CMS, iar în 1983 - pentru mediul MVS, dar deja sub numele DB2.

În 1982, Institutul Național de Standarde al SUA (ANSI) a început să lucreze la Relation Database Language (RDL), ghidat de documentele conceptuale primite de la IBM Corporation. În 1983, Organizația Internațională pentru Standardizare (ISO) s-a implicat în această activitate. Eforturile comune ale ambelor organizații au culminat cu lansarea standardului de limbaj SQL. Numele RDL a fost abandonat în 1984, iar schița de limbaj a fost reproiectată pentru a fi mai aproape de implementările existente ale limbajului SQL.

Versiunea originală a standardului, care a fost lansată de ISO în 1987, a atras un val de critici. În special, Date, un cercetător binecunoscut în acest domeniu, a subliniat că standardul omite funcții critice, inclusiv controalele de integritate referențială și unii operatori relaționali.

În plus, el a remarcat redundanța excesivă a limbii - aceeași cerere ar putea fi scrisă în mai multe versiuni diferite. Majoritatea criticilor au fost recunoscute ca fiind corecte, iar ajustările necesare au fost făcute standardului înainte de publicarea acestuia. Cu toate acestea, s-a decis că este mai important să se lanseze standardul cât mai repede posibil, astfel încât să poată servi drept bază comună pe care atât limbajul în sine, cât și implementările sale să poată fi dezvoltate în continuare, decât să aștepte până când toate caracteristicile care diferă. au fost definiţi şi conveniţi experţi consideraţi obligatorii.pentru un limbaj similar.

În 1989, ISO a publicat un amendament la standard care definea funcțiile de integritate a datelor. În 1992, a fost lansată prima versiune revizuită substanțial a standardului ISO, uneori numită SQL2 sau SQL-92. Deși unele dintre funcții au fost definite pentru prima dată în acest standard, multe dintre ele au fost deja implementate integral sau parțial în una sau mai multe implementări comerciale ale limbajului SQL.

Și următoarea versiune a standardului, care se numește în mod obișnuit SQL3, a fost lansată abia în 1999. Această versiune oferă suport suplimentar pentru caracteristicile de gestionare a datelor orientate pe obiecte.

Funcțiile care sunt adăugate standardului de limbaj de către dezvoltatorii de implementări comerciale sunt numite extensii. De exemplu, standardul limbajului SQL definește șase tipuri diferite de date care pot fi stocate în baze de date. În multe implementări, această listă este completată de diverse extensii. Fiecare implementare a unei limbi se numește dialect. Nu există două dialecte care să fie complet identice și nu există în prezent niciun dialect care să respecte pe deplin standardul ISO.

Mai mult, pe măsură ce dezvoltatorii de baze de date adaugă noi funcționalități sistemelor lor, își extind continuu dialectele SQL, determinând dialectele individuale să devină din ce în ce mai diferite unele de altele. Cu toate acestea, nucleul de bază al limbajului SQL rămâne mai mult sau mai puțin standardizat în toate implementările.

Deși conceptele originale ale limbajului SQL au fost dezvoltate de IBM, importanța acestuia i-a determinat curând pe alți dezvoltatori să-și creeze propriile implementări. În prezent, există literalmente sute de produse disponibile pe piață construite folosind limbajul SQL și auzim în mod constant despre lansarea a tot mai multe versiuni noi,

SQL este un limbaj de interogare structurat. SQL nu există fără baze de date – nu poți scrie programe în el, iar în acest sens nu este un limbaj de programare precum PHP, dar atunci când ai de-a face cu un anumit SGBD, nu te mai poți descurca fără cunoștințe de SQL. Puteți scrie interogări simple pe el sau puteți efectua tranzacții mari constând din mai multe interogări complexe. O interogare SQL este un fel de comandă către o bază de date. O astfel de comandă poate solicita returnarea informațiilor care îndeplinesc anumite criterii sau poate oferi instrucțiuni de ștergere a oricăror înregistrări etc. O comandă SQL este un șir simplu, de exemplu:

SELECTAȚI * DIN departamentul Staff WHERE

Interogările SQL sunt de obicei aproape de o expresie simplă în limba engleză. Comanda de mai sus poate fi tradusă în rusă după cum urmează

SELECTAȚI TOTUL DIN Staff WHERE clwjiertme"

Este o comandă complet de înțeles, este doar păcat că este scrisă exclusiv în engleză. Ca rezultat al executării unei astfel de interogări, DBMS va returna toate înregistrările din tabelul Staff în care câmpul depart* Mit_id este egal cu trei. În exemplul nostru, această interogare selectează de fapt numai programatori din întreaga bază de angajați.

Dacă nu ați mai lucrat cu un SGBD, atunci este posibil să aveți o întrebare rezonabilă: unde și cum puteți executa această interogare? Există trei moduri de a executa interogări SQL.

1. Mediu interactiv pentru interacțiunea cu SGBD. Pentru majoritatea serverelor DBMS, există programe client (încorporate sau furnizate de terți), în mediul de lucru al cărora puteți scrie interogări SQL, le puteți executa și obține rezultatul. De obicei, astfel de instrumente sunt folosite de administratorii bazelor de date și nu au legătură directă cu programarea PHP. Un exemplu de program client pentru lucrul cu MySQL este programul MySQL Administrator (http: /www.mysgl.coin/product-s/administratoT/) sau foarte popularul sistem PHP phpMyAdmin (http: / /www. phpmyadi'ln. r»et /itummjiage/index.php). Pentru a începe, va fi suficient un kit de distribuție deja instalat, care are o interfață de consolă. Pe Linux, trebuie să tastați comanda mysql din linia de comandă pentru a deschide o fereastră care vă solicită să introduceți interogări SQL, iar pe Windows, pentru a lansa aceeași interfață, trebuie să rulați fișierul mysql. exe din directorul bin.

2. Interogări SQL statice. De obicei, astfel de interogări sunt scrise în cadrul procedurilor stocate în bazele de date în sine sau codificate în aplicațiile în sine. O interogare SQL statică este predefinită și se modifică numai dacă programul sau codul procedurii stocate este rescris manual. Din PHP, o astfel de interogare SQL este executată folosind funcții speciale, despre care vor fi discutate mai târziu.

3. Interogări SQL dinamice. Acest tip include interogări care nu pot fi complet definite la scrierea unei aplicații. i" exemplu, atunci când scrie un program pentru a obține o listă de angajați" mt diferite divizii ale întreprinderii, programatorul nu știe, ci "> despre diviziile din companie și care angajați vor fi incluși în ele i„. Desigur , aceste date pot fi scrise strict în program, dar atunci când Prima modificare a structurii companiei, programul poate fi aruncat sau va trebui rescris. Interogările dinamice vă permit să creați programe de program care sunt flexibile la schimbările în date.În PHP, astfel de interogări sunt efectuate cu aproape aceleași funcții ca și cele statice, doar că în ele există mai mult '^v'> Nu este posibil să treci unii parametri.

Ca un rezumat al celor trei puncte descrise mai sus, putem spune că interogările SQL sunt executate din programe administrative speciale sau în diverse moduri din scripturi PHP.

Deoarece un SGBD rezolvă multe probleme, SQL este, de asemenea, forțat să fie un limbaj multifuncțional. Există mai multe tipuri de operații care pot fi< \ ществлять с помощью SQL.

1. Definirea structurii bazei de date. Acest tip include interogări care creează și modifică tabele și indecși. Acestea sunt de obicei comenzi CRE; „E TA’ LE, ALI’R TA’ LE, ‘ ” ’.TE INDEX Etc.

2. Manipularea datelor. Acest tip include interogări de inserare (mutare), ștergere sau modificare a datelor din tabele. Acestea sunt cele trei comenzi principale: INSERT. ȘTERGEȚI ȘI ACTUALIZAȚI.

3. Selectarea datelor Aceasta include o singură comandă SELECT. Nu aduce modificări datelor în sine, dar vă permite să le preluați din baza de date. Chiar dacă o singură comandă este folosită pentru a prelua date, este foarte puternică și este folosită foarte des în aplicații.

4. Managementul serverului DBMS. Acest tip include în principal interogări pentru a gestiona utilizatorii și drepturile lor de acces (de exemplu, comanda GRANT).

Cunoașterea bună a SQL facilitează foarte mult munca unui programator atunci când lucrează cu o bază de date. Aplicațiile pot fi mici, dar au funcționalități grozave doar datorită faptului că SQL preia multe sarcini.

Ca în orice altă zonă a IT, există standarde în SQL - acestea sunt ANSI SQL. Abrevierea ANSI înseamnă Institutul Național de Standarde din America. Cu toate acestea, nu în ultimul rând din cauza diferențelor de funcționalitate ale SGBD-urilor SQL în sine pentru diferite

SGBD-urile sunt încă diferite unele de altele. În prezent, aproape fiecare DBMS are propriul său dialect, care de obicei nu diferă mult de standardul general, dar are propriile sale caracteristici. De exemplu, limbajul PL/SQL este compatibil cu Oracle și PostgreSQL, iar T-SQL este folosit pentru a lucra cu MS SQL Server.

Pentru munca ulterioară cu bazele de date, vă recomandăm să studiați imediat standardul cu care intenționați să lucrați în viitor. Pentru majoritatea dezvoltatorilor Web în acest moment, funcționalitatea SGBD-ului MySQL este suficientă (și poate fi folosită gratuit), așa că în această carte toate exemplele cu MySQL vor fi date, în consecință, în dialectul acestui SGBD. Documentația despre limbajul de interogare pentru MySQL poate fi găsită la www.mysql.com.

Fiecare comandă SQL începe cu un cuvânt cheie, un verb care descrie acțiunea pe care o efectuează comanda, cum ar fi CREATE. O echipă poate avea una sau mai multe propoziții. Propoziția descrie datele cu care lucrează comanda sau conține informații clarificatoare despre acțiunea pe care o efectuează comanda. Fiecare clauză începe cu un cuvânt cheie, cum ar fi WHERE. Unele clauze din comandă sunt obligatorii, altele nu. Unele propoziții pot conține cuvinte cheie și expresii suplimentare. Multe propoziții includ nume de tabel sau câmpuri. Numele trebuie să aibă între 1 și 18 caractere, să înceapă cu o literă și să nu conțină spații sau caractere speciale de punctuație. Cuvintele cheie nu pot fi folosite ca nume.

52. SQL (Structured Query Language) - Structured Query Language este un limbaj de interogare standard pentru lucrul cu baze de date relaționale.

SQL nu conține instrucțiuni tradiționale care controlează execuția programelor, conține doar un set de instrucțiuni standard pentru accesarea datelor stocate într-o bază de date.

SQL poate fi folosit pentru a accesa o bază de date în două moduri: munca interactivă si in programe de aplicație.

Cu ajutorul SQL, utilizatorul poate obține rapid răspunsuri la orice, inclusiv la întrebări destul de complexe, în timp ce pentru a implementa aceste interogări într-o altă limbă ar fi necesar să dezvolte un program corespunzător. Programele de aplicație scrise în anumite limbaje de programare folosesc SQL ca incorporat limba pentru accesarea bazei de date.

Caracterizând limbajul SQL în ansamblu, putem evidenția următoarele caracteristici:

structură de nivel înalt care amintește de limba engleză;

· independență față de SGBD specific;

· disponibilitatea standardelor în curs de dezvoltare;

· capacitatea de a efectua interogări interactive pentru a prelua date și a modifica structura acestora;

· asigurarea accesului software la bazele de date;

· suport arhitectura client/server;

· extensibilitate și suport pentru tehnologii orientate pe obiecte;



· capacitatea de a accesa date de pe Internet.

Principalele funcții ale limbajului SQL:

SQL – limbaj interactiv de interogare. Utilizatorii introduc comenzi SQL în mod interactiv pentru a prelua date și a le afișa pe ecran și pentru a face modificări în baza de date;

SQL – limbaj de programare baze de date. Pentru a accesa baza de date, comenzile SQL sunt introduse în programele de aplicație;

SQL – limbaj de administrare a bazei de date. Un administrator al bazei de date poate folosi SQL pentru a defini structura bazei de date și pentru a controla accesul la date;

SQL – limbajul aplicației client/server. În programele de aplicație, SQL este folosit ca mijloc de organizare a comunicării într-o rețea locală cu un server de baze de date, care stochează date partajate etc.

55. Capacități lingvistice Limbajul SQL, care respectă cele mai recente standarde SQL:2003, SQL:1999, este un limbaj foarte bogat și complex, ale cărui capacități sunt greu de înțeles imediat, cu atât mai puțin de înțeles. Prin urmare, trebuie să împărțim limbajul în niveluri. Într-una dintre clasificările oferite de standardul SQL, acest limbaj este împărțit în niveluri „de bază” (de intrare), „intermediar” (intermediar) și „complet”. Nivelul de bază conține aproximativ patruzeci de comenzi, care pot fi grupate în categorii în funcție de funcționalitatea lor.

CREATE TABLE Detalii (NOMZ INT, NUME COMPLET CHAR(15), YEAR INT, GEN CHAR(3))

DROP TABLE Detalii

ALTER TABLE Detalii (SAMPLE CHAR(10))

CREATE VIEW Academic Progress M1 AS SELECT *FROM Academic Performance WHERE GROUP= "M-1"

INSERT INTO Information VALUES (980101, „IVANOV I. I.”, 1980, „SOȚUL”)

DELETE FROM Detalii WHERE NOMZ=980201

UPDATE Information SET Nume complet = "KRAVTSOVA I. I." WHERE NOMZ=980201

SELECT * FROM Informații WHERE FULL NAME="SIDOROV S. S." SAU NUME COMPLET="PETROV P. P."

54. Tipuri de date și expresii Pentru a accesa un tabel relațional în SQL, trebuie să scrieți (specificați) o comandă. SELECTAȚI (selectați)cuvânt cheie spune DBMS ce acțiune va efectua această comandă. Comenzile de interogare încep cu un cuvânt cheie. Pe lângă SELECT, acestea pot fi cuvinte CREA- crea, INTRODUCE-introduce, ȘTERGE- șterge, COMMIT– completă etc.

DE LA – un cuvânt cheie precum SELECT care apare în fiecare comandă. Este urmată de un spațiu și apoi de numele tabelelor folosite ca surse de informații. Numele tabelelor și câmpurilor trebuie să conțină de la 1 la 18 caractere, să înceapă cu o literă și să nu conțină spații sau caractere speciale.

UNDE un cuvânt cheie urmat de un predicat — o condiție impusă unei intrări de tabel pe care trebuie să o îndeplinească pentru a fi inclusă în selecție.

COMANDA PENTRU - sortarea înregistrărilor afișate (Asc – crescător, Desc – descrescător. Dacă nu este specificat tipul de sortare, atunci sortarea are loc în ordine crescătoare).

CHAR(lungime) CHARACTER(lungime)Șiruri de caractere de lungime constantă

INTEGER INTNumere întregi

SMALLINTNumăr întreg mic

NUMERIC(acuratețe, grad) DECIMAL(acuratețe, grad DEC(acuratețe, grad)Număr punct fix

FLOAT (precizie)Număr în virgulă mobilă

Precizie dublanumere cu blocare flotantă, precizie ridicată

Expresiiîn SQL sunt folosite pentru a specifica criterii pentru selectarea datelor sau efectuarea de operații asupra valorilor care sunt citite dintr-o bază de date. Expresiile sunt o secvență specifică de câmpuri de bază de date, constante, funcții conectate de operatori.

constante sunt folosite pentru a indica valori specifice datelor. Constante de punct fix, de exemplu: 21 -375,18 62,3

Constante în virgulă mobilă, de exemplu: 1.5E7 -3.14E9 2.5E-6 0.783E24

Constante de șir trebuie să fie cuprinse între ghilimele simple. Exemple de astfel de constante: „Minsk” „New York” „Ivanov I. I.”

Valoare lipsă(NUL). SQL acceptă gestionarea datelor lipsă folosind conceptul de valoare lipsă.

Majoritatea SGBD-urilor orientate spre SQL acceptă așa-numitele funcții agregate (totale).. Funcțiile agregate utilizate în mod obișnuit includ următoarele:

· NUMARA– numărul de valori din coloana tabelului;

· SUMĂ– suma valorilor din coloană;

· AVG– media aritmetică a valorilor din coloană;

· MAX– valoarea maximă în coloană;

· MIN– valoarea minimă în coloană.

Se pot folosi următoarele expresii: tipuri de operatori:

· aritmetic: + (plus), - (scădere), * (multiplicare), / (Divizia);

· relaţie: = (egal), > (mai mare),< (меньше), >= (mai mare sau egal cu),<= (меньше или равно), <>(nu este egal);

· joc de inteligență: ȘI(logic „ȘI”), SAU(„SAU” logic), NU(negație logică);

56. Comenzi de control al tranzacțiilor vă permit să asigurați integritatea bazei de date.

Tranzacție SQL sunt mai multe comenzi SQL secvențiale care trebuie executate ca o singură unitate.

În limbajul SQL, procesarea tranzacțiilor este implementată folosind două comenzi - COMMITȘi ROLLBACK. Aceștia gestionează modificările făcute de un grup de echipe. Echipă COMMIT raportează finalizarea cu succes a tranzacției. Acesta informează DBMS că tranzacția s-a încheiat, toate comenzile sale au fost finalizate cu succes și nu au apărut inconsecvențe în baza de date. Echipă ROLLBACK raportează finalizarea nereușită a tranzacției. Acesta informează SGBD că utilizatorul nu dorește să finalizeze tranzacția, iar SGBD ar trebui să renunțe la orice modificări aduse bazei de date ca urmare a tranzacției. În acest caz, SGBD returnează baza de date la starea în care se afla înainte de executarea tranzacției.

Echipe COMMITȘi ROLLBACK sunt utilizate în principal în modul program, deși pot fi utilizate și interactiv.

57. Pentru a accesa comenzile de control Acestea sunt comenzi pentru efectuarea de funcții administrative care atribuie sau revocă dreptul (privilegiul) de a utiliza tabelele bazei de date într-un anumit mod. Fiecare utilizator al bazei de date are anumite drepturi în legătură cu obiectele bazei de date.

Drepturi– acestea sunt acțiunile cu un obiect pe care utilizatorul le poate efectua. Drepturile se pot schimba în timp: cele vechi pot fi anulate, pot fi adăugate altele noi. Sunt acordate următoarele drepturi:

· INSERT – dreptul de a adăuga date în tabel;

· UPDATE – dreptul de a modifica datele din tabel;

· DELETE – dreptul de a șterge datele din tabel;

· REFERINȚE – dreptul de a defini cheia primară.

58 Încorporarea limbajului în programele de aplicație..Pentru a încorpora Acestea sunt comenzi concepute pentru a implementa accesul la o bază de date din programe de aplicație scrise într-un limbaj de programare specific.

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva