Interogări Ms sql server. Un exemplu de creare a unei interogări (Interogare) într-o bază de date MS SQL Server

Ultima actualizare: 07/05/2017

În ultimul subiect, în SQL Management Studio a fost creată o bază de date simplă cu un singur tabel. Acum să definim și să executăm prima interogare SQL. Pentru a face acest lucru, deschideți SQL Management Studio, faceți clic dreapta pe elementul de nivel superior din Object Explorer (nume server) și selectați New Query din meniul contextual care apare:

După aceea, se va deschide o fereastră pentru introducerea comenzilor SQL în partea centrală a programului.

Să executăm o interogare pe tabelul care a fost creat în subiectul anterior, în special, vom obține toate datele din acesta. Baza noastră de date se numește university , iar tabelul este dbo.Students , așa că pentru a obține date din tabel, vom introduce următoarea interogare:

SELECT * FROM university.dbo.Students

Instrucțiunea SELECT vă permite să selectați date. FROM specifică sursa de unde se obțin datele. De fapt, cu această interogare spunem „SELECT all FROM table university.dbo.Students”. Este de remarcat faptul că calea completă a tabelului este utilizată pentru numele tabelului, indicând baza de date și schema.

După ce ați introdus interogarea, faceți clic pe butonul Execute din bara de instrumente sau puteți apăsa tasta F5.

Ca urmare a executării interogării, în partea de jos a programului va apărea un mic tabel, care va afișa rezultatele interogării - adică toate datele din tabelul Studenți.

Dacă trebuie să facem mai multe interogări asupra aceleiași baze de date, atunci putem folosi comanda USE pentru a comite baza de date. În acest caz, atunci când interogați tabele, este suficient să specificați numele acestora fără numele și schema bazei de date:

USE university SELECT * FROM studenți

În acest caz, executăm interogarea ca un întreg pentru server, putem accesa orice bază de date de pe server. Dar putem executa interogări doar într-o anumită bază de date. Pentru a face acest lucru, faceți clic dreapta pe baza de date dorită și selectați Interogare nouă din meniul contextual:

Dacă în acest caz dorim să interogăm tabelul Studenți folosit mai sus, atunci nu ar trebui să specificăm numele și schema bazei de date în interogare, deoarece aceste valori ar fi deja clare.

SQL Server Management Studio oferă un instrument complet pentru crearea tuturor tipurilor de interogări. Cu acesta, puteți crea, salva, încărca și edita interogări. În plus, puteți lucra la interogări fără a vă conecta la niciun server. Acest instrument oferă, de asemenea, posibilitatea de a dezvolta interogări pentru diferite proiecte.

Puteți lucra cu interogări atât prin Editorul de interogări, cât și prin Exploratorul de soluții. Acest articol acoperă ambele instrumente. În plus față de aceste două componente ale SQL Server Management Studio, ne vom uita la depanarea codului SQL folosind depanatorul încorporat.

Editor de interogări

Pentru a deschide panoul Editor de interogări Editor de interogări, în bara de instrumente SQL Server Management Studio, faceți clic pe butonul Interogare nouă. Acest panou poate fi extins pentru a afișa butoane pentru crearea tuturor interogărilor posibile, nu doar a interogărilor din Motorul de baze de date. În mod implicit, este creată o nouă interogare Database Engine, dar puteți crea, de asemenea, MDX, XMLA și alte interogări făcând clic pe butonul corespunzător din bara de instrumente.

Bara de stare din partea de jos a panoului Editor de interogări indică starea conexiunii editorului la server. Dacă nu sunteți conectat automat la server, atunci când lansați Editorul de interogări, vi se va afișa caseta de dialog Conectare la server, unde puteți selecta serverul la care să vă conectați și modul de autentificare.

Editarea interogărilor offline oferă mai multă flexibilitate decât atunci când sunteți conectat la un server. Nu trebuie să fii conectat la un server pentru a edita interogări, iar fereastra editorului de interogări poate fi deconectată de la un server (folosind comanda de meniu Interogare --> Conexiune --> Deconectare) și conectată la altul fără a deschide o altă fereastră de editor. Pentru a selecta modul de editare offline, în dialogul de conectare la server care apare când lansați editorul pentru un anumit tip de interogare, faceți clic pe butonul Anulare.

Puteți utiliza Editorul de interogări pentru a efectua următoarele sarcini:

    crearea și executarea instrucțiunilor Transact-SQL;

    salvarea instrucțiunilor Transact-SQL generate într-un fișier;

    crearea și analizarea planurilor de execuție pentru interogări comune;

    ilustrare grafică a planului de execuție a interogării selectate.

Editorul de interogări conține un editor de text încorporat și o bară de instrumente cu un set de butoane pentru diferite acțiuni. Fereastra principală a Editorului de interogări este împărțită orizontal într-un panou de interogări (sus) și un panou de rezultate (jos). Instrucțiunile Transact-SQL (adică interogări) care urmează să fie executate sunt introduse în panoul de sus, iar rezultatele procesării de către sistem a respectivelor interogări sunt afișate în panoul de jos. Figura de mai jos arată un exemplu de introducere a unei interogări în editorul de interogări și rezultatele executării acestei interogări:

Prima instrucțiune de interogare USE specifică utilizarea bazei de date SampleDb ca bază de date curentă. A doua instrucțiune, SELECT, preia toate rândurile din tabelul Employee. Pentru a rula această interogare și a afișa rezultatele, în bara de instrumente Editor de interogări, faceți clic pe butonul Executare sau apăsați F5 .

Puteți deschide mai multe ferestre Editor de interogări, de ex. face mai multe conexiuni la una sau mai multe instanțe ale Motorului de baze de date. O nouă conexiune este creată făcând clic pe butonul New Query din bara de instrumente SQL Server Management Studio.

Bara de stare din partea de jos a ferestrei Editor de interogări afișează următoarele informații legate de execuția instrucțiunilor de interogare:

    starea operațiunii curente (de exemplu, „Solicitare finalizată cu succes”);

    numele serverului bazei de date;

    numele de utilizator curent și ID-ul procesului de server;

    numele bazei de date curente;

    timpul necesar pentru finalizarea ultimei cereri;

    numărul de linii găsite.

