20
Conceito SQL O que é SQL: SQL é sigla inglesa de “Structured Query Language” que significa, em Português, Linguagem de Consulta Estruturada, uma linguagem padrão de gerenciamento de dados que interage com os principais bancos de dados baseados no modelo relacional. Alguns dos principais sistemas que utilizam SQL são: MySQL, Oracle, Firebird, Microsoft Access, PostgreSQL (código aberto), HSQLDB (código aberto e escrito em Java). Comparação Conceitos básicos de junção SQL Server 2008 R2 Outras versões 3 de 3 pessoas classificaram isso como útil - Avalie este tópico Usando junções, é possível recuperar dados de duas ou mais tabelas com base em relações lógicas entre as tabelas. Junções indicam como Microsoft SQL Server deveriam usar dados de uma tabela para selecionar as linhas em outra tabela. Uma condição de junção define o modo como duas tabelas são relacionadas em uma consulta por: Especificando a coluna de cada tabela a ser usada para a junção. Uma condição de junção típica especifica uma chave estrangeira de uma tabela e sua chave associada na outra tabela. Especificando um operador lógico (por exemplo, = ou <>) a ser usado na comparação de valores das colunas. Junções internas podem ser especificadas em cláusulas FROM ou WHERE. Junções externas só podem ser especificadas na cláusula FROM. As condições de junção combinam os critérios de pesquisa WHERE e HAVING para controlar as linhas selecionadas das tabelas base referenciadas na cláusula FROM.

Comandos SQL básicos

Embed Size (px)

DESCRIPTION

-

Citation preview

Page 1: Comandos SQL básicos

Conceito SQL

O que é SQL:SQL é sigla inglesa de “Structured Query Language” que significa, em Português, Linguagem de Consulta Estruturada, uma linguagem padrão de gerenciamento de dados que interage com os principais bancos de dados baseados no modelo relacional.Alguns dos principais sistemas que utilizam SQL são: MySQL, Oracle, Firebird, Microsoft Access, PostgreSQL (código aberto), HSQLDB (código aberto e escrito em Java).

Comparação

Conceitos básicos de junçãoSQL Server 2008 R2

Outras versões

3 de 3 pessoas classificaram isso como útil - Avalie este tópico

Usando junções, é possível recuperar dados de duas ou mais tabelas com base em relações lógicas entre as tabelas. Junções indicam como Microsoft SQL Server deveriam usar dados de uma tabela para selecionar as linhas em outra tabela.Uma condição de junção define o modo como duas tabelas são relacionadas em uma consulta por:

Especificando a coluna de cada tabela a ser usada para a junção. Uma condição de junção típica especifica uma chave estrangeira de uma tabela e sua chave associada na outra tabela.

Especificando um operador lógico (por exemplo, = ou <>) a ser usado na comparação de valores das colunas.

Junções internas podem ser especificadas em cláusulas FROM ou WHERE. Junções externas só podem ser especificadas na cláusula FROM. As condições de junção combinam os critérios de pesquisa WHERE e HAVING para controlar as linhas selecionadas das tabelas base referenciadas na cláusula FROM.Especificar as condições de junção na cláusula FROM, ajuda a separá-las de qualquer outro critério de pesquisa que possa ser especificado em uma cláusula WHERE e é o método recomendado para a especificação de junções. Uma sintaxe de junção de cláusula ISO FROM simplificada é:FROM first_table join_type second_table[ON (join_condition)]join_type especifica que tipo de junção é executada: uma junção interna, externa ou cruzada. join_condition define o predicado a ser avaliado para cada par de linhas unidas. O exemplo a seguir é de uma especificação de junção de cláusula FROM:

Page 2: Comandos SQL básicos

FROM Purchasing.ProductVendor JOIN Purchasing.Vendor ON (ProductVendor.BusinessEntityID = Vendor.BusinessEntityID)

O exemplo a seguir é uma instrução SELECT simples que usa esta junção:SELECT ProductID, Purchasing.Vendor.BusinessEntityID, NameFROM Purchasing.ProductVendor JOIN Purchasing.Vendor ON (Purchasing.ProductVendor.BusinessEntityID = Purchasing.Vendor.BusinessEntityID)WHERE StandardPrice > $10 AND Name LIKE N'F%'GO

