Sei sulla pagina 1di 67

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

STRUCTURE QUERY LANGUAGE - SQL


Iana Daya Cavalcante Facundo Passos

Histrico
SQL - Structured Query Language;
Foi definida por D. D. Chamberlin e outros, nos laboratrios de pesquisa
da IBM em San Jose, California, em 1974;
Teve seus fundamentos no modelo relacional de E. F. Codd,
criado em 1970;
Sua primeira verso recebeu o nome de SEQUEL
Structured English Query Language;
considerada a linguagem de fato de acesso a Banco de Dados
Relacionais
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Aspectos Gerais
COMANDOS BSICOS SQL
Definio de dados: CREATE, ALTER, DROP, CREATE INDEX.
Manipulao de dados: INSERT, UPDATE, DELETE.
Seleo de dados: SELECT.
TIPOS DE DADOS
Cadeia de caracteres
Categoria
Fixa

Tipo
char(n)

Comentrio
String de tamanho fixo n

character
Varivel

varchar(n)

String de tamanho varivel e


mximo igual a n

character varying

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Aspectos Gerais
Numrico
Categoria
Inteiro

Real

Decimal

Tipo

Comentrio

Integer ou int

Valores inteiros em 4 bytes

smallinter

Valores inteiros em 2 bytes

float(n)

Armazena dado numrico de ponto


flutuante e preciso definida pelo
usurio

real

Armazena dado numrico de ponto


flutuante e preciso simples (7
dgitos)

doubl precision

Armazena dado numrico de ponto


flutuante e preciso dupla

numeric(n,d)ou decimal
(n,d)

Armazena nmeros decimais com n


dgitos e d decimais

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Aspectos Gerais
Cadeia de bits
Categoria

Tipo

Comentrio

Fixa

bit

0, 1 ou NULL

Varivel

bit varying

Valores binrios de tamanho


varivel

Data e Hora
Tipo

Formato

Comentrio

Date

aaaa/mm/dd

Armazena a data

Time

hh:mm:ss

Armazena a hora

Especial
Categoria

Tipo

Comentrio

Especial (SQL-99)

BLOB

Armazena imagens, vdeos e


udio

Especial (SQL-99)

CLOB

Armazena texto no formato de


livros

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


1. CREATE TABLE
Especifica uma nova tabela (relao), dando o seu nome e especificando
as colunas(atributos) cada uma com seu nome, tipo e restries.
Criando Tabelas
Que tipos de dados sero inseridos na tabela?
Qual ser o nome da tabela?
Que coluna(s) compor(o) a chave primria?
Que nomes sero dados s colunas (campos)?
Que tipo de dados ser atribudo a cada coluna?
Qual ser o comprimento (tamanho) alocado para cada coluna?
Quais colunas em uma tabela exigem dados?
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


Sintaxe:
CREATE TABLE tabela_base (atributos tabela_base + constraints)
Os atributos tm formato:
Nome_Atributo Tipo_Dado [ NOT NULL [UNIQUE]]
Nome Atributo: nome do atributo que est sendo definido;
Tipo_dado: domnio do atributo;
NOT NULL: expressa que o atributo no pode receber valores nulos;
UNIQUE: indica que o atributo tem valor nico na tabela;

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


Sintaxe:
CREATE TABLE tabela_base (atributos tabela_base + constraints)
As constraints, por sua vez, tm o formato:
Integridade de Chave: PRIMARY KEY (atributos da chave primria)
Integridade Referencial: FOREIGN KEY (atributos)
REFERENCES tabela_base (atributos)
Integridade de Domnio: CHECK (condio)

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


Exemplo:
CREATE TABLE empregado (
nome
matricula
dataNasc
endereco
sexo
salario
supervisor
depto

VARCHAR(15)
CHAR(9)
DATE,
VARCHAR(30),
CHAR,
NUMERIC(10,2),
CHAR(9),

INT

NOT NULL,
NOT NULL,

NOT NULL,

PRIMARY KEY (matricula),


CHECK (salario >=0),
FOREIGN KEY (supervisor) REFERENCES empregado (matricula),
FOREIGN KEY (depto) REFERENCES departamento (codDep) );
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


Exemplo:
CREATE TABLE departamento (
nomeDep
codDep
gerente
dataInicioGer

VARCHAR(15)
INT
CHAR(9)
DATE,

NOT NULL,
NOT NULL,
NOT NULL,

PRIMARY KEY (codDep),


UNIQUE (nomeDep),
FOREIGN KEY (gerente) REFERENCES empregado (matricula) );

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


