sql aula 2

23
27/05/2012 1 Banco de Dados I SQL – Parte 2 e 3 Ludmila de Almeida Pedrosa [email protected] Manipulando Dados - DML CONSULTA SELECT INCLUSÃO INSERT ALTERAÇÃO UPDATE EXCLUSÃO DELETE

Upload: iranildo-junior

Post on 15-Mar-2016

244 views

Category:

Documents


3 download

DESCRIPTION

Aula sql 2

TRANSCRIPT

Page 1: SQL aula  2

27/05/2012

1

Banco de Dados I

SQL – Parte 2 e 3

Ludmila de Almeida [email protected]

Manipulando Dados - DML

CONSULTA SELECT

INCLUSÃO INSERT

ALTERAÇÃO UPDATE

EXCLUSÃO DELETE

Page 2: SQL aula  2

27/05/2012

2

SQL - Consultas

• Sintaxe para consultar dados em tabela - ANSI 89:

SELECT atributo1, atributo2, ...

FROM tabela 1, tabela 2, ...

[WHERE condição]

• Onde:

– SELECT: Especifica as colunas e expressões exibidas noresultado da consulta.

– FROM: Especifica as tabelas que contêm os dados exibidos noresultado da consulta.

– WHERE: Especifica as condições usadas para filtrar registros noresultado da consulta, sendo uma cláusula opcional.

SQL - Consultas

• Todos os exemplos usarão o seguinte Modelo:

Page 3: SQL aula  2

27/05/2012

3

SQL - Consultas

• Para selecionar todos os dados (atributos):

Usar *

• Exibir todos os dados de todos os clientes:

SELECT * FROM Cliente

• Exibir todos os dados de todos os funcionários:

SELECT * FROM Funcionario

• Exibir todos os dados de todos os produtos:

SELECT * FROM Produto

SQL - Consultas

• Exibir código, nome e telefone de todos os clientes:

SELECT codigo, nome, fone

FROM Cliente

• Exibir código, nome, estado civil e data de nascimento de todos os funcionários:

SELECT codigo, nome, estcivil, datanasc

FROM Funcionario

• Exibir código, nome, preço de custo e preço de venda de todos os produtos :

SELECT codigo, nome, custo, venda

FROM Produto

Page 4: SQL aula  2

27/05/2012

4

SQL – Eliminar Duplicação

• Sintaxe:

SELECT DISTINCT <lista de colunas>

FROM <tabela>

SQL – Eliminar Duplicação

• Exemplo1 - Exibir o código de todos os clientes que jáfizeram pedido à empresa, sem repetições:

SELECT DISTINCT cliente

FROM Pedido

• Exemplo2 - Exibir todos os bairros com os respectivoscódigos da cidade dos funcionários da empresa, semrepetições:

SELECT DISTINCT bairro, cidade

FROM Funcionário

Page 5: SQL aula  2

27/05/2012

5

SQL – Exibir Colunas Calculadas

• Sintaxe:

SELECT <lista de colunas, expressão>

FROM <tabela>

SQL – Exibir Colunas Calculadas

• Exemplo1 - Exibir código, nome, quantidade em estoque,preço de venda e valor total (quantidade x preço devenda) para cada produto:

SELECT Codigo, Nome, Quantest, Venda, ‘Total’= quantest*venda

FROM Produto

• Resultado da Consulta:

Código Nome Quantest Venda Total

1 Toalhas Artex 50 250,00 12.500,00

2 Iogurte Nestle 200 3,20 640,00

3 Abajur List 12 364,00 4.368,00

4 TV Plasma 12 3,65 43,85

5 Liquidificador 150 92,00 13.800,00

6 Computador Positivo 1 1.980,00 1.980,00

Page 6: SQL aula  2

27/05/2012

6

SQL – Exibir Colunas Calculadas

• Exemplo2 - Exibir código, nome, salário e o salário com32% de aumento para todos os funcionários:

SELECT Codigo, Nome, Salario, Salario*1.32 AS Novo_SalarioFROM Funcionario

