Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP...

11
Projeto e Administração de Banco de Dados Linguagens de Definição de Manipulação de Dados

Transcript of Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP...

Page 1: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Administração de Banco de Dados

Linguagens de Definição de Manipulação de Dados

Page 2: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 2

2

Objetivo

Nesta unidade você vai estudar sobre a linguagem SQL e os principais comandos para

definição e manipulação de dados.

Introdução

O SQL (Structured Query Language) é uma linguagem de consulta a banco de dados

criada na década de 70 na IBM, com base em conceitos da Álgebra relacional. Foi desenvolvida

para padronização dos sistemas gerenciadores de banco de dados relacionais existentes.

Não demorou muito e várias outras empresas estavam customizando o SQL e isso

começou a gerar grandes problemas. Foi quando a American National Standards Institute (ANSI)

em 1986 adaptou e criou um padrão para a linguagem SQL. Por esse motivo é comum vermos

falar que um comando é do padrão ANSI, ou seja, ele é “homologado” por este instituto. Ao longo

do tempo o SQL foi revisto (1992, 1999, 2003) para incrementar novas funcionalidades e, assim,

aumentar a capacidade e poder da mesma.

A importância da padronização do SQL para os SGBD’s, e mais especificamente para quem

trabalha com eles é enorme, tendo em vista que por ser um padrão para os bancos de dados

relacionais (o tipo de banco de dados mais usado atualmente) é possível, por exemplo, criar uma

consulta a um banco de dados Oracle e essa mesma consulta funcione no SQL Server ou no

PostgreSQL, entre outros.

Tal possibilidade permite, por exemplo, que desenvolvedores possam construir consultas

para a maioria dos casos sem precisar conhecer um determinado banco, ou seja, apenas

conhecendo a linguagem SQL é possível fazer uma consulta que funcione em vários bancos

diferentes. Isso é muito importante, pois evita sobrecarregar o DBA ou o AD com coisas simples,

sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Tal poder, capacidade e o mais importante: facilidade, fazem da linguagem SQL hoje um

dos maiores sucessos da TI, sendo mais notório quando olhamos para outras áreas que não tem

algum meio de padronização, forçando que uma pessoa precise de horas de estudo para fazer

coisas simples somente pelo fato de ter de fazê-lo em outra ferramenta.

Cada SGBD implementa acréscimos na linguagem SQL com o intuito de dar ainda mais

poder e consequentemente ter diferenciais com relação aos seus concorrentes. Desta forma,

iremos padronizar nossos estudos a partir de agora usando o MySQL.

Ah! Caso precise de ajuda, acesse os vídeos da disciplina! Preparamos alguns tutoriais e

explicações sobre esta aula!

Page 3: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 3

3

;

Comandos SQL

Os vários comandos do SQL foram organizados em categorias, para que nosso

aprendizado seja facilitado. Desta forma, podemos encontrar na literatura os seguintes conteúdos:

DDL - Data Definition Language (Linguagem de Definição de Dados) Permite ao desenvolvedor definir tabelas e elementos associados. Utiliza como comandos

principais o CREATE e o DROP, alguns sistemas de banco de dados utilizam o ALTER.

DML - Data Manipulation Language (Linguagem de Manipulação de Dados) É utilizado para realizar inclusões, consultas, exclusões e alterações de dados. Utiliza os

comandos INSERT, SELECT, UPDATE e DELETE.

DCL - Data Control Language (Linguagem de Controle de Dados) Controla os aspectos de autorização de dados e a utilização de licenças por usuários. Os

principais comandos são GRANT e REVOKE

DTL - Data Transaction Language (Linguagem de Transação de Dados) Utilizado pelos desenvolvedores em transações. Os principais comandos são COMMIT e

ROLLBACK

DQL - Data Query Language (Linguagem de Consulta de Dados) O mais importante dentre estes, pois consultas são realizadas a todo instante. O comando

que é utilizado pelo DQL é o SELECT. Coloquei o SELECT também em DML pois algumas

literaturas constam que SELECT também é DML (concordo em partes).

Em nossa disciplina, daremos um foco especial nos comandos DML, DDL e DQL. Nesta

aula, em específico, estudaremos os comandos DDL e DML usados no MySQL. Preparado? Então

vamos ao estudo!

Page 4: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 4

4

Criação de Banco de Dados

Agora que você está pronto para começar com os códigos SQL! O primeiro comando que

vamos estudar é o comando CREATE DATABASE (Criar banco de dados). Para exemplificar seu

uso, vamos mostrar a criação de um banco de dados chamado biblioteca. Veja como:

CREATE DATABASE biblioteca;

Isto é o suficiente para criar um banco de dados no MySQL. Experimente criar um outro por

conta própria. Se quiser ver a relação dos bancos de dados criados use SHOW:

SHOW DATABASES;

Só pra lembrar, os comandos MySQL devem terminar sempre com “;” no final. Caso deseje

remover um banco de dados, usamos o comando DROP. Mas cuidado, este comando não tem

volta, é irreversível. Tenha cuidado com o que vai fazer. Veja seu uso:

DROP DATABASE biblioteca;

Criação de Tabelas

O próximo passo, após criar o seu banco de dados, é criar tabelas. Antes de efetuar

qualquer comando de criação de tabelas vamos informar ao SGBD que desejamos usar um banco

específico. Trata-se do comando USE <nome do banco>. Veja o exemplo:

USE biblioteca;

O SGDB só mantém ativo um banco de cada vez, então, sempre que quiser executar um

comando em outro banco, será necessário “usar” este antes de rodar o código!

Ok, agora que já estamos no banco correto (no Workbench, observe que o nome dele ficará

negrito na lista ao lado – caso não esteja, clique no botão de atualizar), vamos aos comandos de

criação de tabelas. A sintaxe padrão é esta abaixo. Observe que os [colchetes] representam

valores opcionais:

CREATE TABLE nome_tabela

(

coluna1 tipo [not null] [auto_increment] PRIMARY KEY,

coluna2 tipo [not null],

...

colunaN tipo [not null] [REFERENCES tabela_referenciada (campo_referenciado)]

);

Page 5: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 5

5

Veja descrição dos principais comandos:

NOT NULL – esta coluna não pode ser nula, seu preenchimento é obrigatório

AUTO_INCREMENT – esta coluna ganhará numeração automática, para cada novo

registro. Não será necessário preencher este campo (o SGBD vai administrá-lo)

PRIMARY KEY – chave primária da tabela (antigo “atributo determinante”)

REFERENCES – esta coluna faz referência a outra, de outra tabela. Ocorre sempre

que esta coluna surgiu fruto de uma decomposição de 1:N (chave estrangeira)

Outra coisa importante é, desde já, conhecer os tipos de dados possíveis. Isto já está

definido no modelo físico, mas vamos relembrar aqui os principais tipos de dados no MySQL:

Tipo Descrição

VARCHAR(50) Texto de tamanho variável (50 caracteres)

TEXT Texto muito longo (tamanho máximo de 2 gigabytes!)

INT Número inteiro de 4 bits (limite: 2.147.483.647)

DECIMAL(8,2) Número real de tamanho configurável (8 dígitos totais, sendo 2 deles

para casas decimais). Ou seja, neste caso serão 6 dígitos antes e 2

depois da casa decimal.

DATE Datas em qualquer época

TIMESTAMP Data, hora e milésimos de segundo de datas que ocorreram depois de

01/01/1970. Não pode ser usado para data de nascimento, mas é útil

para registrar ocorrências do dia a dia da empresa.

Vamos ver um exemplo real? Vamos criar uma tabela para clientes. Esta tabela possui 3

colunas, sendo que uma delas (CLI_BAI_CODIGO) é uma chave estrangeira que armazena o

código do bairro de cada cliente (qual bairro o cliente mora). Veja abaixo:

CREATE TABLE TB_CLIENTES

(

CLI_CODIGO INT NOT NULL auto_increment PRIMARY KEY,

CLI_NOME VARCHAR(30) NOT NULL,

CLI_BAI_CODIGO INT REFERENCES TB_BAIRROS(BAI_CODIGO)

);

Caso você necessite criar uma chave primária dupla em alguma tabela, basta declarar o

comando PRIMARY KEY apenas na última linha, como no exemplo a seguir:

CREATE TABLE nome_tabela

(

coluna1 tipo [not null],

coluna2 tipo [not null],

...

Page 6: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 6

6

colunaN tipo [not null],

PRIMARY KEY (coluna1, coluna2)

);

Que tal um exemplo prático? Vamos ver o exemplo de um cadastro de carros (em uma loja

de carros). O projetista deste banco criou três tabelas, uma para os carros, uma para as marcas

e uma para os estados e de conservação. As tabelas de marcas e estados de conservação são

independentes, porém perceba que a de carros não. Ao cadastrar um carro eu sempre vou ter que

informar a marca e qual o estado de conservação!

O exemplo a única regrar neste caso é lembrar que devemos criar primeiramente as tabelas

independentes, e só então as tabelas que dependem das anteriores! Neste caso, criamos primeiro

Marcas e Estados de conservação para só então criar a tabela de carros! Veja o exemplo de

código abaixo, com a resposta para o modelo acima:

create database DB_AUTO;

use DB_AUTO;

create table TB_MARCAS (

MAR_CODIGO INT auto_increment PRIMARY KEY,

MAR_MARCA VARCHAR(50) NOT NULL

);

create table TB_ESTADOS_CONSERV (

EST_CODIGO INT auto_increment PRIMARY KEY,

EST_ESTADO VARCHAR(50) NOT NULL

);

create table TB_CARROS (

CAR_CODIGO INT auto_increment PRIMARY KEY,

CAR_PLACA VARCHAR(8) NOT NULL,

CAR_ANO INT NOT NULL,

CAR_EST_CODIGO INT NOT NULL REFERENCES TB_ESTADOS_CONSERV(EST_CODIGO),

CAR_MAR_CODIGO INT NOT NULL REFERENCES TB_MARCAS(MAR_CODIGO),

);

Page 7: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 7

7

Inserção de dados em uma tabela

Uma vez criada a estrutura, através dos comandos DDL (CREATE, DROP e USE),

podemos inserir os dados do nosso banco. Para inserir dados, usaremos o comando INSERT mas

lembro de antes de usar o comando INSERT, não esqueça de estar usando (USE) o banco correto.

A sintaxe padrão do comando é:

INSERT INTO TABELA

( CAMPO 1, CAMPO 2, CAMPO 3, CAMPO N)

VALUES

( VALOR 1, VALOR 2, VALOR 3, VALOR N)

Observe atentamente que para cada campo (no primeiro parêntesis), temos um valor

específico. Olhe o exemplo abaixo:

INSERT INTO TB_CLIENTES

( CLI_NOME, CLI_DATANASC, CLI_IDADE, CLI_BAI_CODIGO)

VALUES

( ‘Ari’, ’2013-12-31’, 33, 2 );

Observe algumas regras de funcionamento:

Não se deve informar no INSERT os campos AUTO_INCREMENT, pois a

numeração é gerada automaticamente. Nós não podemos informa-los, para não

causar conflito de numeração!

Campos de texto (VARCHAR(), TEXT) e de data (DATE, TIMESTAMP) devem ser

informados entre ‘aspas simples’.

Campos numéricos (INT, DECIMAL()) devem ser informados sem aspas

Casas decimais devem ser registradas com ponto (ex.: 7.5 ou 8.8 ou 10000.01)

Inserção de Mais de uma linha:

INSERT INTO TB_ANIMAIS

(ANI_NOME, ANI_IDADE, ANI_CLI_CODIGO)

VALUES

(‘Fifi’, 3, 15),

(‘Rex’, 5, 3),

(‘Pulguento’, 2, 15);

Testando itens inseridos

Para visualizar os dados inseridos em uma tabela, usamos o comando SELECT, que

estudaremos nas próximas aulas. Por agora, usaremos a seguinte sintaxe básica:

SELECT * FROM TABELA

Page 8: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 8

8

Exemplo:

SELECT * FROM TB_CLIENTES;

Apagando dados de uma tabela

As vezes precisamos de um código para apagar registros antigos ou errados, como por

exemplo, apagar um cliente que foi cadastrado em duplicidade. Mas atenção: Nem todos os

registros poderão ser apagados, pois eles já podem estar sendo referenciados. Por exemplo: não

é possível apagar um bairro caso já existam clientes cadastrados nele!

Não podemos esquecer de delimitar quais dados serão excluídos, pois poderemos causar

problemas no banco. Veja a sintaxe seguir:

DELETE FROM tabela WHERE condição

Veja os exemplos abaixo para melhor compreender os conteúdos:

Apagar o cliente número 3241:

DELETE FROM TB_CLIENTES WHERE CLI_CODIGO = 3241

Apagar todos os clientes do bairro Nova Parnamirim que tenham menos de 18 anos:

DELETE FROM TB_CLIENTES WHERE CLI_BAI_CODIGO = 3 and CLI_IDADE < 18

Atualizando registros do banco de dados

O UPDATE serve para atualizar um ou mais registros do banco de dados. Ou seja, caso

você verifique algum nome errado, endereço desatualizado, ou qualquer informação que precise

ser alterada!

Não podemos esquecer de delimitar bem quais dados serão alterados, pois poderemos

causar problemas no banco. Veja abaixo a sintaxe do comando:

UPDATE tabela

SET campo1 = 'valor1',

[campo2 = 'valor2',

campo3 = 'valor3‘]

WHERE condição

Page 9: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 9

9

Veja agora alguns exemplos de comando UPDATE para esclarecer melhor suas dúvidas:

Atualize o nome do cliente de código 234:

UPDATE TB_CLIENTES SET CLI_NOME = ‘João’ WHERE CLI_CODIGO = 234

Atualize a função e a idade do funcionário Ari:

UPDATE TB_FUNCIONARIOS SET CLI_FUNCAO = ‘Atendente’, CLI_IDADE=33 WHERE

CLI_NOME = ‘Ari’

Atualize o limite de todos os usuários que moram no bairro 33

UPDATE TB_USUARIOS SET USU_LIMITE = 2000, USU_TOTAL = 0 WHERE

USU_BAI_CODIGO = 33

Atualize a categoria dos filmes anteriores a 2005 para catálogo (código 3)

UPDATE TB_FILMES SET FIL_CAT_CODIGO = 3 WHERE FIL_ANO <= 2005

Page 10: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 10

10

Conteúdo complementar

Caso deseje mais conteúdo complementar sobre estes assuntos, recomendamos alguns tutoriais e blogs feitos

por usuários, com mas exemplos sobre estes códigos! Veja alguns deles:

http://www.rlsystem.com.br/outros/noticia/select-insert-delete-update-mysql/

http://www.1keydata.com/pt/sql/sql-update.php

http://www.telecentros.sp.gov.br/saber/apostilas/antigas/apostila_sql.pdf

Page 11: Projeto e Administração de Banco de Dados - arioliveira.com de Dados/SAP HANA/SQL/Apostila_BD_parte1.pdf · sendo que eles já têm de cuidar de coisas específicas dos seus trabalhos.

Projeto e Manutenção de Banco de Dados 11

11

Bibliografia

[1] O que é SQL. <https://trocandoideiasti.wordpress.com/2012/01/27/o-que-e-sql-e-qual-sua-importancia/>. Acessado em julho de 2015.

[2] SQL e o que é DML. <http://hashtageek.blogspot.com.br/2011/07/sql-e-o-que-e-dml-ddl-dcl-dtl-e-dql.html>. Acessado em julho de 2015.