Escolar Documentos
Profissional Documentos
Cultura Documentos
Base de Dados I
Manual de SQL
Estrutura lógica DB
File
Partição
Partição Partição
do sist
1 2
Ficheiros
File
físicos
SQL e SQL*Plus
SQL (Structured Query Language) é uma linguagem desenvolvida pela IBM (International Business
Machine) para permitir a manipulação de base de dados relacional. Após este desenvolvimento,
maioritariamente os fabricantes de base de dados relacionais iniciaram o desenvolvimento de versões
próprias da linguagem SQL. Assim, através da Oracle, surgiu o PL/SQL (Procedural
Language/Structured Query Language) que é uma extensão da linguagem padrão SQL para a base de
dados Oracle.
SQL (Structured Query Language) - Uma linguagem de base de dados que permite:
Criar as estruturas da base de dados e relações.
Realizar tarefas básicas de gestão de dados, tais como, inserir, modificar e apagar dados
das relações.
Fazer consultas simples e complexas para transformar dados em informação.
Realizar tarefas com o mínimo de esforço – os seus comandos são fáceis de aprender.
Pode ser usada interactivamente ou embebida noutra linguagem.
COMANDOS DE SQL*Plus
Principais categorias de comandos:
– Environment: afecta o comportamento geral de instruções SQL na sessão
– Format: formata resultados de consulta
– File manipulation: guarda, carrega e executa ficheiros scripts
– Execution: envia comandos SQL ou PL/SQL do buffer SQL para o servidor
– Edit: modifica comando SQL no buffer
– Interaction: permite utilizadores criar e passar variáveis para instruções SQL, imprimir valores
de variáveis, e imprimir mensagens no écran
– Miscellaneous: vários comandos para conectar à base de dados, manipular o ambiente
SQL*Plus, e mostrar a definição
Comando Descrição
A[PPEND] texto adiciona texto no fim da linha corrente
C[HANGE]/old/new/ muda o texto antigo pelo novo na linha corrente
C[HANGE]/texto/ apaga o texto da linha
CL[EAR] BUFF[ER] apaga todas as linhas do SQL buffer
DEL apaga a linha corrente
I[NPUT] insere um indefinido número de linhas
L[IST] lista todas as linhas do buffer
L[IST] n lista n linhas
L[IST] M N lista linhas de m a n
R[UN] mostra e executa o último comando do buffer
n especifica a linha para ser a corrente
n texto substitui a linha n por texto
0 texto insere uma linha antes da linha 1
3. Comandos do ficheiro
Actuam como condutor para o servidor. Controlam o ambiente, formatam os resultados das consultas
e gerem ficheiros.
Comando Descrição
SAVE nome_do_ficheiro guarda o conteúdo corrente do buffer num ficheiro
GET nome_do_ficheiro chama o conteúdo do ficheiro guardado antes no buffer
START nome_do_ficheiro executa um ficheiro guardado anteriormente
@ nome_do_ficheiro executa um ficheiro guardado anteriormente
EDIT invoca o editor e guarda o conteúdo do buffer num ficheiro chamado
afiedt.buf
ED[IT] nome_do_ficheiro invoca o editor para editar o conteúdo de um ficheiro guardado
EXIT termina SQL*Plus.
Servidor: Oracle Database 11g Release 2 Express Edition (Oracle Database 11g R2 XE)
Este é o Servidor instalado nas salas de aula para a disciplina de Base de Dados I.
Oracle Database 11g Release 2 Express Edition é uma base de dados que é distribuída gratuitamente
e, é considerada, pela Oracle, como sendo ideal para:
• Desenvolvedores
o que trabalham principalmente com Node.js, Python, PHP, Java, .NET e XML;
• Administradores de Base de Dados
o que precisam de uma base de dados gratuita para o treino inicial;
• Instituições Educacionais e Estudantes
o que precisam de incorporar uma base de dados gratuita no seu currículo.
Para conhecer mais comandos, pode-se consultar o documento: SQL Developer Command-Line
Quick Reference.pdf.
COMANDOS SQL
Todos os exemplos vão-se basear no diagrama de entidade-relação abaixo, referente a uma empresa de
bens de desporto:
REGIAO
Nome Null? Tipo
REGIAO_ID NOT NULL NUMBER (7)
REG_NOME NOT NULL VARCHAR2 (20)
DEPARTAMENTO
Nome Null? Tipo
DEPARTAMENTO_ID NOT NULL NUMBER (7)
DEP_NOME NOT NULL VARCHAR2 (25)
REGIÃO_ID NUMBER(7)
EMPREGADO
Nome Null? Tipo
EMPREGADO_ID NOT NULL NUMBER (7)
APELIDO NOT NULL VARCHAR2 (25)
PRIMEIRO_NOME VARCHAR2 (25)
USER_ID NOT NULL VARCHAR2 (10)
DATA_INI DATE
COMENTARIOS VARCHAR2 (150)
GESTOR_ID NUMBER(7)
TITULO VARCHAR2 (25)
DEPARTAMENTO_ID NUMBER(7)
SALARIO NUMBER(12,2)
COMISSAO NUMBER(4,2)
ARMAZEM
Nome Null? Tipo
REGIAO_ID NOT NULL NUMBER (7)
ARMAZEM_ID NOT NULL NUMBER (7)
ARM_NOME NULL VARCHAR2 (20)
EMPREGADO_ID NULL NUMBER (7)
CLIENTE
Nome Null? Tipo
CLIENTE_ID NOT NULL NUMBER (7)
CLIE_NOME NOT NULL VARCHAR2 (25)
TELEFONE VARCHAR2 (15)
ENDEREÇO VARCHAR2 (20)
CIDADE VARCHAR2 (15)
CREDITO VARCHAR2 (20)
VEND_RESP_ID NUMBER (7)
REGIÃO_ID NUMBER(7)
COMENTARIOS VARCHAR2 (150)
PRODUTO
Nome Null? Tipo
PRODUTO_ID NOT NULL NUMBER (7)
PROD_NOME NOT NULL VARCHAR2 (25)
DESCRIÇÃO VARCHAR2 (50)
STOCK
Nome Null? Tipo
PRODUTO_ID NOT NULL NUMBER (7)
ARMAZEM_ID NOT NULL NUMBER (7)
QTD_STOCK NUMBER (5)
MAX_STOCK NUMBER (5)
COMENT_FORA_STOCK VARCHAR2 (50)
DATA_RESTOCK DATE
ORDEM
Nome Null? Tipo
ORDEM_ID NOT NULL NUMBER (7)
CLIENTE_ID NOT NULL NUMBER (7)
DATA_ORDEM DATE
DATA_ENVIO DATE
VEND_RESP_ID NUMBER (7)
TOTAL NUMBER (11,2)
TIPO_DE_PAGAMENTO VARCHAR2 (6)
ITEM
Nome Null? Tipo
ORDEM_ID NOT NULL NUMBER (7)
ITEM_ID NOT NULL NUMBER (7)
PRODUTO_ID NOT NULL NUMBER (7)
PREÇO NUMBER (11,2)
QTD NUMBER (5)
QTD_ENVIADA NUMBER (5)
SELECT
O seu objectivo é o de seleccionar dados, podendo para tal, aplicar vários tipos de operação (selecção,
projecção, produto, junção, união, intersecção e diferença) às tabelas existentes na base de dados e
executar operações sobre os valores retirados das tabelas antes de os mostrar. O resultado de uma consulta
numa tabela é outra tabela. O comando SELECT termina sempre por um ponto e vírgula (;).
Sintaxe:
SELECT [DISTINCT | ALL] {* | [column_expression [AS new_name]][,...]}
FROM table_name [alias] [,...]
[WHERE condition (s)]
[GROUP BY column_list] [HAVING condition]
[ORDER BY column_list [ASC|DESC]];
Porque vai trabalhar com datas, para uniformizar, antes de cada sessão faça o
comando:
ALTER SESSION SET NLS_DATE_FORMAT= 'YY.MM.DD';
5. Precedência de operadores
Multiplicação e divisão têm prioridade sobre adição e subtração.
Operadores com a mesma prioridade, calculam-se da esquerda para a direita.
Mostrar o apelido, salário e compensação anual dos empregados. Compensação anual = 12*salário
mensal mais bonús de $100.
SELECT apelido, salario, 12 * salario + 100
FROM empregado;
Como se executa?
Se escrever o comando da seguinte forma
SELECT apelido, salario, 12 * (salario + 100)
FROM empregado;
O resultado é o mesmo?
Qual dos comandos responde à questão posta? Porquê?
Mostrar o apelido, salário e compensação anual dos empregados. Calcular compensação anual como
salário mensal mais bonús de $100, multiplicado por 12 meses; dar à coluna o nome de Salario Anual.
SELECT apelido, salario, 12 * (salario + 100) AS “Salario Anual”
FROM empregado;
8. Carácter literal
Um literal é um caracter, expressão ou número incluído na lista de SELECT que não é nome de
coluna ou de cabeçalho. É imprimido para cada linha
Data e valores de caracter literal devem estar entre aspas simples (' ').
Mostrar os nomes completos dos empregados e seus títulos, colocando o cabeçalho Empregados.
Marcar a pontuação.
SELECT primeiro_nome || ' ' || apelido || ', ' || titulo Empregados
FROM empregado;
NOTA: Repare que as strings são limitadas por aspas simples ou plicas (exerc 8) e as alias são limitadas
por aspas duplas (exerc 6).
Nota: Caracteres strings e datas colocam-se entre aspas simples. Os caracteres são case-
sensitive.
Escreva uma consulta que mostre o primeiro nome, apelido e titulo do empregado com apelido
Mauricio.
SELECT primeiro_nome, apelido, titulo
FROM empregado
WHERE apelido = 'MAURICIO';
Analise o resultado e depois faça
SELECT primeiro_nome, apelido, titulo
FROM empregado
WHERE apelido = ' Mauricio ';
Qual a diferença?
Regras de precedência
Ordem de avaliação Operadores
1 todos os operadores de comparação
2 AND
3 OR
– Listar apelido, salário, número de departamento e título para todos os gestores de armazém do
departamento 41.
SELECT apelido, salario, departamento_id, titulo
FROM empregado
WHERE departamento_id = 41
AND titulo = 'Gestor de Armazem';
Anote o resultado e faça o comando a seguir.
– Listar apelido, salário, número de departamento e título para todos os empregados que são ou
gestores de armazém ou que estão no departamento 41.
SELECT apelido, salario, departamento_id, titulo
FROM empregado
WHERE departamento_id = 41
OR titulo = 'Gestor de Armazem';