Home » Articole » Articole » Calculatoare » Programare » SQL » SQL – Limbajul de interogare a datelor – SELECT – Proiecție

SQL – Limbajul de interogare a datelor – SELECT – Proiecție

postat în: SQL 0
SELECT   <things_to_be_displayed>  -- așa-numita „Proiecție” - în principal o listă de nume de coloane
FROM     <tablename>               -- nume de tabel sau de vizualizare și aliasurile acestora
WHERE    <where_clause>            -- așa-numita „Restricție” sau „condiție de căutare”
GROUP BY <group_by_clause>
HAVING   <having_clause>
ORDER BY <order_by_clause>
OFFSET   <offset_clause>
FETCH    <fetch_first_or_next_clause>;

Cu excepția primelor două elemente, toate celelalte sunt opționale. Succesiunea elementelor de limbaj este obligatorie. În anumite locuri din cadrul comenzii pot porni noi comenzi SELECT – într-o manieră recursivă.

Proiecție (specificare coloanele rezultate)

În partea de proiecție a comenzii SELECT, specificați o listă de coloane, operații care lucrează pe coloane, funcții, valori fixe sau comenzi SELECT noi.

-- C/Comentariile în stilul Java sunt posibile în cadrul comenzilor SQL
SELECT id,                          /* numele unei coloane   */
       concat(firstname, lastname), /* funcția concat() */
       weight + 5,                  /* operația de adăugare      */
       'kg'                         /* o valoare                */
FROM   person;

SGBD va prelua zece rânduri, fiecare dintre ele constând din patru coloane.

Putem amesteca secvența de coloane în orice ordine sau le putem prelua de mai multe ori.

SELECT id, lastname, lastname, 'weighs', weight, 'kg'
FROM   person;

Asteriscul ‘*’ este o abreviere pentru lista tuturor coloanelor.

SELECT * FROM person;

Pentru coloanele numerice, putem aplica operatorii numerici obișnuiți +, -, * și /. Există, de asemenea, o mulțime de funcții predefinite în funcție de tipul de date: putere, sqrt, modulo, funcții șir, funcții de dată.

Unicitate prin cuvântul cheie DISTINCT

Este posibil să compactați rezultatul în sensul valorilor unice folosind cuvântul cheie DISTINCT. În acest caz, toate rândurile rezultate, care ar fi identice, vor fi comprimate într-un singur rând. Cu alte cuvinte: duplicatele sunt eliminate – la fel ca în teoria mulțimilor.

-- preia zece rânduri
SELECT lastname
FROM   person;
-- preia doar șapte rânduri. Valorile duplicat sunt aruncate.
SELECT DISTINCT lastname
FROM   person;
-- Sfat:
-- Cuvântul cheie „DIstinct” se referă la totalitatea rândurilor rezultate, pe care le puteți imagina 
-- ca o concatenare a tuturor coloanelor. Urmează direct în spatele cuvântului cheie SELECT.
-- Următoarea interogare duce la zece rânduri, deși trei persoane au același nume de familie.
SELECT DISTINCT lastname, firstname
FROM   person;
-- din nou doar șapte rânduri
SELECT DISTINCT lastname, lastname
FROM   person;

Aliasuri pentru numele coloanelor

Uneori dorim să dăm coloanelor rezultate nume mai descriptive. Putem face acest lucru alegând un alias în cadrul proiecției. Acest alias este noul nume din setul de rezultate. GUI-urile arată aliasul ca etichetă de coloană.

-- Cuvântul cheie „AS” este opțional
SELECT lastname AS family_name, weight AS weight_in_kg
FROM   person;

Funcții

Există funcții predefinite pentru utilizare în proiecții (și în alte poziții). Cele mai frecvent utilizate sunt:

  • count(<columnname>|’*’): Numără numărul de rânduri rezultate.
  • max(<columnname>): Cea mai mare valoare din <column> a setului de rezultate. Aplicabil si pe șiruri.
  • min(<columnname>): Cea mai mică valoare din <column> a setului de rezultate. Aplicabil si pe șiruri.
  • sum(<columnname>): Suma tuturor valorilor dintr-o coloană numerică.
  • avg(<columnname>): Media unei coloane numerice.
  • concat(<columnname_1>, <columnname_2>): Concatenarea a două coloane. Alternativ, funcția poate fi exprimată prin operatorul „||” : <columnname_1> || <columnname_2>

SQL standard și fiecare SGBD oferă mult mai multe funcții.

Trebuie să facem diferența între acele funcții care returnează o valoare pe rând, cum ar fi concat() și cele care returnează doar un rând pe un set de rezultate complet, cum ar fi max(). Primul poate fi amestecat în orice combinație cu nume de coloane, așa cum se arată în primul exemplu al acestei pagini. Cu cele mai recente, există o problemă: dacă le amestecăm cu un nume de coloană obișnuit, SGBD recunoaște o contradicție în interogare. Pe de o parte, ar trebui să recupereze exact o valoare (într-un rând), iar pe de altă parte, ar trebui să recupereze o mulțime de valori (într-o mulțime de rânduri). Reacția SGBD diferă de la furnizor la furnizor. Unii aruncă un mesaj de eroare în timpul execuției – în conformitate cu standardul SQL -, alții oferă rezultate suspecte.

-- merge bine
SELECT lastname, concat(weight, ' kg')
FROM   person;
-- verificați reacția SGBD-ului dvs. Ar trebui să arate un mesaj de eroare.
SELECT lastname, avg(weight)
FROM   person;
-- un amestec legal de funcții rezultând într-un rând cu 4 coloane
SELECT min(weight), max(weight), avg(weight) as average_1, sum(weight) / count(*) as average_2
FROM   person;

SELECT în SELECT

Dacă vrem cu adevărat să vedem rezultatul unei funcții orientate pe set de rezultate în combinație cu coloane de mai mult de un rând, putem începe un SELECT foarte nou într-o locație în care – în cazuri simple – apare un nume de coloană. Acest al doilea SELECT este o comandă absolut independentă. Fiți atenți: va fi executat pentru fiecare rând rezultat al primului SELECT!

-- preia 10 rânduri; observați paranteza suplimentară pentru a delimita cele două SELECT unul de celălalt.
SELECT lastname, (SELECT avg(weight) FROM person)
FROM   person;
-- Calculează procentul greutății fiecărei persoane în raport cu greutatea medie a tuturor persoanelor
SELECT lastname,
       weight,
       weight * 100 / (SELECT avg(weight) FROM person) AS percentage_of_average
FROM   person;

(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)

Ghid Facebook pentru utilizatori
Ghid Facebook pentru utilizatori

Un ghid complet îți oferă toate informațiile esențiale pentru a naviga eficient pe Facebook

Nu a fost votat 9.53 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Războiul electronic și inteligența artificială
Războiul electronic și inteligența artificială

Această carte este ideală pentru profesioniștii în afaceri, strategii militari, și publicul academic.

Nu a fost votat 9.53 lei24.85 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Inteligența competitivă - Concept - Studii
Inteligența competitivă – Concept – Studii

Inteligența competitivă: instrumentul esențial pentru succesul în afaceri

Nu a fost votat 9.53 lei15.08 lei Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *