You are on page 1of 43

Linguagem SQL

Maria Salete Marcon Gomes Vaz

2006 @ Profa. Maria Salete Marcon Gomes Vaz

1

SQL ­ Structured Query Language
Linguagem de Consulta Estruturada Fundamentada no modelo relacional, inclui comandos para:
definição de dados consulta atualização

Origem
1974 ­ Primeira versão: SEQUEL, definida por Chamberlain, na IBM 1975 ­ Implementação do primeiro protótipo 1976 ­ Revisada e estendida 1977 ­ 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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

2

SQL ­ Structured Query Language 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.

2006 @ Profa. Maria Salete Marcon Gomes Vaz

3

SQL ­ Structured Query Language
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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

4

SQL ­ Structured Query Language DDL criar (CREATE) destruir (DELETE) Modificar (ALTER) Segurança Controle Administração SQL DML consultar (SELECT) inserir (INSERT) remover (DELETE) atualizar (UPDATE)
5

Implementação Ambiente

2006 @ Profa. Maria Salete Marcon Gomes Vaz

SQL ­ Structured Query Language 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

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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

6

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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

7

SQL ­ Structured Query Language
Criação de Tabelas
CREATE TABLE <tabela> (<descrição dos atributos>) (<descrição das chaves>);

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>
2006 @ Profa. Maria Salete Marcon Gomes Vaz 8

SQL ­ Structured Query Language
Criação de tabelas Exemplo: Empregado Cad Nome Sexo Salário Num­Dep Cad­Spv
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);
2006 @ Profa. Maria Salete Marcon Gomes Vaz 9

SQL ­ Structured Query Language
Criação de tabelas Exemplo: Trabalha­em Cad­Emp Num­Proj Horas

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);

2006 @ Profa. Maria Salete Marcon Gomes Vaz

10

SQL ­ Structured Query Language
Destruição de tabelas
DROP TABLE <tabela>;

Elimina a tabela que foi previamente criada. Exemplo: DROP TABLE Empregado;

2006 @ Profa. Maria Salete Marcon Gomes Vaz

11

SQL ­ Structured Query Language
Adicionando tupla à tabela
INSERT INTO <tabela> (<lista de atributos>), VALUES (<valores>);

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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

12

SQL ­ Structured Query Language
Atualizando tuplas
UPDATE <nome tabela> SET <nome atributo> = valor WHERE <condição>

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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

13

SQL ­ Structured Query Language
Apagando tuplas da tabela
DELETE FROM <tabela> WHERE <condição>

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;

2006 @ Profa. Maria Salete Marcon Gomes Vaz

14

SQL ­ Structured Query Language
Extração de Dados de uma Tabela Comando SELECT SELECT <lista de atributos> FROM<tabela>; 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
2006 @ Profa. Maria Salete Marcon Gomes Vaz 15

SQL ­ Structured Query Language
Selecionando tuplas da tabela
SELECT <lista de atributos> FROM <tabela> WHERE <condição>

onde condição: <nome atributo> <operador> <valor>

Operadores Relacionais: =, !=, <, <=, >, >= Operadores Lógicos: AND, OR e NOT
2006 @ Profa. Maria Salete Marcon Gomes Vaz 16

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
2006 @ Profa. Maria Salete Marcon Gomes Vaz 17

SQL ­ Structured Query Language
Operadores BETWEEN e NOT BETWEEN:
substituem o uso dos operadores <= e >=
... WHERE <nome atributo> BETWEEN <valor1> and <valor2>

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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

18

SQL ­ Structured Query Language
Operadores ANY e SOME:
ANY e SOME ­ São sinônimos
Recuperar 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.
A

B x 10 20 30 40
19

select * from A where y > ANY

x 1 2

y 5 9 10 6

y 4 3 11 9

(select y from B where x > 20)
select * from A where y > SOME

3 4

(select y from B where x > 20)
2006 @ Profa. Maria Salete Marcon Gomes Vaz

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

A x 1 2 3 4 y 5 9 10 6

B x 10 20 30 40
20

y 4 3 11 9

(select y from B where x < 40)

2006 @ Profa. Maria Salete Marcon Gomes Vaz

SQL ­ Structured Query Language
Operador ALL:
Utilizado para recuperar registros na consulta principal que satisfaçam a comparação com todos os registros da subconsulta 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
A x 1 2 3 4 y 5 9 10 6 B x 10 20 30 40 y 4 3 11 9

