Ajustați valoarea id-ului de la valorile anterioare. Selectarea și actualizarea rândurilor dintr-o singură mișcare – SQL_CALC_FOUND_ROWS. Câmpuri de calcul Pobudova

De la cine afli cum să devii vikorist? Funcția COUNTîn SQL Server (Transact-SQL) cu sintaxă și aplicații.

Descriere

În SQL Server (Transact-SQL) Funcția COUNT rotește un număr de rânduri dintr-un câmp pentru a forma un set de rezultate.

Sintaxă

Sintaxa pentru funcția COUNT în SQL Server (Transact-SQL):

Sintaxa ABO a funcției COUNT atunci când grupați rezultatele uneia sau mai multor instrucțiuni:

Parameteri chi argumenti

expresie1 , expresie2 , … expresie_n
Expresiile care nu sunt incluse în funcția COUNT pot fi incluse înaintea clauzei GROUP BY, cum ar fi o clauză SQL.
aggregate_expression - acesta este cazul sau expresia ale cărei valori NULL nu vor fi acceptate.
tabele — tabele pentru care trebuie preluate înregistrări. Chiar dacă există un singur tabel, acesta este rearanjat în instrucțiunea FROM.
Condiții WHERE – nu strict vorbind. Rețineți că trebuie să salvați pentru intrările selectate.

Nu este o valoare NULL

Nu toată lumea înțelege, dar funcția COUNT în înregistrările importante unde valoarea definită în COUNT (expresie_agregată) nu este egală cu NULL. Dacă introduceți valori NULL, acesta nu se va porni până când COUNT este clar.

Să ne uităm la un exemplu de funcție COUNT, care arată cum valorile NULL sunt evaluate de funcția COUNT.

De exemplu, dacă aveți un tabel numit piețe:

Acest număr COUNT este 3, deci toate valorile market_id din setul de rezultate NU sunt NULL.

Cu toate acestea, dacă rulați următoarea instrucțiune SELECT, care este un substitut pentru funcția COUNT:

Transact-SQL

SELECTARE NUMĂR (filiali) FROM piețe; --Rezultat: 1

Acest butt COUNT va fi rotit la 1, deci o singură valoare a filialelor din setul de rezultate va fi scrisă NOT NULL. Dacă acesta este primul rând, atunci filials=yes va fi indicat. Acesta este un singur rând care este inclus înainte de a calcula funcția COUNT.

Zastosuvannya

Funcția COUNT poate fi modificată în versiunile mai noi de SQL Server (Transact-SQL):
SQL Server vNext, SQL Server 2016, SQL Server 2015, SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008, SQL Server 2005

Exemplu cu un câmp

Să vedem cum să folosiți funcția SQL Server COUNT pentru a înțelege cum să utilizați funcția COUNT în SQL Server (Transact-SQL).

De exemplu, puteți afla câte contacte aveți cu last_name = Rasputin.

În această aplicație, funcția COUNT a fost specificată cu alias COUNT (*) Număr de contacte. Prin urmare, în setul de rezultate „Numărul de contacte” este afișat ca nume al câmpului.

Exemplu din Wikoristanny DISTINCT

Puteți utiliza operatorul DISTINCT în funcția COUNT. De exemplu, următoarea instrucțiune SQL rotește numărul de departamente unice, chiar dacă unul dintre ele are first_name = 'Samvel'.

Pentru a determina numărul de înregistrări dintr-un tabel MySQL, trebuie să utilizați funcția specială COUNT().

Funcția COUNT() rotește numărul de înregistrări dintr-un tabel care îndeplinesc un anumit criteriu.

Funcția COUNT(expr) ia întotdeauna în considerare acele rânduri în care rezultatul expr NU este NULL.

Problema cu această regulă este că funcția COUNT() folosește o stea ca argument - COUNT(*) . În acest caz, toate rândurile sunt luate în considerare, indiferent dacă sunt NULL sau NOT NULL.

De exemplu, funcția COUNT(*) rotește numărul total de înregistrări dintr-un tabel:

SELECTAȚI COUNT(*) FROM table_name

Cum să stocați un număr mare de înregistrări și să le afișați pe ecran

Exemplu de cod PHP+MySQL pentru actualizarea și afișarea numărului de rânduri:

$res = mysql_query("SELECT COUNT(*) FROM table_name") $row = mysql_fetch_row($res); $total = $rând; // total records echo $ total; ?>

Acest exemplu ilustrează cea mai simplă versiune a funcției COUNT(). Alternativ, la această funcție pot fi adăugate și alte setări.

După ce a specificat o coloană de tabel ca parametru, funcția COUNT(nume_coloană) rotește numărul de înregistrări din acea coloană pentru a înlocui valoarea NULL. Înregistrările cu valori NULL sunt ignorate.

SELECTAȚI COUNT(nume_coloană) FROM nume_tabel

Nu este posibil să utilizați funcția mysql_num_rows(), așa că pentru a afla câte înregistrări există, trebuie să introduceți SELECT * FROM db pentru a selecta toate înregistrările, dar este mai bine să utilizați funcția de numărare .

$rezultat = mysql_query("SELECT COUNT(*) as rec FROM db");

Funcții utile ale COUNT() în aplicație

Axa este un alt capăt al funcției COUNT(). Este posibil să existe o masă înghețată cu un catalog de îngheț, care să conțină identificatorul categoriei și numele înghețului.

VILICHENNYA

Funcții genți

