Anda di halaman 1dari 58

Bancos de Dados

Banco de Dados - Definio


Um banco de dados uma coleo de dados relacionados. Dados so definidos como fatos conhecidos que podem ser registrados e que possuem significado implcito. Exemplo: uma agenda com nomes e nmeros de telefone. Pode ser armazenada em planilha ou access. Significado implcito: o nome indica o proprietrio, o nmero, indica o telefone Com esta definio, qualquer conjunto de dados relacionados poderia ser um banco de dados, ex. Texto de uma pgina.

SGDB - Definio
Um Sistema de Gerncia de Banco de Dados (SGDB) uma coleo de programas que possibilita que os usurios criem e mantenham um banco de dados.

Sistema de Banco de Dados

SGDB
O SGDB portanto um sistema de software de finalidade genrica que facilita o processo de definio, construo e manipulao de banco de dados para vrias aplicaes:
Definir um banco de dados envolve especificar os tipos de dados, as estruturas e as restries para os dados que sero armazenados. Construir o banco de dados o processo de armazenar os referidos dados em algum meio de armazenamento que seja controlado pelo SGDB. Manipular o banco de dados inclui funes de fazer consultas, atualizar e gerar relatrios.

No necessrio um software genrico de banco de dados para implementar um.

Usurios de um SGDB
Administradores de banco de dados Projetistas de banco de dados Usurios finais Usurios finais casuais Usurios finais leigos ou paramtricos Usurios finais sofisticados Usurios finais individuais Analistas de sistemas e engenheiros de software

Vantagens de usar um SGDB


Controlando redundncias Restringindo o acesso no autorizado Fornecendo armazenamento persistente para objetos de programas e estruturas de dados Permitindo a inferncia e aes utilizando regras Fornecendo interfaces mltiplas do usurio Representando relacionamentos complexos entre dados Impondo restries de integridade Fornecendo cpia e recuperao (backup e recovery)

Evoluo dos SGDBs

SQL
Sigla de Structured Query Language Padro ANSI e ISO Serve para: Definio de dados Recuperao de dados Manipulao de dados Controle de acesso Integridade de dados

Banco de Dados Postgres


Banco de dados de cdigo aberto. Acessar o PgAdmin (Senha aula) Criar um banco de dados "testes"

DML - Manipulao de Dados


Antes de manipular os dados precisamos defini-los (DDL)
create table produtos( codigo serial, descricao varchar(60), unidade varchar(03), peso numeric(10,2), estoque_atual int, cor varchar(30), fabricante varchar(30), preco_venda numeric(10,2), data_ultima_compra date )

SQL - CRUD Create - Incluso de dados Retrieve - Recuperar dados Update - Atualizar dados Delete - Excluir dados

DML - Insert
Clusula Insert - Incluir linhas (Create do CRUD)

