GeeksforGeeks

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:

Flyselskap

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.

  • SQL med klausulen er i utgangspunktet en drop-in erstatning til den normale sub-spørringen.
  • 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.

    Related Posts

    Legg igjen en kommentar

    Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *