Você está na página 1de 30

1

EPS 7001 Informtica para


Engenharia de Produo

Professor: Enzo Morosini Frazzon

Aula 05
Comandos SQL
SQL Structured Query Language
Linguagem de Consulta Estruturada
EPS 7001 Prof. Enzo Morosini Frazzon 2

Sumrio
Interbase 6.5
Comandos SQL
SELECT
UPDATE
INSERT
DELETE
Exerccio
EPS 7001 Prof. Enzo Morosini Frazzon 3

Interbase 6.5
Registrar o Servidor local
Usurio: SYSDBA
Senha: masterkey
Criar base de dados

OBS: Em caso de dificuldade ver passo a passo


no MOODLE EPS 7001
EPS 7001 Prof. Enzo Morosini Frazzon 4

Principais Comandos
SELECT: Resgatar e tratar dados existentes na
Base de Dados
Lidam com Registros
UPDATE: alterar registros
INSERT: inserir registros
DELETE: apagar registros
Lidam com Estruturas
CREATE: criar entidades (tabelas, relacionamentos)
ALTER: alterar estruturas da base de dados
DROP: apagar estruturas (e registros)
EPS 7001 Prof. Enzo Morosini Frazzon

SELECT
Objetivo: resgatar e tratar dados existentes na Base de Dados

Formato:

SELECT <campos>
FROM <tabelas>
WHERE <condio>
GROUP BY <campos agrupados> *
ORDER BY <campos de ordenao> *

* Opcional
EPS 7001 Prof. Enzo Morosini Frazzon 6

SELECT
A instruo SELECT no muda os dados no
banco de dados;
GROUP BY: Agrupa os registros, sendo que os
valores nulos tambm so agrupados, e no
omitidos;
ORDER BY: Ordena os registros, segue o
padro de ordem ascendente (A a Z, 0 a 9);
EPS 7001 Prof. Enzo Morosini Frazzon

SELECT
Selecionar veculos da marca HONDA, ordenados por ano

SELECT V.Placa, V.Ano, M.Descricao, M.Marca


FROM Veiculo V, Modelo M
WHERE M.Marca = 'HONDA' AND M.CodModelo = V.CodModelo
ORDER BY Ano
EPS 7001 Prof. Enzo Morosini Frazzon

SELECT
Selecionar os veculos que esto alugados

SELECT V.Placa, V.Ano, M.Descricao


FROM Locacao L, Veiculo V, Modelo M
WHERE FIM IS NULL AND
L.Placa = V.Placa AND
V.CodModelo = M.COdModelo
EPS 7001 Prof. Enzo Morosini Frazzon

SELECT
Selecionar nmero total de locaes, total de ganho e Ganho
mdio por veculo

SELECT Placa, Count(*),


SUM(CustoDia * (Fim - Inicio)) AS TOTAL,
AVG(CustoDia * (Fim - Inicio)) AS Media
FROM Locacao
GROUP BY Placa
ORDER BY Media
EPS 7001 Prof. Enzo Morosini Frazzon

SELECT
Selecionar veculos disponveis para locao

SELECT *
FROM Veiculo
WHERE Not(Placa IN (SELECT Placa
FROM Locacao
WHERE FIM IS Null))
ORDER BY PLACA
EPS 7001 Prof. Enzo Morosini Frazzon

SELECT
Selecionar receita produzida por cada funcionario

SELECT L.Matricula, F.Nome, SUM(CustoDia * (Fim-Inicio)) AS


Total
FROM Locacao L, Funcionario F
WHERE L.Matricula = F.Matricula
GROUP BY L.Matricula, F.Nome
ORDER BY Nome
EPS 7001 Prof. Enzo Morosini Frazzon

SELECT

Selecionar nome de clientes que contenham a letra R

SELECT *
FROM Cliente
WHERE Nome LIKE '%R%'
EPS 7001 Prof. Enzo Morosini Frazzon

SELECT
Selecione os dados dos veculos locados pelo 'MARQUES'

SELECT C.*, V.*, M.*


FROM Cliente C, Locacao L, Veiculo V, Modelo M
WHERE Nome LIKE '%MARQUES%' AND
C.CPF = L.CPF AND
L.Placa = V.Placa AND
V.CodModelo = M.CodModelo
EPS 7001 Prof. Enzo Morosini Frazzon

CREATE
Objetivo: criar entidade (por exemplo: tabelas, relacionamentos)

Formato:
CREATE TABLE <nomedatabela>
(
<campo1><tipodedado>,
<campo2><tipodedado>, ...,
PRIMARY KEY (<campochave>)
)
EPS 7001 Prof. Enzo Morosini Frazzon

CREATE
Criar tabela Cargos, com os campos CodCargo (chave-primria),
DescricaoCargo e Salario

CREATE TABLE Cargos


(
CodCargo INTEGER NOT NULL,
DescricaoCargo VARCHAR(30),
Salario FLOAT,
PRIMARY KEY (CodCargo)
)
EPS 7001 Prof. Enzo Morosini Frazzon

CREATE
Criar tabela Negocios, com os campos Matricula, Nome e Total
Objetivo: monitorar o desempenho dos funcionrios

CREATE TABLE Negocios


