Académique Documents
Professionnel Documents
Culture Documents
/* Modelagem basica */
CLIENTE
NOME CARACTER(30)
CPF NUMERICO(11)
EMAIL CARACTER(30)
TELEFONE CARACTER(30)
SEXO CARACTER(1)
ENDERECO CARACTER(100)
/*PROCESSOS DE MODELAGEM */
/* ADM DE DADOS */
/* AD - DBA */
/*MODELO FISICO */
/* CRIANDO UM BANCO */
/* CONECTANDO */
USE PROJETO;
/* CRIANDO A TABELA */
/*VERIFICANDO AS TABELAS */
SHOW TABLES;
/* DESCREVENDO TABELAS */
DESC CLIENTE;
/* A 06 */
/*Tipos de dados */
Todos os banos de dados possuem tipos que devem ser atribuidos aos dados de uma
tabela.
Para caracteres literais, temos char e varchar, para números temos int e float,
para
objetos como fotos e documentos, temos o blob, para textos extensos, temos o text.
A disciplina de banco de dados é tão fantástica que ao entendermos o porque das
coisas,
podemos iniciar já em modo avançado e um bom exemplo disso são os tipos. Há uma
profissão
dentro da área que é a do analista de performance ou tuning, esse profissional é
responsável
por analisar o banco de dados e deixá-lo mais rápido. Parece algo avançado, e é!
Porém,
com alguas atitudes simples, podemos deixar o banco sem a necessidade de atuação
desse profissional.
Cada caracter no banco de dados, vale 1 byte. Sendo assim, se eu entro com o dado
JOÃO,
estou entrando com 4 bytes no meu banco. E o que isso tem a ver com a tiagem de
tabelas?
varchar(10)
char(10)
isso ocorre pois o char não varia. Os caracteres restantes serao preenchidos com
espaço.
eles nao ficam vazios. Enquanto que no varchar, o tipo varia conforme o dado.
Entao utilizo sempre o varchar? Não. O charé ligeiramente mais performatico, por
nao
ter que gastar tempo variando de tamanho. Entao a regra é utilizar sempre o char
quando
sabemos que o numero de caracteres naquela coluna nao vai variar nunca. Por
exemplo,
unidade federativa, com dois digitos, sexo com um digito e assim por diante. Vista
a diferença
que podemos fazer com uma tipagem correta de tabelas, na próxima aula detalharemos
os tipos do mysql
e nos modulos específicos de cada banco, você entenderá os tipos correspondentes no
sql server
e no oracle, que mudam muito pouco.
/* A 08 - Inserindo dados e valores nulos */
use projeto;
/* Mostrando as tabelas */
show tables
SELECT NOW();
/* ALIAS DE COLUNAS */
/* FILTRANDO */
/* UTILIZANDO O LIKE */
/* CARACTER CORINGA % */
/* OR - OU */
/* AND - E */
/* OPERADOR GROUP BY */
/* 1 MILHAO DE REGISTROS
PARA CONTAR
SELECT COUNT(*) FROM CLIENTE;
CONDICAO
SEXO = F
CIDADE = RIO DE JANEIRO
UPDATE CLIENTE
SET EMAIL = 'LILIAN@HOTMAIL.COM';
UPDATE CLIENTE
SET EMAIL = 'JOAO@HOTMAIL.COM'
WHERE NOME = 'JOAO';
UPDATE CLIENTE
SET EMAIL = 'JORGE@GMAIL.COM'
WHERE NOME = 'JORGE';
UPDATE CLIENTE
SET EMAIL = 'ANA@GMAIL.COM'
WHERE NOME = 'ANA';
UPDATE CLIENTE
SET EMAIL = 'CARLA@TERRA.COM.BR'
WHERE NOME = 'CARLA';
UPDATE CLIENTE
SET TELEFONE = '97865434'
WHERE NOME = 'JOAO';
UPDATE CLIENTE
SET TELEFONE = '22923110 - 97865434'
WHERE NOME = 'JOAO';
PETER CHEN, VENDO TODO ESSE CENARIO AFIRMOU: NAO PODEMOS CRIAR BANCOS
DE DADOS VOLTADOS PARA PROCEDIMENTOS EMPRESARIAIS, POIS OS PROCEDIMENTOS
SOFREM INTERFERENCIAS EXTERNAS E PODEM SER ALTERADOS. A UNICA COISA
QUE NAO SOFRE ALTERACAO SAO OS DADOS.
MODELAR É UMA ARTE, ALGO QUE SE APRENDE COM A PRATICA. E VOCES PODEM
SE PERGUNTAR: MAS SE É ALGO QUE SE APRENDE COM A PRATICA, COMO QUEM
ESTA COMEÇANDO, APRENDE?
/* A18 */
/* 1a FORMA NORMAL */
/* A19 - CADINALIDADE */
/* MODELAGEM DE CLIENTE */
USE COMERCIO;
/* EM RELACIONAMENTOS 1 X N, A CHAVEE
ESTRANGEIRA FICARA SEMPRE NA TABELA N */
/* A20 */
/*CORRIGINDO*/
/* ENDERECO */
/* TELEFONE */
/* A 21 */
UPDATE CLIENTE
SET SEXO = 'F'
WHERE IDCLIENTE = 5; /*SELECAO */
/* JUNCAO */
/* JOIN - JUNCAO */
SELECT C.NOME,C.EMAIL,T.NUMERO
FROM CLIENTE C
INNER JOIN TELEFONE T
ON C.IDCLIENTE = T.ID_CLIENTE
INNER JOIN ENDERECO E
ON C.IDCLIENTE = E.ID_CLIENTE
WHERE TIPO = 'CEL' AND ESTADO = 'RJ';
+---------+----------------+---------+
| NOME | EMAIL | NUMERO |
+---------+----------------+---------+
| JOAO | JOAO@IG.COM | 9955331 |
| JOAO | JOAO@IG.COM | 5765547 |
| ANTONIO | NULL | 5557798 |
| ANTONIO | NULL | 8865645 |
| CELIA | JOAO@TERRA.COM | 7865644 |
+---------+----------------+---------+
+------+---------------+---------+
| NOME | EMAIL | NUMERO |
+------+---------------+---------+
| ANA | ANA@GLOBO.COM | 5788654 |
+------+---------------+---------+
/* IFNULL */
+---------+----------------+---------+
| NOME | EMAIL | NUMERO |
+---------+----------------+---------+
| JOAO | JOAO@IG.COM | 9955331 |
| JOAO | JOAO@IG.COM | 5765547 |
| ANTONIO | SEM EMAIL | 5557798 |
| ANTONIO | SEM EMAIL | 8865645 |
| CELIA | JOAO@TERRA.COM | 7865644 |
+---------+----------------+---------+
SELECT C.NOME,C.SEXO,
IFNULL(C.EMAIL,'SEM EMAIL') AS "E-MAIL",
T.TIPO,
T.NUMERO,
E.BAIRRO,
E.CIDADE,
E.ESTADO
FROM CLIENTE C
INNER JOIN TELEFONE T
ON C.IDCLIENTE = T.ID_CLIENTE
INNER JOIN ENDERECO E
ON C.IDCLIENTE = E.ID_CLIENTE;
/* CRIANDO A VIEW */
SHOW TABLES;
+--------------------+
| Tables_in_comercio |
+--------------------+
| cliente |
| endereco |
| relatorio |
| telefone |
+--------------------+
+---------+------+----------------+
| NOME | SEXO | CIDADE |
+---------+------+----------------+
| JOAO | M | RIO DE JANEIRO |
| JOAO | M | RIO DE JANEIRO |
| JOAO | M | RIO DE JANEIRO |
| CARLOS | M | B. HORIZONTE |
| ANA | F | SAO PAULO |
| ANA | F | SAO PAULO |
| CELIA | F | NITERÓI |
| CELIA | F | NITERÓI |
| CELIA | F | NITERÓI |
| ANTONIO | M | RIO DE JANEIRO |
| ANTONIO | M | RIO DE JANEIRO |
| ANTONIO | M | RIO DE JANEIRO |
+---------+------+----------------+
Can not insert into join view 'comercio.v_relatorio' without fields list
/* A 25 - ORDER BY */
DELIMITER $
STATUS
DELIMITER#
DELIMITER #
/* A27 PROCEDURES */
/* SEMPRE */
DELIMITER $
SELECT 10 + 10 AS "CONTA"$
/* CHAMANDO A PROCEDURE */
CALL CONTA()$
DELIMITER ;
CALL CONTA();
DELIMITER $
DELIMITER ;
CALL CONTA(100,78);
CALL CONTA(47456,346435);
CALL CONTA(64577,85546);
/* DELIMITADOR */
DELIMITER #
STATUS
DELIMITER #
DELIMITER ;
CALL SEL_CURSO();
/* VARIAS FUNCOES */
SELECT MAX(JANEIRO) AS MAX_JAN,
MIN(JANEIRO) AS MIN_JAN,
AVG(JANEIRO) AS MEDIA_JAN
FROM VENDEDORES;
/*TRUNCATE */
/* A 31 - SUBQUERIES
SELECT NOME,
JANEIRO,
FEVEREIRO,
MARCO,
(JANEIRO+FEVEREIRO+MARCO) AS "TOTAL",
TRUNCATE((JANEIRO+FEVEREIRO+MARCO)/3,2) AS "MEDIA"
FROM VENDEDORES;
/* APLICANDO UM % */
SELECT NOME,
JANEIRO,
FEVEREIRO,
MARCO,
(JANEIRO+FEVEREIRO+MARCO) AS "TOTAL",
(JANEIRO+FEVEREIRO+MARCO) * .25 AS "DESCONTO",
TRUNCATE((JANEIRO+FEVEREIRO+MARCO)/3,2) AS "MEDIA"
FROM VENDEDORES;
--ADICIONANDO UMA PK
ALTER TABLE TABELA
ADD PRIMARY KEY (COLUNA1);
--Foreign key
ALTER TABLE TIME
ADD FOREIGN KEY(ID_PESSOA)
REFERENCES PESSOA(COLUNA1);
/* VERIFICAR AS CHAVES */
SHOW CREATE TABLE TIME;
SHOW TABLES;
/* DICIONARIO DE DADOS */
SHOW DATABASES;
USE INFORMATION_SCHEMA;
STATUS
SHOW TABLES;
DESC TABLE_CONSTRAINTS;
/* APAGANDO CONSTRAINTS */
USE COMERCIO;
SHOW TABLES;
/*CORRIGIR ERRO*/
DELETE FROM TELEFONE
WHERE ID_CLIENTE = 1;
DELETE FROM CLIENTE WHERE IDCLIENTE = 1;
/*RECRIANDO A FK */
/*A37 CORRECAO EX 01 */
USE PROJETO;
USE OFICINA;
/* CONSTRAINTS */
/* A 39 ENTENDENDO TRIGGERS */
USE AULA40;
/* CRIANDO A TRIGGER */
DELIMITER $
USE LOJA;
STATUS
USE BACKUP;
USE LOJA;
STATUS
DELIMITER $
END
$
DELIMITER ;
END
$
DELIMITER ;
DELIMITER $
END
$
DELIMITER ;
DELIMITER $
END
$
DELIMITER ;
DELETE FROM PRODUTO WHERE IDPRODUTO = 4;
/* A 43 - TRIGGER DE AUDITORIA */
DELIMITER ;
USE LOJA;
/*QUANDO*/
SELECT NOW();
/*QUEM*/
SELECT CURRENT_USER();
USE BACKUP;
);
USE LOJA;
DELIMITER $
END
$
DELIMITER ;
/* A44 - AUTORELACIONAMENTO */
SELECT
C.NOME AS CURSO,
C.VALOR AS VALOR,
C.HORAS AS CARGA,
IFNULL(P.NOME, "---") AS PREREQ
FROM CURSOS C LEFT JOIN CURSOS P
ON P.IDCURSO = C.ID_PREREQ;
/* A 45 - CURSORES */
DELIMITER $
OPEN REG;
REPEAT
END IF;
CLOSE REG;
END
$
DELIMITER ;
CALL INSEREDADOS();
CALL INSEREDADOS();
DELIMITER $
END
$
DELIMITER ;
/*
PRIMEIRA FN
*/