Você está na página 1de 128

Banco de Dados II

SQL - Structured Query Language Base Oracle

Ana Leda

SQL - Structured Query Language

Definida por D. D. Chamberlin e outros, nos laboratrios de pesquisa da IBM em San Jose, California, em 1974.

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


Primeira verso recebeu o nome de SEQUEL - Structured English Query Language. rgos como ANSI e ISO adotaram a SQL como o padro oficial de linguagem em ambiente relacional.

Banco de Dados II

SQL - Structured Query Language

ANSI publicou as padronizaes SQL ANSI-89 e ANSI-92. Vrios dialetos SQL adotam o padro ANSI com extenses proprietrias.

Interface ODBC (Open Database Connectivity) converte sintaxe SQL de um produto em outro.
Independncia de fabricante
incorporada em quase todos os SGBDs em seu padro ANSI,

com as extenses proprietrias de cada fabricante.

Banco de Dados II

SQL - Structured Query Language

Portabilidade entre computadores


pode ser usada desde um PC at um mainframe.

Reduo de custos com treinamento


aplicaes podem migrar de ambiente com custo reduzido em

treinamento.

Facilidade no entendimento
comandos escritos em um ingls estruturado de alto nvel.

Consulta interativa
acesso rpido aos dados atravs de comandos interativos.

Banco de Dados II

SQL - Structured Query Language

Mltiplas vises de dados


possibilita levar diferentes vises dos dados a diferentes

usurios.

Definio dinmica de dados


possibilita a alterao dinmica das estruturas dos dados

armazenados, com flexibilidade.

Banco de Dados II

Uso de SQL em aplicativos

ODBC - Open Database Connectivity


faz a conexo com o banco de dados e fornece os registros

como cursores.

Linguagens especficas (ex:Powerbuilder)


aceitam comandos SQL embutidos na linguagem, funcionando

tambm como cursores.

Sistemas visuais como VB e Delphi possuem


componentes para bancos de dados alm de alguns comandos

de SQL embutidos.

Banco de Dados II

SQL - Structured Query Language


Banco

SQL

SQL PLUS

ORACLE - Banco de Dados Relacional. SQL - Linguagem de comunicao entre o Oracle e a maioria das ferramentas e aplicaes. SQL PLUS - Ferramenta do Oracle que reconhece e executa declaraes SQL.
Banco de Dados II 7

SQL - Structured Query Language


SQL Command

SQL Buffer

Comando SQL ao trmino do comando SQL deve-se acrescentar ponto e vrgula(;) e pressionar <Enter> para ser executado imediatamente. SQL*BUFFER parte da memria 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.

Banco de Dados II

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.

Banco de Dados II

SQL - Structured Query Language

Manipulao de Dados Declarados (DML)


Insert Update Delete Commit Rollback Select

Banco de Dados II

10

SQL - Structured Query Language

Definio de Dados Declarados (DDL)


Create Alter Drop Rename

Controle de Dados Declarados (DCL)


Grant Revoke Lock

Banco de Dados II

11

Comandos SQL*Plus

Comandos de Execuo
/ Execute Run

Comando de Edio
Edit

Banco de Dados II

12

Comandos SQL*Plus

Comandos para Manipulao de Arquivos


Start ou @ Spool

Banco de Dados II

13

Regras para escrever comandos SQL

Comandos podem ser escritos em mais de uma linha. Clusulas diferentes so colocadas usualmente em linhas diferentes. Comandos podem ser escritos em letras maisculas e minsculas. Deve haver pelo menos um espao entre um comando e outro.

Banco de Dados II

14

SQL - Tipos de Dados

Char ( S ) Alfanumrico de tamanho fixo, mximo 2000 caracteres.

Varchar2 ( S ) Alfanumrico com tamanho mximo de 4000 caracteres. O que no for utilizado no ocupa espao no banco de dados.
Varchar ( S) Mesmo que Varchar2. Long Similar ao Varchar2, porm, o tamanho mximo de 2 gigabytes. O valor no pode ser informado. S pode existir um por tabela e no pode ser usado em consultas.

Banco de Dados II

15

SQL - Tipos de Dados

Number (P,S)
Valor numrico com tamanho mximo de 38 caracteres, sendo

P o n total de dgitos (inteiros + decimais) e S o n de casas decimais.

Date
Valor de data e hora (01/01/4712 AC at 31/12/4712 DC).

Banco de Dados II

16

SQL - Simbologia
Simbologia
PK FK FK1, FK2 FK1, FK2 NN U U1, U2

Explicao
Chave Primria Chave Estrangeira Duas Chaves Estrangeiras na mesma tabela. Duas colunas formando uma Chave Estrangeira. Coluna Not Null Coluna nica Duas colunas que so uma combinao.
Banco de Dados II 17

Definir Restries de Integridade de Dados

Constraint ou Restrio
representa um mecanismo capaz de implementar controles que

garantam a consistncia 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).

Banco de Dados II

18

Definir Restries de Integridade de Dados


Constraint
Not Null

Descrio
Especifica que a coluna no pode conter valores nulos. Especifica uma coluna ou combinao de colunas que tero seus valores nicos na tabela. Identifica a unicidade de cada linha na tabela. Estabelece e fora um relacionamento entre tabelas. Especifica uma condio que deve ser verdadeira obedecendo uma regra do negcio.
Banco de Dados II 19