(
Matricula INTEGER NOT NULL,
NomeFunc VARCHAR (20),
Total FLOAT,
PRIMARY KEY (Matricula)
)
EPS 7001 Prof. Enzo Morosini Frazzon

ALTER
Objetivo: alterar estrutura da base de dados

Formato:
ALTER TABLE <nomedatabela>
ADD <nomedocampo tipodedado>
EPS 7001 Prof. Enzo Morosini Frazzon

ALTER

Alterar tabela Funcionario, incluindo o campo Idade

ALTER TABLE Funcionario


ADD Idade INTEGER
EPS 7001 Prof. Enzo Morosini Frazzon

ALTER
Alterar tabela Funcionario, estabelecendo a relao entre a tabela
Funcionario e a tabela Cargos

ALTER TABLE Funcionario


ADD FOREIGN KEY (CodCargo)
REFERENCES Cargos (CodCargo)
ON UPDATE CASCADE
ON DELETE NO ACTION

Alternativa: ON DELETE SET NULL


EPS 7001 Prof. Enzo Morosini Frazzon

ALTER
Alterar tabela Funcionario, incluindo o campo CPF

ALTER TABLE Funcionario


ADD CPF Char (14)

Alterar tabela Funcionario, eliminando campo CPF

ALTER TABLE Funcionario


DROP CPF
EPS 7001 Prof. Enzo Morosini Frazzon

INSERT
Objetivo: inserir registros

Formato:
INSERT INTO <nomedatabela>
(<listadecampos>)
VALUES (<valoresdoscampos>)

Obs.: variveis texto entre aspas!


No esquecer de gravar na Base de Dados
(Commit)
EPS 7001 Prof. Enzo Morosini Frazzon

INSERT
Inserir dados na tabela Funcionario, nos campos Matricula,
Nome e CodCargo

INSERT INTO Funcionario


(Matricula,Nome)
VALUES (4,ENZO')
EPS 7001 Prof. Enzo Morosini Frazzon

INSERT
Inserir dados (vrios registros ao mesmo tempo) na tabela
Negcios

INSERT INTO Negocios


SELECT F.Matricula, F.Nome, SUM(CustoDia*(Fim-Inicio)) AS Total
FROM Funcionario F, Locacao L
WHERE F.Matricula = L.Matricula
GROUP BY F.Matricula, F.Nome

Ateno! A estrutura da tabela destino (negcios) precisa ser idntica


estrutura dos dados selecionados com o comando SELECT
EPS 7001 Prof. Enzo Morosini Frazzon

UPDATE
Objetivo: alterar registros

UPDATE <nomedatabela>
SET <campo1> = <novovalor1>
<campo2> = <novovalor2>
<campo3> = <novovalor3>
WHERE <condio>

Sem condicional, todos os registros da tabela seriam alterados!


EPS 7001 Prof. Enzo Morosini Frazzon

UPDATE
Atualizar Salrio em 10%, menos para o Diretor
UPDATE Cargos
SET Salario = Salario * 1.1
WHERE CodCargo IN (2,3)

Reduzir Salrio em 10%, menos para o Diretor


UPDATE Cargos
SET Salario = Salario / 1.1
WHERE CodCargo IN (2) OR CodCargo IN (3)
EPS 7001 Prof. Enzo Morosini Frazzon

DELETE
Objetivo: apagar registros

DELETE FROM <NomedaTabela>


WHERE <condio>

Apagar da tabela Negocios, o nome do funcionrio Martins


DELETE FROM Negocios
WHERE NomeFUNC LIKE '%MARTINS%'

No existe comando UNDELETE!!! FAAM BACKUP SEMPRE!


EPS 7001 Prof. Enzo Morosini Frazzon 27

Exerccio
Considere o diagrama E/R abaixo, e apresente o que se pede:

a) comando SQL para incluir os


nomes do pai e da me do aluno;
b) comando SQL para recuperar o
nome dos professores de um
dado aluno;
c) comando SQL para recuperar o
IAA (mdia ponderada das notas
em relao aos crditos cursados)
de um dado aluno;
d) comando SQL para inserir um
novo professor nos quadros do
Depto de Eng. de Produo e
Sistemas.
EPS 7001 Prof. Enzo Morosini Frazzon 28

Exerccio
a) ALTER TABLE Alunos
ADD (NomePai VARCHAR(60), NomeMae VARCHAR(60))

b) SELECT P.Nome
FROM Professor P, Turma T, Matriculas M, Alunos A
WHERE A.Nome = nome do aluno dado AND
P.Codigo = T.Codigo AND
T.CodTurma = M.CodTurma AND
M.Matriculas = A.Matriculas
EPS 7001 Prof. Enzo Morosini Frazzon 29

Exerccio
c) SELECT AVG (M.Nota * D.Creditos)
FROM Disciplina D, Turmas T, Matriculas M, Alunos A
WHERE A.Nome = nome do aluno dado AND
D.Codigo = T.Codigo AND
T.CodTurma = M.CodTurma AND
M.Matriculas = A.Matriculas
d) INSERT INTO Professor
(CPF, Nome, CodDepto) VALUES (< CPF do professor>,
< Nome do professor >,
EPS)
EPS 7001 Prof. Enzo Morosini Frazzon 30

Sumrio
Comandos SQL
SELECT
UPDATE
INSERT
DELETE
Exerccio