Você está na página 1de 17

ISCTEM - INSTITUTO SUPERIOR DE CIÊNCIAS E TECNOLOGIA DE MOÇAMBIQUE

Curso de Engenharia Informática

Base de Dados I

Manual de SQL

Elaborado por: Dra. Otília G. Fernandes da Graça


MANUAL DE SQL

Sistema de Gestão da Base de Dados Relacional


O Sistema de Gestão de Base de Dados Relacional (SGBDR) inclui o gestor de Bases de Dados e várias
ferramentas destinadas a fazer a interface entre utilizadores e gestores (ou em inglês, Data Base
Administrators ou DBAs) com a BD. É da responsabilidade do kernel do SGBDR:
• A gestão e armazenamento dos dados
• Controlo e restrição de acessos a dados
• Gestão de concorrência
• Controlo de segurança e recuperação de dados
• Interpretação da linguagem SQL
A linguagem SQL representa o único acesso possível à BD.
A maior parte das vezes, as bases de dados são utilizadas através de computadores clientes com aplicações
independentes da base de dados que consultam e alteram a informação e a estrutura desta através de uma
ligação de rede.

Sistema de Gestão da Base de Dados Oracle


Visão externa de uma base de dados Oracle
Para o utilizador uma BD Oracle é constituída por um conjunto de contas de utilizadores.
Cada conta tem um user name (nome do utilizador) e é protegida por uma password. De acordo com
privilégios e permissões, cada conta pode criar, acessar e actualizar um conjunto de tabelas.
Existem 3 tipos de privilégios:
Connect – pode entrar na BD e acessar e actualizar tabelas para as quais tem permissão; não pode criar
tabelas, mas pode criar views.
Resource – pode criar as suas próprias tabelas e dar privilégios para o seu uso a outros utilizadores.
DBA – pode dar e revogar privilégios a outros utilizadores, criar e alterar partições, fazer backup e acessar
e actualizar dados dos utilizadores.

Visão interna de uma base de dados Oracle


As tabelas de dados que compreendem os dados contidos em BD Oracle residem num único ficheiro
lógico da base de dados (DB file).
Este consiste de uma ou mais partições que consistem por sua vez de um ou mais ficheiros armazenados
nos discos.
Partições são unidades lógicas que apenas podem ser manipuladas dentro do próprio Oracle.
Um utilizador vê a partição como tabelas, não vê os ficheiros físicos.

Elaborado por Dra. Otília Fernandes da Graça 1


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.

SQL*Plus é uma ferramenta Oracle que reconhece e executa instruções SQL.

Elaborado por Dra. Otília Fernandes da Graça 2


MANUAL DE SQL

Interacção entre SQL e SQL*Plus

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

1. Mostrar a estrutura da tabela


DESC[RIBE] nome_da_tabela

2. Comandos para editar


Quando se escreve um comando SQL ele é armazenado numa parte da memória chamada SQL buffer
e fica ali até entrar um novo comando.
- Se pressionar RETURN antes de completar um comando, SQL*Plus passa para uma nova linha e
mostra o número de linha
- Termina o SQL buffer escrevendo um ponto e vírgula (;) ou uma barra (\) ou pressionando
RETURN duas vezes.

Elaborado por Dra. Otília Fernandes da Graça 3


MANUAL DE SQL

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.

Elaborado por Dra. Otília Fernandes da Graça 4


MANUAL DE SQL

Ambiente de Aulas Práticas de Base de Dados I

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.

Elaborado por Dra. Otília Fernandes da Graça 5


MANUAL DE SQL

Cliente: SQL Developer Command Line (SQLcl) 17.2


Este é o Cliente instalado nas salas de aula para a disciplina de Base de Dados I.
Oracle SQL Developer Command Line (SQLcl) é uma nova ferramenta gratuita com interface de linha de
comando para a base de dados Oracle. Essencialmente, esta ferramenta permite executar comandos
escritos do teclado ou ficheiro na linguagem SQL ou PL/SQL, formatar o resultado de uma consulta e,
conectar a uma base de dados local ou remota.
Alguns comandos úteis do SQLcl:
• clear screen - limpa o ecrã
• shift {esquerda, direita, cima, baixo} - permite navegação num comando
• seta_para_cima_ou_baixo - permite aceder os comandos já executados
• history - visualizar o histórico dos comandos executados
• set history blacklist comando_desejado- desabilitar o armazenamento de comandos no histórico
• history número_da_linha_do_comando_desejado - carregar um comando existente no histórico
• history clear - limpar o histórico de comandos executados
• cd - mudar de directoria estando na consola
• show SQLPATH - visualizar a directoria por onde a ferramenta foi invocada
• set sqlformat {csv, html, xml, json, ansiconsole, insert, loader, fixed, default}- escolher o formato
de apresentação de resultados (saída)

