Você está na página 1de 18

Conceito SQL

O que SQL:
SQL sigla inglesa de Structured Query Language que
significa, em Portugus, Linguagem de Consulta
Estruturada, uma linguagem padro de gerenciamento de
dados que interage com os principais bancos de dados
baseados no modelo relacional.
Alguns dos principais sistemas que utilizam SQL so:
MySQL, Oracle, Firebird, Microsoft Access, PostgreSQL
(cdigo aberto), HSQLDB (cdigo aberto e escrito em Java).
Comparao

Conceitos bsicos de
juno
SQL Server 2008 R2
Outras verses

3 de 3 pessoas classificaram isso como til - Avalie este tpico


Usando junes, possvel recuperar dados de duas ou mais tabelas com base em
relaes lgicas entre as tabelas. Junes indicam como Microsoft SQL Server
deveriam usar dados de uma tabela para selecionar as linhas em outra tabela.
Uma condio de juno define o modo como duas tabelas so relacionadas em
uma consulta por:

Especificando a coluna de cada tabela a ser usada para a juno. Uma


condio de juno tpica especifica uma chave estrangeira de uma tabela e
sua chave associada na outra tabela.

Especificando um operador lgico (por exemplo, = ou <>) a ser usado na


comparao de valores das colunas.

Junes internas podem ser especificadas em clusulas FROM ou WHERE. Junes


externas s podem ser especificadas na clusula FROM. As condies de juno

combinam os critrios de pesquisa WHERE e HAVING para controlar as linhas


selecionadas das tabelas base referenciadas na clusula FROM.
Especificar as condies de juno na clusula FROM, ajuda a separ-las de
qualquer outro critrio de pesquisa que possa ser especificado em uma clusula
WHERE e o mtodo recomendado para a especificao de junes. Uma sintaxe
de juno de clusula ISO FROM simplificada :
FROM first_table join_type second_table[ON (join_condition)]
join_type especifica que tipo de juno executada: uma juno interna, externa ou
cruzada. join_condition define o predicado a ser avaliado para cada par de linhas
unidas. O exemplo a seguir de uma especificao de juno de clusula FROM:
FROM Purchasing.ProductVendor JOIN Purchasing.Vendor
ON (ProductVendor.BusinessEntityID = Vendor.BusinessEntityID)
O exemplo a seguir uma instruo SELECT simples que usa esta juno:
SELECT ProductID, Purchasing.Vendor.BusinessEntityID, Name
FROM Purchasing.ProductVendor JOIN Purchasing.Vendor
ON (Purchasing.ProductVendor.BusinessEntityID =
Purchasing.Vendor.BusinessEntityID)
WHERE StandardPrice > $10
AND Name LIKE N'F%'
GO
A seleo retorna o produto e as informaes de fornecedor para qualquer
combinao de partes fornecidas por uma empresa cujo nome comea com a letra
F e o preo do produto maior que $10.
Quando vrias tabelas so referenciadas em uma nica consulta, todas as
referncias de coluna devem ser inequvocas. No exemplo anterior, ambas as
tabelas de ProductVendore Vendor tm uma coluna nomeada BusinessEntityID.
Qualquer nome de coluna que seja duplicado entre duas ou mais tabelas
referenciadas na consulta deve ser qualificado com o nome da tabela. Todas as
referncias para as colunas Vendor no exemplo esto qualificadas.
Quando um nome de coluna no est duplicado em duas ou mais tabelas usadas na
consulta, a referncias a ele no precisam ser qualificadas com o nome da tabela.
Isso mostrado no exemplo anterior. Por vezes a instruo SELECT difcil de
compreender, pois no h nada que indique a tabela que forneceu cada coluna. A
legibilidade da consulta ser aprimorada se todas as colunas estiverem qualificadas
com seus nomes de tabela. A legibilidade aperfeioada se aliases de tabela so
usados, principalmente quando os nomes de tabelas precisam ser qualificados com
nomes de proprietrios e de banco de dados. O exemplo seguinte o mesmo,
exceto que aliases de tabela foram atribudos e as colunas foram qualificadas com
aliases de tabela para aperfeioar a legibilidade:
SELECT pv.ProductID, v.BusinessEntityID, v.Name
FROM Purchasing.ProductVendor AS pv

