banco de dados - 7º slide

43
2006 @ Profa. Maria Sal ete Marcon Gomes Vaz 1 Linguagem SQL Maria Salete Marcon Gomes Vaz

Upload: api-3813652

Post on 11-Apr-2015

232 views

Category:

Documents


1 download

DESCRIPTION

Linguagem SQL

TRANSCRIPT

Page 1: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

1

Linguagem SQL

Maria Salete Marcon Gomes Vaz

Page 2: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

2

SQL Structured Query Language Linguagem de Consulta Estruturada Fundamentada no modelo relacional, inclui comandos para:

definição de dados consulta atualização

Origem1974 - Primeira versão: SEQUEL, definida por Chamberlain, na IBM 1975 - Implementação do primeiro protótipo 1976 - Revisada e estendida1977 - Nome alterado para SQL, por razões jurídicas 1982 - o Amercian National Standard Institute tornou SQL padrão oficial de linguagem em ambiente relacional

Page 3: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

3

Linguagem interativa de consulta (ad hoc) usuários podem definir consultas independente de programas

Linguagem de programação para acesso a banco de dados comandos SQL embutidos em programas de aplicação

Linguagem de administração de dados o DBA pode utilizar SQL para realizar suas tarefas.

SQL Structured Query Language

Page 4: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

4

Linguagem cliente/servidor os programas clientes usam comandos SQL para se comunicarem e compartilharem dados com o servidor

Linguagem para banco de dados distribuídos auxilia na distribuição de dados por vários nós e na comunicação de dados com outros sistemas

Caminho de acesso a outros bancos de dados em diferentes máquinas

auxilia na conversão entre diferentes produtos em diferentes máquinas

SQL Structured Query Language

Page 5: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

5

SQL Structured Query Language

DDL

criar (CREATE)

destruir (DELETE)

Modificar (ALTER)

Implementação

Ambiente

DML

consultar (SELECT)

inserir (INSERT)

remover (DELETE)

atualizar (UPDATE)

Segurança

Controle

Administração

SQL

Page 6: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

6

Vantagens:

Independência de fabricante

Portabilidade entre sistemas

Redução de custos com treinamento

Comandos em inglês

Consulta interativa

Múltiplas visões de dados

Definição dinâmica dos dados

SQL Structured Query Language

Desvantagens: A padronização inibe a criatividade Está longe de ser uma linguagem relacional ideal Algumas críticas:

discordância com as linguagens hospedeiras não dá suporte a alguns aspectos do modelo

relacional

Page 7: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

7

SQL Structured Query Language

Comandos SQL (padrão ANSI):

Criação e destruição de tabelas

Extração de dados de uma tabela

Inserção, modificação e remoção de dados

Definição de visões

Definição de privilégios de acesso

Page 8: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

8

SQL Structured Query Language

Criação de Tabelas

Descrição dos atributos: lista dos atributos com respectivos tipos de dados: smallint, char, money, varchar, integer, decimal,

float, real, date, time, timestamp, logical.

A chave primária deve ser declarada como not null unique

Descrição das chaves: lista das chaves estrangeiras na forma:

FOREIGN KEY (<atributo>) REFERENCES <tabela>

CREATE TABLE <tabela> (<descrição dos atributos>) (<descrição das chaves>);

Page 9: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

9

SQL Structured Query LanguageCriação de tabelas Exemplo: Empregado

CREATE TABLE Empregado (Cad smallint not null unique, Nome char (20), Sexo char, Salário decimal (10,2), Num Dep integer, Cad Spv smallint, constraint pk_empregado primary key(cad), constraint fk_emp_pk_depto FOREIGN KEY Num Dep REFERENCES Departamento, constraint fk_emp_pk_emp FOREIGN KEY Cad Spv REFERENCES Empregado);

Cad Nome Sexo Salário Num Dep Cad Spv

Page 10: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

10

SQL Structured Query Language

Criação de tabelas

Exemplo: Trabalha-em

CREATE TABLE Trabalha em

(Cad emp smallint not null unique,

Num Proj integer not null unique,

Horas decimal (3,1)

FOREIGN KEY Cad Emp REFERENCES Empregado,

FOREIGN KEY Num Proj REFERENCES Projeto);

Cad Emp Num Proj Horas

Page 11: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

11

SQL Structured Query Language

Destruição de tabelas

Elimina a tabela que foi previamente criada.

Exemplo:

DROP TABLE Empregado;

DROP TABLE <tabela>;

Page 12: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

12

SQL Structured Query Language

Adicionando tupla à tabela

Exemplo:

INSERT INTO Empregado VALUES (015, `José da Silva', `M', 1000)

INSERT INTO <tabela> (<lista de atributos>),

VALUES (<valores>);

Page 13: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

13

SQL Structured Query Language

Atualizando tuplas

Exemplo:

UPDATE Empregado SET Salário = 1500 WHERE Cad = 015

UPDATE <nome tabela> SET <nome atributo> = valor WHERE <condição>

Page 14: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

14

SQL Structured Query Language

Apagando tuplas da tabela

Exemplo 1: Exclui todos os empregados que tem salário maior que 5000.

DELETE FROM Empregado WHERE Salário > 5000;

Exemplo 2: Exclui todos os empregados DELETE FROM Empregado;

DELETE FROM <tabela> WHERE <condição>

Page 15: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

15

SQL Structured Query Language

Extração de Dados de uma Tabela Comando SELECT

Selecionando atributos (Projeção): Exemplo: Listar nome e salário de todos os empregados

SELECT Nome, Salário FROM Empregado Selecionando todos os atributos

SELECT * FROM <tabela> Exemplo: Listar o conteúdo de Empregado

SELECT * FROM Empregado

SELECT <lista de atributos> FROM<tabela>;

Page 16: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

16

SQL Structured Query Language

Selecionando tuplas da tabela

onde condição:

<nome atributo> <operador> <valor>

Operadores Relacionais: =, !=, <, <=, >, >=

Operadores Lógicos: AND, OR e NOT

SELECT <lista de atributos> FROM <tabela> WHERE <condição>

Page 17: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

17

SQL Structured Query Language

Selecionando tuplas da tabela Exemplos:

Listar nome e sexo dos empregados do departamento 15. SELECT Nome, Sexo FROM Empregado WHERE Num Dep = 15

Listar nome e sexo dos empregados do departamento 15 com salário > R$ 1.000,00

SELECT Nome, Sexo FROM Empregado WHERE Num Dep = 15 AND Salário > 1000

Page 18: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

18

SQL Structured Query Language

Operadores BETWEEN e NOT BETWEEN: substituem o uso dos operadores <= e >=

Exemplo:

Listar os empregados com salário entre R$ 1.000,00 e R$ 2.000,00

SELECT * FROM Empregado

WHERE Salário BETWEEN 1000 and 2000

... WHERE <nome atributo> BETWEEN <valor1> and <valor2>

Page 19: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

19

SQL Structured Query LanguageOperadores ANY e SOME:

ANY e SOME - São sinônimosRecuperar registros na consulta principal que satisfaçam a comparação com qualquer registro da subconsulta

Exemplo: Listar todos os registros de A, onde o y seja maior a qualquer elemento pertencente ao resultado da consulta de B.

select * from A where y > ANY

(select y from B where x > 20)

select * from A where y > SOME

(select y from B where x > 20)

A

x y

1 5

2 9

3 10

4 6

B

x y

10 4

20 3

30 11

40 9

Page 20: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

20

SQL Structured Query Language

Operadores ANY e SOME: Exemplo: Listar todos os registros de A, onde o y seja maior de qualquer elemento pertencente ao resultado da consulta de B.

select * from A where y > ANY

(select y from B where x < 40)

select * from A where y > SOME

(select y from B where x < 40)

A

x y

1 5

2 9

3 10

4 6

B

x y

10 4

20 3

30 11

40 9

Page 21: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

21

SQL Structured Query LanguageOperador ALL:

Utilizado para recuperar registros na consulta principal que satisfaçam a comparação com todos os registros da subconsultaExemplo: Listar todos os registros de A, onde o y seja maior que todos os elementos pertencentes ao resultado da consulta de B.

select * from A where y > ALL

(select y from B)

Exemplo: Listar todos os registros de A, onde o y seja menor que todos os elementos pertencentes ao resultado da consulta de B.

select * from A where y < ALL

(select y from B)

A

x y

1 5

2 9

3 10

4 6

B

x y

10 4

20 3

30 11

40 9

Page 22: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

22

SQL Structured Query Language

Operador ALL: Exemplo: Listar todos os registros de A, onde o y seja maior que todos os elementos pertencentes ao resultado da consulta de B.

select * from A where y > ALL

(select y from B where x > 30)A

x y

1 5

2 9

3 10

4 6

B

x y

10 4

20 3

30 11

40 9

Page 23: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

23

SQL Structured Query LanguageOperador ANY em comandos UPDATE e DELETE

Exemplo: O valor de x, dos registros de A, será multiplicado por 10 quando o y for maior que qualquer y pertencente ao resultado da subconsulta.

update A set x = x* 10 where

y > ANY (select y from B where x < 40);

Exemplo: Os registros de A são deletados

quando o y for maior que qualquer y

pertencente ao resultado da subconsulta.

delete from A where y > ANY

(select y from B where x < 40);

A

x y

1 5

2 9

3 10

4 6

B

x y

10 4

20 3

30 11

40 9

Page 24: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

24

SQL Structured Query Language

Operadores LIKE e NOT LIKE só se aplicam sobre atributos do tipo char.

Operam como = e !=

utiliza o símbolo % (substitui uma palavra)

utiliza o símbolo _ (substitui um caracter).

Exemplo: Listar os empregados que tem como primeiro nome `José`

SELECT Nome FROM Empregado

WHERE Nome LIKE `José%'

...WHERE <nome atributo> LIKE <valor1>

Page 25: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

25

SQL Structured Query Language

Operadores IN e NOT IN procuram dados que estão ou não contidos em um dado conjunto de valores.

Exemplo: Listar o nome e data de nascimento dos dependentes com grau de parentesco 'E' de Esposo(a) ou 'F' de Filho(a)

SELECT Nome, Data_Nasc FROM Dependentes WHERE Grau P IN ('F', 'E')

... WHERE <nome atributo> IN <valores>

Page 26: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

26

SQL Structured Query LanguageOperadores IN e ANY

Se utilizar ANY com sinal de igualdade Será o mesmo resultado de IN

Exemplo: Listar todos os registros de A onde o y seja igual a qualquer y do resultado da subconsulta

select * from A where y = ANY (select y from B);

select * from A where y IN (select y from B);

A

x y

1 5

2 9

3 10

4 6

B

x y

10 4

20 3

30 11

40 9

Page 27: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

27

SQL Structured Query LanguageOperadores != ALL equivale a NOT IN

Exemplo: Listar todos os registros de A onde o y seja NÃO seja igual a qualquer y do resultado da subconsulta

select * from A where y != ALL (select y from B);

select * from A where y NOT IN (select y from B);

A

x y

1 5

2 9

3 10

4 6

B

x y

10 4

20 3

30 11

40 9

Page 28: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

28

SQL Structured Query Language

Operadores IS NULL e IS NOT NULL identificam valores nulos dos atributos

Exemplo: Listar os projetos que não tenham local definido

SELECT * FROM Projeto

WHERE Local IS NULL

... WHERE <nome atributo> IS NULL

Page 29: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

29

SQL Structured Query LanguageOrdenando os dados selecionados (ORDER BY)

Exemplo: Listar todos os empregados ordenados ascendentemente por nome.

SELECT * FROM Empregado ORDER BY Nome

Listar todos os empregados ordenados descendentemente por salário

SELECT * FROM Empregado ORDER BY Salário DESC

SELECT <lista atributos> FROM <tabela>

[WHERE <condição>]

ORDER BY <Nome atributo> {ASC | DESC}

Page 30: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

30

SQL Structured Query Language

Realizando cálculo com informação selecionada Pode se criar um campo que não pertença à tabela a partir de cálculos sobre atributos da tabela

Exemplo: Mostrar o novo salário dos empregados calculado com base no reajuste de 60% para os que ganham abaixo de R$ 1.000,00

SELECT Nome, (Salario * 1.60)

FROM Empregado WHERE Salário < 1000

Page 31: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

31

SQL Structured Query Language

Utilizando funções sobre conjuntos Comandos: MAX, MIN, SUM, AVG, COUNT

Exemplos: Mostrar o empregado de maior salário

SELECT MAX (Salário) FROM Empregado

Mostrar qual o salário médio dos empregados

SELECT AVG (Salário) FROM Empregado

Quantos empregados ganham mais de R$1.000,00?

SELECT COUNT (*) FROM Empregado WHERE Salário > 1000

Page 32: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

32

SQL Structured Query LanguageCláusula DISTINT

Elimina tuplas duplicadas do resultado de uma consulta. Exemplo:

Quais os diferentes salários dos empregados?

SELECT DISTINCT Salário FROM Empregado

Cláusula GROUP BY Organiza a seleção de dados em grupos Exemplo:

Listar os empregados por sexo

SELECT sexo, count(*) FROM Empregado GROUP BY Sexo

Page 33: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

33

SQL Structured Query LanguageCláusula HAVING

Agrupa Informações de forma condicional Seleciona entre as tuplas resultantes, as que satisfazem um dada condição. Exemplo:

Listar o número total de empregados que recebem salários superior a R$1.000,00, agrupados por departamento mas só daqueles com mais de 5 empregados.

SELECT codd, count(*) FROM empregado WHERE salario > 1000 GROUP BY codd HAVING COUNT(*) > 5 ;

Select cor from TABELA group by cor having count(distinct codigo) >= max(codigo);

Page 34: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

34

SQL Structured Query LanguageCláusula JOIN

Recuperando dados de várias tabelas e utiliza qualificadores de nomes para referenciar o nome do empregado (Empregado.Nome) Exemplos:

Listar o nome do empregado e do departamento onde está alocado

SELECT Empregado.Nome, Departamento.Nome FROM Empregado, Departamento WHERE Projeto.Num Dep = Departamento.Número;

Listar o nome dos departamentos que têm projetos

SELECT Departamento.Nome FROM Departamento, Projeto WHERE Projeto.Num Dep = Departamento.Número;

Page 35: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

35

SQL Structured Query LanguageCláusulas (NOT) LIKE, (NOT) IN, (NOT) NULL pode ser misturadas aos operadores AND, OR e NOT nas equações de junção.

ExemploListar os departamentos que têm projetos com número superior a 99 e localizados em RJ e SP ordenados por nome de departamento

SELECT Departamento.Nome FROM Departamento, Projeto WHERE Projeto.Local IN (`RJ', `SP') AND Projeto.Número > 99 AND Projeto.Depto = Departamento.Codigo ORDER BY Departamento.Nome