Para conhecer mais comandos, pode-se consultar o documento: SQL Developer Command-Line
Quick Reference.pdf.

Elaborado por Dra. Otília Fernandes da Graça 6


MANUAL DE SQL

COMANDOS SQL

A linguagem SQL é baseada em operações de conjuntos e de álgebra relacional com algumas


modificações e extensões.
Por exemplo, uma consulta SQL básica tem a forma:
SELECT A1, A2, ..., An
FROM r1, r2, ..., rm
WHERE P;
onde
An representam atributos
rm representam relações
P é um predicado.
A consulta é equivalente à expressão de álgebra relacional:

πA1, A2, ..., An (σP (r1 x r2 x ... x rm))


Os comandos SQL consistem de palavras em Inglês.
Uma instrução SQL consiste de palavras reservadas e palavras definidas pelo utilizador. Palavras
reservadas são partes fixas da linguagem e têm significado fixo, e vamos optar por escrever em
maiúsculas. Palavras definidas pelo utilizador representam nomes de objectos da base de dados e relações
e vamos optar por escrever em minúscula.
Os principais comandos SQL são:
Para Manipulação de dados (DML)
– SELECT
– INSERT, UPDATE, DELETE
Para Definição de dados (DDL)
– CREATE, ALTER, DROP, RENAME, TRUNCATE
Para Controlo de transacção
– COMMIT, ROLLBACK, SAVEPOINT
Para Segurança (DCL)
– GRANT, REVOKE

De seguida iremos estudar o comando SELECT.

Elaborado por Dra. Otília Fernandes da Graça 7


MANUAL DE SQL

Todos os exemplos vão-se basear no diagrama de entidade-relação abaixo, referente a uma empresa de
bens de desporto:

DESCRIÇÃO DAS TABELAS

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)

Elaborado por Dra. Otília Fernandes da Graça 8


MANUAL DE SQL

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)

Elaborado por Dra. Otília Fernandes da Graça 9


MANUAL DE SQL

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)

Elaborado por Dra. Otília Fernandes da Graça 10


MANUAL DE SQL

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]];

onde DISTINCT suprime duplicados


column_expression nome da coluna
AS new_name dá à coluna seleccionada um cabeçalho diferente (outro nome)
table_name nome da tabela da base de dados contendo as colunas
alias abreviatura opcional para o nome da tabela
WHERE restringe a consulta às linhas que satisfaçam a condição
Condition é composto por nomes de colunas, expressões, constantes, e operadores de
comparação.

| significa escolha entre alternativas


{} indica elemento obrigatório; [ ] indica elemento opcional

Sequência do processamento de um SELECT:


FROM especifica a tabela ou tabelas a serem usadas
WHERE filtra as linhas sujeitas a alguma condição
GROUP BY forma grupos de linhas com o mesmo valor de coluna
HAVING filtra os grupos sujeitos a alguma condição
SELECT especifica que colunas são para aparecer no output
ORDER BY especifica a ordem do output.
A ordem das cláusulas no SELECT não pode ser mudada.
SELECT e FROM são mandatórias; as restantes são opcionais.
O resultado de uma consulta sobre uma tabela é outra tabela.

Elaborado por Dra. Otília Fernandes da Graça 11


MANUAL DE SQL

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';

1. Seleccionar todas as colunas e todas as linhas

Mostrar todas as linhas e colunas da tabela DEPARTAMENTO


SELECT *
FROM departamento;

2. Seleccionar algumas colunas e todas as linhas.

Mostrar todos os números de departamento, apelido e números de gestores da tabela EMPREGADO


SELECT departamento_id, apelido, gestor_id
FROM empregado;
Como se executa?

3. Linhas duplicadas - Cláusula DISTINCT


