fevereiro 2001banco de dados1 s q l structured query language ana gavinho

62
Fevereiro 2001 Banco de Dados 1 S Q L Structured Query Language Ana Gavinho

Upload: fernando-losada

Post on 07-Apr-2016

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 1

S Q L Structured Query Language

Ana Gavinho

Page 2: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 2

SQL - Structured Query Language• A álgebra relacional especifica uma seqüência de operações que determina como obter os dados.

• SGBD comerciais provem uma linguagem declarativa de alto nível para acesso a banco de dados, onde se especifica o que se deseja como resposta. A mais conhecida é a SQL.

• Originalmente projetada e implementada pela IBM, possui as versões SQL1 (86), SQL2 (92) e SQL3 (conceitos de OO).

• Usa os termos tabela / linha / coluna para relação / tupla / atributo.

• Possui comandos para:> consulta de dados (query)> manipulação de dados (inclusão, exclusão, alteração)> definição de dados

Page 3: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 3

Tabelas usadas

DeptoNum DeptoNome MatrGerenteDEPARTAMENTO

Depto LocalizacaoDEPTO-LOCAL

PNome PCodigo PLocalizacao DeptoPROJETO

Matricula PCodigo HorasTRABALHA-EM

Matricula NomeDepend Sexo DataNasc ParentescoDEPENDENTE

Nome Matricula DataNasc Endereco Sexo Salario Supervisor DeptoEMPREGADO

Page 4: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 4

Comandos para consulta de dados• Uma consulta (query) em SQL consiste de 6 cláusulas, onde as duas primeiras são obrigatórias.• As cláusulas entre {...} são opcionais.

SELECT [ ALL / DISTINCT ] < lista-atributos >

FROM tabela1 { , tabela2 ... }

{ WHERE < condição > }

{ GROUP BY atributo1 { , atributo2 ... } }

{ HAVING < condição > }

{ ORDER BY atributo1 { , atributo2 ... } }

Page 5: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 5

Select - seleção de campos• A seleção de campos pode ser efetuada:

> pelos nomes dos campos > por um asterisco (*), que seleciona todos os campos

»Liste todos os dados de todos os empregados. SELECT * FROM EMPREGADO ;

» Liste o nome e matricula de todos os funcionários. SELECT Nome, Matricula

FROM EMPREGADO ;

» Liste o nome e salário de todos os funcionários. SELECT Nome, Salario

FROM EMPREGADO ;

Page 6: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 6

Select - condição para a seleção de linhas• A condição do ‘WHERE’ indica as linhas da tabela a serem selecionadas.

»Liste o nome e matrícula dos funcionários do departamento 20.SELECT Nome, Matricula

FROM EMPREGADO WHERE Depto = 20 ;

»Liste o nome e matricula dos funcionários mulheres.SELECT Nome, Matricula

FROM EMPREGADO WHERE Sexo = `F` ;

»Liste o nome e matrícula das mulheres do departamento 20.SELECT Nome, Matricula

FROM EMPREGADO WHERE Depto = 20 AND Sexo = `F` ;

Page 7: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 7

Select - seleção de linhas por substrings• Recuperação por aproximação usando LIKE :

> “_” - uma ocorrência de qualquer carater> “%” - nenhuma ou várias ocorrências de quaisquer caracteres

» Liste os nomes de funcionários que começam por `J`.SELECT Nome

FROM EMPREGADO WHERE Nome LIKE ‘J%’ ;

»Liste os nomes de funcionários que tenham ‘Silva’ como parte do nome.

SELECT Nome FROM EMPREGADO

WHERE Nome LIKE ‘%Silva%’

Page 8: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 8

• As palavras-chave ‘distinct’ and ‘all’ especificam o que fazer com linhas duplicadas no resultado da seleção:

> linhas duplicada são eliminadas pela palavra ‘DISTINCT’> ‘ALL’ é o default e retorna todas as linhas selecionas

» Liste os salários dos empregados. SELECT Salário FROM EMPREGADO ; ou SELECT ALL Salário FROM EMPREGADO ;

» Liste os diferentes salários pagos aos empregados.SELECT DISTINCT Salario

FROM EMPREGADO ;

Select - eliminando linhas duplicadas

Page 9: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 9

Select - ordenando linhas da consulta

• A clausula ORDER BY faz a ordenação de linhas a partir dos valores de colunas em ordem ascendente (ASC), que é seu default, ou em ordem descendente (DESC).

» Liste o nome e salário dos funcionários ordenados pelo nome do funcionário. SELECT Nome, Salario

