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