Top Banner
Exercícios SQL Marilde Santos
93

Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Apr 17, 2015

Download

Documents

Internet User
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios SQL

Marilde Santos

Page 2: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Sumário

• Revisão SQL– Conjunto de slides

disponibilizado por Juliano Neves.

• Restrições, Datas e mais SQL• Exercícios Laboratório de Banco de Dados

– Controle acadêmico– Controle bancário

• Dicas

Page 3: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

SQLStructured Query Language

Juliano Brito da Justa Neves

PESCD – Programa de Estágio Supervisionado de Capacitação Docente

2003

Page 4: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

SQL• Linguagem padrão para SGBDs relacionais

– Motivo pelo grande sucesso dos SGBDs relacionais

• Linguagem de Definição de Dados (DDL)

• Linguagem de Manipulação de Dados (DML)

Page 5: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Esquema• Agrupar tabelas e outros elementos (constraints,

views...) que pertencem a mesma aplicação de banco de dados

CREATE SCHEMA <esquema> AUTHORIZATION <autorização> ;

Page 6: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Esquema

• Esquemas no Oracle– Criar várias tabelas e views e dar permissões

em uma única transação.

CREATE SCHEMA AUTHORIZATION <esquema> [create_table, create_view, grant]+ ;

Page 7: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Esquema

• Esquemas no Oracle– O CREATE SCHEMA não cria realmente um

esquema. O esquema é automaticamente criado quando um usuário é criado.

• Vamos utilizar um dos usuários previamente criados.

Page 8: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Oracle

• Conexão com o SGBD Oracle– Putty– SSH: falcon.comp.ufscar.br– Login: Pessoal de cada um– No prompt do linux:

• sqlplus

• Login: compX X número de 1 a 20

• Senha: igual ao login