FROM EMPREGADO ORDER BY Nome ;» Liste o nome e salário dos funcionários ordenados do maior ao menor salário e pelo nome do funcionário. SELECT Nome, Salario

FROM EMPREGADO ORDER BY Salario DESC, Nome ;

Page 10: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 10

Select - operações aritméticas com colunas• Os operadores aritméticos + , - , * e / podem ser usados em colunas numéricas.• Os valores da tabela original NÃO são alterados

» Liste os diferentes salários pagos e o novo salário com aumento de 10%.

SELECT Salario, 1.1 * Salario FROM EMPREGADO ; » Liste o nome e salário dos funcionários com aumento de 10%.

SELECT Nome, 1.1 * Salario FROM EMPREGADO ;

» Liste o nome dos funcionários e o aumento a receber.SELECT Nome, (1.1 * Salario - Salario)

FROM EMPREGADO ;

Page 11: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 11

Select - renomeando colunas, incluindo textos• Para facilitar o entendimento do resultado de uma pesquisa, podemos definir um novo nome para uma coluna ou incluir um texto no resultado.

» Liste os diferentes salários pagos e o novo salário com aumento de 10%.

SELECT Salario AS `Salario atual`, 1.1 * Salario AS `Novo salario` FROM EMPREGADO ; » Liste o nome de funcionários e o aumento a receber.

SELECT `O funcionário `, Nome AS `nome funcionario`, `recebera um aumento de `, 0.1 * Salario AS `aumento` FROM EMPREGADO ;

Page 12: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 12

Exercícios 1 - uso do comando Select• Liste o nome e data de nascimento dos funcionários ordenados por data de nascimento.• Liste o nome e salário dos funcionários ordenados por nome.• Liste o nome e parentesco dos dependentes.• Liste o nome dos projetos e sua localização ordenados por localização.• Liste a matricula, nome e salário dos empregados que ganham entre R$ 200,00 e R$500,00.• Liste o nome dos dependentes do sexo masculino.• Liste o nome dos projetos localizados no Meier, em ordem decrescente.• Liste o nome do departamento de numero 10.• Liste o nome das mulheres que trabalham no departamento 10.• Liste o número do departamento de Compras.• Liste o numero e nome dos departamento começados pela letra ´C´.

Page 13: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 13

Exercícios 1 - uso do comando Select (cont.)• Liste a matrícula e nome dos funcionários que tenham ‘Silva’ como parte do nome.• Liste a matrícula e nome dos funcionários que tenham ‘Silva’ como último sobrenome.• Liste o numero dos departamentos que tenham algum projeto.• Liste o numero dos departamentos que tenham algum projeto, sem duplicação de linhas.• Liste os parentescos que existem na tabela DEPENDENTE.• Liste os diferentes parentescos da tabela DEPENDENTE.• Liste as localizações dos departamentos.• Liste as diferentes localizações dos departamentos. • Liste as localizações dos projetos.• Liste as diferentes localizações dos projetos.

Page 14: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 14

Select - uso de funções de agregação•Sumarizam valores em um conjunto de linhas.»Liste o total de empregados, a soma de salários, o maior salário, o menor salário e a média.

SELECT COUNT (*), SUM(Salario), MAX(Salario), MIN(Salario), AVG (Salario) FROM EMPREGADO ;

»Liste a média salarial dos funcionários do departamento 20.SELECT AVG (Salario) AS ‘Media salarial do depto 20’

FROM EMPREGADO WHERE Depto = 20 ;

» Liste o número de departamentos da empresa.SELECT COUNT (*) AS ‘Quantidade de depto`

FROM DEPARTAMENTO ;

Page 15: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 15

Select - uso de funções de agregação (cont.)• A cláusula ‘Distinct’ pode ser usada nas funções ‘Count’, ‘Sum’ e ‘Avg’ . » Liste o total de diferentes valores de salários.

SELECT COUNT (DISTINCT Salario) AS ‘Quantidade de diferentes salários pagos’ FROM EMPREGADO ;

» Liste o total pago aos funcionários da empresa.SELECT SUM (Salario)

AS ‘Valor total dos salários pagos’ ` FROM EMPREGADO ;

» Liste o valor total de diferentes salário pagos na empresa.SELECT SUM (DISTINCT Salario)