Page 36: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

36

SQL Structured Query Language

Juntando mais de duas tabelas

Exemplo:

Listar o nome dos empregados, com seu respectivo departamento que trabalhem mais de 20 horas em algum projeto

SELECT empregado.nome, departamento.nome

FROM empregado, departamento, trabalha_em

WHERE trabalha_em.horas > 20 AND

trabalha em.code = empregado.code AND

Empregado.codd = Departamento.codd

Page 37: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

37

SQL Structured Query Language

Utilizando consultas encadeadas O resultado de uma consulta é utilizado por outra consulta, de forma encadeada e no mesmo comando SQL

Exemplo: Listar os departamentos que tenham qualquer projeto em RJ

SELECT Departamento.nome FROM departamento

WHERE departamento.numd

IN (SELECT projeto.numd FROM projeto

WHERE projeto.local = `RJ')

Page 38: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

38

SQL Structured Query Language

Adicionando tuplas usando SELECT

Exemplo: INSERT INTO cliente (codc, nomec) SELECT v.codv, v.nome FROM vendedor v, pedido p WHERE v.codv = p.codv GROUP BY v.codv,v.nome HAVING COUNT (*) > 50;

INSERT INTO <tabela> (<lista de atributos>)

SELECT <lista de atributos> FROM

<tabela> WHERE <condição>

Page 39: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

39

SQL Structured Query Language

Atualizando tuplas – uso do SELECT com UPDATE

Exemplo: Os empregados com o menor salário vão receber um aumento de 10%

update empregado

set salario = salario*1.1

where salario = (select min(salario) from empregado)

Page 40: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

40

SQL Structured Query Language

Atualizando tuplas – SELECT na atribuição do campo

Exemplo: Os empregados do Departamento 1 receberão o maior salário

update empregado

set salario = (select max(salario) from empregado)

where numd = 1;

Page 41: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

41

SQL Structured Query Language

Utilizando Visões (VIEWS) São tabelas virtuais que não ocupam espaço físico Criação, Utilização, Inserção, Modificação, etc.

Exemplo:Criar uma visão dos empregados do departamento 10 que tenham mais de 20 horas de trabalho em projetos

CREATE VIEW Dep 10 AS SELECT Empregado.Nome, Num Proj FROM Empregado, Trabalha em WHERE Trabalha em.Horas > 20 AND Trabalha em.Cad Emp = Empregado.Cad AND Empregado.Num Dep = 10

CREATE VIEW <nome da view> <lista de atributos> AS SELECT...

Page 42: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

42

SQL Structured Query Language

Garantir e Revogar privilégios de acesso

<privilégios>: SELECT, INSERT, DELETE, UPDATE, ALL PRIVILEGES

<usuário>: usuário cadastrado, PUBLIC

Exemplos:

GRANT SELECT ON Empregado TO salete;

REVOKE SELECT ON Projeto FROM PUBLIC;

GRANT <privilégios> ON <nome tabela/view> TO <usuário>

REVOKE <privilégios> ON <nome tabela/view> FROM <usuário>

Page 43: Banco de Dados - 7º Slide

2006 @ Profa. Maria Salete Marcon Gomes Vaz

43

Bibliografia Sistema de Banco de DadosA. Silberschatz; H. F. Korth; S. Sudarschan. Makron Books, Terceira

Edição, 2006.

Projeto de Banco de Dados - Uma Visão PráticaFelipe Machado; Maurício Abreu. 10a. Edição. Editora Érica, São

Paulo, 2003.

Projeto de banco de DadosCarlos Alberto Heuser. 3a. Edição, Sagra Luzzatto, Rio Grande do

Sul, 2000.

Modelagem Conceitual e Projeto de banco de DadosPaulo Cougo. Editora Campus, Rio de Janeiro, 1997.

Banco de Dados: Fundamentos, Projeto e ImplementaçãoDavid M. Kroenke. Livros Técnicos e Científicos, Sexta Edição, 1999.