logo

SQL | CU clauza

Clauza SQL WITH a fost introdusă de Oracle în baza de date Oracle 9i release 2. Clauza SQL WITH vă permite să dați un nume unui bloc sub-interogare (un proces numit și refactorizare sub-interogare), care poate fi referit în mai multe locuri din interogarea SQL principală.

  • Clauza este utilizată pentru definirea unei relații temporare, astfel încât rezultatul acestei relații temporare să fie disponibilă și să fie utilizată de interogarea asociată cu clauza WITH.
  • Interogările care au o clauză WITH asociată pot fi, de asemenea, scrise folosind sub-interogări imbricate, dar adaugă mai multă complexitate pentru a citi/depana interogarea SQL.
  • Clauza WITH nu este acceptată de toate sistemele de baze de date.
  • Numele atribuit subinterogării este tratat ca și cum ar fi o vizualizare sau un tabel inline
  • Clauza SQL WITH a fost introdusă de Oracle în baza de date Oracle 9i release 2.

Sintaxă:

WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table) SELECT Attr1 FROM Table, temporaryTable WHERE Table.Attr1>temporaryTable.averageValue;>>> 



converti șirul în int

În această interogare, clauza WITH este utilizată pentru a defini o relație temporară temporaryTable care are doar 1 atribut averageValue. averageValue deține valoarea medie a coloanei Attr1 descrisă în relația Tabel. Instrucțiunea SELECT care urmează clauzei WITH va produce numai acele tupluri în care valoarea lui Attr1 în relația Table este mai mare decât valoarea medie obținută din instrucțiunea clauzei WITH.

Notă: Când se execută o interogare cu o clauză WITH, mai întâi interogarea menționată în clauză este evaluată și rezultatul acestei evaluări este stocat într-o relație temporară. În continuare, interogarea principală asociată cu clauza WITH este în sfârșit executată care ar folosi relația temporară produsă.

Întrebări

data locala

Exemplul 1: Găsiți toți angajații al căror salariu este mai mare decât salariul mediu al tuturor angajaților.
Denumirea relatiei: Angajat

Card de identitate al angajatului Nume Salariu
100011 Smith 50000
100022 Factură 94000
100027 Se 70550
100845 Walden 80000
115585 Erik 60000
1100070 Kate 69000

Interogare SQL:

WITH totalSalary(Airline, total) as (SELECT Airline, sum(Salary) FROM Pilot GROUP BY Airline), airlineAverage(avgSalary) as (SELECT avg(Salary) FROM Pilot ) SELECT Airline FROM totalSalary, airlineAverage WHERE totalSalary.total>airlineAverage.avgSalary;>

Ieșire:

Companie aeriană
Airbus 380

Explicaţie: Salariul total al tuturor piloților Airbus 380 = 298.830 și cel al Boeing = 45000. Salariul mediu al tuturor piloților din tabel Pilot = 57305. Deoarece doar salariul total al tuturor piloților Airbus 380 este mai mare decât salariul mediu obținut, deci Airbus 380 se află în relația de ieșire.

Puncte importante:

  • Clauza SQL WITH este bună atunci când este utilizată cu instrucțiuni SQL complexe, mai degrabă decât cu cele simple
  • De asemenea, vă permite să descompuneți interogările SQL complexe în altele mai mici, ceea ce facilitează depanarea și procesarea interogărilor complexe.
  • Clauza SQL WITH este practic o înlocuire a subinterogării normale.