AS ‘Valor total dos diferentes salários pagos’ ` FROM EMPREGADO ;

Page 16: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 16

Select - uso de funções de agregação (cont.)

• As funções retornam um valor numérico, e não um conjunto (set) de valores. »Liste o nome dos funcionários que tem dois ou mais dependentes.

SELECT Nome FROM EMPREGADO E

WHERE (SELECT COUNT (*) FROM DEPENDENTE D WHERE E.Matricula = D.Matricula) 2 ;

Page 17: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 17

Select - agrupando resultados• A cláusula ‘Group By’ pode aplicar funções em grupos de linhas com os mesmos valores de atributos.» Liste o número de empregados por departamento.

SELECT Depto, COUNT(*) FROM EMPREGADO

GROUP BY Depto ;

» Liste, por departamento, o total de funcionários e a média salarial.SELECT Depto, COUNT (*), AVG(Salario)

FROM EMPREGADO GROUP BY Depto ;

» Liste a quantidade de homens e mulheres da empresa.SELECT Sexo, COUNT(*)

FROM EMPREGADO GROUP BY Sexo ;

Page 18: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 18

Select - selecionando resultados agrupados

• A cláusula ‘Having’ seleciona as linhas a partir de condições aplicadas sobre os valores de funções.

» Liste os departamentos que possuem mais de 2 funcionários.SELECT Depto

FROM EMPREGADO GROUP BY Depto

HAVING COUNT (*) > 2 ;» Liste para cada departamento que tenha mais de dois funcionários, o total de funcionários e a média salarial.

SELECT Depto, COUNT (*), AVG(Salario) FROM EMPREGADO

GROUP BY Depto HAVING COUNT(*) > 2 ;

Page 19: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 19

Select - having X where

• Where: seleciona linhas antes da agregação.• Having: seleciona linhas depois da agregação.

» Liste, por departamento, o número de funcionários que ganham mais de 300,00.

SELECT Depto, COUNT (*) FROM EMPREGADO

WHERE Salario > 300GROUP BY Depto ;

» Liste, para os departamentos que tenham média salarial > 300,00, o total de funcionários e a média salarial.

SELECT Depto, COUNT (*), AVG(Salario) FROM EMPREGADO

GROUP BY Depto HAVING AVG(Salario ) > 300 ;

Page 20: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 20

Select - valor nulo• Indica um campo que não tenha valor naquele registro• Não participa nas funções:

> média (2, 4, 0 ) = 2 ( 6 / 3 ) > média (2, 4, NULL ) = 3 ( 6 / 2 )

» Liste o nome dos funcionários que não tem um supervisor.SELECT Nome

FROM EMPREGADO WHERE Supervisor IS NULL ;

» Liste total de funcionários da empresa, e o total de funcionário que possuam um supervisor.

SELECT COUNT (*) AS ‘Total de empregados’, COUNT (Supervisor) AS ‘Total de empregados supervisionados’ FROM EMPREGADO ;

Page 21: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 21

Exercícios 2 - uso do comando Select• Liste o nome dos departamentos que não tem gerente.• Liste o nome e matrícula dos funcionários que não tem supervisor.• Liste a soma dos salários, o maior salário, o menor salário e a média salarial dos empregados do departamento 10.• Liste o total de funcionários.• Liste o total de funcionários do departamento 10. • Liste o total de funcionários por número de departamento.• Liste o número identificador dos departamentos que tenham dois ou mais funcionários.• Liste o total de projetos por localização.• As localizações que possuem mais de um projeto.• Liste o total de departamentos por localização.• As localizações que possuem mais de um departamento.

Page 22: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 22

Exercícios 2 - uso do comando Select (cont.)• Liste o total de diferentes parentescos da tabela DEPENDENTES.• Liste o total de dependentes por tipo de parentesco.• Liste o total de dependentes por sexo.• Liste o total de dependentes do funcionário de matrícula 1001.• A matrícula dos funcionários que possuam mais de dois dependentes.• Liste a matricula dos supervisores e o número de funcionários que supervisionam.• Liste a matricula dos supervisores que supervisionam mais de 2 funcionários.• Liste a matrícula dos gerentes e o número de departamentos que gerenciam.• Liste a matricula dos gerentes que gerenciam mais de um departamento.

Page 23: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 23

Select - produto cartesiano• No produto cartesiano, temos mais de uma tabela declarada na cláusula ‘FROM’.• Temos a combinação de cada linha de uma tabela com cada uma das linhas da outra tabela.

» Junte as linhas da tabela EMPREGADO com as linhas da tabela DEPARTAMENTO. SELECT * FROM EMPREGADO, DEPARTAMENTO ;

» Junte as linhas da tabela EMPREGADO com as linhas da tabela DEPENDENTE. SELECT * FROM EMPREGADO, DEPENDENTE ;

Page 24: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 24

Select - junção de tabelas• A junção de tabelas é executada ao se declarar uma condição na cláusula ‘WHERE’ em um produto cartesiano.• Ela em geral indica o relacionamento entre as tabelas»Liste o nome dos empregados e do departamento em que trabalham. SELECT Nome, DeptoNome FROM EMPREGADO, DEPARTAMENTO WHERE Depto = DeptoNum ;»Liste nome e endereço dos empregados do departamento ‘Compras’. SELECT Nome, Endereco FROM EMPREGADO, DEPARTAMENTO WHERE Depto = DeptoNum AND DeptoNome = ‘Compras’ ;

»Liste o nome dos departamentos e de seus gerentes. SELECT DeptoNome , Nome FROM EMPREGADO, DEPARTAMENTO WHERE Matricula = MatrGerente ;

Page 25: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 25

Select - junção de tabelas: apelidos• Podemos criar apelidos para as tabelas utilizadas

» Liste o nome dos empregados e de seus dependentes. SELECT Nome, NomeDepend FROM EMPREGADO E, DEPENDENTE D WHERE E.Matricula = D.Matricula ;

»Liste o nome dos empregados e dos projetos em que trabalharam 20 horas. SELECT Nome, PNome FROM EMPREGADO E, TRABALHA-EM T, PROJETO P WHERE E.Matricula = T.Matricula AND T.PCodigo = P.PCodigo AND Horas = 20 ;

»Liste o nome de funcionários e seus supervisores.SELECT E.Nome AS NomeEmp,

S.Nome AS NomeSupervisor FROM EMPREGADO E, EMPREGADO S WHERE E.Supervisor = S.Matricula ;

Page 26: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 26

Select - junção de tabelas: outer join• A junção de tabelas mostra apenas as linhas que satisfazem a condição especificada mas, ocasionalmente, podemos quer ver as linhas de uma tabela que não satisfaçam a condição.• O OUTER JOIN mostra, alem das linhas que satisfazem a condição, as linhas de uma das tabelas que não satisfazem.• A implementação, dependendo do fabricante, pode ser feita na cláusula FROM ou na cláusula WHERE.

» LEFT JOIN: inclui as linhas da 1ª tabela que não satisfazem a condição.FROM TAB1 LEFT [OUTER] JOIN

WHERE Tab1.Coluna *= Tab2.Coluna

» RIGHT JOIN: inclui as linhas da 2ª tabela que não satisfazem a condiçãoFROM TAB1 RIGHT [OUTER] JOIN

WHERE Tab1.Coluna =* Tab2.Coluna

Page 27: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 27

Select - junção de tabelas: outer join• Liste o nome de matricula de todos os empregados, e de seus dependentes, se houver.

SELECT Nome, E.Matricula, D.Matricula , NomeDepend FROM EMPREGADO E LEFT JOIN DEPENDENTE D ON E.Matricula = D.Matricula ;

ou

SELECT Nome, E.Matricula, D.Matricula , NomeDepend FROM EMPREGADO E, DEPENDENTE D WHERE E.Matricula *= D.Matricula ;

Page 28: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 28

Exercícios 3 - uso do comando Select• Liste o nome das mulheres que trabalham no departamento ’Vendas’.• Liste o nome do departamento e o nome das mulheres que trabalham no departamento 10, ordenado por departamento.• Liste os nomes dos departamentos e de seus gerentes em ordem crescente.• Liste o nome do gerente do departamento ‘Compras’.• Liste o nome e matricula dos funcionários homônimos.• Liste o nome e matricula dos empregados que tenham um dependente com o mesmo nome que seu.• Liste o nome, matricula e data de nascimento dos funcionários que nasceram no mesmo dia.• Liste o nome do departamento e o nome dos funcionários subordinados ao gerente ‘Mario Souza’. • Liste o nome dos funcionários que trabalharam mais de 20 horas no projeto ‘Varejo’.

Page 29: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 29

Exercícios 3 - uso do comando Select (cont.)• Liste o nome, endereço e data de nascimento dos gerentes dos departamentos localizados no ‘Meier’.• Liste todos os dados de projetos do departamento ´Compras´.• Liste o nome, matricula e departamento dos funcionários que trabalham no projeto ‘FornecNorte’ ou no projeto ‘FornecSul’. • Liste o nome, matricula e departamento dos funcionários que trabalham no projeto ‘FornecNorte’ ou no projeto ‘FornecSul’, sem duplicação de linhas. • Liste a soma do salário, o maior salário, o menor salário e a média salarial dos empregados do departamento ‘Compras’.• Liste o total de funcionários por nome de departamento.• Liste o total de funcionários do departamento ‘Compras’.• Liste o nome dos departamentos com mais de um funcionário.

Page 30: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 30

Exercícios 3 - uso do comando Select (cont.)• Liste o nome e matricula dos funcionários com mais de dois dependentes. • Liste o total de dependentes do funcionário ‘José Silva’.• Liste o nome dos funcionários que trabalham em dois ou mais projetos. • Liste o nome dos funcionários que gerenciam mais de um departamento.• Liste a matricula e nome dos supervisores.• Liste a matricula e o nome dos supervisores que supervisionam mais de 2 funcionários.• Liste, para cada projeto, seu código, nome, número de funcionários que nele trabalham e a média de horas.

Page 31: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 31

Select - queries aninhadas• Em queries aninhadas, temos a cláusula ‘WHERE’ usando outra query.• A query interna retorna como resposta uma tabela ou conjunto (set), que pode ser vazio.• Utiliza diferentes operadores.

• Operador [NOT] IN » compara um valor ‘v’ com um conjunto de valores ‘V’ e retorna ‘true’ se ‘v’ é um elemento de ‘V’.

• Operador [NOT] EXISTS »retorna ‘true’ quando o valor de uma query aninhada é vazio

Page 32: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 32

Select - queries aninhadas (cont.)

• Operador v > ALL» compara um valor ‘v’ com um conjunto de valores ‘V’ e retorna ‘true’ se ‘v’ for maior que TODOS os elementos de ‘V’.

• Operador v > ANY» compara um valor ‘v’ com um conjunto de valores ‘V’ e retorna ‘true’ se ‘v’ for maior que ALGUM dos elementos de ‘V’.

OBS: pode-se usar os comparadores lógicos: . > . >= . < . <= . = . <> ou !=

Page 33: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 33

Select - queries aninhadas, operador IN » Liste o nome e endereço dos empregados do departamento ‘Compras’. SELECT Nome, Endereco FROM EMPREGADO WHERE Depto IN ( SELECT Deptonum FROM DEPARTAMENTO WHERE DeptoNome = ‘Compras’ ) ;

» Liste o nome dos funcionários que não tem dependentes.SELECT Nome

FROM EMPREGADO EWHERE Matricula NOT IN

( SELECT Matricula FROM DEPENDENTE D WHERE E.Matricula = D.Matricula ) ;

Page 34: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 34

Select - queries aninhadas, operador EXISTS

» Liste o nome e endereço dos empregados do departamento ‘Compras’. SELECT Nome, Endereco FROM EMPREGADO E WHERE EXISTS ( SELECT * FROM DEPARTAMENTO D WHERE DeptoNome = ‘Compras’ AND E.Depto = D. Deptonum ) ;

» Liste o nome dos funcionários que não tem dependentes.SELECT Nome

FROM EMPREGADO EWHERE NOT EXISTS

( SELECT * FROM DEPENDENTE D WHERE E.Matricula = D.Matricula ) ;

Page 35: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 35

Select - queries aninhadas, operador ALL» Liste o nome dos empregados que ganham os maiores salários da empresa. SELECT Nome FROM EMPREGADO WHERE Salario >= ALL ( SELECT Salario FROM EMPREGADO ) ; » Liste o nome dos empregados que tem salário maior que o salário de todos os empregados do departamento de ‘Compras’.

SELECT Nome FROM EMPREGADO

WHERE Salario > ALL ( SELECT Salario FROM EMPREGADO, DEPARATAMENTO WHERE Depto = Deptonum AND Deptonome = ‘Compras’ ) ;

Page 36: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 36

Select - queries aninhadas, operador ANY

» Liste o nome dos empregados que ganham mais que o menor salário da empresa. SELECT Nome FROM EMPREGADO

WHERE Salario > ANY ( SELECT Salario FROM EMPREGADO ) ;

» Liste o nome dos empregados que não ganham o maior salário da empresa.

SELECT Nome FROM EMPREGADO

WHERE Salario < ANY ( SELECT Salario FROM EMPREGADO ) ;

Page 37: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 37

Select - sets explícitos • Podemos usar um conjunto explícito de valores para comparação na cláusula ‘WHERE’.» Liste o nome e a matricula dos funcionários que trabalham no projeto 1, 2 ou 3.

SELECT Nome, Matricula FROM EMPREGADO E, TRABALHAEM T

WHERE E.MATRICULA = T.MATRICULA AND PCodigo IN ( 1, 2, 3) ;

» Liste o nome dos projetos localizados no ‘Meier’ ou no ‘Centro’.SELECT PNome

FROM PROJETOWHERE Plocalizacao IN ( ‘Meier’, ‘Centro’) ;

Page 38: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 38

• Podemos unir o resultado de várias consultas, desde que o tipo dos resultados sejam os mesmos.

» Liste o nome e matricula dos funcionários que ganham mais de R$100,00 juntamente com os funcionários do departamento de Vendas.

( SELECT Nome, Matricula FROM EMPREGADO

WHERE Salario > 1000 )UNION( SELECT Nome, Matricula

FROM EMPREGADO, DEPARTAMENTO WHERE Depto = DeptoNum AND DeptoNome = ‘Vendas’ ) ;

» Liste a localização dos departamentos juntamente com a localização dos projetos.

( SELECT DISTINCT Localizacao FROM DEPARTAMENTO )

UNION( SELECT DISTINCT PLocalizacao

FROM PROJETO ) ;

Select - união de tabelas

Page 39: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 39

Exercícios 4 - uso do comando Select• Liste o nome das mulheres que trabalham no departamento ’Compras’.• Liste o nome do gerente do departamento ‘Compras’.• Liste a soma do salário, o maior salário, o menor salário e a média salarial dos empregados do departamento ‘Compras’.• Liste o total de funcionários do departamento ‘Compras’.• Liste o nome dos departamentos com mais de um funcionário.• Liste a matricula e nome dos supervisores e o numero de funcionários que supervisionam.• Liste a matricula e o nome dos supervisores que supervisionam mais de 2 funcionários.• Liste o nome do departamento e o nome dos funcionários subordinados ao gerente ‘Mario Souza’. • Liste o nome dos funcionários que gerenciam mais de um departamento.• Liste o nome, endereço e data de nascimento dos gerentes dos departamentos localizados no ‘Meier’.

Page 40: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 40

Exercícios 4 - uso do comando Select (cont.)

• Liste o nome e matricula dos funcionários com mais de dois dependentes. • Liste o total de dependentes do funcionário ‘Mario Souza’.• Liste o nome dos funcionários que tem algum dependente. • Liste o nome dos gerentes que tem algum dependente.• Liste o nome e matricula dos empregados que tenham um dependente com o mesmo nome que o seu.• Liste o nome dos funcionários que trabalham em dois ou mais projetos.• Liste o nome dos funcionários que trabalharam mais de 20 horas no projeto ‘FornecNorte’.• Liste o nome, matricula e departamento dos funcionários que trabalham no projeto ‘FornecNorte’ ou no projeto ‘FornecSul’. • Liste o nome, matricula e departamento dos funcionários que trabalham no projeto ‘FornecNorte’ e no projeto ‘FornecSul’.

Page 41: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 41

Comandos para manipulação de dados

• INSERT - incluindo registros

• DELETE - removendo registros

• UPDATE - alterando registros

Page 42: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 42

Comando INSERT• Os valores devem seguir a ordem dos campos na criação da tabela. INSERT INTO nome-tab VALUES (valor {, valor … } )

• Ao especificar o nome dos campos, os que tem valor NULL ou default não precisam constar na lista. INSERT INTO nome-tab ( campo1, {, campo2 …} ) VALUES (valor1 {, valor2 … } )

• Varias linhas podem ser inseridas utilizando uma query. INSERT INTO nome-tab ( campo1, {, campo2 …} ) SELECT <lista-atributos> FROM nome-tab {, nome-tab … } WHERE <condição>

Page 43: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 43

• O comando ‘delete’ remove linhas de uma tabela. A clausula ‘WHERE’ é opcional e quando não usada, todas as linhas da tabela são excluídas . DELETE FROM nome-tab { WHERE <condição> }

• O comando ‘update’ modifica valores de campos para uma ou mais linhas da tabela. UPDATE nome-tab SET campo = valor {, campo = valor … } { WHERE <condição> }

Comandos DELETE e UPDATE

Page 44: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 44

» Inclua o departamento de Marketing que tem o numero 30 e é gerenciado pelo funcionário de matricula 1020.

INSERT INTO Departamento VALUES (30, ‘Marketing’, 1020)

» Inclua o departamento de Pessoal que tem o numero 30 e não possui gerente.

INSERT INTO Departamento (DeptoNome, DeptoNum) VALUES (‘Pessoal’, 30)

» Exclua o funcionário de matricula 1001.DELETE FROM Empregado

WHERE Matricula = 1001

» De 10% de aumento salarial aos funcionários do depto 10.UPDATE Empregado

SET Salario = 1.1 * SalarioWHERE Depto = 10

Comandos para manipulação de dados - exemplos

Page 45: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 45

Exercícios - comandos para manipulação de dados• Inclua as 20 horas de trabalho do funcionário de matricula 3001 no projeto P21.• Inclua o funcionário de matricula 3001 como trabalhador do projeto P20, sem nenhuma hora trabalhada.• Exclua os funcionários do departamento 30.• Exclua os funcionários do departamento ‘Compras’.• Exclua todos os dependentes.• Altere o endereço do funcionário ‘Marcelo Sousa’ para ‘Rua da Matriz, 25’. • Torne o funcionário de matricula 1002 o novo gerente do departamento de ‘Compras’ . • Atualiza o número de horas trabalhas pelo empregado de matrícula 3001 no projeto 'P20' para 8 horas .

Page 46: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 46

Comandos de definição de dados

• CREATE> schema> domain> table> index> view> assertion

• DROP> schema> domain> table> view> index> assertion

• ALTER> schema> table> view> index

Page 47: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 47

Create schema

• O esquema de um banco de dados relacional agrupa um conjunto de tabelas e outras construções que pertencem a uma mesma aplicação.• Possui o nome do esquema, o identificador de autorização que define o dono do esquema, e opcionalmente a descrição de cada elemento do esquema (tabelas, views, domínios, ...). Os elementos do esquema podem ser definidos posteriormente.

Ex:

CREATE SCHEMA Empresa AUTHORIZATION Grupo;

Page 48: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 48

Create domain• O domínio define um tipo de dado. • Pode ser usado por vários campos de tabela de um esquema.• Facilita a mudança de um tipo de dado usado em vários atributos.

CREATE DOMAIN nome-dominio tipo-dado { DEFAULT valor } { CONSTRAINT nome-rotina } { CHECK ( condição ) } ;

Ex: CREATE DOMAIN Nome char (40);

CREATE DOMAIN CorValida char (6) DEFAULT ’???’ CONSTRAINT CoresValidas CHECK ( value in (‘azul’, ‘amarelo’, ‘verde’, ‘???’) ) ;

CREATE TABLE T ( ..., cor CorValida , ) ;

Page 49: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 49

Create table CREATE TABLE nome-tab ( nome-coluna tipo-coluna {NOT NULL} {DEFAULT valor}, {nome-coluna tipo-coluna {NOT NULL} {DEFAULT valor}, ... }

{tc} PRIMARY KEY (nome-coluna {, nome-coluna ...} ), {tc} UNIQUE (nome-coluna {, nome-coluna ...} ), {tc} FOREIGN KEY (nome-coluna {, nome-coluna ...} ) REFERENCES nome-tab(nome-coluna {, nome-coluna ...} ) ON UPDATE CASCATE ON DELETE SET [ NULL / DEFAULT / CASCATE ]

{tc} )

tc = tab constraint: CONSTRAINT nome-rotina

Page 50: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 50

Create table - exemplo 1

Exemplo 1:

CREATE TABLE Departamento ( DeptoNum INT NOT NULL, DeptoNome VARCHAR(15) NOT NULL, MatricGerente CHAR(9),

CONSTRAINT DeptoPK PRIMARY KEY (DeptoNum), CONSTRAINT DeptoUN UNIQUE (DeptoNome), CONSTRAINT DeptoFK FOREIGN KEY (MatricGerente) REFERENCES Empregado(Matricula) ON UPDATE CASCATE ON DELETE SET NULL ) ;

Page 51: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 51

Create table - exemplo 2

Exemplo 2:

CREATE TABLE TrabalhaEm ( Matricula CHAR(9) NOT NULL, PCodigo INT NOT NULL, Horas DECIMAL (3,1),

PRIMARY KEY (Matricula, PCodigo), FOREIGN KEY (Matricula) REFERENCES Empregado(Matricula) ON UPDATE CASCATE ON DELETE CASCATE, FOREIGN KEY (PCodigo) REFERENCES Projeto(PCodigo) ON UPDATE CASCATE ON DELETE CASCATE ) ;

Page 52: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 52

Create index• Um índice torna mais eficiente o acesso às linhas de uma tabela.• A ordenação dos valores do índice é ascendente por default.• Os campos que são chave (não possuem repetição de valores nas linhas da tabela) são especificados como ‘UNIQUE’.

CREATE {UNIQUE} INDEX nome-índice ON nome-tabela ( nome-coluna { ASC / DESC } { , nome-coluna { ASC / DESC } … } )

Ex: CREATE UNIQUE INDEX Nome-Depto-Index ON Departamento ( DeptoNome )

Page 53: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 53

Create view• Uma view é uma tabela derivada de outras tabelas. Estas outras tabelas podem ser tabelas base ou outras views pré-definidas.• É considerada uma tabela virtual.• Em sua criação é dado um nome para a tabela virtual, uma lista de atributos (opcional) e uma query que determina o conteúdo da view.

CREATE VIEW nome-view { nome-coluna {, nome-coluna …} }AS <comando select>

Ex: CREATE VIEW Info-Depto (Nome-Depto, Num-Func, Total-Sal) AS SELECT DeptoNome, COUNT(*), SUM(Salario) FROM Departamento, Empregado WHERE DeptoNum = Depto GROUP BY DeptoNome

Page 54: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 54

Exercícios - comandos de definição de dados

• Crie um domínio para o campo ‘Sexo’ da tabela ‘Empregado’, com formato char(1), valores ‘M’ e ‘F’, e valor default ‘M’.• Crie a tabela Empregado com todos os valores NOT NULL, formato INT para os campos Matricula, Depto e Supervisor, formato DATE para DataNasc, formato DECIMAL(10,2) para Salario, e formato VARCHAR para os demais campos com o tamanho apropriado. Declarar Matricula como chave primária, e Depto e Supervisor como chaves estrangeiras. •Crie a tabela TrabalhaEm com todos os campos no formato INT, campos Matricula e PCodigo como NOT NULL. Declarar a chave primária com os campos Matricula e PCodigo, que são também chave estrangeira.•Crie um índice com o campo Nome da tabela Empregado.

Page 55: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 55

Drop Schema

DROP SCHEMA nome-esquema [ CASCATE / RESTRICT ]

• A opção ‘cascate’ remove também todos os elementos (tabelas, domínios, ...) do esquema.• A opção ‘restrict’ só permite a remoção do esquema se ele não contiver nenhum elemento.

Ex : DROP SCHEMA Empresa CASCATE ;

Page 56: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 56

Drop Table

DROP TABLE nome-tab [ CASCATE / RESTRICT ] ;

• Na opção ‘cascate’, todas as views e constraints que referenciam a tabela são também removidas..• Na opção ‘restrict’, a tabela é removida apenas quando não é referenciada em alguma constraint (FK) ou view.

Ex:DROP TABLE nome-tab CASCATE ;

Page 57: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 57

Drop View - Drop Index

DROP VIEW nome-view ;

Ex:DROP VIEW Info-Depto ;

DROP INDEX nome-index ;

Ex:DROP INDEX Nome-Depto-Index ;

Page 58: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 58

Alter table • Para incluir um novo campo: ALTER TABLE nome-tab ADD nome-coluna tipo-coluna {NOT NULL} {DEFAULT valor} ; - not null: um valor deve ser atribuído ao novo campo das linhas que já existem na tabela, pela clausula default ou pelo comando update.- default: quando não especificada, o novo campo terá o valor NULL.

• Para remover um campo: ALTER TABLE nome-tab DROP nome-coluna [ CASCATE / RESTRICT ] ; - cascate: todas as constraints e views que referenciam o campo serão também removidas. - restrict: o comando e’ executado quando nenhuma view ou constraint se referencia ao campo.

Page 59: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 59

Alter table •Para alterar a clausula default de um campo: ALTER TABLE nome-tab ALTER nome-coluna [ DROP DEFAULT / SET DEFAULT valor ] ;

• Para remover ou incluir uma constraint: ALTER TABLE nome-tab DROP CONSTRAINT nome-rotina; ALTER TABLE nome-tab ADD CONSTRAINT nome-rotina;

Page 60: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 60

Alter table - exemplos

Exemplos:

ALTER TABLE Empregado ADD DataNasc DATE ;

ALTER TABLE Empregado DROP Endereco CASCATE ;

ALTER TABLE Empregado ALTER Sexo DROP DEFAULT ; ALTER TABLE Empregado ALTER Sexo SET DEFAULT ‘F’ ;

ALTER TABLE Departamento DROP CONSTRAINT DeptoPK ; ALTER TABLE Departamento ADD CONSTRAINT DeptoXVE ;

Page 61: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 61

Update View

UPDATE nome-view SET coluna = {expressão} WHERE condição

Ex: UPDATE InfoDepto SET NomeDepto = ‘Compras’ WHERE NomeDepto = ‘Compra’

Page 62: Fevereiro 2001Banco de Dados1 S Q L Structured Query Language Ana Gavinho

Fevereiro 2001 Banco de Dados 62

Bibliografia• Introdução aos Sistemas de Banco de Dados J. C. Date.

• The practical SQL HandBook Judith S. Bownman, sandra L. Emerson, Marcy Darnovsky