Programação em Banco de Dados Dailton Trevisan prof@tontrevisan.com.br
PLANO DE ENSINO E APRENDIZAGEM
Plano de Ensino e Aprendizagem Objetivos Aplicação da linguagem SQL através de comandos de inserção, alteração, consulta. Aplicação de Stored Procedures e Triggers. Conhecimentos de segurança e integridade de dados e tópicos avançadas em Ementa banco de dados. Linguagem de Consulta (SQL): comandos de inserção, alteração, consulta e estrutura. Stored Procedures e Triggers. Processamento e otimização de consulta. Gerenciamento de transações. Controle de concorrência. Recuperação de falhas. Segurança e integridade de dados. Análise comparativa dos SGBDs
Plano de Ensino e Aprendizagem Conteúdo Programático C 1. Linguagem de Consulta (SQL): comandos de inserção, alteração, consulta e estrutura. Funções de agregação Extensões da linguagem Stored Procedures e Triggers. 2. Processamento e otimização de consulta Controle de concorrência: Problemas de concorrência Bloqueio Seriabilidade Níveis de isolamento Recursos de SQL 3. Recuperação de falhas: Gerenciamento de transações
Plano de Ensino e Aprendizagem
Vamos praticar... Apague os seguintes dados da tabela tbclientes : Todos os clientes do estado de MG DELETE FROM tbclientes WHERE UF = 'MG'; Clientes com faturamento maior ou igual a R$50.000,00 DELETE FROM tbclientes WHERE FATURAMENTO >= 'R$50.000,00'; OBS: NESSE MOMENTO IGNORAR DATATYPE. Apagar o cliente Miami DELETE FROM tbclientes WHERE ID = 3;
Vamos praticar... O restaurante Di Treviso, te contratou para dar manutenções no banco de dados de cardápio, e precisa que voce faça o seguinte trabalho: 1-) Inserir novo prato, "Risoto Tomate Seco", que contem ingredientes "Arroz arbóreo, Vinho, Tomate Seco" ao preço de R$ 27,90 com margem de 20% de lucro. 2-) Inserir novo prato, "Risoto de Camarão", que contem ingredientes "Arroz branco, camarão, pimentão verde" ao preço de R$ 36,90 com margem de 5% de lucro. 3-) Incluir o ingrediente básico "Azeitona" ao "Pasta al pesto brasileiro". 4-) Alterar o preço para R$31,25 e margem para 35% do prato "Pasta al pesto brasileiro". 5-) Apagar o Prato Pasta Peito de Chester.
Vamos praticar...
FUNÇÕES SQL
A linguagem SQL possui uma série de funções. Com o uso delas podemos facilitar o trabalho de manipular dados, caracteres, numeros, datas, conversão de tipos, etc.
Funções Numéricas de Estatística AVG(), COUNT(), MAX(), MIN(), SUM() Produzem um único resultado
AVG() retorna o valor médio de uma coluna numérica. Sintaxe: SELECT AVG(coluna) FROM tabela;
AVG() Exemplos: SELECT AVG(preco) AS precomedio FROM tbprodutos; SELECT nomeproduto, preco FROM tbprodutos WHERE preco > (SELECT AVG(preco) FROM tbprodutos);
AVG() Exemplos: SELECT nomealuno, notafinal FROM tbalunos WHERE notafinal > (SELECT AVG(notaFinal) FROM tbalunos); SELECT AVG(DISTINCT salario) AS mediasalarial FROM tbempregados WHERE salario > 678;
AVG() Exemplos: SELECT AVG(vendas * 0.10) AS [comissao de Vendas] FROM tbpedidos;
A função COUNT() retorna o número de linhas/registros que corresponde a um determinado critério. Sintaxe: SELECT COUNT(coluna) FROM tabela;
COUNT() Exemplos: SELECT COUNT(*) AS numerodepedidos FROM tbpedidos; SELECT COUNT(nomeCliente) AS TotalPedidosErika FROM tbpedidos WHERE nomecliente='erika';
COUNT() Exemplos: SELECT COUNT(DISTINCT CustomerID) AS numerodeclientes FROM tbpedidos; SELECT COUNT(*) FROM (SELECT DISTINCT idcliente FROM tbpedidos WHERE datapedido >= '01/01/2013') AS total;
A função MAX() retorna o maior valor de uma determinada coluna. Sintaxe: SELECT MAX(coluna) FROM tabela;
MAX() Exemplos: SELECT MAX(tempoGasto) FROM tbonibusviagens;
MAX() Exemplos: SELECT MAX(salario) AS "Maior Salário da Empresa" FROM tbfuncionarios; SELECT MAX(preco) AS MaiorPreço FROM tbprodutos WHERE tipoproduto = 'Cerveja';
A função MIN() retorna o maior valor de uma determinada coluna. Sintaxe: SELECT MIN(coluna) FROM tabela;
MIN() Exemplos: SELECT nomeatleta, sexoatleta FROM tbatletas WHERE categoria = '400 metros rasos' AND cronometragem = (SELECT MIN(cronometragem) FROM tbatletas);
A função SUM() retorna a SOMA de uma coluna numérica. Sintaxe: SELECT SUM(coluna) FROM tabela;
SUM() Exemplos: SELECT SUM(salario) as "Total dos Salários" FROM tbfuncionarios WHERE salario > 678;
SUM() Exemplos: SELECT SUM(lucroBruto - Despesa) AS lucroliquido FROM TbBoschTransacoes;
A função GREATEST() do ORACLE retorna o maior valor de uma LISTA. Sintaxe: SELECT GREATEST(VALOR1, VALOR2, VALOR3,...);
GREATEST() Exemplos: SELECT GREATEST(2,3,1); GREATEST(2, 5, 12, 3) Retornará 3 GREATEST('maça', 'laranja', 'banana') GREATEST('banana', 'banani', 'banane') Retornará 'laranja' Retornará 'banani'
A função LEAST() do ORACLE retorna o menor valor de uma LISTA. Sintaxe: SELECT GREATEST(VALOR1, VALOR2, VALOR3,...);
Funções de Manipulação de Caracteres UCASE(), LCASE(), MID(), LEN(), ROUND(), NOW(), FORMAT() Estas funções aceitam como argumento(s) caracteres e devolvem caracteres ou valores numérico
As funções UCASE() e LCASE() convertem o valor de um campo em maiúsculo e minúsculo respectivamente. Sintaxe: SELECT UCASE(coluna) FROM tabela; SELECT LCASE(coluna) FROM tabela; Obs: No SQLServer o nome da função é UPPER e LOWER.
A função INITCAP() impõe uma letra maiúscula na primeira letra de cada palavra e minúsculas nas restantes. Sintaxe: SELECT INITCAP(coluna) FROM tabela;
INITCAP() Exemplos:
A função CONCAT() devolve a concatenação de string1 com string2. É uma alternativa aos operadores e + dos SGBD s. Sintaxe: SELECT CONCAT(coluna1,coluna2) FROM tabela;
CONCAT() Exemplos:
A função SUBSTRING é utilizada para obter uma parte dos dados. MySQL: SUBSTR( ), SUBSTRING( ) Oracle: SUBSTR( ) SQL Server: SUBSTRING( ) Alguns outros SGBD s: MID( ) Sintaxe: SELECT SUBSTR(coluna,inicio[,tamanho]) FROM tabela;
SUBSTR() Exemplos: SELECT SUBSTR(cidade,1,3) AS cidadeabreviada FROM tbclientes WHERE cidade = 'Los Angeles' or cidade = 'San Diego';
SUBSTR() Exemplos: SELECT (sobrenome + ',' + SPACE(1) + SUBSTRING(nome, 1, 1) + '.') AS nomeautor FROM tbpublicacoes ORDER BY sobrenome, nome;
A função LEN é utilizada para obter o tamanho (comprimento) de uma string. MySQL: LENGTH ( ) Oracle: LENGTH ( ) SQL Server: LEN ( ) Sintaxe: SELECT LEN(coluna) FROM tabela;
LEN() Exemplos: SELECT nomeproduto FROM tbprodutos WHERE LEN(nomeProduto) < 20;
A função REPLACE() atualiza uma cadeia de caracteres. Sintaxe: REPLACE(str1, str2, str3); REPLACE(coluna, antigo, novo)
REPLACE() Exemplos: SELECT REPLACE (estado, 'San', 'São') FROM tbestados; UPDATE tbclientes SET endereco = REPLACE(endereco,'Street','Rua') ;
Função de Exibição de Data NOW(), SYSDATE() OBS: No próximo material veremos funções de MANIPULAÇÃO / OPERAÇÃO de datas
A função NOW() retorna a data e hora atual configurada no servidor do banco. MySQL: SYSDATE ( ) Oracle: SYSDATE ( ) SQL Server: NOW ( ) e GETDATE( ) Sintaxe: SELECT NOW() AS datahoraagora;
NOW() Exemplos: SELECT titulonoticia, corponoticia, datapublicacao FROM tbnoticias WHERE dataexpiracao < NOW();
Vamos Praticar... Crie apenas uma seleção que atenda os requisitos abaixo: SELECIONAR - Tamanho de caracteres de cada produto (LEN) e apelide como "nprodutoscaracteres" - Apenas metade (50%) do nome do produto (SUBSTR) em caixa alta (UCASE). Utilize o LEN. Apelide de NomeDoProduto. - data e hora atual (NOW) e apelide de "DataAgora" QUANDO - Categoria for "Celular" ou "SmartPhone" ou "Mobile". ORDENADO ASCENDENTEMENTE POR - Categoria - Nome do Produto
7 Mobile Samsung 4GDUOS Vamos Praticar... Products productid Category ProductName Price 400.99 2 CellPhone Nokia Ti3gs 1890 6 Laptop HP i7 2tb 610.99
Vamos Praticar... Ainda utilizando a tabela modelo Products, crie as seleções que atenda os requisitos abaixo: 1- Mostre o total de registros da tabela Products de somente valores (price) distintos. Apelide o total. 2- Mostre a soma do preço de todos os produtos, que o preço seja maior que o preço médio e menor que o produto mais caro.
Banco de Dados Sintaxe básica de CRIAÇÃO de uma tabela: CREATE TABLE nome_da_tabela ( nome_campo tipo_dado [[NOT] NULL], nome_campo1 tipo_dado [[NOT] NULL], nome_campo2 tipo_dado [[NOT] NULL], nome_campo3 tipo_dado [[NOT] NULL],... );
Banco de Dados TINYINT: Valores numéricos inteiros variando de 0 até 256 SMALLINT: Valores numéricos inteiros variando de 32.768 até 32.767 BIGINT: Valores numéricos inteiros variando de 92.23.372.036.854.775.808 até 9.223.372.036.854.775.807 BIT: Somente pode assumir os valores 0 ou 1. Utilizado para armazenar valores lógicos. DECIMAL(I,D) e NUMERIC(I,D): Armazenam valores numéricos inteiros com casas decimais utilizando precisão. I deve ser substituído pela quantidade de dígitos total do número e D deve ser substituído pela quantidade de dígitos da parte decimal (após a vírgula). DECIMAL e NUMERIC possuem a mesma funcionalidade, porém DECIMAL faz parte do padrão ANSI e NUMERIC é mantido por compatibilidade. Por exemplo, DECIMAL(8,2) armazena valores numéricos decimais variando de 999999,99 até 999999,99 SMALLMONEY: Valores numéricos decimais variando de -214.748,3648 até 214.748,3647 MONEY: Valores numéricos decimais variando de -922.337.203.685.477,5808 até 922.337.203.685.477,5807 REAL: Valores numéricos aproximados com precisão de ponto flutuante, indo de -3.40E + 38 até 3.40E + 38 FLOAT: Valores numéricos aproximados com precisão de ponto flutuante, indo de -1.79E + 308 até 1.79E + 308 SMALLDATETIME: Armazena hora e data variando de 1 de janeiro de 1900 até 6 de junho de 2079. A precisão de hora é armazenada até os segundos. CHAR(N): Armazena N caracteres fixos (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco. VARCHAR(N): Armazena N caracteres (até 8.000) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido. TEXT: Armazena caracteres (até 2.147.483.647) no formato não Unicode. Se a quantidade de caracteres armazenada no campo for menor que 2.147.483.647, o resto do campo não é preenchido. Procure não utilizar este tipo de dado diretamente, pois existem funções específicas para trabalhar com este tipo de dado. NCHAR(N): Armazena N caracteres fixos (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo é preenchido com espaços em branco.
Banco de Dados Antes de criar uma nova tabela, temos que entender quais tipo de dados podemos inserir nela. INT: Valores numéricos inteiros variando de -2.147.483.648 até 2.147.483.647 NVARCHAR(N): Armazena N caracteres (até 4.000) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que o tamanho total especificado em N, o resto do campo não é preenchido. NTEXT: Armazena caracteres (até 1.073.741.823) no formato Unicode. Se a quantidade de caracteres armazenada no campo for menor que 1.073.741.823, o resto do campo não é preenchido. DATETIME: Armazena hora e data variando de 1 de janeiro de 1753 até 31 de Dezembro de 9999. A precisão de hora é armazenada até os centésimos de segundos.
Banco de Dados Inicialmente vamos utilizar os seguintes datatypes: - VARCHAR(255) - INT() - DOUBLE(tamanho,digitos) - TEXT ou NTEXT - DATE() - DATETIME()
Banco de Dados Exemplo prático de CRIAÇÃO de uma tabela: CREATE TABLE tbfornecedores ( codigo INT NOT NULL, nome VARCHAR(30) NOT NULL, datanasc DATETIME NULL, descricao TEXT NULL )
Banco de Dados Como criar uma tabela a partir de outra tabela copiando valores? SINTAXE: CREATE TABLE new_table AS (SELECT * FROM old_table); EXEMPLO: CREATE TABLE suppliers AS (SELECT id, address, city, state, zipcode FROM companies WHERE id > 1000);
Vamos praticar... Crie uma tabela para um sistema simples de Acesso, com login e senha.
Vamos praticar... Você foi contratado para criar um sistema de cadastro de clientes. O contratante deseja saber quais são seus clientes e qual área de atuação. Quer poder enviar mala direta por correio e email marketing, e deseja saber quais foram as ultimas compras, caso tenha sido realizada. Crie uma tabela que atenda as especificações do contratante. Após isso inclua 3 clientes manualmente para testar se a tabela foi criada corretamente.