Unul dintre principalele avantaje ale SQL Server Management Studio este ușurința în utilizare, care se aplică și Editorului de interogări. Editorul de interogări oferă multe caracteristici care facilitează codificarea instrucțiunilor Transact-SQL. În special, folosește evidențierea sintaxelor pentru a îmbunătăți lizibilitatea instrucțiunilor Transact-SQL. Toate cuvintele rezervate sunt afișate în albastru, variabilele în negru, șirurile în roșu și comentariile în verde.

În plus, Editorul de interogări are apelat ajutor sensibil la context Ajutor dinamic, prin care puteți obține informații despre o anumită instrucțiune. Dacă nu cunoașteți sintaxa unei instrucțiuni, selectați-o în editor și apoi apăsați tasta F1. De asemenea, puteți evidenția parametrii diferitelor instrucțiuni Transact-SQL pentru a obține ajutor cu privire la aceștia din Books Online.

SQL Management Studio acceptă SQL Intellisense, care este un tip de instrument de completare automată. Cu alte cuvinte, acest modul sugerează finalizarea cea mai probabilă a elementelor de instrucțiune Transact-SQL introduse parțial.

Object Explorer poate ajuta și la editarea interogărilor. De exemplu, dacă doriți să aflați cum să creați o instrucțiune CREATE TABLE pentru tabelul Employee, faceți clic dreapta pe tabel în Object Explorer și selectați Script Table As --> CREATE to --> New Query Editor Window din meniul contextual care apare. tabele --> Folosind fereastra CREATE --> New Query Editor). Fereastra Editor de interogări care conține instrucțiunea CREATE TABLE astfel creată este prezentată în figura de mai jos. Această capacitate se aplică și altor obiecte, cum ar fi procedurile și funcțiile stocate.

Browserul de obiecte este foarte util pentru afișarea grafică a planului de execuție pentru o anumită interogare. Un plan de execuție a interogării este o opțiune de execuție aleasă de către optimizatorul de interogări dintre mai multe opțiuni posibile pentru executarea unei anumite interogări. Introduceți interogarea necesară în panoul de sus al editorului, selectați o secvență de comenzi din meniul Interogare --> Afișare plan de execuție estimat (Interogare --> Afișare plan de execuție estimat) și planul de execuție pentru această interogare va fi afișat în panoul de jos al ferestrei editorului.

Explorator de soluții

Editarea interogărilor în SQL Server Management Studio se bazează pe metoda soluțiilor. Dacă creați o interogare goală folosind butonul Interogare nouă, aceasta se va baza pe o soluție goală. Acest lucru poate fi văzut prin rularea secvenței de comandă din meniul Vizualizare --> Solution Explorer imediat după deschiderea unei interogări goale.

O decizie poate fi legată de niciunul, unul sau mai multe proiecte. O soluție goală, care nu este asociată cu niciun proiect. Pentru a asocia un proiect cu o soluție, închideți soluția goală, Solution Explorer și Query Editor și creați un nou proiect rulând secvența de comandă Fișier --> Nou --> Proiect. În fereastra Proiect nou care se deschide, selectați opțiunea Scripturi SQL Server din panoul din mijloc. Un proiect este o modalitate de organizare a fișierelor într-o anumită locație. Puteți da un nume proiectului și puteți alege o locație pentru locația lui pe disc. Când creați un nou proiect, o nouă soluție este lansată automat. Puteți adăuga un proiect la o soluție existentă folosind Solution Explorer.

Pentru fiecare proiect creat, Solution Explorer afișează folderele Conexiuni (Conexiuni), Interogări (Solicitări) și Diverse (Diverse). Pentru a deschide o nouă fereastră Editor de interogări pentru un proiect dat, faceți clic dreapta pe folderul Interogări și selectați Interogare nouă din meniul contextual.

Depanare SQL Server

SQL Server, începând cu SQL Server 2008, are un depanator de cod încorporat. Pentru a începe o sesiune de depanare, selectați următoarea secvență de comenzi Debug --> Start Debugging din meniul principal al SQL Server Management Studio. Ne vom uita la funcționarea depanatorului folosind un exemplu folosind un pachet de comenzi. Un lot este o secvență logică de instrucțiuni SQL și extensii procedurale care este trimisă la Motorul bazei de date pentru a executa toate instrucțiunile pe care le conține.

Figura de mai jos prezintă un pachet care numără numărul de angajați care lucrează la un proiect p1. Dacă acest număr este 4 sau mai mult, atunci este afișat un mesaj corespunzător. În caz contrar, sunt afișate numele și prenumele angajaților.

Pentru a opri execuția unui pachet la o anumită instrucțiune, puteți seta puncte de întrerupere, așa cum se arată în figură. Pentru a face acest lucru, faceți clic în partea stângă a liniei pe care doriți să vă opriți. Când începeți depanarea, execuția se oprește la prima linie de cod, care este marcată cu o săgeată galbenă. Pentru a continua execuția și depanarea, executați comanda de meniu Debug --> Continue (Debugging --> Continue). Executarea instrucțiunilor pachetului va continua până la primul punct de întrerupere, iar săgeata galbenă se va opri în acel punct.

Informațiile legate de procesul de depanare sunt afișate în două panouri în partea de jos a ferestrei Editor de interogări. Informațiile despre diferite tipuri de informații de depanare sunt grupate în aceste panouri pe mai multe file. Panoul din stânga conține fila Auto (Automat), Locals (Local) și până la cinci file Vizionare (Vizibil). Panoul din dreapta conține filele Stack de apeluri, Threads, Breakpoints, Command Window, Imediate Window și Output. Fila Localități arată valorile variabilelor, fila Stack de apeluri arată valorile stivei de apeluri, iar fila Puncte de întrerupere arată informații despre punctele de întrerupere.

Pentru a opri procesul de depanare, executați secvența de comenzi din meniul principal Debug --> Stop Debugging sau apăsați butonul albastru de pe bara de instrumente a depanatorului.

