Voltando de onde paramos, acompanhe:

 Subqueries introduzidas com o sinal de igual (=) – Vamos observar a tabela Funcionario:


 Podemos notar na imagem acima que o Tiozão do Gás (sim, só dei nomes toscos) possui o maior salário (3025.00), enquanto que o Zé da Pizza possui o menor salário (2250.00). Conseguimos obter esses valores, mínimo e máximo, por meio das funções de totalização Min() e Max(), descritas a seguir:

·         Min(): Esta função retorna o menor valor de um conjunto;

·         Max(): Esta função retorna o maior valor de um conjunto.

 Com essas funções, podemos saber qual funcionário detém o maior salário e qual recebe o menor, como o script abaixo nos mostra usando o Max():

SELECT * FROM FUNCIONARIO

 WHERE SALARIOFUNCIONARIO = (SELECT MAX(SALARIOFUNCIONARIO) FROM FUNCIONARIO)

 Teremos o seguinte resultado:


 Como aconteceu antes, assim que a Subquery da instrução acima for executada, o maior salário será obtido e armazenado na memória. Tendo esse dado, o primeiro SELECT irá relacionar somente o funcionário que detém este valor. Lembre-se: a ordem de execução do SQL Server (neste caso específico) é sempre de dentro pra fora.

 Da mesma forma, usando o Min():

SELECT * FROM FUNCIONARIO

 WHERE SALARIOFUNCIONARIO = (SELECT MIN(SALARIOFUNCIONARIO) FROM FUNCIONARIO)

 Teremos o seguinte resultado:


 Podemos ainda usar outro operador, que é largamente utilizado no SQL Server. Ele é o Count(), que como há de se imaginar, serve para contar um determinado número de registros em uma condição específica.

 Aplicando o Count() em nossa tabela, podemos usá-lo em conjunto com a Subquery para sabermos quantos funcionários ocupam cada um dos cargos da tabela Cargo (lembra dela?). Neste caso, a Subquery estará correlacionada ao comando externo por meio da tabela Cargo. Para isso, devemos executar a seguinte instrução:

SELECT *,

         (SELECT COUNT(*) FROM FUNCIONARIO

           WHERE IDCARGO = CARGO.IDCARGO) AS 'Qtde de Funcionários'

            FROM CARGO

 Confira o resultado:


 - Regras de Uso – O uso adequado das Subqueries requer a nossa observação e cumprimento das seguintes regras:

·         Parênteses – As Subqueries devem ser usadas entre parênteses.

·         Uma coluna como resultado – Ao usarmos Subqueries, podemos obter apenas uma coluna por Subquery.

·         Sinal de = – Um único valor será retornado ao usarmos o sinal = no início da Subquery.

 Pensa que o artigo acabou? Quase...

 Update com Subqueries – As Subqueries podem ser usadas para atualizarmos dados. Por exemplo: Se quisermos dar um aumento de 10% somente aos funcionários que seus cargos forem de Programador Jr. podemos usar a seguinte instrução:

UPDATE FUNCIONARIO

   SET SALARIOFUNCIONARIO = SALARIOFUNCIONARIO * 1.1

 WHERE IDCARGO = (SELECT IDCARGO FROM CARGO WHERE IDCARGO = 1)

 Nossa tabela, com os salários atualizados ficaria desta forma:


 Perceba que foram atualizados os salários apenas dos funcionários Zé da Pizza e Marisa da Horta, que contém o Id 1, referente ao cargo Programador Jr.

 Delete com Subqueries – Podemos usar também Subqueries para remover dados de uma tabela. Seguindo a lógica do exemplo anterior, vamos excluir somente os funcionários que tiverem o cargo DBA Jr. Conseguimos isso usando a seguinte instrução:

DELETE FROM FUNCIONARIO

 WHERE IDCARGO = (SELECT IDCARGO FROM CARGO WHERE IDCARGO = 4)

 Nesse exemplo, perceba que apenas excluímos 1 funcionário, o Adalberto do Sacolão:


 Fonte de Consulta: Apostila de SQL Server, da Impacta Tecnologia.

 Assim finalizo o artigo. Muito obrigado a todos!

 Um abraço, e até o próximo artigo.

 Wellington Balbo de Camargo

 wellingtonbalbo@gmail.com