GeeksforGeeks

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:

companhia Aérea

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.

Related Posts

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *