Banco de Dados Relacionais
Um banco de dados relacional é um banco de dados que modela os dados de uma forma que eles sejam percebidos pelo usuário como tabelas, ou mais formalmente relações.
Apresento aqui alguns conceitos e comandos principais em um banco de dados relacional.
Modelos
de BD:
Mod.
Relacional de BD
Conjunto de Relações (tabelas)
Cada relação: conjunto de linhas
Cada linha: lista de valores, onde cada valor pertence a um domínio.
Domínio = coluna da tabela
Linha = lista de valores
Restrições de Integridade:
Domínio: conjunto de valores válidos possível em uma coluna. Para toda coluna
deve-se definir um domínio.
Valor Nulo: se uma coluna é de preenchimento obrigatório ou não.
Chave: um conjunto de uma ou mais colunas que diferenciam uma linha das
demais. Somente uma chave primária. Zero ou mais chaves alternativas.
Referencial: O valor de uma chave estrangeira deve aparecer na chave primária na
tabela referenciada. Conjunto de um ou mais valores em uma tabela que devem
ocorrer em alguma linha de outra tabela em sua chave primária. Ex: a matrícula
que aparece na tabela histórico deve aparecer na tabela aluno em alguma das
linhas.
Numéricos:
INTEGER
NUMERIC
DECIMAL
FLOAT
DOUBLE
NUMBER
Cadeias de caracteres:
CHAR (até umas 20 posições +ou-)
Data/horas:
DATE
Tipos especiais de dados:
BLOB
CLOB
Restrições de integridade:
Linha que não se repete no BD.
Pode repetir individualmente.
[CONSTRAINT <NOME RESTRICAO*>]
*NOT NULL, NULL, PRIMARY KEY, UNIQUE (chave alternativa, valores que não se repitam dentro da tabela), ou REFERENCES <NAME TABELA>.
Definição de uma tabela
CREATE TABLE <NOME DA TABELA>
<COLUNA> <DOMÍNIO>
[ <RESTRIÇÕES DE INTEGRIDADE TABELA> ] );
create table faculdades
create table departamentos
Numero numeric(1),
Nome_Dep varchar(40) not null,
Inserir dados numa tabela
insert into faculdades values(46, 1, ‘Fund Comp’);
Deletar dados de uma tabela
delete from faculdades where sigla = 46;
Comandos de manipulação de dados:
INSERT - inclui 1 ou mais registros em uma tabela
UPDATE - modifica 1 ou mais registros em uma tabela
DELETE - exclui 1 ou mais registros em uma tabela.
SELECT - consulta
Consultas:
SELECT [DISTINCT] <saída> //[DISTINCT] elimina as saídas duplicadas de linha
<saída> //
<fonte de dados> //tabelas que tenho interesse, uma ou mais
<predicado> //condições: (funções, < , > ; ==, etc) : WHERE CURSO = ‘4/601’ AND SEXO <> ’M’;
------------------------------------------
LIKE
SELECT * FROM ALUNOS,
NOME LIKE ‘%SILVA%’;
% : 0 a n caracteres quaisquer
_ : 1 caracter qualquer exemplo: LIKE _ _ _ _-02; //disciplina que termina em -02
------------------------------------------
Conectar Tabelas
SELECT ALUNOS.MATRICULA, NOME, DISCIPLINA
------------------------------------------
<saída>
[DISTINCT] <coluna> [ AS <sinônimo> ]
; <coluna> [ AS <sinônimo> ]
Ou constante
Exemplos:
select * from alunos //’*’todas as tabelas
select distinct sexo
select distinct sexo, curso
JOIN
SELECT <coluna1>, <coluna2>
Outro exemplo:
SELECT F.NOME, E.DESC
FROM FUNC F, EMPRESA E, DEPENDENTE D
WHERE F.EMP = E.EMP
AND D.EMP = F.EMP
AND D.MATRICULA = F.MATRICULA
Visões
Resultado de uma consulta como se fosse uma tabela.
select * from alunos_discs where nota > 8,0;
create view alunos_discs as select * from alunos natural join historico;
Funções de agregação
COUNT – nº de valores válidos.
MAX – o maior dos valores válidos.
MIN – o menor dos valores válidos.
SUM – a soma dos valores numéricos válidos.
AVG – a média dos valores válidos.
Ex:
select count (curso), count (matricula) from alunos;
select count (*) from alunos; -- retorna número de linhas da tabela
Qual a maior nota em LBD em 2007/2?
select max (nota) from historico where ano_sem = ’2007/2’ and disciplina = ’4622C-02’;
Quantos alunos tiraram 10 em LBD em 2007/2?
select count (nota) from historico where nota = 10 and disciplina = ’4622C-02’ and ano_sem = ’2007/2’;
Se quiser que o resultado retorne atribuindo um nome na tabela:
Select SUM(B) as Total
From tabela
where c = “bla bla”
O resultado vai listar uma tabela chamada de Total e não de SUM(B)
Group by, having
Divide a entrada em pequenos blocos para depois calcular as funções.
select count (*), avg (nota) from historico group by matricula;
select idade, count (*), avg (idade) from alunos group by idade having count (*) > 1;
where – filtra direto da fonte de dados;
Manipulação de Datas em SQL
Mascara da data para a realização de uma consulta
TO_DATE (‘01012009’, ‘DDMMYYYY’)
OU
TO_DATE(‘0101200908’, ‘DDMMYYYYHH’)
OU
TO_DATE(‘0101200919’, ‘DDMMYYYYHH24’)
Data de Log
DT_LOG, ‘DD/MM/YY HH24:MM:SS’)
Mascara para caracteres
TO_CHAR(PRECO, ‘990999’) /*Um preço com determinado preço*/
Truncar informações
TRUNC (PRECO) /*Trunca valor do preço*/
TRUNC (AVG(B)2) /*TRUNCA EM DUAS CASAS DECIMAIS*/
Valores Arredondados
ROUND /*Valores arredontados*/
ROUND (AVG(B)2) /*ARREDONDA EM DUAS CASAS DECIMAIS*/
Concatenar informações
SELECT PROFISSAO ||’-‘|| NOME, SALARIO
Saber data do banco
SELECT sysdate FROM DUAL
Bloco PL-SQL
DECLARE
BEGIN
HTP.P(‘HELLO WORLD’);
EXCEPTION
END;
BEGIN
HTP.P('HOJE É: ' || TO_CHAR (sysdate,'DD/MM/YYYY'));
END;
DECLARA O VALOR DE UMA DATA DENTRO DE UM BLOCO E IMPRIME CONCATENANDO COM UMA STRING
DECLARE
VDATA DATE;
BEGIN
SELECT SYSDATE
INTO VDATA
FROM dual;
HTP.P('A DATA É ' || TO_CHAR(VDATA));
END;
DECLARE
VDATA DATE;
VFAT NUMBER;
BEGIN
SELECT SYSDATE
INTO VDATA
FROM dual;
VFAT := 10;
VDATA := vdata + vfat;
HTP.P('A DATA É ' || TO_CHAR(VDATA));
END;
Comentários