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:
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.