Unique

Primary Key Foreign Key (references) Check

SQL - Comandos

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_TABELA - nome da tabela NOME_COLUNA - nome do campo DATATYPE - tipo de dado da coluna CONSTRAINT_TABELA - CONSTRAINT de dado para a coluna
Banco de Dados II 20

SQL - Comandos

Create - Regras de Nomeao


nomes da tabelas e colunas devem ser de 1-30 caracteres; o primeiro caracter deve der alfabtico; nomes devem conter somente os caracteres de a-z, A-Z, 0-9,

_(underscore), $ e #(seu uso no recomendado);


nomes no podem ser iguais as palavras reservadas do Oracle; nome da tabela no pode ser igual ao nome de um outro objeto

criado pelo mesmo usurio Oracle.

Banco de Dados II

21

SQL - Comandos

Create Table
Exemplo 1:

CREATE TABLE Regiao ( Codigo Number(7),

Nome Varchar2(30) CONSTRAINT Regiao_Nome_NN NOT NULL, CONSTRAINT Regiao_Codigo_PK PRIMARY KEY(Codigo), CONSTRAINT Regiao_Nome_UK UNIQUE (Nome));

Banco de Dados II

22

SQL - Comandos

Create Table
Exemplo 2:

CREATE TABLE Empregado (Codigo Number(7), Sobrenome Varchar2(25) CONSTRAINT Emp_Sobrenome_NN NOT NULL, Nome Varchar2(25) Emp_Nome_NN NOT NULL , Cod_User Varchar2(8), Dt_Admissao Date, Comentarios Varchar2(25), Cod_Gerente Number(7), Cargo Varchar2(25), Cod_Depto Number(7), Salario Number(11,2), Pct_Comissao Number(4,2), CONSTRAINT Emp_Cod_PK PRIMARY KEY (Codigo), CONSTRAINT Emp_Cod_User_UK UNIQUE (Cod_User), CONSTRAINT Emp_Pct_Comissao CHECK (Pct_Comissao IN (10, 12.5, 15, 17.5, 18, 20)));

Banco de Dados II

23

SQL - Comandos

Comandos SQL*PLUS

- Executa a declarao contida no SQL Buffer mostrando somente o resultado.

Run - Exibe o comando e executa a declarao contida no SQL Buffer.

Banco de Dados II

24

SQL - Comandos

Comandos para Edio PLUS

ED(it) chama o editor Exemplo: sql> ED

Banco de Dados II

25

SQL - Comandos

Tabela do BD Oracle que armazena Constraints User_Constraints Coluna Descrio

Owner
Constraint_Name Table_Name Constraint_Type

Nome do usurio que criou a constraint. Nome da constraint. Nome da tabela associada com a constraint. Tipo de definio de constraint: C Check P Primary Key R Foreign Key U Unique Key
Banco de Dados II 26

SQL - Comandos

Tabela do BD Oracle que armazena Constraints Coluna Search_Condition R_Owner Descrio Texto da condio de procura da constraint tipo Check. Nome do usurio dono da tabela referenciada pela constraint referencial. Nome da chave primria referenciada pela constraint referencial.

R_Constraint_Name

Banco de Dados II

27

SQL - Comandos

Visualizar estrutura da tabela


Sintaxe:

DESCRIBE <nome-tabela>

Visualizar constraints
Sintaxe:

DESCRIBE user_constraints

onde USER_CONSTRAINTS uma tabela interna do dicionrio Oracle.

Banco de Dados II

28

SQL - Comandos

Visualizar objetos
Sintaxe:

DESCRIBE user_objects Mostra os objetos disponveis na base de dados: Name -------OBJECT_NAME OBJECT_ID OBJECT_TYPE CREATED LAST_DDL_TIME TIMESTAMP STATUS Null -----Type -----VARCHAR2(128) NUMBER VARCHAR2(13) DATE DATE VARCHAR2(75) VARCHAR2(7)
29

Banco de Dados II

SQL - Comandos

Exibindo linhas do dicionrio de dados Oracle


Sintaxe:

SELECT * FROM TAB; TABLE_NAME -----------------CLIENTE DEPARTAMENTO EMPREGADO PRODUTOS REGIAO

Banco de Dados II

30

SQL - Comandos

Alter Table Alterar estrutura de uma tabela


criar, alterar ou eliminar colunas; renomear a tabela; criar ou eliminar constraints; habilitar ou desabilitar constraints.

Banco de Dados II

31

SQL - Comandos

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

Banco de Dados II

32

SQL - Comandos

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 modificao do tipo e/ou tamanho s deve ser feita se no houver dados cadastrados na coluna.

Banco de Dados II

33

SQL - Comandos

Alter Table Alterando estrutura da tabela para adicionar uma Constraint


Exemplo:

ALTER TABLE Departamento ADD CONSTRAINT Departamento_Cod_Regiao_FK Foreign Key (Cod_Regiao) REFERENCES Regiao(Codigo);

Banco de Dados II

34

SQL - Comandos

Alter Table Eliminando Constraints de dados em uma tabela


Exemplo:

ALTER TABLE Departamento DROP CONSTRAINT Departamento_Cod_Regiao_FK;

Banco de Dados II

35

SQL - Comandos

ALTER TABLE

ADD ADD CONSTRAINT MODIFY DROP CONSTRAINT DROP COLUMN RENAME COLUMN

