Você está na página 1de 29

Sumrio

SQL - Structured Query Language

Prof Andr Lus Arantes

1. Introduo 2. Selecionando Linhas 3. Clusulas ORDER By e WHERE 4. Funes de Linha 5. Joins 6. Funes de Grupo 7. Subqueries 8. Modelagem de Dados e Database Design

10. Criando Tabelas 11. DML - Data Manipulation Language 12. Alterando Tabelas e Constraints 13. Views 14. Indices

SQL
Linguagem de consulta
Obter informaes do banco de dados
Procedurais
Seqncia de operaes

No-procedurais - o usurio descreve a informao desejada sem fornecer um procedimento especifico para a obteno dessas informaes

Firebird

SGBD FIREBIRD

25 de Julho de 2000 Borland abertura do cdigo fonte do InterBase criar uma verso bifucarda do IB que tivesse o apoio e a participao ativa da comunidade no seu desenvolvimento Muitos bugs foram detectados e corrigidos, incluindo a uma grande falha de segurana (backdoor) encontrada no cdigo do IB que permitia que qualquer usurio conhecedor do login/senha do backdoor tivesse acesso completo a qualquer banco de dados em qualquer servidor InterBase as licenas de utilizao e distribuio so totalmente FREE !

Firebird
Instalao
Para utilizao do FIREBIRD preciso instalar o Banco de dados e o console, que so arquivos distintos

Concepo de um BDR

MODELAGEM DE DADOS

- Modelo de Dados: Definio abstrata, autnoma e lgica dos objetos, operadores que juntos constituem a mquina abstrata com a qual os usurios interagem. Os objetos permitem modelar a estrutura de dados. Os operadores permitem modelar seu comportamento. (C.J.Date) - Modelo Conceitual: Modelo de dados abstrato, que descreve a estrutura de um banco de dados de forma independente de um SGBD particular. - Modelo Lgico Modelo de dados que representa a estrutura de dados de um banco de dados conforme vista pelo usurio do SGBD.

Concepo Concepo de um BDR


- Banco de Dados Conjunto de Dados integrados que tem por objetivo atender a uma comunidade de usurios - SGBD Software que incorpora as funes de definio, recuperao e alterao de dados em um banco de dados. - Modelo de dados Descrio formal da estrutura de um banco de dados. 1. Modelo Conceitual 2. Modelo Lgico - Modelo Conceitual Modelo de dados abstrato, que descreve a estrutura de um banco de dados de forma independente de um SGBD particular. - Modelo Lgico Modelo de dados que representa a estrutura de dados de um banco de dados conforme vista pelo usurio do SGBD.

- O Modelo Relacional a base para o SGBD - Componentes do Modelo: a) Coleo de objetos e relaes b) Grupo de operaes para agir nos relacionamentos c) Mecanismos para prover integridade e consistncia dos dados - Funes de um BDR a) Gerenciar os dados armazenados b) Controlar o acesso aos dados c) Recuperar e Modificar dados

Terminologia
Concepo Tabela(relao) Linha(tupla) Coluna(atributo) Campo Primary Key Foreign Key Descrio Estrutura bsica de armazenamento de um SGBD, composta de linhas e colunas Combinao de valores de coluna em uma tabela Representa um tipo de dado na tabela Interseo de uma linha com uma coluna; Sem dados -> null Coluna ou conjunto de colunas que identifica unicamente cada linha da tabela Coluna ou conjunto de colunas referente a uma chave primria na mesma tabela ou em outra tabela; So criadas para reforar as regras de desig do banco relacional
S_CUSTOMER Foreign Key

ID 201 202 203 204

Nome Unisport Simms Atheletics Delhi Sports WomanSport

Telefone 324-3456 213-0909 87698-99 123-3456

Emp_Id 12 14 14 11

S_EMP

ID 10 11 12 14

Last_Name Havel Magee Giljum Nguyen

First_Name Marta Colin Henry Mai

Primary Key

Primary Key

Regras Gerais
Valores duplicados no so permitidos na PK As PK no podem ser alteradas As FK so ponteiros lgicos e no fsicos O valor de uma FK deve coincidir com uma PK existente, ou ser nula.

Propriedades do BD Relacional
Acessar e alterar objetos no BD -> SQL Contm uma coleo de tabelas sem ponteiros fsicos Prov um conjunto de operaes altervel on-line Independncia total dos dados

Objetos do BD
Objeto Tabela View Sequence(GENERATORS) Index Synonym Program Unit Descrio Unidade Bsica de armazenamento Representa logicamente subconjuntos de dados de uma ou mais tabelas Gera valores de PK Usado para melhorar a performance de algumas queries Nome alternativo para um objeto Procedure, function ou package de SQL e PL/SQL

Constraints de Integridade de Dados

Tipo
Entidade Referencial Coluna

Descrio
Nenhuma parte da PK pode ser nula e seu valor deve ser nico Fk deve corresponder a uma PK ou ser nula Os valores devem corresponder ao datatype

Definidas-pelo-usurio Os valores devem obedecer a(s) regra(s) de negcio

SQL, PL/SQL
- SQL Linguagem de comando utilizada para comunicao com o BD - PL/SQL Linguagem procedural que estende o SQL adicionando aplicaes lgicas

Comandos SQL
Comando SELECT INSERT UPDATE DELETE CREATE ALTER DROP RENAME TRUNCATE COMMIT ROLLBACK SAVEPOINT GRANT REVOKE Descrio Retorna dados de um BD. Insere novas linhas, modifica linhas existentes e remove linhas de uma tabela. Conhecidos como comandos DML(Data Manipulation Language) Cria, altera e remove estruturas de dados das tabelas. Conhecidos como comandos DDL(Data Definition Language)

Gerencia as mudanas feitas pelos comandos DML.

Concede ou retira direitos de acesso ao BD e suas estruturas Conhecidos como comandos DCL(Data Control Language)

Summit Sport Goods Modelo Entidade-Relacionamento