JOIN Purchasing.Vendor AS v
ON (pv.BusinessEntityID = v.BusinessEntityID)
WHERE StandardPrice > $10
AND Name LIKE N'F%';
Os exemplos anteriores especificaram as condies de juno na clusula FROM,
que o mtodo preferencial. A seguinte consulta contm a mesma condio de
juno especificada na clusula WHERE:
SELECT pv.ProductID, v.BusinessEntityID, v.Name
FROM Purchasing.ProductVendor AS pv, Purchasing.Vendor AS v
WHERE pv.VendorID = v.VendorID
AND StandardPrice > $10
AND Name LIKE N'F%';
A lista de seleo para uma juno pode fazer referncia a todas as colunas nas
tabelas unidas ou a qualquer subconjunto de colunas. A lista de seleo no precisa
conter colunas de todas as tabelas na juno. Por exemplo, em uma juno de trs
tabelas, somente uma tabela pode ser usada para ligar uma das tabelas terceira
e, nenhuma das colunas da tabela do meio, precisa ser referenciada na lista de
seleo.
Embora as condies de juno tenham comparaes de igualdade (=), outros
operadores relacionais ou de comparao podem ser especificados, como tambm
outros predicados. Para obter mais informaes, consulte Usando operadores em
expresses e WHERE (Transact-SQL).
Quando SQL Server processa junes, o mecanismo de consulta escolhe o mtodo
mais eficaz (entre vrias possibilidades) de processamento da juno. A execuo
fsica de vrias junes pode usar muitas otimizaes diferentes e portanto no
pode ser prevista de maneira confivel.
Colunas usadas em uma condio de juno no precisam ter o mesmo nome ou ter
o mesmo tipo de dados. Entretanto, se os tipos de dados no forem idnticos, eles
devem ser compatveis, ou do tipo que o SQL Server possa converter
implicitamente. Se o tipo de dados no puder ser convertido implicitamente, a
condio de juno dever converter explicitamente o tipo de dados usando a
funo CAST. Para obter mais informaes sobre converses implcitas e explcitas,
consulte Converso de tipo de dados (Mecanismo de Banco de Dados).
A maioria das consultas que usam uma juno pode ser regravada usando uma
subconsulta (uma consulta aninhada dentro de outra consulta) e a maioria das
subconsultas pode ser regravada como junes. Para obter mais informaes sobre
subconsultas, consulte Noes bsicas sobre subconsultas.

Observao

Tabelas no podem ser unidas diretamente em ntext, text ou colunas image. No entanto, as tabelas podem
colunas imageusando SUBSTRING. Por exemplo, SELECT * FROM t1 JOIN t2 ON SUBSTRING(t1.te
20) realiza uma juno interna de duas tabelas nos primeiros 20 caracteres de cada coluna de texto nas tab
comparao das colunas ntext ou text de duas tabelas comparar o comprimento das colunas com a clu
DATALENGTH(p1.pr_info) = DATALENGTH(p2.pr_info)

Group by

comentrios favorito (5) marcar como lido para impresso anotar

Exemplos com
Group By e com a
clusula Having Totalizando Dados:
SQL Server 2008 Parte 2
Acompanhe diversos exemplos prticos
com o Group By e com a clusula Having
em conjunto com o Group By.
1

Gostei (16)

(1)

Para compreendermos melhor o uso do GROUP BY, considere a


tabela Produtos (lembrando que os valores associados aos nomes so
fictcios e so apenas usados para este exemplo):

Vamos supor que desejemos obter o nmero de produtos em estoque,


agrupados pelo tipo, para que depois seja feita a soma da quantidade
existente em cada um dos grupos. Para isso usamos a funo SUM() em
conjunto com o GROUP BY, como a instruo a seguir nos mostra:

SELECT Tipo, SUM(Quantidade) AS 'Quantidade em Estoque'

FROM Produtos

GROUP BY Tipo

Executando a instruo acima temos o seguinte resultado:

Podemos tambm contar o nmero de produtos em estoque de acordo com


os fabricantes disponveis. Assim como no exemplo anterior, mais agora

levando em conta os fabricantes, os produtos devem ser agrupados por


eles, para que depois sejam contabilizados os produtos em relao a essa
diviso. Para isso, devemos usar a seguinte instruo:

SELECT Fabricante, SUM(Quantidade) AS 'Quantidade em Estoque'

FROM Produtos

GROUP BY Fabricante

Assim temos o seguinte resultado:

Agora vamos somar a quantidade de produtos em estoque de acordo com


os tipos e fabricantes disponveis. Primeiro, ser agrupados os produtos de
acordo com os tipos e fabricantes, para que depois seja feita a soma de
cada um desses grupos (essa a ordem que o SQL Server faz logicamente,
mais nossa instruo segue a ordem inversa). Confira como fazer isso a
seguir:

SELECT Tipo, Fabricante, SUM(Quantidade) AS 'Quantidade em Estoque'

FROM Produtos

GROUP BY Tipo, Fabricante

Assim teremos este resultado:

Podemos tambm obter o valor total dos produtos em estoque, agrupados


por tipo. Veja como:

SELECT Tipo, SUM(Quantidade * VlUnitario) AS 'Valor do Estoque'

FROM Produtos

GROUP BY Tipo

Temos o seguinte resultado:

Deixo como dica para vocs experimentarem fazer outras combinaes


com o GROUP BY em conjunto com as funes descritas anteriormente,
visando assim treinar os conceitos apresentados at aqui.

Clusula HAVING com GROUP BY A clusula HAVING determina uma


condio de busca para um grupo ou um conjunto de registros, definindo
critrios para limitar os resultados obtidos a partir do agrupamento de
registros. importante lembrar que essa clusula s pode ser usada em
parceria com GROUP BY.

A clusula GROUP BY pode ser empregada, entre outras finalidades, para


agrupar os produtos de acordo com cada tipo existente. Dentro de cada um
dos grupos, a clusula HAVING pode ser usada para restringir apenas os
registros que possuem uma quantidade superior a 200 unidades no
estoque, por exemplo.

Obs: O HAVING diferente do WHERE. O WHERE restringe os resultados


obtidos sempre aps o uso da clusula FROM, ao passo que a
clusula HAVING filtra o retorno do agrupamento.

Para fazermos o filtro conforme especificado acima, devemos usar a


seguinte instruo:

SELECT Tipo, SUM(Quantidade) AS 'Quantidade em Estoque'

FROM Produtos

GROUP BY Tipo

HAVING SUM(Quantidade) > 200

Assim teremos o seguinte resultado:

Perceba que este tipo de filtragem nos retornou apenas 2 registros, que so
os tipos que, somados, ultrapassam o valor de 200 unidades em estoque.

Outro exemplo: vamos agrupar os produtos com base nos tipos e


fabricantes disponveis. Logo aps, retornaremos apenas os registros cuja
quantidade supera novamente as 200 unidades em estoque. Veja a
instruo e o resultado a seguir:

SELECT Tipo, Fabricante, SUM(Quantidade) AS 'Quantidade em Estoque'

FROM Produtos

GROUP BY Tipo, Fabricante

HAVING SUM(Quantidade) > 200

Note que agora temos 3 registros. Vamos agora fazer um exemplo mais
complexo: vamos supor que o agrupamento dever ser feito pelo Nome.
Dentro deste agrupamento, desejamos obter apenas aqueles cuja
quantidade novamente supera as 200 unidades em estoque e cujo valor

estocado seja igual ou superior a 100 mil. Veja como fazer a seguir, e seu
resultado:

SELECT Nome, SUM(Quantidade) AS 'Quantidade em


Estoque', SUM(Quantidade * VlUnitario)AS 'Valor em Estoque'

FROM Produtos

GROUP BY Nome

HAVING SUM(Quantidade) > 200 AND SUM (Quantidade * VlUnitario) >= 10


000.00

Simples n?

Leia mais em: Exemplos com Group By e com a clusula Having Totalizando Dados: SQL Server 2008 - Parte
2 http://www.devmedia.com.br/exemplos-com-group-by-e-com-a-clausulahaving-totalizando-dados-sql-server-2008-parte-2/19839#ixzz3nhwvmqqG

Criao DATABASE

CREATE DATABASE
Nome
CREATE DATABASE -- cria um banco de dados

Sinopse
CREATE DATABASE nome
[ [ WITH ] [ OWNER [=] dono_do_banco_de_dados ]
[ TEMPLATE [=] modelo ]
[ ENCODING [=] codificao ]
[ TABLESPACE [=] espao_de_tabelas ]
[ CONNECTION LIMIT [=] limite_de_conexes ] ]

Descrio
O comando CREATE DATABASE cria um banco de dados do PostgreSQL.
Para poder criar um banco de dados necessrio ser um superusurio ou
possuir o privilgio especial CREATEDB. Consulte o comando CREATE USER.
Normalmente, o criador se torna o dono do novo banco de dados. Os
superusurios podem criar bancos de dados cujos donos so outros usurios
utilizando a clusulaOWNER e podem, at mesmo, criar bancos de dados
cujos donos so usurios sem nenhum privilgio especial. Os usurios
comuns com privilgio CREATEDB podem criar apenas bancos de dados
cujos donos so eles mesmos.
Por padro, o novo banco de dados criado clonando o banco de dados
padro do sistema template1. Pode ser especificado um banco de dados
modelo diferente escrevendo TEMPLATE modelo. Em particular,
escrevendo TEMPLATE template0 pode ser criado um banco de dados bsico
contendo apenas os objetos padro pr-definidos pela verso
do PostgreSQL em uso. Esta forma til quando se deseja evitar a cpia de
qualquer objeto da instalao local que possa ter sido adicionado ao banco
de dadostemplate1. [1]

Parmetros
nome
O nome do banco de dados a ser criado.
dono_do_banco_de_dados
O nome do usurio do banco de dados que ser o dono do novo
banco de dados, ou DEFAULT para usar o padro (ou seja, o usurio
que est executando o comando).
modelo
Nome do modelo a partir do qual o novo banco de dados ser criado,
ou DEFAULT para utilizar o modelo padro (template1).

codificao
Codificao do conjunto de caracteres a ser utilizado no novo banco
de dados. Deve ser especificada uma constante cadeia de caracteres
(por exemplo, 'SQL_ASCII'), ou o nmero inteiro da codificao,
ou DEFAULT para utilizar a codificao padro. Os conjuntos de
caracteres suportados pelo PostgreSQL esto descritos na Seo
21.2.1.
espao_de_tabelas
O nome do espao de tabelas associado ao novo banco de dados,
ou DEFAULT para utilizar o espao de tabelas do banco de dados
modelo. Este espao de tabelas o espao de tabelas padro para os
objetos criados neste banco de dados. Para obter informaes
adicionais deve ser consultado o comando CREATE TABLESPACE.
limite_de_conexes
Quantas conexes simultneas podem ser estabelecidas com este
banco de dados. -1 significa sem limite.
Os parmetros opcionais podem ser escritos em qualquer ordem, e no
apenas na ordem mostrada acima.

Observaes
O comando CREATE DATABASE no pode ser executado dentro de um bloco
de transao.
Erros contendo "could not initialize database directory" (no foi possvel
inicializar o diretrio do banco de dados) esto normalmente relacionados
com a falta de permisso no diretrio de dados, disco cheio, ou outros
problemas no sistema de arquivos.
Para remover o banco de dados deve ser utilizado o comando DROP
DATABASE.
O aplicativo createdb, fornecido por convenincia, um programa escrito em
C que chama internamente este comando.
Embora seja possvel copiar outro banco de dados em vez
do template1 especificando seu nome como modelo, no se pretende
(ainda) que esta seja uma funcionalidade de"COPY DATABASE" de uso geral.
A principal limitao que no podem existir outras sesses conectadas ao
banco de dados modelo enquanto este est sendo copiado. O
comando CREATE DATABASE falha ao iniciar quando existe qualquer outra