EXEMPLOS:

ALTER TABLE EMP RENAME COLUMN JOB TO CARGO

ALTERA O NOME DA COLUNA JOB PARA CARGO DA TABELA EMP

ALTER TABLE EMP DROP COLUMN SAL

REMOVE A COLUNA SAL DA TABELA EMP

Banco de Dados II

36

SQL - Comandos

Drop Table Eliminar uma tabela


Sintaxe:

Drop Table Nome_Tabela;


Exemplo:

DROP TABLE Departamento;

Banco de Dados II

37

SQL - Comandos

Alteraes nos Dados


Incluso: Comando INSERT Alterao: Comando UPDATE Excluso: Comando DELETE

Banco de Dados II

38

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 no forem definidos todos os campos, eles ficaro com valor nulo (se permitido).
Banco de Dados II 39

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


relao de colunas da tabela s pode ser omitida quando forem inclusos valores para todas as colunas dessa tabela.

Banco de Dados II

40

SQL - Comandos

Insert Inserindo linhas com variveis


Exemplo 3:

INSERT into Aluno (cod_matric, nome_aluno, data_matric)


VALUES (&Matricula, &Nome, &Data); O comando INSERT ter a seguinte execuo:
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 para isso, ao final de cada execuo, digitar / e <Enter>.
Quando os campos so do tipo caractere ou data, a entrada dos valores precisam estar entre aspas simples. Para facilitar, coloque o nome das variveis entre aspas, dispensando o uso de aspas pelo usurio. Ex: (&Nome, &Data)

Banco de Dados II

41

SQL - Comandos

Update Alterar dados numa tabela


Sintaxe:

UPDATE <Tabela> SET <Coluna> = <Novo Valor>

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


WHERE <Condio>

Banco de Dados II

42

SQL - Comandos

Update
Na clusula SET so especificados os campos que tero seu

valor alterado e qual ser seu novo valor;


A clusula WHERE especifica qual(is) a(s) linha(s) que ter(o)

esse valor alterado. Caso no haja clusula WHERE, os valores sero alterados para todas as linhas da tabela;
A expresso de atualizao pode envolver a prpria coluna; O WHERE pode ter qualquer condio vlida, inclusive

subconsultas. O WHERE avaliado antes das atualizaes, uma vez que pode envolver valores sendo alterados.

Banco de Dados II

43

SQL - Comandos

Update
Exemplo 1: Atualizar todos os salrios aumentando 5%.

UPDATE Funcionario SET Salario = Salario * 1.05;

Exemplo 2: Atualizar o salrio de todos os funcionrios para

10000. UPDATE Funcionario SET Salario = 10000;

Banco de Dados II

44

SQL - Comandos

Update com WHERE


Exemplo 1: Atualizar os salrios aumentando 5% para os

funcionrios que ganham menos que 1000. UPDATE Funcionario SET Salario = Salario * 1.05

WHERE Salario < 1000;

Banco de Dados II

45

SQL - Comandos

Delete Exclui dados de uma tabela


Sintaxe:

DELETE from <Tabela> [ WHERE <Condio>] OBS: Caso a clusula WHERE seja omitida, todas as linhas da tabela sero eliminadas. CUIDADO!
Exemplo:

DELETE from Funcionario; DELETE from Produto;

Banco de Dados II

46

SQL - Comandos

Delete
Quando usado com o WHERE, pode especificar quais linhas

apagar;
O WHERE do DELETE comporta quase todas as condies

possveis do Select, desde que seja somente referente a uma tabela;


Subconsultas so permitidas;

Banco de Dados II

47

SQL - Comandos

Delete
Exemplos:

DELETE from Funcionario WHERE NumDepto= 003; DELETE from Funcionario WHERE Salario between 1000 and 2000; DELETE from funcionario WHERE Chapa in (Select chapafunc from dependente where datanasc < 01/jan/70);

Banco de Dados II

48

SQL - Comandos

Delete
O teste da condio feito antes das linhas serem removidas.
Na consulta a seguir, se isso no fosse feito, poderamos ter

resultados imprevisveis:
Exemplo:

DELETE from funcionario WHERE salario > (Select avg(salario) from Funcionario)

Banco de Dados II

49

SQL - Transaes

Commit Finaliza a transao corrente, tornando permanente todas as mudanas pendentes no banco de dados feitas pelos comandos insert, update e delete. Toda mudana de dados efetuada durante a transao temporria at que a transao seja efetivada, ou seja, dado um COMMIT.

Sintaxe: COMMIT

Banco de Dados II

50

SQL - Transaes

Show autocommit Mostra como est o commit, se ON ou OFF.

Sintaxe: SHOW AUTOCOMMIT

Set autocommit on Um Commit feito a cada insero, alterao e deleo.

Set autocommit off necessrio fazer o Commit para efetivar as transaes pendentes.

Banco de Dados II

51

SQL - Transaes

Rollback Finaliza a transao corrente descartando todas as mudanas pendentes.

Sintaxe: ROLLBACK

Banco de Dados II

52

SQL - Comandos

Comando para Manipulao de Arquivos

SPOOL - salva em arquivo comandos do SQLPlus sql> spool a:grava.txt sql> select * from emp ;

sql> spool off

Banco de Dados II

53

SQL - Comandos

Comando para Manipulao de Arquivos

Executa um arquivo salvo usando START ou @:

Sintaxe: START nome_arquivo

Exemplo: START a:consulta1 @a:consulta1.sql

Banco de Dados II

54

SQL - Comandos

Comando SELECT consultar dados numa tabela O SELECT possui duas clusulas obrigatrias (SELECT, FROM) e outras clusulas opcionais (INTO, WHERE, GROUP BY, HAVING, UNION, ORDER BY).

Sintaxe:

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


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

Banco de Dados II

55

SQL - Comandos

Comando SELECT

O sistema consegue descobrir de onde cada coluna vem pelo dicionrio de dados. No select, escolhemos quais colunas faro parte do resultado. As colunas devem pertencer as tabelas presentes no comando 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 repeties so mantidas. Para elimin-las podemos usar a clusula distinct. Ex: SELECT DISTINCT nome FROM Aluno
Banco de Dados II 56

SQL - Comandos

Select - Alterando o Cabealho das Colunas


Sintaxe:

SELECT <campo1 [AS] nome1, campo2 [AS] nome2, ...>


FROM <tabela> OBS: Exibe todos os campos constantes na <lista de campos> e exibe tambm um nome alternativo para cada campo, que ser exibido como cabealho da coluna correspondente.

Banco de Dados II

57

SQL - Comandos

Select - Alterando o Cabealho das Colunas


Exemplo 1: Exibir nome, salrio e uma coluna contendo no

classificado com o cabealho Classificao para todos os empregados. SELECT ename , sal, 'no classificado' as Classificao FROM Emp

Banco de Dados II

58

SQL - Comandos

Select resultado do comando anterior


SQL> /

ENAME ---------SMITH ALLEN WARD JONE S MARTIN BLAKE CLARK SCOTT KING

SAL ------800 1600 1250 2975 1250 2850 2450 3000 5000

CLASSIFICAO -------------------no classificado no classificado no classificado no classificado no classificado no classificado no classificado no classificado no classificado

Banco de Dados II

59

SQL - Comandos

Select - Alterando o Cabealho das Colunas OBS:

Se o pseudnimo contm brancos, caracteres especiais como (# ou _), ou em casos similares, incluir o pseudnimo entre aspas dupla ().
Separe as colunas do pseudnimo usando espaos.

Banco de Dados II

60

SQL - Comandos

Select - Alterando o Cabealho das Colunas


Exemplo 2:

SELECT Ename Nome, Empno Registro, Job Ocupao From Emp;


NOME REGISTRO Ocupao --------- ------------------------------SMITH ALLEN WARD 7369 7499 7521 CLERK SALESMAN SALESMAN

JONES
MARTIN

7566
7654

MANAGER
SALESMAN
61

Banco de Dados II

SQL - Comandos

Select ordenao das linhas


As linhas aparecem ordenadas pela chave primria, se esta

estiver definida.
Pode-se mudar a ordenao atravs do comando order by Exemplo 1:

SELECT Codigo, Nome, Curso from Aluno ORDER BY Nome;

Banco de Dados II

62

SQL - Comandos

Select ordenao das linhas


O padro do ORDER BY que a ordenao seja crescente, mas

usando-se o DESC, pode-se inverter a ordem.


Exemplo 2:

SELECT Codigo, Nome, Curso from Aluno ORDER BY Nome DESC;

Banco de Dados II

63

SQL - Comandos

Select ordenao das linhas


Em caso de empate, a ordem arbitrria, a no ser que sejam

definidas mais colunas para o ORDER BY.


Exemplo 3:

SELECT Nome, DataNasc from Pessoa ORDER BY Nome, DataNasc;

Banco de Dados II

64

SQL - Comandos

Select usando a clusula Where Mostrar linhas especficas de uma tabela de acordo com uma condio de pesquisa.
Sintaxe:

SELECT <Nome_coluna> FROM <TABELA>

WHERE (CONDIO)

Banco de Dados II

65

SQL - Comandos

Select usando a clusula Where


Operadores de Comparao

Operador = <> > Igual

Descrio Diferente Maior que

< >=
<= Between and

Menor que Maior ou igual


Menor ou igual Comparaes entre dois valores
Banco de Dados II 66

SQL - Comandos

Select usando a clusula Where


Operadores de Comparao

Operador Not between and IN (Lista) Not IN (Lista) Like

Descrio No comparao entre dois valores Igual a qualquer membro da lista Diferente a qualquer membro da lista Unir uma sequncia de caracteres usando uma sequncia

Banco de Dados II

67

SQL - Comandos

Select usando a clusula Where


Exemplo 1: Especificando linhas com a clusula Where (=)

SELECT Ename Nome, Job Cargo from Emp WHERE Deptno=20 SQL> / NOME ---------Smith Jones Scott Adams Ford CARGO ------Clerk Manager Analyst Clerk Analyst
Banco de Dados II 68

SQL - Comandos

Select usando a clusula Where


Exemplo 2: Especificando linhas com a clusula Where (<>)

SELECT Ename Nome, Job Cargo from Emp WHERE Job <> CLERK SQL> / NOME ---------Allen Ford Jones Martin King CARGO ------Salesman Analyst Manager Salesman President
Banco de Dados II 69

SQL - Comandos

Select usando a clusula Where


Exemplo 3: Especificando linhas com a clusula Where between

SELECT Ename Nome, Job Cargo from Emp WHERE hiredate between 01-JAN-87 AND 31-DEC-87 SQL> / NOME ---------King Allen Ward Martin Turner

CARGO ------President Salesman Salesman Salesman Salesman


Banco de Dados II 70

SQL - Comandos

Select usando a clusula Where


Exemplo 3: Especificando linhas com a clusula Where com

intervalos. Para valores fora de um intervalo, podese usar o not between. SELECT * from Aluno

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

Banco de Dados II

71

SQL - Comandos

Select comparador LIKE


O comparador like ajuda em consultas em que no temos o

valor exato de uma cadeia de caracteres para encontrar


% significa qualquer substring (* do DOS) _ compara nico caracter (posio)

Banco de Dados II

72

SQL - Comandos

Select usando a clusula Where


Exemplos: Especificando linhas com a clusula Where utilizando

o comparador LIKE SELECT * from Funcionario WHERE Nome LIKE Jos%; SELECT * from Disciplina WHERE Nome LIKE %clculo%; SELECT * from Aluno WHERE Nome LIKE ___ Paula%; SELECT * from Cliente WHERE Nome LIKE %Pedro%;

Banco de Dados II

73

SQL - Comandos

Select usando a clusula Where


Exemplos: Especificando linhas com a clusula 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);