S_ITEM S_ORD S_CUSTOMER

S_EMP S_INVENTORY

S_DEPT S_PRODUCT S_WAREHOUSE

S_REGION

SQL
DML

Selecionando Linhas

objetivos
Escrever um comando SELECT para consultar um banco de dados Realizar clculos aritmticos Especificar cabealhos alternativos Manusear valores nulos Concatenar colunas

Comando Select
-

Retorna informaes do BD, implementando todos os operadores algbricos.

Sintaxe: Select [distinct] {*,column [alias],....} from tabela SELECT colunas que quero pesquisar FROM tabelas que quero pesquisar

Comandos SQL
Podem ser includos em uma ou mais linhas Tabulaes e recuos podem ser usados Abreviaes e divises de palavras no so permitidas Comandos no so sensveis a maisculas e minsculas

SELECT
Selecionando Todas as Colunas e Linhas
SELECT * FROM S_DEPT; Exerccios
Verifique todos os dados das tabelas S_EMP, S_ITEM, S_ORD

SELECT
Selecionando Colunas Especficas SELECT DEPT_ID, LAST_NAME, MANAGER_ID FROM S_EMP

SELECT
Expresses Aritmticas
Crie expresses com os tipos de dados Numrico e Data usando os operadores: . Adio . Subtrao . Multiplicao . Diviso
SEPARE AS COLUNAS USANDO VIRGULAS

+ * /

ESPECIFIQUE AS COLUNAS NA ORDEM DE EXIBIO

SELECT
Exiba o sobrenome, o salrio anual, e o percentual de comisso de todos os funcionrios. SELECT LAST_NAME, SALARY * 12, COMMISSION_PCT FROM S_EMP SELECT LAST_NAME, SALARY * '13,3', COMMISSION_PCT FROM S_EMP

SELECT
Precedncias de operadores
. A Multiplicao e a Diviso tm prioridade sobre a Adio e a Subtrao. . Operadores que tm mesma prioridade so avaliados da Esquerda para a Direita. . Parnteses podem ser usados para forar a avaliao priorizada e para esclarecer comandos. . Parnteses alteram a ordem na qual um comando avaliado.

SELECT
SELECT LAST_NAME, SALARY, 12 * SALARY + 100, COMMISSION_PCT FROM S_EMP

SELECT
Apelidos (ALIAS) DE COLUNA
O ALIAS renomeia um cabealho de coluna

Muito til em clculos


SELECT LAST_NAME, SALARY, 12 * (SALARY + 100) BONUS_MENSAL FROM S_EMP SELECT LAST_NAME, SALARY, 12 * (SALARY + 100), COMMISSION_PCT FROM S_EMP
SELECT LAST_NAME, SALARY, 12 * (SALARY + 100) AS BONUS_MENSAL FROM S_EMP

SELECT
SELECT LAST_NAME, SALARY, 12 * (SALARY + 100) "BONUS MENSAL" FROM S_EMP

SELECT
OPERADOR DE CONCATENAO
representado pelo (||)

Vincula colunas ou strings de caracteres a outras colunas Cria uma coluna resultante que uma expresso de caracteres Exibio do nome completo dos empregados com o cabealho EMPREGADOS SELECT FIRST_NAME||LAST_NAME EMPREGADOS FROM S_EMP

SELECT
String de caracteres literais um caracter expresso ou nmero includo no SELECT Valores literais de data e caracter devem estar entre apstrofos
SELECT FIRST_NAME||' '||LAST_NAME|| ','||TITLE FROM S_EMP EMPREGADOS

Gerenciando valores nulos


-

Null no o mesmo que zero ou espao Null um valor sem designao

SELECT LAST_NAME, SALARY * COMMISSION_PCT/100 FROM S_EMP

SELECT
Linhas Duplicadas A exibio default de consultas so todas as linhas, incluindo as linhas duplicadas SELECT NAME FROM S_DEPT

SELECT
O DISTINCT aplica-se a todas as colunas na lista SELECT SELECT DISTINCT DEPT_ID, TITLE FROM S_EMP

SELECT DISTINCT NAME FROM S_DEPT

Prtica
1- Selecione todas informaes da tabela S_DEPT com os seguintes alises de coluna: codigo, departamento e localidade. 2- Tabela S_EMP: Mostre o nome completo(em um coluna apenas) dos empregados e seus respectivos salrios. 3- Utilizando a tabela S_CUSTOMER a. Mostrar o nome e telefone de cada cliente b. Mostrar o nmero telefnico e nome de cada cliente, com o nmero do telefone na primeira coluna.

Clusulas ORDER By e WHERE

Clusula Order by

OBJETIVOS
- Usada para gerar um sort nas linhas de uma query.

Ordenar as linhas na sada usando a clusula ORDER BY Entrar com os critrios de pesquisa usando a clusula WHERE

Sintaxe: Select expr from tabela [order by {column, expr} [ASC|DESC]]; Exemplo: >Select last_name, dept_id, start_date from S_emp

order by last_name;
- A ordem default do sort ascendente (ASC) - A ordem do sort pode ser revertida usando DESC -

a ltima clusula de um comando SELECT - Voc pode ordenar por colunas que no esto no SELECT

Clusula Order by
>Select

Clusula Where

last_name, salary*12 from s_emp order by 2;

Restringe o valor de retorno de uma query.

Exibio do sobrenome, nr dep e salrio de todos os funcionrios ordenados por departamento e, ento, na ordem desc, por salrio >Select last_name, dept_id, salary from s_emp

Vem logo depois da clusula FROM

Sintaxe Select expr from tabela [where condio(es)] [order by expr] Condies: - nome de coluna, expresses, constante - Operadores de comparao - Literal

order by dept_id, salary DESC;


>SELECT LAST_NAME, DEPT_ID, SALARY FROM S_EMP ORDER BY DEPT_ID, SALARY DESC

