Você está na página 1de 61

. .

Banco de Dados

uma estrutura lgica que atua como um conjunto de informaes integradas que representam a realidade de um negcio e tem por objetivo atender as necessidades de um grupo de usurios.

. .

Sistema Gerenciador de Banco de Dados (SGBD)

Um Sistema Gerenciador de Banco de Dados (como no Brasil) ou Sistema Gestor de Base de Dados (SGBD) o conjunto de programas de computador (softwares) responsveis pelo gerenciamento de uma base de dados. O principal objetivo retirar da aplicao cliente a responsabilidade de gerenciar o acesso, manipulao e organizao dos dados. O SGBD disponibiliza uma interface para que os seus clientes possam incluir, alterar ou consultar dados. Em bancos de dados relacionais a interface constituda pelas APIs ou drivers do SGBD, que executam comandos na linguagem SQL.

. .

Modelo Relacional

o modelo que predomina na maior parte dos SGBD (Sistemas Gerenciadores de Banco de Dados) no mercado atualmente. Um banco de dados relacional composto de tabelas, relacionamentos e regras em torno destes.

. .

Tabelas

Uma tabela um conjunto no ordenado de linhas (tuplas) e colunas, onde a intercesso deste forma um campo, que onde a informao ser armazenada. Cada colona da tabela recebe um identificador que chamado de nome de coluna (nome de atributo).

. .

Tabelas

A Cardinalidade de uma tabela dada pela quantidade de linhas existente nesta. O Grau de uma tabela dado pela quantidade de colunas existente nesta.

. .

Chaves

O conceito bsico para garantir a unicidade das informaes em uma tabela e estabelecer relaes entre estas, o conceito de chave. No modelo relacional consideramos trs tipos de chaves: Chave Primria Chave Estrangeira Chave Alternativa

. .

Chave Primria

Uma chave primria uma regras, implementada em uma ou mais colunas cujos valores distingue uma linha das demais dentro de uma tabela.

. .

Chave Estrangeira

Uma chave estrangeira uma regras, implementada em uma ou mais colunas cujos valores referenciam o contedo da chave primria de uma outra tabela. Esta a chave que implementa o mecanismo de relacionamento em uma base de dados relacional.

. .

Chave Alternativa

Uma chave alternativa uma regras, implementada em uma ou mais colunas cujos valores ajudam a chave primria a diferenciar uma tupla da outra.

. .

Domnios

Quando uma tabela em uma base de dados definida, especificado, para cada coluna da tabela, um conjunto de valores (alfanumricos, numricos,...) que os campos da respectiva coluna podem assumir. Este conjunto de valores chamado de domnio da coluna.

. .

Valores Vazios

Em uma tabela podemos especificar se um campo de um coluna pode ou no estar vazio. Estar vazio, significa dizer que o campo no recebeu nenhum valor de seu domnio. As colunas nas quais NO so admitidos valores vazios, so chamadas de colunas obrigatrias. As colunas nas quais PODEM conter valores vazios so chamadas de colunas opcionais.

. .

Restries de Integridade

Um dos objetivos primordiais do SGBD a integridade dos Dados. Dizer que os dados de um base de dados esto ntegros significa dizer que eles refletem corretamente a realidade representada pela base de dados e que so consistentes entre s. Para garantir a integridade da base de dados, os SGBDs implementam o mecanismo de Restries de Integridade, que um conjunto de regras de consistncia de dados garantida pelo prprio SGBD. No caso da abordagem relacional, classifica-se as restries de integridade nas seguintes categoria:

. .

Integridade de Vazio

a regra que diz que os campos de uma colunas podem ou no conter valores vazios, ou seja, se uma coluna opcional ou obrigatria. Campos de coluna que contem a regra de chave primria no contem valores vazios.

. .

Integridade Referencial

a regra que diz que os valores contidos na chave estrangeira de uma tabela, devem obrigatoriamente estar contidas na chave primria da tabela referenciada.

. .

Integridade de Chave

a regra que define que os valores contidos em uma coluna que possui a regra de chave primria ou a regra de chave alternativa devem ser nicos.

. .

Integridade de Domnio

a regra que diz que os valores inseridos nos campos de uma coluna devem obedecer a definio de valores admitidos para a coluna (o domnio da coluna).

