SQL med klausulen ble introdusert Av Oracle I Oracle 9i release 2 database. SQL MED klausulen lar deg gi en sub-query blokk et navn (en prosess også kalt sub-query refactoring), som kan refereres på flere steder i HOVED SQL-spørringen.
- klausulen brukes til å definere en midlertidig relasjon slik at utgangen av denne midlertidige relasjonen er tilgjengelig og brukes av spørringen som er knyttet TIL MED-klausulen.
- Spørringer som har en tilknyttet klausul kan også skrives ved hjelp av nestede sub-spørringer, men gjør det legge mer kompleksitet å lese / feilsøke SQL-spørringen.
- med klausul støttes ikke av alle databasesystem.
- navnet tilordnet underspørringen behandles som om DET var en innebygd visning eller tabell
- SQL WITH-klausulen ble introdusert Av Oracle i oracle 9i release 2-databasen.
Syntaks:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table), SELECT Attr1 FROM Table WHERE Table.Attr1 > temporaryTable.averageValue;
i denne spørringen brukes setningsdelen til å definere en midlertidig relasjonstabell som bare har 1 attributt gjennomsnittlig verdi. averageValue holder gjennomsnittsverdien av kolonne Attr1 beskrevet i relasjonstabellen. SELECT-setningen som følger MED-setningsdelen, vil bare produsere de tuplene der Verdien Av Attr1 i forholdstabellen er større enn gjennomsnittsverdien oppnådd fra MED-setningserklæringen.
Merk: Når en spørring med EN MED-setning utføres, evalueres først spørringen som er nevnt i klausulen, og resultatet av denne evalueringen lagres i en midlertidig relasjon. Etter dette blir hovedspørringen knyttet TIL MED-setningsdelen endelig utført som vil bruke den midlertidige relasjonen som er produsert.Eksempel 1: Finn alle ansatte hvis lønn er mer enn gjennomsnittslønnen til alle ansatte.
navn på forholdet: 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:
Ansatt | Navn | Lønn |
---|---|---|
100022 | Regning | 94000 |
100845 | walden | 80000 |
forklaring: gjennomsnittlig lønn for alle ansatte Er 70591. Derfor ligger alle ansatte hvis lønn er mer enn det oppnådde gjennomsnittet i utgangsforholdet.
Eksempel 2: Finn alle flyselskapene der den totale lønnen til alle piloter i det flyselskapet er mer enn gjennomsnittet av total lønn for alle piloter i databasen.
navn på relasjonen: 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 |
SQL Spørring:
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;
Utgang:
Airbus 380
Forklaring: den totale lønnen til alle piloter Av Airbus 380 = 298.830 og det av boeing = 45000. Gjennomsnittlig lønn for alle piloter i Tabellen Pilot = 57305. Siden bare den totale lønnen til Alle piloter I Airbus 380 er større enn gjennomsnittslønnen som er oppnådd, Ligger Airbus 380 i utgangsforholdet.
Viktige Punkter:SQL med klausulen er bra når den brukes med komplekse SQL-setninger i stedet for enkle Seg Den lar deg også bryte ned komplekse SQL-spørringer i mindre som gjør det enkelt for debugging og behandling av komplekse spørringer.
Denne artikkelen er bidratt Av Mayank Kumar. Hvis Du liker GeeksforGeeks og ønsker å bidra, kan du også skrive en artikkel med contribute.geeksforgeeks.org eller send artikkelen din til [email protected]. Se artikkelen vises På GeeksforGeeks hovedsiden og hjelpe andre Geeks.