• Resultado da Consulta:

Codigo Nome Salario Novo_Salario

1 João da Silva 300,00 396,00

2 Maria de Souza 300,00 396,00

3 Luiza Costa 950,00 1.254,00

4 Francisco da Silva 390,00 514,80

5 Carla Tavares 290,00 382,80

SQL – Exibir Colunas Calculadas

• Funções do SQL Server:

– SUM: soma valores de um atributo

– AVG: calcula a média dos valores de um atributo

– MAX: exibe o maior valor de um atributo

– MIN: exibe o menor valor de um atributo

– COUNT: contar registros

Page 7: SQL aula  2

27/05/2012

7

SQL – Exibir Colunas Calculadas

• Exemplo1 – Exibir a soma dos salários dos funcionários da empresa:

SELECT SUM(salario) AS Soma_Salarios

FROM Funcionario

• Exemplo2 – Exibir a média salarial dos funcionários da empresa:

SELECT AVG(salario) AS Media_Salarios

FROM Funcionario

SQL – Exibir Colunas Calculadas

• Exemplo3 – Exibir o menor salário entre os funcionários:

SELECT MAX(salario) AS Maior_Salario

FROM Funcionario

• Exemplo4 – Exibir o maior salário entre os funcionários:

SELECT MIN(salario) AS Menor_Salario

FROM Funcionario

Page 8: SQL aula  2

27/05/2012

8

SQL – Exibir Colunas Calculadas

• Exemplo5 – Exibir quantos clientes têm cadastro naempresa:

SELECT COUNT(*) AS Qtde_Clientes

FROM Cliente

• Exemplo6 – Exibir quantos funcionário têm e_mail:

SELECT COUNT(e_mail) AS Qtde_Email

FROM Funcionário

• Observação: para contar registros diferentes deve-seusar COUNT combinado com o DISTINCT.

SQL – Exibir Colunas Calculadas

• Exemplo7 – Exibir a quantas cidades a empresa atendeos clientes:

SELECT COUNT(DISTINCT cidade) AS Qtde_CidadeFROM Cliente

• Exemplo8 – Exibir quantos vendedores já atenderam a pedidos:

SELECT COUNT(DISTINCT vendedor) AS Qtde_Vendedor

FROM Pedido

Page 9: SQL aula  2

27/05/2012

9

SQL – Cláusula From

• Para cruzar dados que estão em tabelas diferentes:

Estilo Construção

ANSI 89 SELECT <campos>FROM TabelaA, TabelaBWHERE TabelaA.Coluna = TabelaB.Coluna

ANSI 92 SELECT <campos>FROM TabelaA INNER JOIN TabelaB

ON TabelaA.Coluna = TabelaB.Coluna

SQL – Cláusula From

• Exemplo 1 – Exibir o nome do cliente e a data que elerealizou um pedido, para todos os pedidos da base:

SELECT C.nome, P.dataPedido

FROM Cliente C, Pedido P

WHERE C.codigo = P.cliente

ou

SELECT C.nome, P.dataPedido

FROM Cliente C INNER JOIN Pedido P ON C.codigo = P.cliente

• Observações:– Para atributos que possuem o mesmo nome, em mais de uma tabela, é

obrigatório incluir o nome da tabela (ou apelido) antes do nome do atributo.

– Caso contrário não é obrigatório, mas é recomendado.

Page 10: SQL aula  2

27/05/2012

10

SQL – Cláusula From

• Exemplo 2 – Exibir o nome do funcionário, o seusalário, o nome do setor onde trabalha e o nome dafunção exercida para todos os funcionários:

SELECT F.nome, F.salario, S.nome AS Setor, FU.nome AS funcao

FROM Funcionario F, Setor S , Funcao FU

WHERE F.setor = S.sigla AND

F.funcao = FU.codigo

ou

SELECT F.nome, F.salario, S.nome AS Setor, FU.nome AS funcao

FROM Funcionario F INNER JOIN Setor S ON F.setor = S.sigla

