Sobes.tech
Middle

Vorbește despre sintaxa completă a operatorului SELECT într-o bază de date relațională.

sobes.tech AI

Răspuns de la AI

Operatorul SQL SELECT este utilizat pentru a selecta date din una sau mai multe tabele. Sintaxa sa completă include mai multe părți opționale:

SELECT [ALL | DISTINCT]
    select_expr, select_expr, ...
FROM
    table_references
[WHERE
    where_condition]
[GROUP BY
    {col_name | expr | position}
    [ASC | DESC], ... [WITH ROLLUP]]
[HAVING
    having_condition]
[ORDER BY
    {col_name | expr | position}
    [ASC | DESC], ...]
[LIMIT
    [offset,] row_count | row_count OFFSET offset]
    [FOR UPDATE | LOCK IN SHARE MODE];

Să analizăm principalele părți:

  • SELECT [ALL | DISTINCT] select_expr, ...:

    • SELECT: Cuvânt cheie care indică selectarea datelor.
    • ALL: (Implicit) Include toate rândurile găsite, inclusiv duplicatele.
    • DISTINCT: Elimină rândurile duplicate din rezultat.
    • select_expr: Expresie care definește coloanele selectate sau valorile calculate (de exemplu, column_name, function(column), column1 + column2, * pentru toate coloanele). Se pot folosi aliasuri cu cuvântul AS.
  • FROM table_references:

    • FROM: Cuvânt cheie care indică sursa de date.
    • table_references: Lista tabelelor din care se selectează date. Pot fi tabele simple, vizualizări sau rezultate ale unor join-uri. Diferite tipuri de join-uri: INNER JOIN, LEFT [OUTER] JOIN, RIGHT [OUTER] JOIN, FULL [OUTER] JOIN, CROSS JOIN.
  • [WHERE where_condition]:

    • WHERE: Cuvânt cheie pentru filtrarea rândurilor pe baza unei condiții.
    • where_condition: Expresie logică folosind operatori de comparație (=, !=, >, <, >=, <=), operatori logici (AND, OR, NOT), operatori pentru intervale (BETWEEN), liste (IN), modele (LIKE) și verificare pentru NULL (IS NULL, IS NOT NULL).
  • [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]]:

    • GROUP BY: Grupează rândurile cu valori identice în coloanele specificate pentru aplicarea funcțiilor agregate (COUNT, SUM, AVG, MIN, MAX).
    • col_name | expr | position: Coloana, expresie sau poziție a coloanei pentru grupare.
    • ASC | DESC: Opțional, determină ordinea sortării în interiorul grupului (de obicei folosit cu ORDER BY).
    • WITH ROLLUP: Opțional, adaugă rânduri cu valori totale (pentru MySQL).
  • [HAVING having_condition]:

    • HAVING: Filtrează grupurile create de GROUP BY pe baza unei condiții. Spre deosebire de WHERE, HAVING poate folosi funcții agregate în condiție.
  • [ORDER BY {col_name | expr | position} [ASC | DESC], ...]:

    • ORDER BY: Sortează setul de rezultate.
    • col_name | expr | position: Coloana, expresie sau poziție pentru sortare.
    • ASC: (Implicit) Sortare crescătoare.
    • DESC: Sortare descrescătoare.
  • [LIMIT [offset,] row_count | row_count OFFSET offset]:

    • LIMIT: Limitează numărul de rânduri returnate. Poate fi folosit pentru paginare.
    • offset: Deplasare de la începutul setului de rezultate (număr de rânduri ignorate).
    • row_count: Numărul maxim de rânduri returnate. Sintaxa poate varia ușor între diferite SGBD-uri (de exemplu, TOP în SQL Server).
  • [FOR UPDATE | LOCK IN SHARE MODE]:

    • Blocări opționale ale rândurilor, folosite în tranzacții pentru controlul accesului concurențial.
    • FOR UPDATE: Obține o blocare exclusivă pe rândurile selectate, împiedicând modificarea lor de către alte tranzacții.
    • LOCK IN SHARE MODE: Obține o blocare partajată, permițând altor tranzacții să citească rândurile, dar nu să le modifice (pentru MySQL). În alte SGBD-uri pot fi folosite mecanisme similare (de exemplu, FOR SHARE).

Ordinea aplicării părților operatorului SELECT în execuția unei interogări de către SGBD este de obicei:

  1. FROM
  2. JOIN
  3. WHERE
  4. GROUP BY
  5. HAVING
  6. SELECT
  7. DISTINCT
  8. ORDER BY
  9. LIMIT
  10. FOR UPDATE / LOCK IN SHARE MODE