135
Desenvolvimento Banco Dados - SQL SQL - Structured Query Language Base Oracle Ana Leda

Banco de Dados Uni

Embed Size (px)

DESCRIPTION

apostila

Citation preview

Page 1: Banco de Dados Uni

Desenvolvimento Banco Dados - SQL

SQL - Structured Query Language

Base Oracle

Ana Leda

Page 2: Banco de Dados Uni

Banco de Dados II 2

SQL - Structured Query Language Definida por D. D. Chamberlin e outros, nos

laboratórios de pesquisa da IBM em San Jose, California, em 1974.

Fundamentos no modelo relacional de Edgar Frank Codd, criado em 1970.

Primeira versão recebeu o nome de SEQUEL - Structured English Query Language.

Órgãos como ANSI e ISO adotaram a SQL como o padrão oficial de linguagem em ambiente relacional.

Page 3: Banco de Dados Uni

Banco de Dados II 3

SQL - Structured Query Language ANSI publicou as padronizações SQL ANSI-89 e ANSI-

92.

Vários dialetos SQL adotam o padrão ANSI com extensões proprietárias.

Interface ODBC (Open Database Connectivity) converte sintaxe SQL de um produto em outro.

Independência de fabricante incorporada em quase todos os SGBD’s em seu padrão

ANSI, com as extensões proprietárias de cada fabricante.

Page 4: Banco de Dados Uni

Banco de Dados II 4

SQL - Structured Query Language Portabilidade entre computadores

pode ser usada desde um PC até um mainframe.

Redução de custos com treinamento aplicações podem migrar de ambiente com custo

reduzido em treinamento.

Facilidade no entendimento comandos escritos em um inglês estruturado de alto

nível.

Consulta interativa acesso rápido aos dados através de comandos interativos.

Page 5: Banco de Dados Uni

Banco de Dados II 5

SQL - Structured Query Language Múltiplas visões de dados

possibilita levar diferentes visões dos dados a diferentes usuários.

Definição dinâmica de dados possibilita a alteração dinâmica das estruturas dos

dados armazenados, com flexibilidade.

Page 6: Banco de Dados Uni

Banco de Dados II 6

ODBC - Open Database Connectivity faz a conexão com o banco de dados e fornece os

registros como cursores.

Linguagens específicas (ex:Powerbuilder) aceitam comandos SQL embutidos na linguagem,

funcionando também como cursores.

Sistemas visuais como VB e Delphi possuem componentes para bancos de dados além de alguns

comandos de SQL embutidos.

Uso de SQL em aplicativos

Page 7: Banco de Dados Uni

Banco de Dados II 7

ORACLE - Banco de Dados Relacional.

SQL - Linguagem de comunicação entre o Oracle e a maioria das ferramentas e aplicações.

SQL PLUS - Ferramenta do Oracle que reconhece e executa declarações SQL.

Banco

SQL SQL PLUS

SQL - Structured Query Language

Page 8: Banco de Dados Uni

Banco de Dados II 8

SQL - Structured Query Language

Comando SQL ao término do comando SQL deve-se acrescentar ponto

e vírgula(;) e pressionar <Enter> para ser executado imediatamente.

SQL*BUFFER parte da memória gerenciada pelo SQL*PLUS, que

armazena um comando sql por vez. todo comando simples é realocado no SQL*BUFFER,

toda vez que um novo comando é executado.

SQL Command

SQL Buffer

Page 9: Banco de Dados Uni

Banco de Dados II 9

SQL - Structured Query Language

Pesquisar dados no banco.

Adicionar, modificar e remover dados.

Criar, modificar e remover estruturas de dados.

Regular o acesso aos dados.

Page 10: Banco de Dados Uni

Banco de Dados II 10

SQL - Structured Query Language Manipulação de Dados Declarados (DML)

Insert

Update

Delete

Commit

Rollback

Select

Page 11: Banco de Dados Uni

Banco de Dados II 11

SQL - Structured Query Language Definição de Dados Declarados (DDL)

Create

Alter

Drop

Rename

Controle de Dados Declarados (DCL)

Grant

Revoke

Lock

Page 12: Banco de Dados Uni

Banco de Dados II 12

Comandos SQL*Plus Comandos de Execução

/ Execute Run

Comando de Edição Edit

Page 13: Banco de Dados Uni

Banco de Dados II 13

Comandos SQL*Plus Comandos para Manipulação de Arquivos

Start ou @

Spool

Page 14: Banco de Dados Uni

Banco de Dados II 14

Comandos podem ser escritos em mais de uma linha.

Cláusulas diferentes são colocadas usualmente em linhas diferentes.

Comandos podem ser escritos em letras maiúsculas e minúsculas.

Deve haver pelo menos um espaço entre um comando e outro.

Regras para escrever comandos SQL

Page 15: Banco de Dados Uni

Banco de Dados II 15

Char ( S ) Alfanumérico de tamanho fixo, máximo 2000 caracteres.

Varchar2 ( S ) Alfanumérico com tamanho máximo de 4000 caracteres.

O que não for utilizado não ocupa espaço no banco de dados.

Varchar ( S) Mesmo que Varchar2.

Long Similar ao Varchar2, porém, o tamanho máximo é de 2

gigabytes. O valor não pode ser informado. Só pode existir um por tabela e não pode ser usado em consultas.

SQL - Tipos de Dados

Page 16: Banco de Dados Uni

Banco de Dados II 16

Number (P,S) Valor numérico com tamanho máximo de 38 caracteres,

sendo P o nº total de dígitos (inteiros + decimais) e S o nº de casas decimais.

Date Valor de data e hora (01/01/4712 AC até 31/12/4712

DC).

SQL - Tipos de Dados

Page 17: Banco de Dados Uni

Banco de Dados II 17

Simbologia ExplicaçãoPK Chave Primária

FK Chave Estrangeira

FK1, FK2 Duas Chaves Estrangeiras namesma tabela.

FK1, FK2 Duas colunas formando umaChave Estrangeira.

NN Coluna Not Null

U Coluna Única

U1, U2 Duas colunas que são umacombinação.

SQL - Simbologia

Page 18: Banco de Dados Uni

Banco de Dados II 18

Constraint ou Restrição representa um mecanismo capaz de implementar

controles que garantam a consistência dos dados (integridade de dados referencial).

pode ser definido tanto para uma coluna (afeta apenas um campo), como para toda a tabela (afeta todos os campos).

Definir Restrições de Integridade de Dados

Page 19: Banco de Dados Uni

Banco de Dados II 19

Constraint Descrição

Not Null Especifica que a coluna não pode conter valores nulos.

Unique Especifica uma coluna ou combinação de

colunas que terão seus valores únicos na tabela.

Primary Key Identifica a unicidade de cada linha na tabela.

Foreign Key (references)

Estabelece e força um relacionamento entre tabelas.

Check Especifica uma condição que deve ser verdadeira obedecendo uma regra do negócio.

Definir Restrições de Integridade de Dados

Page 20: Banco de Dados Uni

Banco de Dados II 20

SQL - Comandos

Estrutura física das tabelas - comandos DDL que afetam as colunas das tabelas (campos)

Criação da tabela: Comando CREATE TABLE

Alteração da tabela: Comando ALTER TABLE