În versiunile de interogare SQL, este adesea necesară editarea datelor în avans. Cu această metodă sunt analizate funcții și expresii speciale.

Este adesea necesar să aflați câte înregistrări corespund unei anumite interogări,Care este valoarea oricărei coloane numerice, valoarea maximă, minimă și medie a acesteia. Și aceasta servește ca o funcție sub-bag (statistică, agregată). Funcțiile Podbag procesează seturi de înregistrări, sarcini, de exemplu, WHERE. Dacă le includeți înaintea listei de articole care urmează instrucțiunii SELECT, tabelul rezultat poate fi folosit ca subset al tabelului bazei de date și valorile calculate folosind aceste funcții. Departelista de funcții ale pungii.

  • COUNT (parametru ) Rotește numărul de intrări atribuite parametrului. Dacă trebuie să preluați un număr de intrări existente, introduceți simbolul stea (*) ca parametru de urmărire. Dacă specificați numele intrării în parametru, funcția rotește numărul de intrări care au aceeași valoare ca NULL. Pentru a determina câte valori diferite să combinați, introduceți cuvântul cheie DISTINCT înainte de numele urmelor. De exemplu:

SELECTARE COUNT(*) FROM Clienti;

SELECTARE COUNT(SUMA) FROM Clienti;

SELECTAȚI COUNT(DIstinct Payment_amount) FROM Clienți;

Următorul pas va fi făcut pentru a vă informa cu privire la modificări:

SELECTARE Regiunea , COUNT(*) FROM Clienti ;

  • SUM (parametru ) Rotește valoarea valorii specificate în parametrul coloanei. Parametrul poate fi modificat pentru a elimina numele articolului. De exemplu:

SELECTAȚI SUMA (Sum_zamovlennya) DE LA Clienți;

Acest virus SQL rotește un tabel care constă dintr-o coloană și o înregistrare și plasează suma tuturor valorilor curente în coloana Total_Amount din tabelul Client.

Să presupunem că tabelul de ieșire are valoarea Order_Amount exprimată în ruble, dar trebuie să calculăm suma totală în dolari. Dacă cursul de schimb curent este același cu 27,8, de exemplu, puteți obține rezultatul dorit folosind următoarea formulă:

SELECTAȚI SUMA (Sum_zamovlennya*27.8) DE LA Clienți;

  • AVG (parametru ) Rotește media aritmetică a tuturor valorilor specificate în parametrul coloanei. Parametrul poate fi folosit pentru a răzbuna situația. De exemplu:

SELECTAȚI AVG (Amount_amount) FROM Clienți;

SELECTAȚI AVG (Amount_amount*27.8) FROM Clienți

UNDE Regiunea<>„Pivnichno-3west”;

  • MAX (parametru ) Rotește valoarea maximă din coloana specificată în parametru. Parametrul poate fi folosit și pentru a contracara situația. De exemplu:

SELECTAȚI MAX(Suma_de_cumpărare) FROM Clienți;

SELECT MAX(Amount_amount*27.8) FROM Clienti

UNDE Regiune<>„Pivnichno-3west”;

  • MIN (parametrul ) Rotește valoarea minimă în coloana specificată în parametru. Parametrul poate fi modificat pentru a răzbuna numele utilizatorului. De exemplu:

SELECTAȚI MIN(Amount_amount) FROM Clienți;

SELECTAȚI MIN (Suma___*27,8) FROM Clienți

UNDE Regiune<>„Pivnichno-3west”;

De fapt, este adesea necesar să deschideți sub-tabelul pentru a afișa valorile totale, medii, maxime și minime ale coloanelor numerice. În acest scop, selectați gruparea (GROUP BY) și sub-funcțiile.

SELECTARE Regiunea, SUM (Sum_zamovlennya) DE LA Clienți

GRUPĂ PE Regiune;

Rezultă un tabel pentru care puteți introduce numele regiunilor și subsumelor pentru a atrage toți clienții din anumite regiuni (Fig. 5).

Acum să aruncăm o privire la extragerea tuturor datelor despre bagaje pentru regiuni:

SELECTARE Regiunea, SUMA, AVG (Sum_zamovlennya), MAX (Suma_zamovlennya), MIN (sumă_bani)

DE LA Clienți

GRUPĂ PE Regiune;

Rezultatul este prezentat în tabelul din Fig. 8. În aplicație, regiunea Ieșire-Vest de vederi din tabelul de ieșire are mai mult de o înregistrare. De asemenea, în tabelul de rezultate, diferite sub-funcții dau valori diferite.

Mic 8. Tabelul Pidsumkova cu sumele tranzacțiilor pe regiune

Când funcțiile subordonate sunt selectate în lista de coloane din instrucțiunea SELECT, anteturile coloanelor corespunzătoare din tabelul rezultat arată ca Expr1001, Expr1002 etc. (sau ceva similar depinde de implementarea SQL). Antetele Prote pentru semnificația sub-funcțiilor și a altor funcții pot fi setate la propria discreție. În acest scop, după instrucțiunea din instrucțiunea SELECT, introduceți următoarea expresie:

AS header_stovptsya

Cuvântul cheie AS (yak) înseamnă că tabelul cu rezultate are o subsecțiune care este responsabilă pentru antetul introdus după AS. Titlul care este atribuit se mai numește și pseudonim. În aplicație (Fig. 9) sunt specificate aliasuri pentru toate punctele care sunt numărate:

SELECTARE Regiunea,