A chave estrangeira definida com a clusula FOREIGN KEY.
Este tipo de clusula inclui regras de remoo e atualizao.
Sintaxe:
FOREIGN KEY (atributo) REFERENCES tabela
[ON DELETE {RESTRICT|CASCADE|SET NULL| SET DEFAULT}]
[ON UPDATE {RESTRICT|CASCADE|SET NULL| SET DEFAULT}]

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


Supondo que T2 tem uma chave estrangeira para T1, vejamos as
clusulas ON DELETE e ON UPDATE.
ON DELETE
RESTRICT: Significa que uma tentativa de se remover uma linha de T1
falhar se alguma linha em T2 combina com a chave;
CASCADE: a remoo de uma linha em T1 implica em remoo de
todas as linhas de T2 que combinam com a chave de T1;

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


SET NULL: a remoo de uma linha em T1 implica em colocar NULL
em todos os atributos da chave estrangeira de cada linha de T2 que
combina com T1;

SET DEFAULT: a remoo de linhas em T1 implica em colocar valores


default nos atributos da chave estrangeira de cada linha de T2 que
combina com T1.

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


ON UPDATE
RESTRICT: o update de um atributo de T1 falha se existem linhas em
T2 combinando;
CASCADE: update de atributo em T1 implica que linhas que combinam
em T2 tambm sero atualizadas;
SET NULL: update de T1 implica que valores da chave estrangeira em
T2 nas linhas que combinam so postos para NULL;
SET DEFAULT: update de T1 implica que valores da chave estrangeira
de T2 nas linhas que combinam tero valores default aplicados.

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


As restries de integridade podem ter um nome e serem especificadas
com a clusula CONSTRAINT.
CREATE TABLE Empregado (
nome
VARCHAR(15)
matricula
CHAR(9)
dataNasc
DATE,
endereco
VARCHAR(30),
sexo
CHAR,
salario
NUMERIC(10,2),
supervisor
CHAR(9),
depto
INT

NOT NULL,
NOT NULL,

NOT NULL,

CONSTRAINT emp_cp
PRIMARY KEY (matricula),
CONSTRAINT empSuper_ce
FOREIGN KEY (supervisor) REFERENCES empregado (matricula)
ON DELETE SET NULL ON UPDATE CASCADE,
CONSTRAINT empSuper_ce
FOREIGN KEY (depto) REFERENCES departamento (codDep)
ON DELETE SET DEFAULT ON UPDATE CASCADE

);

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


2. ALTER TABLE
Permite que se altere os atributos de uma determinada tabela ou que se
adicione novos atributos (evoluo de esquemas). Os novos atributos
tero valores nulos em todas as linhas. Ao incluirmos um novo atributo
devemos especificar o seu tipo de dado, no podendo este atributo
ser NOT NULL.
Sintaxe:
ALTER TABLE tabela_base
ADD atributo tipo_dado

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


2. ALTER TABLE
Exemplo:
ALTER TABLE Pea
ADD material VARCHAR(30)
Pode-se remover um atributo de uma tabela.
Sintaxe:
ALTER TABLE tabela_base
DROP atributo [CASCADE|RESTRICT]

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


2. ALTER TABLE
CASCADE: remove todas as restries relativas ao atributo e vises
que contm o atributo a ser removido;
RESTRICT:no permite a remoo do atributo se este usado numa
viso ou como chave estrangeira numa outra tabela;
Exemplo:
ALTER TABLE Empregado
DROP endereco CASCADE;

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


2. ALTER TABLE
Exemplo:
ALTER TABLE empregado
DROP CONSTRAINT empSuper_ce CASCADE;
ALTER TABLE empregado
ADD CONSTRAINT empsuper_ce
FOREIGN KEY(supervisor) REFERENCES empregado (matricula)

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


3. DROP TABLE
Remove uma tabela do banco de dados. Remove tanto os dados quanto
a definio da tabela.
Sintaxe:
DROP TABLE tabela-base
Exemplo:
DROP TABLE empregado;

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