Exclusão da tabela: Comando DROP TABLE

Page 21: Banco de Dados Uni

Banco de Dados II 21

Create Table - Criar tabelas p/armazenar dados

Sintaxe:

Create Table [User.]Nome_Tabela

(Nome_Coluna DataType [(Tamanho)] [Default expr] [Constraint] [,

Nome_Coluna DataType [(Tamanho)] [Default expr] [Constraint] ] [,...)

NOME_TABELANOME_TABELA - nome da tabela

NOME_COLUNA - nome do campo

DATATYPE DATATYPE - tipo de dado da coluna

CONSTRAINT_TABELACONSTRAINT_TABELA - “CONSTRAINT” de dado para a coluna

SQL - Comandos

Page 22: Banco de Dados Uni

Banco de Dados II 22

Create - Regras de Nomeação

nomes da tabelas e colunas devem ser de 1-30 caracteres;

o primeiro caracter deve der alfabético;

nomes devem conter somente os caracteres de a-z, A-Z, 0-9, _(underscore), $ e #(seu uso não é recomendado);

nomes não podem ser iguais as palavras reservadas do Oracle;

nome da tabela não pode ser igual ao nome de um outro objeto criado pelo mesmo usuário Oracle.

SQL - Comandos

Page 23: Banco de Dados Uni

Banco de Dados II 23

Create Table

Exemplo 1:

CREATE TABLE Regiao

( Codigo Number(7),

Nome Varchar(30) CONSTRAINT Regiao_Nome_NN NOT NULL,

CONSTRAINT Regiao_Codigo_PK PRIMARY KEY(Codigo),

CONSTRAINT Regiao_Nome_UK UNIQUE (Nome));

SQL - Comandos

Page 24: Banco de Dados Uni

Banco de Dados II 24

Create Table

Exemplo 2:

CREATE TABLE Empregado (

Codigo Number(7),

Nome Varchar(25) CONSTRAINT Emp_Nome_NN NOT NULL ,

DtAdm Date, CPF Number(15), Comentarios Varchar(25),

Salario Number(11,2), PctComis Number(4,2),

CONSTRAINT Emp_Cod_PK PRIMARY KEY (Codigo),

CONSTRAINT Emp_CPF_UK UNIQUE (CPF),

CONSTRAINT Emp_PctComis CHECK (PctComis IN (10, 12.5, 15)));

SQL - Comandos

Page 25: Banco de Dados Uni

Banco de Dados II 25

SQL - Comandos Comandos SQL*PLUS

/ - Executa a declaração contida no SQL Buffer mostrando somente o resultado.

Run - Exibe o comando e executa a declaração contida no SQL Buffer.

Page 26: Banco de Dados Uni

Banco de Dados II 26

SQL - Comandos Comandos para Edição PLUS

ED(it) – chama o editor

Exemplo:

sql> ED

Page 27: Banco de Dados Uni

Banco de Dados II 27

SQL - Comandos Tabela do BD Oracle que armazena Constraints

Coluna DescriçãoOwner Nome do usuário que criou a

constraint.Constraint_Name

Nome da constraint.

Table_Name Nome da tabela associada com a constraint.

Constraint_Type

Tipo de definição de constraint:C – Check or Not NullP – Primary KeyR – Foreign KeyU – Unique

User_Constraints

Page 28: Banco de Dados Uni

Banco de Dados II 28

SQL - Comandos Tabela do BD Oracle que armazena Constraints

Coluna DescriçãoSearch_Condition Texto da condição de

procura da constraint tipo Check.

R_Owner Nome do usuário dono da tabela referenciada pelaconstraint referencial.

R_Constraint_Name

Nome da chave primáriareferenciada pela constraintreferencial.

Page 29: Banco de Dados Uni

Banco de Dados II 29

SQL - Comandos Visualizar estrutura da tabela

Sintaxe:

DESCRIBE <nome-tabela>

Visualizar constraints

Sintaxe:

DESCRIBE user_constraints

onde USER_CONSTRAINTS é uma tabela interna do dicionário Oracle.

Page 30: Banco de Dados Uni

Banco de Dados II 30

SQL - Comandos Visualizar objetos

Sintaxe:

DESCRIBE user_objects

Mostra os objetos disponíveis na base de dados:

Name Null Type-------- ------ ------OBJECT_NAME VARCHAR2(128)OBJECT_ID NUMBEROBJECT_TYPE VARCHAR2(13)CREATED DATELAST_DDL_TIME DATETIMESTAMP VARCHAR2(75)STATUS VARCHAR2(7)

Page 31: Banco de Dados Uni

Banco de Dados II 31

SQL - Comandos Exibindo linhas do dicionário de dados Oracle

Sintaxe:

SELECT * FROM TAB;

TABLE_NAME------------------ CLIENTEDEPARTAMENTOEMPREGADOPRODUTOSREGIAO

Page 32: Banco de Dados Uni

Banco de Dados II 32

Alter Table – Alterar estrutura de uma tabela

criar, alterar ou eliminar colunas;

renomear a tabela;

criar ou eliminar constraints;

habilitar ou desabilitar constraints.

SQL - Comandos

Page 33: Banco de Dados Uni

Banco de Dados II 33

SQL - Comandos

ALTER TABLE

Banco de Dados II 33

ADD ADD CONSTRAINT MODIFY DROP CONSTRAINT DROP COLUMN RENAME COLUMN RENAME

Page 34: Banco de Dados Uni

Banco de Dados II 34

Alter Table – Criando nova coluna na tabela

Sintaxe:

Alter Table Nome_Tabela Add

(Nome_Coluna DataType [Constraint_ Coluna],...)

Exemplo:

ALTER TABLE Regiao ADD (Comentarios Varchar2(100));

SQL - Comandos

Page 35: Banco de Dados Uni

Banco de Dados II 35

Alter Table – Alterando uma coluna na tabela

Sintaxe:

Alter Table Nome_Tabela Modify

(Nome_Coluna DataType|[Constraint_

Coluna],...)

Exemplo:

ALTER TABLE Regiao MODIFY (Comentarios Varchar2(255));

OBS: A modificação do tipo e/ou tamanho só deve ser feita se não houver dados cadastrados na coluna.

SQL - Comandos

Page 36: Banco de Dados Uni

Banco de Dados II 36

SQL - Comandos

Alter Table – Adicionando uma Constraint numa coluna já

existente na tabela

Exemplo:

ALTER TABLE Departamento ADD CONSTRAINT

Depto_CodReg_FK Foreign Key

(Cod_Regiao) REFERENCES Regiao(Codigo);

Page 37: Banco de Dados Uni

Banco de Dados II 37

SQL - Comandos

Alter Table – Eliminando Constraint em uma tabela

Exemplo:

ALTER TABLE Departamento DROP

CONSTRAINT Depto_CodReg_FK;

Page 38: Banco de Dados Uni

Banco de Dados II 38

SQL - Comandos

Alter Table – Renomeando coluna em uma tabela

Exemplo:

ALTER TABLE Regiao RENAME COLUMN

Comentarios TO Observacao;

Page 39: Banco de Dados Uni

Banco de Dados II 39

SQL - Comandos

Alter Table – Eliminando coluna em uma tabela

Exemplo:

ALTER TABLE Regiao DROP COLUMN

Observacao;

Page 40: Banco de Dados Uni

Banco de Dados II 40

SQL - Comandos

Alter Table – Renomeando uma tabela

Exemplo:

ALTER TABLE Regiao RENAME TO Regioes;

OBS: Também é possível renomear uma tabela desta

forma:

RENAME Regiao TO Regioes;

Page 41: Banco de Dados Uni

Banco de Dados II 41

SQL - Comandos

Drop Table – Eliminar uma tabela

Sintaxe:

Drop Table Nome_Tabela;

Exemplo:

DROP TABLE Departamento;

Page 42: Banco de Dados Uni

Banco de Dados II 42

SQL - Comandos

Drop Table – Eliminar uma tabela e constraints de FK

Sintaxe:

Drop Table Nome_Tabela CASCADE CONSTRAINT;

Exemplo:

DROP TABLE Dept CASCADE CONSTRAINT;

OBS: A tabela DEPT é eliminada, bem como, todos os

relacionamentos que houverem com essa tabela, em que a

chave primária de DEPT seja chave estrangeira em alguma

delas.

Page 43: Banco de Dados Uni

Banco de Dados II 43

SQL - Comandos

Alterações nos dados - comandos DML que afetam as linhas de uma tabela (registros)

Inclusão de linhas: Comando INSERT

Alteração de linhas: Comando UPDATE

Exclusão de linhas: Comando DELETE

Page 44: Banco de Dados Uni

Banco de Dados II 44

SQL - Comandos

Insert – Adicionar linha numa tabela

Sintaxe:

INSERT INTO Nome_Tabela (coluna1, coluna2, colunaN)

VALUES (valor1, valor2, valorN);

Exemplo 1:

INSERT into Aluno (matricula, nome_aluno)

VALUES (8,’Milton Soares’);

OBS:Se não forem definidos todos os campos, eles

ficarão com valor nulo (se permitido).

Page 45: Banco de Dados Uni

Banco de Dados II 45

SQL - Comandos

Insert – Inserindo linhas sem relacionar colunas

Exemplo 2:

INSERT into Funcionario VALUES

(8,’Milton’,2000,’M’);

OBS:Neste caso, os valores correspondem aos campos

de acordo com a ordem em que foram definidos

na tabela. A relação de colunas da tabela só pode

ser omitida quando forem inclusos valores para todas

as colunas dessa tabela.

Page 46: Banco de Dados Uni

Banco de Dados II 46

SQL - Comandos Insert – Inserindo linhas com variáveis

Exemplo 3:

INSERT into Aluno (cod_matric, nome_aluno,

data_matric) VALUES (&Matricula, ‘&Nome’, ‘&Data’);

O comando INSERT terá a seguinte execução:Informe o valor para matricula: Informe o valor para nome:Informe o valor para data:

Este comando poderá ser executado diversas vezes,pedindo novos valores para os campos, bastando paraisso, ao final de cada execução, digitar / e <Enter>.

Quando os campos são do tipo caractere ou data, a entrada dos valores

precisam estar entre aspas simples. Para facilitar, coloque o nome das

variáveis entre aspas, dispensando o uso de aspas pelo usuário.Ex: (‘&Nome’, ‘&Data’)

Page 47: Banco de Dados Uni

Banco de Dados II 47

SQL - Comandos Update – Alterar dados numa tabela

Sintaxe:

UPDATE <Tabela>

SET <Coluna> = <Novo Valor>

[, <Coluna> = <Novo Valor>...]

WHERE <Condição>

Page 48: Banco de Dados Uni

Banco de Dados II 48

SQL - Comandos Update

Na cláusula SET são especificados os campos que terão seu valor alterado e qual será seu novo valor;

A cláusula WHERE especifica qual(is) a(s) linha(s) que terá(ão) esse valor alterado. Caso não haja cláusula WHERE, os valores serão alterados para todas as linhas da tabela;

A expressão de atualização pode envolver a própria coluna;

O WHERE pode ter qualquer condição válida, inclusive subconsultas. O WHERE é avaliado antes das atualizações, uma vez que pode envolver valores sendo alterados.

Page 49: Banco de Dados Uni

Banco de Dados II 49

SQL - Comandos Update

Exemplo 1: Atualizar todos os salários aumentando 5%.

UPDATE Funcionario SET Salario = Salario * 1.05;

Exemplo 2: Atualizar o salário de todos os funcionários para 10000.

UPDATE Funcionario SET Salario = 10000;

Page 50: Banco de Dados Uni

Banco de Dados II 50

SQL - Comandos Update com WHERE

Exemplo 1: Atualizar os salários aumentando 5% para os funcionários que ganham menos que 1000.

UPDATE Funcionario SET Salario = Salario * 1.05

WHERE Salario < 1000;

Page 51: Banco de Dados Uni

Banco de Dados II 51

SQL - Comandos Delete – Excluir linhas de uma tabela

Sintaxe:

DELETE from <Tabela> [ WHERE <Condição>]

OBS: Caso a cláusula WHERE seja omitida, todas as linhas da tabela serão eliminadas. CUIDADO!

Exemplo:

DELETE from Funcionario;

DELETE from Produto;

Page 52: Banco de Dados Uni

Banco de Dados II 52

SQL - Comandos Delete

Quando usado com o WHERE, pode especificar quais linhas apagar;

O WHERE do DELETE comporta quase todas as condições possíveis do Select, desde que seja somente referente a uma tabela;

Subconsultas são permitidas;

Page 53: Banco de Dados Uni

Banco de Dados II 53

SQL - Comandos Delete

Exemplos:

DELETE from Funcionario WHERE NumDepto= 003;

DELETE from Funcionario WHERE Salario between 1000 and 2000;

DELETE from EMP WHERE deptno in (Select deptno from DEPT where dname =

‘SALES’);

Page 54: Banco de Dados Uni

Banco de Dados II 54

SQL - Comandos Delete

O teste da condição é feito antes das linhas serem removidas.

Na consulta a seguir, se isso não fosse feito, poderíamos ter resultados imprevisíveis:

Exemplo:

DELETE from funcionario WHERE salario >

(Select avg(salario) from Funcionario)

Page 55: Banco de Dados Uni

Banco de Dados II 55

SQL - Transações Commit

Finaliza a transação corrente, tornando permanente todas as mudanças pendentes no banco de dados feitas pelos comandos insert, update e delete.

Toda mudança de dados efetuada durante a transação é temporária até que a transação seja efetivada, ou seja, dado um “COMMIT”.

Sintaxe:

COMMIT

Page 56: Banco de Dados Uni

Banco de Dados II 56

SQL - Transações Show autocommit

Mostra como está o commit, se ON ou OFF.

Sintaxe:

SHOW AUTOCOMMIT

Set autocommit on

Um Commit é feito a cada inserção, alteração e deleção.

Set autocommit off

É necessário fazer o Commit para efetivar as transações pendentes.

Page 57: Banco de Dados Uni

Banco de Dados II 57

SQL - Transações Rollback

Finaliza a transação corrente descartando todas as mudanças pendentes.

Sintaxe:

ROLLBACK

Page 58: Banco de Dados Uni

Banco de Dados II 58

SQL - Comandos Comando para Manipulação de Arquivos

SPOOL - salva em arquivo comandos do SQLPlus

sql> spool a:grava.txt

sql> select * from emp ;

sql> spool off

Page 59: Banco de Dados Uni

Banco de Dados II 59

SQL - Comandos Comando para Manipulação de Arquivos

Executa um arquivo salvo usando START ou @:

Sintaxe:

START nome_arquivo

Exemplo: START a:consulta1

@a:consulta1.sql

Page 60: Banco de Dados Uni

Banco de Dados II 60

SQL - Comandos Comando SELECT – consultar dados numa tabela

O SELECT possui uma cláusula obrigatória (FROM) e outras cláusulas opcionais (INTO, WHERE, GROUP BY, HAVING, UNION, ORDER BY).

Sintaxe:

SELECT <coluna1>, <coluna2>,...,<colunan>

FROM <tabela1>, <tabela2>,...<tabelam>

Page 61: Banco de Dados Uni

Banco de Dados II 61

SQL - Comandos Comando SELECT

O sistema consegue descobrir de onde cada coluna vem pelo dicionário de dados.

No select, escolhemos quais colunas farão parte do resultado.

As colunas devem pertencer as tabelas presentes na cláusula FROM.

Quando há colunas com o mesmo nome, diferencia-se colocando o nome da tabela antes do nome da coluna, separadas por um ponto.

Quando desejamos escolher todas as colunas, podemos usar o asterisco (*). Ex: sql> SELECT * FROM funcionario

As repetições são mantidas. Para eliminá-las podemos usar a cláusula distinct. Ex: SELECT DISTINCT nome FROM Aluno

Page 62: Banco de Dados Uni

Banco de Dados II 62

SQL - Comandos

Select - Alterando o Cabeçalho das Colunas

Sintaxe:

SELECT <campo1 [AS] nome1, campo2 [AS]

nome2, ...> FROM <tabela>

OBS: Exibe todos os campos constantes na <lista de

campos> e exibe também um nome alternativo para

cada campo, que será exibido como cabeçalho da

coluna correspondente.

Page 63: Banco de Dados Uni

Banco de Dados II 63

SQL - Comandos

Select - Alterando o Cabeçalho das Colunas

Exemplo 1: Exibir nome, salário e uma coluna contendo “não classificado” com o cabeçalho “Classificação” para todos os empregados.

SELECT ename , sal, 'não classificado' as

Classificação FROM Emp

Page 64: Banco de Dados Uni

Banco de Dados II 64

SQL - Comandos

Select – resultado do comando anterior

SQL> /

ENAME SAL CLASSIFICAÇÃO---------- ------- --------------------SMITH 800 não classificadoALLEN 1600 não classificadoWARD 1250 não classificadoJONE S 2975 não classificadoMARTIN 1250 não classificadoBLAKE 2850 não classificadoCLARK 2450 não classificadoSCOTT 3000 não classificado KING 5000 não classificado

Page 65: Banco de Dados Uni

Banco de Dados II 65

SQL - Comandos

Select - Alterando o Cabeçalho das Colunas

OBS:

Se o pseudônimo contém brancos, caracteres especiais como (# ou _), ou em casos similares, incluir o pseudônimo entre aspas dupla (“”).

Separe as colunas do pseudônimo usando espaços.

Page 66: Banco de Dados Uni

Banco de Dados II 66

SQL - Comandos Select - Alterando o Cabeçalho das Colunas

Exemplo 2:

SELECT Ename Nome, Empno Registro, Job “Ocupação” From Emp;

NOME REGISTRO Ocupação--------- -------------------------------

SMITH 7369 CLERK

ALLEN 7499 SALESMAN

WARD 7521 SALESMAN

JONES 7566 MANAGER

MARTIN 7654 SALESMAN

Page 67: Banco de Dados Uni

Banco de Dados II 67

SQL - Comandos

Select – ordenação das linhas

As linhas aparecem ordenadas pela chave primária, se esta estiver definida.

Pode-se mudar a ordenação através do comando order by

Exemplo 1:

SELECT Codigo, Nome, Curso from Aluno ORDER BY

Nome;

Page 68: Banco de Dados Uni

Banco de Dados II 68

SQL - Comandos

Select – ordenação das linhas

O padrão do ORDER BY é que a ordenação seja crescente, mas usando-se o DESC, pode-se inverter a ordem.

Exemplo 2:

SELECT Codigo, Nome, Curso from Aluno

ORDER BY Nome DESC;

Page 69: Banco de Dados Uni

Banco de Dados II 69

SQL - Comandos

Select – ordenação das linhas

Em caso de “empate”, a ordem é arbitrária, a não ser que sejam definidas mais colunas para o ORDER BY.

Exemplo 3:

SELECT Nome, DataNasc from Pessoa

ORDER BY Nome, DataNasc;

Page 70: Banco de Dados Uni

Banco de Dados II 70

SQL - Comandos

Select – usando a cláusula Where

Mostrar linhas específicas de uma tabela de acordo com uma condição de pesquisa.

Sintaxe:

SELECT <Nome_coluna> FROM <TABELA>

WHERE (CONDIÇÃO)

Page 71: Banco de Dados Uni

Banco de Dados II 71

SQL - Comandos

Select – usando a cláusula Where

Operadores de Comparação

Operador Descrição

= Igual

<> Diferente

> Maior que

< Menor que

>= Maior ou igual

<= Menor ou igual

Between and Comparações entre dois valores

Page 72: Banco de Dados Uni

Banco de Dados II 72

SQL - Comandos

Select – usando a cláusula Where

Operadores de Comparação

Operador Descrição

Not between and Não comparação entre dois valores

IN (Lista) Igual a qualquer membro da lista

Not IN (Lista) Diferente a qualquer membro da lista

Like Unir uma sequência de caracteres usando uma sequência

Page 73: Banco de Dados Uni

Banco de Dados II 73

SQL - Comandos Select – usando a cláusula Where

Exemplo 1: Especificando linhas com a cláusula Where (=)

SELECT Ename Nome, Job Cargo from Emp

WHERE Deptno=20

SQL> /NOME CARGO---------- -------Smith ClerkJones Manager

Scott Analyst Adams Clerk Ford Analyst

Page 74: Banco de Dados Uni

Banco de Dados II 74

SQL - Comandos Select – usando a cláusula Where

Exemplo 2: Especificando linhas com a cláusula Where (<>)

SELECT Ename Nome, Job Cargo from Emp

WHERE Job <> ‘CLERK’

SQL> /NOME CARGO---------- -------Allen SalesmanFord Analyst

Jones Manager Martin Salesman King President

Page 75: Banco de Dados Uni

Banco de Dados II 75

SQL - Comandos Select – usando a cláusula Where

Exemplo 3: Especificando linhas com a cláusula Where between

SELECT Ename Nome, Job Cargo from Emp

WHERE hiredate between ‘01-JAN-87’ AND ‘31-DEC-87’

SQL> /NOME CARGO---------- ------- King President Allen Salesman

Ward Salesman Martin Salesman

Turner Salesman

Page 76: Banco de Dados Uni

Banco de Dados II 76

SQL - Comandos

Select – usando a cláusula Where

Exemplo 3: Especificando linhas com a cláusula Where com intervalos. Para valores fora de um intervalo, pode- se usar o not between.

SELECT * from Aluno

WHERE Ingresso Not between ’01/01/90’ AND ’31/12/99’;

Page 77: Banco de Dados Uni

Banco de Dados II 77

SQL - Comandos

Select – comparador LIKE

O comparador like ajuda em consultas em que não

temos o valor exato de uma cadeia de caracteres para

encontrar

% significa qualquer substring (* do DOS)

_ compara único caracter (posição)

Page 78: Banco de Dados Uni

Banco de Dados II 78

SQL - Comandos Select – usando a cláusula Where

Exemplos: Especificando linhas com a cláusula Where

utilizando o comparador LIKE

SELECT * from Funcionario WHERE Nome LIKE ‘José%´;

SELECT * from Disciplina WHERE Nome LIKE ‘%cálculo%´;

SELECT * from Aluno WHERE Nome LIKE ‘___ Paula%´;

SELECT * from Cliente WHERE Nome LIKE ‘%Pedro%´;

Page 79: Banco de Dados Uni

Banco de Dados II 79

SQL - Comandos

Select – usando a cláusula Where

Exemplos: Especificando linhas com a cláusula Where

utilizando o comparador IN

SELECT Sobrenome, Cargo from Empregado

WHERE Cargo IN (‘Vendedor’,’Representante’);

SELECT Sobrenome, Cargo from Empregado

WHERE Cargo NOT IN (‘Analista’,’Gerente’);

Page 80: Banco de Dados Uni

Banco de Dados II 80

SQL - Comandos Criando uma tabela através do comando Select

Sintaxe:

CREATE TABLE nome_tabela As SELECT * FROM nome_tabela;

Exemplo:

CREATE TABLE EmpCopia

As

SELECT * FROM Emp;

Obs: Este comando faz uma cópia da tabela (estrutura e registros) mas não gera todas as constraints da tabela original para a nova tabela. Apenas as constraints de Not Null são copiadas para a nova tabela.

Page 81: Banco de Dados Uni

Banco de Dados II 81

SQL - Comandos Criando uma tabela através do comando Select com

seleção de campos e cláusula where

Exemplo:

CREATE TABLE EmpCopia

As

SELECT ename, empno FROM Emp where depto = 30;

Page 82: Banco de Dados Uni

Banco de Dados II 82

SQL - Comandos Insert - Inserindo linhas com o comando Select

Podemos incluir várias linhas na tabela com o uso do comando select.

Exemplo 3:

INSERT into EmpCopia SELECT ename, empno FROM

EMP where deptno = 10;

Page 83: Banco de Dados Uni

Banco de Dados II 83

SQL – Funções Caracteres CONCAT - concatena duas colunas ou cadeia de

caracteres. Esta função é equivalente ao operador de concatenação(||).

Sintaxe:

CONCAT (char1,char2)

Exemplo:

Select concat(‘Lab’,’Banco’) from Emp;

CONCAT------------LabBanco

LabBancoLabBanco

Page 84: Banco de Dados Uni

Banco de Dados II 84

SQL - Funções Caracteres LOWER - retorna todas as letras minúsculas.

Sintaxe: LOWER(char)

Exemplo: Select lower(ename) from Emp;

LOWER(Ename) --------------------

smith

allen

ward

jones

Page 85: Banco de Dados Uni

Banco de Dados II 85

SQL – Funções Caracteres UPPER - retorna todas as letras maiúsculas.

Sintaxe:

UPPER(char)

Exemplo:

Select upper(ename) from Emp;

ename -------------------- SMITH ALLEN

WARD JONES

Page 86: Banco de Dados Uni

Banco de Dados II 86

SQL - Funções Caracteres SUBSTRING - retorna parte de uma string. Deve-se indicar a

posição inicial (m) da string e quantidade de caracteres (n) a serem contados. Se a quantidade de caracteres não for especificada, a função contará os caracteres até o final da string.

Sintaxe:

SUBSTR(char,m,n)

Exemplo:

Select substr(dname,2) from Dept;

dname (Retorna a partir da posição 2 a coluna selecionada)

----------------- CCOUNTING

ESEARCH ALES

Page 87: Banco de Dados Uni

Banco de Dados II 87

SQL – Funções Datas Realizar cálculos com Data

Expressão Descrição

Data + Número Soma à data número de dias

Data - Número Substrai à data número de dias

Data - Data Retorna o número de dias entre as datas

Page 88: Banco de Dados Uni

Banco de Dados II 88

SQL - Funções Datas Exemplo:

Select ename, hiredate, hiredate + 90 from Empwhere deptno = 30;

ename hiredate hiredate+90 ----------------- ------------- ---------------

ALLEN 20-FEB-81 21-MAY-81

WARD 22-FEB-81 23-MAY-81 MARTIN 28-SEP-81 27-DEC-81

BLAKE 01-MAY-81 30-JUL-81 TURNER 08-SEP-81 07-DEC-81

JAMES 03-DEC-81 03-MAR-82

Page 89: Banco de Dados Uni

Banco de Dados II 89

SQL - Funções Datas SYSDATE – retorna a data do sistema.

Exemplo:

Select hiredate, (sysdate - hiredate)/7 semanas from emp;

HIREDATE SEMANAS---------------- ---------------

17-DEC-80 1080.8207

20-FEB-81 1071.535

22-FEB-81 1071.2493

02-APR-81 1065.6778

28-SEP-81 1040.1064

Page 90: Banco de Dados Uni

Banco de Dados II 90

SQL - Funções Datas ADD_MONTHS – retorna a data adicionada n meses

especificado

Sintaxe:

ADD_MONTHS (data, número)

Exemplo:

Select hiredate, add_months(hiredate,6) from emp;

HIREDATE ADD_MONTH---------------- ------------------

17-DEC-80 17-JUN-81

20-FEB-81 20-AUG-81

22-FEB-81 22-AUG-81

02-APR-81 02-OCT-81

28-SEP-81 28-MAR-82

Page 91: Banco de Dados Uni

Banco de Dados II 91

SQL - Funções Datas MONTHS_BETWEEN – retorna o número de meses entre uma

data e outra.

Sintaxe:

MONTHS_BETWEEN (data, data)

Exemplo:

Select hiredate, months_between(sysdate,hiredate) from emp;

HIREDATE MONTHS_BETWEEN(---------------- --------------------------

17-DEC-80 248.57263

20-FEB-81 246.47586

22-FEB-81 246.41134

02-APR-81 245.0565

Page 92: Banco de Dados Uni

Banco de Dados II 92

SQL – Reformatação de Datas

Elemento Descrição

DD Dia do mês

DY Nome do dia abreviado com 3 letras

DAY Nome do dia com 9 letras

DDSP Número do dia no mês por extenso

MM Número do mês

MON Nome do mês abreviado com 3 letras

MONTH Nome do mês com 9 letras

YY Dois dígitos do ano

YYYY Quatro dígitos do ano

HH:MI:SS Hora, Minuto e Segundos

FM Coloca espaço extra em cada elemento da máscara

HH24 Hora do dia, formato 24 horas

Page 93: Banco de Dados Uni

Banco de Dados II 93

SQL - Funções de Conversão TO_CHAR – converte um valor tipo data ou número para um valor

char. Normalmente é utilizado para a formatação de datas e números.

Sintaxe:

TO_CHAR (data [, formato_char]) ou TO_CHAR(num [,formato_char])

Exemplo:

Select ename, to_char(hiredate,’MM/YY’) “Admissão” from emp;

ENAME Admissão----------- ---------------SMITH 12/80ALLEN 02/81WARD 02/81JONES 04/81MARTIN 09/81BLAKE 05/81CLARK 06/81

Page 94: Banco de Dados Uni

Banco de Dados II 94

SQL - Funções de Conversão Exemplo:

Select ename, to_char(hiredate, ‘DD “de” month YYYY’) “Admissão” from Emp;

ENAME Admissão----------- ----------------------------SMITH 17 de december 1980ALLEN 20 de february 1981WARD 22 de february 1981JONES 2 de april 1981MARTIN 28 de september 1981BLAKE 1 de may 1981CLARK 9 de june 1981

Page 95: Banco de Dados Uni

Banco de Dados II 95

SQL - Funções de Conversão TO_DATE – converte uma expressão char para date.

Sintaxe:

TO_DATE (char [, formato_char])

Exemplo:

Insert into Emp Values (222, ‘Isa VonDix’,‘Matriz’, 3424, TO_DATE(’070393’,’MMDDYY’),3000,0,10);

Select ename, hiredate from Emp where empno = 222;

ENAME HIREDATE--------------- ---------------Isa VonDix 03-JUL-93

Page 96: Banco de Dados Uni

SQL - Funções Numéricas ROUND – arredonda um valor mantendo apenas a parte

inteira ou com o nº de casas decimais solicitado.

Sintaxe:

ROUND (num [, nº casas decimais])

Exemplo:

Round (1456.8976) 1457

Round (1456.8976, 2) 1456.90

Banco de Dados II 96

Page 97: Banco de Dados Uni

SQL - Funções Numéricas TRUNC – traz o número sem arredondar, desprezando as

casas não solicitadas.

Sintaxe:

TRUNC (num [, nº casas decimais])

Exemplo:

Trunc (1456.8976) 1456

Trunc (1456.8976,2) 1456.89

Banco de Dados II 97

Page 98: Banco de Dados Uni

Banco de Dados II 98

SQL – Funções de GrupoAs funções de grupo agem sempre sobre um conjunto de linhas ao invés de agir sobre cada linha separada.

Função AVG – calcula a média dos valores selecionados

Exemplo:

SQL> Select avg(sal) from emp;

Resultado do exemplo: 3456,345

Page 99: Banco de Dados Uni

Banco de Dados II 99

SQL – Funções de Grupo Função MIN/MAX – seleciona o menor/maior valor dos

valores selecionados.

Exemplo:

SQL> Select min(sal) from emp where job = ‘CLERK’;

Resultado do exemplo: MIN(SAL) = 400

Page 100: Banco de Dados Uni

Banco de Dados II 100

SQL – Funções de Grupo Função COUNT – faz a contagem das linhas retornadas de

uma query.

Count (*) – O * faz contar todas as linhas.

Exemplo:

SQL> Select count(sal) from emp;

Page 101: Banco de Dados Uni

Banco de Dados II 101

SQL – Funções de Grupo Função SUM – faz a soma dos valores retornadas numa

query.

Exemplo:

SQL> Select sum(sal) from emp;

Page 102: Banco de Dados Uni

Banco de Dados II 102

SQL – Cláusulas Group By e Having Exibir totalização de resultado para grupos de linhas

com a cláusula GROUP BY e HAVING.

Sintaxe:

SELECT nome_coluna FROM nome_tabela WHERE condição

GROUP BY Expressão_Group_By

Expressão_Group_By especifica as colunas pelos quais serão agrupados pela função de grupo.

Page 103: Banco de Dados Uni

Banco de Dados II 103

SQL – Cláusulas Group By e Having GROUP BY

Exemplo:

SELECT codequipe, count(*) “Nº de Funcionários” FROM

funcionario GROUP BY codequipe;

CodEquipe Nº de Funcionários------------- ----------------------- 1 3 2 2 3 1 4 1

5 1 6 1

Page 104: Banco de Dados Uni

Banco de Dados II 104

SQL – Cláusulas Group By e Having GROUP BY – Nunca selecione uma coluna simples com uma

função de grupo sem a cláusula GROUP BY.

Exemplo:

SELECT codequipe as equipe, funcao Cargo,

count(*) “Nº de Funcionários” FROM funcionario;

ERROR at line 1:

ORA-00937: not a single-group group function

Page 105: Banco de Dados Uni

Banco de Dados II 105

SQL – Cláusulas Group By e Having

Exemplo:

SELECT codequipe as equipe, funcao Cargo,

count(*) “Nº de Funcionários” FROM funcionario

GROUP BY codequipe, funcao;

Equipe Cargo Nº de Funcionários -------- ------------------ ----------------------- 1 Gerente 1 1 Engenheiro 2 2 Engenheiro 2 3 Mecânico 1

4 Mecânico 1 5 Gerente 1 6 Mecânico 1

Page 106: Banco de Dados Uni

Banco de Dados II 106

SQL – Cláusulas Group By e Having Mostrar linhas específicas ou grupos específicos

utilizando a cláusula HAVING.

Sintaxe:

SELECT nome_coluna FROM nome_tabela WHERE condição GROUP BY Expressão_Group_By HAVING condição

Having condição restringe o grupo de linhas retornadas daqueles grupos para especificar uma condição TRUE.

A cláusula HAVING filtra linhas após o agrupamento e só pode ser utilizada se houver a cláusula GROUP BY no comando.

Page 107: Banco de Dados Uni

Banco de Dados II 107

SQL – Cláusulas Group By e Having

Exemplo:

SELECT funcao, sum(salario) “Soma Sal” FROM funcionario

GROUP BY funcao HAVING sum(salario) > 5000;

Funcao Soma Sal------------- -----------------Gerente 12300.00

Engenheiro 8200.00

Mecânico 2500.00

Page 108: Banco de Dados Uni

Banco de Dados II 108

SQL – Cláusulas Group By e Having

Exemplo:

SELECT funcao, sum(salario) “Soma Sal” FROM funcionario

WHERE funcao not like ‘Mec%’

GROUP BY funcao HAVING sum(salario) < 10000;

Funcao Soma Sal------------- ----------------- Engenheiro 8200.00

Page 109: Banco de Dados Uni

Banco de Dados II 109

SQL – Sub-Queries Uma subquery é um comando select dentro de outro

comando select. Sintaxe:

SELECT col1, col2 FROM table1 WHERE columm = (SELECT nome_coluna FROM nome_tabela WHERE condição)

Exemplo: Quando queremos encontrar o funcionário que recebe o menor salário da empresa, sendo que não sabemos qual é o menor salário. Poderíamos dividir essa consulta em duas:

SELECT MIN(sal) FROM emp;

SELECT ename, job, sal from emp where sal = 800;

Ou fazer as duas consultas em uma só:

SELECT ename, job, sal FROM emp WHERE sal = (SELECT MIN(sal) FROM emp);A query interna é executada primeiro e traz o valor necessário para execução da segunda consulta.

Page 110: Banco de Dados Uni

Banco de Dados II 110

SQL – Sub-Queries Subqueries que retornam mais de um valor

Exemplo: Encontrar os empregados que recebem o menor salário em cada departamento.

SELECT ename, sal, deptno FROM emp WHERE sal IN

(SELECT MIN(sal) FROM emp GROUP BY deptno);

A cláusula IN substitui o operador = para que todas as coincidências sejam retornadas. Se usar o operador = terá uma mensagem de erro, dizendo que retorna mais que uma linha.

Page 111: Banco de Dados Uni

Banco de Dados II 111

SQL – Sub-Queries Comparando mais de um valor em uma subquery

Exemplo:

SELECT ename, sal, deptno FROM emp WHERE (sal, deptno) IN

(SELECT MIN(sal), deptno FROM emp GROUP BY deptno);

As colunas são comparadas em pares. O número de colunas e tipo de dados das colunas da cláusula WHERE tem que ser os mesmos nos dois Selects.

Uma query interna deve ser usada dentro de parênteses.

A subquery não pode conter a cláusula Order By.

Page 112: Banco de Dados Uni

Banco de Dados II 112

SQL – Join Em muitos casos é necessário consultar informações que estão em

tabelas distintas. Denomina-se Join (junção), o relacionamento entre duas tabelas.

Para conseguir uma consulta que faz junção de duas tabelas relacionadas, é preciso colocar a declaração de junção na cláusula WHERE. Este tipo de Join é conhecido como EQUIJOIN (campos iguais em tabelas diferentes).

Exemplo: Buscar dados que estão na tabela Emp, como o nome do empregado, bem como o nome do departamento em que trabalha, que está na tabela Dept.

SELECT empno, ename, job, emp.deptno Depart, dept.deptno, dname, loc FROM emp, dept WHERE Emp.Deptno = Dept.Deptno;

EMPNO ENAME JOB DEPART DEPTNO DNAME LOC --------- ---------- --------- ----------- ---------- -------------- -------------

7369 SMITH CLERK 20 20 RESEARCH DALLAS

7499 ALLEN SALESMAN 30 30 SALES CHICAGO

7521 WARD SALESMAN 30 30 SALES CHICAGO

Page 113: Banco de Dados Uni

Banco de Dados II 113

SQL – Join Junções e Condições: Basta acrescentar as condições

com o AND

Exemplo:

SELECT empno, ename, job, sal, dname, loc FROM emp, dept WHERE Dept.Deptno = Emp.Deptno and sal > 1500;

EMPNO ENAME JOB SAL DNAME LOC ---------- ---------- --------- ----------- ---------- -------------- 7499 ALLEN SALESMAN 1600 SALES CHICAGO

7566 JONES MANAGER 2975 RESEARCH DALLAS

7698 BLAKE MANAGER 2850 SALES CHICAGO

7782 CLARK MANAGER 2450 ACCOUNTING NEW YORK

Page 114: Banco de Dados Uni

Banco de Dados II 114

SQL – Join Diferenças de sintaxe nas versões

SQL-86

SELECT C.empno, C.ename, C.job, D.dname FROM emp C, dept D WHERE D.Deptno = C.Deptno;

SQL-92

SELECT C.empno, C.ename, C.job, D.dname FROM emp C INNER JOIN dept D USING(Deptno);

A cláusula USING só pode ser usada quando as chaves primária e estrangeira tiverem o mesmo nome, senão, usar a cláusula ON.

SELECT C.empno, C.ename, C.job, D.dname FROM emp C INNER JOIN dept D ON C.Deptno = D.NumDep;

Page 115: Banco de Dados Uni

Banco de Dados II 115

SQL – Join OUTER JOIN – Join em que valores de uma tabela podem

não possuir valores relacionados em outra tabela

Sintaxe:

SELECT tabela1.coluna, tabela2.coluna FROM tabela1, tabela2WHERE tabela1.coluna = tabela2.coluna (+);

Exemplo:

SELECT ename, job, dname, emp.deptno, dept.deptno FROM emp, dept WHERE emp.deptno = dept.deptno (+);

Além de trazer os empregados que possuem um departamento correspondente na tabela Dept, traz os registros de empregados sem código de departamento.

Acrescenta-se o (+) ao lado da tabela em que faltam elementos

Page 116: Banco de Dados Uni

Banco de Dados II 116

SQL – Join Diferenças de sintaxe nas versões

SQL-86

SELECT ename, job, dname, emp.deptno, dept.deptno FROM emp, dept WHERE emp.deptno = dept.deptno (+);

SQL-92

SELECT ename, job, dname, emp.deptno, dept.deptno FROM emp LEFT OUTER JOIN dept USING (deptno);

A cláusula USING só pode ser usada quando as chaves primária e estrangeira tiverem o mesmo nome, senão, usar a cláusula ON.

SELECT ename, job, dname, emp.deptno, dept.deptno FROM emp LEFT OUTER JOIN dept ON emp.Deptno = Dept.NumDep;

Page 117: Banco de Dados Uni

Banco de Dados II 117

SQL – Join SELF JOIN – Esse tipo de Join é utilizado para implementar a

seleção de dados por auto-relacionamento

Exemplo: Apresentar cada funcionário com seu devido gerente

SQL-86

SELECT E.ename, E2.ename Gerente FROM emp E, emp E2 WHERE E.empno = E2.empnoger;

SQL-92

SELECT E.ename, E2.ename Gerente FROM emp E INNER JOIN emp E2 on E.empno = E2.empnoger;

Page 118: Banco de Dados Uni

Banco de Dados II 118

SQL – Join Exemplo de um SELF JOIN

Tabela Cursos

COD_CURSO NOME_CURSO PRE_REQUISITO---------------- ------------------ ----------------------

1 Introdução à Lógica de Programação2 Fundamentos da Modelagem de Dados3 Delphi: Recursos Básicos 14 Delphi: Acesso a Banco de Dados 15 Oracle: SQL*Plus e SQL 26 Oracle: PL/SQL 5

SELECT P.nome_curso, E.nome_curso “Pré-Requisito” FROM cursos P, cursos E WHERE P.pre_requisito = E.cod_curso;NOME_CURSO PRE_REQUISITO------------------ ----------------------Delphi: Recursos Básicos Introdução à Lógica de ProgramaçãoDelphi: Acesso a Banco de Dados Introdução à Lógica de ProgramaçãoOracle: SQL*Plus e SQL Fundamentos da Modelagem de DadosOracle: PL/SQL Oracle: SQL*Plus e SQL

Page 119: Banco de Dados Uni

Banco de Dados II 119

SQL – Union Podemos unir o resultado de duas consultas com o

comando UNION

As colunas do Select devem ser compatíveis (mesmo tipo) nas consultas participantes

Retorna uma tabela com as linhas das duas tabelas

Repetições são excluídasExemplo:

SELECT ename from emp UNION SELECT dname from dept;ENAME----------AccountingAdamsAllenClarkFordKingSalesScott

Page 120: Banco de Dados Uni

Banco de Dados II 120

SQL – Union All Podemos unir o resultado de duas consultas com o

comando UNION ALL, porém, todas as linhas repetidas serão exibidas.

Exemplo:

SELECT job from emp UNION ALL SELECT dname from dept;

Page 121: Banco de Dados Uni

Banco de Dados II 121

SQL – Intersect Resulta na interseção de duas seleções, de maneira que

apareçam somente os elementos comuns a essas duas seleções

Como na União, as colunas devem ser compatíveis

Repetições são excluídas

Exemplo: Selecionar os códigos e nomes dos municípios que possuem Clientes e Fornecedores, estando os clientes e fornecedores em tabelas separadas.

SELECT cd_municip, nm_municip from Municipio WHERE cd_municip IN (SELECT cd_municp from Fornecedor)

INTERSECTSELECT cd_municip, nm_municip from Municipio

WHERE cd_municip IN (SELECT cd_municp from Cliente);

CD_MUNICIP NM_MUNICIP---------------- ---------------- 1 São Paulo 3 Curitiba

Page 122: Banco de Dados Uni

Banco de Dados II 122

SQL – Minus Mostra os elementos resultantes de uma seleção que

não estejam contidos na outra.

Como na União, as colunas devem ser compatíveis

Exemplo: Selecionar os códigos e nomes dos municípios que possuem Fornecedores cadastrados, mas não existem Clientes, estando os clientes e fornecedores em tabelas separadas.

SELECT cd_municip, nm_municip from Municipio WHERE cd_municip IN (SELECT cd_municp from Fornecedor)

MINUSSELECT cd_municip, nm_municip from Municipio

WHERE cd_municip IN (SELECT cd_municp from Cliente);

CD_MUNICIP NM_MUNICIP---------------- ---------------- 2 Santos 4 Rio de Janeiro

Page 123: Banco de Dados Uni

Banco de Dados II 123

SQL – View Uma visão é uma forma pré-determinada de visualizar

dados de uma ou mais tabelas, como se fosse uma única tabela.

Uma view é um subconjunto de uma outra tabela ou view que pode ser manipulada como uma tabela.

Uma view não existe fisicamente como uma tabela. Apenas o comando select que define a view é guardado no banco de dados.

Page 124: Banco de Dados Uni

Banco de Dados II 124

SQL – ViewPara que usar Views?

Restringir o acesso a tabela original já que podemos usar a view que contém apenas algumas colunas da tabela.

Simplificar a estrutura da tabela para os usuários.

Permitir que grupos de usuários visualizem os dados de diferentes formas.

Page 125: Banco de Dados Uni

Banco de Dados II 125

SQL – View Sintaxe:

CREATE VIEW Nome_View [nome_coluna [,nome_coluna]] ASSelect...... WITH CHECK OPTION [CONSTRAINT, CONSTRAINT] [WITH READ ONLY];

sendo:

•NOME_VIEW – nome da visão.

•NOME_COLUNA – especifica nomes para as colunas selecionadas pelas queries da visão. O número de colunas ou

aliases deve ser igual ao número de expressões selecionadas pela visão.

•SELECT – é uma cláusula SELECT completa, incluindo JOINS e SUBQUERIES. Não é possível especificar a cláusula Order By.

Page 126: Banco de Dados Uni

Banco de Dados II 126

SQL – View

• WITH CHECK OPTION – caso exista algum filtro especificado na cláusula WHERE do comando SELECT, a condição será utilizada para impedir atualizações realizadas diretamente sobre a View que contrariem este filtro. Sem esta cláusula, as alterações poderiam ser feitas, porém não seriam vistas ao listar o conteúdo retornado pela View.

• CONSTRAINT – é o nome da CONSTRAINT assinalada ao CHECK OPTION.

• WITH READ ONLY – indica que não podem ser executados comandos de DML (insert, delete, update) sobre a view.

Page 127: Banco de Dados Uni

Banco de Dados II 127

SQL – ViewOs dados de uma view nem sempre podem ser alterados. Vejamos situações em que as atualizações normalmente são proibidas:

Tentativa de inserção em uma view que não possua todos os campos obrigatórios da tabela base (chave primária e não nulos);

Tentativa de atualização de um campo calculado ou chave da tabela primária;

Exclusão de registros que possuam outros relacionados.

Page 128: Banco de Dados Uni

Banco de Dados II 128

SQL – View Exemplo:

CREATE VIEW Emp2 AS Select empno, ename, sal FROM Emp WHERE deptno = 20;

Para selecionar os dados da VIEW criada:

SELECT * FROM Emp2;

Page 129: Banco de Dados Uni

Banco de Dados II 129

SQL – View Podemos criar views com funções de grupo e dados de

duas tabelas. É possível controlar os cabeçalhos dos dados pela inclusão de alias na própria sintaxe do SELECT

Exemplo:

CREATE VIEW Resumo_Depto AS Select dname Nome, min(sal) “Mínimo”, max(sal)

“Máximo”,avg(sal) “Média” FROM Emp, Dept WHERE Emp.Deptno = Dept.Deptno Group By dname;

Para selecionar os dados da VIEW criada:

SELECT * FROM Resumo_Depto;

Page 130: Banco de Dados Uni

Banco de Dados II 130

SQL – View É possível utilizar-se de pseudônimos de colunas (alias)

na cláusula SELECT da visão, sendo que terá o mesmo resultado no uso de um SELECT “NORMAL”

Exemplo:

CREATE VIEW Emp_Sal (Nome, Cargo, Salario) AS Select ename, job, sal FROM Emp;

Para selecionar os dados da VIEW criada:

SELECT * FROM Emp_Sal;

Page 131: Banco de Dados Uni

Banco de Dados II 131

SQL – View Opção WITH CHECK OPTION – a utilização desta cláusula

assegura que os comandos “insert” e “update” não serão validados, caso o efeito deles invalidem a SELECT da visão, isto é, o usuário da visão só poderá manipular dados referentes as linhas que a visão está habilitada a retornar.

Exemplo:

CREATE VIEW Emp2 AS Select * FROM Emp WHERE deptno = 20 WITH CHECK

OPTION;

A cláusula WITH CHECK OPTION impedirá que, por meio da view, sejam inseridos ou alterados empregados que tenham o número do departamento diferente de 20. Caso isso ocorra, a seguinte mensagem será apresentada:

ORA-01402: violação da cláusula where da view WITH CHECK OPTION

Page 132: Banco de Dados Uni

Banco de Dados II 132

SQL – View Remover uma visão do Banco de Dados

Sintaxe:

DROP VIEW Nome_Visão;

Exemplo:

DROP VIEW Emp_Sal;

Page 133: Banco de Dados Uni

Banco de Dados II 133

SQL - View Tabela do BD Oracle que armazena Views

Coluna Descrição

View_Name Nome da Visão

Text_Length Tamanho do texto da visão

Text Texto da visão

User_Views

Page 134: Banco de Dados Uni

Banco de Dados II 134

SQL – View Visualizar Views

Exemplo:

SELECT text FROM User_Views WHERE View_Name = ‘EMP_SAL’;

TEXT --------------------------------------------------------------

select ename, job, sal from emp

Page 135: Banco de Dados Uni

SQL - FIM

APROVEITEM O APRENDIZADO E TENHAM SUCESSO.

BOA SORTE!!!!!!

Banco de Dados 135