INNER JOIN Funcao FU ON F.funcao = FU.codigo

Fim

Próxima aula: Exercícios

SQL – Parte 2

Page 11: SQL aula  2

27/05/2012

11

SQL – Cláusula Where

• Usando operadores na cláusula WHERE:

– Os operadores relacionais <, <=, >, >=, =, <> podemser usados para testar valores de atributos.

– Os operadores lógicos AND, NOT, OR podem serusados para combinar condições.

SQL – Cláusula Where

• Exemplo1 – Exibir o nome e o salário dos funcionáriosque ganham mais do que R$ 500,00:

SELECT nome, salario

FROM Funcionario

WHERE salario > 500.00

• Exemplo 2 – Exibir o nome e o salário dos funcionáriosque ganham mais do que R$ 200,00 e são homens:

SELECT nome, salario

FROM Funcionario

WHERE salario > 200.00 AND sexo = ‘M’

Page 12: SQL aula  2

27/05/2012

12

SQL – Cláusula Where

• Exemplo3 – Exibir o nome dos produtos, cujo preço decusto seja menor ou igual a R$ 100,00:

SELECT nome

FROM Produto

WHERE custo <= 100.00

• Exemplo4 – Exibir o nome e o cargo dos clientespessoa física:

SELECT nome, cargo

FROM Cliente

WHERE tipo = ‘PF’

SQL – Cláusula Where

• Exemplo5 – Exibir o preço médio de venda dosprodutos do tipo 1:

SELECT AVG(venda) AS Media

FROM Produto

WHERE tipo = 1

• Exemplo6 – Exibir a data de nascimento da funcionáriamais nova da empresa:

SELECT MAX(dataNasc) AS Mais_Nova

FROM Funcionario

WHERE sexo = ‘F’

Page 13: SQL aula  2

27/05/2012

13

SQL – Cláusula Where

• Usando operadores na cláusula WHERE:

– Operador BETWEEN: usado para verificar se o valorde um atributo está em um intervalo de valores.

– Operador IN: usado para verificar se o valor de umatributo está em um conjunto de valores.

– Operador LIKE: usado para operações de comparaçãode strings.

SQL – Cláusula Where

• Exemplo1 – Exibir o nome e o salário dos funcionáriosque ganham entre R$ 500,00 e R$ 1.500,00:

SELECT nome, salario

FROM Funcionario

WHERE salario BETWEEN 500 AND 1500

• Exemplo 2 – Exibir o nome e o salário dos funcionáriosque ganham R$ 500,00 ou R$ 1.500,00:

SELECT nome, salario

FROM Funcionario

WHERE salario IN (500, 1500)

Page 14: SQL aula  2

27/05/2012

14

SQL – Cláusula Where

• Exemplo3 – Exibir código e nome de todos osfuncionários que tenham o nome começando por “M”:

SELECT codigo, nome

FROM Funcionario

WHERE nome LIKE ‘M%’

• Resultado da Consulta:

Código Nome

2 Maria de Souza

SQL – Cláusula Where

• Exemplo4 – Exibir código e nome de todos osfuncionários que tenham o nome terminando por “Silva”:

SELECT código, nome

FROM Funcionario

WHERE nome LIKE ‘%Silva’

• Resultado da Consulta:

Código Nome

1 João da Silva

4 Francisco da Silva

Page 15: SQL aula  2

27/05/2012

15

SQL – Cláusula Where

• Exemplo5 – Exibir código e nome de todos os funcionáriosque tenham “Costa” em qualquer parte do nome:

SELECT codigo, nome

FROM Funcionario

WHERE nome LIKE ‘%Costa%’

• Exemplo 6 – Exibir código e nome de todos os funcionáriosque tenham o nome começando por “Mar” seguido de umcaractere qualquer e terminando por “a”:

SELECT codigo, nome

FROM Funcionario

WHERE nome LIKE 'Mar_a%'

SQL – Ordenando Resultados

• Sintaxe:

SELECT <lista de colunas> FROM <tabela(s)> ORDER BY <coluna> [ASC] [DESC]

• Observação:

– O default é a ordenação ascendente (ASC).

Page 16: SQL aula  2

27/05/2012

16

SQL – Ordenando Resultados

• Exemplo1 – Exibir código, nome e telefone de todos osclientes, ordenados ascendentemente pelo nome do cliente:

SELECT codigo, nome, fone

FROM Cliente

ORDER BY nome

• Resultado da Consulta:

Codigo Nome Fone

2 João Paulo Correia 3245-8999

6 JR Representações 5841-9871

3 Larissa Maia 3227-9622

5 LT Comércio 3256-9981

4 Marcos Andrade 3338-2100

1 Maria Helena Ferreira 3225-6987

SQL – Ordenando Resultados

• Exemplo2 – Exibir código, nome, estado civil e data de

nascimento de todos os funcionários, ordenados

descendentemente pela data de nascimento:

SELECT codigo, nome, estCivil, dataNasc

FROM Funcionario

ORDER BY dataNasc DESC

• Resultado da Consulta:

Código Nome EstCivil DataNasc

3 Luiza Costa C 1980-04-04

1 João da Costa C 1978-02-05

4 Francisco da Silva C 1970-06-03

2 Maria de Souza C 1970-01-01

5 Carla Tavares C 1969-01-08

Page 17: SQL aula  2

27/05/2012

17

SQL – Ordenando Resultados

• Exemplo3 – Exibir código, nome e tipo de todos os produtos

existentes na empresa, ordenados pelo tipo em ordem ascendente

e pelo nome do produto em ordem descendente:

SELECT P.codigo, T.nome AS Tipo, P.nome AS Produto

FROM Produto P, Tipo T

WHERE P.tipo = T.codigo

ORDER BY T.nome ASC, P.nome DESC

• Resultado da Consulta:Código Tipo Produto

2 Alimentação Pizza Sadia

1 Cama Toalhas Artex

3 Decoração Abajur Alist

4 Eletro TV Plasma

5 Eletro Liquidificador

6 Eletro Computador Positivo

2 Lacticínios Iorgute Nestlé

SQL – Agrupando Informações

• Sintaxe:

SELECT <lista de colunas> FROM <tabela(s)> GROUP BY <coluna(s)>[HAVING <condição>]

• Observação:

– A cláusula HAVING é opcional.

Page 18: SQL aula  2

27/05/2012

18

SQL – Agrupando Informações

• Exemplo1 – Exibir a quantidade de homens e mulheresda empresa:

SELECT Sexo, COUNT(*) AS Quantidade

FROM Funcionario

GROUP BY sexo

• Resultado da Consulta:

Sexo Quantidade

F 3

M 2

SQL – Agrupando Informações

• Exemplo2 – Para cada cliente da empresa (nome),apresentar a quantidade de pedidos realizados:

SELECT C.nome, COUNT(*) AS Qtde_Pedidos

FROM Cliente C, Pedido P

WHERE P.cliente = C.codigo

GROUP BY C.nome

• Resultado da Consulta:Nome Qtde_Pedidos

João Paulo Correia 2

JR Representações 15

Larissa Maia 3

LT Comércio 1

Marcos Andrade 2

Maria Helena Ferreira 8

Page 19: SQL aula  2

27/05/2012

19

SQL – Agrupando Informações

• Exemplo3 – Para cada cliente da empresa (nome), apresentar a

quantidade de pedidos realizados. Exibir os resultados, apenas sea quantidade de pedidos for superior a cinco pedidos:

SELECT C.nome, COUNT(*) AS Qtde_Pedidos

FROM Cliente C, Pedido P

WHERE P.cliente = C.codigo

GROUP BY C.nome

HAVING COUNT(*) > 5

• Resultado da Consulta:

Nome Qtde_Pedidos

JR Representações 15

Maria Helena Ferreira 8

SQL – Agrupando Informações

• Exemplo4 – Para cada setor da empresa (sigla e nome),