conexo; caso contrrio, as novas conexes ao banco de dados modelo so


bloqueadas at que o comando CREATE DATABASE termine. Para obter mais
informaes deve ser consultada a Seo 19.3.
A opo CONNECTION LIMIT imposta apenas aproximadamente; se duas
novas sesses comearem aproximadamente ao mesmo tempo quando
restar apenas um"encaixe" de conexo no banco de dados, ser possvel
que ambas falhem. Alm disso, o limite no imposto aos superusurios.

Exemplos
Para criar um banco de dados:

CREATE DATABASE lusiadas;

Para criar o banco de dados vendas pertencendo ao usurio usuvendas com


o espao de tabelas padro espvendas:

CREATE DATABASE vendas OWNER usuvendas TABLESPACE espvendas;

Para criar o banco de dados musica com suporte ao conjunto de


caracteres ISO-8859-1:

CREATE DATABASE musica ENCODING 'LATIN1';

Compatibilidade
No existe o comando CREATE DATABASE no padro SQL. Os bancos de
dados so equivalentes aos catlogos, cuja criao definida pela
implementao.

Consulte tambm
ALTER DATABASE, DROP DATABASE

Notas

[1]

SQL Server O banco de dados model utilizado como


modelo para todos os bancos de dados criados em uma
instncia do SQL Server. Quando se executa o
comando CREATE DATABASE, a primeira parte do banco de
dados criada copiando o contedo do banco de
dados model. Depois o restante do novo banco de dados
preenchido com pginas vazias. Se o banco de

dados model for modificado, todos os bancos de dados


criados depois disso iro herdar estas modificaes. Por
exemplo, podem ser definidas permisses ou opes de
banco de dados, ou adicionados objetos como tabelas,
funes e procedimentos armazenados. SQL Server 2005 Books
Online model Database (N. do T.)

Nesse artigo veremos como incluir, excluir e atualizar registros em um banco de dados. No final do artigo
descreverei uma introduo sobre sub-consultas.

INSERINDO DADOS
O comando para incluso de dados o INSERT, que possui a seguinte estrutura:
Listagem 1: Sintaxe do comando insert

1INSERT INTO nome_tabela (lista-de-campos)


2VALUES (lista_dados)
3--OU
4INSERT INTO nome_tabela VALUES (lista_dados)
Onde:

Nome_tabela: nome da tabela no qual ser inserido os dados.


Lista-de-campos: nome das colunas que recebero os valores.
Lista-dados: valores que sero inseridos na tabela. Estes campos devem estar na
mesma ordem descrita em lista-de-campos, todos separados por vrgula. Se for utilizado um
comando SELECT o mesmo deve retornar a mesma quantidade de colunas com os mesmos
tipos de dados especificados em lista-de-campos.
Exemplos:
Listagem 2: Exemplos do comando insert

1INSERT INTO EMPREGADOS(CODIGO, NOME, SALARIO, SECAO)


2VALUES(1, "HELBERT CARVALHO", 1.500, 1)
3INSERT INTO EMPREGADOS VALUES(1,"HELBERT CARVALHO",1500,1)
Na segunda opo foi omitida a declarao dos campos. Essa sintaxe funciona somente se for repassado
valores para todas as colunas.
Podemos tambm passar valores atravs de um comando SELECT, conforme abaixo:
Listagem 3: Insert com valores provenientes de um select

1INSERT INTO EMPREGADOS(CODIGO,NOME, SALARIO, SECAO)


SELECT CODIGO,NOME,SALARIO, SECAO
2
FROM EMPREGADOS_FILIAL
3
WHERE DEPARTAMENTO = 2
4
Neste comando todos os empregados da tabela EMPREGADOS_FILIAL foram cadastrados na tabela
EMPREGADOS. Se o nome dos campos no for citado no comando INSERT, o SELECT dever retornar
valores compatveis para todos os campos disponveis na tabela de destino.

