logo

SQL | MED klausul

SQL WITH-klausulen ble introdusert av Oracle i Oracle 9i versjon 2-databasen. SQL WITH-klausulen lar deg gi en underspørringsblokk et navn (en prosess også kalt sub-spørringsrefactoring), som kan refereres til flere steder i hoved-SQL-spørringen.

pyspark
  • Klausulen brukes til å definere en midlertidig relasjon slik at utdata fra denne midlertidige relasjonen er tilgjengelig og brukes av spørringen som er knyttet til WITH-leddet.
  • Spørringer som har en assosiert WITH-klausul kan også skrives ved hjelp av nestede underspørringer, men det gir mer kompleksitet for å lese/feilsøke SQL-spørringen.
  • WITH-klausulen støttes ikke av alle databasesystemer.
  • Navnet som er tildelt underspørringen behandles som om det var en innebygd visning eller tabell
  • SQL WITH-klausulen ble introdusert av Oracle i Oracle 9i versjon 2-databasen.

Syntaks:

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



I denne spørringen brukes WITH-klausulen til å definere en midlertidig relasjon temporaryTable som bare har 1 attributt averageValue. gjennomsnittsverdi inneholder gjennomsnittsverdien av kolonne Attr1 beskrevet i relasjonstabell. SELECT-setningen som følger WITH-leddet vil kun produsere de tuplene der verdien av Attr1 i relasjonstabell er større enn gjennomsnittsverdien hentet fra WITH-leddsetningen.

Merk: Når en spørring med en WITH-klausul utføres, blir først spørringen nevnt i klausulen evaluert og utdataene fra denne evalueringen lagret i en midlertidig relasjon. Etter dette blir hovedspørringen knyttet til WITH-klausulen endelig utført som vil bruke den midlertidige relasjonen produsert.

slå av utviklermodus

Forespørsler

Eksempel 1: Finn alle ansatte hvis lønn er høyere enn gjennomsnittslønnen til alle ansatte.
Navn på forholdet: Ansatt

Ansatt ID Navn Lønn
100011 Smith 50 000
100022 Regning 94000
100027 Han selv 70550
100845 Walden 80 000
115585 Erik 60 000
1100070 Kate 69 000

SQL-spørring:

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

Produksjon:

Ansatt ID Navn Lønn
100022 Regning 94000
100845 Walden 80 000

Forklaring: Gjennomsnittslønnen til alle ansatte er 70591. Derfor ligger alle ansatte med lønn over det oppnådde gjennomsnittet i produksjonsrelasjonen.

Eksempel 2: Finn alle flyselskapene der totallønnen til alle piloter i det flyselskapet er mer enn gjennomsnittet av totallønnen til alle piloter i databasen.

java samlinger rammeverk

Navn på forholdet: Pilot

Ansatt ID Flyselskap Navn Lønn
70007 Airbus 380 Kim 60 000
70002 Boeing Laura 20 000
10027 Airbus 380 Vil 80050
10778 Airbus 380 Warren 80780
115585 Boeing Smith 25 000
114070 Airbus 380 Katy 78 000

SQL-spørring:

char til int
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.avgLønn;>

Produksjon:

Flyselskap
Airbus 380

Forklaring: Den totale lønnen til alle piloter på Airbus 380 = 298 830 og til Boeing = 45 000. Gjennomsnittslønn for alle piloter i tabellen Pilot = 57305. Siden bare den totale lønnen til alle piloter på Airbus 380 er høyere enn gjennomsnittslønnen som oppnås, så Airbus 380 ligger i utgangsforholdet.

Viktige punkter:

  • SQL WITH-klausulen er god når den brukes med komplekse SQL-setninger i stedet for enkle
  • Den lar deg også bryte ned komplekse SQL-spørringer i mindre som gjør det enkelt å feilsøke og behandle komplekse spørringer.
  • SQL WITH-leddet er i utgangspunktet en drop-in-erstatning til den normale underspørringen.