4. CREATE INDEX
Um ndice uma estrutura de acesso fsico que especificado em um
ou mais atributos de um arquivo, permitindo um acesso mais
eficiente aos dados.
Sintaxe:
CREATE INDEX nome_ndice
ON tabela_base (atributo)
O default ordem ascendente, se quisermos uma ordem descendente
adicionamos a palavra chave DESC depois do nome do atributo.

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Definio de Dados SQL DDL


4. CREATE INDEX
Para especificar a restrio de chave usamos a palavra UNIQUE.
CREATE UNIQUE INDEX matricIndex
ON Empregado (matrcula)

Para eliminar um ndice usamos o comando DROP


Sintaxe:
DROP INDEX nome_ndice
Exemplo:
DROP INDEX matricIndex
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
O comando SELECT usado na formulao de todas as consultas ou
do SQL, podendo tambm implementar todas as operaes da
lgebra relacional.
SELECT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE condio ]
SELECT: Especifica as colunas e expresses exibidas no resultado da consulta;
FROM: Especifica as tabelas que contm os dados exibidos nos resultado da consulta;
WHERE: Especifica as condies usadas para filtrar registros no resultado da consulta.
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Banco de Dados Exemplo
Empregado (matricula, nome, data_nasc, endereco, salario, supervisor, depto)
Departamento (coddep, nome, gerente, dataini)
Projeto (codproj, nome, local, depart)
Alocao (matric,codigop, horas)

Q1. Obtenha o salrio de Jos.


SELECT salario
FROM Empregado
WHERE nome = Jos

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Q2. Selecione o nome e o endereo de todos os empregados cujo salrio
inferior a R$ 1.000,00
SELECT nome, endereco
FROM empregado
WHERE salrio < 1000
Q3 Exiba a matrcula dos empregados que trabalham nos projetos 10,20
ou 30.
SELECT matrcula
FROM Alocao
WHERE matricula IN (10, 20, 30)
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Para eliminar duplicatas usa-se o comando DISTINCT na clusula SELECT.

SELECT DISTINCT lista-de-seleo


FROM tabela [ , tabela, ... ]
[ WHERE condio ]
Q4. Selecione os diferentes salrios pagos pela empresa aos empregados.
SELECT DISTINCT salario
FROM empregado

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Podemos verificar valores nulos atravs das funes IS NULL e IS NOT NULL.

SELECT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE atributo IS [NOT] NULL ]
Q5. Selecione os nomes de todos os empregados que no tm supervisores.

SELECT nome
FROM empregado
WHERE supervisor IS NULL

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
FUNES EMBUTIDAS
As funes embutidas ou funes de agregao disponibilizadas pelo SQL DML

Operam na coleta de valores de uma coluna da tabela;


Produzem um resultado nico;
Geram valores sumarizados;
No atuam sobre valores nulos;
So usadas na lista de colunas do SELECT ou numa clusula
HAVING (a ser vista depois).

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
FUNES EMBUTIDAS
COUNT: retorna o nmero de tuplas ou valores especificados numa consulta;
SUM: retorna a soma os valores de uma coluna;
AVG: retorna a mdia dos valores de uma coluna;
MAX: retorna o maior valor de uma coluna;
MIN: identifica o menor valor de uma coluna;

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
FUNES EMBUTIDAS
SELECT funo embutida lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE condio ]
Q6. Encontre o total de salrios, o maior salrio o menor salrio e a mdia
salarial da relao Empregados

SELECT SUM(salario), MAX(salario), MIN(salario), AVG(salario)


