Sei sulla pagina 1di 48

Banco de dados

Projeto de Banco de dados

Projeto fsico
(SQL)
Professor: Douglas Paulesky Juliani

Passos para construir um BD

converso

Modelagem de dados

Implementao do modelo

SQL

O que SQL ?
Structured Query Language (linguagem de consulta estruturada)
Liguagem para acesso, manipulao e estrututurao de banco de dados

Verses do SQL
Sistema R Base da linguagem SQL desenvolvido na dcada de 70 pela IBM Sql 86 primeira especificao desenvolvida a partir de um esforo conjunto do ISO e ANSI Sql 92 (sql 2) aperfeioamentos da primeira verso entre 1989 e 92 Sql 99 (sql 3) implementao de novos comandos e estruturas, incorporao de novo tipos de dados (complexos) Sql 2003 reviso do padro sql 3 e adicionado o tratamento de XML

Sub-linguagens SQL
Linguagem de definio de dados (DDL): Criao estruturas das tabelas, atributos e seus tipos, alterao e excluso das tabelas criadas Linguagem de controle de dados (DCL): Controlar os aspectos de autorizao de dados e licenas de usurios para controlar quem tem acesso para ver ou manipular dados dentro do banco de dados Linguagem de manipulao de dados (DML): Incluir de dados nas tabelas; Desenvolver consultas simples; Desenvolver com a clusula WHERE; Atualizar dados nas tabelas; Excluso de linhas (registros) Linguagem de Consulta de Dados (DQL): Agrupar dados; Desenvolver funes agregadas; Realizar operaes artimticas; Aplicar funes; Eliminar repeties; Ordenar resultados; Desenvolver o conceito de junes; Implementar subconsultas;

SQL: Ling. de Definio de Dados

Linguagem para especificar a informao acerca de cada tabela, incluindo:


O esquema de cada tabela. O domnio de valores associados com cada atributo. Restries de integridade O conjunto de ndices (chaves) a manter para cada tabela.

Tipos em SQL
char(n). Cadeia de caracteres de comprimento fixo n. varchar(n). Cadeia de caracteres de comprimento varivel, com o mximo n especificado pelo utilizador. int. inteiro (um subconjunto finito dos inteiros, dependente da mquina). smallint. Inteiro pequeno (um subconjunto do tipo int). numeric(p,d). Nmero de vrgula fixa, com preciso de p dgitos e com n casas decimais. real, double precision. Nmeros de vrgula flutuante, com precio dependente da mquina. float(n). Nmero de vrgula flutuante, com um mnimo de preciso de n dgitos. Os valores nulos so permitidos em todos os tipos de dados. A declarao de um atributo como not null probe os valores nulos para esse atributo.

Tipos Data/Tempo em SQL (cont.)


date. datas, contendo um ano com (4 dgitos), ms e dia E.g. date 2001-7-27 time. Tempo (dirio), em horas, minutos e segundos. E.g. time 09:00:30 time 09:00:30.75 timestamp: data mais hora E.g. timestamp 2001-7-27 09:00:30.75 Interval: perodo de tempo E.g. Interval 1 day A subtraco de dois valores de date/time/timestamp devolve um intervalo Os valores de intervalos podem ser adicionados a valores de date/time/timestamp Pode-se extrair campos do valor date/time/timestamp E.g. extract (year from SYSDATE) Pode-se converter cadeias de caracteres para date/time/timestamp E.g. cast <string-valued-expression> as date

Conectando ao banco de dados


Rodar o DOS (prompt) Acessar o caminho c:\Arquivos de programas\Mysql\Mysql Server 5.0\bin Para chegar nesse caminho digite: cd c:\arq +TAB\my + TAB\my + TAB\bin + ENTER Rodar o mysql, digitando mysqld + ENTER Acessar mysql com os seguintes parmetros: mysql u root Pronto o mysql est acessado... Informaes: -u (nome do usurio), root o nome do usurio com maiores poderes de operao do o Mysql, ele criado no momento da instalao/configurao do Mysql. Como o banco de dados est rodando na mquina local e no foi atribuida nenhuma senha para o usurio root, voc no precisa informar mais nenhum parmetro adicional

Criando a base de dados


...Na janela aberta do DOS (prompt) create database teste; Pronto a base de dados est criada ! Agora vamos conectar a base de dados teste: use teste;
Pronto voc est conectado a base de dados que criou, agora vamos a criao das tabelas da base de dados teste...

Instruo Create Table