Banco de Dados II

74

SQL Funes Caracteres

CONCAT - concatena duas colunas ou cadeia de caracteres. Esta funo equivalente ao operador de concatenao(||).
Sintaxe:

CONCAT (char1,char2)
Exemplo:

Select concat(Lab,Banco) from Emp;


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

Banco de Dados II

75

SQL - Funes Caracteres

LOWER - retorna todas as letras minsculas.


Sintaxe: LOWER(char) Exemplo: Select lower(ename) from Emp;

LOWER(Ename) -------------------smith allen ward jones

Banco de Dados II

76

SQL Funes Caracteres

UPPER - retorna todas as letras maisculas.


Sintaxe:

UPPER(char)
Exemplo:

Select upper(ename) from Emp;

ename -------------------SMITH ALLEN WARD JONES

Banco de Dados II

77

SQL - Funes Caracteres

SUBSTRING - retorna parte de uma string. Deve-se indicar a posio inicial (m) da string e quantidade de caracteres (n) a serem contados. Se a quantidade de caracteres no for especificada, a funo 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 posio 2 a coluna selecionada) ----------------CCOUNTING ESEARCH
ALES
Banco de Dados II 78

SQL Funes Datas

Realizar clculos com Data Expresso Data + Nmero Data - Nmero Data - Data Descrio Soma data nmero de dias Substrai data nmero de dias Retorna o nmero de dias entre as datas

Banco de Dados II

79

SQL - Funes Datas

Exemplo: Select ename, hiredate, hiredate + 90 from Emp where deptno = 30; ename ----------------ALLEN WARD MARTIN BLAKE TURNER JAMES hiredate ------------20-FEB-81 22-FEB-81 28-SEP-81 01-MAY-81 08-SEP-81 03-DEC-81 hiredate+90 --------------21-MAY-81 23-MAY-81 27-DEC-81 30-JUL-81 07-DEC-81 03-MAR-82

Banco de Dados II

80

SQL - Funes Datas

SYSDATE retorna a data do sistema.


Exemplo:

Select hiredate, (sysdate - hiredate)/7 semanas from emp; HIREDATE ---------------17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 28-SEP-81 SEMANAS --------------1080.8207 1071.535 1071.2493 1065.6778 1040.1064

Banco de Dados II

81

SQL - Funes Datas

ADD_MONTHS retorna a data adicionada n meses especificado


Sintaxe:

ADD_MONTHS (data, nmero)


Exemplo:

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


HIREDATE ---------------17-DEC-80 20-FEB-81 ADD_MONTH -----------------17-JUN-81 20-AUG-81

22-FEB-81
02-APR-81 28-SEP-81

22-AUG-81
02-OCT-81 28-MAR-82
Banco de Dados II 82

SQL - Funes Datas

MONTHS_BETWEEN retorna o nmero de meses entre uma data e outra.


Sintaxe:

MONTHS_BETWEEN (data, data)


Exemplo:

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