VALORES
DATA da mais antiga p/ mais recente NUMERICOS do mais baixo p/o mais alto CARACTERES A-Z

Clusula Where Clusula Where


Caracteres e datas devem vir entre aspas (Magee). Formatos de data: dd/mm/yyyy, dd-mon-yyyy, ...yy Numricos sem nada Valores caracteres so sensveis a maisculas e minsculas
>Select last_name, dept_id, salary from s_emp where dept_id = 42; >Select first_name, last_name, title from s_emp where last_name = Magee;

Operadores de comparao

Clusula Where

Clusula Where

Operadores SQL operam com todos os tipos de dados

Operadores lgicos

Clusula Where

Clusula Where

Operadores lgicos de negao

Operadores SQL de negao

Operador Like Clusula Where


- Use o operador BETWEEN para testar valores entre, e inclusive,

uma faixa de valores


>Select first_name, last_name, start_date from s_emp where start_date between 09-may-91 and 17-jun-91;

- O comando like pode ser usado para executar pesquisas a partir de um valor de string vlido - A condio de pesquisa pode conter literal ou numbers - % representa qualquer seqncia de zero ou mais caracteres. - _ representa um nico caracter. Exemplos >Select last_name from s_emp where last_name like M%; > Select last_name from s_emp where last_name not like %a%;

Use o operador IN para testar valores em uma lista


>Select id, name, region_id from s_dept where region_id in (1,3);

10

Operador like e condies mltiplas

Regras de precedncia
Ordem 1 Operador Todos operadores de comparo AND OR

>Select last_name from s_emp where start_date like %91; >Select last_name from s_emp where last_name like _a%; >Select last_name, salary, dept_id, title from s_emp where dept_id = 41 and title = Stock Clerk; >Select last_name, salary, dept_id, title from s_emp where dept_id = 41 or title = Stock Clerk;

2 3

>Select last_name, salary,dept_id from s_emp where salary >= 1000 and dept_id = 44 or dept_id = 42; >Select last_name, salary,dept_id from s_emp where salary >= 1000 and (dept_id = 44 or dept_id = 42);

Prtica

Prticas
Usando a tabela S_CUSTOMER
Crie uma query para mostrar o nome, numero do cliente, e crdito para todas as companhias representadas pelo vendedor 11 Incluir na query os alias de coluna: Empresa, Empresa Num e Crdito Ordenar o resultado da query em ordem descendente por numero do cliente

Usando a tabela S_EMP Mostre o nome do empregado 23 Mostre o primeiro nome, ltimo nome, e nmero de departamento dos empregados dos departamentos 10 e 50 em ordem alfabtica pelo ltimo nome. O primeiro e ltimo nome devem estar juntos, e o ttulo da coluna Nome Completo Mostre todos os empregados cujo ltimo nome termine em s. - Mostre o nome e data de incio dos empregados contratados entre 14 de maio de 1990 e 26 de maio de 1991. Ordenar pela data de incio ascendente

Usando a tabela S_PRODUCT Mostre em ordem alfabtica todos os produtos que comeam com a string Pro. Mostre o nome de todos os produtos e suas descries (short ), para todas as descries que possuem a palavra bicycle.

Joins

Objetivos
Escrever comandos SELECT para acessar dados de mais de uma tabela usando JOINS de igualdade e desigualdade Visualizar dados que normalmente no satisfariam uma condio de Join ao usar OUTER-JOINS Fazer o JOIN de uma tabela com ela mesma

11

Joins

joins
- Utilizado para pesquisar (query) dados em mais de uma tabela. - As linhas de uma tabela so lincadas com linhas de outras tabelas atravs de valores em comum (PK & FK).

Tipos:
Equijoin Non-equijoin Outer join Self join

ID 1 2

LAST_NAME Joo Maria

DEPT_ID 50 31

S_EMP

ID NAME 50 Pessoal 31 Financeiro 20 Comercial

REGION_ID 1 2 1
ID 1 2 3

S_DEPT

S_REGION

NOME Amrica do Sul Amrica do Norte frica

Produto Cartesiano

Equijoin

>Select name, last_name from s_dept, s_emp;

- Mostrar dados de uma ou mais tabelas. Sintaxe: Select tab.col, tab.col, ... from tabela1, tabela2 where tabela1.col1 = tabela2.col2; Exemplo:

- Resultado de uma condio de join invlida ou completamente omitida. - Todas as linhas de uma tabela so lincadas com as linhas da segunda tabela.

- Para se evitar o produto cartesiano, sempre incluir joins vlidos na clusula WHERE.

>Select s_emp.last_name, s_emp.dept_id, s_dept.name from s_emp, s_dept where s_emp.dept_id = s_dept.id;
Escreva a condio de join na clusula WHERE Coloque o nome da tabela antes do nome da coluna para maior clareza Os nome da coluna devem ter como prefixo o nome da tabela, quando o mesmo nome de coluna aparece em mais de uma tabela

Equijoin
Exemplos: - Mostrar o departamento(id), regio(id) e nome das regies para todos os departamentos. >Select s_dept.id Departamento ID, s_region.id Regio ID,

Equijoin

- Mostrar o ltimo nome, o nome da regio e o valor da comisso dos empregados que ganham comisso. >Select s_emp.last_name, s_region.name,s_emp.commission_pct

s_region.name Nome Regio from s_dept, s_region where s_dept.region_id = s_region.id;


- Mostrar o empregado de ltimo nome Menchu, o nmero e o nome do departamento.

from s_emp, s_dept,s_region where s_emp.dept_id = s_dept.id and s_dept.region_id = s_region.id and s_emp.commission_pct>0;

>Select s_emp.last_name, s_emp.dept_id, s_dept.name from s_emp, s_dept where s_emp.dept_id = s_dept.id and s_emp.last_name = Menchu;

12

Alias de Tabela

Non-Equijoin

Qualificar uma coluna com o apelido da tabela Ganhar tempo na confeco das queries. Boa tcnica de programao, pois facilita a leitura e manuteno. Utilizar alias de com qtde pequena de caracteres. O alias vlido apenas para a query corrente.