. .

Breve Histrico da SQL

Julho de 1970 ocorreu a publicao por E.F.Codd, no ACM Journal o seguinte artigo: A Relational Model of Data for Large Shared Data Banks. A primeira implementao comercial da linguagem SEQUEL foi realizada pela IBM (System R) e tinha por objetivo a implementao do modelo de Codd. A evoluo desta linguagem deu origem ao SQL. SQL uma linguagem no procedural para acesso a dados utilizada por um SGBD. Atualmente o padro utilizado o ANSI SQL99, que a terceira gerao desta linguagem e trs como novidade mecanismos object-oriented.

. .

Modelo da Base de Dados

. .

Data Definition Language (DDL)

A Data Definition Language (DDL) a sub-linguagem usada para criar, alterar (manipular), e apagar todas as estruturas de um banco de dados relacional. E so representadas pelos seguintes comandos: CREATE ALTER DROP

. .

Criando Tabelas

Sintaxe Geral

CREATE TABLE <table_name> ( <def_atributo> [...,<def_atributo>] [,PRIMARY KEY (atributo(s))] [,FOREIGN KEY (atributo(s)) REFERENCES <nome_relao>] [,UNIQUE (atributo(s))] ) onde: <def_atributo>: <nome_coluna> <tipo_atributo> [NOT NULL] <tipo_atributo>: SMALLINT INTEGER BIGINT DECIMAL REAL CHAR VARCHAR LONG VARCHAR DATE TIME BLOB CLOB

DOUBLE ou FLOAT TIMESTAMP

. .

Criando Tabelas

Criar a tabela PRODUTO:

CREATE TABLE PRODUTO ( CodProduto SMALLINT NOT NULL, Nome VARCHAR(100) NOT NULL, Preco DECIMAL(9.2) NOT NULL, Categoria VARCHAR(50) NOT NULL, CONSTRAINT PK_Produto PRIMARY KEY (CodProduto)); OU ALTER TABLE PRODUTO ADD CONSTRAINT PK_Produto PRIMARY KEY (CodProduto);

. .

Criando Tabelas

Criar a tabela CLIENTE:

CREATE TABLE CLIENTE ( CodCliente SMALLINT NOT NULL, Nome VARCHAR(100) NOT NULL, Cidade VARCHAR(100) NOT NULL, UF CHAR(2) NOT NULL, Telefone CHAR(8), Status CHAR(10), Limite DECIMAL(9.2), CONSTRAINT PK_Cliente PRIMARY KEY (CodCliente)); OU ALTER TABLE CLIENTE ADD CONSTRAINT PK_Cliente PRIMARY KEY (CodCliente);

. .

Criando Tabelas

Criar a tabela PEDIDO:

CREATE TABLE PEDIDO ( NroPedido SMALLINT NOT NULL, DataLancamento DATE NOT NULL, DataEntrega DATE, CodCli SMALLINT NOT NULL, CONSTRAINT PK_Pedido PRIMARY KEY (NroPedido), CONSTRAINT FK_PedCli FOREIGN KEY (CodCli) REFERENCES CLIENTE (CodCliente); OU ALTER TABLE PEDIDO ADD CONSTRAINT PK_Pedido PRIMARY KEY (NroPedido); ALTER TABLE PEDIDO ADD CONSTRAINT FK_PedCli FOREIGN KEY (CodCli) REFERENCES CLIENTE (CodCliente);

. .

Criando Tabelas
Criar a tabela MOVIMENTO:
CREATE TABLE MOVIMENTO ( Quantidade SMALLINT, ValorTotal DECIMAL(9,2), NroPedido SMALLINT NOT NULL, CodProduto SMALLINT NOT NULL, CONSTRAINT PK_Movimento PRIMARY KEY (NroPedido, CodProduto), CONSTRAINT FK_MovProd FOREIGN KEY (CodProduto) REFERENCES PRODUTO (CodProduto), CONSTRAINT FK_MovPed FOREIGN KEY (NroPedido) REFERENCES PEDIDO (NroPedido); OU ALTER TABLE MOVIMENTO ADD CONSTRAINT PK_Movimento PRIMARY KEY (NroPedido, CodProduto); ALTER TABLE MOVIMENTO ADD CONSTRAINT FK_MovProd FOREIGN KEY (CodProduto) REFERENCES PRODUTO (CodProduto); ALTER TABLE MOVIMENTO ADD CONSTRAINT FK_MovPed FOREIGN KEY (NroPedido) REFERENCES PEDIDO (NroPedido);

. .

Criando ndices

Sintaxe Geral

CREATE [UNIQUE] <table_name>

INDEX

<index_name>

ON

(<columns_name> [order]);

Exemplo:

CREATE INDEX IDXNAME ON PRODUTO (NOME ASC);

. .

Alterando Objetos

Sintaxe Geral

ALTER <Object_Type> <Object_Name> ADD | DROP <Modify_Expression> Exemplo:

ALTER TABLE Produto ADD COLUMN imposto Decimal(5,3); ALTER TABLE Produto DROP COLUMN imposto;

. .

Excluindo Objetos

Sintaxe Geral

DROP <Object_Type> <Object_Name>;

Exemplo:

DROP TABLE MOVIMENTO;

. .

Data Manipulation Language DML

A Data Manipulation Language (DDL) a sub-linguagem usada para insero, atualizao, excluso e seleo de informaes em uma base de dados, e representada pelos seguintes comandos: INSERT UPDATE DELETE SELECT

. .

Inserindo Informaes

Sintaxe Geral

INSERT INTO <table_name> (<columns_name1>,...,<columns_namen>) VALUES (val1,...,valn)

. .

Inserindo Informaes

Exemplo 1: INSERT INTO CLIENTE (CODCLIENTE, NOME, CIDADE, UF, TELEFONE, STATUS, LIMITE) VALUES (7, Drink Market', Florianpolis', SC', NULL, bom', 652.32) Exemplo 2: INSERT INTO PRODUTO (CODPRODUTO, NOME, PRECO, CATEGORIA) VALUES (7, Qboa', 2.67, Agua Sanitria') Exemplo 3: INSERT INTO PRODUTO (NOME, CODPRODUTO, PRECO, CATEGORIA) VALUES (Lux Luxo', 8, 0.81, Sabonete')

. .

Atualizando Informaes

Sintaxe Geral

UPDATE <table_name> SET <columns_name1> = <expresso> [..., <columns_name1> = <expresso>] [WHERE <condio>]

Exemplo1:

Cliente de cdigo 2 informou seu novo telefone: 4723412

UPDATE cliente SET telefone = 4723412 WHERE codcliente = 2;

. .

Excluindo Informaes

Sintaxe Geral

DELETE FROM <table_name> [WHERE <condio>]

Exemplo1: Apagar todos os produtos que tenha seus cdigos entre 100 e 105: DELETE FROM produto WHERE codproduto BETWEEN 100 AND 105;

. .

Comando Select

Sintaxe Geral

SELECT [DISTINCT] <atributo1>[,...,<atributon>] FROM <table_name1> [,...,<table_namen>] [WHERE <condio>] [GROUP BY <atributo(s)> HAVING <condio>]] [ORDER BY <atributo1> [<ordem>] ,...,<atributon> [<ordem>]]]

. .

Seqncia de Execuo das Clausulas no Comando SELECT

Clausula FROM Clausula WHERE Clausula GROUP BY Clausula HAVING Clausula SELECT

. .

Consulta Simples

Recuperar os dados de todos os produtos cadastrados: SELECT * FROM produto; SELECT codproduto, nome , preco, categoria FROM produto;

OU

cod_prod 1 2 3 4

nome OMO Pinho Sol Minerva Confort

preo 5,65 3,34 4,98 3,54

categoria Sabo Desinfetante Sabo Sabo

. .

Consulta Qualificada

Recuperar os nomes de clientes de Porto Alegre cujo limite exceda R$ 600,00:

SELECT nome FROM cliente WHERE cidade = Porto Alegre and limite > 600;

nome Cia. Limpar

. .

Clausula DISTINCT

Recuperar a categoria dos produtos cadastrados:

categoria

SELECT categoria FROM produto;

sabo desinfetante sabo sabo

SELECT DISTINCT categoria FROM produto;

categoria sabo desinfetante

. .

Produto Cartesiano

Sintaxe Geral: FROM <table_name1>, <table_name2>