Se nada for dito, SQL repete as linhas.
Para eliminar linhas duplicadas do resultado, deve-se incluir DISTINCT no SELECT.

Mostrar os nomes dos departamentos da tabela Departamento.


SELECT dep_nome
FROM departamento;

SELECT DISTINCT dep_nome


FROM departamento;

Qual a diferença entre os dois comandos?

DISTINCT com múltiplas colunas


Afecta todas as colunas selecionadas.

Mostrar todas as diferentes combinações de títulos e números de departamento.


SELECT DISTINCT departamento_id, titulo
FROM empregado;
Como se executa?

Elaborado por Dra. Otília Fernandes da Graça 12


MANUAL DE SQL

4. Campos calculados – Uso de expressões aritméticas

Mostrar o salário anual para todos os empregados


SELECT apelido, salario * 12
FROM empregado;
Como se executa?

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ê?

6. Uso de AS, pseudónimos (ou alias)


Usam-se para dar um novo nome a uma coluna.

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;

SELECT apelido, salario, 12 * (salario + 100) “Salario Anual”


FROM empregado;

SELECT apelido, salario, 12 * (salario + 100) AS Salario Anual


FROM empregado;

Qual a diferença? Porquê?

Elaborado por Dra. Otília Fernandes da Graça 13


MANUAL DE SQL

7. Operador Concatenação (||)


Liga colunas ou caracteres string a outras colunas; o resultado é uma expressão caracter.

Mostrar os nomes completos dos empregados, colocando o cabeçalho Empregados.


SELECT primeiro_nome || apelido Empregados
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).

9. Limitar linhas com cláusula WHERE.


A cláusula WHERE permite restringir linhas através de uma condição. Apenas as linhas que
satisfaçam a condição são devolvidas. Podem usar-se no WHERE condições sobre uma ou mais
colunas de uma ou mais tabelas desde que as tabelas apareçam na cláusula FROM. Podem aparecer na
cláusula WHERE nomes de colunas que não apareçam na cláusula SELECT. Não se podem usar
pseudónimos de colunas. Para além de fazer restrições simples sobre uma tabela, o uso mais comum
do WHERE é o de permitir relacionar colunas de várias tabelas.
Sintaxe:
SELECT expr
FROM table
[WHERE condition];
condition é composto por nomes de colunas, expressões, constantes e operadores de comparação.
Mostrar o apelido, número de departamento e o salário de todos os empregados do departamento 42.
SELECT apelido, departamento_id, salario
FROM empregado
WHERE departamento_id = 42;
Como se executa e qual o resultado?

Elaborado por Dra. Otília Fernandes da Graça 14


MANUAL DE SQL

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?

10.Operadores de comparação, lógicos e operadores SQL


Operadores de comparação:
= igual a
> maior do que
>= maior ou igual a
< menor do que
<= menor ou igual a
!= diferente
<> diferente
Operadores lógicos:
AND
OR
NOT
Operadores SQL:
BETWEEN... AND...
IN (lista)
LIKE <cadeia_de_caracteres>
IS NULL
NOT BETWEEN
NOT IN
NOT LIKE <cadeia_de_caracteres>
IS NOT NULL

Elaborado por Dra. Otília Fernandes da Graça 15


MANUAL DE SQL

Regras de precedência
Ordem de avaliação Operadores
1 todos os operadores de comparação
2 AND
3 OR

11. Consultar dados com múltiplas condições.


– Listar apelido, salário e número de departamento dos empregados do departamento 50 que
recebem 1250 ou mais, assim como todos os empregados do departamento 43.
SELECT apelido, salario, departamento_id
FROM empregado
WHERE salario > 1250
AND departamento_id = 50
OR departamento_id = 43;
Como se executa o comando? Qual a ordem?
– Listar apelido, salário e número de departamento dos empregados do departamento 50 ou 43 que
recebem 1250 ou mais.
SELECT apelido, salario, departamento_id
FROM empregado
WHERE salario > 1250
AND (departamento_id = 50
OR departamento_id = 43);
Como se executa o comando? Qual a ordem?
Qual a diferença entre os resultados dos dois comandos?

– 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';

Qual a diferença entre os resultados dos dois comandos?

Elaborado por Dra. Otília Fernandes da Graça 16

Você também pode gostar