- Usado quando nenhuma coluna de uma tabela corresponde diretamente a uma coluna da segunda tabela. - O resultado obtido usando outro operador que no o igual(=). Exemplo: - Mostrar uma grade salarial dos empregados. O salrio deve estar entre uma par de valores mnimos e mximos. (Tabelas usadas S_EMP e SALGRADE) >Select

Exemplo: >Select c.name Cliente, c.region_id Regio ID, r.name Regio from s_customer c, s_region r where c.region_id = r.id;

e.ename, e.job, e.sal, s.grade from emp e, salgrade s where e.sal between s.losal and s.hisal;

Outer-join
Use um OUTER JOIN para ver linhas que normalmente no satisfazem a condio de JOIN O operador do OUTER JOIN o sinal de mais (+) e deve ser colocado apenas de um lado da expresso(Oracle). Coloque o operador no lado do JOIN onde no h um valor a ser unificado No outer join no se pode usar operador IN e vincular a outra condio OR

Outer join
select e.last_name, e.id, c.name from s_emp e left outer join s_customer c on e.id = c.sales_rep_id select e.last_name, e.id, c.name from s_emp e right outer join s_customer c on e.id = c.sales_rep_id select e.last_name, e.id, c.name from s_emp e full outer join s_customer c on e.id = c.sales_rep_id

Self Joins

- Join de uma tabela com ele mesma. - Simulao de duas tabelas com o uso de dois aliases para a mesma. Exemplo: - Mostre o nome dos empregados e seus respectivos gerentes. >Select trabalhador.last_name|| trabalha para || gerente.last_name from s_emp trabalhador, s_emp gerente where trabalhador.manager_id=gerente.id;

13

Self Joins

pratica
- Join de uma tabela com ele mesma. - Simulao de duas tabelas com o uso de dois aliases para a mesma. Exemplo: - Mostre o nome dos empregados e seus respectivos gerentes. >Select trabalhador.last_name|| trabalha para || gerente.last_name from s_emp trabalhador, s_emp gerente where trabalhador.manager_id=gerente.id;

Escreva um relatrio contendo o sobrenome, numero e nome do departamento de cada funcionrio Escreva uma consulta para exibir o sobrenome, nome de departamento e nome da regio de todos os funcionrios que recebem comisso Exiba o nome do funcionario e do seu departamento, cujo sobrenome seja Smith. Exiba o nome e o nr do produto e a quantidade pedida para todos os itens contidos no pedido nr 101.

FUNES

AVG() MEDIA
SELECT AVG(SALARY) FROM S_EMP

COUNT()
SELECT COUNT(COMMISSION_PCT) FROM S_EMP WHERE COMMISSION_PCT IS NOT NULL

MIN(), MAX(), SUM


SELECT SUM(SALARY) FROM S_EMP

UPPER()
SELECT UPPER(LAST_NAME) FROM S_EMP

FUNES EXTERNAS
*.dll Exemplo: fbudf.dll
declare external function invl int by descriptor, int by descriptor returns int by descriptor entry_point 'idNvl' module_name 'fbudf';

FUNES DE GRUPO
GROUP BY exibir estatsticas para grupos diferentes
Divide linhas em grupos menores

HAVING incluir ou excluir linhas agrupadas


Limita grupos de resultados FROM

SELECT invl(commission_pct, 2) S_EMP

14

Clusula GROUP BY

- Usada para dividir as linhas de uma tabela em pequenos grupos. Sintaxe: select coluna, funo_grupo from tabela [where condio] [group by expresso] [order by coluna] expresso -> Especifica a coluna cujo valor ir determinar o agrupamento das linhas.

Funo AVG(col) COUNT(col)

Descrio Devolve a mdia dos valores da coluna Devolve o nmero de linhas na consulta. Usando * devolvido o nmero total de linhas inclusive duplicadas e linhas com valor null. Qdo for passado um item so contados apenas os valores no nulos Devolve o valor mximo do item da lista SELECT Devolve o valor mnimo do item da lista SELECT Devolve a soma dos valores do item da lista SELECT

MAX(col) MIN(col) SUM(col)

Clusula GROUP BY
Exemplos: - Mostrar o nmero de empregados do departamento 41. 1) >Select id, last_name, dept_id Departamento from s_emp where dept_id = 41; 2) >Select dept_id, count(*) from s_emp group by dept_id;

Clusula GROUP BY
Exemplos: - Mostrar cada possibilidade dos crditos do cliente e o nmero de clientes para cada categoria de possibilidades de crdito. >Select credit_rating, count(*) Qtde from s_customer group by credit_rating; - Mostrar as funes (job titles) e o total salarial(ms) para cada funo, excluindo o vice presidente. Ordenar pelo total salarial. >Select title, SUM(salary) Pagamento from s_emp where title not like VP% group by title order by sum(salary);

Clusula GROUP BY

Clusula GROUP BY

Exemplos: >Select max(salary) from s_emp group by title; >Select title,max(salary) from s_emp group by title; >Select title, max(salary) from s_emp;

- A clusula WHERE no pode ser usada para restrio de grupos, isto , funes de grupos no podem ser utilizadas em clusulas WHERE. Exemplo: - Mostrar o nmero do departamento e a mdia salarial daqueles departamentos que possuem uma mdia salarial acima de 2000. >Select dept_id, avg(salary) from s_emp where avg(salary) > 2000 group by dept_id;

No pode ser usada juntamente com uma funo de grupo, sem que haja a clusula GROUP BY.

15

Clusula HAVING

Clusula HAVING

>Select dept_id, avg(salary) from s_emp group by dept_id having avg(salary) > 2000; Sintaxe select coluna, funo_grupo from tabela [where condio] [group by expresso] [having condio_de_grupo] [order by coluna] condio_de_grupo -> Restrio s linhas retornadas pelo GROUP BY.

