Você está na página 1de 15

Principais Instrues em SQL

Conhea as principais instrues SQL.


Autor: Paulo Csar Machado Jeveaux - jeveaux@portaljava.com
Extrado do site: http://www.portaljava.com
Esto contidas neste tutorial as principais instrues em SQL para a manuteno em Bancos de Dados.

Ateno: Este tutorial foi desenvolvido com o auxlio on-Line do banco MS-ACCESS, O SQL para este
banco no totalmente compatvel com o SQL Padro ANSI, que o oficial na maioria dos bancos de
dados, ento algumas clusulas podem no funcionar em outros bancos.
Instruo SELECT
Instrui o programa principal do banco de dados para retornar a informao como um conjunto de
registros.
Sintaxe SELECT [predicado { * | tabela.* | [tabela.]campo1 [AS alias1] [, [tabela.]campo2 [AS alias2] [,
...]]}
FROM expressotabela [, ...] [IN bancodedadosexterno]
[WHERE... ]
[GROUP BY... ]
[HAVING... ]
[ORDER BY... ]
[WITH OWNERACCESS OPTION]

A instruo SELECT tem as partes abaixo:
predicado --> Um dos seguintes predicados: ALL, DISTINCT, DISTINCTROW ou TOP. Voc usa o
predicado para restringir o nmero de registros que retornam. Se nenhum for especificado, o padro ser
ALL.
* (asterisco) --> Especifica que todos os campos da tabela ou tabelas especificadas so selecionados.
tabela --> O nome da tabela que contm os campos dos quais os registros so selecionados.
campo1, campo2 --> Os nomes dos campos dos quais os dados sero recuperados. Se voc incluir mais de
um campo, eles sero recuperados na ordem listada.
alias1, alias2 --> Os nomes que sero usados como ttulos de colunas em vez dos nomes originais das
colunas na tabela.
expressotabela --> O nome da tabela ou tabelas contendo os dados que voc quer recuperar.
bancodedadosexterno --> O Nome do banco de dados que contm as tabelas em expressotabela se no
estiver no banco de dados atual.

Comentrios

Para executar esta operao, o programa principal de banco de dados procura a tabela ou tabelas
especificadas, extrai as colunas escolhidas, seleciona as linhas que satisfazem o critrio e classifica ou
agrupa as linhas resultantes na ordem especificada.
A instruo SELECT no muda os dados no banco de dados.
SELECT normalmente a primeira palavra em uma instruo SQL. A maior parte das instrues SQL
so instrues SELECT.
A sintaxe mnima da instruo SELECT : SELECT campos FROM tabela
Voc pode usar um asterisco (*) para selecionar todos os campos na tabela. O exemplo abaixo seleciona
todos os campos na tabela Funcionrios: SELECT * FROM Funcionrios

Se o nome de um campo estiver includo em mais de uma tabela na clusula FROM, preceda-o com o
nome da tabela e o operador . (ponto). No exemplo abaixo, o campo Departamento est nas tabelas
Funcionrios e Supervisores. A instruo SQL seleciona Departamento da tabela Funcionrios e
NomeSupv da tabela Supervisores:
SELECT Funcionrios.Departamento, Supervisores.NomeSupv FROM Funcionrios INNER JOIN
Supervisores WHERE Funcionrios.Departamento = Supervisores.Departamento;

Ao criar um objeto Recordset, o programa principal de banco de dados do Jet usa o nome do campo da
tabela como o nome do objeto Field no objeto Recordset. Se voc quiser um nome de campo diferente ou
um nome que no esteja implcito na expresso usada para gerar o campo, use a palavra reservada AS. O
exemplo abaixo usa o ttulo Nasc para nomear o objeto Field retornado no objeto Recordset resultante:
SELECT DataNasc AS Nasc FROM Funcionrios;

Sempre que voc usar funes aggregate ou consultas que retornem nomes de objetos Field ambguos ou
duplicados, voc precisar usar a clusula AS para fornecer um nome alternativo para o objeto Field. O
exemplo abaixo usa o ttulo Contagem para nomear o objeto Field retornado no objeto Recordset
resultante:
SELECT COUNT(FuncionrioID) AS Contagem FROM Funcionrios;

Voc pode usar outras clusulas na instruo SELECT para restringir e organizar posteriormente os seus
dados retornados.

Clusula GROUP BY

GROUP BY opcional. Valores de resumo so omitidos se no houver qualquer funo aggregate SQL
na instruo SELECT. Os valores Null nos campos GROUP BY so agrupados e no omitidos. No
entanto, os valores Null no so avaliados em qualquer funo aggregate SQL. Use a clusula WHERE
para excluir linhas que voc no quer agrupadas e use a clusula HAVING para filtrar os registros aps
eles terem sido agrupados.

A no ser que contenha dados Memo ou OLE Object, um campo na lista de campos GROUP BY pode
fazer referncia a qualquer campo em qualquer tabela listada na clusula FROM. Mesmo que o campo
no esteja includo na instruo SELECT, fornecida a instruo SELECT, inclua pelo menos uma funo
SQL. O programa principal de banco de dados do Jet no pode agrupar campos Memo ou OLE Objects.

Todos os campos na lista de campos SELECT devem ser includos na clusula GROUP BY ou includos
como argumentos em uma funo aggregate SQL.

Clusula HAVING

HAVING opcional. HAVING semelhante a WHERE, que determina quais registros so selecionados.
Depois que os registros so agrupados com GROUP BY, HAVING determina quais registros so
exibidos:
SELECT CategoriaID, Sum(UnidadesNoEstoque) FROM Produtos GROUP BY CategoriaID HAVING
Sum(UnidadesNoEstoque) > 100 AND LIKE "BOS*";

Uma clusula HAVING pode conter at 40 expresses vinculadas por operadores lgicos, como And ou
Or.

Clusula ORDER BY

ORDER BY opcional. Entretanto, se voc quiser exibir seus dados na ordem classificada, voc deve
utilizar ORDER BY. O padro ordem de classificao ascendente (A a Z, 0 a 9). Os dois exemplos
abaixo classificam os nomes dos funcionrios pelo sobrenome.

SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome;

SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome ASC;

Para classificar em ordem descendente (Z a A, 9 a 0), adicione a palavra reservada DESC ao final de cada
campo que voc quiser classificar em ordem descendente. O exemplo abaixo seleciona salrios e os
classifica em ordem descendente

SELECT Sobrenome, Salrio FROM Funcionrios ORDER BY Salrio DESC, Sobrenome; Se voc
especificar um campo que contm dados Memo ou OLE Objects na clusula ORDER BY, um erro
ocorrer. O programa principal de banco de dados do Jet no classifica campos deste tipo. ORDER BY
normalmente o ltimo item em uma instruo SQL.

Voc pode incluir campos adicionais na clusula ORDER BY. Os registros so classificados primeiro
pelo primeiro campo listado depois de ORDER BY. Os registros que tiverem valores iguais naquele
campo so classificados pelo valor no segundo campo listado e assim por diante.

Clusula WITH OWNERACCESS OPTION

A declarao WITH OWNERACCESS OPTION opcional. O exemplo abaixo habilita o usurio a ver as
informaes de salrio (mesmo que no tenha outra permisso para ver a tabela Folha de Pagamentos)
desde que o proprietrio da consulta tenha tal permisso:

SELECT Sobrenome, Nome, Salrio FROM Funcionrios ORDER BY Sobrenome WITH
OWNERACCESS OPTION;

Se, por outro lado, um usurio for impedido de criar ou anexar a uma tabela, voc poder usar WITH
OWNERACCESS OPTION para habilit-lo a executar uma consulta construo de tabela ou consulta
anexao. Se voc quiser reforar as configuraes de segurana do grupo de trabalho e as permisses dos
usurios, no inclua a declarao WITH OWNERACCESS OPTION. Esta opo exige que voc tenha
acesso ao arquivo System.mda associado ao banco de dados. realmente til em implementaes de
multiusurios seguras.

Exemplo da instruo SELECT, clusula FROM

Esse exemplo seleciona os campos "Sobrenome" e "Nome" de todos os registros da tabela
"Funcionrios".

SELECT Sobrenome, Nome FROM Funcionrios

Esse exemplo seleciona todos os campos da tabela "Funcionrios".

SELECT Funcionrios.* FROM Funcionrios;

Esse exemplo conta o nmero de registros que tm uma entrada no campo "CdigoPostal" e nomeia o
campo retornado como "Tcp".

SELECT Count(CdigoPostal) AS Tcp FROM Clientes;

Esse exemplo mostra qual seria o salrio se cada funcionrio recebesse um aumento de 10 porcento. No
altera o valor original dos salrios.

SELECT Sobrenome, Salrio AS Atual, Salrio * 1.1 AS Proposto FROM Funcionrios;

Esse exemplo coloca o ttulo Nome no topo da coluna "Sobrenome". O ttulo Salrio exibido no topo da
coluna "Salrio".

SELECT Sobrenome AS Nome, Salrio FROM Funcionrios;

Esse exemplo mostra o nmero de funcionrios e os salrios mdio e mximo.

SELECT Count(*) AS [Total de Funcionrios], Avg(Salrio) AS [Salrio Mdio], Max(Salrio) AS
[Salrio Mximo] FROM Funcionrios;

Para cada registro, mostra Sobrenome e Salrio no primeiro e ltimo campos. A seqncia de caracteres
"tem um salrio de" retornada como o campo do meio de
cada registro.

SELECT Sobrenome, 'tem um salrio de', Salrio FROM Funcionrios;

Exemplo de clusula GROUP BY

Esse exemplo cria uma lista de nomes de departamentos nicos e o nmero de funcionrios em cada um
destes departamentos.

SELECT Departamento, Count([Departamento]) AS Tbc FROM Funcionrios GROUP BY
Departamento;

Para cada ttulo de funo nico, calcula o nmero de funcionrios do departamento de Vendas que tm
este ttulo.

SELECT Ttulo, Count(Ttulo) AS Tbc FROM Funcionrios WHERE Departamento = 'Vendas' GROUP
BY Ttulo;

Esse exemplo calcula o nmero de itens em estoque para cada combinao de nmero e cor do item.

SELECT Item, Sum(Unidades) AS Tbc FROM ItensEmEstoque GROUP BY Item, Cor;

Exemplo de clusula HAVING

Esse exemplo seleciona os ttulos de cargos do departamento de Produo atribudos a mais de 50
funcionrios.

SELECT Ttulo, Count(Ttulo) FROM Funcionrios WHERE Departamento = 'Produo' GROUP BY
Ttulo HAVING Count(Ttulo) > 50;

Esse exemplo seleciona os departamentos que tenham mais de 100 funcionrios.

SELECT Departamento, Count([Departamento]) FROM Funcionrios GROUP BY Departamento
HAVING Count(Departamento) > 100;

Exemplo de clusula ORDER BY

As instrues SQL mostradas abaixo usam a clusula ORDER BY para classificar os registros em ordem
alfabtica e depois por categoria.

Esse exemplo ordena os registros pelo sobrenome, em ordem descendente (Z-A).

SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome DESC;

Esse exemplo ordena, primeiro, por categoria ID e depois por nome do produto.

SELECT CategoriaID, ProdutoNome, PreoUnit FROM Produtos ORDER BY CategoriaID,
NomeProduto;

Instruo INSERT INTO

Adiciona um ou vrios registros a uma tabela. Isto referido como consulta anexao.

Sintaxe

Consulta anexao de vrios registros:
INSERT INTO destino [IN bancodedadosexterno] [(campo1[, campo2[, ...]])] SELECT
[origem.]campo1[, campo2[, ...] FROM expressodetabela

Consulta anexao de um nico registro:
INSERT INTO destino [(campo1[, campo2[, ...]])] VALUES (valor1[, valor2[, ...])

A instruo INSERT INTO tem as partes abaixo:

destino --> O nome da tabela ou consulta em que os registros devem ser anexados.
banco de dados externo --> O caminho para um banco de dados externo. Para uma descrio do caminho,
consulte a clusula IN.
origem --> O nome da tabela ou consulta de onde os dados devem ser copiados.
campo1, campo2 --> Os nomes dos campos aos quais os dados devem ser anexados, se estiverem aps
um argumento destino ou os nomes dos campos dos quais se deve obter os dados, se estiverem aps um
argumento origem.
expresso de tabela --> O nome da tabela ou tabelas das quais registros so inseridos. Este argumento
pode ser um nico nome de tabela ou uma combinao resultante de uma operao INNER JOIN, LEFT
JOIN ou RIGHT JOIN ou de uma consulta gravada.
valor1, valor2 --> Os valores para inserir em campos especficos do novo registro. Cada valor inserido
no campo que corresponde posio do valor na lista: Valor1 inserido no campo1 do novo registro,
valor2 no campo2 e assim por diante. Voc deve separar os valores com uma vrgula e colocar os campos
de textos entre aspas (" ").

Comentrios

Voc pode usar a instruo INSERT INTO para adicionar um nico registro a uma tabela usando a
sintaxe de consulta anexao de um nico registro como mostrado acima. Neste caso, seu cdigo
especifica o nome e o valor de cada campo do registro. Voc precisa especificar cada um dos campos do
registro para os quais um valor deve ser designado e um valor para este campo. Quando voc no
especifica cada campo, o valor padro ou Null inserido nas colunas omitidas. Os registros so
adicionados no final da tabela.

Voc tambm pode usar INSERT INTO para anexar um conjunto de registros de outra tabela ou consulta
usando a clusula SELECT ... FROM como mostrado acima na sintaxe consulta anexao de vrios
registros. Neste caso, a clusula SELECT especifica os campos para acrescentar tabela destino
especificada.

A tabela de origem ou de destino pode especificar uma tabela ou uma consulta. Se uma consulta for
especificada, o programa principal de banco de dados do Microsoft anexa a qualquer e a todas as tabelas
especificadas pela consulta.

INSERT INTO opcional, mas quando includa, precede a instruo SELECT.

Se sua tabela de destino contm uma chave primria, voc deve acrescentar valores nicos, no Null ao
campo ou campos da chave primria. Caso contrrio, o programa principal de banco de dados do Jet no
anexar os registros.

Se voc anexar registros a uma tabela com um campo Counter e quiser numerar novamente os registros
anexados, no inclua o campo Counter em sua consulta. Inclua o campo Counter na consulta se quiser
manter os valores originais do campo.

Use a clusula IN para anexar registros a uma tabela de outro banco de dados. Para achar quais registros
sero anexados, antes de voc executar a consulta anexao, primeiro execute e veja os resultados de uma
consulta seleo que use o mesmo critrio de seleo.

Uma operao de consulta anexao copia os registros de uma ou mais tabelas em outra. As tabelas que
contm os registros que voc anexa no so afetadas pela operao de consulta anexao.

Em lugar de acrescentar registros existentes de outra tabela, voc pode especificar o valor de cada campo
em um nico registro novo usando a clusula VALUES. Se voc omitir a lista de campo, a clusula
VALUES deve incluir um valor para cada campo na tabela; caso contrrio, um erro ocorrer em INSERT.
Use uma instruo adicional INSERT INTO com uma clusula VALUES para cada registro adicional que
voc quiser criar.

Exemplo de instruo INSERT INTO

Esse exemplo seleciona todos os registros de uma tabela hipottica "Novos Clientes" e os adiciona
tabela "Clientes" (quando no so designadas colunas individuais, os nomes das colunas das tabelas
SELECT devem corresponder exatamente aos da tabela INSERT INTO).

INSERT INTO Clientes SELECT [Novos Clientes].* FROM [Novos Clientes];

Esse exemplo cria um novo registro na tabela "Funcionrios"

INSERT INTO Funcionrios (Nome,Sobrenome, Ttulo) VALUES ("Andr", "Pereira", "Estagirio");

Esse exemplo seleciona todos os estagirios de uma tabela hipottica "Estagirios" que foram contratados
h mais de 30 dias e adiciona seus registros tabela "Funcionrios".

INSERT INTO Funcionrios SELECT Estagirios.* FROM Estagirios WHERE DataContrato < Now() -
30;

Declarao UPDATE

Cria uma consulta atualizao que altera os valores dos campos em uma tabela especificada com base em
critrios especficos.

Sintaxe

UPDATE tabela SET valornovo WHERE critrio;

A instruo UPDATE tem as partes abaixo:

tabela --> O nome da tabela cujos os dados voc quer modificar.
valor novo --> Uma expresso que determina o valor a ser inserido em um campo especfico nos registros
atualizados.
critrio --> Uma expresso que determina quais registros devem ser atualizados. S os registros que
satisfazem a expresso so atualizados.

Comentrios

UPDATE especialmente til quando voc quer alterar muitos registros ou quando os registros que voc
quer alterar esto em vrias tabelas. Voc pode alterar vrios campos ao mesmo tempo. O exemplo
abaixo aumenta o Valor do Pedido em 10 por cento e o valor do Frete em 3 por cento para embarques do
Reino Unido:

UPDATE Pedidos SET ValorPedido = ValorPedido * 1.1, Frete = Frete * 1.03 WHERE PasEmbarque =
'RU'; UPDATE no gera um conjunto de resultados. Se voc quiser saber quais resultados sero alterados,
examine primeiro os resultados da consulta seleo que use os mesmos critrios e ento execute a
consulta atualizao.

Exemplo de instruo UPDATE

Esse exemplo muda os valores no campo "RelatrioPara" para 5 para todos os registros de funcionrios
que atualmente tm valores de RelatrioPara de 2.

UPDATE Funcionrios SET RelatrioPara = 5 WHERE RelatrioPara = 2;

Esse exemplo aumenta o "PreoUnit" de todos os produtos no suspensos do fornecedor 8 em 10
porcento.

UPDATE Produtos SET PreoUnit = PreoUnit * 1.1 WHERE FornecedorID = 8 AND Suspenso = No;

Esse exemplo reduz o PreoUnit de todos os produtos no suspensos fornecidos pela Tokyo Traders em 5
porcento. As tabelas "Produtos" e "Fornecedores" tm uma relao um para vrios.

UPDATE Fornecedores INNER JOIN Produtos ON Fornecedores.FornecedorID =
Produtos.FornecedorID SET PreoUnit = PreoUnit * .95 WHERE NomeEmpresa = 'Tokyo Traders'
AND Suspenso = No;

Instruo DELETE

Cria uma consulta excluso que remove registros de uma ou mais tabelas listadas na clusula FROM que
satisfaz a clusula WHERE.

Sintaxe
DELETE [tabela.*] FROM tabela WHERE critrio

A instruo DELETE tem as partes abaixo:

tabela.* --> O nome opcional da tabela da qual os registros so excludos.
tabela --> O nome da tabela da qual os registros so excludos.
critrio --> Uma expresso que determina qual registro deve ser excludo.

Comentrios

DELETE especialmente til quando voc quer excluir muitos registros. Para eliminar uma tabela inteira
do banco de dados, voc pode usar o mtodo Execute com uma instruo DROP.

Entretanto, se voc eliminar a tabela, a estrutura perdida. Por outro lado, quando voc usa DELETE,
apenas os dados so excludos. A estrutura da tabela e todas as propriedades da tabela, como atributos de
campo e ndices, permanecem intactos.

Voc pode usar DELETE para remover registros de tabelas que esto em uma relao um por vrios com
outras tabelas. Operaes de excluso em cascata fazem com que os registros das tabelas que esto no
lado "vrios" da relao sejam excludos quando os registros correspondentes do lado "um" da relao so
excludos na consulta. Por exemplo, nas relaes entre as tabelas Clientes e Pedidos, a tabela Clientes est
do lado "um" e a tabela Pedidos est no lado "vrios" da relao. Excluir um registro em Clientes faz com
que os registros correspondentes em Pedidos sejam excludos se a opo de excluso em cascata for
especificada.

Uma consulta de excluso exclui registros inteiros e no apenas dados em campos especficos. Se voc
quiser excluir valores de um campo especfico, crie uma consulta atualizao que mude os valores para
Null.

Importante

Aps remover os registros usando uma consulta excluso, voc no poder desfazer a operao. Se quiser
saber quais arquivos foram excludos, primeiro examine os resultados de uma consulta seleo que use o
mesmo critrio e ento, execute a consulta excluso. Mantenha os backups de seus dados. Se voc excluir
os registros errados, poder recuper-los a partir dos seus backups.

Exemplo de instruo DELETE

Esse exemplo exclui todos os registros de funcionrios cujo ttulo seja Estagirio. Quando a clusula
FROM inclui apenas uma tabela, no necessrio indicar o nome da tabela na instruo DELETE.

DELETE *FROM Funcionrios WHERE Ttulo = 'Estagirio';

Esse exemplo exclui todos os registros de funcionrios cujo ttulo seja Estagirio e que tambm tenham
um registro na tabela "FolhadePagamento". As tabelas "Funcionrios" e "FolhadePagamento" tm uma
relao um por um.

DELETE Funcionrios.* FROM Funcionrios INNER JOIN FolhaDePagamento
ON Funcionrios.FuncionrioID = FolhadePagamento.FuncionrioID
WHERE Funcionrios.Ttulo = 'Estagirio';


Subconsultas SQL

Uma subconsulta uma instruo SELECT aninhada dentro de uma instruo SELECT, INSERT,
DELETE ou UPDATE ou dentro de uma outra subconsulta.

Sintaxe

Voc pode usar trs formas de sintaxe para criar uma subconsulta:

comparao [ANY | ALL | SOME] (instruosql)
expresso [NOT] IN (instruosql)
[NOT] EXISTS (instruosql)

Uma subconsulta tem as partes abaixo:

comparao --> Uma expresso e um operador de comparao que compara a expresso com o resultado
da subconsulta.
expresso --> Uma expresso para a qual o resultado definido da subconsulta procurado.
instruosqlt --> Uma instruo SELECT de acordo com as mesmas regras e formato de qualquer outra
instruo SELECT. Ela deve estar entre parnteses.

Comentrios

Voc pode usar uma subconsulta em vez de uma expresso na lista de campo de uma instruo SELECT
ou em uma clusula WHERE ou HAVING. Em uma subconsulta, voc usa uma instruo SELECT para
fornecer um conjunto de um ou mais valores especficos para avaliar as expresses das clusulas WHERE
ou HAVING.

Use o predicado ANY ou SOME, que so sinnimos, para recuperar registros na consulta principal que
satisfaam a comparao com quaisquer registros recuperados na subconsulta. O exemplo abaixo retorna
todos os produtos cujo preo unitrio maior que o preo de qualquer produto vendido com um desconto
de 25 por cento ou mais:

SELECT * FROM Produtos WHERE PreoUnit > ANY
(SELECT PreoUnit FROM PedidoDetalhes WHERE Desconto >= .25);

Use o predicado ALL para recuperar apenas os registros na consulta principal que satisfaam a
comparao com todos os registros recuperados na subconsulta. Se voc mudou ANY para ALL no
exemplo acima, a consulta retornaria apenas os produtos cujo preo unitrio fosse maior que o de todos os
produtos vendidos com um desconto de 25 por cento ou mais. Isto muito mais restritivo.

Use o predicado IN para recuperar apenas os registros na consulta principal para os quais alguns registros
na subconsulta contm um valor igual. O exemplo abaixo retorna todos os produtos com um desconto de
25 por cento ou mais:

SELECT * FROM Produtos WHERE ProdutoID IN
(SELECT ProdutoID FROM PedidoDetalhes WHERE Desconto >= .25);

De maneira contrria, voc pode usar NOT IN para recuperar apenas os registros na consulta principal
para os quais no existam registros com valores iguais na subconsulta. Utilize o predicado EXISTS (com
a palavra reservada NOT opcionalmente) em comparaes true/false para determinar se a subconsulta
retorna algum registro.

Voc tambm pode usar aliases de nomes de tabelas em uma subconsulta para fazer referncia a tabelas
listadas em uma clusula FROM fora da subconsulta. O exemplo abaixo retorna os nomes dos
funcionrios cujos salrios sejam iguais ou superiores mdia de salrios de todos os funcionrios na
mesma funo. Para a tabela Funcionrios dada o alias "T1":

SELECT Sobrenome, Nome, Ttulo, Salrio FROM Funcionrios AS T1
WHERE Salrio >= (SELECT Avg(Salrio)
FROM Funcionrios WHERE T1. T1.Ttulo = Funcionrios.Ttulo) Order by Title;

No exemplo acima, a palavra reservada AS opcional. Algumas subconsultas so aceitas em consultas de
tabela cruzada especialmente como predicados (as da clusula WHERE). Subconsultas como sada (as da
lista SELECT) no so aceitas em tabelas de referncia cruzada.

Exemplos de subconsultas SQL

Esse exemplo lista o nome, ttulo e salrio de todos os representantes de vendas cujos salrios sejam
superiores aos de todos os gerentes e diretores.

SELECT Sobrenome, Nome, Ttulo, Salrio FROM Funcionrios
WHERE Ttulo LIKE "*Repr Vendas*" AND Salrio > ALL
(SELECT Salrio FROM Funcionrios WHERE (Ttulo LIKE "*Gerente*")
OR (Ttulo LIKE "*Diretor*"));

Esse exemplo lista o nome e preo unitrio de todos os produtos cujo preo unitrio seja igual ao do Licor
de Cacau.

SELECT NomeProduto, PreoUnit FROM Produtos
WHERE PreoUnit = (SELECT PreoUnit FROM [Produtos]
WHERE NomeProduto = "Licor de Cacau");

Esse exemplo lista a empresa e o contato de cada empresa de todos os clientes que fizeram pedidos no
segundo trimestre de 1995.

SELECT NomeContato, NomeEmpresa, ContatoTtulo, Fone FROM Clientes
WHERE ClienteID IN (SELECT ClienteID FROM Pedidos
WHERE DataPedido BETWEEN #1/04/95# AND #1/07/95#);

Esse exemplo lista os funcionrios cujo salrio seja maior que a mdia dos salrios de todos os
funcionrios.

SELECT Sobrenome, Nome, Ttulo, Salrio FROM Funcionrios T1
WHERE Salrio >= (SELECT AVG(Salrio) FROM Funcionrios
WHERE Funcionrios.Ttulo = T1.Ttulo) ORDER BY Ttulo;

Esse exemplo seleciona o nome de todos os funcionrios que tenham registrado pelo menos um pedido.
Isto tambm poderia ser feito com INNER JOIN.

SELECT Nome, Sobrenome FROM Funcionrios AS E
WHERE EXISTS (SELECT * FROM Pedidos AS O
WHERE O.FuncionrioID = E.FuncionrioID);

Altera o campo Efetuado do arquivo de servios para 2 caso o mesmo tenha parecer tcnico da entidade
encaminhanhamento diferente de nulo.

UPDATE servico SET efetuado = 2
WHERE numero_servico = ANY (SELECT servico.numero_servico
FROM servico INNER JOIN encaminhamento
ON (servico.numero_servico = encaminhamento. numero_servico)
AND (servico. ano_servico = encaminhamento.ano_servico)
WHERE (((servico.efetuado) Is Null) AND ((encaminhamento.parecer_tecnico) Is Not Null))
GROUP BY servico.numero_servico ORDER BY servico.numero_servico);

Equipe Devmedia
Noticias/Dicas/Artigos publicados.

Leia mais em: Principais Instrues em SQL http://www.devmedia.com.br/principais-instrucoes-em-sql/5748#ixzz2hQn98iOf

Você também pode gostar