insert into <tabela> [ (<campo1, campo2,...>) ] values (<valor1, valor2,...>), (<valor1, valor2,...>0

SQL Insert - Exemplo


insert into produtos (codigo, descricao, unidade, peso, estoque_atual,cor, fabricante, preco_venda, data_ultima_compra) values (1, 'bola futebol', 'un', 10.2, 5, 'verde', 'adidas', 49.90, 'today') Digitar "select * from produtos" para ver o resultado.

SQL Insert - Exemplo


Pode-se especificar as colunas
insert into produtos (codigo, descricao) values (3, 'bola de volei')

SQL Insert - Exemplo


Os nomes das colunas so opcionais, mas devem estar em ordem.
insert into produtos values (2, 'bola tenis', 'un', 10.2, 5, 'branca', 'nike', 49.90, '15/03/2012')

SQL Insert - Exemplo


Pode-se incluir vrias linhas com um insert
insert into produtos (codigo, descricao, un) values (4, 'bola de volei', 'p'), (5, 'bola de rugby', 'p'), (6, 'bola de boliche', 'un')

DML Delete - Excluir linhas


Excluir linhas (Delete do CRUD) Sintaxe: delete from <tabela> where <condicao>

SQL Delete - Exemplos


delete from produtos where codigo = 10 delete from produtos delete from produtos where data_ultima_compra > 'today' delete from produtos where estoque = 0 and cor = 'verde'

SQL Insert - Exerccio


Incluir 20 produtos diferentes no banco de dados de artigos esportivos:
No deve ter cdigos repetidos 5 fabricantes diferentes Descries no devem ser repetidas

Salvar os comandos insert utilizados.

SQL Update - Sintaxe


update <tabela> set <coluna1> = <valor1>, <coluna2> = <valor2>, <coluna3> = <valor3>... where <condicao>

SQL Update - Exemplos


Atualizar 1 produto
update produtos set descricao = 'Bola de gude', unidade = 'kg', fabricante = 'puma' where codigo = 1

SQL Update - Exemplos


Atualizar vrios produtos
update produtos set preco_venda = preco_venda * 1.1 update produtos set preco_venda = preco_venda * 0.9 where fabricante = 'adidas' update produtos set estoque = 0 where data_ultima compra < '01/01/2011'

Exerccios
Crie uma nova tabela para armazenar cursos, deve conter: cdigo, descrio, data inicial, data final, professor, preo e nmero de vagas, online. Inserir 20 cursos diferentes. Excluir os cursos que j terminaram; Aumentar preos em 20% Reduzir em 5 o nmero de vagas para os cursos online Inserir 5 novos cursos Entregar os comandos SQL executados.

SQL Select - Consultas


Select a instruo mais comumente usada do SQL; Sintaxe bsica:
select < coluna1, coluna 2, ... | * > from <tabela>

exemplos:
select codigo, descricao from cursos; select * from cursos;

SQL Select where: Filtrando linhas


A clusula where permite selecionar um subconjunto de linhas do resultado; select <colunas|*> from <tabela> where <condio>

SQL Select where - exemplos


Selecionar um item pelo cdigo:
select * from cursos where codigo = 1 select codigo, descricao, professor from cursos where codigo = 3

SQL Select where - exemplos


Operadores de comparao: =, >, >=, <, <=, <>
select * from produtos where preco_venda > 10 select codigo from cursos where numero_de_vagas < 15

SQL Select where - exemplos


Operadores relacionais: OR, AND
select * from produtos where preco_venda > 10 and preco_venda < 20 select codigo, descricao from cursos where numero_de_vagas < 15 or online = TRUE

SQL Select where - exemplos


Filtrando padres: like
select * from produtos where descricao like 'bola%' select * from cursos where descricao like '%inf%' select * from cursos where professor like 'mar_' -- mary ou mari

SQL Select where - exemplos


Selecionando de uma lista: in select * from cursos where codigo in (1,3, 4) select * from produtos where fabricante in ('nike','adidas') Selecionando uma faixa: between select * from produtos where preco_venda between 10 and 30

SQL Select where


Valores nulos is null, is not null select * from produtos where fabricante is null

SQL Select where - Limit


Limitando o nmero de resultados select * from produtos where fabricante = 'nike' limit 5

SQL Select - Order by


Ordenando os resultados select * from cursos order by professor; select * from produtos order by estoque;

SQL DDL - Alter table


Incluir uma nova coluna ALTER TABLE cursos ADD COLUMN ementa text; ALTER TABLE cursos ADD COLUMN turma varchar(30); Excluir uma coluna ALTER TABLE turma DROP COLUMN ementa;

SQL DDL - Alter table


Alterar o tipo de dado uma coluna
ALTER TABLE produtos ALTER COLUMN preco_venda TYPE numeric(11,2);

Alterar o nome de uma coluna


ALTER TABLE cursos RENAME COLUMN preo TO preco;

Alterar o nome de uma tabela


ALTER TABLE produtos RENAME TO produto;

SQL Select - Funes agregadas


Para quando queremos os dados somados, contados ou mdias. count() - contagem:
select count(*) from cursos; select count(*) from produtos where estoque > 1; select count(fabricante) from produtos;

SQL Select - Funes agregadas


Soma - sum() select sum(vagas) from cursos; select sum(estoque) from produtos where produto like 'bola%'

SQL Select - Funes agregadas


Mdia - avg() select avg(preco_venda) from produtos;

SQL Select - Funes agregadas Group By


Calculando subtotais select fabricante, sum(estoque) from produtos group by fabricante select professor, count(*) from cursos group by professor

SQL Select - Funes agregadas Group By


Subtotais de vrias colunas:
select fabricante, cor, sum(estoque) from produtos where preco_venda > 10 group by fabricante, cor

SQL Select - Funes agregadas Having


Quando queremos filtrar os resultados agrupados
ex: selecionar professores com mais de um curso select professor, count(*) from cursos group by professor having count(*) > 2

Exerccio
Testar funes de data e hora
http://pgdocptbr.sourceforge.net/pg80/functions-datetime.html http://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Fun%C3%A7%C3% B5es_Internas/Data_e_Hora

SQL Select - Sub Selects


possvel encadear consultas dentro de consultas: select fabricante from produtos where codigo in (select codigo from produtos)

SQL Select - Vrias Tabelas


Podemos unir vrias tabelas em uma consulta
create table agencia ( codigo_agencia integer, cidade varchar(50) ) create table cliente ( nome varchar(50), saldo numeric(10,2), codigo_agencia integer )

SQL - Vrias Tabelas


insert into agencia values (1, 'centro'),(2, 'cidade alta'), (3, 'botafago') insert into cliente values ('jos', 100, 1), ('joaquim', 200, 2), ('maria', 150, 1), ('joo', 180, 2), ('carlos', 160, 4)

SQL - Vrias Tabelas


Produto cartesiano select * from cliente, agencia select * from agencia, cliente

SQL - Joins
Especificando a juno:

select * from agencia, cliente where cliente.codigo_agencia = agencia.codigo_agencia

SQL - Join
INNER JOIN
SELECT * FROM cliente A INNER JOIN agencia B ON A.codigo_agencia = B.codigo_agencia

SQL - Join
LEFT JOIN
SELECT * FROM cliente A LEFT JOIN agencia B ON A.codigo_agencia = B.codigo_agencia

SQL - Join
RIGHT JOIN
SELECT * FROM cliente A RIGHT JOIN agencia B ON A.codigo_agencia = B.codigo_agencia

SQL - Join
OUTER JOIN
SELECT * FROM cliente A FULL OUTER JOIN agencia B ON A.codigo_agencia = B.codigo_agencia

SQL - Join
LEFT EXCLUDING JOIN
SELECT * FROM cliente A LEFT JOIN agencia B ON A.codigo_agencia = B.codigo_agencia WHERE B.codigo_agencia IS NULL

SQL - Join
RIGHT EXCLUDING JOIN
SELECT * FROM cliente A RIGHT JOIN agencia B ON A.codigo_agencia = B.codigo_agencia WHERE A.codigo_agencia IS NULL

SQL - Join
OUTER EXCLUDING JOIN
SELECT * FROM cliente A FULL OUTER JOIN agencia B ON A.codigo_agencia = B.codigo_agencia WHERE A.codigo_agencia IS NULL or B.codigo_agencia IS NULL

SQL Joins

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

SQL Joins - Mais tabelas


Nova tabela: movimento
create table movimento ( cliente varchar(30), data date, valor decimal(10,2) ) insert into movimento values ('joo', '01/09/2012', 50), ('jos', '20/08/2012', -30)

SQL Joins - Mais tabelas


SELECT * FROM cliente A LEFT JOIN agencia B ON A.codigo_agencia = B.codigo_agencia LEFT JOIN movimento C ON A.nome = C.cliente

Anda mungkin juga menyukai