Exemplos: - Mostre as funes(title) e salrio mensal total de cada funo que excedam 5000. No inclua vice presidentes, e ordene pelo total salarial. >Select title,sum(salary) Pagamento from s_emp where title not like VP% group by title having sum(salary) > 5000 order by sum(salary);

Clusula HAVING

- Mostre todos os nmeros de departamentos por departamento cujos totais de pagamento sejam maiores que 4000. >Select dept_id from s_emp group by dept_id having sum(salary) > 4000;

SUBQUERIES

Subqueries - Definio e Sintaxe

O QUE ?
Um comando select includo na clausula de outro comando select Pode ser colocada:
Clausula where Clausula having Clausula from executada antes da clausula principal
-Sintaxe: Select lista_select from tabela where expr operador (select lista_select from tabela); - Deve ser limitada por parnteses - Deve aparecer sempre ao lado direito do operador - No podem conter clusulas ORDER BY

16

Subqueries
Exemplo - Mostre o last_name e funo(title) dos empregados que trabalham no mesmo departamento que Biri. >Select last_name, title from s_emp where dept_id = (select dept_id from s_emp where upper(last_name)=BIRI); - Mostre o last_name dos empregados que possuem a mesma funo que o Smith >Select last_name, title from s_emp where title = (select title from s_emp where last_name = Smith)

Subqueries

- Mostre o last_name, funo(title) e salrio de todos os empregados que recebem menos que a mdia salarial. >Select last_name, title, salary from s_emp from s_emp where salary < (select avg(salary) from s_emp);

Subqueries de Mltiplas linhas

Subqueries Aninhadas com a clusula HAVING

- Subqueries que retornam mais que uma linha. - DEVE se utilizar o operador IN nestes casos. Exemplo: - Ache os empregados que estejam no departamento financeiro ou na regio 2. >Select last_name, first_name, title from s_emp where dept_id in (select id from s_dept where name = Finance OR region_id = 2);

- Mostre todos os departamentos que tenham uma mdia salarial maior que a do departamento 32. >Select dept_id, avg(salary) from s_emp group by dept_id having avg(salary) > (select avg(salary) from s_emp where dept_id = 32);

PRATICA
Esses exerccios usam as tabelas S_EMP, S_DEPT, S_ORD, S_ITEM, e S_PRODUCT. Mostre o primeiro nome, sobrenome e data de admisso de todos os funcionrios no mesmo departamento de Magee. Exiba o numero do funcionrio, primeiro nome, sobrenome e nome do usurio para todos os Funcionrios com salrios acima da mdia salarial. Exiba o sobrenome, numero do departamento e cargo para todos os funcionrios designados para a regio 1 ou 2. Exiba o sobrenome e salrio para todos os Funcionrios que se reportam a LaDoris Ngao. Exiba nmero do funcionrio, primeiro nome e sobrenome para todos os funcionrios com um salrio acima da mdia salarial e que trabalhem com qualquer funcionrio cujo sobrenome tenha unia letra "t" Exiba o nmero do cliente, classificao de credito e o sobrenome do representante de vendas para todos os clientes localizados na regio da Amrica do Norte ou tenham o Nguyen como seu representante de vendas.

Viso Geral de Modelagem de Dados

- Ciclo de Desenvolvimento de Sistemas - Concepo de um Modelo Entidade-Relacionamento

17

Ciclo de Desenvolvimento de Sistemas

Ciclo de Desenvolvimento de Sistemas

- Fases de Desenvolvimento de Sistemas (Top-Down)

Anlise Projeto Implementao Teste Instalao Objetivo: Transformar regras de negcio em um Banco de Dados Operacional

1. Anlise - Estuda e analisa as regras de negcio. - Entrevista usurios e gerentes para identificar os requisitos. - Constri modelos do sistema: Diagrama de Contexto DFD Exploso de Processos MER Conceitual 2. Projeto - MER Fsico. - Mapeamento do conceitual para o fsico: Entidades -> Tabelas Atributos -> Colunas Relacionamentos -> Foreign Keys Regras de Negcio -> Constraints

Ciclo de Desenvolvimento de Sistemas

Concepo - MER

3. Implementao - Criao de Tabelas e outro objetos - Prottipo do Sistema 4. Teste - Refinamento do Prottipo. - Forms - Move a aplicao para o ambiente de produo (simulao) - Realizao de alterao requisitadas 5. Instalao - Apresentao do sistema ao usurio. - Monitoramento de performance, aumento e refino do sistema.

- Entidade Conjunto de objetos da realidade modelada sobre os quais deseja-se manter informaes no banco de dados (C.A.Heuser) - Atributo Algo que descreve ou qualifica uma entidade. - Relacionamento Conjunto de associaes entre entidades. - Identificador nico (UID) Combinao de atributos que serve para distinguir ocorrncias em uma entidade. Smbolo -> #

Concepo - MER

Concepo - MER

Sintaxe dos Relacionamentos: - Cada nome_entidade{pode|deve} nome_relacionamento {um e somente um|um ou mais} nome_entidade_destino. Exemplo: - Cada PEDIDO deve ser para um e somente um CLIENTE. - Cada CLIENTE pode realizar um ou mais PEDIDOs.

Conveno para o Diagrama de Relacionamento Linha Tracejada Indica opcionalidade, probalidade de ocorrncia. Linha Slida Indica obrigatoriedade. Elemento mandatrio. Ps de galinha Grau que indica multiplicidade. Um ou mais. Linha Simples Grau que indica unicidade. Ocorrncia nica.

PEDIDO #* id *data_pedido data_entrega

para realiza

CLIENTE #* id * nome telefone

18

Concepo - MER Concepo - MER


Relacionamento Recursivo Define um relacionamento de uma entidade com ela mesma. Cardinalidade - Um-para-um

MARIDO EMPREGADO #* id * nome sobrenome * user_id data_inicio

MULHER

- Muitos-para-um
gerenciado por PASSAGEIRO AERONAVE