Combinao de cada tupla da 1 tabela com todas as tuplas da 2 tabela.

C = A x B, ento:

Grau de C = Grau de A + Grau de B Cardinalidade de C = Cardinalidade de A x Cardinalidade de B

. .

Produto Cartesiano

Recuperar os nomes de produtos solicitados em pelo menos um pedido:

SELECT DISTINCT nome FROM produto, movimento WHERE produto.cod_prod = movimento.cod_prod;

nome OMO Minerva Confort

. .

Produto Cartesiano
cod_prod 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4 nome OMO Pinho Sol Minerva Confort OMO Pinho Sol Minerva Confort OMO Pinho Sol Minerva Confort OMO Pinho Sol Minerva Confort OMO Pinho Sol Minerva Confort OMO Pinho Sol Minerva Confort preo 5,65 3,34 4,98 3,54 5,65 3,34 4,98 3,54 5,65 3,34 4,98 3,54 5,65 3,34 4,98 3,54 5,65 3,34 4,98 3,54 5,65 3,34 4,98 3,54 categoria sabo desinfetante sabo sabo sabo desinfetante sabo sabo sabo desinfetante sabo sabo sabo desinfetante sabo sabo sabo desinfetante sabo sabo sabo desinfetante sabo sabo nro_ped ped1 ped1 ped1 ped1 ped1 ped1 ped1 ped1 ped1 ped1 ped1 ped1 ped2 ped2 ped2 ped2 ped2 ped2 ped2 ped2 ped3 ped3 ped3 ped3 cod_prod 1 1 1 1 3 3 3 3 4 4 4 4 3 3 3 3 4 4 4 4 1 1 1 1 qtde 20 20 20 20 15 15 15 15 10 10 10 10 10 10 10 10 12 12 12 12 15 15 15 15 total_mov 53 53 53 53 29,7 29,7 29,7 29,7 15,4 15,4 15,4 15,4 19,8 19,8 19,8 19,8 18,4 18,4 18,4 18,4 39,75 39,75 39,75 39,75

. .

Produto Cartesiano

cod_prod 1 1 3 3 4 4

nome OMO OMO Minerva Minerva Confort Confort

preo 5,65 5,65 4,98 4,98 3,54 3,54

categoria sabo sabo sabo sabo sabo sabo

nro_ped ped1 ped3 ped1 ped2 ped1 ped2

cod_prod 1 1 3 3 4 4

qtde 20 15 15 10 10 12

total_mov 53 39,75 29,7 19,8 15,4 18,4

. .

Produto Cartesiano

nome OMO Minerva Confort

. .

Produto Cartesiano

Recuperar o nome e telefone de clientes que solicitaram pelo menos um produto de nome Confort:

SELECT DISTINCT cliente.nome, telefone FROM produto, movimento, pedido, cliente WHERE produto.cod_prod = movimento.cod_prod and movimento.nro_ped = pedido.nro_ped and pedido.cod_cli = cliente.cod_cli and produto.nome = 'Confort';

nome Shop Ltda. Super Merco

telefone 3308990

. .

Verificao de Campos Vazios

Sintaxe Geral:

WHERE <atributo> IS [NOT] null;

Recuperar nomes de clientes que possuem telefone: SELECT nome FROM cliente WHERE telefone is not null;
nome Super Merco Cia. Limpar Clean Ltda.

. .

Substituio de Caracteres

Sintaxe Geral:

WHERE <atributo> LIKE <expresso>;

onde,

<expresso> pode conter: % - substitui um nmero qualquer de caracteres, inclusive nenhum.

. .

Substituio de Caracteres

Selecionar cdigo e nome de clientes cujos nome contenham Ltda:

SELECT DISTINCT cod_cli, nome FROM cliente WHERE nome like '%Ltda%';

cod_cli c2 c4

nome Shop Ltda. Clean Ltda.

. .

Substituio de Caracteres

Selecionar cdigo e nome de clientes cujos nomes NO contenham Super ou contenham Dalmas:

SELECT DISTINCT cod_cli, nome FROM cliente WHERE nome LIKE 'Super%' OR nome LIKE '%Limpar';

cod_cli c1 c3

nome Super Merco Cia. Limpar

. .

Valores Calculados