A seleção retorna o produto e as informações de fornecedor para qualquer combinação de partes fornecidas por uma empresa cujo nome começa com a letra F e o preço do produto é maior que $10.Quando várias tabelas são referenciadas em uma única consulta, todas as referências de coluna devem ser inequívocas. No exemplo anterior, ambas as tabelas de ProductVendore Vendor têm 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 referências para as colunas Vendor no exemplo estão qualificadas.Quando um nome de coluna não está duplicado em duas ou mais tabelas usadas na consulta, a referências a ele não precisam ser qualificadas com o nome da tabela. Isso é mostrado no exemplo anterior. Por vezes a instrução SELECT é difícil de compreender, pois não 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 é aperfeiçoada se aliases de tabela são usados, principalmente quando os nomes de tabelas precisam ser qualificados com nomes de proprietários e de banco de dados. O exemplo seguinte é o mesmo, exceto que aliases de tabela foram atribuídos e as colunas foram qualificadas com aliases de tabela para aperfeiçoar a legibilidade:SELECT pv.ProductID, v.BusinessEntityID, v.NameFROM 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 condições de junção na cláusula FROM, que é o método preferencial. A seguinte consulta contém a mesma condição de junção especificada na cláusula WHERE:SELECT pv.ProductID, v.BusinessEntityID, v.NameFROM Purchasing.ProductVendor AS pv, Purchasing.Vendor AS vWHERE pv.VendorID = v.VendorID AND StandardPrice > $10 AND Name LIKE N'F%';A lista de seleção para uma junção pode fazer referência a todas as colunas nas tabelas unidas ou a qualquer subconjunto de colunas. A lista de seleção não precisa conter colunas de todas as tabelas na junção. Por exemplo, em uma junção de três 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 seleção.Embora as condições de junção tenham comparações de igualdade (=), outros operadores relacionais ou de comparação podem ser especificados, como também

Page 3: Comandos SQL básicos

outros predicados. Para obter mais informações, consulte Usando operadores em expressões e WHERE (Transact-SQL).Quando SQL Server processa junções, o mecanismo de consulta escolhe o método mais eficaz (entre várias possibilidades) de processamento da junção. A execução física de várias junções pode usar muitas otimizações diferentes e portanto não pode ser prevista de maneira confiável.Colunas usadas em uma condição de junção não precisam ter o mesmo nome ou ter o mesmo tipo de dados. Entretanto, se os tipos de dados não forem idênticos, eles devem ser compatíveis, ou do tipo que o SQL Server possa converter implicitamente. Se o tipo de dados não puder ser convertido implicitamente, a condição de junção deverá converter explicitamente o tipo de dados usando a função CAST. Para obter mais informações sobre conversões implícitas e explícitas, consulte Conversão de tipo de dados (Mecanismo de Banco de Dados).A maioria das consultas que usam uma junção pode ser regravada usando uma subconsulta (uma consulta aninhada dentro de outra consulta) e a maioria das subconsultas pode ser regravada como junções. Para obter mais informações sobre subconsultas, consulte Noções básicas sobre subconsultas.

Observação

Tabelas não podem ser unidas diretamente em ntext, text ou colunas image. No entanto, as tabelas podem ser unidas indiretamente emcolunas imageusando SUBSTRING. Por exemplo, SELECT * FROM t1 JOIN t2 ON SUBSTRING(t1.textcolumn20) realiza uma junção interna de duas tabelas nos primeiros 20 caracteres de cada coluna de texto nas tabelascomparação das colunas ntext ou text de duas tabelas é comparar o comprimento das colunas com a cláusula WHERE, por exemplo:DATALENGTH(p1.pr_info) = DATALENGTH(p2.pr_info)

Group by

 

comentários favorito (5) marcar como lido para impressão anotar

Page 4: Comandos SQL básicos

Exemplos com Group By e com a cláusula Having - Totalizando Dados: SQL Server 2008 - Parte 2Acompanhe diversos exemplos práticos com o Group By e com a cláusula 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 são fictícios e são apenas usados para este exemplo):

Page 5: Comandos SQL básicos

  Vamos supor que desejemos obter o número 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 função SUM() em conjunto com o GROUP BY, como a instrução a seguir nos mostra:

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

  FROM Produtos

 GROUP BY Tipo

 Executando a instrução acima temos o seguinte resultado:

 Podemos também contar o número de produtos em estoque de acordo com os fabricantes 

disponíveis. Assim como no exemplo anterior, mais agora levando em conta os fabricantes, os 