- Muitos-para-muitos
gerente de

EMPREGADO

PROJETO

Concepo - MER

Exemplo:

SQL
ITEM #* id preco qtde PEDIDO #* id *data_pedido data_entrega

DDL

EMPREGADO #* id * nome telefone

Criando Tabelas

Criando Tabelas

Criao de Tabelas Regras para nomeao Tipos de Dados Constraints

- Objeto do Banco de Dados utilizado para armazenar dados. - Para criao do objeto usa-se um comando DDL. Sintaxe: CREATE TABLE [schema.]tabela (coluna datatype [constraint_de_coluna], [contraint_de_tabela]); schema -> nome de proprietrio tabela -> nome do objeto coluna -> nome do atributo datatype -> tipo e tamanho do dado contraint_de_coluna -> constraint de integridade como parte da definio da coluna contraint_de_tabela -> constraint de integridade como parte da definio da tabela

19

Regras para nomear um tabela

Tipos de Dados - FIREBIRD

Deve comear com letra Pode conter at 30 caracteres Deve conter apenas A-Z,a-z,0-9,_,$, e # No deve ter o mesmo nome que outro objeto no Banco No pode ser uma palavra reservada. Ex: SELECT, VIEW, DROP,etc

INTEGER and SMALLINT FLOAT and DOUBLE PRECISION NUMERIC and DECIMAL DATE, TIME, and TIMESTAMP CHARACTER and VARCHAR BLOB

Tipos de Dados Tipos de Dados

BLOB usado para armazenar dados muito grandes, de tamanho indeterminado e varivel, como imagens de de bitmap, vetores, desenhos, arquivos, vdeos, Captulos ou livros ou qualquer outro tipo de informao de multimdia.

TIMESTAMP inclui informao sobre ano, ms, dia do ms e tempo. DATE inclui informao sobre o ano, ms, e dia do ms. TIME inclui Informao sobre tempo em horas, minutos, segundos, e dcimo, centsimos, e milsimos de segundos.

Constraints

Tipos de Dados
- Estabelece regras a nvel de tabela onde as linhas so inseridas, atualizadas, ou deletadas. A constraint deve ser satisfeita para que a operao seja bem sucedida. - Previne a deleo de uma tabela se houver dependncias. - Constraints - TIPOS - NOT NULL - UNIQUE - PRIMARY KEY - FOREIGN KEY - CHECK

TIPO NUMERIC VARCHAR DATE BLOB


HISTORICO BLOB SUB_TYPE TEXT SEGMENT SIZE 80 FOTO BLOB SUB_TYPE 0 SEGMENT SIZE 80 NUMERIC(15, 2) VARCHAR(14)

20

Constraints

Constraints

Constraint NOT NULL UNIQUE

Descrio Especifica que a coluna no poder conter valores nulos (null). Especifica que uma coluna ou combinao de colunas dever conter valores nicos para todas as linhas da tabela. Identifica unicamente cada linha da tabela. Estabelece um relacionamento entre uma coluna e outra de uma tabela referenciada. Especifica uma condio que deve ser verdadeira (true).

- Pode ser nomeada ou o prprio Servidor gerar (SYS_Cn). - Pode ser criada ao mesmo tempo de criao da tabela, ou depois desta ter sido criada. - Pode ser definida a nvel de tabela ou coluna. Sintaxe: A nvel de Coluna

PRIMARY KEY FOREIGN KEY CHECK

column [CONSTRAINT nome_constraint] tipo_constraint,


A nvel de Tabela column, [CONSTRAINT nome_constraint] tipo_constraint (coluna,...),

Constraints

- NOT NULL

Constraints

- UNIQUE

- No permite valores nulo. - Definida a nvel de coluna. Exemplo:

- Duas linhas na tabela no podero conter o mesmo valor - Permite valores nulos Exemplo:

CREATE TABLE teste01 (telefone VARCHAR(15) NOT NULL, ...)


ou

CREATE TABLE teste01 (nome VARCHAR(25) CONSTRAINT teste01_nome_nn NOT NULL, ...)

CREATE TABLE teste01 (nome VARCHAR(25) CONSTRAINT teste01_nome_nn NOT NULL, telefone VARCHAR(10) CONSTRAINT teste01_tel_uk UNIQUE); >>> tem que ser not null (FIREBIRD)

Constraints

- PRIMARY KEY

Constraints

- FOREIGN KEY

- Cria uma chave primria para a tabela. Apenas uma PK permitida por tabela. - Provoca unicidade de coluna. - No permite valores nulos em nenhuma parte da PK. - No FIREBIRD necessrio primeiro estabelecer a constraint NOT NULL Exemplo:

- Coluna ou combinao de colunas - Estabelece um relacionamento entre a primary key da mesma tabela ou entre tabelas. - Deve corresponder a um valor existente na tabela pai ou ser nula. Exemplo