HIREDATE ---------------17-DEC-80 20-FEB-81 22-FEB-81 02-APR-81 MONTHS_BETWEEN( -------------------------248.57263 246.47586 246.41134 245.0565
Banco de Dados II 83

SQL Reformatao de Datas


Elemento Descrio

DD
DY DAY DDSP MM MON MONTH YY YYYY HH:MI:SS FM HH24

Dia do ms
Nome do dia abreviado com 3 letras Nome do dia com 9 letras Nmero do dia no ms por extenso Nmero do ms Nome do ms abreviado com 3 letras Nome do ms com 9 letras Dois dgitos do ano Quatro dgitos do ano Hora, Minuto e Segundos Coloca espao extra em cada elemento da mscara Hora do dia, formato 24 horas
Banco de Dados II 84

SQL - Funes de Converso

TO_CHAR converte um valor tipo data ou nmero para um valor char. Normalmente utilizado para a formatao de datas e nmeros.
Sintaxe:

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


Exemplo:

Select ename, to_char(hiredate,MM/YY) Admisso from emp;


ENAME ----------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK Admisso --------------12/80 02/81 02/81 04/81 09/81 05/81 06/81
Banco de Dados II 85

SQL - Funes de Converso


Exemplo:

Select ename, to_char(hiredate, FMDD de month YYYY) Admisso from Emp; ENAME ----------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK Admisso ---------------------------17 de december 1980 20 de february 1981 22 de february 1981 2 de april 1981 28 de september 1981 1 de may 1981 9 de june 1981

Banco de Dados II

86

SQL - Funes de Converso

TO_DATE converte uma expresso 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 --------------Isa VonDix HIREDATE --------------03-JUL-93

Banco de Dados II

87

SQL Funes de Grupo


As funes de grupo agem sempre sobre um conjunto de linhas ao invs de agir sobre cada linha separada.

Funo AVG calcula a mdia dos valores selecionados


Exemplo:

SQL> Select avg(sal) from emp; Resultado do exemplo: 3456,345

Banco de Dados II

88

SQL Funes de Grupo

Funo 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

Banco de Dados II

89

SQL Funes de Grupo

Funo COUNT faz a contagem das linhas retornadas de uma query.

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


Exemplo:

SQL> Select count(sal) from emp;

Banco de Dados II

90

SQL Clusulas Group By e Having

Exibir totalizao de resultado para grupos de linhas com a clusula GROUP BY e HAVING.
Sintaxe:

SELECT nome_coluna FROM nome_tabela WHERE condio GROUP BY Expresso_Group_By

Expresso_Group_By especifica as colunas pelos quais sero agrupados pela funo de grupo.

Banco de Dados II

91

SQL Clusulas Group By e Having

GROUP BY
Exemplo:

SELECT codequipe, count(*) N de Funcionrios FROM funcionario GROUP BY codequipe; CodEquipe ------------1 2 3 4 5 6 N de Funcionrios ----------------------3 2 1 1 1 1

Banco de Dados II

92

SQL Clusulas Group By e Having

GROUP BY Nunca selecione uma coluna simples com uma funo de grupo sem a clusula GROUP BY.
Exemplo:

SELECT codequipe as equipe, funcao Cargo, count(*) N de Funcionrios FROM funcionario; ERROR at line 1: ORA-00937: not a single-group group function

Banco de Dados II

93

SQL Clusulas Group By e Having


Exemplo:

SELECT codequipe as equipe, funcao Cargo, count(*) N de Funcionrios FROM funcionario GROUP BY codequipe, funcao; Equipe Cargo N de Funcionrios -------- ------------------ ----------------------1 Chefe 2 1 Engenheiro 1 2 Chefe 2 3 Mecnico 1 4 Mecnico 1 5 Chefe 1 6 Mecnico 1
Banco de Dados II 94

SQL Clusulas Group By e Having

Mostrar linhas especficas ou grupos especficos utilizando a clusula HAVING.


Sintaxe:

SELECT nome_coluna FROM nome_tabela WHERE condio GROUP BY Expresso_Group_By HAVING condio

Having condio restringe o grupo de linhas retornadas daqueles grupos para especificar uma condio TRUE.

Banco de Dados II

95

SQL Clusulas Group By e Having


Exemplo:

SELECT codequipe, 12 * AVG(sal) FROM funcionario GROUP BY codequipe HAVING 12 * AVG(sal) > 10000;

CodEquipe ------------1 2 3 4 5 6

12 * AVG(sal) ----------------20000000 11400000 1200000 1200000 2400000 1200000

Banco de Dados II

96

SQL Clusulas Group By e Having


Exemplo:

SELECT funcao, sum(salario) Soma Sal FROM funcionario GROUP BY funcao HAVING sum(salario) > 5000;

Funcao ------------Chefe Engenheiro Mecnico

Soma Sal ----------------6.300.000 800.000 420.000

Banco de Dados II

97

SQL Clusulas Group By e Having


Exemplo:

SELECT funcao, sum(salario) Soma Sal FROM funcionario WHERE funcao not like Mec%

GROUP BY funcao HAVING sum(salario) > 5000;


Funcao ------------Chefe Engenheiro Soma Sal ----------------6.300.000 800.000

Banco de Dados II

98

SQL - Comandos

Criando uma tabela atravs 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 cpia da tabela (estrutura e registros) mas no gera todas as constraints da tabela original para a nova tabela. Apenas as constraints de Not Null so copiadas para a nova tabela.
Banco de Dados II 99

SQL - Comandos

Criando uma tabela atravs do comando Select com seleo de campos e clusula where
Exemplo:

CREATE TABLE EmpCopia As SELECT ename, empno FROM Emp where depto = 30;

Banco de Dados II

100

SQL - Comandos

Insert - Inserindo linhas com o comando Select


Podemos incluir vrias linhas na tabela com o uso do comando

select.

Exemplo 3:

INSERT into Poupana Select NumAg, NumConta, 200 from Correntes Where NumAg = 1191;

Banco de Dados II

101

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 condio)
Exemplo: Quando queremos encontrar o funcionrio que recebe o

menor salrio da empresa, sendo que no sabemos qual o menor salrio. Poderamos 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 necessrio para execuo da segunda consulta.
Banco de Dados II 102

SQL Sub-Queries

Subqueries que retornam mais de um valor


Exemplo: Encontrar os empregados que recebem o menor salrio

