introdução à sql
TRANSCRIPT
Bancos de Dados
Banco de Dados - Definição
● Um banco de dados é uma coleção de dados relacionados.
● Dados são definidos como fatos conhecidos que podem ser registrados e que possuem significado implícito.
● Exemplo: uma agenda com nomes e números de telefone. Pode ser armazenada em planilha ou access. Significado implícito: o nome indica o proprietário, o número, indica o telefone
Com esta definição, qualquer conjunto de dados relacionados poderia ser um banco de dados, ex. Texto de uma página.
SGDB - Definição
Um Sistema de Gerência de Banco de Dados (SGDB) é uma coleção de programas que possibilita que os usuários criem e mantenham um banco de dados.
Sistema de Banco de Dados
SGDB
O SGDB é portanto um sistema de software de finalidade genérica que facilita o processo de definição, construção e manipulação de banco de dados para várias aplicações:
● Definir um banco de dados envolve especificar os tipos de dados, as estruturas e as restrições para os dados que serão 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 funções de fazer consultas, atualizar e gerar relatórios.
Não é necessário um software genérico de banco de dados para implementar um.
Usuários de um SGDB
● Administradores de banco de dados● Projetistas de banco de dados● Usuários finais
○ Usuários finais casuais ○ Usuários finais leigos ou paramétricos○ Usuários finais sofisticados ○ Usuários finais individuais
● Analistas de sistemas e engenheiros de software
Vantagens de usar um SGDB
● Controlando redundâncias● Restringindo o acesso não autorizado● Fornecendo armazenamento persistente para objetos
de programas e estruturas de dados● Permitindo a inferência e ações utilizando regras● Fornecendo interfaces múltiplas do usuário● Representando relacionamentos complexos entre
dados● Impondo restrições de integridade● Fornecendo cópia e recuperação (backup e recovery)
Evolução dos SGDB’s
SQL
● Sigla de Structured Query Language● Padrão ANSI e ISO● Serve para:
○ Definição de dados○ Recuperação de dados○ Manipulação de dados○ Controle de acesso○ Integridade de dados
Banco de Dados Postgres
● Banco de dados de código aberto.● Acessar o PgAdmin (Senha aula)● Criar um banco de dados "testes"
DML - Manipulação 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 - Inclusão de dados● Retrieve - Recuperar dados● Update - Atualizar dados● Delete - Excluir dados
DML - Insert
Cláusula Insert - Incluir linhas (Create do CRUD)
insert into <tabela> [ (<campo1, campo2,...>) ] values (<valor1, valor2,...>), (<valor1, valor2,...>0
SQL Insert - Exemploinsert 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 são 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 várias 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 - Exemplosdelete 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 - Exercício
● Incluir 20 produtos diferentes no banco de dados de artigos esportivos:○ Não deve ter códigos repetidos ○ 5 fabricantes diferentes○ Descrições não 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 produtoupdate produtos set descricao = 'Bola de gude', unidade = 'kg', fabricante = 'puma' where codigo = 1
SQL Update - Exemplos
Atualizar vários produtosupdate 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'
Exercícios
● Crie uma nova tabela para armazenar cursos, deve conter: código, descrição, data inicial, data final, professor, preço e número de vagas, online.○ Inserir 20 cursos diferentes.○ Excluir os cursos que já terminaram;○ Aumentar preços em 20%○ Reduzir em 5 o número de vagas para os cursos
online○ Inserir 5 novos cursos
● Entregar os comandos SQL executados.
SQL Select - Consultas
● Select é a instrução mais comumente usada do SQL;
Sintaxe básica:select < coluna1, coluna 2, ... | * >
from <tabela>
exemplos:select codigo, descricao from cursos;select * from cursos;
SQL Select where: Filtrando linhas
● A cláusula where permite selecionar um subconjunto de linhas do resultado;
select <colunas|*> from <tabela>where <condição>
SQL Select where - exemplos
● Selecionar um item pelo código:
select * from cursos where codigo = 1
select codigo, descricao, professorfrom cursoswhere codigo = 3
SQL Select where - exemplos
● Operadores de comparação: =, >, >=, <, <=, <>
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 padrões: like
select * from produtoswhere descricao like 'bola%'
select * from cursos where descricao like '%inf%'
select * from cursoswhere 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: betweenselect * 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 número 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;
● Incluir uma nova colunaALTER TABLE cursos
ADD COLUMN ementa text;ALTER TABLE cursos
ADD COLUMN turma varchar(30);
● Excluir uma colunaALTER TABLE turma
DROP COLUMN ementa;
SQL DDL - Alter table
SQL DDL - Alter table
● Alterar o tipo de dado uma colunaALTER TABLE produtos
ALTER COLUMN preco_venda TYPE numeric(11,2);
● Alterar o nome de uma colunaALTER TABLE cursos
RENAME COLUMN preço TO preco;
● Alterar o nome de uma tabelaALTER TABLE produtos
RENAME TO produto;
SQL Select - Funções agregadas
● Para quando queremos os dados somados, contados ou médias.
● count() - contagem:select count(*)
from cursos;select count(*)
from produtos where estoque > 1;
select count(fabricante) from produtos;
SQL Select - Funções agregadas
Soma - sum()
select sum(vagas) from cursos;
select sum(estoque) from produtos where produto like 'bola%'
SQL Select - Funções agregadas
Média - avg()
select avg(preco_venda) from produtos;
SQL Select - Funções agregadas Group By
Calculando subtotais
select fabricante, sum(estoque) from produtos group by fabricante
select professor, count(*) from cursosgroup by professor
SQL Select - Funções agregadas Group By
Subtotais de várias colunas:
select fabricante, cor, sum(estoque) from produtos where preco_venda > 10group by fabricante, cor
SQL Select - Funções agregadas Having
● Quando queremos filtrar os resultados agrupados
ex: selecionar professores com mais de um curso
select professor, count(*) from cursos group by professorhaving count(*) > 2
Exercício
Testar funções de data e hora
http://pgdocptbr.sourceforge.net/pg80/functions-datetime.htmlhttp://pt.wikibooks.org/wiki/PostgreSQL_Pr%C3%A1tico/Fun%C3%A7%C3%B5es_Internas/Data_e_Hora
SQL Select - Sub Selects
É possível encadear consultas dentro de consultas:
select fabricantefrom produtos where codigo in (select codigo
from produtos)
SQL Select - Várias Tabelas
Podemos unir várias 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 - Várias 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), ('joão', 180, 2), ('carlos', 160, 4)
SQL - Várias Tabelas
Produto cartesiano
select * from cliente, agencia
select * from agencia, cliente
SQL - Joins
Especificando a junção:
select * from agencia, cliente where cliente.codigo_agencia = agencia.codigo_agencia
SQL - Join
INNER JOIN
SELECT * FROM cliente AINNER JOIN agencia B
ON A.codigo_agencia = B.codigo_agencia
SQL - Join
LEFT JOIN
SELECT * FROM cliente ALEFT JOIN agencia B
ON A.codigo_agencia = B.codigo_agencia
SQL - Join
RIGHT JOIN
SELECT * FROM cliente ARIGHT JOIN agencia B
ON A.codigo_agencia = B.codigo_agencia
SQL - Join
OUTER JOIN
SELECT * FROM cliente AFULL OUTER JOIN agencia B
ON A.codigo_agencia = B.codigo_agencia
SQL - Join
LEFT EXCLUDING JOIN
SELECT * FROM cliente ALEFT JOIN agencia B
ON A.codigo_agencia = B.codigo_agenciaWHERE B.codigo_agencia IS NULL
SQL - Join
RIGHT EXCLUDING JOIN
SELECT * FROM cliente ARIGHT JOIN agencia B
ON A.codigo_agencia = B.codigo_agenciaWHERE A.codigo_agencia IS NULL
SQL - Join
OUTER EXCLUDING JOIN
SELECT * FROM cliente AFULL OUTER JOIN agencia B
ON A.codigo_agencia = B.codigo_agenciaWHERE 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: movimentocreate table movimento ( cliente varchar(30), data date, valor decimal(10,2))insert into movimento values ('joão', '01/09/2012', 50), ('josé', '20/08/2012', -30)
SQL Joins - Mais tabelas
SELECT * FROM cliente ALEFT JOIN agencia B
ON A.codigo_agencia = B.codigo_agenciaLEFT JOIN movimento C
ON A.nome = C.cliente