apresentar a quantidade de funcionários e o somatório dos seussalários:

SELECT F.Setor, F.Nome, COUNT(*) AS Qtde_Func,

SUM(salário) AS Total

FROM Funcionario F, Setor S

WHERE F.setor = S.sigla

GROUP BY F.Setor, F.Nome

• Resultado da Consulta:Setor Nome Qtde_Func Total (salário)

ADM Administração 1 950,00

COV Compra e Venda 2 590,00

MKT Marketing 1 300,00

SEG Segurança 1 390,00

Page 20: SQL aula  2

27/05/2012

20

SQL – Agrupando Informações

• Exemplo5 – Para cada setor da empresa (sigla e nome),

apresentar a quantidade de funcionários e o somatório dos seussalários. Exibir os resultados, apenas se a soma dos salários formaior do que R$ 500,00:

SELECT F.Setor, F.Nome, COUNT(*) AS Qtde_Func,

SUM(salário) AS Total

FROM Funcionario F, Setor S

WHERE F.setor = S.sigla

GROUP BY F.Setor, F.Nome

HAVING SUM(salario) > 500

• Resultado da Consulta:Setor Nome Qtde_Func Total (salário)

ADM Administração 1 950,00

COV Compra e Venda 2 590,00

SQL – Sub-Consultas

• O que é?

– Uma sub-consulta é uma consulta SQL cujoresultado é utilizado por outra consulta mais externa,de forma encadeada e contida no mesmo comandoSELECT.

– Uma sub-consulta deve ser delimitada entreparênteses e é avaliada apenas uma vez.

– A consulta mais externa (principal) depende daavaliação e resultado da sub-consulta.

– Portanto em consultas encadeadas, as consultasinternas (sub-consultas) são realizada antes.

Page 21: SQL aula  2

27/05/2012

21

SQL – Sub-Consultas

• Retorno de uma sub-consulta:

– Uma sub-consulta de valor único retorna apenas umvalor (registro).

– Uma sub-consulta de valores múltiplos retorna umalista de valores. Neste caso, deve-se utilizar asclausulas IN ou NOT IN.

SQL – Agrupando Informações

• Exemplo1 – Exibir o nome e data de nascimento dofuncionário(a) mais novo da empresa:

SELECT nome, dataNasc

FROM Funcionario

WHERE dataNasc = (SELECT MAX(dataNasc) FROM Funcionario)

• Resultado da Consulta:

Nome DataNasc

Luiza Costa 04/04/1980

Retorna apenas um valor/registro.

Page 22: SQL aula  2

27/05/2012

22

SQL – Agrupando Informações

• Exemplo2 – Exibir o código, o nome e a quantidade emestoque do produto que tem a menor quantidade emestoque da empresa:

SELECT codigo, nome, quantest

FROM Produto

WHERE quantest = (SELECT MIN(quantest) FROM Produto)

• Resultado da Consulta:

Código Nome Quantest

3 Abajur Alist 12

4 TV Plasma 12

Retorna apenas um valor/registro.

SQL – Agrupando Informações

• Exemplo3 – Exibir o código e o nome dos funcionáriosque nunca realizaram uma venda:

SELECT codigo, nome

FROM Funcionario

WHERE codigo NOT IN (SELECT vendedor FROM Pedido)

Retorna vários registros.

Page 23: SQL aula  2

27/05/2012

23

SQL - Consultas

SELECT Especifica as colunas e expressões exibidas noresultado da consulta.

FROM Especifica as tabelas que contêm os dados exibidosno resultado da consulta.

WHERE Especifica as condições usadas para filtrar registrosno resultado da consulta.

GROUP BY

Agrupa as linhas da consulta com base nos valoresde uma das colunas.

HAVING Especifica as condições usadas para filtraragrupamentos de dados no resultado da consulta.Só deve ser usado com GROUP BY.

ORDER BY

Classifica os resultados da consulta com base nosdados de uma ou mais colunas.

Fim

Próxima aula: Exercícios

SQL – Parte 3