GeeksforGeeks

clauza SQL cu a fost introdusă de Oracle în baza de date Oracle 9i release 2. Clauza SQL WITH vă permite să dați unui bloc de sub-interogare un nume (un proces numit și refactorizare sub-interogare), la care se poate face referire î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 cu.
  • interogările care au o clauză asociată pot fi, de asemenea, scrise folosind sub-interogări imbricate, dar făcând acest lucru adăugați mai multă complexitate pentru a citi / depana interogarea SQL.
  • cu clauza nu este acceptată de toate sistem de baze de date.
  • numele atribuit sub-interogării este tratat ca și cum ar fi o vizualizare în linie sau un tabel
  • 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 WHERE Table.Attr1 > temporaryTable.averageValue;

în această interogare, cu clauza este folosit pentru a defini o relație temporară temporaryTable care are doar 1 atribut valoare medie. averageValue deține valoarea medie a coloanei Attr1 descrisă în tabelul de relații. Instrucțiunea SELECT care urmează clauzei cu va produce numai acele tupluri în care valoarea Attr1 în tabelul de relații este mai mare decât valoarea medie obținută din Instrucțiunea clauzei cu.

notă: Când o interogare cu o clauză cu este executată, mai întâi interogarea menționată în clauză este evaluată și rezultatul acestei evaluări este stocat într-o relație temporară. După aceasta, interogarea principală asociată cu clauza cu este în cele din urmă executată care ar folosi relația temporară produsă.

interogări

Exemplul 1: Găsiți tot angajatul al cărui salariu este mai mare decât salariul mediu al tuturor angajaților.
numele relației: Employee

EmployeeID Name Salary
100011 Smith 50000
100022 Bill 94000
100027 Sam 70550
100845 Walden 80000
115585 Erik 60000
1100070 Kate 69000

SQL Query:

WITH temporaryTable(averageValue) as (SELECT avg(Salary) from Employee), SELECT EmployeeID,Name, Salary FROM Employee, temporaryTable WHERE Employee.Salary > temporaryTable.averageValue;

Output:

EmployeeID nume Salariu
100022 Bill 94000
100845 Walden 80000

explicație: salariul mediu al tuturor angajaților este de 70591. Prin urmare, toți angajații al căror salariu este mai mare decât media obținută se află în relația de ieșire.

Exemplul 2: Găsiți toate companiile aeriene în care salariul total al tuturor piloților din acea companie aeriană este mai mare decât media salariului total al tuturor piloților din Baza de date.

numele relației: Pilot

EmployeeID Airline Name Salary
70007 Airbus 380 Kim 60000
70002 Boeing Laura 20000
10027 Airbus 380 Will 80050
10778 Airbus 380 Warren 80780
115585 Boeing Smith 25000
114070 Airbus 380 Katy 78000

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 tabelul Pilot = 57305. Deoarece doar salariul total al tuturor piloților Airbus 380 este mai mare decât salariul mediu obținut, astfel încât Airbus 380 se află în relația de ieșire.

puncte importante:

  • SQL cu clauza este bun atunci când este utilizat cu instrucțiuni SQL complexe, mai degrabă decât cele simple
  • de asemenea, vă permite să rupă în jos interogări SQL complexe în cele mai mici, care face mai ușor pentru depanare și procesarea interogări complexe.
  • SQL cu clauza este de fapt un înlocuitor drop-in La sub-interogare normală.

Acest articol este contribuit de Mayank Kumar. Dacă vă place GeeksforGeeks și doriți să contribuiți, puteți scrie și un articol folosind contribute.geeksforgeeks.org sau trimiteți articolul dvs. la [email protected]. Vedeți articolul dvs. care apare pe pagina principală GeeksforGeeks și ajutați alți Geeks.

Related Posts

Lasă un răspuns

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