SUMĂ (Sum_zamovlennya) AS [Zagalna sum_zamovlennya],

AVG (Sum_zamovlennya) AS [Sum_zamovlennya medie],

MAX(Amount_of_order) AS Maximum,

MIN (Sum_zamovlennya) AS Minimum,

DE LA Clienți

GRUPĂ PE Regiune;

Mic 9. Tabelul Podsumkova cu sumele tranzacțiilor pe regiune din statutul pseudonimelor companiei

Pseudonimele, care constau din multe cuvinte, separate prin spații, se află lângă brațele pătrate.

Sub-funcțiile pot fi folosite în clauzele SELECT și HAVING, dar nu pot fi folosite în clauzele WHERE. Operatorul HAVING este similar cu operatorul WHERE, cu excepția faptului că selectează înregistrările în grupuri atunci când este subordonat WHERE.

Este posibil să fie nevoie să determinați ce regiuni au mai mulți clienți. Această metodă poate fi rezumată cu următoarea propoziție:

SELECTARE Regiunea, Număr (*)

DE LA Clienți

GRUPĂ DUPĂ Regiune AVÂND NUMĂRARE(*) > 1;

Funcții de procesare a valorii

Când lucrați cu date, de multe ori trebuie să le procesați (rearanjați-l în forma necesară): vedeți rândul într-un rând, eliminați firele și golurile finale, rotunjiți numărul, calculați rădăcina pătrată și calculați ora exactă. SQL are trei tipuri de funcții:

  • funcții de rând;
  • funcții numerice;
  • functii data-ora.

Funcții de rând

Funcțiile de rând iau un parametru de rând și rotesc rândul la NULL după procesare.

  • SUBSTRING (rândul din cob)Rotește comanda pentru a ieși din încărcare, care este indicată ca parametru rând. Contracta începe cu simbolul, numărul de serie al fiecărei indicații din parametrul cob și se termină cu dovzhin specificat în parametrul dozhina. Numerotarea simbolurilor rândului se efectuează cu mâna stângă, începând de la 1. Brațele pătrate de aici indică doar acelea pentru care plasarea în ele nu este simplă. Yaksho viraz PENTRU Dovjin nu se întoarce, apoi se rotește pe rândştiulete și până la sfârșitul rândului de ieșire. Valorile parametrilor cob și dovzhina Trebuie să alegeți astfel încât rândul pe care îl căutați să fie efectiv în mijlocul rândului de ieșire. În caz contrar, funcția SUBSTRING returnează NULL.

De exemplu:

SUBSTRING („Dragă Masha!” DE LA 9 PENTRU 4) Se transformă „Masha”;

SUBSTRING („Dragă Masha!” DIN 9) Se transformă „Masha!”;

SUBSTRING(„Dragă Masha!” DE LA 15) Se rotește NULL.

Puteți utiliza această funcție în expresii SQL, de exemplu:

SELECTAȚI * FROM Clienți

WHERE SUBSTRING(Regiune FROM 1 FOR 5) = „Pivnich”;

  • SUS (rând ) ¦ traduceți toate caracterele specificate în parametrul rând în majuscule.
  • JOS (rând ) converti toate caracterele specificate în parametrul rând în minuscule.
  • TRIM (LEADING | TRAILING | BOTH [„simbol”] FROM row). ) afișează simboluri de încărcare de început (LEADING), de final (TRAILING) sau alte (AMBEELE). În spatele simbolului promoțional care apare se află un spațiu (" "), care este posibil să nu fie indicat. Cel mai adesea, această funcție este utilizată pentru curățarea degajărilor.

De exemplu:

TRIM (LEADING "" FROM "city of St. Petersburg") wraps "city of St. Petersburg";

TRIM (TRALING „DIN „orașul Sankt Petersburg”) se rotește „locul Sankt Petersburg”;

TRIM (AMBELE „„DIN” locul Sankt Petersburg”) se transformă în „locul Sankt Petersburg”;

TRIM(BOTH FROM „orașul Sankt Petersburg”) se rotește „orașul Sankt Petersburg”;

TRIM(AMBELE „g” FROM „orașul Sankt Petersburg”) se transformă în „familie din Sankt Petersburg”.

Dintre aceste funcții, cele mai frecvent utilizate sunt SUBSTRING() și TRIM().

Funcții numerice

Funcțiile numerice, ca parametri, pot accepta date de tip numeric, dar în schimb rotesc numărul NULL (valoare neevaluată).

  • POZIȚIA ( wholeRow ÎN rând) ¦ caută introducerea rândului țintă în valorile rândului. Dacă căutarea are succes, funcția rotește numărul de poziție al primului caracter, în caz contrar 0. Dacă întregul rând are o dublare zero (de exemplu, rândul " "), atunci funcția se rotește cu 1. Dacă doriți unul dintre parametrii să aibă o valoare NULL, apoi rotiți Există NULL. Numerotarea simbolurilor de rând se face cu mâna stângă, începând de la 1.

De exemplu:

POZIȚIA ("e" ÎN "Bună ziua tuturor") Rotiți 5;

POZIȚIA („toată lumea” ÎN „Salut tuturor”) rotiți 8;

