Podemos notar na imagem acima que o Tiozo do Gs (sim, s dei nomes
toscos) possui o maior salrio (3025.00), enquanto que o Z da Pizza possui o menor salrio (2250.00). Conseguimos obter esses valores, mnimo e mximo, por meio das funes de totalizao Min() e Max(), descritas a seguir: Min(): Esta funo retorna o menor valor de um conjunto; Max(): Esta funo retorna o maior valor de um conjunto. Com essas funes, podemos saber qual funcionrio detm o maior salrio e qual recebe o menor, como o script abaixo nos mostra usando o Max(): SELECT * FROM FUNCIONARIO WHERE SALARIOFUNCIONARIO = (SELECT MAX(SALARIOFUNCIONARIO) FRO MFUNCIONARIO) Teremos o seguinte resultado:
Como aconteceu antes, assim que a Subquery da instruo acima for
executada, o maior salrio ser obtido e armazenado na memria. Tendo esse dado, o primeiroSELECT ir relacionar somente o funcionrio que detm este valor. Lembre-se: a ordem de execuo do SQL Server (neste caso especfico) sempre de dentro pra fora. Da mesma forma, usando o Min(): SELECT * FROM FUNCIONARIO WHERE SALARIOFUNCIONARIO = (SELECT MIN(SALARIOFUNCIONARIO) FRO MFUNCIONARIO) 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 nmero de registros em uma condio especfica. Aplicando o Count() em nossa tabela, podemos us-lo em conjunto com a Subquery para sabermos quantos funcionrios 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 instruo: SELECT * (SELECT COUNT(*) FROM FUNCIONARIO WHERE IDCARGO = CARGO.IDCARGO) AS 'Qtde de Funcionrios' FROM CARGO Confira o resultado:
- Regras de Uso O uso adequado das Subqueries requer a nossa
observao e cumprimento das seguintes regras: Parnteses As Subqueries devem ser usadas entre parnteses. 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 incio 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 funcionrios que seus cargos forem de Programador Jr. podemos usar a seguinte instruo: UPDATE FUNCIONARIO SET SALARIOFUNCIONARIO = SALARIOFUNCIONARIO * 1.1 WHERE IDCARGO = (SELECT IDCARGO FROM CARGO WHERE IDCARGO = 1) Nossa tabela, com os salrios atualizados ficaria desta forma: Perceba que foram atualizados os salrios apenas dos funcionrios Z da Pizza eMarisa da Horta, que contm o Id 1, referente ao cargo Programador Jr. Delete com Subqueries Podemos usar tambm Subqueries para remover dados de uma tabela. Seguindo a lgica do exemplo anterior, vamos excluir somente os funcionrios que tiverem o cargo DBA Jr. Conseguimos isso usando a seguinte instruo: DELETE FROM FUNCIONARIO WHERE IDCARGO = (SELECT IDCARGO FROM CARGO WHERE IDCARGO = 4) Nesse exemplo, perceba que apenas exclumos 1 funcionrio, o Adalberto do Sacolo:
Fonte de Consulta: Apostila de SQL Server, da Impacta Tecnologia.