ATUALIZANDO DADOS
O comando para atualizar registros UPDATE, que tem a seguinte sintaxe:
Listagem 4: Sintaxe do comando update

1UPDATE nome_tabela
2SET CAMPO = "novo_valor"
3WHERE CONDIO
Onde:

Nome_tabela: nome da tabela que ser modificada


Campo: campo que ter seu valor alterado
Novo_valor: valor que substituir o antigo dado cadastrado em campo
Where: Se no for informado, a tabela intera ser atualizada
Condio: regra que impe condio para execuo do comando
Exemplos:
Listagem 5: Exemplos de uso do comando update

1UPDATE DEPARTAMENTO
SALARIO = 1000
2SET
WHERE CODIGODEP = 1

3
No trecho acima, todos os colaboradores que fazem parte do departamento 1 ter o salrio alterado para
1000.
Listagem 6: Update em mais de um campo

1UPDATE DEPARTAMENTO
2SET NOME = "HELBERT CARVALHO",SALARIO = 1000
3WHERE CODIGO = 1
Neste exemplo alteramos mais de um campo de uma vez.
Podemos combinar o comando SELECT com UPDATE. No exemplo a seguir, os funcionrios de menor
salrio recebero aumento de 10%.
Listagem 7: Outro exemplo de uso do comando update

1UPDATE EMPREGADOS
2SET SALARIO = salario * 1.1
3WHERE SALARIO = (SELECT MIN(salario) FROM EMPREGADOS)
O comando SELECT tambm pode ser utilizado na atribuio de valor ao campo:
Listagem 8: Update passando select como valor

1UPDATE EMPREGADOS
2SET SALARIO = (SELECT MAX(salario) FROM EMPREGADOS)
3WHERE DEPARTAMENTO = 5

REMOVENDO DADOS
O comando utilizado para apagar dados o DELETE.
Listagem 9: Sintaxe do comando delete

1DELETE FROM nome_tabela


2WHERE condio
Onde:

Nome_tabela: nome da tabela que ser modificada


Where: clusula que impe uma condio sobre a execuo do comando
Exemplo:
Listagem 9: Exemplo de uso do comando delete

1DELETE FROM EMPREGADOS


2WHERE CODIGO = 125

Sub-consultas SQL

Uma sub-consulta uma instruo SELECT aninhada dentro de outra instruo SELECT, INSERT,
DELETE ou UPDATE. Veja abaixo alguns exemplos de sintaxe:
Comparao [ANY|SOME|ALL] (instruo sql)
Expresso [NOT] IN (instruo sql)
Expresso [NOT] EXISTS (instruo sql)
Os predicados ANY e SOME, sinnimos, so utilizados para recuperar registro na consulta principal que
satisfaam a comparao com qualquer registro da sub-consulta.
Tabela A
X
Y
1
5
2
9
3
10
4
6
Tabela B
X Y 10 4 20 3 30 11 40 9
Exemplo:
Listagem 11: Exemplo de subconsulta

1SELECT * FROM A
2WHERE Y > ANY (SELECT Y FROM B WHERE X>20)
Resultado:
X
Y
3
10
Os registros da tabela A que forem maior do que qualquer registro do resultado da sub-consulta sero
selecionados. Repare que nenhum registro da tabela A maior do que 11, no entanto, o terceiro registro
maior do que 9.
Vamos a outro exemplo:
Listagem 12: Exemplo de subconsulta com o operador ANY

1SELECT * FROM A WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)
Resultado:
X
Y
1
5
2
9
3
10
4
6
Todos os registros foram selecionados porque o valor de y no resultado da sub-consulta assume 3, que
menor do que todos os valores de y da tabela A. Se utilizarmos o ANY com sinal de igualdade teremos o
mesmo resultado da clusula IN. Exemplo:
Listagem 13: Exemplo com o operador ANY e sinal de igualdade