Sintaxe Geral:

SELECT <expresso aritmtica> SELECT <string>

onde,

<expresso aritmtica> pode conter: +, -, *, /.

. .

Valores Calculados

Recuperar o nome de cada produto e o seu preo em dlares: SELECT nome, preo/3.775 as Preo, 'Dolares' FROM produto;

nome OMO Pinho Sol Minerva Confort

Preo 1,496689 0,884768 1,319205 0,937748

Dolares Dolares Dolares Dolares Dolares

. .

Ordenao

Sintaxe Geral:

ORDER BY <atributo> [ordem] [..., <atributo> [<ordem>]]

onde

<ordem> pode conter: asc - crescente (default) desc - decrescente

. .

Ordenao

Recuperar o nome de cada produto e o seu preo em dlares. Ordenar a consulta em ordem decrescente de preo:

SELECT nome, preo/3.775, 'Dolares' FROM produto ORDER BY 2 desc;

nome OMO Minerva Confort Pinho Sol

preo/3.775 1,496688767 1,319205303 0,937748334 0,884768189

Dolares Dolares Dolares Dolares Dolares

. .

Funes Agregadas

Sintaxe Geral:

SELECT <funo> (<expresso>

onde

<funo> pode conter:

sum - soma de valores; avg - mdia de valores; max - valor mximo; min - valor mnimo; count - contador.

. .

Funes Agregadas

Recuperar a quantidade de cliente que esto cadastrados:

SELECT count(*) FROM cliente;

SELECT count(Cod_Cli) FROM cliente;

count(Cod_Cli) 4

Para cada pedido, selecionar o seu nmero e o seu valor total:

SELECT nro_ped, sum(total_mov) FROM movimento;

. .

Agrupamento de Tuplas

Sintaxe Geral: GROUP BY <atributo(s)> [HAVING <condio>]

- Agrupa tuplas segundo um ou mais atributos;

- Funes agregadas passam a ser avaliadas por grupo e, no mais, por tupla.

. .

Agrupamento de Tuplas

Para cada pedido, selecionar o seu nmero e o seu valor total. Selecionar somente os pedidos com mais de um produto:

SELECT nro_ped, sum(total_mov) FROM movimento GROUP BY nro_ped HAVING count(*) > 1;

nro_ped ped1 ped2

sum(total_mov) 98,10000038 38,19999886

. .

Consultas Aninhadas

Em vrias situaes podemos utilizar o conceito de subconsultas, isto para evitar o produto cartesiano, de forma a otimizar as consultas realizadas em um SGBD. Para realizar subconsultas no SQL usaremos quatro clusulas: IN ANY ALL EXISTS

. .

Clusula IN

Compara a condio na clusula WHERE mais externa verificando se esta dentro do resultado do comando SELECT mais interno.

Selecionar o nome dos cliente que fiseram pedidos:


nome supermerco shop ltda clean ltda

select nome from cliente where cod_cli in (select cod_cli from pedido);

. .

Clusula IN

Selecionar o nome de todos os clientes que compraram o produto com nome omo. select nome from cliente where codcliente in (select codcli from pedido where nropedido in (select nropedido from movimento where codproduto in (select cod_prod from produto where nome='omo')));

nome shop ltda clean ltda

. .

Clusula ANY

Compara a condio na clusula WHERE mais externa verificando se qualquer tupla do resultado do comando SELECT mais interno supre esta condio.

Selecionar o nome dos produtos da categoria sabo onde seu preo seja maior que qualquer preo dos produto da categoria desinfetante. select nome from produto nome where categoria='sabo' and minerva preco > any omo (select preco from produto where categoria='desinfetante');

. .

Clusula ANY

Selecionar o nome e o status dos clientes que tenham limite de credito maior do que qualquer cliente que no possui telefone. select nome,status from cliente where limite > any (select limite from cliente where telefone is null);

nome Clean ltda

status timo

. .

Clusula ALL

Compara a condio na clusula WHERE mais externa verificando se todas as tuplas do resultado do comando SELECT mais interno suprem esta condio.

Selecionar o nome de todos os clientes que nunca fizeram nenhum pedido. select nome from cliente where codcliente <> all (select codcli from pedido);
nome cia limpar

Você também pode gostar