(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)
2006 @ Profa. Maria Salete Marcon Gomes Vaz 21

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
A x 1 2 3 4 y 5 9 10 6 B x 10 20 30 40 y 4 3 11 9

(select y from B where x > 30)

2006 @ Profa. Maria Salete Marcon Gomes Vaz

22

SQL ­ Structured Query Language
Operador 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 B A y > ANY (select y from B where x < 40);
x y 5 9 10 6 x

y 4 3 11 9

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);
2006 @ Profa. Maria Salete Marcon Gomes Vaz

1 2 3 4

10 20 30 40

23

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).
...WHERE <nome atributo> LIKE <valor1>

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

SELECT Nome FROM Empregado WHERE Nome LIKE `José%'
2006 @ Profa. Maria Salete Marcon Gomes Vaz 24

SQL ­ Structured Query Language
Operadores IN e NOT IN
procuram dados que estão ou não contidos em um dado conjunto de valores.
... WHERE <nome atributo> IN <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')

2006 @ Profa. Maria Salete Marcon Gomes Vaz

25

SQL ­ Structured Query Language
Operadores 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 1 2 3 4 y 5 9 10 6

B

x 10 20 30 40

y 4 3 11 9

2006 @ Profa. Maria Salete Marcon Gomes Vaz

26

SQL ­ Structured Query Language
Operadores != 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 1 2 3 4 y 5 9 10 6

B x 10 20 30 40 y 4 3 11 9

2006 @ Profa. Maria Salete Marcon Gomes Vaz

27

SQL ­ Structured Query Language
Operadores IS NULL e IS NOT NULL
identificam valores nulos dos atributos
... WHERE <nome atributo> IS NULL

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

SELECT * FROM Projeto WHERE Local IS NULL

2006 @ Profa. Maria Salete Marcon Gomes Vaz

28

SQL ­ Structured Query Language
Ordenando os dados selecionados (ORDER BY)
SELECT <lista atributos> FROM <tabela> [WHERE <condição>] ORDER BY <Nome atributo> {ASC | DESC}

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
2006 @ Profa. Maria Salete Marcon Gomes Vaz 29

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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

30

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
2006 @ Profa. Maria Salete Marcon Gomes Vaz 31

SQL ­ Structured Query Language
Clá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
2006 @ Profa. Maria Salete Marcon Gomes Vaz 32

SQL ­ Structured Query Language
Clá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);
2006 @ Profa. Maria Salete Marcon Gomes Vaz 33

SQL ­ Structured Query Language
Clá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;
2006 @ Profa. Maria Salete Marcon Gomes Vaz 34

SQL ­ Structured Query Language
Cláusulas (NOT) LIKE, (NOT) IN, (NOT) NULL pode ser misturadas aos operadores AND, OR e NOT nas equações de junção.
Exemplo
Listar 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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

35

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

2006 @ Profa. Maria Salete Marcon Gomes Vaz

36

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')
2006 @ Profa. Maria Salete Marcon Gomes Vaz 37

SQL ­ Structured Query Language
Adicionando tuplas usando SELECT
INSERT INTO <tabela> (<lista de atributos>) SELECT <lista de atributos> FROM <tabela> WHERE <condição> 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;

2006 @ Profa. Maria Salete Marcon Gomes Vaz

38

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)

2006 @ Profa. Maria Salete Marcon Gomes Vaz

39

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;
2006 @ Profa. Maria Salete Marcon Gomes Vaz 40

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.
CREATE VIEW <nome da view> <lista de atributos> AS SELECT...

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
2006 @ Profa. Maria Salete Marcon Gomes Vaz 41

SQL ­ Structured Query Language
Garantir e Revogar privilégios de acesso
GRANT <privilégios> ON <nome tabela/view> TO <usuário> REVOKE <privilégios> ON <nome tabela/view> FROM <usuário>

<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;
2006 @ Profa. Maria Salete Marcon Gomes Vaz 42

Bibliografia
Sistema de Banco de Dados
A. Silberschatz; H. F. Korth; S. Sudarschan. Makron Books, Terceira Edição, 2006.

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

Projeto de banco de Dados

Carlos Alberto Heuser. 3a. Edição, Sagra Luzzatto, Rio Grande do Sul, 2000.

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

Banco de Dados: Fundamentos, Projeto e Implementação
David M. Kroenke. Livros Técnicos e Científicos, Sexta Edição, 1999.
2006 @ Profa. Maria Salete Marcon Gomes Vaz 43