logo

SQL | MED klausul

SQL WITH-satsen introducerades av Oracle i Oracle 9i version 2-databasen. SQL WITH-satsen låter dig ge ett sub-query-block ett namn (en process som även kallas sub-query refactoring), som kan refereras till på flera ställen i huvud-SQL-frågan.

k-nn algoritm
  • Klausulen används för att definiera en temporär relation så att utdata från denna temporära relation är tillgänglig och används av frågan som är associerad med WITH-satsen.
  • Frågor som har en associerad WITH-sats kan också skrivas med hjälp av kapslade underfrågor men gör det mer komplext att läsa/felsöka SQL-frågan.
  • WITH-satsen stöds inte av alla databassystem.
  • Namnet som tilldelats underfrågan behandlas som om det vore en inlinevy eller tabell
  • SQL WITH-satsen introducerades av Oracle i Oracle 9i version 2-databasen.

Syntax:



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

I den här frågan används WITH-satsen för att definiera en temporär relation temporaryTable som endast har 1 attribut averageValue. medelvärde innehåller medelvärdet för kolumn Attr1 som beskrivs i relationstabell. SELECT-satsen som följer WITH-satsen kommer endast att producera de tuplar där värdet på Attr1 i relationstabellen är större än det genomsnittliga värdet som erhålls från WITH-satssatsen.

Notera: När en fråga med en WITH-sats exekveras, utvärderas först frågan som nämns i satsen och utdata från denna utvärdering lagras i en temporär relation. Efter detta exekveras slutligen huvudfrågan som är associerad med WITH-satsen som skulle använda den framställda temporära relationen.



Frågor

Exempel 1: Hitta alla anställda vars lön är högre än genomsnittslönen för alla anställda.
Namn på relationen: Anställd

Anställnings-ID namn Lön
100011 Smed 50 000
100022 Räkningen 94 000
100027 Han själv 70550
100845 Walden 80 000
115585 Erik 60 000
1100070 Kate 69 000

SQL-fråga:



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

Produktion:

Anställnings-ID namn Lön
100022 Räkningen 94 000
100845 Walden 80 000

Förklaring: Medellönen för alla anställda är 70591. Därför ligger alla anställda vars lön är högre än det erhållna genomsnittet i outputrelationen.

Exempel 2: Hitta alla flygbolag där den totala lönen för alla piloter i det flygbolaget är mer än genomsnittet av den totala lönen för alla piloter i databasen.

Namn på relationen: Pilot

Anställnings-ID Flygbolag namn Lön
70007 Airbus 380 Kim 60 000
70002 Boeing Laura 20 000
10027 Airbus 380 Kommer 80050
10778 Airbus 380 Warren 80780
115585 Boeing Smed 25 000
114070 Airbus 380 Katy 78 000

SQL-fråga:

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ön;>

Produktion:

Flygbolag
Airbus 380

Förklaring: Den totala lönen för alla piloter på Airbus 380 = 298 830 och för Boeing = 45 000. Medellön för alla piloter i tabellen Pilot = 57 305. Eftersom endast den totala lönen för alla piloter på Airbus 380 är högre än den erhållna genomsnittslönen, så Airbus 380 ligger i utgångsrelationen.

Viktiga punkter:

  • SQL WITH-satsen är bra när den används med komplexa SQL-satser snarare än enkla
  • Det låter dig också bryta ner komplexa SQL-frågor i mindre, vilket gör det enkelt att felsöka och bearbeta de komplexa frågorna.
  • SQL WITH-satsen är i grunden en drop-in-ersättning till den normala underfrågan.