POZIȚIA (""Bună ziua tuturor") rotiți 1;

POZIȚIE(„Bună ziua!” ÎN „Bună ziua tuturor”) Se rotește 0.

Tabelul Clienți (div. Fig. 1) are secțiunea Adrese, lângă numele locului, codul poștal, numele străzii și alte date. Poate fi necesar să selectați înregistrări despre clienții care amână. Deci, dacă trebuie să selectați înregistrări pentru clienții care locuiesc în Sankt Petersburg, puteți utiliza rapid următoarea interogare SQL:

SELECTAȚI * FROM Clienți

UNDE POZIȚIA (Adrese „St. Petersburg” ÎN) > 0;

Dragă, această întrebare simplă despre selecția datelor poate fi formulată diferit:

SELECTAȚI * FROM Clienți

WHERE Adrese LIKE „% Petersburg %”;

  • EXTRACT (parametrul ) ¦ extrage un element dintr-o valoare de tipul data-ora sau dintr-un interval. De exemplu:

EXTRAS (LUNA DE LA DATA „2005-10-25”) rândul 10.

  • CHARACTER_LENGTH (rând ) Rotește numărul de caractere pe rând.

De exemplu:

CHARACTER_LENGTH(„Bună ziua tuturor”) împlinește 11 ani.

  • OCTET_LENGTH (rând ) Rotește numărul de octeți (octeți) într-un rând. Un caracter latin sau chirilic este reprezentat de un octet, iar un caracter chinezesc este reprezentat de doi octeți.
  • CARDINALITATE (parametru ) ia ca parametru o colecție de elemente și rotește numărul de elemente din colecție (număr cardinal). O colecție poate fi, de exemplu, o matrice sau o multiplicare pentru a găzdui elemente de diferite tipuri.
  • ABS (număr ) Rotește valoarea absolută a unui număr. De exemplu:

ABS (-123) Viraj 123;

ABS (2 - 5) tura 3.

  • MO D (numărul 1, numărul 2 ) Întoarce excesul jumătății întregi a primului număr pe celălalt. De exemplu:

MOD (5, h) rotiți 2;

MOD (2, h) rotiți 0.

  • LN (număr ) Rotiți logaritmul natural al unui număr.
  • EXP (număr) rotește numărul (Înlocuiți logaritmul natural cu gradul de număr).
  • PUTEREA (numărul 1, numărul 2 ) Turnul numărul 1 numarul 2 (numărul 1 la pasul numărul 2).
  • SQRT (număr ) Întoarce rădăcina pătrată a unui număr.
  • ETAJ (număr ) Rotește cel mai mare număr care nu depășește valoarea specificată de parametru (rotunjit în jos). De exemplu:

FLOOR (5.123) Rotiți 5.0.

  • CEL (număr) sau CEILING (număr ) Rotește cel mai mic număr întreg care nu este mai mic decât parametrul de rotunjire în sus specificat). De exemplu:

CEIL (5.123) Rotiți 6. 0.

  • WIDTH_BUCKET (număr1, număr2, număr3, număr4) rotește un număr întreg în intervalul dintre 0 și număr4 + 1. Parametrii număr2 și număr3 specifică o secțiune numerică, diviziuni la intervale egale, al căror număr este indicat de parametrul numărul 4. Funcție Atribuie numărul intervalului în care se pierd valorile număr1. Dacă numărul 1 se află în intervalul dat, atunci funcția se rotește 0 sau numărul 4 + 1. De exemplu:

WIDTH_BUCKET(3,14, 0, 9, 5) Se rotește cu 2.

Funcții dată-oră

Movi SQL are trei funcții, cum ar fi rotirea datei și orei exacte.

  • DATA CURENTA Rotește data exactă (tastați DATE).

De exemplu: 2005-06-18.

  • CURRENT_TIME (număr ) Rotește ora curentă (tip TIME). Parametrul întreg indică precizia secundelor. De exemplu, dacă valoarea este de 2 secunde, secundele vor fi reprezentate la cele mai apropiate sutimi (două cifre în partea fracțională):

12:39:45.27.

  • CURRENT_TIMESTAMP (număr ) Rotește data și ora (tip TIMESTAMP). De exemplu, 2005-06-18 12:39:45.27. Parametrul întreg indică precizia secundelor.

Vă rugăm să rețineți că data și ora la care aceste funcții sunt utilizate pentru a roti nu sunt de tip simbolic. Dacă trebuie să le hrăniți sub formă de rânduri de caractere, în acest scop trebuie să utilizați funcția de conversie CAST ().

Funcțiile datei-ora sunt setate să fie blocate în interogările pentru inserarea, actualizarea și actualizarea datelor. De exemplu, la înregistrarea înregistrărilor vânzărilor din transferuri speciale, data exactă și ora sunt introduse în acest scop. După ce atingeți numărul de saci pentru o lună sau un trimestru, datele de vânzări pentru perioada respectivă pot fi șterse.

Expresii calculate

Expresiile care sunt calculate vor fi din constante (numerice, rând, logice), funcții, nume de câmpuri și alte tipuri de date, conectate prin aritmetici, rânduri, logici și alți operatori. În felul lor, expresiile pot fi combinate cu operatori suplimentari ai expresiilor de depozit (depozit) mai mari. Pentru keruvana, brațele rotunde sunt folosite în ordinea numerotării vicorilor.

Operatori logiciȘI, SAU și NU au fost privite înainte.

Operatori aritmetici:

  • + | adiţional;
  • - vidnіmannya;
  • * ¦ înmulţire;
  • / | Podil.

Operator șirExistă un singur operator de concatenare sau de îmbinare a rândurilor (| |). În unele implementări SQL (cum ar fi Microsoft Access), simbolul (+) este folosit în loc de (| |). Operatorul de concatenare atribuie un alt rând la sfârșitul primului cap, astfel:

„Sasha” | | „a iubi” | | "Funcând cu mâna"

Se pare că acesta este rezultatul rândului „Love Masha”.

La plierea expresiilor, urma este cusută astfel încât operanzii operatorilor să fie de tipuri mici valabile. De exemplu, expresia: 123 + „Sasha” este inacceptabilă, astfel încât operatorul aritmetic este adăugat la operandul rând.

Expresiile care sunt calculate pot fi găsite după instrucțiunea SELECT, precum și în mintea instrucțiunilor WHERE și HAVI N.G.

Să aruncăm o privire la o grămadă de mucuri.

Lăsați tabelul de vânzări să afișeze articolele Tip produs, cantitate și preț și trebuie să cunoaștem veniturile pentru fiecare tip de produs. Pentru a vedea lista de articole după declarația SELECT, activați CALITATE*Preț:

SELECTează Tip_produs, Cantitate, Preț, Cantitate*Preț LA FEL DE

Împreună DIN Vânzări;

Aici cuvântul cheie AS (yak) este folosit pentru a crea un alias pentru datele care sunt calculate.

În fig. 10 arată tabelul de ieșire Vânzări și este introdus tabelul de rezultate.

Mic 10. Rezultatul se bazează pe calculul veniturilor pentru tipul de piele al produsului

Dacă trebuie să cunoașteți veniturile totale din vânzarea tuturor produselor, este suficient să completați următoarea întrebare:

SELECTAȚI SUMA (Cantitate*Preț) DIN Vânzări;

Următorul pas vă va cere să plasați expresiile care sunt calculate atât în ​​lista de clauze, cât și în mintea instrucțiunii WHERE. El selectează din tabel vânzarea acelor produse, profitul din vânzarea a peste 1000:

SELECTează Tip_produs, Cantitate*Preț AS O dată

DIN Vânzări

UNDE Cantitate*Pret > 1000;

Este posibil să fie nevoie să creați un tabel care are două coloane:

Produs care se potrivește tipului și prețului produsului;

Împreună, să ne răzbunăm pe vitorg.

Fragmentele sunt transferate astfel încât în ​​tabelul de ieșire, coloana Vânzări să aibă un tip simbolic (tip CHAR), iar categoria Preț să fie ? numeric, apoi la îmbinarea (lipirea) datelor din aceste coloane, este necesar să convertiți tipul numeric într-un tip de caracter folosind funcția CAST () suplimentară. Când este întrebat, care încheie această sarcină, arată astfel (Fig. 11):

SELECT Tip_produs | | " (Preț: " | | CAST(Preț AS CHAR(5)) | | ")" AS Articol, Cantitate*Preț AS O dată

DIN Vânzări;

Mic 11. Rezultatul este combinat cu diferite tipuri de date într-o coloană

Notă. În Microsoft Access, o comandă similară arată astfel:

SELECT Product_type + " (Preț: " + C Str (Preț) + ")" AS produs,

Cantitate*Preț AS La un moment dat

DIN Vânzări;

Exprimare inteligentă cu operatorul CASE

În limbajele de bază, sunt programați operatori de tranziție mentală, care vă permit să controlați procesul de calcul, în funcție de ceea ce se întâmplă în mintea dvs. În Movi SQL, acest operator este CASE (vident, mobilare, copiere). În SQL:2003, acest operator rotește valorile și poate fi folosit și în diferite limbi. Vinul are două forme principale, pe care le vom analiza în această secțiune.

Declarație CASE cu valori

Instrucțiunea CASE cu valori are următoarea sintaxă:

CASE valoarea_verificată

CÂND valoarea1 ATUNCI rezultat1

CÂND valoarea2 ATUNCI rezultat2

. . .

CÂND valorile N, rezultă N

ELSE rezultatX

U vipadku, dacă ceea ce înseamnă că trebuie verificat o valoare 1 , operatorul CASE rotește valorile rezultat1 , afirmații după cuvântul cheie THEN (that). În caz contrar, valoarea_verificată este egală cu valoarea2 , iar dacă sunt egale, atunci valoarea rezultatului2 este rotită. În celălalt caz, valoarea verificată este egală cu valorile curente specificate după cuvântul cheie WHEN etc. Dacă valoarea verificată nu este egală cu una dintre astfel de valori, atunci valoarea este rotită rezultatul X , instrucțiuni după cuvântul cheie ELSE (în caz contrar).

Cuvântul cheie ELSE nu este obligatoriu. Ori de câte ori există o valoare care este în curs de egalizare care nu este egală cu valoarea verificată, operatorul CASE rotește NULL.

Este posibil ca, pe baza tabelului Clienți (div. Fig. 1), să fie necesar să selectați un tabel în care numele regiunilor să fie înlocuite cu numerele lor de cod. Deoarece tabelul de ieșire al diferitelor regiuni nu trebuie să fie bogat, atunci pentru cea mai bună definiție puteți scurta manual interogarea cu instrucțiunea CASE:

SELECTAȚI Nume, Adrese,

Regiunea CASE

CÂND „Moscova” ATUNCI „77”

CÂND „regiunea Tversk” APOI „69”

. . .

ELSE Regiunea

Codul regiunii AS

DE LA Clienți;

Declarația CASE este o căutare a creierului

O altă formă a instrucțiunii CASE transferă rezultatul căutării în tabelul de înregistrări care satisface mintea cântăreață:

CAZ

CÂND minte1 ATUNCI rezultat1