FROM Empregado

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
FUNES EMBUTIDAS
Q7. Exibir a data de nascimento do homem mais velho da empresa.
SELECT MIN(datanasc)
FROM Empregado
WHERE sexo=M
Q8.Obtenha o nmero de empregados da empresa.
SELECT COUNT(*)
FROM empregado
Q9. Exibir a soma dos salrios pagos a uma empregada.
SELECT SUM(salrio)
FROM empregado
WHERE sexo=F
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Para trabalhar com grupos, usa-se a clusula GROUP BY que agrupa
as linhas da consulta com base nos valores de uma das colunas.
SELECT funo embutida lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE condio ]
GROUP BY atributo
Q10. Para cada departamento, obter o cdigo do departamento, o nmero de
empregados e a mdia salarial.
SELECT depto, COUNT(*) AS Total de Empregados, AVG(salario)
FROM Empregado
GROUP BY depto
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
OBS: As tuplas de empregados so separadas em grupos (departamento)
e as funes COUNT e AVG so aplicadas a cada grupo separadamente.
Q11. Exiba a quantidade de homens e mulheres da empresa.
SELECT sexo, COUNT(*) AS Quantidade
FROM funcionrio
GROUP BY sexo

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Usada apenas em conjunto com o GROUP BY, a clusula HAVING
especifica as condies usadas para filtrar agrupamentos de dados no
resultado da consulta.
Sintaxe:
SELECT funo embutida lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE condio ]
GROUP BY atributo
[HAVING condio]
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Q12. Exibir os pedidos que tm mais do que 4 produtos.
SELECT pedido,COUNT(produto)
FROM itens
GROUP BY pedido
HAVING COUNT(produto) > 4

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
OPERADORES DE COMPARAO E ARITMTICOS
O SQL DML dispe de dois operadores de comparao, o BETWEEN
e o LIKE, e os aritmticos +, -, * e / .
Sintaxe:
SELECT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE atributo [NOT] BETWEEN expresso AND expresso]

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
OPERADORES DE COMPARAO E ARITMTICOS
Exemplo:
Q13. Selecione os nomes dos empregados que ganham mais de 1000
e menos de 2000 reais.
SELECT nome
FROM Empregado
WHERE salario BETWEEN 1000 AND 2000

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
OPERADORES DE COMPARAO E ARITMTICOS
O operador LIKE atua em campos do tipo caracter e faz distino entre
maisculos e minsculos. Possibilita a comparao entre substrings.
Usa dois caracteres reservados: o % (percentual) que substitui uma
seqncia de caracteres e o - que substitui um nico caracter.
Sintaxe:
SELECT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE atributo [NOT] LIKE string]
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
OPERADORES DE COMPARAO E ARITMTICOS
Q14. Exibir matrcula e nome de todos os funcionrios que tenham o
nome terminando por Silva.
SELECT matrcula, nome
FROM Empregado
WHERE nome LIKE %Silva
Q15. Exibir cdigo e nome de todos os clientes, exceto dos que tenham
a letra A como segundo caractere do cdigo.
SELECT cdigo, nome
FROM cliente
WHERE cdigo NOT LIKE _A%
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
OPERADORES DE COMPARAO E ARITMTICOS
Os operadores aritmticos: +, -, *, / podem apenas ser aplicados a
valores numricos
Q16. Exibir o valor total de cada pedido
(Valor total = quantidade *preo desconto),
onde a soma seja maior do que R$ 1.000,00.
SELECT pedido, SUM ((preo*quant)-(preo*quant* desconto/100)) AS Valor Total
FROM itens
GROUP BY pedido
HAVING SUM ((preo*quant)-(preo*quant*desconto/100)) > $1000.00
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
O operador ORDER BY Classifica os resultados da consulta com base
nos dados de um ou mais atributo. A ordem default ascendente (ASC)
caso queiramos ordem decrescente usamos DESC.
Sintaxe:
SELECT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE condio]
ORDER BY atributo [ASC] [DESC]

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Q17. Exibir em ordem decrescente da data de aniversrio todos os
dados dos empregados que nasceram na dcada de 60.
SELECT *
FROM Empregado
WHERE datanasc BETWEEN 01/01/1960 and 31/12/1969
ORDER BY datanasc DESC

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


1. SELECT
Q18. Exibir matrcula, nome, cidade, sexo e salrio de todos
os empregados da empresa, ordenados por cidade e sexo em ordem
ascendente e por salrio em ordem descendente.
SELECT matrcula, nome, cidade, sexo, salrio
FROM empregado
ORDER BY cidade,sexo,salrio DESC

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


2. INSERT
O comando INSERT usado para adicionar uma tupla a uma relao.
Sintaxe:
INSERT INTO tabela_base (atributo [, atributo] ...)
VALUES (constante [,constante]...)
Exemplo:
INSERT INTO Empregado( matricula, nome)
VALUES(9491,Ana)
OBS: A insero ser rejeitada se tentarmos omitir um atributo que no
permite valores nulos (NOT NULL).
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


3. UPDATE
O comando UPDATE modifica o valor de atributos de uma ou mais tuplas.
Sintaxe:
UPDATE tabela_base
SET atributo = expresso [ , atributo = expresso ] ...
[ WHERE condio ] ;
Q19 Modifique o nome do Departamento de Computao para
Departamento de Informtica.
UPDATE Departamento
SET nome = Informtica
WHERE nome = Computao
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


