Prévia do material em texto
03/08/2010 1 Prof. Esp. André Ricardo Jovetta Banco de Dados II 2 � A linguagem SQL representa o padrão para linguagens de banco de dados relacionais; � SQL -linguagem de consulta Estruturada. Banco de Dados II 3 � A linguagem SQL é divididas em grupos: ◦ Linguagem de definição de dados (Data-definition Language –DDL). A SQL DDL proporciona comandos para a definição de esquemas de relações, exclusão de relações, criação de índices e modificação nos esquemas de relações; ◦ Linguagem interativa de manipulação de dados (Data-manipulation Language – DML). A SQL DML abrange uma linguagem de consulta baseada tanto na álgebra relacional quanto no cálculo relacional de tuplas. Engloba também comandos para inserção, exclusão e modificação de tuplas no banco de dados; � 0 conjunto das relações em um banco de dados deve ser especificado para o sistema por meio de uma linguagem de definição de dados (DDL); � A SQL DDL permite não só a especificação de um conjunto de relações, como também informações acerca de cada uma das relações, incluindo: ◦ O esquema de cada relação. ◦ O domínio dos valores associados a cada atributo. ◦ As regras de integridade. 4Banco de Dados II 03/08/2010 2 � Principais comandos: ◦ create database nome_do_banco: cria um banco de dados; ◦ create table: cria as tabelas de um banco de dados; ◦ primary key: inclui a lista dos atributos que constituem a chave primária; ◦ foreign key: inclui tanto a relação dos atributos que constituem a chave estrangeira quanto o nome da relação à qual a chave estrangeira faz referência; Banco de Dados II 5 � char(n) char(n) char(n) char(n) é uma cadeia de caracteres de tamanho fixo, com o tamanho nnnn definido pelo usuário; � varchar(n) varchar(n) varchar(n) varchar(n) é uma cadeia de caracteres de tamanho variável, com o tamanho nnnn máximo definido pelo usuário; � intintintint é um inteiro; � numeric(p,d) numeric(p,d) numeric(p,d) numeric(p,d) é um número de ponto fixo cuja precisão é definida pelo usuário; Banco de Dados II 6 � float(n) float(n) float(n) float(n) é um número de ponto flutuante com a precisão definida pelo usuário em pelo menos nnnn dígitos; � datedatedatedate é um calendário contendo um ano (com quatro dígitos), mês e dia do mês; � timetimetimetime representa horário, em horas, minutos e segundos. Banco de Dados II 7 � Tabela cliente create table cliente (nome_cliente char (20) not null, rua_cliente char (30) not null, cidade_cliente char (30) not null, primary key (nome_cliente)) Banco de Dados II 8 03/08/2010 3 � Tabela agência create table agencia (nome_agencia char (15) not null, cidade_agencia char (30), ativo numeric(16,2), primary key (nome_agencia)) Banco de Dados II 9 � Tabela conta create table conta (numero_conta char (10) not null, nome_agencia char (15), saldo numeric(12,2), primary key (numero_conta), foreign key (nome_agencia) references agencia) Banco de Dados II 10 � Tabela depositante create table depositante (nome_cliente char (20) not null, numero_conta char (10) not null, primary key (nome_cliente, numero_conta), foreign key (nome_cliente) references cliente, foreign key (numero_conta) references conta) Banco de Dados II 11 � Tabela de empréstimo create table emprestimo (numero_emprestimo char(10) not null, nome_agencia char(20) not null, quantia float not null, primary key (numero_emprestimo), foreign key (nome_agencia) references agencia) Banco de Dados II 12 03/08/2010 4 � Tabela tomador create table tomador (nome_cliente char(20) not null, numero_emprestimo char(10) not null, primary key (nome_cliente, numero_emprestimo), foreign key (nome_cliente) references cliente, foreign key (numero_emprestimo) references emprestimo) Banco de Dados II 13 � drop table: remove todas as informações de uma relação do banco de dados. ◦ Ex: drop table cliente � alter table: adiciona, exclui e renomeia atributos a uma relação existente. � Ex1: alter table agencia add estado varchar(2) � Ex2: alter table agencia drop estado � Ex3: alter table agencia rename estado to cidade_estado Banco de Dados II 14 � Para inserir dados em uma relação podemos especificar uma tupla a ser inserida ou escrever uma consulta cujo resultado é um conjunto de tuplas a inserir; � As tuplas a inserir devem possuir a ordem correta; � Um comando insert simples é um pedido para inserção de uma tupla; Banco de Dados II 15 “Inserir a informação que existe na agência de Perryridge, cidade de Araras e que ela tem um ativo de 1200 dólares” Insert into agencia values (’ Perryridge’, ‘Araras’, 1200.00) � Para ajudar os usuários que não lembram da ordem desses atributos, a SQL permite a especificação desses atributos como parte do comando insert. Insert into agencia (nome_agencia, cidade_agencia, ativo) values (’ Perryridge’, ‘Araras’, 1200.00) Banco de Dados II 16 03/08/2010 5 � Mais genericamente, podemos querer inserir tuplas de acordo com o resultado da consulta; “Oferecer um brinde para todos os clientes da agência Perryridge, uma nova caderneta de poupança de 200 dólares para cada conta empréstimo que eles tenham. O número do empréstimo serve como número da caderneta de poupança” Insert into conta select numero_emprestimo, nome_agencia, 200 from emprestimo where nome_agencia = ‘Perryridge’ Banco de Dados II 17 � É possível, na inserção de tuplas, fornecer valores somente para alguns atributos do esquema; Insert into conta values (‘A401’, 'Perryridge' ,null) Banco de Dados II 18 � Tabela cliente Banco de Dados II 19 nome_clientenome_clientenome_clientenome_cliente rua_crua_crua_crua_clientelientelienteliente cidade_clientecidade_clientecidade_clientecidade_cliente Jones Main Harrison Smith North Rye Hayes Main Harrison Curry North Rye Lindsay Park Pittsfield Turner Putnam Stamford Williams Nassau Princeton Adams Spring Pittsfield Johnson Alma Palo alto Glenn Sand Hill Woodside Brooks Senator Brooklyn Green Walnut Stamford � Tabela agencia Banco de Dados II 20 nome_agencianome_agencianome_agencianome_agencia cidade_agenciacidade_agenciacidade_agenciacidade_agencia ativoativoativoativo Downtown Brooklyn 9000000 Redwood Palo Alto 2100000 Perryridge Horseneck 1700000 Mianus Horseneck 400000 Round Hill Horseneck 8000000 Pownal Bennington 3000000 North town Rye 3700000 Brighton Brooklyn 7100000 03/08/2010 6 � Tabela emprestimo Banco de Dados II 21 numero_emprestimo nome_agencia quantia L17 Downtown 1000 L23 Redwood 2000 L15 Perryridge 1500 L14 Downtown 1500 L93 Mianus 500 L11 Round Hill 900 L16 Perryridge 1300 � Tabela tomador Banco de Dados II 22 nome_clientenome_clientenome_clientenome_cliente numero_emprestimonumero_emprestimonumero_emprestimonumero_emprestimo Jones L17 Smith L23 Hayes L15 Johnson L14 Curry L93 Smith L11 Williams L17 Adams L16 � Tabela conta Banco de Dados II 23 numero_contanumero_contanumero_contanumero_conta nome_agencianome_agencianome_agencianome_agencia saldosaldosaldosaldo A101 Downtown 500 A215 Mianus 700 A102 Perryridge 700 A305 Round Hill 350 A201 Brighton 900 A222 Redwood 700 A217 Brighton 750 � Tabela depositante Banco de Dados II 24 nome_clientenome_clientenome_clientenome_cliente numero_contanumero_contanumero_contanumero_conta Johnson A101 Smith A215 Hayes A102 Turner A305 Johnson A201 Jones A217 Lindsay A222 03/08/2010 7 � Um pedido para remoção de dados é expresso muitas vezes do mesmo modo que uma consulta; � Podemos remover somente tuplas inteiras; � Não podemos excluir valores de um atributo em particular; � Em SQL, a remoção é expressa por: delete from r where P � Em que P representa um predicado e r, uma relação. Banco de Dados II 25 Delete from conta where nome_agencia = ‘Perryridge’ “Remova os registros de todas as contas com saldos abaixo da média do banco” delete from conta where saldoempréstimo” delete from emprestimo � Outros exemplos da cláusula delete: “Remova todos os empréstimos com total entre 1.300 e 1500 dólares” delete from emprestimo where total between 1300 and 1500 Banco de Dados II 27 “Remova todos os registros de contas do cliente Smith.” delete from depositante where nome_cliente = ‘Smith’ “Remova todas as contas de cada uma das agências localizadas em Perryridge” delete from depositante where numero_conta in (select numero_conta from conta where nome_agencia = 'Perryridge'); Banco de Dados II 28 03/08/2010 8 � Em determinadas situações, podemos querer modificar valores das tuplas sem, no entanto, alterar todos os valores; “Suponha que o pagamento da taxa de juros anual esteja sendo efetuado e todos os saldos deverão ser acrescidos de 5 por cento” update conta set saldo = saldo *1.05 Banco de Dados II 29 “Suponha agora que contas com saldo superior a 10 mil dólares recebam 6 por cento de juros, embora todas as outras recebam 5 por cento.” update conta set saldo = saldo * 1.06 where saldo > 700 update conta set saldo = saldo * 1,05 where saldo