logo

SQL | Clausola CON

La clausola SQL WITH è stata introdotta da Oracle nel database Oracle 9i versione 2. La clausola SQL WITH consente di assegnare un nome a un blocco di sottoquery (un processo chiamato anche refactoring di sottoquery), a cui è possibile fare riferimento in diversi punti all'interno della query SQL principale.

  • La clausola viene utilizzata per definire una relazione temporanea in modo che l'output di questa relazione temporanea sia disponibile e venga utilizzato dalla query associata alla clausola WITH.
  • Le query a cui è associata una clausola WITH possono anche essere scritte utilizzando sottoquery nidificate, ma così facendo si aggiunge maggiore complessità alla lettura/debug della query SQL.
  • La clausola WITH non è supportata da tutti i sistemi di database.
  • Il nome assegnato alla sottoquery viene trattato come se fosse una vista o tabella in linea
  • La clausola SQL WITH è stata introdotta da Oracle nel database Oracle 9i versione 2.

Sintassi:

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



array di strutture in linguaggio c

In questa query, la clausola WITH viene utilizzata per definire una relazione temporanea temporaryTable che ha solo 1 attributo AverageValue. AverageValue contiene il valore medio della colonna Attr1 descritta nella relazione Table. L'istruzione SELECT che segue la clausola WITH produrrà solo quelle tuple in cui il valore di Attr1 nella relazione Table è maggiore del valore medio ottenuto dall'istruzione della clausola WITH.

Nota: Quando viene eseguita una query con una clausola WITH, viene valutata innanzitutto la query menzionata nella clausola e l'output di questa valutazione viene archiviato in una relazione temporanea. Successivamente viene finalmente eseguita la query principale associata alla clausola WITH che utilizzerebbe la relazione temporanea prodotta.

Interrogazioni

Esempio 1: Trova tutti i dipendenti il ​​cui stipendio è superiore allo stipendio medio di tutti i dipendenti.
Nome della relazione: Dipendente

data locale
ID Dipendente Nome Stipendio
100011 fabbro 50000
100022 Conto 94000
100027 Lui stesso 70550
100845 Walden 80000
115585 Erik 60000
1100070 Kate 69000

Interrogazione SQL:

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

Produzione:

ID Dipendente Nome Stipendio
100022 Conto 94000
100845 Walden 80000

Spiegazione: Lo stipendio medio di tutti i dipendenti è 70591. Pertanto, tutti i dipendenti il ​​cui stipendio è superiore alla media ottenuta rientrano nella relazione di produzione.

Esempio 2: Trova tutte le compagnie aeree in cui lo stipendio totale di tutti i piloti di quella compagnia aerea è superiore alla media dello stipendio totale di tutti i piloti nel database.

programma di array bidimensionale in c

Nome della relazione: Pilota

ID Dipendente Compagnia aerea Nome Stipendio
70007 Airbus 380 Kim 60000
70002 Boeing Laura 20000
10027 Airbus 380 Volere 80050
10778 Airbus 380 Warren 80780
115585 Boeing fabbro 25000
114070 Airbus 380 Katie 78000

Interrogazione SQL:

il perno del panda
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>compagnia aereaAverage.avgSalario;>

Produzione:

Compagnia aerea
Airbus 380

Spiegazione: Lo stipendio totale di tutti i piloti dell'Airbus 380 = 298.830 e quello della Boeing = 45000. Stipendio medio di tutti i piloti nella tabella Pilota = 57305. Poiché solo lo stipendio totale di tutti i piloti dell'Airbus 380 è maggiore dello stipendio medio ottenuto, quindi L'Airbus 380 si trova nella relazione di uscita.

Punti importanti:

  • La clausola SQL WITH è utile se utilizzata con istruzioni SQL complesse anziché con istruzioni semplici
  • Consente inoltre di suddividere le query SQL complesse in query più piccole che semplificano il debug e l'elaborazione delle query complesse.
  • La clausola SQL WITH è fondamentalmente una sostituzione drop-in della normale sottoquery.