4. DELETE
O comando DELETE remove tuplas de uma relao.
Sintaxe:
DELETE
FROM tabela
[WHERE condio];
DELETE FROM Empregado
WHERE nome = Silva.

DELETE FROM Empregado


WHERE matricula = 9401

DELETE FROM EMPREGADO


OBS: Quando a clusula WHERE omitida, o DELETE deve ser aplicado
a todas as tuplas da relao. Porm, a relao permanece no BD como
uma relao vazia.
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
Qual o nome do depto de cada empregado ?
Qual a lista de empregados de um projeto?
Qual o nome dos gerentes de cada departamento?
Q20. Faa o produto cartesiano de Empregado X Departamento
retornando a matrcula do empregado e o cdigo do departamento.
SELECT empregado.matricula, departamento.nome
FROM Empregado, Departamento

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
JUNO DE TABELAS
A juno entre duas tabelas realizada usando uma coluna de conexo
existente em cada tabela e o resultado da consulta contm somente linhas
de uma tabela que corresponda a uma ou mais linhas da outra tabela.
A condio de juno especifica os critrios para a juno das tabelas.
Sintaxe:
SELECT lista-de-seleo
FROM tabela, tabela [ , tabela, ... ]
[ WHERE condio de juno]

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
JUNO DE TABELAS
Exemplos:
Q21. Selecione a matrcula e o nome dos empregados que trabalham no
departamento GEO.
SELECT empregado.matrcula, empregado.nome
FROM Empregado, Departamento
WHERE Departamento.coddep = GEO AND
(Empregado.dept = Departamento. Coddep)

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
JUNO DE TABELAS
Ou ainda:
Q21. Selecione a matrcula e o nome dos empregados que trabalham no
departamento GEO.
SELECT e.matrcula, e.nome
FROM Empregado e, Departamento d
WHERE d.coddep = GEO AND (e.dept = d. Coddep)

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
JUNO DE TABELAS
Q22. Para cada projeto desenvolvido no CEFET-PB, liste o cdigo do
projeto, o departamento que controla o projeto e o nome do gerente com
endereo e salrio.
SELECT p.codproj, d.nome, e.nome, e.endereco, e.salario
FROM Projeto p, Departamento d, Empregado e
WHERE (p.depart = d.coddep) AND
(d.gerente = e.matricula) AND
(p.local = CEFET-PB)
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
JUNO DE TABELAS
Q23.Para cada projeto que possui mais de 2 empregados trabalhando,
obter o cdigo do projeto, nome do projeto e nmero de empregados que
trabalha neste projeto.
SELECT p.codproj, p.nome, COUNT(*)
FROM Projeto p, Alocacao a
WHERE p.codproj = a.codigop
GROUP BY codigop, nome
HAVING COUNT(*) > 2
OBS: O agrupamento e as funes so aplicadas aps a juno.
A seqncia de avaliao de uma consulta aplicada primeiramente a
clusula WHERE e depois GROUP BY HAVING.
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
JUNO DE TABELAS
Pode-se tambm inserir vrias tuplas numa relao a partir da juno
de tabelas.
CREATE TABLE DEPTO_INFO ( nome character(15), numemp integer, totsal real)
INSERT INTODEPTO_INFO (nome, numemp, totsal)
SELECT d.nome, COUNT(*), SUM(salario)
FROM Departamento d, Empregado e
WHERE d.coddep = e.depto
GROUP BY d.nome

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
JUNO DE TABELAS
SQL implementa a operao UNIO da lgebra relacional. requerido
que as relaes sejam compatveis de unio.
SELECT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE condio ]
UNION
SELECT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE condio ]
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Uma subconsulta ou subquery uma consulta cujo resultado utilizado
por uma outra consulta mais externa, de forma encadeada e contida no
mesmo comando SELECT.
Deve estar entre parnteses e avaliada apenas uma vez (exceto em
subconsultas correlacionadas).
A consulta ou query mais externa depende da avaliao da subconsulta
uma vez que em um comando SELECT, a subconsulta avaliada primeiro
e a consulta mais externa depende da avaliao da subconsulta.
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
JUNO DE TABELAS
Q24. Liste todos os nomes de projetos que envolvem o empregado
Silvacomo trabalhador ou como gerente do departamento que controla
o projeto.

