Você está na página 1de 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 Implementação
criar (CREATE) Ambiente
destruir (DELETE)
Modificar (ALTER) SQL DML
consultar (SELECT)
Segurança inserir (INSERT)
Controle remover (DELETE)
Administração atualizar (UPDATE)

2006 @ Profa. Maria Salete Marcon Gomes Vaz 5


SQL ­ Structured Query Language
Desvantagens:
Vantagens: A padronização inibe a
Independência de fabricante criatividade
Portabilidade entre sistemas Está longe de ser uma linguagem
Redução de custos com relacional ideal
treinamento Algumas críticas:
discordância com as
Comandos em inglês
linguagens hospedeiras
Consulta interativa não dá suporte a alguns
Múltiplas visões de dados aspectos do modelo
Definição dinâmica dos dados 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
CREATE TABLE <tabela>
Criação de Tabelas (<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 Cad Nome Sexo Salário Num­Dep Cad­Spv
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);
2006 @ Profa. Maria Salete Marcon Gomes Vaz 9
SQL ­ Structured Query Language
Criação de tabelas
Cad­Emp Num­Proj Horas
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);

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.
B
A
x y
select * from A where y > ANY x y
10 4
(select y from B where x > 20) 1 5

2 9 20 3

select * from A where y > SOME 3 10 30 11

(select y from B where x > 20) 4 6 40 9

2006 @ Profa. Maria Salete Marcon Gomes Vaz 19


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) B
A
x y
x y
select * from A where y > SOME 10 4
1 5
(select y from B where x < 40) 20 3
2 9
30 11
3 10
40 9
4 6
2006 @ Profa. Maria Salete Marcon Gomes Vaz 20
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 B


A
(select y from B) x y
x y

10 4
1 5
Exemplo: Listar todos os registros de A, onde o y 20 3
2 9
seja menor que todos os elementos pertencentes ao
30 11
resultado da consulta de B. 3 10
select * from A where y < ALL 40 9
4 6
(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.
B
select * from A where y > ALL A
x y
x y
(select y from B where x > 30)
10 4
1 5
20 3
2 9
30 11
3 10
40 9
4 6

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
x y
10 4
Exemplo: Os registros de A são deletados 1 5
20 3
quando o y for maior que qualquer y 2 9
pertencente ao resultado da subconsulta. 30 11
3 10
delete from A where y > ANY 4 6
40 9
(select y from B where x < 40);

2006 @ Profa. Maria Salete Marcon Gomes Vaz 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
B
select * from A A
x y
where y = ANY (select y from B); x y
10 4
1 5
20 3
select * from A 2 9
where y IN (select y from B); 3 10
30 11

40 9
4 6

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 B
A
where y != ALL (select y from B); x y
x y

10 4
1 5
select * from A 2 9
20 3

where y NOT IN (select y from B); 3 10


30 11

40 9
4 6

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

Você também pode gostar