Page 6: Comandos SQL básicos

produtos devem ser agrupados por eles, para que depois sejam contabilizados os produtos em 

relação a essa divisão. Para isso, devemos usar a seguinte instrução:

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 disponíveis. 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 instrução 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

Page 7: Comandos SQL básicos

 Assim teremos este resultado:

 Podemos também 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 vocês experimentarem fazer outras combinações com o GROUP BY em 

conjunto com as funções descritas anteriormente, visando assim treinar os conceitos 

apresentados até aqui.

Page 8: Comandos SQL básicos

Cláusula HAVING com GROUP BY – A cláusula HAVING determina uma condição de busca 

para um grupo ou um conjunto de registros, definindo critérios para limitar os resultados 

obtidos a partir do agrupamento de registros. É importante lembrar que essa cláusula só pode 

ser usada em parceria com GROUP BY.

 A cláusula 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 cláusula 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 após 

o uso da cláusula FROM, ao passo que a cláusula HAVING filtra o retorno do agrupamento.

 Para fazermos o filtro conforme especificado acima, devemos usar a seguinte instrução:

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 são os tipos que, 

somados, ultrapassam o valor de 200 unidades em estoque.

Page 9: Comandos SQL básicos

 Outro exemplo: vamos agrupar os produtos com base nos tipos e fabricantes disponíveis. Logo 

após, retornaremos apenas os registros cuja quantidade supera novamente as 200 unidades 

em estoque. Veja a instrução 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) >= 10000.00

Page 10: Comandos SQL básicos

 Simples né?

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

Criação 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 [=] codificação ] [ TABLESPACE [=] espaço_de_tabelas ] [ CONNECTION LIMIT [=] limite_de_conexões ] ]

Descrição

O comando CREATE DATABASE cria um banco de dados do PostgreSQL.

Para poder criar um banco de dados é necessário ser um superusuário ou possuir o privilégio especial CREATEDB. Consulte o comando CREATE USER.

Normalmente, o criador se torna o dono do novo banco de dados. Os superusuários podem criar bancos de dados cujos donos são outros usuários utilizando a cláusulaOWNER e podem, até mesmo, criar bancos de dados cujos donos são usuários sem nenhum privilégio especial. Os usuários comuns com privilégio CREATEDB podem criar apenas bancos de dados cujos donos são eles mesmos.

Page 11: Comandos SQL básicos

Por padrão, o novo banco de dados é criado clonando o banco de dados padrão 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 básico contendo apenas os objetos padrão pré-definidos pela versão do PostgreSQL em uso. Esta forma é útil quando se deseja evitar a cópia de qualquer objeto da instalação local que possa ter sido adicionado ao banco de dadostemplate1. [1]

Parâmetros

nome

O nome do banco de dados a ser criado.

dono_do_banco_de_dados