SELECT p.nome
FROM Projeto p, Departamento d, Empregado e
WHERE d.coddep = p.depart and d.gerente = e.matricula and e,nome = Sil
UNION
(SELECT p.nome
FROM Projeto p, Alocao a, Empregado e
WHERE p.codproj = a.codproj and e.matricula = a.matricula and
e.nome = Silva)
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Sitaxe:
SELECT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE ( subconsulta) ]
Q25. Obter o nome dos empregados que tenham 2 ou mais dependentes.
SELECT e.nome
FROM empregado e
WHERE (SELECT COUNT(*)
FROM Dependente d
WHERE (e.matricula = d.matricula) >= 2)
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
As subconsultas sofrem variaes usando diferentes operadores
( IN, EXISTS, ANY e ALL e suas respectivas negaes).
Sintaxe:
SELECT DISTINCT lista-de-seleo
FROM tabela [ , tabela, ... ]
[ WHERE atributo [NOT] OPERADORES ( subconsulta ) ]

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Substituindo o comando UNION, por exemplo
SELECT DISTINCT nome
FROM Projeto
WHERE codigop IN (SELECT codigop
FROM Projeto p, Departamento d, Empregado e
WHERE p.depart = d.coddep and
d.gerente = e.matricula and e.nome = Silva)
OR
codigop IN (SELECT codigop
FROM Alocao a, Empregado e
WHERE a.matric = e.matricula and e.nome = Silva)
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Q26.D um aumento de 10% a todos os empregados exceto aos que
trabalham no departamento de Pesquisa.
UPDATE Empregado
SET salario = salario * 1.1
WHERE depto NOT IN ( SELECT coddep
FROM Departamento
WHERE nome = Pequisa)

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Para verificar se o resultado de uma subconsulta vazio ou no, usa-se
a funo EXISTS ou NOT EXISTS.
Q27. Recupere o nome de cada empregado que tem um dependente
com o mesmo nome e mesmo sexo.
SELECT e.nome
FROM empregado e
WHERE EXISTS (SELECT *
FROM dependente
WHERE e.matricula = matricula AND
e.nome = nome AND
e.sexo = sexo)
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Q28. Recupere os nomes dos empregados que no tm dependentes.
SELECT e.nome
FROM empregado e
WHERE NOT EXISTS (SELECT *
FROM dependente d
WHERE e.matricula = d.matricula)

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Os operadores ALL e ANY so usados para comparar/testar a subconsulta.
A > ALL (subconsulta)
A condio verdadeira se A for maior que TODOS os elementos do
resultado da subconsulta.
A > ANY (subconsulta ou consulta)
A condio verdadeira se A for maior que ALGUM dos elementos
do resultado da subconsulta.
Em conjunto com estes operadores pode-se usar >, >=, <, <=, = ou ! =
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Q29. Selecionar os empregados que ganham o maior salrio da empresa.
SELECT e.nome
FROM Empregado e
WHERE e.salario >= ALL ( SELECT e.salario
FROM Empregado e )

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


MANIPULANDO MAIS DE UMA TABELA
SUBCONSULTAS
Q30. Exibir o nome, o tipo e o preo de venda dos produtos que no
sejam dos tipos 3, 4 ou 5 e que tenham preo de venda maior que
pelo menos o preo de um desses produtos.
SELECT nome, tipo, preo
FROM produto
WHERE tipo NOT IN (3,4,5) AND preo > ANY (SELECT preo
FROM produto
WHERE tipo IN (3,4,5))

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


VALORES NULOS
Os valores nulos podem ser interpretados de vrias formas:
o atributo no se aplica a tupla;
o valor do atributo para esta tupla desconhecido;
o valor conhecido, mas est ausente (no foi posto ainda);
Alguns problemas so identificados de acordo com o seu uso:
problemas com junes (informaes so perdidas);
problemas com funes tipo SUM, AVG, etc.

CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Manipulao de Dados SQL DML


VALORES NULOS
Exemplo:
Empregado
MATRCULA

Nome

Salrio

Depto

100

Jos

1000

D1

200

Maria

860

D2

400

Andr

2000

NULL

500

Ana

1500

NULL

Obter uma lista com o nome e o nome do departamento de todos os


empregados da empresa.
Neste caso os empregados Andr e Ana no apareceriam nesta lista,
pois esto com o atributo Depto nulo. H perda de informaes!!
CEFET PB Centro Federal de Educao Tecnolgica da Paraba

Potrebbero piacerti anche