em cada departamento. SELECT ename, sal, deptno FROM emp WHERE sal IN (SELECT MIN(sal) FROM emp GROUP BY deptno); A clusula IN substitui o operador = para que todas as coincidncias sejam retornadas. Se usar o operador = ter uma mensagem de erro, dizendo que retorna mais que uma linha.

Banco de Dados II

103

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 so comparadas em pares. O nmero de colunas e tipo

de dados das colunas da clusula WHERE tem que ser os mesmos nos dois Selects.

Uma query interna deve ser usada dentro de parnteses.

A subquery no pode conter a clusula Order By.

Banco de Dados II

104

SQL Join

Em muitos casos necessrio consultar informaes que esto em tabelas distintas. Denomina-se Join (juno), o relacionamento entre duas tabelas.

Para conseguir uma consulta que faz juno de duas tabelas relacionadas, preciso colocar a declarao de juno na clusula WHERE. Este tipo de Join conhecido como EQUIJOIN (campos iguais em tabelas diferentes).
Exemplo: Buscar dados que esto 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 --------7369 7499 7521 ENAME JOB DEPART DEPTNO DNAME ---------- ------------------- ---------- -------------SMITH CLERK 20 20 RESEARCH ALLEN SALESMAN 30 30 SALES WARD SALESMAN 30 30 SALES
Banco de Dados II

LOC ------------DALLAS CHICAGO CHICAGO


105

SQL Join

Outras condies podem ser feitas SELECT empno, ename, job, emp.deptno Depart, dept.deptno,dname FROM emp, dept WHERE Emp.Deptno >= Dept.Deptno;
EMPNO ENAME JOB --------- ---------- --------7369 SMITH CLERK DEPART DEPTNO ----------- ----------20 10 DNAME -------------ACCOUNTING

7369
7499 7499 7499

SMITH
ALLEN ALLEN ALLEN

CLERK
SALESMAN SALESMAN SALESMAN

20
30 30 30

20
10 20 30

RESEARCH
ACCOUNTING RESEARCH SALES

7566
7566 7839

JONES
JONES KING

MANAGER
MANAGER PRESIDENT

20
20 10

10
20 10

ACCOUNTING
RESEARCH ACCOUNTING
106

Banco de Dados II

SQL Join

Junes e Condies: Basta acrescentar as condies 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 ---------- ---------- --------7499 ALLEN SALESMAN 7566 JONES MANAGER 7698 BLAKE MANAGER 7782 CLARK MANAGER SAL ----------1600 2975 2850 2450 DNAME ---------SALES RESEARCH SALES ACCOUNTING LOC -------------CHICAGO DALLAS CHICAGO NEW YORK

Banco de Dados II

107

SQL Join

Diferenas de sintaxe nas verses


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 clusula USING s pode ser usada quando as chaves primria e estrangeira tiverem o mesmo nome, seno, usar a clusula ON.
SELECT C.empno, C.ename, C.job, D.dname FROM emp C INNER JOIN dept D ON C.Deptno = D.NumDep;
Banco de Dados II 108

SQL Join

OUTER JOIN Join em que valores de uma tabela podem no possuir valores relacionados em outra tabela
Sintaxe:

SELECT tabela1.coluna, tabela2.coluna FROM tabela1, tabela2 WHERE tabela1.coluna = tabela2.coluna (+);
Exemplo:
Acrescenta-se o (+) ao lado da tabela em que faltam elementos

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

Alm de trazer os empregados que possuem um departamento correspondente na tabela Dept, traz os registros de empregados sem cdigo de departamento.

Banco de Dados II

109

SQL Join

Diferenas de sintaxe nas verses


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 clusula USING s pode ser usada quando as chaves primria e estrangeira tiverem o mesmo nome, seno, usar a clusula ON.
SELECT ename, job, dname, emp.deptno, dept.deptno FROM emp LEFT OUTER JOIN dept ON emp.Deptno = Dept.NumDep;

Banco de Dados II

110

SQL Join

SELF JOIN Esse tipo de Join utilizado para implementar a seleo de dados por auto-relacionamento
Exemplo: Apresentar cada funcionrio 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;

Banco de Dados II

111

SQL Join

Exemplo de um SELF JOIN Tabela Cursos


COD_CURSO ---------------1 2 3 4 5 6 NOME_CURSO -----------------Introduo Lgica de Programao Fundamentos da Modelagem de Dados Delphi: Recursos Bsicos Delphi: Acesso a Banco de Dados Oracle: SQL*Plus e SQL Oracle: PL/SQL PRE_REQUISITO ---------------------1 1 2 5

SELECT P.nome_curso, E.nome_curso Pr-Requisito FROM cursos P, cursos E WHERE P.pre_requisito = E.cod_curso;
NOME_CURSO -----------------Delphi: Recursos Bsicos Delphi: Acesso a Banco de Dados Oracle: SQL*Plus e SQL Oracle: PL/SQL PRE_REQUISITO ---------------------Introduo Lgica de Programao Introduo Lgica de Programao Fundamentos da Modelagem de Dados Oracle: SQL*Plus e SQL
112

Banco de Dados II

SQL Union

Podemos unir o resultado de duas consultas com o comando UNION As colunas do Select devem ser compatveis (mesmo tipo) nas consultas participantes Retorna uma tabela com as linhas das duas tabelas Repeties so excludas Exemplo: SELECT ename from emp UNION SELECT dname from dept;
ENAME ---------Accounting Adams Allen Clark Ford King Sales Scott