CREATE TABLE s_exemplo (id NUMERIC(7) CONSTRAINT s_exemplo_NN NOT NULL, ... CONSTRAINT S_EXEMPLO_PK PRIMARY KEY (ID),...

CREATE TABLE s_exemplo ( region_id NUMERIC(7) CONSTRAINT s_exemplo_region_id_fk REFERENCES s_region (id), ...);

21

Constraints

- CHECK
DML - Data Manipulation Language
DML Adicionando Linhas Atualizando Linhas Deletando Linhas Transaes de Banco Controle de Transaes Estado dos Dados

- Define uma condio onde cada linha deva satisfazer. Exemplo:

CREATE TABLE s_exemplo (commission_pct NUMERIC(4,2) CONSTRAINT s_commission_pct_ck CHECK (commission_pct IN(10,12.5,15,17.5,20));

DML

Adicionando Linhas

- Comandos usados para incluir, atualizar ou deletar no banco de dados. - Ao realizar comandos DML estamos efetuando transaes no BD.

- Sintaxe: INSERT INTO tabela [coluna,...] VALUES (valores,...); Exemplo1: >insert into s_dept values(11,Pessoal,2); Exemplo2: >insert into s_dept(id,name) values(13,Joo); ou > insert into s_dept values(13,Joo, null) Obs:region_id ter valor NULL (implicitamente)

Comando INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK

Descrio Adiciona uma nova linha a tabela Modifica linhas existentes na tabela Remove linhas da tabela Torna todas as pendncias permanentes no BD Permite um rollback at o ponto marcado Discarta todas as pendncias

Adicionando Linhas de uma outra tabela Atualizando Linhas


- Sintaxe: INSERT INTO tabela [coluna,...] subquery; Exemplo: 1. Criar a tabela historico com a seguinte estrutura: id number de 7 not null last_name varchar de 25 not null salary number de 9 e 2 decimais (11,2) title varchar de 25 start_date date >insert into historico select id,last_name,salary,title,start_date from s_emp where start_date < 01-JAN-94;

- Sintaxe: UPDATE tabela SET coluna = valor [WHERE condio]; valor -> novo valor condio -> identifica a linha ser alterada. Exemplo
>update s_emp set dept_id = 10 where id=2; >update s_emp set dept_id=32,salary=2550 where id =1;

22

Atualizando Linhas

Deletando Linhas

- Caso a clusula WHERE no seja includa no comando DML, todas as linhas da tabela sero atualizadas. Exemplo: >update s_emp set commission_pct = 10; >select id, commission_pct from s_emp;

- Sintaxe: DELETE FROM tabela [WHERE condio]; Exemplo: >delete from s_emp where id = 10; >delete from s_emp; >delete from s_dept where region_id = 1; Obs: Ao tentar deletar um registro que esteja sendo referenciado em uma outra tabela, retornar um erro de violao de constraint.

Controle de Transaes Prticas

Comando COMMIT SAVEPOINT nome ROLLBACK [TO SAVEPOINT nome]

Descrio Finaliza a transao corrente e tornando todas as pendncias permanentes no banco. Marca a corrente transao Finaliza a corrente transao e retorna ao savepoint indicado

Alterando Tabelas e Constraints

Adicionando Coluna

-Sintaxe:

Adicionando Coluna Modificando Coluna Adicionando e Dropando Constraint Drop de tabela

ALTER TABLE tabela ADD coluna datatype [DEFAULT expr] [NOT NULL][,coluna ...]; Exemplo: >ALTER TABLE s_region ADD comentario VARCHAR(255); ALTER TABLE EMPLOYEE ADD FULL_NAME COMPUTED BY (LAST_NAME || ', ' || FIRST_NAME); -A nova coluna se torna a ltima.

23

Modificando Coluna

Adicionando e Dropando Constraints

- Pode-se mudar o tipo, tamanho, valor default e constraint NOT NULL de uma coluna. -Sintaxe: ALTER TABLE tabela ALTER COLUNA TO NOVO_NOME ALTER COLUNA TYPE NOVO_TIPO( TAMANHO) ALTER TABLE EMPLOYEE ALTER EMP_NO POSITION 2; Exemplo: ALTER TABLE s_emp ALTER SALARY TO SALARIO ALTER SALARY TYPE VARCHAR(100)

- No possvel modificar uma constraint. Ou adiciona ou dropa. -Sintaxe: ALTER TABLE tabela ADD [CONSTRAINT nome_constraint] tipo (coluna); Exemplo: >alter table s_emp add constraint s_emp_manager_id_fk foreign key (manager_id) references s_emp(id);

RDB$RELATION_CONSTRAINTS.

Adicionando e Dropando Constraints

Dropando Tabelas

- Sintaxe: ALTER TABLE tabela DROP PRIMARY KEY | UNIQUE (coluna) | CONSTRAINT nome_constraint [CASCADE]; Exemplo: >alter table s_emp drop constraint s_emp_manager_id_fk;

- Todos os dados so deletados - Todas transaes pendentes so commitadas - No possvel realizar rollback -Sintaxe: DROP TABLE tabela [CASCADE CONSTRAINT];

Views
Prticas
- Definio - Criando Views - Prticas

24

View (Viso)

Criando Views

Definio: - Tabela lgica baseada em uma outra tabela ou viso. - No possui dados prprios, mas sim como uma janela de dados vindos de uma outra tabela, que podem ser vistos e modificado. Vantagens: - Restringe o acesso ao BD pois as vises mostram apenas parte dos objetos. - Permite que os usurios menos experientes realizem queries mais simples. - Prov que grupos de usurios obtenham diferentes informaes das mesmas tabelas.

- Sintaxe: CREATE [OR REPLACE] VIEW view AS subquery OR REPLACE -> Recria a view se ela j existeir view -> Nome da view subquery -> declarao SELECT completa Exemplo: >create view empvu45 as select id, last_name, title from s_emp where deot_id = 45; >select * fropm empvu45 from empvu45;

Criando Views

Criando Views

- Craiar um view contendo o numero do empregado, primeiro nome com alias FIRST, ltimo nome com alias LAST, e salrio com alias SALARIO_MS para o departamento 41. >create view salvu41 as select id, first_name FIRST, last_name LAST, salary SALARIO_MS from s_emp where dept_id = 41; >select * from salvu41; - Modificar a view empvu45. As colunas devero ter os seguintes cabealhos: nmero do empregado, ID_NUM; last_name, EMPREGADO; e title TRABALHO.

>create or replace view empvu45(ID_NUM, EMPREGADO,TRABALHO) as select id, last_name, title from s_emp where deot_id = 45;

Prticas

DML - Resumo
insert into s_dept values(11,Pessoal,2);
insert into historico select id,last_name,salary,title,start_date from s_emp where start_date < 01-JAN-94;

update s_emp set dept_id=32,salary=2550 where id =1;

delete from s_emp where id = 10;

25

Tipos de Dados

Resumo - Constraints
TIPO
CREATE TABLE teste01 (nome VARCHAR(25) CONSTRAINT teste01_nome_nn NOT NULL, telefone VARCHAR(10) CONSTRAINT teste01_tel_uk UNIQUE); CREATE TABLE s_exemplo (id NUMERIC(7) CONSTRAINT s_exemplo_NN NOT NULL, ... CONSTRAINT S_EXEMPLO_PK PRIMARY KEY (ID),...
CREATE TABLE s_exemplo ( region_id

NUMERIC VARCHAR DATE BLOB

NUMERIC(15, 2) VARCHAR(14)

HISTORICO BLOB SUB_TYPE TEXT SEGMENT SIZE 80 FOTO BLOB SUB_TYPE 0 SEGMENT SIZE 80

NUMERIC(7) CONSTRAINT s_exemplo_region_id_fk REFERENCES s_region (id), ...);

CREATE TABLE s_exemplo (commission_pct NUMERIC(4,2) CONSTRAINT s_commission_pct_ck CHECK (commission_pct IN(10,12.5,15,17.5,20));

DML

Resumo - ALTER
- Comandos usados para incluir, atualizar ou deletar no banco de dados. - Ao realizar comandos DML estamos efetuando transaes no BD.

ALTER TABLE s_region ADD comentario VARCHAR(255); ALTER TABLE EMPLOYEE ADD FULL_NAME COMPUTED BY (LAST_NAME || ', ' || FIRST_NAME);

Comando INSERT UPDATE DELETE COMMIT SAVEPOINT ROLLBACK

Descrio Adiciona uma nova linha a tabela Modifica linhas existentes na tabela Remove linhas da tabela Torna todas as pendncias permanentes no BD Permite um rollback at o ponto marcado Discarta todas as pendncias

ALTER TABLE EMPLOYEE ALTER EMP_NO POSITION 2;


ALTER TABLE s_emp ALTER SALARY TO SALARIO ALTER SALARY TYPE VARCHAR(100) alter table s_emp add constraint s_emp_manager_id_fk foreign key (manager_id) references s_emp(id);

alter table s_emp drop constraint s_emp_manager_id_fk

NORMALIZAO

NORMALIZAO
OBJETIVOS
Minimizao de redundncias e inconsistncias Facilidade de manipulao do banco de dados Facilidade de manuteno dos Sistemas de Informao Primeira forma normal (1FN)
No contiver grupos repetitivos. Procedimentos
Identificar a chave primria da entidade Identificar o grupo repetitivo e remov-lo da entidade Criar uma nova entidade com a chave primria da entidade anterior e o grupo repetitivo

26

1 FN
(nmero-pedido, data-pedido, cdigo-cliente, nomecliente, endereo-cliente,(cdigo-produto, nomeproduto, quantidade, preo-produto, total-produto e total-pedido))

1 FN
(nmero-pedido, data-pedido, cdigo-cliente, nomecliente, endereo-cliente,(cdigo-produto, nomeproduto, quantidade, preo-produto, total-produto e total-pedido))

1 FN
(nmero-pedido, data-pedido, cdigo-cliente, nomecliente, endereo-cliente, (cdigo-produto, nomeproduto, quantidade, preo-produto, total-produto etotalpedido))

1 FN
PEDIDO (nmero-pedido, data-pedido, cdigo-cliente, nome-cliente, endereo-cliente, e totalpedido) ITEM-PEDIDO (nmero-pedido, cdigo-produto, nomeproduto, quantidade, preo-produto e totalproduto)

2 FN
Estar em 1FN e todos os seus atributos que no so chave so dependentes de toda a chave, e no apenas de parte dela PROCEDIMENTOS
Identificar os atributos que no so funcionalmente dependentes de toda a chave primria Remover da entidade todos estes atributos identificados e criar uma nova entidade com eles

2 FN
ITEM-PEDIDO (nmero-pedido, cdigo-produto, nomeproduto, quantidade, preo-produto e totalproduto) ITEM-PEDIDO (nmero-pedido, cdigo-produto, quantidade, total-produto) PRODUTO (cdigo-produto, nome-produto, preoproduto)

27

2 FN

3 FN
Estiver na 2FN e cada atributo for funcionalmente dependente apenas dos atributos componentes da chave primria ou se estiver na 2FN e todos os seus atributos no-chave forem independentes entre si Procedimentos Identificar todos os atributos que so funcionalmente dependentes de outros atributos no-chave Remov-los e criar uma nova entidade com os mesmos a chave primria da nova entidade ser o atributo do qual os atributos removidos so funcionalmente dependentes

3 FN
PEDIDO (nmero-pedido, data-pedido, cdigocliente, nome-cliente, endereo-cliente, e total-pedido)

3 FN
PEDIDO (nmero-pedido, data-pedido, cdigo-cliente, nome-cliente, endereo-cliente, e total-pedido)

Controle de Transaes

3 FN
COMMIT
INSERT UPDATE Savepoint Marca A Savepoint Marca B

INSERT DELETE

ROLLBACK

ROLLBACK

ROLLBACK to A

ROLLBACK to B

28

Estado dos dados antes e depois do commit ou rollback

Estado dos dados antes e depois do commit ou rollback

Antes - O estado anterior dos dados pode ser restaurado pois as operaes de manipulao de dados ainda se encontra no buffer. - Outros usurios no podem ver os resultados das operaes DML do usurio corrente. Apenas do ltimo commit. - As linhas afetadas pela DML ficam no modo locked. Depois - As alteraes de dados so gravadas fisicamente no banco. - O estado anterior perdido completamente. - Todos os usurios podem visualizar o resultado. - Os locks de linha so liberados. - Todos os savepoints so apagados.

Exemplo: >update s_emp set salary = salary * 1.2 where title = Stock Clerk; >savepoint ponto_a; >insert into s_region(id,name) values (8,Central); >select * from s_region where id = 8; >rollback to ponto_a; >select * from s_region where id =8;

29

Você também pode gostar