CÂND rezultat2 ATUNCI rezultat2

. . .

CÂND minte N, rezultatul N

ELSE rezultatX

Operatorul CASE verifică dacă prima înregistrare din setul identificat prin clauza WHERE, sau întregul tabel, dacă WHERE este validă. Dacă da, atunci CASE rotește valoarea rezultat1. În caz contrar, pentru a cărui evidență se verifică mintea2. Dacă este adevărat, atunci rezultatul semnificativ este rotit etc. Dacă fiecare minte nu este schimbată, atunci rezultatul semnificativ este rotit X , introdus după cuvântul cheie ELSE.

Cuvântul cheie ELSE nu este obligatoriu. Deoarece mințile de fiecare zi și de fiecare zi nu se schimbă, operatorul CASE include NULL. După ce operatorul care introduce CASE iese pentru prima intrare, se face trecerea la următoarea intrare. Acest lucru va continua până când se colectează întregul set de înregistrări.

De exemplu, tabelul de carte (Titlu, Preț) se termină cu o valoare NULL, deoarece nu există nicio subcarte. Următoarea intrare rotește tabelul, în care loc NULL este afișat textul „Niciuna”:

SELECTează numele,

CAZ

CÂND PREȚUL ESTE NUL Atunci „Nu este evident”

ELSE CAST(Preț ca CHAR(8))

AS Preț

DIN Cărți;

Toate semnificațiile sunt aceleași și același tip de mamă este vinovat. Prin urmare, în această intrare, funcția de conversie a tipului CAST este utilizată pentru a converti valorile numerice într-un tip simbolic.

Vă rugăm să rețineți că înlocuirea primei forme a instrucțiunii CASE poate fi întotdeauna folosită de un prieten:

CAZ

CÂND tested_value = valoare1 ATUNCI rezultat1

CÂND valoarea_testată = valoare2 ATUNCI rezultat2

. . .

CÂND revizuire valoare = valoare N ATUNCI rezultatul N

ELSE rezultate

Funcțiile NULLIF și COALESCE

Pentru o serie de probleme, în special în solicitările de actualizare a datelor (operator UPDATE), este ușor să înlocuiți greoiul operator CASE cu funcțiile compacte NULLIF () (NULL) și COALESCE () (combină).

Funcția NULLIF ( valoare1, valoare2) rotește NULL dacă valoarea primului parametru confirmă valoarea altui parametru; în caz de inconsecvență, valoarea primului parametru este rotită fără modificări. Când egalitatea valorii1 = valoare2 este egală, funcția se rotește NULL, în caz contrar valoarea valorii1.

Această funcție este echivalentă cu instrucțiunea CASE în două forme:

  • CAZ valoarea1

WHEN value2 THEN NULL

ELSE valoarea1

  • CAZ

WHEN valoare1 = valoare2 THEN NULL

ELSE valoarea1

Funcția COALESCE ( valoare1, valoare2, ... , valoarea N) acceptă o listă de valori, care pot fi fie semnificative, fie nesemnificative (NULL). Această funcție rotește toate valorile din listă sau NULL, deoarece toate valorile sunt nedefinite.

Această funcție este echivalentă cu instrucțiunea CASE avansată:

CAZ

CÂND valoarea 1 NU ESTE NULĂ, atunci valoarea 1

CÂND valoarea 2 NU ESTE NULĂ, atunci valoarea 2

. . .

CÂND valoarea N NU ESTE NULĂ, atunci valoarea N

ELSE NULL

Este acceptabil ca în tabelul Cărți (Titlu, Preț) coloana Preț să aibă valoarea NULL, deoarece nu există subcarte. Următoarea intrare transformă masa într-un loc diferit NUL Este afișat textul „Nu”:

SELECT Nume, COALESCE (CAST(Preț AS CHAR(8)),

„Nu este evident”) AS Price

DIN Cărți;

Este descrisă varietatea operatorilor aritmetici și a metodelor de calcul. Sunt luate în considerare funcțiile subbag (agregate) COUNT, SUM, AVG, MAX, MIN. Există un exemplu de utilizare a operatorului GROUP BY pentru a grupa selecțiile de date. Se descrie stagnarea propoziției HAVING.

Câmpuri de calcul Pobudova

La zagalny vipadku pentru ușă câmp numărat (călător).În lista SELECT, introduceți limbajul SQL curent. Aceste expresii conțin operații aritmetice de adunare, înlocuire, înmulțire și subsecțiune, precum și funcții ale limbajului SQL. Puteți specifica numele oricărei coloane (câmp) a tabelului sau a interogării sau puteți selecta numele coloanei din același tabel sau interogare așa cum este specificat în lista de clauze FROM a instrucțiunii specifice. Când apar pliuri de pliere, este posibil să aveți nevoie de tâmple.

Standardele SQL vă permit să specificați în mod explicit numele coloanelor din tabelul de rezultate, pentru care este folosită expresia AS.

SELECT Item.Name, Item.Price, Item.Quality, Item.Price*Item.Quality AS Variety FROM Item INNER JOIN Item ON Item.ItemCode=Item.ItemCode Cap 6.1. Rozrakhunok zagalnoy vartosti derzhannoi ugol.

Cap 6.2. Selectați lista de companii din numele și inițialele desemnate ale clienților.

SELECTARE Companie, Pseudonim+""+ Stânga(Nume,1)+"."+Stânga(De la Tată,1)+"."AS PIB FROM Client Cap 6.2. Selectați lista de companii din numele desemnate și clienții inițiali.

