the SQL WITH clause was introduced by Oracle in The Oracle 9i release 2 database. A cláusula SQL com permite que você dê um nome a um bloco de sub-consulta (um processo também chamado de refactoring sub-consulta), que pode ser referenciado em vários lugares dentro da consulta SQL principal.
- a cláusula é usada para definir uma relação temporária tal que a saída desta relação temporária está disponível e é usada pela consulta que está associada com a cláusula com.
- consultas que têm uma cláusula associada também podem ser escritas usando sub-consultas aninhadas, mas ao fazê-lo adiciona mais complexidade para ler/depurar a consulta SQL.
- com cláusula não é suportado por todo o sistema de banco de dados.
- o nome atribuído à sub-consulta é tratado como se fosse uma visão em linha ou tabela
- a SQL com cláusula foi introduzida pela Oracle na Base de dados Oracle 9i release 2.
sintaxe:
WITH temporaryTable (averageValue) as (SELECT avg(Attr1) FROM Table), SELECT Attr1 FROM Table WHERE Table.Attr1 > temporaryTable.averageValue;
nesta consulta, COM a cláusula é usada para definir um temporária relação temporaryTable que tem apenas 1 atributo averageValue. o valor médio é o valor médio da coluna “Attr1” descrito no quadro relativo às relações. A declaração seleta que se segue à cláusula com produzirá apenas as tuplas em que o valor de Attr1 em relação a tabela é superior ao valor médio obtido a partir da declaração com cláusula.Nota: Quando uma consulta com uma cláusula WITH é executada, primeiro a consulta mencionada dentro da cláusula é avaliada e a saída desta avaliação é armazenada em uma relação temporária. Depois disso, a principal consulta associada com a cláusula com é finalmente executada que usaria a relação temporária produzida.exemplo 1: Encontrar todo o empregado cujo salário é superior ao salário médio de todos os empregados.nome da relação: 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:
EmployeeID | Nome | Salário |
---|---|---|
100022 | Bill | 94000 |
100845 | Walden | 80000 |
Explicação: A média de salários de todos os funcionários é 70591. Portanto, todos os empregados cujo salário é superior à média obtida estão na relação de produção.Exemplo 2: Encontre todas as companhias aéreas onde o salário total de todos os pilotos dessa companhia é superior à média do salário total de todos os pilotos da base de dados.nome da relação: 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 |
Consulta SQL:
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;
Saída:
Airbus 380
Explicação: O total de salários de todos os pilotos do Airbus 380 = 298,830 e que a Boeing = 45000. Salário médio de todos os pilotos da tabela piloto = 57305. Uma vez que apenas o salário total de todos os pilotos da Airbus 380 é superior ao salário médio obtido, a Airbus 380 está, portanto, na relação de produção.pontos importantes:
- o SQL com cláusula é bom quando usado com instruções SQL complexas em vez de simples
- Também lhe permite decompor consultas SQL complexas em pequenas que tornam mais fácil a depuração e o processamento das consultas complexas.
- a SQL com cláusula é basicamente uma substituição drop-in para a sub-consulta normal.este artigo é contribuído por Mayank Kumar. Se você gosta de GeeksforGeeks e gostaria de contribuir, você também pode escrever um artigo usando contribute.geeksforgeeks.org ou e-mail o seu artigo para [email protected]. Veja seu artigo aparecendo na página principal dos GeeksforGeeks e ajude outros Geeks.