Uma tabela SQL definida recorrendo ao comando create table : create table NOME_TABELA (A1 D1, A2 D2, ..., An Dn NOME_TABELA o nome da tabela Ai o nome de um atributo no esquema de relao r Di o tipo de dados dos valores no domnio do atributo Ai Exemplo: create table estado (cod_estado int (10), nome varchar(50) not null, uf char(2)); NESTA TABELA NO IMPLEMENTAMOS A RESTRIO DE INTEGRIDADE !

Inserir Valores nas Tabelas


Recorre-se instruo insert, com a seguinte sintaxe:
1. Insere na Tabela a linha (Exp1,...,ExpN) de acordo com a ordem de atributos especificada na instruo create table: insert into NOME_TABELA values (Exp1,...,ExpN) 2. Insere na Tabela a linha (Exp1,...,ExpN) de acordo com a ordem de atributos especificada ( A1, ..., An) : insert into NOME_TABELA ( A1, ..., An) values (Exp1,...,ExpN)

Exemplos (execute mais de uma vez a instruo abaixo): insert into estado (cod_estado,nome,uf) values (1,Santa Catarina',SC'); insert into estado values (1,Santa Catarina',SC');

Instruo Drop Table


O comando drop table remove da base de dados toda a informao sobre a tabela. drop table estado;

Restries de integridade em Create Table


not null primary key (A1, ..., An)

Exemplo: Declarar cod_cidade como a chave primria da tabela cidade.

create table estado (cod_estado int (5), nome varchar(50), uf char(2), primary key (cod_estado));
A declarao primary key num atributo garante automaticamente not null em verses posteriores ao SQL-92. Deve ser explicitado em SQL-89

Inserir Valores nas Tabelas


Insira 2 registros na tabela cidade e observe o resultado ! insert into estado values (1, 'Santa Catarina', 'SC'); insert into estado values (1, 'Santa Catarina', 'SC'); AGORA A TABELA INCORPORA RESTRIO DE INTEGRIDADE...

Instruo Select
O comando select permite visualizar os dados contidos na tabela. select * from estado;

Select = SELECIONE * = TODOS OS ATRIBUTOS from = DA TABELA...

Atributo de auto-incremento em Create Table


Exemplo: Declarar cod_estado como a chave primria da tabela estado, setando este campo como auto incremento.

create table estado (cod_estado int (5) auto_increment, nome varchar(50), uf char(2), primary key (cod_estado));
O campo de auto-incremento deve ser primary key. Somente 1 campo de auto-incremento por tabela

Inserir Valores nas Tabelas


Insira 2 registros na tabela cidade e observe o resultado ! insert into estado (nome, uf) values ('Santa Catarina', 'SC'); insert into estado (nome, uf) values ('Santa Catarina', 'SC'); AGORA A TABELA INCORPORA UM CAMPO DE AUTO INCREMENTO, PORTANTO VOC NO PRECISA INFORMAR O CAMPO COD_ESTADO

Instruo Select
O comando select permite visualizar os dados contidos na tabela. select * from estado;

Select = SELECIONE * = TODOS OS ATRIBUTOS from = DA TABELA...

Excluindo as tabelas...
O comando drop table remove da base de dados toda a informao sobre a tabela.
drop table estado

EXCLUIREMOS AS TABELAS PARA REIMPLEMENTLAS USANDO O CONCEITO DE INTEGRIDADE REFERENCIAL !...

Integridade Referencial em SQL

As chaves primrias e estrangeiras podem ser especificadas na instruo SQL create table:
A clusula primary key da instruo create table inclui a lista de dos atributos que formam a chave primria. A clusula foreign key da instruo create table inclui a lista de atributos que constituem a chave estrangeira e o nome da tabela referenciada pela chave estrangeira. ATRAVS DA INTEGRIDADE REFERENCIAL QUE DEVEMOS ESTABELECER O RELACIONAMENO ENTRE AS TABELAS

Integridade Referencial em SQL Exemplo

create table estado (cod_estado int (5) auto_increment, nome varchar(50), uf char(2), primary key (cod_estado)); create table cidade (cod_cidade int (5) auto_increment, cod_estado int (5), nome varchar(50), primary key (cod_cidade) , foreign key (cod_estado) references estado (cod_estado) on delete restrict );

Inserir Valores nas Tabelas


Insira 2 registros na tabela estado insert into estado (nome, uf) values ('Santa Catarina', 'SC'); insert into estado (nome, uf) values (Paran', PR'); Insira 2 registros na tabela cidade insert into cidade (nome,cod_estado) values (Indaial', 1); insert into cidade (nome,cod_estado) values (Brusque', 1); insert into cidade (nome,cod_estado) values (Curitiba', 2); insert into cidade (nome,cod_estado) values (Londrina', 2);
O CDIGO DO ESTADO FOI ATRIBUDO COM VALOR 1 CONSIDERANDO O ESTADO DE SC RECEBEU CDIGO = 1 E PR RECEBEU CDIGO = 2, A PARTIR DO AUTO INCREMENTO...

Testando a integridade referencial


Tente excluir o estado de SC. Use a seguinte instruo: delete from estado where cod_estado=1;
Observe o resultado !

Excluindo as tabelas...
O comando drop table remove da base de dados toda a informao sobre a tabela.
drop table cidade; drop table estado;
EXCLUIREMOS AS TABELAS PARA REIMPLEMENT-LAS USANDO OPERAES EM CASTATA. ISSO PERMITIR DELETAR UM ESTADO MESMO TENDO CIDADES VINCULADAS A ELE !...

Aes em Cascata em SQL


create table estado (cod_estado int (5) auto_increment, char(2), primary key (cod_estado));

nome varchar(50), uf

create table cidade (cod_cidade int (5) auto_increment, cod_estado int (5), nome varchar(50), primary key (cod_cidade) , foreign key (cod_estado) references estado (cod_estado ) on delete cascade on update cascade);

Com as clusulas on delete cascade, se a remoo de um registro na tabela estado resulta na violao da restrio da integridade referencial, a remoo propaga-se em cascata para a tabela cidade, removendo o registro que referia o estado que tinha sido eliminado. Atualizaes/edies em cascata so semelhantes.

Aes em cascata em SQL (cont.)


Se existe uma cadeia de dependncias de chaves estrangeiras atravs de vrias tabelas, com um on delete cascade especificado em cada dependncia, uma remoo ou atualizao num dos extremos pode-se propagar atravs de toda a cadeia. Se uma remoo ou atualizao em cascata origina uma violao de uma restrio que no pode ser tratada por uma outra operao em cascata, o sistema aborta a transao. Como resultado, todas as alteraes provocadas pela transao e respectivas aes em cascata sero anuladas. A integridade referencial verificada apenas no final da transao
Passos intermdios podem violar a integridade referencial desde que passos posteriores a reponham Caso contrrio seria impossvel criar alguns estados da base de dados, e.g. inserir dois tuplos cujas chaves estrangeiras apontam um para o outro (e.g. atributo cnjuge da tabela casado)

Integridade Referencial em SQL (cont.)


Alternativas s operaes em cascata:
on delete set null on delete set default

Valores nulos em atributos de chaves estrangeiras complicam a semntica de integridade referencial da SQL, devendo-se evitar recorrendo a not null
Se algum atributo de uma chave estrangeira nulo, o tuplo satisfaz automaticamente a restrio de integridade referencial!

Inserir Valores nas Tabelas


Insira 2 registros na tabela estado insert into estado (nome, uf) values ('Santa Catarina', 'SC'); insert into estado (nome, uf) values (Paran', PR'); Insira 4 registros na tabela cidade insert into cidade (nome,cod_estado) values (Indaial', 1); insert into cidade (nome,cod_estado) values (Brusque', 1); insert into cidade (nome,cod_estado) values (Curitiba', 2); insert into cidade (nome,cod_estado) values (Londrina',2);

Testando ao em cascata
Tente excluir o estado de SC. Use a seguinte instruo: delete from estado where cod_estado=1;
Observe o resultado !

Outras restries para a criao de tabelas (implementadas no Mysql)


Alm das restries primary key e foreign key vistas anteriormente, podemos implementar as seguintes restries em uma tabela:
NOT NULL [no permite que uma atributo da tabela receba um valor nulo]
Create table aluno (matricula varchar(12), nome varchar(30), rg varchar(20) NOT NULL, primary key (matricula));

DEFAULT [permite definir um valor padro para um atributo no momento da insero de um registro]
Create table aluno (matricula varchar(12), nome varchar(30), sexo char(1) DEFAULT M, primary key (matricula));

Outras restries para a criao de tabelas (implementadas no Mysql)


Mais restries:
UNIQUE [no permite a repetio de um valor de um atributo da tabela]
Create table aluno (matricula varchar(12), nome varchar(30) UNIQUE, primary key (matricula));

SET [set um objeto mysql do tipo string que armazena apenas valores pr-definidos na criao da tabela, valores diferentes daqueles pr-definidos so desconsiderados no momento da insero de um registro]
Create table aluno (matricula varchar(12), sexo SET (M,F), nome varchar(30), primary key (matricula));

Outras restries para a criao de tabelas (no funcionais no mysql)


Mais restries:
CHECK [valida um valor antes da sua insero na tabela]
Create table aluno (matricula varchar(12), nome varchar(30) UNIQUE, rg varchar (20), primary key (matricula), idade int (3) CHECK (idade>18));

COMPUTED BY [calcula o valor no momento da insero do registro]


Create table aluno (matricula varchar(12), nome varchar(30), mensalidade float COMPUTED BY (nrodisciplinas * 80), nrodisciplinas int (2), primary key (matricula));

Comando alter table


Permite modificar a estrutura da tabela sem exclula Para adicionar uma coluna Alter table estado add descricao varchar(100); Para excluir uma coluna Alter table estado drop descricao; Para modificar o tipo uma coluna Alter table estado modify nome varchar(30); Para modificar o nome e o tipo de uma coluna Alter table estado change nome nomeestado varchar(30);

Comando alter table


Permite modificar a estrutura da tabela sem exclu-la
Para adicionar uma chave primria
Alter table aluno drop primary key, add primary key (matricula,rg);

Para alterar o nome da tabela


Alter table estado rename estado1;

Comandos teis sql - ddl


Criar o banco de dados: Create database [nomebanco]; Conectar ao banco de dados; Connect [nomebasedados]; ou use [nomebasedados] Visualizar as bases de dados criadas; Show databases; Visualizar as tabelas de um banco de dados; Show tables; Visualizar a estrutura de uma tabela; Describe [nomedatabela];

Relembrando
Linguagem de manipulao de dados (DML): Incluir de dados nas tabelas; Desenvolver consultas simples; Desenvolver com a clusula WHERE; Atualizar dados nas tabelas; Excluso de linhas (registros)

Inserindo dados
Insert into TABELA (col1,col2,..) values (val_col1, val_col2,..); Insert into estado (nome,uf) values (Mato Grosso,MT); Insert into livro (codigo,titulo,valor,datalancamento) values (0012,SQL o livro,123,2004-04-28);

Alterando dados
update TABELA set col1=val_col1, col2=val_col1,.. WHERE (OPCIONAL) cod3=val;
Se o WHERE no for utilizado todos os registros da tabela sero alterados

update estado set nome=Paran,uf=PR; update livro set titulo=SQL NOSSo livro,valor=300 where codigo=0012;

Deletando dados
delete from TABELA WHERE (OPCIONAL) cod3=val;
Se o WHERE no for utilizado todos os registros da tabela sero excludos

Delete from estado; Delete from livro where codigo=0012;

Consultando dados
select col1,col2,.. from TABELA WHERE (OPCIONAL) cod3=val;
Se o WHERE no for utilizado todos os registros da tabela apresentados Para visualizar todos os atributos utilize *

Select * from estado; select titulo, valor from livro where codigo=0012;

Consultando dados
WHERE sempre seguido de uma expresso lgica, a qual pode conter operadores de comparao (>, <, =, >=, <=, <>), operadores lgicos (AND, OR e NOT), e predicados prprios da linguagem SQL: LIKE, IN, EXISTS,

Consultando dados campos alfanumricos


Consultando livros que cujo ttulo inicia com os caracteres SQ
select titulo, valor from livro where titulo like SQ%; select nome, uf from estado where nome like santa%

Consultando livros onde a palavra livro aparece em qualquer parte do ttulo


select titulo, valor from livro where titulo like %livro%; select nome, uf from estado where nome like %cata%

Consultando dados campos alfanumricos


Consultando livros cujos ttulos terminam com a palavra livro
select titulo, valor from livro where titulo like %livro; select nome, uf from estado where nome like %rina%

Consultando dados
Consultando livros cujo valor menor que 100 reais
select titulo, valor from livro where valor < 100;

Consultando livros cujo valor menor que 100 reais e cujos ttulos terminam com a palavra livro
select titulo, valor from livro where valor < 100 and titulo like %livro;

Consultas - JUNES
Como consultar dados relacionados? Constantes em mais de uma tabela? Ex: Listar os todas as cidades do estado de santa catarina? select * from cidade, estado where cidade.cod_estado = estado.cod_estado and estado.nome=santa catarina;

Consultas - JUNES
Ex: Listar as UFs e suas respectivas cidades select estado.uf, cidade.nome from cidade, estado where cidade.cod_estado=estado.cod_estado ; OU select estado.uf, cidade.nome from cidade JOIN estado ON (cidade.cod_estado=estado.cod_estado) ;

EXEMPLO COMPLETO

Potrebbero piacerti anche