O nome do usuário do banco de dados que será o dono do novo banco de dados, ou DEFAULT para usar o padrão (ou seja, o usuário 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 padrão (template1).

codificação

Codificação 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 número inteiro da codificação, ou DEFAULT para utilizar a codificação padrão. Os conjuntos de caracteres suportados pelo PostgreSQL estão descritos na Seção 21.2.1.

espaço_de_tabelas

O nome do espaço de tabelas associado ao novo banco de dados, ou DEFAULT para utilizar o espaço de tabelas do banco de dados modelo. Este espaço de tabelas é o espaço de tabelas padrão para os objetos criados neste banco de dados. Para obter informações adicionais deve ser consultado o comando CREATE TABLESPACE.

limite_de_conexões

Quantas conexões simultâneas podem ser estabelecidas com este banco de dados. -1 significa sem limite.

Os parâmetros opcionais podem ser escritos em qualquer ordem, e não apenas na ordem mostrada acima.

Page 12: Comandos SQL básicos

Observações

O comando CREATE DATABASE não pode ser executado dentro de um bloco de transação.

Erros contendo "could not initialize database directory" (não foi possível inicializar o diretório do banco de dados) estão normalmente relacionados com a falta de permissão no diretório 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 conveniência, é um programa escrito em C que chama internamente este comando.

Embora seja possível copiar outro banco de dados em vez do template1 especificando seu nome como modelo, não se pretende (ainda) que esta seja uma funcionalidade de"COPY DATABASE" de uso geral. A principal limitação é que não podem existir outras sessões conectadas ao banco de dados modelo enquanto este está sendo copiado. O comando CREATE DATABASE falha ao iniciar quando existe qualquer outra conexão; caso contrário, as novas conexões ao banco de dados modelo são bloqueadas até que o comando CREATE DATABASE termine. Para obter mais informações deve ser consultada a Seção 19.3.

A opção CONNECTION LIMIT é imposta apenas aproximadamente; se duas novas sessões começarem aproximadamente ao mesmo tempo quando restar apenas um"encaixe" de conexão no banco de dados, será possível que ambas falhem. Além disso, o limite não é imposto aos superusuários.

Exemplos

Para criar um banco de dados:

CREATE DATABASE lusiadas;

Para criar o banco de dados vendas pertencendo ao usuário usuvendas com o espaço de tabelas padrão 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';

Page 13: Comandos SQL básicos

Compatibilidade

Não existe o comando CREATE DATABASE no padrão SQL. Os bancos de dados são equivalentes aos catálogos, cuja criação é definida pela implementação.

Consulte também

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 instância do SQL Server. Quando se executa o comando CREATE DATABASE, a primeira parte do banco de dados é criada copiando o conteúdo do banco de dados model. Depois o restante do novo banco de dados é preenchido com páginas vazias. Se o banco de dados model for modificado, todos os bancos de dados criados depois disso irão herdar estas modificações. Por exemplo, podem ser definidas permissões ou opções de banco de dados, ou adicionados objetos como tabelas, funções 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 introdução sobre sub-consultas.

INSERINDO DADOSO comando para inclusão de dados é o INSERT, que possui a seguinte estrutura:Listagem 1: Sintaxe do comando insert

1234

INSERT INTO nome_tabela (lista-de-campos)VALUES (lista_dados)--OUINSERT 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 receberão os valores. Lista-dados: valores que serão inseridos na tabela. Estes campos devem estar na mesma

ordem descrita em lista-de-campos, todos separados por vírgula. 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

123

INSERT INTO EMPREGADOS(CODIGO, NOME, SALARIO, SECAO)VALUES(1, "HELBERT CARVALHO", 1.500, 1)INSERT INTO EMPREGADOS VALUES(1,"HELBERT CARVALHO",1500,1)

Na segunda opção foi omitida a declaração dos campos. Essa sintaxe funciona somente se for repassado valores para todas as colunas.Podemos também passar valores através de um comando SELECT, conforme abaixo:Listagem 3: Insert com valores provenientes de um select

1234

INSERT INTO EMPREGADOS(CODIGO,NOME, SALARIO, SECAO)      SELECT CODIGO,NOME,SALARIO, SECAO      FROM EMPREGADOS_FILIAL      WHERE DEPARTAMENTO = 2

Page 14: Comandos SQL básicos

Neste comando todos os empregados da tabela EMPREGADOS_FILIAL foram cadastrados na tabela EMPREGADOS. Se o nome dos campos não for citado no comando INSERT, o SELECT deverá retornar valores compatíveis para todos os campos disponíveis na tabela de destino.

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

123

UPDATE nome_tabelaSET CAMPO = "novo_valor"WHERE CONDIÇÃO

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 não for informado, a tabela intera será atualizada Condição: regra que impõe condição para execução do comando

Exemplos:Listagem 5: Exemplos de uso do comando update

123

UPDATE DEPARTAMENTOSET SALARIO = 1000WHERE CODIGODEP = 1

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

123

UPDATE DEPARTAMENTOSET NOME = "HELBERT CARVALHO",SALARIO = 1000WHERE CODIGO = 1

Neste exemplo alteramos mais de um campo de uma vez.Podemos combinar o comando SELECT com UPDATE. No exemplo a seguir, os funcionários de menor salário receberão aumento de 10%.Listagem 7: Outro exemplo de uso do comando update

123

UPDATE EMPREGADOSSET SALARIO = salario * 1.1WHERE SALARIO = (SELECT MIN(salario) FROM EMPREGADOS)

O comando SELECT também pode ser utilizado na atribuição de valor ao campo:Listagem 8: Update passando select como valor

123

UPDATE EMPREGADOSSET SALARIO = (SELECT MAX(salario) FROM EMPREGADOS)WHERE DEPARTAMENTO = 5

REMOVENDO DADOSO comando utilizado para apagar dados é o DELETE.Listagem 9: Sintaxe do comando delete

12DELETE FROM nome_tabelaWHERE condição

Onde: Nome_tabela: nome da tabela que será modificada Where: cláusula que impõe uma condição sobre a execução do comando

Exemplo:Listagem 9: Exemplo de uso do comando delete

12DELETE FROM EMPREGADOSWHERE CODIGO = 125

Sub-consultas SQLUma sub-consulta é uma instrução SELECT aninhada dentro de outra instrução SELECT, INSERT, DELETE ou UPDATE. Veja abaixo alguns exemplos de sintaxe:

Comparação [ANY|SOME|ALL] (instrução sql) Expressão [NOT] IN (instrução sql) Expressão [NOT] EXISTS (instrução sql)

Os predicados ANY e SOME, sinônimos, são utilizados para recuperar registro na consulta principal que satisfaçam a comparação com qualquer registro da sub-consulta.Tabela A

Page 15: Comandos SQL básicos

X Y1 52 93 104 6Tabela BX Y 10 4 20 3 30 11 40 9Exemplo:Listagem 11: Exemplo de subconsulta

12SELECT * FROM AWHERE Y > ANY (SELECT Y FROM B WHERE X>20)

Resultado:X Y3 10Os registros da tabela A que forem maior do que qualquer registro do resultado da sub-consulta serão 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 Y1 52 93 104 6Todos 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 cláusula 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 Y2 9O predicado ANY também pode ser utilizado em conjunto com os comandos UPDATE e DELETE. Veja o exemplo:Listagaem 14: Update usando o operador ANY

123

UPDATE ASET X = X * 10WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)