1SELECT * FROM A WHERE Y = ANY (SELECT Y FROM B)


Resultado:
X
Y
2
9
O predicado ANY tambm pode ser utilizado em conjunto com os comandos UPDATE e DELETE. Veja o
exemplo:
Listagaem 14: Update usando o operador ANY

1UPDATE A
2SET X = X * 10
3WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)
Listagem 15: Delete usando o operador ANY

1DELETE FROM A
2WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)
O predicado ALL utilizado para recuperar os registros da consulta principal que satisfaam a
comparao com todos os registros recuperados na sub-consulta. Observe os exemplos:
Listagem 16: Exemplo de select com operador ANY

1SELECT * FROM A WHERE Y > ALL (SELECT Y FROM B)


Resultado:
X

Listagem 17: Outro exemplo de select com operador ANY

1SELECT * FROM A WHERE Y > ALL (SELECT Y FROM B WHERE X > 30)
Resultado:
X
Y
3
10
O uso de != ALL equivale a NOT IN.
Listagem 18: Subconsulta com operador ALL

1SELECT * FROM A WHERE Y != ALL (SELECT Y FROM B)


Resultado:
X
Y
1
5
3
10
4
6
O predicado IN utilizado para recuperar apenas os registros na consulta principal que contm
equivalncia na sub-consulta. o mesmo que =ANY.
Listagem 19: Consulta com operador IN

1SELECT * FROM A WHERE Y IN(SELECT Y FROM B)


Resultado:
X
Y
2
9
No cdigo a seguir retornamos os empregados que venderam um montante maior que R$ 50.000,00.
Listagem 20: Select com operador IN utilizando HAVING

1SELECT * FROM EMPREGADO WHERE CODIGO IN


2(SELECT CODEMPREGADO FROM VENDAS
3GROUPY BY CODEMPREGADO
4HAVING MAX(VALORTOTAL) > 50000)
De maneira contrria, NOT IN pode ser utilizado para recuperar apenas os registros na consulta principal
para os quais no exista equivalncia na sub-consulta.

Listagem 21: Select com operador NOT IN

1SELECT * FROM A WHERE Y NOT IN(SELECT Y FROM B)


Resultado:
X
Y
1
5
3
10
4
6
O predicado EXISTS determina se a sub-consulta retorna algum registro. Esta clusula produz resultados
semelhantes ao uso de IN. Veja exemplo:
Listagem 22: Consulta com operador EXISTS

1SELECT * FROM EMPREGADO WHERE EXISTS


2(SELECT * FROM PEDIDOS
3 WHERE EMPREGADO.CODIGO = PEDIDOS.CODEMPREGADO
4 GROUP BY PEDIDOS.CODEMPREGADO
HAVING MAX(PEDIDOS.VALOR_TOTAL) > 50000)
5
Neste comando so retornados o nome e o departamento dos funcionrios cuja soma de vendas
ultrapassaram R$ 50.000,00.
O predicado NOT EXISTS tambm pode ser utilizado produzindo o efeito contrrio:
Listagem 23: Consulta com operador NOT EXISTS

1SELECT * FROM EMPREGADO WHERE NOT EXISTS


2(SELECT * FROM PEDIDOS
3WHERE EMPREGADO.CODIGO = PEDIDOS.EMPREGADO)

Concluso

Os comandos SQL fornecem uma linguagem simples para manipulao de dados em um


SGBD. Como o SQL se tornou um padro, os comandos apresentados funcionaro na maioria dos
bancos de dados relacionais. Consulte o help do seu banco de dados para possveis alteraes ou
particularidades.

Referncias
Slides do professor Daniel Wildt da Universidade Federal do Rio Grande do Sul
BATTISTI, Julio. SQL SERVER 2005 ADMINISTRAO E DESENVOLVIMENTO

Read more: http://www.linhadecodigo.com.br/artigo/2975/comandos-basicos-em-sql-insertupdate-delete-e-select.aspx#ixzz3nhmFEEsh