Banco de Dados II

113

SQL Union All

Podemos unir o resultado de duas consultas com o comando UNION ALL, porm, todas as linhas repetidas sero exibidas.

Exemplo: SELECT job from emp UNION ALL SELECT dname from dept;

Banco de Dados II

114

SQL Intersect

Resulta na interseo de duas selees, de maneira que apaream somente os elementos comuns a essas duas selees Como na Unio, as colunas devem ser compatveis Repeties so excludas
Exemplo: Selecionar os cdigos e nomes dos municpios 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) INTERSECT SELECT cd_municip, nm_municip from Municipio WHERE cd_municip IN (SELECT cd_municp from Cliente);
CD_MUNICIP ---------------1 3 NM_MUNICIP ---------------So Paulo Curitiba
Banco de Dados II 115

SQL Minus

Mostra os elementos resultantes de uma seleo que no estejam contidos na outra. Como na Unio, as colunas devem ser compatveis
Exemplo: Selecionar os cdigos e nomes dos municpios que possuem Fornecedores cadastrados, mas no 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) MINUS SELECT cd_municip, nm_municip from Municipio WHERE cd_municip IN (SELECT cd_municp from Cliente);
CD_MUNICIP ---------------2 4 NM_MUNICIP ---------------Santos Rio de Janeiro
Banco de Dados II 116

SQL View

Uma viso 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 no existe fisicamente como uma tabela. Apenas o comando select que define a view guardado no banco de dados.

Banco de Dados II

117

SQL View
Para que usar Views?

Restringir o acesso a tabela original j que podemos usar a


view que contm apenas algumas colunas da tabela.

Simplificar a estrutura da tabela para os usurios.

Permitir que grupos de usurios visualizem os dados de


diferentes formas.

Banco de Dados II

118

SQL View
Sintaxe:

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

sendo:
NOME_VIEW nome da viso. NOME_COLUNA especifica nomes para as colunas selecionadas pelas queries da viso. O nmero de colunas ou aliases deve ser igual ao nmero de expresses selecionadas pela viso. SELECT uma clusula SELECT completa, incluindo JOINS e SUBQUERIES. No possvel especificar a clusula Order By.
Banco de Dados II 119

SQL View
WITH CHECK OPTION caso exista algum filtro especificado na clusula WHERE do comando SELECT, a condio ser utilizada para impedir atualizaes realizadas diretamente sobre a View que contrariem este filtro. Sem esta clusula, as alteraes poderiam ser feitas, porm no seriam vistas ao listar o contedo retornado pela View.
CONSTRAINT o nome da CONSTRAINT assinalada ao

CHECK OPTION.

WITH READ ONLY indica que no podem ser executados

comandos de DML (insert, delete, update) sobre a view.

Banco de Dados II

120

SQL View
Os dados de uma view nem sempre podem ser alterados. Vejamos situaes em que as atualizaes normalmente so proibidas:

Tentativa de insero em uma view que no possua todos os campos obrigatrios da tabela base (chave primria e no nulos); Tentativa de atualizao de um campo calculado ou chave da tabela primria; Excluso de registros que possuam outros relacionados.

Banco de Dados II

121

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;

Banco de Dados II

122

SQL View

Podemos criar views com funes de grupo e dados de duas tabelas. possvel controlar os cabealhos dos dados pela incluso de alias na prpria sintaxe do SELECT

Exemplo: CREATE VIEW Resumo_Depto AS Select dname Nome, min(sal) Mnimo, max(sal) Mximo, avg(sal) Mdia FROM Emp, Dept WHERE Emp.Deptno = Dept.Deptno Group By dname; Para selecionar os dados da VIEW criada: SELECT * FROM Resumo_Depto;
Banco de Dados II 123

SQL View

possvel utilizar-se de pseudnimos de colunas (alias) na clusula SELECT da viso, 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;

Banco de Dados II

124

SQL View

Opo WITH CHECK OPTION a utilizao desta clusula assegura que os comandos insert e update no sero validados, caso o efeito deles invalidem a SELECT da viso, isto , o usurio da viso s poder manipular dados referentes as linhas que a viso est habilitada a retornar.

Exemplo: CREATE VIEW Emp2 AS Select * FROM Emp WHERE deptno = 20 WITH CHECK OPTION;

A clusula WITH CHECK OPTION impedir que, por meio da view, sejam inseridos ou alterados empregados que tenham o nmero do departamento diferente de 20. Caso isso ocorra, a seguinte mensagem ser apresentada:
ORA-01402: violao da clusula where da view WITH CHECK OPTION
Banco de Dados II 125

SQL View

Remover uma viso do Banco de Dados

Sintaxe: DROP VIEW Nome_Viso; Exemplo: DROP VIEW Emp_Sal;

Banco de Dados II

126

SQL - View

Tabela do BD Oracle que armazena Views User_Views Coluna View_Name Text_Length Text Descrio Nome da Viso Tamanho do texto da viso Texto da viso

Banco de Dados II

127

SQL View

Visualizar Views

Exemplo: SELECT text FROM User_Views WHERE View_Name = EMP_SAL; TEXT -------------------------------------------------------------select ename, job, sal from emp

Banco de Dados II

128