În SQL Server 2012, depanatorul încorporat în SQL Server Management Studio a fost îmbunătățit cu câteva caracteristici noi. Acum puteți efectua o serie dintre următoarele operații în el:

    Specificați o condiție de punct de întrerupere. Starea punctului de întrerupere este o expresie SQL a cărei valoare evaluată determină dacă execuția codului va fi oprită la un punct dat sau nu. Pentru a specifica o condiție de punct de întrerupere, faceți clic dreapta pe pictograma roșie pentru punctul de întrerupere dorit și selectați Condiție din meniul contextual. Se deschide caseta de dialog Breakpoint Condition, în care trebuie să introduceți expresia logică necesară. În plus, dacă doriți să opriți execuția dacă expresia este adevărată, atunci ar trebui să setați comutatorul Is True. Dacă execuția trebuie oprită dacă expresia s-a schimbat, atunci trebuie să setați comutatorul When Changed (Changed).

    Specificați numărul de accesări la punctul de întrerupere. Numărul de accesări este condiția pentru oprirea execuției la un anumit punct, bazat pe numărul de ori a fost lovit acel punct de întrerupere în timpul execuției. Când numărul specificat de iterații și orice altă condiție specificată pentru punctul de întrerupere dat este atins, depanatorul efectuează acțiunea specificată. Condiția de întrerupere bazată pe numărul de accesări poate fi una dintre următoarele:

    1. necondiționat (acțiune implicită) (Break always);

      dacă numărul de accesări este egal cu valoarea specificată (Pauza când numărul lui este egal cu o valoare specificată);

      dacă numărul de accesări este un multiplu al valorii specificate (Pauza când numărul de accesări este egal cu un multiplu al unei valori specificate);

      dacă numărul de accesări este egal sau mai mare decât valoarea specificată (Încărcare atunci când numărul lui este mai mare sau egal cu o valoare specificată).

    Pentru a seta numărul de accesări în timpul depanării, faceți clic dreapta pe pictograma punctului de întrerupere dorit din fila Puncte de întrerupere, selectați Număr de accesări din meniul contextual, apoi selectați una dintre următoarele condiții în caseta de dialog Număr de accesări ale punctului de întrerupere care apare: din lista de mai sus . Pentru opțiunile care necesită o valoare, introduceți-o în caseta de text din dreapta listei derulante de condiții. Pentru a salva condițiile specificate, faceți clic pe butonul OK.

    Specificați un filtru de punct de întrerupere. Filtrul punctului de întrerupere limitează operarea punctului de întrerupere doar la computerele, procesele sau firele specificate. Pentru a seta un filtru de punct de întrerupere, faceți clic dreapta pe punctul de întrerupere dorit și selectați Filtru din meniul contextual. Apoi, în caseta de dialog Breakpoint Filters care se deschide, specificați resursele la care doriți să limitați execuția acestui punct de întrerupere. Pentru a salva condițiile specificate, faceți clic pe OK.

    Specificați o acțiune la un punct de întrerupere. Condiția When Hit specifică acțiunea care trebuie întreprinsă atunci când execuția pachetului atinge punctul de întrerupere dat. În mod implicit, când atât condiția de numărare a hit-urilor, cât și condiția de oprire sunt îndeplinite, atunci execuția este întreruptă. Alternativ, puteți afișa un mesaj prespecificat.

    Pentru a specifica ce trebuie făcut atunci când este lovit un punct de întrerupere, faceți clic dreapta pe pictograma roșie pentru punctul de întrerupere dorit și selectați Când este lovit din meniul contextual. În caseta de dialog When Breakpoint is Hit care se deschide, selectați acțiunea dorită. Pentru a salva condițiile specificate, faceți clic pe butonul OK.

    Utilizați fereastra Quick Watch. În fereastra QuickWatch, puteți vizualiza valoarea unei expresii Transact-SQL și apoi salvați acea expresie în fereastra Watch Values. Pentru a deschide fereastra Quick Watch, selectați Quick Watch din meniul Debug. Expresia din această fereastră poate fi fie selectată din lista derulantă Expresie (Expresie), fie introduceți-o în acest câmp.

    Folosiți indicația pentru informații rapide. Când treceți cu mouse-ul peste un identificator de cod, instrumentul Informații rapide afișează declarația sa într-o fereastră pop-up.

Expresii de tabel numite subinterogări, care sunt folosite acolo unde este așteptat un tabel. Există două tipuri de expresii de tabel:

    tabele derivate;

    expresii de tabel generalizate.

Aceste două forme de expresii de tabel sunt discutate în următoarele subsecțiuni.

Tabele derivate

Tabel derivat este o expresie de tabel inclusă în clauza FROM a unei interogări. Tabelele derivate pot fi utilizate atunci când utilizarea aliasurilor de coloană nu este posibilă deoarece traducătorul SQL procesează o altă instrucțiune înainte ca aliasul să fie cunoscut. Exemplul de mai jos arată o încercare de a utiliza un alias de coloană într-o situație în care o altă clauză este procesată înainte ca aliasul să fie cunoscut:

UTILIZAȚI SampleDb; SELECTARE MONTH(EnterDate) ca enter_month FROM Works_on GROUP BY enter_month;

Încercarea de a executa această interogare va returna următorul mesaj de eroare:

Mesajul 207, Nivel 16, Stare 1, Rând 5 Nume nevalid de coloană „enter_month”. (Mesajul 207: Nivelul 16, Stare 1, Linia 5 Nume de coloană nevalid enter_month)

Motivul erorii este că clauza GROUP BY este procesată înainte ca lista corespunzătoare a instrucțiunii SELECT să fie procesată, iar alias-ul coloanei enter_month nu este cunoscut când grupul este procesat.

Această problemă poate fi rezolvată folosind o vizualizare care conține interogarea anterioară (fără clauza GROUP BY), deoarece clauza FROM este executată înaintea clauzei GROUP BY:

UTILIZAȚI SampleDb; SELECT enter_month FROM (SELECT MONTH(EnterDate) ca enter_month FROM Works_on) AS m GROUP BY enter_month;

Rezultatul acestei interogări va fi astfel:

De obicei, o expresie de tabel poate fi plasată oriunde într-o instrucțiune SELECT unde ar putea apărea numele tabelului. (Rezultatul unei expresii de tabel este întotdeauna un tabel sau, în cazuri speciale, o expresie.) Următorul exemplu arată utilizarea unei expresii de tabel în lista select a unei instrucțiuni SELECT:

Rezultatul acestei interogări este:

Expresii de tabel generice

Expresie comună de tabel (OTB) (CTE pe scurt) este o expresie de tabel cu nume acceptată de limbajul Transact-SQL. Expresiile comune de tabel sunt utilizate în următoarele două tipuri de interogări:

    nerecursiv;

    recursiv.

Aceste două tipuri de solicitări sunt discutate în secțiunile următoare.

OTB și interogări nerecursive

Forma nerecursivă a OTB poate fi utilizată ca alternativă la tabelele și vizualizările derivate. De obicei, OTB este definit de CU clauzeși o interogare suplimentară care se referă la numele folosit în clauza WITH. În Transact-SQL, semnificația cuvântului cheie WITH este ambiguă. Pentru a evita ambiguitatea, instrucțiunea care precede instrucțiunea WITH trebuie terminată cu punct și virgulă.

UTILIZAȚI AdventureWorks2012; SELECTează SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") AND Freight > (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader "Order05Due) =(OrderDate05) ")/2,5;

Interogarea din acest exemplu selectează comenzi ale căror taxe totale (TotalDue) sunt mai mari decât media tuturor taxelor și ale căror taxe de transport (Freight) sunt mai mari de 40% din taxele medii. Proprietatea principală a acestei interogări este volumul său, deoarece interogarea imbricată trebuie scrisă de două ori. O modalitate posibilă de a reduce domeniul de aplicare al construcției de interogare ar fi crearea unei vizualizări care conține o subinterogare. Dar această soluție este puțin complicată, deoarece necesită ca vizualizarea să fie creată și apoi ștearsă după ce interogarea este terminată. Cea mai bună abordare ar fi crearea unui OTB. Exemplul de mai jos arată utilizarea OTB non-recursivă, care scurtează definiția interogării de mai sus:

UTILIZAȚI AdventureWorks2012; WITH price_calc(year_2005) AS (SELECT AVG(TotalDue) FROM Sales.SalesOrderHeader WHERE YEAR(OrderDate) = "2005") SELECT SalesOrderID FROM Sales.SalesOrderHeader WHERE TotalDue > (SELECT year_2005 FROM price >_calc)_2 FROM price) (SELECT) /2,5;

Sintaxa clauzei WITH în interogările nerecursive este următoarea:

Parametrul cte_name este numele OTB care definește tabelul rezultat, iar parametrul column_list este lista de coloane din expresia tabelului. (În exemplul de mai sus, OTB este numit price_calc și are o coloană, year_2005.) Parametrul inner_query reprezintă o instrucțiune SELECT care specifică setul de rezultate al expresiei de tabel corespunzătoare. Expresia de tabel definită poate fi apoi utilizată în interogarea_exterioară. (Interogarea exterioară din exemplul de mai sus utilizează OTB price_calc și coloana sa year_2005 pentru a simplifica interogarea dublu imbricată.)

OTB și interogări recursive

Această secțiune prezintă material de complexitate crescută. Prin urmare, atunci când îl citiți pentru prima dată, este recomandat să îl săriți peste el și să reveniți la el mai târziu. OTB-urile pot fi recursive deoarece OTB-urile pot conține referințe la ei înșiși. Sintaxa de bază OTB pentru o interogare recursivă arată astfel:

Parametrii cte_name și column_list au aceeași semnificație ca în OTB pentru interogările nerecursive. Corpul clauzei WITH este format din două interogări unite prin instrucțiune UNIREA TOȚI. Prima interogare este apelată o singură dată și începe să acumuleze rezultatul recursiunii. Primul operand al operatorului UNION ALL nu se referă la un OTB. Această interogare se numește interogare de referință sau sursă.

A doua interogare conține un link către OTB și reprezintă partea sa recursivă. Din această cauză, se numește membru recursiv. În primul apel către partea recursivă, referința OTB reprezintă rezultatul interogării de referință. Membrul recursiv folosește rezultatul primului apel la interogare. După aceea, sistemul apelează din nou partea recursivă. Un apel către un membru recursiv se termină atunci când un apel anterior la acesta returnează un set de rezultate gol.

Operatorul UNION ALL se alătură rândurilor care s-au acumulat până acum, precum și rândurilor suplimentare adăugate de apelul curent membrului recursiv. (Prezența operatorului UNION ALL înseamnă că rândurile duplicate nu vor fi eliminate din rezultat.)

În cele din urmă, parametrul outer_query definește interogarea externă pe care OTB o folosește pentru a obține toate apelurile către uniunea ambilor membri.

Pentru a demonstra forma recursivă a OTB, folosim un tabel Avion definit și populat cu codul prezentat în exemplul de mai jos:

UTILIZAȚI SampleDb; CREATE TABLE Avion (ContainingAssembly VARCHAR(10), ContainedAssembly VARCHAR(10), QuantityContained INT, UnitCost DECIMAL(6,2)); INSERT INTO Airplane VALUES ("Avion", "Fuselaj", 1, 10); INSERT INTO Airplane VALUES ("Avion", "Aripi", 1, 11); INSERT INTO Airplane VALUES ("Avion", "Coada", 1, 12); INSERT INTO Airplane VALUES („Fuselaj”, „Salon”, 1, 13); INSERT INTO Airplane VALUES ("Fuselaj", "Cockpit", 1, 14); INSERT INTO Airplane VALUES („Fuselaj”, „Nas”, 1, 15); INSERT INTO Airplane VALUES(„Salon”, NULL, 1,13); INSERT INTO Airplane VALUES(„cabină”, NULL, 1, 14); INSERT INTO Airplane VALUES(„Nas”, NULL, 1, 15); INSERT INTO Airplane VALUES(„Aripi”, NULL,2, 11); INSERT INTO Airplane VALUES(„Coada”, NULL, 1, 12);

Tabelul Avion are patru coloane. Coloana ContainingAssembly definește ansamblul, iar coloana ContainedAssembly definește părțile (una câte una) care alcătuiesc ansamblul corespunzător. Figura de mai jos prezintă o ilustrare grafică a unui posibil tip de aeronavă și a părților sale constitutive:

Tabelul Avion este format din următoarele 11 rânduri:

Următorul exemplu utilizează clauza WITH pentru a defini o interogare care calculează costul total al fiecărei build:

UTILIZAȚI SampleDb; WITH list_of_parts(assembly1, amount, cost) AS (SELECT ContainingAssembly, QuantityContained, UnitCost FROM Airplane WHERE ContainedAssembly IS NULL UNION ALL SELECT a.ContainingAssembly, a.QuantityContained, CAST(l.cantity * l.cost AS DECIMAL) ) FROM list_of_pieces l, Avion a WHERE l.assembly1 = a.ContainedAssembly) SELECT assembly1 "Piesă", cantitate "Cantitate", cost "Preț" FROM list_of_pieces;

Clauza WITH definește o listă OTB numită list_of_parts, constând din trei coloane: asamblare1, cantitate și cost. Prima instrucțiune SELECT din exemplu este apelată o singură dată pentru a stoca rezultatele primului pas al procesului recursiv. Instrucțiunea SELECT de pe ultima linie a exemplului afișează următorul rezultat.

Fiecare dintre noi întâlnește și folosește în mod regulat diverse baze de date. Când selectăm o adresă de e-mail, lucrăm cu o bază de date. Bazele de date folosesc servicii de căutare, bănci pentru a stoca datele clienților și așa mai departe.

Dar, în ciuda utilizării constante a bazelor de date, chiar și pentru mulți dezvoltatori de sisteme software există multe „puncte albe” din cauza interpretărilor diferite ale acelorași termeni. Vom oferi o scurtă definiție a termenilor de bază ale bazei de date înainte de a analiza limbajul SQL. Asa de.

Bază de date - un fișier sau un set de fișiere pentru stocarea structurilor ordonate de date și a relațiilor lor. Foarte des, o bază de date se numește sistem de management - este doar un depozit de informații într-un anumit format și poate funcționa cu diverse DBMS.

Masa - Să ne imaginăm un folder care stochează documente grupate după un anumit atribut, de exemplu, o listă de comenzi pentru ultima lună. Acesta este tabelul din computer. Un tabel separat are propriul nume unic.

Tip de date - tipul de informații care pot fi stocate într-o anumită coloană sau rând. Pot fi numere sau text de un anumit format.

Coloană și rând- toți am lucrat cu foi de calcul care au și rânduri și coloane. Orice bază de date relațională funcționează cu tabele în același mod. Rândurile sunt uneori numite înregistrări.

cheia principala- fiecare rând de tabel poate avea una sau mai multe coloane pentru a-l identifica în mod unic. Fără o cheie primară, este foarte dificil să actualizați, să modificați și să ștergeți rândurile dorite.

Ce este SQL?

SQL(Engleză - limbaj de interogare structurat) a fost dezvoltat doar pentru lucrul cu baze de date și este în prezent standardul pentru toate DBMS populare. Sintaxa limbajului constă dintr-un număr mic de operatori și este ușor de învățat. Dar, în ciuda simplității externe, permite crearea de interogări sql pentru operații complexe cu o bază de date de orice dimensiune.

Din 1992 a existat un standard general acceptat numit ANSI SQL. Definește sintaxa și funcțiile de bază ale operatorilor și este susținut de toți liderii de piață DBMS, cum ar fi ORACLE. Este imposibil să acoperim toate posibilitățile limbajului într-un articol mic, așa că vom lua în considerare pe scurt doar interogările SQL de bază. Exemplele arată clar simplitatea și posibilitățile limbajului:

  • crearea de baze de date și tabele;
  • eșantionarea datelor;
  • adăugarea înregistrărilor;
  • modificarea și ștergerea informațiilor.

Tipuri de date SQL

Toate coloanele dintr-un tabel de bază de date stochează același tip de date. Tipurile de date din SQL sunt aceleași ca și în alte limbaje de programare.

Crearea de tabele și baze de date

Există două moduri de a crea baze de date noi, tabele și alte interogări în SQL:

  • prin consola DBMS
  • Utilizarea instrumentelor de administrare interactive incluse cu serverul de baze de date.

O nouă bază de date este creată de către operator CREAȚI BAZĂ DE DATE<наименование базы данных>; . După cum puteți vedea, sintaxa este simplă și concisă.

Creăm tabele în baza de date folosind instrucțiunea CREATE TABLE cu următorii parametri:

  • numele tabelului
  • numele coloanelor și tipurile de date

De exemplu, să creăm un tabel de mărfuri cu următoarele coloane:

Cream un tabel:

CREAȚI TABEL Marfa

(commodity_id CHAR(15) NOT NULL,

vendor_id CHAR(15) NOT NULL,

nume_marfă CHAR(254) NULL,

preț_marfă DECIMAL(8,2) NULL,

commodity_desc VARCHAR(1000) NULL);

Tabelul are cinci coloane. După numele vine tipul de date, coloanele sunt separate prin virgule. Valoarea unei coloane poate fi goală (NULL) sau trebuie completată (NOT NULL), iar aceasta este determinată în momentul creării tabelului.

Selectarea datelor dintr-un tabel

Operatorul de selecție a datelor este cea mai frecvent utilizată interogare SQL. Pentru a obține informații, trebuie să specificați ce vrem să alegem dintr-un astfel de tabel. Mai întâi un exemplu simplu:

SELECTAȚI nume_marfă FROM Mărfuri

După instrucțiunea SELECT, specificăm numele coloanei pentru obținerea informațiilor, iar FROM definește tabelul.

Rezultatul executării interogării va fi toate rândurile de tabel cu valori Commodity_name în ordinea în care au fost introduse în baza de date, adică. fără nicio sortare. O clauză ORDER BY suplimentară este folosită pentru a ordona rezultatul.

Pentru a interoga pe mai multe câmpuri, enumerați-le separate prin virgule, ca în exemplul următor:

SELECTAȚI ID-ul mărfii, numele_marfei, prețul_marfei FROM Mărfuri

Este posibil să obțineți valoarea tuturor coloanelor dintr-un rând ca rezultat al interogării. Pentru aceasta, se folosește semnul „*”:

SELECTAȚI * DIN MARFĂ

  • În plus, SELECT acceptă:
  • Sortarea datelor (instrucțiunea ORDER BY)
  • Selectați în funcție de condiții (UNDE)
  • Termen de grupare (GROUP BY)

Adăugarea unei linii

Pentru a adăuga un rând la un tabel, sunt folosite interogări SQL cu instrucțiunea INSERT. Adăugarea se poate face în trei moduri:

  • adăugați o nouă linie întreagă;
  • parte dintr-un șir;
  • rezultatele interogării.

Pentru a adăuga un rând complet, trebuie să specificați numele tabelului și valorile coloanelor (câmpurilor) noului rând. Iată un exemplu:

INSERT INTO Commodity VALUES ("106", "50", "Coca-Cola", "1,68", "Fără alcool ,)

Exemplul adaugă un produs nou la tabel. Valorile sunt specificate după VALUES pentru fiecare coloană. Dacă nu există o valoare corespunzătoare pentru coloană, atunci trebuie specificat NULL. Coloanele sunt populate cu valori în ordinea specificată la crearea tabelului.

Dacă adăugați doar o parte dintr-un rând, trebuie să specificați în mod explicit numele coloanelor, ca în exemplu:

INSERT INTO Commodity (commodity_id, vendor_id, commodity_name)

VALUES ("106 ", '50", "Coca Cola",)

Am introdus doar identificatorii produsului, furnizorul și numele acestuia, iar restul câmpurilor am lăsat goale.

Adăugarea rezultatelor interogării

INSERT este folosit în primul rând pentru a adăuga rânduri, dar poate fi folosit și pentru a adăuga rezultatele unei instrucțiuni SELECT.

Schimbați datele

Pentru a modifica informațiile din câmpurile unui tabel de bază de date, trebuie să utilizați instrucțiunea UPDATE. Operatorul poate fi utilizat în două moduri:

  • Toate rândurile din tabel sunt actualizate.
  • Doar pentru o anumită linie.

UPDATE constă din trei elemente principale:

  • tabelul în care este necesar să se facă modificări;
  • numele câmpurilor și noile lor valori;
  • condițiile de selectare a rândurilor de schimbat.

Luați în considerare un exemplu. Să presupunem că prețul unui produs cu ID=106 s-a modificat, așa că acest rând trebuie actualizat. Scriem următorul operator:

UPDATE Mărfuri SET pretul_marfă = "3.2" WHERE id_marfă = "106"

Am specificat numele tabelului, în cazul nostru Marfă, unde se va efectua actualizarea, apoi după SET - noua valoare a coloanei și am găsit înregistrarea dorită prin specificarea valorii ID dorite în WHERE.

Pentru a modifica mai multe coloane, specificați mai multe perechi coloană-valoare separate prin virgule după instrucțiunea SET. Să ne uităm la un exemplu în care numele și prețul produsului sunt actualizate:

UPDATE Commodity SET commodity_name='Fanta', commodity_price = "3.2" WHERE commodity_id = "106"

Pentru a șterge informații dintr-o coloană, o puteți seta la NULL dacă structura tabelului o permite. Trebuie amintit că NULL este exact „nicio” valoare și nu zero sub formă de text sau număr. Eliminați descrierea produsului:

UPDATE Commodity SET commodity_desc = NULL WHERE commodity_id = "106"

Eliminarea rândurilor

Interogările SQL pentru ștergerea rândurilor dintr-un tabel sunt executate cu instrucțiunea DELETE. Există două cazuri de utilizare:

  • anumite rânduri din tabel sunt șterse;
  • toate rândurile din tabel sunt șterse.

Un exemplu de ștergere a unui rând dintr-un tabel:

DELETE FROM Commodity WHERE commodity_id = „106”

Dupa DELETE FROM specificam numele tabelului in care se vor sterge randurile. Clauza WHERE conține o condiție prin care rândurile vor fi selectate pentru ștergere. În exemplu, ștergem linia de produse cu ID=106. Specificarea UNDE este foarte importantă. omiterea acestei declarații va șterge toate rândurile din tabel. Acest lucru este valabil și pentru modificarea valorii câmpurilor.

Instrucțiunea DELETE nu specifică numele coloanelor sau metacaracterele. Îndepărtează complet rândurile, dar nu poate elimina o singură coloană.

Utilizarea SQL în Microsoft Access

Folosit de obicei interactiv pentru a crea tabele, baze de date, pentru a gestiona, modifica, analiza date din baza de date și pentru a implementa interogări SQL Access printr-un designer de interogări interactiv convenabil (Query Designer), folosind care puteți construi și executa imediat instrucțiuni SQL de orice complexitate.

Este acceptat și modul de acces la server, în care Access DBMS poate fi folosit ca generator de interogări SQL către orice sursă de date ODBC. Această capacitate permite aplicațiilor Access să interacționeze cu orice format.

Extensii SQL

Deoarece interogările SQL nu au toate caracteristicile limbajelor de programare procedurale, cum ar fi bucle, ramuri etc., furnizorii de SGBD dezvoltă propria versiune de SQL cu caracteristici avansate. În primul rând, acesta este suport pentru procedurile stocate și operatorii standard ai limbajelor procedurale.

Cele mai comune dialecte ale limbii:

  • Baza de date Oracle - PL/SQL
  • Interbase, Firebird - PSQL
  • Microsoft SQL Server - Transact-SQL
  • PostgreSQL - PL/pgSQL.

SQL pe web

SGBD-ul MySQL este distribuit sub Licența Publică Generală GNU. Există o licență comercială cu capacitatea de a dezvolta module personalizate. Ca parte integrantă, este inclus în cele mai populare ansambluri de servere de Internet, precum XAMPP, WAMP și LAMP, și este cel mai popular DBMS pentru dezvoltarea aplicațiilor pe Internet.

A fost dezvoltat de Sun Microsystems și este întreținut în prezent de Oracle Corporation. Suportă baze de date de până la 64 de terabytes, standard de sintaxă SQL:2003, replicare a bazelor de date și servicii cloud.

SQL- Limbajul de interogare structurat.
În această recenzie, vom lua în considerare cele mai comune tipuri de interogări SQL.
Este definit standardul SQL ANSI(Institutul Național American de Standarde).
SQL este un limbaj destinat în mod special bazelor de date relaționale.

Diviziunea SQL:


DDL
(Limbajul de definire a datelor) - așa-numitul Schema Description Language în ANSI, constă din comenzi care creează obiecte (tabele, indexuri, vizualizări și așa mai departe) în baza de date.
DML(Limbajul de manipulare a datelor) este un set de comenzi care determină ce valori sunt prezente în tabele la un moment dat.
DCD(Limbajul de gestionare a datelor) constă în mijloace care determină dacă să permită utilizatorului să efectueze sau nu anumite acțiuni. Ele fac parte din DDL în ANSI. Nu uitați aceste nume. Acestea nu sunt limbi diferite, ci secțiuni de comenzi SQL grupate după funcția lor.

Tipuri de date:

SQL Server - Tipuri de date

Descriere

bigint (int 8)

bigint (int 8)

binar(n)

binar(n) sau imagine

caracter
(sinonim char)

naţional caracter sau ntext

caracterul variind(sinonim char variind varchar)

caracterul național variabil sau ntext

datetime

datetime

zecimal

el este numeric

precizie dubla

precizie dubla

întreg (int 4) (sinonim: int)

întreg (int 4)

caracter national(sinonim: caracter national, nchar)

caracter national

Numeric(sinonime: zecimal, dec)

caracterul național variabil(sinonime: caracterul național variabil, nvarchar)

caracterul național variabil

Smalldatetime

datetime

smallint (int 2)

smallint (int 2)

Bani mici

sql_variant

Nu mai este suportat

Ntext
Începând cu SQL Server 2005, nu este recomandat pentru utilizare.

Timestamp-ul

Nu sunt acceptate

tinyint (int 1)

tinyint (int 1)

Identificator unic

identificator unic

varbinar(n)

varbinar(n) sau imagine

smalldatetime

datetime

smallint (int 2)

smallint (int 2)

bani mici

sql_variant

Nu sunt acceptate

timestamp-ul

Nu sunt acceptate

tinyint (int 1)

tinyint (int 1)

identificator unic

identificator unic

varbinar(n)

varbinar(n) sau imagine

Tabel cu tipuri de date în SQL Server 2000

CE ESTE CERERE?

Cerere este comanda pe care o dați programului dumneavoastră de bază de date. Interogările fac parte din limbajul DML. Toate interogările din SQL constau într-o singură comandă. Structura acestei comenzi este înșelător de simplă, deoarece trebuie să o extindeți pentru a efectua evaluări extrem de complexe și manipulări de date.

Comanda SELECT:

SELECTAȚI„Selectați” este comanda cel mai des folosită, este folosită pentru a selecta date dintr-un tabel.
Tip de interogare folosind SELECT:

SELECT ID, user_name, city, birth_day FROM users_base;

O astfel de interogare va afișa din tabelul users_base toate valorile coloanelor specificate cu virgulă după comanda SELECT. De asemenea, puteți afișa toate coloanele cu un singur caracter, * i.e. SELECT * FROM useri_base ; - o astfel de interogare va afișa toate datele din tabel.

Structura comenzii SELECT:

SELECT (numele coloanelor separate prin virgulă care urmează să fie afișate în interogare) FROM (numele tabelului în baza de date)
este cel mai simplu tip de cerere. Există comenzi suplimentare pentru comoditatea extragerii datelor (vezi mai jos „Funcții”)

Comenzi DML:

Valorile pot fi plasate și eliminate din câmpuri cu trei comenzi DML (Data Manipulation Language):
INTRODUCE(Introduce)
ACTUALIZAȚI(actualizare, modificare),
ȘTERGE(stergere)

Comanda INSERT:

INSERT INTO users_base (nume_utilizator, oraș, ziua_nașterii) VALUES ('Alexander', 'Rostov', '20.06.1991');

Comanda INSERT vine cu prefixul INTO (în la - în), apoi între paranteze sunt numele coloanelor în care trebuie să inserăm date, apoi vine comanda VALUES (valori), iar în paranteze sunt valorile la rândul lor (este imperativ să respectați ordinea valorilor cu coloane, valorile trebuie să vină în aceeași ordine cu coloanele pe care le specificați).

Comanda UPDATE:

UPDATE users_base SET user_name = 'Alex';

Comanda UPDATE actualizează valorile dintr-un tabel. Mai întâi vine comanda UPDATE în sine, apoi numele tabelului, după comanda SET (set) apoi numele coloanei și valoarea acesteia între ghilimele (ghilimele se pun dacă valoarea are format șir, dacă este o valoare numerică și coloana este nelegate la tipul de date vchar și la orice alte tipuri de șir, ghilimelele sunt lipsite de sens.)

Comanda DELETE:

DELETE FROM users_base WHERE user_name = 'Vasily';

Comanda DELETE șterge întreaga linie, determină linia după criteriul WHERE (Unde). În acest caz, această interogare ar elimina toate rândurile în care valoarea coloanei user_name era Vasily. Despre criteriile UNDE și altele vom vorbi puțin mai târziu.

Criterii, funcții, condiții etc. care ne ajută în SQL:

Clauza WHERE a comenzii SELECT și alte comenzi DML care vă permit să setați predicate a căror condiție poate fi fie adevărată, fie falsă pentru orice rând dintr-un tabel. Comanda extrage numai acele rânduri din tabel pentru care o astfel de afirmație este adevărată.
Exemplu:
SELECT ID, oraș, ziua_nașterii FROM utilizatori_bază WHERE nume_utilizator = 'Alex';- o astfel de interogare va afișa doar acele rânduri care se vor potrivi cu condiția WHERE și anume toate rândurile în care coloana user_name are valoarea Alex.

ORDER BY - condiție pentru sortarea rândurilor selectate. Are 2 criterii ASC și DESC. ASC (sortați de la A la Z sau de la 0 la 9)

DESC (opusul ASC).
Exemplu:
SELECTAȚI id, orașul, ziua_nașterii FROM utilizatori_bază ORDER BY user_name ASC; - o astfel de interogare va afișa valorile sortate după coloana user_name de la A la Z (A-Z; 0-9)

Această condiție poate fi folosită și împreună cu clauza WHERE.
Exemplu:
SELECTează id, oraș, ziua_nașterii FROM utilizatori_bază WHERE nume_utilizator = 'Alex' ORDER BY id ASC;

DISTINCT (Distinct) este un argument care vă oferă o modalitate de a elimina valorile duplicate din clauza dvs. SELECT. Acestea. dacă aveți valori repetate într-o coloană, să spunem user_name, atunci DISTINCT va afișa doar unul pentru dvs., de exemplu, aveți 2 persoane numite Alexey în baza de date, atunci o interogare folosind funcția DISTINCT va afișa doar 1 valoare care se intalneste primul...
Exemplu:
SELECTAȚI DISTINCT nume_utilizator FROM utilizatori_bază;- o astfel de interogare va afișa valorile tuturor înregistrărilor în coloana user_name, dar acestea nu vor fi repetate, de exemplu. dacă ați avut un număr infinit de valori duplicate, acestea nu vor fi afișate...

ȘI - ia ca argumente doi booleeni (sub forma A ȘI B) și le evaluează în raport cu adevărat pentru a vedea dacă ambele sunt adevărate.
Exemplu:
SELECT * FROM users_base WHERE city = 'Rostov' AND user_name = 'Alexander';- afișează toate valorile din tabelul în care numele orașului apare într-o singură linie (în acest caz, Rostov și numele de utilizator Alexander.

SAU - ia doi booleeni (sub forma A SAU B) ca argumente și evaluează corectitudinea dacă unul dintre ei este adevărat.

SELECT * FROM users_base WHERE oraș = 'Rostov' SAU user_name = 'Alexander';- afișează toate valorile din tabelul în care linia conține numele orașului Rostov sau numele de utilizator Alexander.

NOT - ia un singur boolean (în forma NOT A) ca argumente și își schimbă valoarea din false în adevărat sau adevărat în fals.
SELECT * FROM users_base WHERE city = 'Rostov' OR NOT user_name = 'Alexander';- va afișa toate valorile din tabelul în care numele orașului Rostov apare într-o singură linie sau numele de utilizator nu va fi exact Alexander.

IN - definește un set de valori în care valoarea dată poate fi inclusă sau nu.
SELECT * FROM users_base WHERE city IN ('Vladivostok', 'Rostov');- o astfel de interogare va afișa toate valorile din tabel care conțin numele orașelor specificate în coloana orașului

Între - similar cu operatorul IN. Spre deosebire de specificarea prin numere dintr-o mulțime, așa cum face IN, BETWEEN definește un interval ale cărui valori trebuie să scadă pentru a face predicatul adevărat.
SELECT * FROM users_base WHERE id-ul INTRE 1 SI 10;- afișează toate valorile din tabel care vor fi în intervalul de la 1 la 10 în coloana id

COUNT - produce numere de rând sau valori non-NULL ale câmpurilor pe care le-a selectat interogarea.
SELECTARE NUMĂR (*) FROM utilizatori_bază ;- afișează numărul de rânduri din tabelul dat.
SELECTAȚI NUMĂR (DISTINCT nume_utilizator) FROM utilizatori_bază ;- va afișa numărul de linii cu nume de utilizator (nu se repetă)

SUM - Produce suma aritmetică a tuturor valorilor selectate în câmpul dat.
SELECTAȚI SUMA (id) FROM utilizatori_bază;- afișează suma valorilor tuturor rândurilor coloanei id.

AVG - face media tuturor valorilor selectate ale câmpului dat.
SELECTAȚI AVG (id) FROM users_base ;- va afișa media tuturor valorilor selectate din coloana ID

MAX - Produce cea mai mare dintre toate valorile selectate în câmpul dat.

MIN - Produce cea mai mică dintre toate valorile selectate pentru câmpul dat.

Crearea tabelului:

CREATE TABLE users_base(id integer, user_name text, city text, birth_day datetime);- executarea unei astfel de comenzi va duce la crearea unui tabel, conform căruia am dat exemple... Totul este simplu aici, scriem comanda CREATE TABLE, apoi numele tabelului pe care vrem să-l creăm, apoi între paranteze, separate prin virgule, numele coloanelor și tipul lor de date. Acesta este modul standard de a crea un tabel în SQL. Acum voi da un exemplu de creare de tabele în SQL Server 2005:

ACTIVATĂ ANSI_NULLS
MERGE
ACTIVATĂ QUOTED_IDENTIFIER
MERGE
DACĂ NU EXISTĂ (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") ȘI introduceți (N"U"))
ÎNCEPE
CREATE TABLE .(

NU NUL,
NU NUL,
NU NUL,
CHEIE PRIMARĂ CLUSTER
ASC


Sfârşit
MERGE
ACTIVATĂ ANSI_NULLS
MERGE
ACTIVATĂ QUOTED_IDENTIFIER
MERGE
DACĂ NU EXISTĂ (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") ȘI introduceți (N"U"))
ÎNCEPE
CREATE TABLE .(
IDENTITATE(1,1) NU NUL,
NUL,
NUL,
CHEIE PRIMARĂ CLUSTER
ASC
)CU(IGNORE_DUP_KEY=OFF) ACTIVAT
) ON TEXTIMAGE_ON
Sfârşit
MERGE
ACTIVATĂ ANSI_NULLS
MERGE
ACTIVATĂ QUOTED_IDENTIFIER
MERGE
DACĂ NU EXISTĂ (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N".") ȘI introduceți (N"U"))
ÎNCEPE
CREATE TABLE .(
IDENTITATE(1,1) NU NUL,
NUL,
NUL,
CHEIE PRIMARĂ CLUSTER
ASC
)CU(IGNORE_DUP_KEY=OFF) ACTIVAT
) PE
Sfârşit

Sintaxa în SQL Server 2005 este un alt subiect, am vrut doar să arăt că am descris elementele de bază ale programării SQL, puteți ajunge singuri la înălțime cunoscând elementele de bază.

Dacă aveți întrebări despre acest subiect, vă rugăm să-mi trimiteți un e-mail.