Textul are o funcție de stânga încorporată, care permite afișarea unui simbol al răului în text la un moment dat.

Cap 6.3. Selectați lista de produse din datele și lunile de vânzare desemnate.

SELECT Item.Name, Year(Item.Date) AS Year, Month(Item.Date) AS Month FROM Item INNER JOIN Item ON Item.ItemCode=Item.ItemCode Cap 6.3. Selectați lista de produse din datele și lunile de vânzare stabilite.

Motorul de căutare are funcțiile An și Luna pentru a afișa luna și data.

Vikoristannaya pіdsumkovyh funcții

Pentru ajutor suplimentar funcții de pungă (agregate).În cadrul interogării SQL, puteți extrage o serie de informații statistice suplimentare despre valorile selectate ale setului de ieșire.

Koristuvachevi disponibile astfel de bază funcții husă:

  • Count (Viraz) - indică numărul de înregistrări din setul de ieșire al interogărilor SQL;
  • Min/Max (Viraz) - determina cea mai mica si cea mai mare valoare a campului dat;
  • Avg (Viraz) - această funcție vă permite să extindeți valoarea medie a valorii impersonale care este stocată în câmpul cântec al înregistrărilor selectate. Există, deci, valori medii aritmetice. suma valorii împărțită la cantitatea acesteia.
  • Suma (Viraz) – calculează valoarea impersonală care este plasată în câmpul cântec al înregistrărilor selectate.

Cel mai adesea, numele eroilor apar ca simbol. Viraz poate fi calculat în tabelul următor.

Toate aceste funcții operează cu valori într-o singură coloană a tabelului sau cu o expresie aritmetică rotesc o singură valoare. Funcțiile COUNT, MIN și MAX sunt limitate atât la câmpurile numerice, cât și la cele nenumerice, în timp ce funcțiile SUM și AVG pot fi utilizate numai pentru câmpurile numerice, în spatele steagului COUNT(*). La calcularea rezultatelor oricăror funcții, toate valorile goale sunt oprite, după care operațiunea necesară este limitată doar la valorile specifice care au fost pierdute. Opțiunea COUNT(*) este o versiune specială a funcției COUNT indirecte, al cărei scop este de a subdiviza toate rândurile din tabelul rezultat, indiferent dacă acolo sunt plasate valori goale, duplicate sau alte valori Nya.

Dacă trebuie să dezactivați valorile care sunt duplicate înainte de a rula o altă funcție, plasați cuvântul cheie DISTINCT înaintea acestora. Acest lucru nu are sens pentru funcțiile MIN și MAX, dar rezultatul poate fi afectat de rezultatele funcțiilor SUM și AVG, care trebuie luate în considerare în prealabil, care pot fi prezente într-o anumită problemă a pielii. În plus, cuvântul cheie DISTINCT poate fi specificat nu mai mult de o dată în orice interogare.

Este foarte important să rețineți că funcții husă Ele pot fi folosite numai în lista de propoziții SELECT și în depozitul de propoziții HAVING. În alte situații, acest lucru este inacceptabil. Dacă lista clauzei SELECT este de a se răzbuna funcții husă, iar în text există o frază zilnică GROUP BY, care va asigura partajarea datelor cu grupul, apoi din elementele listei de propoziții SELECT nu poate include niciun mesaj în câmpuri, din cauza situației, dacă câmpurile acționează ca argumente funcții husă.

Cap 6.4. Prin urmare, am grijă să denumesc produsul în ordine alfabetică.

SELECT Min(Nume produs) AS Min_Name FROM Product Cap 6.4. Denumiți primul produs după alfabet.

Cap 6.5. Luați în considerare numărul de plăcere.

SELECT Count(*) AS Număr de articole FROM Vă rugăm Cap 6.5. Luați în considerare numărul de plăcere.

Cap 6.6. Calculați cantitatea totală de mărfuri vândute.

SELECTAȚI Suma(Plăcut.Calitate) AS Cantitate_de_produs FROM Satisfacție Cap 6.6. Valoarea cantității totale de mărfuri vândute.

Cap 6.7. Calculați prețul mediu al produsului vândut.

SELECTAȚI Avg(Product.Price) AS Avg_Price FROM Product INNER JOIN Bunuri ON Product.ProductCode=Product.ProductCode; Cap 6.7. Prețul mediu al bunurilor vândute.

SELECTAȚI Suma(Product.Price*Price.Quality) AS Variety FROM Product INNER JOIN Satisfaction ON Product.ProductCode=Purpose.ProductCode Cap 6.8. Pіdrakhunok varosti a vândut mărfuri.

Propunerea GROUP BY

Adesea, în interogări este necesară formarea pungilor intermediare, astfel încât în ​​interogare să apară sintagma „cutanat...”. Din acest motiv, clauza GROUP BY este folosită în instrucțiunea SELECT. Interogarea în care este prezent GROUP BY se numește interogarea care grupează, fragmentele în care sunt grupate datele, eliminate ca urmare a operației SELECTARE ulterioare, după care se creează un singur rând sumar pentru fiecare grup din jur. Standardul SQL cere ca clauza SELECT și clauza GROUP BY să fie strâns legate între ele. Datorită prezenței în instrucțiunea SELECT a frazei GROUP BY, elementul listă din instrucțiunea SELECT este responsabil pentru valoarea unică pentru întregul grup. Mai mult, instrucțiunea SELECT poate include următoarele tipuri de elemente: nume de câmpuri, funcții husă, constante și expresii care includ combinații de elemente de supraasigurare.

