Escolar Documentos
Profissional Documentos
Cultura Documentos
José Picovsky
jpicovsky@gmailcom.br
INSTALAR OS SOFWARES NA SEGUINTE ORDEM
1) JDK 11 (obrigatório)
https://www.oracle.com/br/java/technologies/javase/jdk11-archive-
downloads.html
Digite em
Nome: DBA
Nome do Usuário: System
Senha: Coloque aqui a mesma senha que foi solicitada na instalação do Oracle
Clique em Salvar Senha, Testar , Salvar, Conectar
Agora crie um usuário qualquer , que não seja o usuário system (DBA).
Na tela do query builder digite uma linha de cada vez, selecionando a mesma e
clicando ctrl enter em cada uma das linhas.
Aqui você digita um nome para o usuário e a senha para criar o usuário
GRANT create session, create table, create view , dba to nome usuário
•INTEGER – Tipo de dados para números inteiros. Equivalente ao NUMBER, com escala
zero.
Nota: Qual tipo usar para armazenar dados Inteiros: Number ou Integer?
Quando declara-se um campo com o tipo Integer ou Number ambos são armazenados no
dicionário como tipo numérico.
•SMALLINT – Equivalente ao NUMBER, porém ocupa a metade do espaço em memória.
Tipos de dados Oracle
Tipos de dados Oracle
Constraint
CONSTRAINTS, que nada mais são restrições que você estabelece para uma coluna no
banco de dados, que nada mais é de um método para validar a integridade de todos os
dados que entram em sua base.
•Primary Key (PK) = Está restrição cria um índice único para um conjunto de colunas ou
uma coluna para Chave Primaria.
•Unique = Está Contraint determina que uma coluna não poderá ter 2 linhas com o
mesmo valor.
•Foreign Key (FK ou Chave Estrangeira) = Determina uma coluna ou um conjunto de
colunas que possuem valores em outras tabelas, referente a uma referência ou um
relacionamento.
•Check = Especifica a condição que a coluna precisa para salvar o registro.
•Not Null = Determina que a coluna tem preenchimento obrigatório.
Chave Primária (Primary key – PK)
Pode ser constituída de um campo (chave simples) ou pela combinação de dois ou mais
campos (chave composta), de tal maneira que não existam repetição de dados no campo
de valor de chave primária.
Portanto,
•Para ser uma chave primária a coluna que definem a chave primária são exclusiva, ou
seja a coluna não pode conter valores duplicados;
•Nenhum valor nas colunas de chave primária é NULL ou valores “em branco”.
Chave Estrangeira (Foreign – FK)
Uma chave estrangeira é um conjunto de uma ou mais colunas em uma tabela que se
refere à chave primária em outra tabela.
Chave estrangeira é o campo que estabelece o relacionamento entre duas tabelas. Assim,
uma coluna corresponde à mesma coluna que é a chave primária de outra tabela. Dessa
forma, deve-se especificar na tabela que contém uma chave estrangeira são essas
colunas à qual tabela são relacionadas.
Não há nenhuma obrigatoriedade especial, que seja necessário colocar uma chave
estrangeira.
O uso de chaves estrangeiras garante que não existirão dados nos campos das tabelas-
filhas que não tenham correspondência na tabela mãe.
Exemplo de Chave Primária e Chave Estrangeira
Observe que o codigo_produto consta nas duas tabelas. Em Produtos ele é o campo
identificador, ou seja, cada produto deverá ser exclusivo, portanto, uma chave
primária. Já em Itens do Pedido o campo codigo_produto poderá constar várias vezes
e como ele já é chave primária em Produtos, aqui ele será uma chave estrangeira.
Um campo de chave estrangeira depende dos dados do mesmo campo em outra tabela,
onde ele é chave primária.
Ele vai ser preenchido com os códigos que existem em outra tabela , chamada de tabela
mãe.
No exemplo acima a tabela Itens_pedidos só poderá ter códigos que existem na tabela
Produtos
De forma sucinta, a chave estrangeira é uma referência em uma tabela a uma chave primária
de outra tabela.
Exemplo de Chave Primária e Chave Estrangeira
Um campo de chave estrangeira depende dos dados do mesmo campo em outra tabela,
onde ele é chave primária.
Ele vai ser preenchido com os códigos que existem em outra tabela , chamada de tabela
mãe.
No exemplo acima a tabela Itens_pedidos só poderá ter códigos que existem na tabela
Produtos
De forma sucinta, a chave estrangeira é uma referência em uma tabela a uma chave primária
de outra tabela.
Exemplo de Chave Primária e Chave Estrangeira
Note que Codigo_Mecanico, na tabela Mecanico é chave primária, pois não podemos ter
outros mecânicos utilizando o mesmo código. É nessa tabela que temos todos os dados do
mecânico, por isso ela é considerada uma tabela mãe.
Já na tabela Serviços, só podemos ter códigos que existam na tabela Mecanico. A tabela
Serviços é uma tabela dependente da tabela Mecanico, por isso a tabela serviços, é uma
tabela filha e nesta tabela o Codigo_mecânico é uma chave estrangeira, pois todos os dados
de mecânicos estão na tabela mãe, Mecanicos.
Exemplo de Chave Primária e Chave Estrangeira
Nesse exemplo acima tabela Clientes é a tabela mãe de pedidos, pois é necessário preencher
primeiro a tabela Clientes para poder usar um código de clientes , da mesma, para utilizá-lo em
Pedidos.
A tabela itens de pedido , depende das tabelas Pedidos e Produtos, sendo que estas duas ultimas
tabelas tem que ser preenchidas antes de itens do pedido.
Asssim sendo a tabela mãe terá sempre uma chave primária. A tabela filha terá uma chave
estrangeira para poder se relacionar com a tabela mãe. Essa tabela filha, no caso Pedidos, poderá
ter a sua chave primária também, pois ela tem como filha a tabela itens pedidos. A tabela
produtos, também é mãe de itens do pedido. Esta tabela produtos terá a sua chave primária.
Exemplo de Chave Primária e Chave Estrangeira
Veja abaixo um diagrama de banco de dados com várias tabelas relacionadas. Perceba a presença de
chaves primárias, identificadas por PK (primary key) e as chaves estrangeiras, identificadas por FK
(foreign key).
Comando create table (para criar uma tabela)
Sem constraints (regras)
Observe o campo é chave estrangeira pelo comando FOREIGN KEY (codeditora) que faz parte
da tabela livro3. A declaração REFERENCES indica qual tabela
será consultada para validar a chave estrangeira, no exemplo EDITORA3
Comando create table (para criar uma tabela com PK e FK)
A declaração de qual campo é chave estrangeira é dada pelo comando FOREIGN KEY
(id_pais).
A declaração REFERENCES indica qual tabela será consultada para validar a chave
estrangeira, no exemplo TB_PAIS , e dentro dos parênteses indicamos qual a coluna será
consultada, no caso o campo id_pais
Constraints nome da restrição foreign key (campo da tabela que depende de outra tabela)
references nome da tabela a ser consultada e entre parênteses o campo comum nas duas
tabelas
Exemplos de constraints (regras)
CREATE TABLE TB_PILOTO (
id_piloto NUMBER(5) CONSTRAINT tb_piloto_id_piloto_
pk PRIMARY KEY,
nm_piloto VARCHAR2(50),
dt_nascimento DATE,
id_pais NUMBER(5)
);
ou
DROP TABLE
Exemplo:
Não existe um consenso sobre como se deve criar o projeto físico do SGBD nem sobre quais
regras de nomenclatura devem ser adotadas para tabelas e colunas.
Quando você está modelando e trabalhando com um banco de dados pequeno, pode parecer
perda de tempo discutir e definir uma política de padronização, mas quando o número de
tabelas é grande as coisas mudam e pode se tornar muito difícil extrair informações de um
banco não padronizado.
Existem dois padrões que inspiram muitos DBA a criar suas regras que são variações
para cada SGBD o da trigramação e o qualificador nome descritivo.
Padronização nomes tabelas e campos
TRIGRAMAÇÃO.
TRIGRAMAÇÃO.
Como regra geral da trigramação, nunca utilize artigo como ‘de’, ‘das’ ou ‘com’ ou
pronomes em uma entidade ou atributo. Não utilize caracteres especiais, acentos ou
cedilha. Todas as palavras compostas devem ser separadas por ‘_’ underscore como
pessoa_jurídica ou pessoa_fisica.
O nome da entidade deve ser sempre no singular e deve expressar de forma clara a
finalidade da entidade. Na trigramação, ao se criarem abreviaturas, pode ocorrer de ao
escolher as três primeiras letras de uma entidade, encontrar outra entidade que
apresente as três letras iniciais idênticas. Neste caso, você deve manter duas letras
idênticas e escolher uma terceira que permita diferenciar as entidades. Se o modelo
for complexo e tiver a necessidade de se criar módulos, o nome do módulo será
abreviado e atribuído a todas as tabelas que lhe pertence.
O qualificador nome descritivo tem como base o padrão ISO/IEC 11179-5. A regra
utiliza basicamente algumas tabelas com símbolos e todas as entidades e atributos
do DER devem, de alguma forma, ser representados por um destes símbolos. Por
exemplo, imagine que queremos converter a entidade Cliente do DER para o padrão
qualificador nome descritivo. Você deverá procurar para cada atributo da entidade
na tabela a seguir o símbolo mais adequado. A figura abaixo apresenta como
fica a representação da entidade no modelo.
Padronização nomes tabelas e campos
QUALIFICADOR NOME DESCRITIVO.
Padronização nomes tabelas e campos
SEM QUALIFICADOR NOME DESCRITIVO.
Padronização nomes tabelas e campos
COM QUALIFICADOR NOME DESCRITIVO.
Exemplos:
insert into PROFESSOR (CPF,NOME,SALARIO,TITULACAO)
values (11111111111, 'RICARDO TERRA', 1.99, 'ESPECIALISTA’);
insert into funcionários (matricula, nome, endereco, cidade, uf, cep, salario)
values (111,'Jose Lima','Rua México,200','São Paulo','SP','01417-020',2000)
ou
Para datas usar o to_date que converte uma data no formato texto para data.
INSERT ALL
INTO TB_PAIS (id_pais, nm_pais) VALUES (7,'Espanha')
INTO TB_PAIS (id_pais, nm_pais) VALUES (8,'Reino Unido')
INTO TB_PAIS (id_pais, nm_pais) VALUES (9,'Austrália’)
INSERT ALL
INTO TB_PAIS VALUES (10,'Países Baixos',NULL)
INTO TB_PAIS VALUES (11,'Suécia',NULL)
INTO TB_PAIS VALUES (12,'Canadá',NULL)
INTO TB_PAIS VALUES (13,'Itália',NULL)
INTO TB_PAIS VALUES (14,'Rússia',NULL)
Trabalhando com Sequence
Se formos inserir dados sem usar a sequence, deveremos informar um valor para codcargo
insert into tb_cargos(codcargo,cargo) values(1,’Diretor’);
insert into tb_cargos(codcargo,cargo) values(2,’Secretária');
insert into tb_cargos(codcargo,cargo) values(3,’Gerente de Informática’);
Se formos criar a sequence usamos o comando abaixo e não será necessário informar um número de
Código de cargo, o mesmo será gerado automaticamente ao inserir dados na tabela Cargos.
Codigo nome
1 José
2 Ana
3 Maria
UTILIZANDO IDENTITY AO INVÉS DE SEQUENCE
Codigo nome
10 José
20 Ana
30 Maria
Alterando dados de uma tabela
A instrução UPDATE é usada para modificar linhas existentes em
uma tabela.
UPDATE nome_da_tabela
SET nome_da_coluna = novo_valor [, nome_de outa_coluna =
novo_valor] [WHERE lista_de_condição];
Anomalias são mudanças em dados que podem gerar uma inconsistência no banco
de dados relacional.
Outro exemplo seria exclusão de uma tabela que fornece informações para uma
tabela dependente e poder excluir um dados da mesma, também quando não
usamos chave estrangeira.
Uma anomalia de inserção ao inserir um dado , este pode gerar uma inconsistência
no banco de dados, como a repetição de um RA , numa tabela que não tem chave
primária.
ANOMALIAS DE BANCO DE DADOS
Supondo que sejam criadas as tabelas
Esse erro ocorre pois estamos tentando inserir a matricula de número 1000 que já
existe na tabela funcionários e no campo matrícula o mesmo é chave primária.
Esse erro ocorre pois não informamos a matricula que é chave primária que não
permite nulos no campo e nem repetição no mesmo e além disto colocamos na tabela
Funcionarios uma restrição
Esse erro ocorre pois estamos tentando inserir o salario de 1000 quando
Sendo que esse email já estava sendo utilizado para Rita Reis
ANOMALIAS DE BANCO DE DADOS – CHAVE ESTRANGEIRA
Tendo uma chave estrangeira , a mesma impede que possamos inserir um Código na
tabela funcionarios que não existe na tabela cargos. No caso a tabela mãe é a tabela
cargos e a tabela fuincionarios depende dos códigos da mesma.
ANOMALIAS DE BANCO DE DADOS – CHAVE ESTRANGEIRA
Ao tentar excluir o codcargo 1 , vai ocorrer um erro delete from cargos where codcargo=1
Esse erro ocorre pois estamos excluir um cargo da tabela cargos que esta sendo utilizado na tabela
funcionários. Se algum código de cargo não estiver sendo utilizado em uma tabela que faz uma
chave estrangeira, a exclusão será permitida.
Não podemos esquecer que temos uma chave estrangeira em Funcionarios que serve para manter
a integridade referencial entre as tabelas.
Se fossemos excluir a Ana Lemos de funcionarios que usa o codcargo 1, não ocorreria o erro, pois
a tabela funcionarios é filha de cargos.
ANOMALIAS DE BANCO DE DADOS – CHAVE ESTRANGEIRA
Ao tentar alterar um código da tabela cargos que esta sendo usado na tabela funcionários , ocorre um erro,
por conta da chave estrangeira, e na tabela funcionários acabaria ficando um código de cargo que não
existiria mais na tabela cargos
Caso fossemos alterar o codcargo 1 de cargos pelo codcargo 5, a acção seria perfeitamente possível, pois
o mesmo existe na tabela cargos
Na lista de colunas, deverá ser citada cada uma das colunas separadas por vírgula
(,) .
O ‘apelido’ é definido logo em seguida ao nome da coluna com um espaço ou utilizando a palavra AS. É
recomendável inserir o nome do ‘apelido’ entre aspas duplas ("). Caso o apelido tenha espaço, é obrigatório o
uso de aspas duplas (").
SELECT nome “Nome do Funcionario”, Salario, codcargo “Cod Cargos” from funcionários
OU
select nome AS "NOME DO FUNCIONARIO", Salario, codcargo AS "COD. CARGO" from funcionarios
COMANDO SELECT DISTINCT – CONSULTAS TABELAS
Utilizado quando desejamos buscar dados de uma tabela sem repetição num determinado campo. Para ele
funcionar corretamente, ele tem que ser aplicado a um unico campo de uma tabela
Se o distinct for aplicado a mais de um campo da tabela, ele trará todas as linhas da tabela
A expressão ORDER BY é utilizada quando se pretende exibir os registros em uma determinada ordem, seja
esta crescente (ASC - default) ou decrescente (DESC). Caso a expressão não esteja presente,
os registros serão exibidos na ordem em que foram inseridos na tabela.
Os campos que constam na expressão ORDER BY não devem obrigatoriamente estarem presentes na
expressão SELECT. Caso estejam presentes, pode-se utilizar números indicando que a ordenação
será feira por determinado campo de acordo com a ordem do select.
Equivale a
Equivale a select nome, uf, salario from funcionarios order by salario desc
SELECT COM ORDER BY – CONSULTAS ORDENADAS TABELAS
Pode utilizar mais colunas para compor uma ordenação iniciando pela primeira , dentro desta vai ser ordenado
pela próxima coluna e assim sucessivamente.
Pode utilizar mais colunas para compor uma ordenação iniciando pela primeira , dentro desta vai ser ordenado
pela próxima coluna e assim sucessivamente.
select uf, salario, nome from funcionarios order by uf asc , salario desc
SELECT COM ORDER BY – CONSULTAS ORDENADAS TABELAS
Pode utilizar mais colunas para compor uma ordenação iniciando pela primeira , dentro desta vai ser ordenado
pela próxima coluna e assim sucessivamente.
select nome, uf, salario from funcionarios order by nome asc, salario desc
SELECT SELECIONANDO A QUANTIDADE DE LINHAS
As vezes você não está interessado em ver o resultado como um todo, mas sim, alguma parte do resultado.
Para isto, o Oracle utiliza de uma pseudo-coluna conhecida como ROWNUM a partir do resultado.
select * from (select dtnasc, nome from funcionarios order by dtnasc) WHERE ROWNUM <= 4;
Equivale a
select dtnasc , nome from funcionarios order by dtnasc fetch first 4 rows Only
Existem vários operadores de comparação que pode ser usados para a restrição do número
de resultados, ou seja, podem ser utilizadas uma ou mais condições para que sejam exibidas
apenas as linhas que atendas a essas condições.
SELECT UTILIZANDO CONDIÇÕES
select nome, salario , codcargo from funcionarios where coddepto=400 order by nome
SELECT UTILIZANDO CONDIÇÕES
select nome, salario , codcargo from funcionarios where nome= 'Flavio Gama Santana’
select nome, salario , codcargo from funcionarios where uf='SP' order by nome
SELECT UTILIZANDO CONDIÇÕES
O operador LIKE é usado quando se deseja obter colunas de um registro que sigam um
determinado padrão pré-especificado. Quando se quer saber o nome de todos os funcionários
cujo nome começa com ‘João’ ou termina com ‘Silva’, utiliza-se o operador LIKE.
select uf ,nome, salario , codcargo from funcionarios where nome like 'Ana%’
Seleciona todos os nomes que se iniciam com Ana
select uf ,nome, salario , codcargo from funcionarios where nome like '_a%’
Seleciona todos os nomes que tenham a letra a na segunda posição
SELECT UTILIZANDO CONDIÇÕES
O operador LIKE é usado quando se deseja obter colunas de um registro que sigam um
determinado padrão pré-especificado. Podemos usar o % oque se se deseja pesquisar% ou
ainda
%o que se deseja pesquisar
select uf ,nome, salario , codcargo from funcionarios where nome like '%ana%’
Seleciona todos os nomes que contem a palavra ana em qualquer posição
select uf ,nome, salario , codcargo from funcionarios where nome like '%ana’
Seleciona todos os nomes que terminem com a palavra ana
SELECT UTILIZANDO CONDIÇÕES
Um exemplo de uso da relação de maior, maior ou igual, menor ou menor ou igual é o busca de
um funcionario que possui um salário maior que um certo valor e menor do que outro.
Busca os que possuem os funcionários com código de departamento coddepto diferente de 500
select nome, dtnasc from funcionarios where dtnasc >= to_date('03/10/2000', 'dd/mm/yyyy’) order by dtnasc
SELECT UTILIZANDO CONDIÇÕES COM DATAS
No Oracle o sysdate é a data de hoje obtida do servidor
select nome, dtnasc from funcionarios where dtnasc <= sysdate order by dtnasc
No caso abaixo, o select vai trazer todas as linhas da tabela funcionarios
COMANDO SELECT COM FUNÇÕES DE CONVERSÕES DE DADOS
UTILIZANDO FORMATAÇÕES NOS CAMPOS DE NÚMEROS E DATAS
UTILIZANDO FORMATAÇÕES NOS CAMPOS DE NÚMEROS E DATAS
SELECT UTILIZANDO FORMATAÇÕES NOS CAMPOS DE DATAS
A função TO_CHAR tem por objetivo converter um número ou uma data para o formato string de
caractere. Além desse fim, ela acaba sendo muito utilizada para formatação visual de dados.
SELECT * FROM funcionarios WHERE extract(month from dtnasc) = 7 and extract (year
from dtnasc) = 2000;
SELECT UTILIZANDO FORMATAÇÕES NOS CAMPOS DE VALORES
Estamos aqui um INSS hipotético com 11% sobre o valor do salario para pessoas que ganham acima de 2000
AND
Às vezes, no português falado dizemos, por exemplo, que queremos todos os funcionários que estão no
departamento 200 e que ganham mais de 3.000.
OR
Existem outros casos que queremos todos os funcionários que estão no departamento 200 ou que
ganham mais de 2000
Podemos buscar os funcionários que tenham salario entre 3000 e 10000 , incluído os
mesmos
select nome, salario from funcionarios where salario>=3000 and salario<=10000 order
by nome
SELECT UTILIZANDO MAIS DE UM CAMPO COMO FILTRO
select nome, salario from funcionarios where salario>=3000 and salario<=10000 order by
nome
Ou
select nome, salario from funcionarios where salario between 3000 and 10000 order by
nome
SELECT UTILIZANDO MAIS DE UM CAMPO COMO FILTRO
select * from RH.EMPREGADO where not SALARIO between 5000 and 10000
select nome, salario from funcionarios where not salario between 3000 and 10000 order
by nome
SELECT UTILIZANDO MAIS DE UM CAMPO COMO FILTRO
IN e NOT IN
O operador IN e NOT IN são utilizados para testar uma condição de um
grupo de valores.
select uf, nome, salario from funcionarios where UF='SP' OR UF=‘RJ’ order by uf
Ou
select coddepto, nome, salario from funcionarios where coddepto in(200,400) order by
coddepto
Ou
select coddepto, nome, salario from funcionarios where coddepto= any(200,400) order
by coddepto
SELECT UTILIZANDO MAIS DE UM CAMPO COMO FILTRO
Para retornar os usuário que não estão em uma determinada lista de departamentos
utilizamos o NOT IN ou !ALL
select coddepto, nome, salario from funcionarios where coddepto not in (200,400)
order by coddepto
Ou
select coddepto, nome, salario from funcionarios where coddepto != all (200,400) order
by coddepto
SELECT UTILIZANDO VÁRIAS TABELAS
SELECT
uma lista de colunas, expressões, funções e afins.
FROM
diz em qual(is) tabela(s) irá buscar as informações desejadas.
- o campo comum que liga uma tabela com outra tem quer do mesmo tipo (numeric,
texto,..), não podemos um com numeric e o outro com varchar
A NATURAL JOIN é uma operação JOIN que cria uma cláusula de associação com base
nas colunas comuns nas duas tabelas diferentes que estão sendo combinadas, e que tem
um campo em comum entre elas. O NATURAL JOIN funciona muito bem quando uma
coluna é chave estrangeira da outra tabela.
select depto ,nome from funcionarios natural join departamentos order by depto,nome
SELECT UTILIZANDO VÁRIAS TABELAS USANDO NATURAL JOIN
select depto ,cargo, nome from funcionarios natural join departamentos natural join cargos
order by depto,cargo, nome
SELECT UTILIZANDO VÁRIAS TABELAS USANDO USING
A clausula USING deve ser utilizada, quando você tem várias colunas com o mesmo nome
e precisa escolher o campo de junção. Ainda é um facilitador automático, mas permite que
você informe o campo comum das tabelas que servirá para unificar os registros.
Em alguns bancos de dados mais antigos as vezes o modelo não apresenta todas as
colunas com nomes bem definidos. Pode ocorrer de algumas tabelas terem mais colunas
com o mesmo nome e o mesmo tipo de dados sem serem as chaves primárias e
estrangeiras, ou a coluna comum entre as tabelas não serem do mesmo tipo de dados, ou
ainda as tabelas podem conter colunas com o mesmo nome e o mesmo tipo de dados que
você não queira como sendo pontos da relação entre as tabelas, então nesses casos
devemos usar o using e escolher o campo de junção entre as tabelas
select depto ,cargo, nome from funcionarios natural join departamentos natural join cargos
order by depto,cargo, nome
SELECT UTILIZANDO VÁRIAS TABELAS USANDO USING
select depto , nome from funcionarios join departamentos using (coddepto) order by depto,
nome
SELECT UTILIZANDO VÁRIAS TABELAS USANDO USING
INNER JOIN seleciona todas as linhas de ambas as tabelas participantes, desde que ocorra uma
correspondência entre as colunas. Um INNER JOIN é o mesmo que JOIN, combinando linhas de
duas ou mais tabelas. Após ANSI SQL de 1992, a clausula INNER é opcional .
O INNER JOIN junta as tabelas de acordo com a correspondência determinada como critério no
operador ON.
No INNER JOIN é feito o produto cartesiano dos dados e os dados que não correspondem à
condição ON são excluídos do conjunto de resultados. A maioria dos DBAs gostam da forma que
o INNER JOIN separa as ligações entre as tabelas usando a cláusula ON e permitindo que o
WHERE fique apenas como filtro dos elementos individuais da consulta.
Ou
ou
Localizar os funcionários listando nome, cargo, dtnasc que nasceram no mês de março de 2006
ou
Ou
Tem como base o relacionamento entre duas tabelas através de um grupo ou limites
máximo e mínimos. Na maioria das vezes, não se trata de um relacionamento entre
chave primária e chave estrangeira. Todo o relacionamento que não é construído
utilizando o operador de igualdade é denominado de NO-EQUIJOIN.
Para exemplificar você deve criar a tabela GRADES e inserir alguns registros.
Nesse caso a query traz todos os registros de funcionários com os respectivos departamentos,
pois na tabela funcionários so existem os coddepto que existem na tabela departamentos, devido
a chave estrangeira. Caso não existisse a chave e fosse colocado em funcionários um código de
departamento que não existisse em Departamentos , a query listaria essa linha também, o que
não ocorre num inner join
Ou
Tabela Funcionarios
Tabela Departamentos
Nesse caso a query traz todos os registros de funcionários com os respectivos departamentos, e
traz , também, na linha 11 o novo departamento com null na coluna nome, pois ainda não foi
utilizado esse departamento ainda por nenhum funcionario
Ou
As funções de grupo operam sobre um conjunto de linhas para dar um único resultado por grupo
▪ Funções de agregação NÃO PODEM aparecer na cláusula WHERE de uma instrução SELECT.
Exemplo select nome, salario where salario=max(salario);
▪ O atributo DISTINCT pode fazer parte de uma função de grupo para solicitar que se considere valores
não duplicados.
▪ Quando utilizada em um SELECT, geralmente requer uma cláusula GROUP BY, porém quando a
mesma não é especificada, o agrupamento padrão é por todo o resultado.
SELECT UTILIZANDO FUNÇÕES DE GRUPOS
COUNT (contagem)
COUNT (contagem)
Exemplos:
As funções de agregação são úteis, porém seu uso comum é vinculá-las a uma
cláusula GROUP BY.
A cláusula GROUP BY como o próprio nome diz trabalha nos dados que estão
agrupados.
Para isto, devemos aplicar um função de agregação e agrupá-la por algum campo.
SELECT AGRUPANDO DADOS COM GROUP BY
Este filtro não pode ser feito na cláusula WHERE, pois ele é um filtro sobre as linhas
agrupadas.
Por exemplo, exibir a média salarial dos empregados de cada departamento cuja
média salarial seja superior a 8.000,00.
O filtro não é sobre a tabela de FUNCIONARIO, mas sim, sobre o agrupamento feito
sobre esta tabela.
SELECT AGRUPANDO DADOS COM GROUP BY E HAVING
Para buscar o total de salários dos funcionarios de cada UF cuja total salarial seja
superior ou igual a 3.000,00, complementamos a query acima com o Having
Buscar a média salarial dos funcionarios de cada departamento cuja média salarial
seja superior ou igual a 3.000,00. Aqui mostra pelo código do departamento.
Buscar a média salarial dos funcionarios de cada departamento cuja média salarial
seja superior ou igual a 3.000,00, Aqui mostra pelo nome do departamento, então
temos que fazer um join com a tabela departamentos
Quando você tem várias subqueries, a subquery mais interna é avaliada primeiramente.
Ou
select depto,coddepto from departamentos d
where EXISTS (select coddepto from funcionarios where coddepto=d.coddepto and
nome like 'Ana%');
Ou sem a subquery
select f.nome, f.coddepto, d.depto
from funcionarios f, departamentos d
where f.coddepto=d.coddepto and nome like ‘Ana%'
SELECT USANDO SUBQUERY
Ou sem a subquery
Para sabermos qual o maior salario de funcionário podemos usar a seguinte query
Se o objetivo fosse sómente o valor sem saber o nome podemos usar a query
select max(SALARIO) "Maior Salario" from funcionários
Ou
select coddepto,depto from departamentos
where coddepto not in (select coddepto from funcionarios)
SELECT EXPRESSÃO CASE
A expressão CASE pode ser usada como uma derivação da lógica if.. then.. else
Sintaxe:
CASE <expressao>
WHEN <valor de comparação> THEN <valor de retorno>
ELSE <valor de retorno>
END
Como na coluna sexo, da tabela funcionários, foi craido o camo com char(2) , temos
que colocar no decode ‘M_’ e ‘F_’ com espaços.
Existem as funções internas do Oracle que você pode usar para manipular dados.
Supondo que foi criada a coluna INSS e para alguns funcionários o mesmo não foi
preenchido, então se fosse efetuado um cálculo qualquer nesta coluna com null, iria
dar um erro , então podemos usar a função NVL que em caso da coluna INN não ser
preenchida podemos informar um outro valor para a mesma.
LPAD
A função LPAD completa a esquerda de uma coluna com caracteres
especificados. No caso, o a tecla | | faz a junção de campos / textos
10
gmail.com
FUNÇÕES DE TEXTO DO ORACLE
TRANSLATE
A função TRANSLATE substitui um caractere em uma string. A sintaxe
é:
TRANSLATE (expressão,de_valor,para_valor)
POWER
A função POWER retorna à potência de uma base elevada a um expoente.
A função apresenta a seguinte sintaxe:
POWER (n2, n1)
Onde:
n2 é a base n2.
n1 é o expoente se n2 for negativo, então n1 deve ser um número
inteiro.
FUNÇÕES NUMÉRICAS DO ORACLE
SQRT
A função SQRT retorna a raiz quadrada do campo ou valor informado.
Quando você cria uma sessão, todas as suas alterações só estão visíveis para você
enquanto estiver utilizando a interface. Se você quiser tornar perene suas alterações,
ou visíveis para outros usuários, você deve utilizar o comando COMMIT.
É interessante notar que quando você sai de uma sessão e a mesma é encerrada sem
problemas, ocorre um COMMIT implícito.
Se sua sessão finaliza por qualquer outro problema, ocorre um ROLLBACK implícito.
Se caso nenhum commit tenha sido efetuado, os registros não voltarão para a tabela
cargos
COMMIT – ROLLBACK - SAVEPOINT
Seu objetivo é permitir que os comandos COMMIT ou ROLLBACK possam se subdividir e que
alguns pontos possam ser salvos ou ter a transação desfeita
SAVEPOINT nome_ponto;
Para exemplificar, experimente:
SAVEPOINT ponto1
Insira um novo registro na tabela cargos
Depois apague esse registro usando o comando delete
Uma visão é como uma janela através da qual os dados das tabelas podem ser vistos e
alterados.
Uma visão é derivada de uma tabela ou de outra visão, a qual é chamada de tabela ou visão
base. - uma tabela real com os dados fisicamente armazenados.
Uma visão é armazenada na forma de um comando SELECT apenas. É uma tabela virtual, ou
seja, uma tabela que não existe fisicamente no banco de dados, mas parece existir.
Uma visão não tem dados próprios. Os dados são manipulados a partir das tabelas base.
Uma visão pode ser considerada uma consulta armazenada ou mesmo uma tabela virtual (não
existe fisicamente).
Somente a consulta é armazenada no dicionário de dados, os dados atuais não são copiados de
forma alguma. Isto indica que visão convencional não ocupa qualquer espaço de
armazenamento, somente um espaço no dicionário de dados.
VIEW - VISÃO
▪ Restringir o acesso ao banco de dados. Permite enxergar apenas parte das tabelas.
▪ Permite aos usuários executar consultas simples para obter resultados de consultas
complexas. Podem ser recuperados dados de várias tabelas como se fosse uma única tabela.
▪ Provê independência de dados, permitindo alterar as tabelas base sem afetar as aplicações
dos usuários.
•Visões simples
•• dados derivados de uma única tabela
•• não contém funções ou dados grupados.
•Visões complexas
•• dados derivados de múltiplas tabelas
•• contém funções ou dados grupados.
Sintaxe:
CREATE OR REPLACE VIEW nome_da_view [(coluna1, coluna2,...)]
AS
SELECT cláusula_select