Listagem 15: Delete usando o operador ANY

12DELETE FROM AWHERE Y > ANY (SELECT Y FROM B WHERE X < 40)

O predicado ALL é utilizado para recuperar os registros da consulta principal que satisfaçam a comparação 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 YListagem 17: Outro exemplo de select com operador ANY

1SELECT * FROM A WHERE Y > ALL (SELECT Y FROM B WHERE X > 30)Resultado:X Y3 10O 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 Y1 5

Page 16: Comandos SQL básicos

3 104 6O predicado IN é utilizado para recuperar apenas os registros na consulta principal que contém equivalência 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 Y2 9No código a seguir retornamos os empregados que venderam um montante maior que R$ 50.000,00.Listagem 20: Select com operador IN utilizando HAVING

1234

SELECT * FROM EMPREGADO WHERE CODIGO IN(SELECT CODEMPREGADO FROM VENDASGROUPY BY CODEMPREGADOHAVING MAX(VALORTOTAL) > 50000)

De maneira contrária, NOT IN pode ser utilizado para recuperar apenas os registros na consulta principal para os quais não exista equivalência na sub-consulta.Listagem 21: Select com operador NOT IN

1SELECT * FROM A WHERE Y NOT IN(SELECT Y FROM B)Resultado:X Y1 53 104 6O predicado EXISTS determina se a sub-consulta retorna algum registro. Esta cláusula produz resultados semelhantes ao uso de IN. Veja exemplo:Listagem 22: Consulta com operador EXISTS

12345

SELECT * FROM EMPREGADO WHERE EXISTS(SELECT * FROM PEDIDOS WHERE EMPREGADO.CODIGO = PEDIDOS.CODEMPREGADO GROUP BY PEDIDOS.CODEMPREGADO HAVING MAX(PEDIDOS.VALOR_TOTAL) > 50000)

Neste comando são retornados o nome e o departamento dos funcionários cuja soma de vendas ultrapassaram R$ 50.000,00.O predicado NOT EXISTS também pode ser utilizado produzindo o efeito contrário:Listagem 23: Consulta com operador NOT EXISTS

123

SELECT * FROM EMPREGADO WHERE NOT EXISTS(SELECT * FROM PEDIDOSWHERE EMPREGADO.CODIGO = PEDIDOS.EMPREGADO)

ConclusãoOs comandos SQL fornecem uma linguagem simples para manipulação de dados em um SGBD. Como o SQL se tornou um padrão, os comandos apresentados funcionarão na maioria dos bancos de dados relacionais. Consulte o help do seu banco de dados para possíveis alterações ou particularidades.

Referências Slides do professor Daniel Wildt da Universidade Federal do Rio Grande do Sul BATTISTI, Julio. SQL SERVER 2005 ADMINISTRAÇÃO E DESENVOLVIMENTO

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