Toate numele câmpurilor plasate în lista de propoziții SELECT trebuie să fie prezente în clauza GROUP BY - supuse evacuărilor, dacă numele este victorie în funcții husă. Regula inversă nu este corectă - clauza GROUP BY poate avea aceleași nume de clauze ca cele din lista de clauze SELECT.

Deoarece clauza WHERE este combinată cu GROUP BY, ea este pe primul loc, iar gruparea este urmată de acele rânduri care satisfac mintea.

Standardul SQL prevede că atunci când se realizează gruparea, toate valorile zilnice sunt tratate ca egale. Dacă două rânduri ale tabelului din aceeași coloană de grup conțin valori NULL și valori identice în toate celelalte coloane de grup nevalide, acestea sunt plasate în același grup.

fund 6.9. Calculați valoarea medie a achizițiilor făcute de fiecare cumpărător.

SELECT Client.Name, Avg(Pleasure.Quality) AS Average_quantity FROM Client INNER JOIN Vă rugăm ON Client.ClientCode=Pleasure.CustomerCode GROUP BY Client.Name fund 6.9. Calculul sumei medii a cumpărăturilor efectuate de fiecare cumpărător.

Expresia „cumpărător de piele” și-a găsit expresia în interogarea SQL sub forma unei propoziții. GROUP BY Client.Nume.

Cap 6.10.În mod semnificativ, un produs pentru piele a fost vândut lui Yaku Sumu.

SELECT Product.Name, Sum(Product.Price*Purpose.Quality) AS Variety FROM Product INNER JOIN Product ON Product.ProductCode=Purpose.ProductCode GROUP BY Product.Name Cap 6.10. În schimb, un produs de piele a fost vândut la suma.

SELECT Client.Company, Count(Purpose.Code) AS Număr de clienți FROM Client INNER JOIN Client ON Client.ClientCode=Place.CustomerCode GROUP BY Client.Company Cap 6.11. Tratează o serie de lucruri făcute de compania de piele.

SELECT Client.Company, Sum(Purpose.Quality) AS Sales_Quality, Sum(Product.Price*Price.Quantity) AS Variety FROM Product INNER JOIN (Customer INNER JOIN Pleasant ON Client.ClientCode=U an.Cod client) .Cod produs GROUP DE Client.Firma Cap 6.12. Pіdrakhunok zаgalї kіkostі achiziționat de compania de piele pentru produsul și bunătatea acestuia.

Cap 6.13. Calculați cantitatea totală de produs pentru piele pe lună.

SELECT Product.Name, Month(Purpose.Date) AS Month, Sum(Product.Price*Price.Quality) AS Variety FROM Product INNER JOIN Satisfaction ON Product.ProductCode=Purpose.ProductCode GROUP BY Product.Name, Month(Price.Date ) ) Cap 6.13. Valoarea vânzărilor totale de produse pentru piele pe lună.

Cap 6.14. Calculați valoarea totală a primului produs din piele pe lună de piele.

SELECT Product.Name, Month(Price.Date) AS Month, Sum(Product.Price*Price.Quality) AS Variety FROM Product INNER JOIN Product ON Product.ProductCode=Price.ProductCode WHERE Product.Grade="First" GROUP BY Product . .Nume, Lună(Vă rugăm.Data) Cap 6.14. Valoarea valorii totale a primului produs din piele pe lună de piele.

Propunerea AVÂND

În spatele ajutorului HAVING sunt afișate toate blocurile de date care sunt grupate în spatele ajutorului GROUP BY, care satisfac mințile HAVING date. Este posibilă filtrarea setului de ieșire.

Mințile AVÂND diferă de minți UNDE:

  • HAVING include grupuri cu rezultatele valorilor agregate din setul de date rezultat;
  • UNDE include din defalcarea valorilor agregate o înregistrare grupată care nu satisface mintea;
  • Datorită înțelepciunii WHERE, nu este posibil să setați funcții agregate.

Stoc 6.15.În mod semnificativ, numărul companiilor ale căror vânzări au depășit trei.

SELECT Client.Company, Count(Purpose.Quality) AS Cantitate FROM Client INNER JOIN Client ON Client.ClientCode=Pleasure.ClientCode GROUP BY Client.Company HAVING Count(Pleasure.Quality yes)>3 Stoc 6.15. Numărul semnificativ de companii al căror număr de interese a depășit trei.

Cap 6.16. Introduceți o listă de produse vândute cu peste 10.000 de ruble.

SELECT. Nume.Produs, Sumă(Preț.Produs*Preț.Calitate) AS Varietate FROM Product INNER JOIN Product ON Product.ProductCode=Preț.ProductCode GROUP BY Product.Name AVÂND Suma(Product.Price*Price.Quality)>1000 Cap 6.16. Mai jos este o listă de produse vândute cu peste 10.000 krb.

Cap 6.17. Introduceți o listă de produse vândute pentru peste 10.000 de sume fără a specifica suma.

SELECTARE Product.Name FROM Product INNER JOIN Vă rugăm ON Product.ProductCode=Purpose.ProductCode GROUP BY Product.Name HAVING Sum(Product.Price*Price.Quantity)>10000 Cap 6.17. Există o listă de produse vândute în peste 10.000 fără o sumă desemnată.

Distribuie prietenilor sau economisește pentru tine:

Vantat...