Profº Aldo Rocha Banco de Dados
Aula Passada Na aula passada nós iniciamos a utilização e conhecimento de comandos voltados para implementação de rotinas em banco de dados. Os comandos apresentados foram: CREATE DATABASE Utilizado para? USE DATABASE Utilizado para? CREATE TABLE - Utilizado para? DESC - Utilizado para? DROP TABLE - Utilizado para? INSERT INTO Utilizado para? SELECT FROM Utilizado para?
Aula de Hoje Incluindo restrições Falando sobre o NULL: Imagine que você é responsável por gerenciar uma aplicação a qual os registro do banco provém de um formulário da aplicação conforme demonstrado abaixo:
Alguns campos deste formulário são de fundamental importância para a gestão da informação, porém o usuário do sistema acaba deixando em branco. Como resolver este problema? PARA RESOLVER IREMOS ADICIONAR A LINHA DE COMANDO NOT NULL EM NOSSO CÓDIGO SQL. Primeiro vamos ver a estrutura da tabela pessoa criada na aula passada. Como fazemos para ver a estrutura criada para a tabela pessoa? MUITO BEM! Utilizando o comando DESC!!
Agora vamos criar uma tabela informando quais campos não poderão ter valores nulos. CREATE TABLE meus_contatos ( sobrenome VARCHAR (30) NOT NULL, primeiro_nome VARCHAR (20) NOT NULL, email VARCHAR (50), Sexo CHAR (1), profissao VARCHAR (20) ); Após criar esta tabela tente inserir um valor sem informar o campo primeiro nome e veremos qual mensagem será emitida pelo SGBD. Para finalizar dê um comando DESC na tabela meus_contatos.
O usuário do meu sistema reclamou que sempre é obrigado a preencher campos que já tem valores definidos. E agora como resolver isso? Vamos resolver isso definindo as colunas como DEFAULT aplicando um valor padrão sempre que aquela coluna não for preenchida em um INSERT into. CREATE TABLE lista_sanduiches ( nome_sanduiche VARCHAR(10) NOT NULL, tp_sanduiche VARCHAR (10) NOT NULL, custo_sanduiche DEC (3,2) NOT NULL DEFAULT 1.00 ); Agora vamos inserir um registro nesta tabela sem setar nenhum valor para a coluna custo_sanduiche
DINÂMICA DO DIA Se você quer ver a estrutura de sua tabela utilize o comando ; O comando pode ser usado para jogar sua tabela fora, use com cuidado! Para inserir seus dados na tabela utilize uma das variações do comando ; Um valor é um valor indefinido, ele não se iguala a zero e nem a vazio; Colunas que não tiveram valor atribuído por são ajustadas para por padrão; Para que a tabela não aceite um valor nulo, é necessário atribuí-la como ; Ao criar uma tabela com o comando você pode definir colunas como para que estas recebam um valor pré definido quando um registro para aquela trouxer o valor vazio para uma coluna.
É hora de aprimorar a utilização do meu comando SELECT Bom imaginemos que na tabela PESSOA que criamos na aula passada temos milhares de registros e para que possamos localizar um registro do Paulo de Sergipe e necessário algo a mais em conjunto com o comando SELECT FROM. Estamos falando da cláusula WHERE Esta cláusula dá ao SQL algo específico para procurar, limita os resultados e exibe apenas as linhas que são compatíveis com a condição.
Já que temos a opção de aprimorar a busca com a cláusula WHERE Mãos a Obra! Pergunta 1: Quantos registros vocês tem na tabela pessoa? Ação 1: Insira mais 3 registros com dados diferentes. Agora execute o comando SELECT em conjunto com WHERE e faça dois tipos de filtro e apresente ao professor. EX: SELECT *FROM meus_contatos O que é essa *?
Relembrando a aula passada: NOTA: Os tipos de dados VARCHAR, CHAR, BLOB, DATE E TIME precisam de ASPAS simples, Os tipos numéricos como DEC e INT não precisam. Ex: INSERT INTO meus_contatos VALUES ('Rocha', 'Aldo, 'aldorochap@gmail.com','m', 'analista de TI', 29);
PROBLEMA COM ASPAS SIMPLES Na aula passada nos deparamos com um problema de ASPAS antes do PROMPT do que se trata? Aposto que há algo de errado com as aspas em nosso comando INSERT certo? EXATO! Em algum canto do seu código SQL tem uma aspa aberta que não foi fechada. Preste atenção!
Na tabela pessoa, insira dados que precisem de aspas simples. Como uma cidade americana por exemplo Grover's Mill. INSERT INTO pessoa VALUES
A Saga do guerreiro SELECT Nós já dominamos alguns GOLPES do SELECT, SELECT *, SELECT WHERE, SELECT com ASPAS SIMPLES mas quando o assunto é facilitas a consulta do usuário o nosso guerreiro é insaciável! Ele também poderá retornar as consultas para apenas aquelas colunas que o usuário deseja VER. Primeiro vamos inserir no BD a tabela bebidas, CREATE TABLE bebidas ( nome VARCHAR (25), ingrediente1 VARCHAR (20), ingrediente2 VARCHAR (20), quantidade1dec, quantidade2 DEC, instrucoes VARCHAR (255) ); INSIRAM alguns registros na tabela bebidas, suficientes para que vocês possam executar consultas por filtro.
REGISTRANDO... INSERT INTO bebidas VALUES ( 'Acorda Alice', 'laranja', 'pessego, 2, 1.5, 'Bata com gelo e misture leite moça'); INSERT INTO bebidas VALUES ( 'IRON MAIDEN', 'abacaxi', 'eucalipto', 3, 0.5, 'misture com vodka e curta um bom METAL'); INSERT INTO bebidas VALUES ( 'Ivete Sangalo', 'abacaxi', 'morango', 4, 2,8, 'Acrescente gelo e boa festa');
AGORA vamos fazer um SELECT apenas nas colunas nome e ingrediente1. COMO MONTAR ESSE SELECT? SELECT nome, ingrediente1 from SUCOS Alguém pode por gentileza vir aqui e desenhar o resultado mostrado pelo SGBD?
VAMOS NOVAMENTE COMBINAR COM A CLÁUSULA WHERE Quero que vocês façam uma consulta que traga todos os sucos que contém abacaxi no ingrediente1 RESPOSTA: SELECT from bebidas WHERE ingrediente1='abacaxi';
VAMOS elevar o grau da CONSULTA? COMBINANDO AS CONSULTAS: Imaginem a seguinte situação, o fulano fez uma pesquisa sobre os pães das padarias existentes no bairro com o objetivo de fazer um comparativo. Nomes hora data tipo nota comentáio Poiares 06:43 05/03 Francês 6 Muito bromato VILPAN 08h 06/03 Forma 5 Muito tostado Humaitá 18:00 07/03 Carequinha 6 Não são fresquinhos mais são gostosos PalasPAN 17:15 08/03 Bagueti 7 Morno, mas não quente DuBairro 16:00 09/03 Massa Fina 6 Faltou tostar mais Santa Clara 7:30 10/03 Roseta 10 Muuuuuito macio, quentinho e gostoso.
Prática: Queremos encontrar sem ficar caçando o pão da tabela registrada no banco de dados do Fulano com: Melhor Nota; Comando: Tipo Carequinha Comando
UTILIZANDO A TÉCNICA DE COMBINAÇÃO Podemos dar conta das duas coisas que estamos procurando em apenas um consulta? Para isso vamos apresentar mais uma cláusula. Trata-se do AND, que combinado ao WHERE, Mata dois coelhos com uma cajadada só SELECT nomes FROM padarias WHERE nota = 10 AND tipo = 'Roseta'
O que aprendemos hoje? COMANDOS ESTUDADOS ATÉ AQUI: NULL, WHERE, DEFAULT, AND.
Professor uma dúvida, para encontrar valores numéricos? É a mesma coisa? Vamos utilizar a tabela padaria e ratificar se o comando abaixo é aceito pelo SGBD: SELECT Nomes from Padarias WHERE tipo = 'Francês' AND nota = 10; Muito bem! Já que funciona seria pedir muito eu conseguir todos os registros relacionados aos pães com nota maior que 6?
Podemos trazer esse resultado fazendo mais uma combinação da cláusula WHERE com: (=) Todos já conhecemos esse aí; <> Esse é um novato e significa não igual; < Sinal de menos, exibe todos os valores menores que a condição; > é claro que há também o sinal de maior; <= Qualquer que for menor ou igual a condição; >= e também há o maior ou igual;
PROFESSOR, isso aí também serve para letras? COM TODA CERTEZA, Vejam um exemplo. SELECT nome FROM bebidas WHERE Ingrediente1 >= 'A' AND Ingrediente2 < 'G' Professor não entendi NADA! O que isso significa? Essa consulta irá exibir as bebidas cuja a primeira letra seja A ou posterior, mas que venham antes de G.