Page 9: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Estudo de CasoEQUIPE(#Codigo_Equipe,Nome_Equipe,Cidade,Estado)

JOGADOR(#Codigo_Jogador,Nome_Jogador,Posição_Jog,#Codigo_Equipe)

PARTIDA(#Codigo_Partida,Cidade,Estado,Nome_Juiz,Data)

JOGA(#Codigo_Jogador,#Codigo_Partida,Numero_Gols)

Page 10: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

TabelasCREATE TABLE [esquema.]tabela (coluna1 tipo_dado [DEFAULT expr]

[constraint_coluna],...colunaN tipo_dado [DEFAULT expr]

[constraint_coluna],[constraint_tabela]);

Page 11: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Tipos de Dados

• Integer, Float, Real...• Char (n)• Varchar2 (n)• Clob• Long• Blob• Raw e Long Raw• Number (p,e)• Date• Timestamp• Interval Year (p) to month• Interval Day (dp) to second (sp)

Page 12: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Constraints

• Grupo 1– NOT NULL– Unique

• Grupo 2– Check– Primary key– Foreign key

CONSTRAINT nome tipo exprconstraint cod Primary Keyconstraint fcod Foreign Key references tabela(coluna)constraint chk Check (uf in (‘SP’, ‘MG’))

Page 13: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exemplo

EQUIPE(#Codigo_Equipe,Nome_Equipe,Cidade,Estado)

CREATE TABLE equipe (codigo_equipe INTEGER constraint equipe_pk Primary Key,nome_equipe Varchar2(20) NOT NULL,cidade Varchar2(10),estado Varchar2(10)

);

Page 14: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

ExemploJOGADOR

(#Codigo_Jogador,Nome_Jogador,Posição_Jog,#Codigo_Equipe)

Codigo_jogador INTEGER

Nome_jogador Varchar2(20)

Posicao_jog Varchar2(15)

Codigo_Time INTEGER

Page 15: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

ExemploJOGADOR(#Codigo_Jogador,Nome_Jogador,Posição_Jog,Codigo_equipe)

CREATE TABLE jogador (codigo_jogador INTEGER constraint jogador_pk Primary Key,nome_jogador Varchar2(20) NOT NULL,posicao_jog Varchar2(15),codigo_equipe INTEGER,

constraint jogador_fk Foreign Key (codigo_equipe) references equipe(codigo_equipe)

);

Page 16: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

ExemploPARTIDA

(#Codigo_Partida,Cidade,Estado,Nome_Juiz,Data)

Codigo_partida INTEGER

cidade Varchar2(10)

estado Varchar2(10)

nome_juiz Varchar2(20)

data date

Page 17: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

ExemploPARTIDA(#Codigo_Partida,Cidade,Estado,Nome_Juiz,Data)

CREATE TABLE partida (codigo_partida INTEGER constraint partida_pk Primary Key,cidade Varchar2(10) NOT NULL,estado Varchar2(10),nome_juiz Varchar2(20) NOT NULL,data Date

);

Page 18: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Mais Constraints!

• ON DELETE– SET NULL– CASCADE– SET DEFAULT

• ON UPDATE– SET NULL– CASCADE– SET DEFAULT

Page 19: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

ExemploJOGA(#Codigo_Jogador,#Codigo_Partida,Numero_Gols)

codigo_jogador IntegerSe apagar jogador, apaga.

codigo_partida IntegerSe apagar partida, apaga.

numero_gols Integer

Page 20: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

ExemploJOGA(#Codigo_Jogador,#Codigo_Partida,Numero_Gols)

CREATE TABLE joga (codigo_jogador integer,constraint joga1_fk foreign key (codigo_jogador)

references jogador(codigo_jogador)on delete cascade,

codigo_partida integer,constraint joga2_fk foreign key (codigo_partida)

references partida(codigo_partida)on delete cascade,

numero_gols integer);

Page 21: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Alteração de tabelas

• Criar, alterar ou eliminar colunas

• Renomear a tabela

• Criar ou eliminar constraints

• Habilitar ou desabilitar constraints

Page 22: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Alteração de TabelasALTER TABLE [esquema.]tabela[add coluna tipo_dado [DEFAULT expr] [constraint_coluna] ]

[modify coluna tipo_dado [DEFAULT expr] [constraint_coluna] ]

[add constraint_coluna/constraint_tabela][drop constraint_coluna/constraint_tabela [cascade]]

[enable constraint_coluna/constraint_tabela][disable constraint_coluna/constraint_tabela] ;

Page 23: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exemplo

• Alterar a tabela joga para que o valor default de Numero_gols seja 0;

ALTER TABLE joga MODIFY numero_gols INTEGER DEFAULT ‘0’;

• Adicionar uma Primary Key em joga

ALTER TABLE joga ADD constraint joga_pk Primary Key (codigo_jogador, codigo_partida);

Page 24: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Apagando Tabelas

DROP TABLE [esquema.]tabela [CASDADE CONSTRAINTS];

• CASCADE CONSTRAINTS elimina todas as restrições presentes em outras tabelas que façam referência à tabela que está sendo eliminada.

Page 25: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Índices

• Criar

CREATE [UNIQUE] INDEX índice ON tabela (coluna [ASC | DESC]);

• UNIQUE Índice não aceita valores repetidos.• É criado um índice UNIQUE sempre que uma

Primary Key é criada.• Apagando o índice

DROP INDEX índice;

Page 26: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exemplo

select index_name from user_indexes;

CREATE UNIQUE INDEX my_index ON partida (nome_juiz);

select index_name from user_indexes;

Page 27: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Linguagem de manipulação de dados

• Inserindo dados

INSERT INTO [esquema.]tabela

(coluna1, coluna2, ... colunaN)

VALUES

(valor1, valor2 ... valorN);

Page 28: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Inserindo dados

• Se for inserir na mesma ordem da definição da tabela:

INSERT INTO [esquema.]tabela VALUES (valor1, ... valorN);

• Inserção em determinados camposINSERT INTO [esquema.]tabela (colunaX, colunaY) VALUES (valorX, valorY);

Page 29: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exemplo

• Criar o time Saravá Saci Soccer

INSERT INTO equipe (codigo_equipe,nome_equipe,cidade,estado) VALUES (1,’SSS’,’São Carlos’, ‘São Paulo’);

Opção

INSERT INTO equipe VALUES (1, ‘SSS’, ‘São Carlos’, ‘São Paulo’);

Page 30: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exemplo

• Inserir time “Tiradentes”, de Brasília, DFINSERT INTO equipe VALUES (2,’Tiradentes’,’Brasilia’,’DF’);

• Inserir time “Enc97FC”

INSERT INTO equipe (codigo_equipe, nome_equipe) VALUES (3,’Enc97FC’);

Page 31: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Inserindo dados

• Cuidados com as restrições (constraints)!INSERT INTO JOGADOR VALUES (1,’Juliano’,’goleiro’,4);

INSERT INTO equipe (codigo_equipe, nome_equipe) VALUES (4, ‘Selecao’);

INSERT INTO JOGADOR VALUES (1,’Juliano’,’goleiro’,4);

Page 32: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Atualizando dados

UPDATE tabela SET coluna = valor [, coluna = valor...] [WHERE condição];

• Exemplo: Juliano mudou para atacante!

UPDATE jogador SET posicao_jog = ‘atacante’ where codigo_jogador = 1;

Page 33: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Apagando dados

DELETE [FROM] tabela

[WHERE condição];• Exemplo: Apagar Enc97FC

DELETE FROM equipe WHERE codigo_equipe = 3;

Page 34: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Apagando dados

• Cuidados com as restrições (constraints)!

DELETE FROM equipe WHERE codigo_equipe = 4; FALHA!

DELETE jogador;

DELETE FROM equipe WHERE codigo_equipe = 4; OK!

Page 35: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultando dados: SELECT

• Até o final da aula!• Álgebra relacional

• Endereço do script

http://www.dc.ufscar.br/~juliano

• Execução do script

sqlplus> @ sql.txt

Page 36: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Selecionando dados

• Forma básica:

SELECT <lista de atributos>

FROM <lista de tabelas>

WHERE <condição>

Page 37: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Selecionando dados

SELECT [DISTINCT] {*, colunas

[AS alias], expressões, funções..}

FROM {tabelas [AS alias]}

[WHERE condição]

[GROUP BY colunas]

[HAVING condição]

[ORDER BY colunas [ASC | DESC]];

Page 38: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Álgebra Relacional

• π(*) jogador

SELECT DISTINCT * FROM jogador;

• σ(posicao_jog = atacante) jogador

SELECT * FROM jogador WHERE posicao_jog = ‘Atacante’;

Page 39: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Álgebra Relacional

• πnome_jogador(σ(posicao_jog = Atacante)Jogador)SELECT DISTINCT nome_jogador FROM jogador where posicao_jog = ‘Atacante’;

• ρNome(πnome_jogador(σ(posicao_jog = Atacante)Jogador))SELECT DISTINCT nome_jogador AS Nome FROM jogador where posicao_jog = ‘Atacante’;

Page 40: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

União

• R1 πnome_jogador(σ(posicao_jog = Atacante)Jogador) • R2 πnome_jogador(σ(codigo_equipe = 2)Jogador)• Resultado R1 U R2

SELECT DISTINCT nome_jogador FROM jogador WHERE posicao_jog = ‘Atacante’

UNIONSELECT DISTINCT nome_jogador FROM jogador WHERE codigo_equipe = 2;

Page 41: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Interseção

• R1 πnome_jogador(σ(posicao_jog = Atacante)Jogador) • R2 πnome_jogador(σ(codigo_equipe = 2)Jogador)• Resultado R1 ∩ R2

SELECT DISTINCT nome_jogador FROM jogador WHERE posicao_jog = ‘Atacante’

INTERSECTSELECT DISTINCT nome_jogador FROM jogador WHERE codigo_equipe = 2;

Page 42: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Subtração

• R1 πnome_jogador(σ(posicao_jog = Atacante)Jogador) • R2 πnome_jogador(σ(codigo_equipe = 2)Jogador)• Resultado R1 – R2

SELECT DISTINCT nome_jogador FROM jogador WHERE posicao_jog = ‘Atacante’

MINUSSELECT DISTINCT nome_jogador FROM jogador WHERE codigo_equipe = 2;

Page 43: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Produto Cartesiano

• R1 πnome_jogador(π(*) Jogador)

• R2 πnome_equipe(π(*) Equipe)

• Resultado R1 × R2

SELECT DISTINCT nome_jogador, nome_equipe

FROM jogador, equipe;

Page 44: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Join (Equijoin)

• R1 π(*) Jogador• R2 π(*) Equipe• Resultado R1 |x|equipe.codigo_equipe = jogador.codigo_equipe R2

SELECT * FROM jogador, equipeWHERE equipe.codigo_equipe = jogador.codigo_equipe;

Page 45: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Theta Join

• R1 π(*) Jogador• R2 π(*) Equipe• Resultado R1 |x|equipe.codigo_equipe > jogador.codigo_equipe R2

SELECT * FROM jogador, equipeWHERE equipe.codigo_equipe > jogador.codigo_jogador;

Page 46: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Natural Join

• R1 πnome_jogador, codigo_equipe(π(*) Jogador) • R2 πnome_equipe, codigo_equipe(π(*) Equipe)• Resultado πnome_jogador,nome_equipe( R1 *codigo_equipe R2)

SELECT DISTINCT nome_jogador, nome_equipe, codigo_equipe

FROM jogador, equipeWHERE equipe.codigo_equipe = jogador.codigo_equipe;

Page 47: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Outer Join ]x|

• R1 πnome_jogador, codigo_equipe(π(*) Jogador) • R2 πnome_equipe, codigo_equipe(π(*) Equipe)• Resultado πnome_jogador,nome_equipe( R1 ]x|

equipe.codigo_equipe = jogador.codigo_equipe R2)

SELECT nome_jogador, nome_equipe FROM jogador, equipe

WHERE equipe.codigo_equipe (+) = jogador.codigo_jogador;

Page 48: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Divisão

• Todos os jogadores que fizeram gol em partidas onde Fabio Simplicio fez gol

Fabio σnome_jogador = ‘Fabio Simplicio’(Jogador)

F_Par πcodigo_partida(Joga |x|joga.codigo_jogador =

Fabio.codigo_jogador Fabio)

Jog_Par πcodigo_jogador,codigo_partida(Joga)

Result Jog_Par F_Par

Page 49: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Divisão

SELECT * FROM jogador WHERE nome_jogador = ‘Fabio Simplicio’;

SELECT DISTINCT codigo_partida FROM joga WHERE codigo_jogador = 51;

SELECT DISTINCT codigo_jogador, codigo_partida FROM joga;

SELECT DISTINCT codigo_jogador FROM joga WHERE (codigo_partida = 1 OR codigo_partida = 5) AND (codigo_jogador != 51);

Page 50: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Outras consultas

• Cobrimos todos os operadores da álgebra relacional.

• Veremos agora outros tipos de consultas comuns em SGBDs relacionais.

Page 51: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultas úteis

• Várias condições

SELECT nome_jogador FROM Jogador WHERE posicao_jog = ‘Goleiro’ AND codigo_equipe != 2;

SELECT nome_jogador FROM Jogador WHERE posicao_jog = ‘Goleiro’ OR posicao_jog = ‘Atacante’;

Page 52: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultas úteis

• DISTINCT

SELECT DISTINCT posicao_jog FROM jogador;

• LIKE

SELECT nome_jogador FROM jogador WHERE nome_jogador LIKE ‘%Luis%’;

Page 53: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultas úteis

• Operadores MatemáticosSELECT codigo_partida, numero_gols * 10 FROM joga;

• BETWEENSELECT codigo_jogador, nome_jogador FROM jogador WHERE codigo_jogador BETWEEN 10 AND 20;

Page 54: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultas úteis

• INSELECT nome_jogador FROM jogador WHERE codigo_jogador IN (SELECT codigo_jogador FROM joga WHERE numero_gols = 2);

• ALLSELECT codigo_jogador FROM joga WHERE numero_gols > ALL (SELECT numero_gols FROM joga WHERE codigo_partida = 2);

Page 55: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultas úteis

• EXISTSSELECT nome_jogador FROM jogador WHERE EXISTS (SELECT * FROM joga WHERE jogador.codigo_jogador = joga.codigo_jogador);

• NOTSELECT nome_jogador FROM jogador WHERE NOT EXISTS (SELECT * FROM joga WHERE jogador.codigo_jogador = joga.codigo_jogador);

Page 56: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultas úteis

• SUM, MAX, MIN, AVGSELECT SUM(numero_gols), MAX(numero_gols), MIN(numero_gols), AVG(numero_gols) FROM joga;

• COUNTSELECT COUNT(*)FROM jogador WHERE codigo_equipe = 1;

Page 57: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultas úteis

• GROUP BY

SELECT COUNT(*), codigo_equipe FROM jogador GROUP BY codigo_equipe;

• HAVING

SELECT COUNT(*), codigo_equipe FROM jogador GROUP BY codigo_equipe HAVING COUNT(*) > 30;

Page 58: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Consultas úteis

• IS [NOT] NULL

SELECT * FROM partida WHERE nome_juiz IS NULL;

SELECT * FROM partida WHERE nome_juiz IS NOT NULL;

Page 59: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)• Selecione os nomes das equipes que fizeram

gols nos jogos apitados por Silvia

πnome_equipe(σ(nome_juiz = ‘Silvia’)(

(((Partida |x|partida.codigo_partida joga.codigo_partidaJoga)

|x|codigo_jogador = jogador.codigo_jogadorJogador)

|x|codigo_equipe = equipe.codigo_equipeEquipe))

Page 60: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)

• Selecione os nomes das equipes que fizeram gols nos jogos apitados por Silvia

SELECT DISTINCT nome_equipeFROM equipe e, jogador j, partida p, jogaWHERE p.nome_juiz ='Silvia'AND p.codigo_partida = joga.codigo_partidaAND joga.codigo_jogador = j.codigo_jogadorAND j.codigo_equipe = e.codigo_equipe;

Page 61: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)

• Selecione os nomes das equipes que fizeram gols nos jogos apitados por Silvia

NOME_EQUIPE

--------------------

Sao Paulo

Page 62: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)

• Daqueles jogadores que marcaram gols, selecione o nome daqueles que não marcaram gols em Santos

SELECT DISTINCT nome_jogador FROM jogador j, jogaWHERE joga.codigo_jogador = j.codigo_jogadorAND j.codigo_jogador NOT IN(SELECT codigo_jogador FROM joga, partida p WHERE p.cidade = ‘Santos’ AND joga.codigo_partida = p.codigo_partida);

Page 63: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)

• Daqueles jogadores que marcaram gols, selecione o nome daqueles que não marcaram gols em Santos

NOME_JOGADOR--------------------AndersonCarlos AlbertoDiegoFabio SimplicioLeandro AmaralNenemWilliam

7 linhas selecionadas.

Page 64: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)

• Quantos gols cada equipe já fez?SELECT nome_equipe, SUM(numero_gols)

FROM equipe e, joga, jogador jWHERE e.codigo_equipe = j.codigo_equipe

AND j.codigo_jogador = joga.codigo_jogador

GROUP BY nome_equipe;

Page 65: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)

• Quantos gols cada equipe já fez?

NOME_EQUIPE SUM(NUMERO_GOLS)-------------------- ----------------Corinthians 2Santos 6Sao Paulo 7

Page 66: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)

• Quem são, para que time jogam, os jogadores que fizeram gols em mais de um jogo?

SELECT nome_jogador, nome_equipeFROM jogador j, equipe eWHERE j.codigo_equipe = e.codigo_equipe

AND (SELECT COUNT(*) FROM joga WHERE j.codigo_jogador = joga.codigo_jogador) > 1;

Page 67: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercícios (desafios)

• Quem são, para que time jogam, os jogadores que fizeram gols em mais de um jogo?

NOME_JOGADOR NOME_EQUIPE

-------------------- --------------------

Fabio Simplicio Sao Paulo

Luis Fabiano Sao Paulo

Page 68: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Constraints

Uma restrição representa um mecanismo capaz de implementar controles que garantam a consitência dos dados (integridade de dados e referencial).

– Pode ser definido em nível de coluna ou em nível de tabela

– Alternativa: utilização de triggers que apresentam desempenho menor mas oferecem toda a flexibilidade de uma linguagem de programação (PL/SQL).

Page 69: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Tabela de constraints

null Informa se o campo em questão pode receber valores nulos. Caso não possa deve ser precedido pela palavra not.

unique Indica que os valores na coluna não podem ser repeidos. Cria um índice automaticamente.

check Determina uma regra de validação (especifica que valores a coluna pode assumir).

Primary key Indica a chave primária da relação. Cria um índice automaticamente.

Foreign key Identifica uma chave estrangeira da tabela. Implementada pela cláusula references.

Page 70: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Check

• Pode-se criar regra de validação (constraint check)Create table aluno

(….

uf char(2) default ‘RJ’ constraint alunos_uf_ch

check (uf in (‘SP’, ‘MG’, ‘RJ’, ‘ES’))

);

Page 71: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Foreign Key• Ao definir chaves estrangeiras (foreign key)

– A cláusula references informa que a tabela corrente estará relacionada com a mencionada na forma de 1 (mencionada) para N (corrente).

– O campo referenciado deve ser chave primária ou possuir restrição unique e ser do mesmo tipo do campo corrente.

– Note a impossibilidade da criação de um relacionamento N:M.

– O relacionamento 1:1 deve ser resolvido por programação (Triggers).

Page 72: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Alter table

• Para alterar a estrutura de uma tabela:– Criar, alterar ou eliminar colunas– Renomear a tablea– Criar ou eliminar constraints– Habilitar ou desabilitar constraints

Page 73: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Sintaxe Alter table

Alter table [schema.]tabela[add (coluna tipo_dado [default expressão]

[constraint_coluna, …)][modify (coluna tipo_dado [default expressão]

[constraint_coluna , …)][rename to novo_nome_tabela][add constraint_coluna/constraint_tabela][drop constraint_coluna/constraint_tabela [cascade]][enable constraint_coluna/constraint_tabela][disable constraint_coluna/constraint_tabela];

Page 74: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Insert into

• O bd pode ser alimentado via aplicativos produzidos por ferramentas front-end, tais como: Oracle Forms, MS-Visual Basic ou Borland Delphi.

• Via SQL:Insert into [schema.]tabela Coluna1, coluna2, colunaN

Values (valor1, valor2, valorN);

• Para os dados serem definitivamente gravados logo após alguns comandos insert emita o comando commit;

Page 75: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Select

Select [distinct] {*, colunas [alias], expressões, funções,…}

From {tabelas [alias],}

[Where condição]

[group by colunas]

[having condição]

[order by colunas [asc|desc]];

Page 76: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Funções de Datas• Add_months(data,n) adiciona n meses à data• Months_between(data1, data2) número de meses entre

2 datas• Next_day(data, ‘dia_semana’) uma data, após a data

especificada, em que o dia da semana seja igual ao dia_semana.

• Last_day(data) data do último dia do mês em que se encontra a variável data.

• Sysdate a data corrente do servidor de BD• Current_date data corrente da sessão.• Extract permite extrair um campo de uma data (ano,

mês, hora,etc)

Page 77: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Funções de conversão de dados

• To_char(número ou data, ‘formato’)– Converte um número ou data em uma cadeia de

caracteres do tipo varchar2 com o formato definido pela variável formato

• To_date(char, [‘formato’])– Converte uma cadeia de caracteres,

especificando uma data, no tipo date, de acordo com a variável formato. (default: DD-MM-AA)

Page 78: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Funções de conversão de dados

Select to_char(sysdate, ‘dd/mm/yy hh24:mi’) “Hoje”, to_char(sysdate+28/24, ‘dd/mmyy hh24:mi’) “Amanhã + 4 horas”

Hoje Amanhã + 4 horas

25/03/04 16:23 26/03/04 20:23

Page 79: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Funções de conversão de dados

Select * from instrutor where admissao > to_date(’31-1-1998’, ‘dd/mm/yyyy’);

Page 80: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Dicionário de Dados

Consiste em um conjunto de tabelas e views que proporcionam um acesso apenas de leitura a todos os usuários de um banco de dados.

• Prefixo user_ – Contém tosdos os objetos dos quais o usuário é

proprietário. Ex.: user_objects, user_tables, user_constraints, user_tab_columns.

• Prefixo all_

– Objetos públicos. Ex.: all_objects, all_tables, all_constraints, all_tab_columns.

Page 81: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Dicionário de Dados

• Dictionary (dict) – Mostra todas as tabelas e visões do dicionário

de dados

• Tab, cat– Exibem as tabelas do usuário corrente.

• Col– Exibe as colunas das tabelas do usuário

corrente

Page 82: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Dicas• Pode-se criar em editor externo arquivos para

criação, alimentação e consulta em tabelas (scripts)– Salvar em arquivos .sql– Para ativar o arquivo gerado, utilize o comando start ou

@.– Também é possível abrir o arquivo utilizando o

SQLPlus Worksheet usando o comando Arquivo e Abrir.

• Todo comando SQL deve ser finalizado por ponto e vírgula (;)

Page 83: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Dicas• É recomendável criar primeiro as tabelas sem

constraints e depois incluí-los via alter table.• Para comprovar a criação de tabelas:

select * from tab;select * from cat;

• Para verificar como é a tabela (describe):desc <nome da tabela>

• Para listar todas as constraints criadas pelo usuário corrente:select constraint_name from user_constraints;

• Para excluir tabelas: drop table [schema.]tabela [cascade constraints]

Page 84: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Dicas O oracle possui uma tabela, de uso comum,

denominada DUAL, que contém uma única coluna dummy, e uma única linha, com o valor “X”. Esta tabela é usada quando se deseja retornar um valor em uma única ocorrência, como o de uma constante ou expressão que nãos eja derivada de uma tabela de dados do usuário.

select sysdate Hoje, next_day(sysdate, ‘domingo’) Domingo from dual;

Hoje Domingo 26/03/04 28/03/04

Page 85: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Controle Acadêmico

Page 86: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Esquema Relacional

• Aluno(RA, cpf, nro_rg, est_rg, Prenome, Sobrenome, telefone, endereço, UF, data_matricula)

• Histórico(cod_turma, RA, nota_final)• Turma(cod_turma, sala, cod_instrutor, cód_curso)• Instrutor(código instrutor, cpf, nro_rg, est_rg,

Prenome, Sobrenome, fone, admissão)• Curso(cód_curso, nome, carga_horaria, preco)• PreRequisito(cod_curso, pré_requisito)

Page 87: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

ExemploAluno(RA, cpf, nro_rg, est_rg, Prenome, sobrenome, telefone,

endereço, UF, data_matricula)

create table aluno (RA number(3) constraint instr_pk primary key, cpf varchar2(11) constraint instr_cpf_nul not null, nro_rg varchar2(10) constraint inst_Nrg_nul not null, est_rg varchar2(2) constraint inst_Estrg_nul not null, prenome varchar2(15) constraint inst_pnome_nul not null, sobrenome varchar2(15) constraint inst_snome_nul not nul, fone varchar2(10), endereco varchar2(40), UF varchar2(2),

data_matricula date default sysdate);

Page 88: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Exercício

• Fazer scripts com:– Criação de todas as tabelas– Alimentação da base de dados

• Escrever, em português, consultas úteis a este sistema– Resolver tais consultas usando SQL (de

preferência fazer scripts)

Page 89: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Controle Bancário

Page 90: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

cliente

conta

possui

pertence

agência

poupança

corrente

cidadeem

1

N

N 1

(T,D

)

CPF nome end

Sobre rua nro

nro

saldo

N

M

cod

nome

cod

nomeestado

aniversário

Limite crédito

titular

Pré

CEP

Page 91: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

corr

enti

sta

cliente

conta

possui

pertence

agência

poupança

corrente

cidadeem

1

N

N 1

(T,D

)

CPF nome end

nro

saldo

N

M

cod

nome

cod

nomeestado

aniversário

Limite crédito

movimentoefetua N1

CodTrans tipo valor

data

hora

titular

Sobre rua nroPré

CEP

descrição

Page 92: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Tarefas

• Efetuar o mapeamento para um esquema relacional

• Criar tabelas no Oracle

• Alimentar o banco de dados

• Listar um conjunto de consultas interessantes para esse sistema

• Executar tais consultas no banco de dados

Page 93: Exercícios SQL Marilde Santos. Sumário Revisão SQL –Conjunto de slides disponibilizado por Juliano Neves.Conjunto de slides disponibilizado por Juliano.

Tarefas

• Efetuar as seguintes consultas nas relações:– Listar as contas corrente conjuntas e seus

respectivos correntistas onde o titular da conta tem o sobrenome “Silva”

– Listar a movimentação (descrição, tipo, valor, data) da(s) conta(s) corrente cujo titular é “André Silva” no período entre 01/03/2004 e 26/03/2004.