Apostila sql2013

44
Faculdade de Tecnologia de Sorocaba Curso de Análise e Desenvolvimento de Sistemas Disciplina Tópicos em Banco de Dados Introdução à Linguagem SQL em Ambiente Oracle Apostila elaborada pela prof.ª Maria Angélica C. Andrade Cardieri

description

COMANDOS sql

Transcript of Apostila sql2013

Page 1: Apostila sql2013

Faculdade de Tecnologia de Sorocaba

Curso de Análise e Desenvolvimento de Sistemas

Disciplina Tópicos em Banco de Dados

Introdução à Linguagem

SQL em Ambiente Oracle

Apostila elaborada pela prof.ª Maria Angélica C. Andrade Cardieri

Page 2: Apostila sql2013

Banco de Dados 2

Prof.ª Maria Angélica

2

Atualização: Janeiro/2013

Índice

1. Introdução a Linguagem SQL ................................................................................................................ 3

1.1 SQL Básico .......................................................................................................................................... 3

1.2 A ferramenta SQL*Plus ........................................................................................................................ 3

2. Tipos de declarações SQL .......................................................................................................................... 4

3. Padrões do Oracle-8 ................................................................................................................................... 5

3.1 Tipos de dados no ORACLE-8 ............................................................................................................ 5

3.2 Restrições (constraints) ......................................................................................................................... 6

3.3 Nome de campos no Oracle8 ................................................................................................................ 6

4. Gerenciando Objetos no Oracle .................................................................................................................. 7

4.1 Comandos DDL - Linguagem de Definição de Dados .......................................................................... 8

4.1.1 Criando Tabelas ............................................................................................................................. 8

4.1.2 Alterando a estrutura de tabelas ..................................................................................................... 9

4.1.3 Excluindo Tabelas ........................................................................................................................ 9

4.1.4 Renomeando uma tabela .............................................................................................................. 10

4.1.5 Visualizando a estrutura de uma tabela e as tabelas criadas ....................................................... 10

4.1.6 Definido valores Default ....................................................................................................... 10

4.2 Restrições .......................................................................................................................................... 11

4.3 Comandos DML - Linguagem de Manipulação de dados ................................................................... 14

4.4 Pesquisa em Tabelas ........................................................................................................................... 15

4.5 Exemplos de pesquisas (comando select) .......................................................................................... 16

4.6 Funções ............................................................................................................................................... 18

4.7 Funções para Manipulação de Datas .................................................................................................. 19

5. Extraindo Dados de mais de uma Tabela - Junção ................................................................................... 20

6. Visões ...................................................................................................................................................... 21

7. Subconsultas ............................................................................................................................................. 24

7.1 Consultas Encadeadas (Claúsula Where com Subquery) ................................................................... 24

7.2 Subconsultas em comandos Update e Delete. .................................................................................... 27

8. Variáveis de Substituição em Consultas ................................................................................................... 28

8.1 Comando Define ................................................................................................................................. 28

8.2 Comando Accept ................................................................................................................................ 29

9. Usando Apelidos para Tabelas ................................................................................................................. 30

10 . Criação de seqüências automáticas ........................................................................................................ 31

11. Inclusão de tabelas a partir de outra tabela ............................................................................................. 32

12. Criando uma Tabela através de uma consulta ........................................................................................ 32

13. O Dicionário de Dados do Oracle-8 ....................................................................................................... 33

14. Transações .............................................................................................................................................. 35

15. Utilização dos Operadores Relacionais no Oracle ................................................................................ 36

16. Exercícios ............................................................................................................................................... 38

16.1 Lista de exercícios complementar sobre o modelo Paciente-Consulta ............................................. 38

Lista número 1 .......................................................................................................................................... 38

Parte 2.1 – Criando e manipulando o banco de dados .......................................................................... 39

Parte 2.2 – Realizando Consultas ......................................................................................................... 40

Parte 2.3 – Consultas usando funções ................................................................................................... 41

Parte 2.4 – Consultas avançadas ........................................................................................................... 41

Parte 2.5 – Visões ................................................................................................................................. 42

Parte 2.6 – Subconsultas ....................................................................................................................... 42

Laboratório SQL - Lista Número 3 ........................................................................................................... 43

Page 3: Apostila sql2013

Banco de Dados 3

Prof.ª Maria Angélica

3

1. Introdução a Linguagem SQL

Esta apostila apresenta uma introdução à linguagem SQL do SGBD ORACLE,

apresentando os comandos que permitem criar, manter e acessar uma base de dados

relacional.

1.1 SQL Básico

A linguagem SQL é a ferramenta básica para acesso aos dados de um banco de

dados relacional. Foi desenvolvida inicialmente nos laboratórios da IBM (1976) por E.F.

Codd, sendo atualmente um padrão para os SGBD relacionais. Apesar de existirem

alguns padrões da linguagem SQL, a maioria dos fabricantes de banco de dados criou

suas próprias extensões para explorar as características do banco de dados como é o caso

da Oracle com o PL/SQL.

A SQL é considerada como sendo uma linguagem não procedural uma vez que ela

processa conjunto de registros e fornece acesso ou navegação automática de dados. A

base para esta linguagem é a álgebra relacional, muito embora existam diversas

características importantes que não pertencem à álgebra relacional.

Na verdade, a SQL padrão deve ser considerada como uma sub-linguagem, uma

vez que não possui comandos ou declarações que permitam o controle de repetições ou de

desvios condicionais e incondicionais. Para este tipo de controle a Oracle desenvolveu o

PL/SQL que consiste em uma extensão da SQL padrão.

1.2 A ferramenta SQL*Plus

A interface interativa do Oracle chama-se SQL*PLUS. Em um ambiente cliente-

servidor, o módulo cliente do ORACLE deve estar instalado, fornecendo esta ferramenta.

Para conectar ao banco através do SQL*PLUS acessar o menu INICIAR => Programas

=> Oracle FOR WINDOWS NT => SQL*PLUS.

Page 4: Apostila sql2013

Banco de Dados 4

Prof.ª Maria Angélica

4

2. Tipos de declarações SQL

Os comandos ou declarações em SQL são divididos nas seguintes categorias:

DDL (Data Definition Language)

É a parte do SQL usada para definir dados e objetos de um banco de dados.

Através destes comandos são feitas inserções no dicionário de dados.

A tabela abaixo indica comandos DDL :

Comando Função

Create Table Cria uma tabela

Create Index Cria um índice

Alter Table Altera ou insere uma coluna da tabela

Drop Table Elimina uma tabela do banco de Dados

Drop Index Elimina um índice

Grant Concede privilégios de acesso p/a um usuário

DML (Data Manipulation Language)

É a parte da SQL usada para a recuperação ou manipulação de dados. Permite

realizar consultas, adicionar, alterar e excluir informações do banco de dados. Possui

também cláusulas adicionais e funções para cálculo de totais, médias, contagem de

registros e máximo e mínimo entre valores.

A tabela abaixo apresenta alguns dos mais importantes comandos dessa categoria:

Comando Função

Select Seleciona dados de uma base

Insert Insere uma linha em uma tabela

Delete Apaga linhas da Tabela

Update Altera o conteúdo de colunas (campos) da tabela.

Commit Grava no disco as alterações feitas

Rollback Desfaz as alterações

Page 5: Apostila sql2013

Banco de Dados 5

Prof.ª Maria Angélica

5

3. Padrões do Oracle-8

3.1 Tipos de dados no ORACLE-8

No Oracle os tipos de dados armazenados em uma tabela podem ser declarados

conforme indicados na tabela abaixo:

Tipo de Dado Descrição

Char(n) Armazena dados do tipo caracter de comprimento fixo onde

n indica o tamanho. Máximo de 255.

Varchar2(n) Armazena dados do tipo caracter de tamanho variável.

Máximo de 2000 bytes.

Number(t,d) Armazena dados numéricos onde t é o total de dígitos e d

indica o número de casas decimais. Máximo de 38

caracteres

Date Data e hora entre 1/1/4712 a. C. até 31/12/4712 d.C.

Long Semelhante ao varchar2, mas com tamanho até 2 GB.

Raw (n) Armazena dados binários de tamanho até 2000 bytes.

Long raw(n) Armazena dados binários de tamanho até 2GB.

Outros tipos de dados:

ROWID : Cada linha de uma tabela possui uma identificação ou endereço próprio. A

função ROWID mostra o endereço de uma linha.

Exemplo:

SELECT ROWID FROM PACIENTE:

Retornará o número interno das linhas:

ROWID

------------------

AAAGD5AADAAAAADAAA

AAAGD5AADAAAAADAAB

AAAGD5AADAAAAADAAC

AAAGD5AADAAAAADAAD

AAAGD5AADAAAAADAAE

Page 6: Apostila sql2013

Banco de Dados 6

Prof.ª Maria Angélica

6

3.2 Restrições (constraints)

São recursos proporcionados pelo SGBD para implementar regras de consistência básicas

para os dados de uma tabela.

Restrição Descrição

NOT NULL Especifica que a coluna não pode conter um valor null.

UNIQUE Especifica que uma coluna ou combinação de colunas devem ser

únicas para todas as linhas na tabela.

PRIMARY KEY Identifica unicamente cada linha da tabela.

FOREIGN KEY/

REFERENCES

Estabelece e força um relacionamento entre uma coluna e a tabela

referenciada

CHECK Especifica que uma condição deve ser True

No item 4.2 desta apostila encontram-se mais detalhes sobre como definir restrições

no banco de dados Oracle.

3.3 Nome de campos no Oracle8

É permitido o máximo de 30 caracteres para nomes de tabelas e colunas. Os

nomes podem ser compostos de caracteres alfabéticos; dígitos numéricos(0 a 9) e os

caracteres especiais “_” (underline), “$” (cifrão) , “#” (number). Um nome deve sempre

começar com um caracter alfabético.

Não é permitido o uso de palavras reservadas do Oracle como nome de tabelas e

colunas. Para um mesmo usuário, não podem existir dois objetos do banco de dados com

o mesmo nome.

Page 7: Apostila sql2013

Banco de Dados 7

Prof.ª Maria Angélica

7

4. Gerenciando Objetos no Oracle

Nesta apostila utilizaremos o modelo abaixo como referência para os exemplos que se

seguem.

Modelo Entidade-Relacionamento

Paciente 1:1 Faz 1: N Consulta

1: N

atende

1:1

Médico

Tabelas correspondentes ao Modelo E-R

Tabela de Paciente

Codpaciente number(04) (PK)

Nomepaciente varchar2(30)

Datanasc Date

Sexo char(01)

Endereco varchar2(25)

Cidade varchar2(15)

Desconto char(01)

Tabela de Consulta

Codconsulta number(03) PK

DataCon Date

TipoCon char(01) P=Particular C=Convênio

Codmedico number(04) FK

Codpaciente number(04) FK

Valconsulta Number(7,2)

Tabela de Médico

Codmedico number(4) PK

Nommedico varchar2(30)

Page 8: Apostila sql2013

Banco de Dados 8

Prof.ª Maria Angélica

8

4.1 Comandos DDL - Linguagem de Definição de Dados

4.1.1 Criando Tabelas

Uma tabela pode ser criada a qualquer momento e sua estrutura pode ser modificada on-

line. O nome de uma tabela não é sensível a letras maiúsculas/minúsculas.

Comando Create Table Create Table <nome _tabela>

( < nome coluna1 > <Tipo_dado> [< restrições_C1> ]

. . . . . . .

( < nome colunaN> <Tipo_dado> [< restrições_CN> ]

[, < Restrição > ...... < Restrição_TN> ] ) ;

Exemplo: Create table Paciente

( Codpaciente number(4,0) Primary Key,

Nompaciente varchar2(30) not null,

Datanasc date,

Sexo char( 1 ) check (sexo in ( ‘F’, ‘M’ )),

Endereco varchar2(25) ) ;

Create table Consulta

( Codconsulta number(3,0) Primary Key ,

Dataconsulta date,

Tipocons char(01) check (tipocons in (´P´,´C´)),

Codpaciente number(4,0) Not Null References Paciente,

Codmedico number(4,0) Not Null References Medico ,

Valconsulta number(5,0) Not Null ) ;

Obs.: Após o comando ser executado o Oracle retorna a seguinte mensagem:

Table Created .

Indica chave

estrangeira

Page 9: Apostila sql2013

Banco de Dados 9

Prof.ª Maria Angélica

9

4.1.2 Alterando a estrutura de tabelas

Comando Alter Table

Através deste comando o usuário pode alterar a estrutura de uma tabela, adicionar ou

retirar uma constraint, etc

ALTER TABLE < nome da tabela>

[ ADD [< nome da coluna> <tipo_dado> [ <restriçãoC>] | < restriçãoT > ] ]

[MODIFY (< nome da coluna > , . . .) ]

[ DROP CONSTRAINT < restição> ] ;

Exemplo:

ALTER TABLE Paciente ADD (cidpaciente varchar2( 15 ) ) ;

ALTER TABLE Paciente MODIFY (cidpaciente varchar2( 20 )

NOT Null ) ;

ALTER TABLE Paciente ADD (desconto char( 01 )

check (desconto in (‘S`,´N` ) )) ;

ALTER TABLE Paciente ADD ( Check (sexo in (´F´, ´M´ ))) ;

Excluindo uma coluna ( para versões a partir do oracle 8i):

ALTER TABLE Paciente DROP COLUMN desconto;

4.1.3 Excluindo Tabelas

Comando Drop Table

Remove uma tabela da base de dados. Ao deletar uma tabela todos os seus dados e

índices serão perdidos. Caso existam visões (View) definidas sobre a tabela estas

continuarão existindo porém estarão inválidas. Só o criador da tabela e o DBA podem

eliminar uma visão.

DROP TABLE <nome_tabela> ;

Exemplo:

Drop Table paciente;

Drop Table consultas;

Page 10: Apostila sql2013

Banco de Dados 10

Prof.ª Maria Angélica

10

4.1.4 Renomeando uma tabela

Rename nome-antigo to nome-novo

Exemplo:

Rename paciente to paciente_BKP;

4.1.5 Visualizando a estrutura de uma tabela e as tabelas criadas

Através do comando:

SQL> Describe <nome_da_tabela>;

É possível verificar a estrutura da tabela criada.

O comando:

SQL > Select table_name from user_tables;

Lista o nome de todas as tabelas criadas pelo usuário em sua base de dados.

4.1.6 Definido valores Default

Create table x

( ........

.........

datapagto date default sysdate,

..........

status char(01) default ´F´ check (status in

(´F´,´B´)),

..........);

Page 11: Apostila sql2013

Banco de Dados 11

Prof.ª Maria Angélica

11

4.2 Restrições

As restrições são regras estabelecidas referentes ao preenchimento de uma coluna.

Estas regras podem ser definidas no momento da criação da tabela, sendo no final da

especificação da coluna ou ao final do comando Create. Também é possível definir

restrições após a criação da tabela através do comando ALTER TABLE.

Toda restrição tem um nome associado a ela. Se este nome não for indicado o

ORACLE atribui um nome padronizado. É interessante dar nome as restrições,

principalmente quando se trabalha em um ambiente cliente-servidor, pois quando da

ocorrência de erros relativos a não observância das regras, o nome da restrição é

propagado para o cliente, e é sempre mais fácil de ser diagnosticado se o nome for

definido pelo usuário.

Entre as restrições destacam-se:

Chaves primárias

Chaves estrangeiras

Chaves únicas

Identificadores de campos obrigatórios

Condições para valores permitidos para determinado campo.

Exemplos:

Chave Primária:

--- Forma mais simples (sem nomear a restrição):

Create table Medico

( codMedico number(4) primary key,

nomemedico varchar2(30));

---- Nomeando a restrição

Create table Medico

(codMedico number(4),

nomemedico varchar2(30),

Constraint PK_Medico_codmedico Primary Key

(codMedico) );

--- Criando uma restrição após a criação da

tabela

Create table Medico

( codMedico number(4),

nomemedico varchar2(30)) ;

Alter table medico add

Constraint PK_Medico_codmedico primary key (codMedico);

Nome da

restrição

Nome da

restrição

Page 12: Apostila sql2013

Banco de Dados 12

Prof.ª Maria Angélica

12

Obs: É interessante que o nome da restrição identifique claramente a qual tabela e

campo esta se refere. Em aplicações cliente servidor isto pode ser útil para

facilitar a identificação de erros.

Chave Estrangeira:

--- Forma mais simples (sem nomear a restrição):

Create table consulta

( codConsulta number(3) primary key,

dataconsulta date,

codpaciente number(4) references paciente,

codmedico number(4) references medico,

valconsulta number(5) );

-- Nomeando a restrição

Create table consulta

( codConsulta number(3) primary key, dataconsulta date,

codpaciente number(4) ,

codmedico number(4) ,

valconsulta number(5),

constraint FK_Consulta_codpaciente foreign key

(codPaciente) references Paciente,

Constraint FK_Consulta_codmedico foreign key

(codMedico) references Medico);

--- Criando uma restrição nomeada após a criação da

tabela

Create table consulta ( codConsulta number(3) primary key,

dataconsulta date,

codpaciente number(4) ,

codmedico number(4) ,

valconsulta number(5) );

alter table consulta add

( constraint FK_consulta_codpaciente foreign key

(codPaciente) references paciente);

alter table consulta add

( constraint FK_consulta_codmedico foreign key

(codmedico) references Medico);

Nome da

restrição

Nome da

restrição

Page 13: Apostila sql2013

Banco de Dados 13

Prof.ª Maria Angélica

13

Cláusula Check:

Define um conjunto de valores permitidos ou condições de inserção em uma

tabela

--- Forma mais simples (sem nomear a restrição):

Create table paciente

( ------

------

sexo char(1) check (sexo in (‘F’, ‘M’)) ,

------

);

OU

--- Criando uma restrição nomeada após a criação da tabela

Create table paciente

( ------

------

sexo char(1) ,

------

);

alter table paciente add constraint CK_paciente_sexo check (sexo in (‘F’, ‘M’));

4.3 Comandos DML - Linguagem de Manipulação de dados

Page 14: Apostila sql2013

Banco de Dados 14

Prof.ª Maria Angélica

14

Comando INSERT

é usado para inserir linhas em uma tabela. Não é necessário atribuir conteúdo para todos

os campos.

Sintaxe:

Insert Into tabela [ (coluna,coluna... ) ]

Values

(valor, valor,....)

Exemplo:

Insert into paciente

values (001,´João da Silva´, ´01-09-1957´ , ´M´, ´Rua das Flores, 30´, ´Sorocaba´,´S´ );

Observações:

a) O formato padrão de datas pode variar dependendo da instalação do Oracle.

b) Se na criação da tabela for utilizada uma cláusula Check, o dado digitado deve

respeitar os valores definidos dentro da cláusula. Isto inclui, no caso de letras, a distinção

entre maiúsculas e minúsculas.

Comando UPDATE

Permite ao usuário alterar valores em linhas de uma tabela:

Sintaxe:

Update tabela

set coluna [, coluna...] = [expressão, subquery ]

[Where condição ] ;

Exemplo:

Update paciente

set endereço = ‘Rua das Jaboticabas, 40`

where codpaciente= 003;

Update paciente

set desconto = ´S´

where datanasc < ‘01/01/1937’;

Comando Delete

Page 15: Apostila sql2013

Banco de Dados 15

Prof.ª Maria Angélica

15

Usado para eliminar linhas de uma tabela.

Sintaxe:

Delete from tabela

[Where condição] ;

Exemplo:

Delete from paciente

where codpaciente = 001;

4.4 Pesquisa em Tabelas

Comando Select

O comando básico para pesquisa simples a uma tabela é o SELECT. Este comando faz

parte da DML (Data Manipulation Language ou Linguagem de Manipulação de Dados).

Sintaxe:

SELECT informação-coluna FROM tabela(s)

WHERE condição

ORDER BY expressão da palavra chave

Onde:

informação_coluna : especifica as colunas da tabela a serem recuperadas. Podem também

ser expressões ou constantes .

tabela(s) : Nome das tabelas envolvidas.

Where: Claúsula opcional, identifica um critério para recuperar linhas específicas. Filtra

as linhas a serem exibidas.

Order by : Claúsula opcional. Especifica a ordem no qual as linhas serão exibidas.

Cláusula Where

Representa o operador relacional de restrição, pois indica as condições que devem ser

satisfeitas para seleção das linhas e colunas de uma tabela. A tabela a seguir apresenta os

operadores lógicos que podem ser utilizados em uma cláusula Select .

Operador Significado

= igual a

> maior que

< menor que

>= maior ou igual

<= menor ou igual

<> Diferente de

AND E

Page 16: Apostila sql2013

Banco de Dados 16

Prof.ª Maria Angélica

16

OR Ou

NOT Negação

BETWEEN Testa faixa de valores

LIKE Valores correspondentes ao valor especificado

IN Valor que seja igual a algum dos valores

especificados em uma lista.

% Curinga para qualquer combinação de caracteres

- Curinga para qualquer caracter na posição

Operadores lógicos suportados pelo SQL

4.5 Exemplos de pesquisas (comando select)

1- Exibir todos os dados de todas as linhas da tabela Paciente:

Select * From Paciente;

2- Selecionar o nome e o endereço de todos os pacientes.

Select nomepaciente, endereco

From Paciente;

3- Selecionar linhas sem repetição de dados:

Select distinct cidade

From paciente;

4- Utilizando cabeçalhos específicos

Select nomepaciente “Nome”, datanasc “Nascimento”

From paciente;

5- Seleção utilizando uma função

Select sum(valconsulta) , codmedico

From consulta

group by codmedico;

Obs: A cláusula group by está detalhada na página 13 desta apostila.

Page 17: Apostila sql2013

Banco de Dados 17

Prof.ª Maria Angélica

17

6- Expressões aritméticas em determinada coluna

Select codconsulta, valconsulta * 0.8

From consulta;

O valor da consulta exibido será 80% do armazenado no banco de dados. O valor real

não é alterado.

7- Exibindo os dados em determinada ordem

Select * From paciente

order by cdpaciente;

Neste caso, a cláusula order by fará com que a consulta seja exibida em ordem de

paciente. Qualquer campo pode ser utilizado nesta cláusula.

8- Exibindo dados com cláusula para seleção de registros específicos

Select * from paciente

where sexo = `F`

9- Concatenando colunas

Select codpaciente || ´-´ || nompaciente from paciente ;

O resultado deste comando será:

Codpaciente ||´-´|| nompaciente

------------------------------------

1- Lucélia Santos

2- Osmar Santos

3- Silvio Santos

4- José Santos

10- Tratando Valores Nulos

Se uma coluna não possui valor (lembre-se espaço em branco é valor), ela é considerada

com o valor NULO. O valor NULO afeta uma operação aritmética pois seu resultado é

sempre nulo

Podemos usar a função NVL para a conversão de valores nulos. Por exemplo:

Select Cod_consulta, NVL( valconsulta,100) * 0.8

From Consulta

Page 18: Apostila sql2013

Banco de Dados 18

Prof.ª Maria Angélica

18

Neste exemplo, se o valor da consulta for nulo será substituído pelo valor 100.

11. Cláusula Group By

Utilizada para agrupar as linhas selecionadas baseada no valor expr para cada linha e

retorna uma única linha de informação para cada grupo.

Exemplo:

SQL> Select coddepto, min(salario), max(salario), sum(salario)

from emp

Group by coddepto;

coddepto min(salario) max(salario) sum(salario)

---------- -------------- -------------- --------------

100 1050 2000 9500

102 850 1800 5700

103 2000 5000 12000

4.6 Funções

Uma função é uma rotina que realiza uma operação específica retornado um resultado. O

SQL possui funções de linha simples ou escalares (single Row) e funções de grupo

(Group).

Funções de Grupo

As funções de grupo atuam sobre um conjunto de linhas retornando um único resultado.

Função AVG - Calcula a média dos valores selecionados

Exemplo:

SQL > Select avg(nota) from aluno;

Função MIN/MAX - Seleciona o menor ou o maior valor dentre os selecionados.

Exemplo:

SQL> Select min(nota) from aluno;

Função COUNT - Retorna o número de linhas da consulta.

SQL> Select count(Idaluno) from curso;

Page 19: Apostila sql2013

Banco de Dados 19

Prof.ª Maria Angélica

19

Função SUM - realiza o somatório dos dados extraídos da coluna especificada. Os

valores null são ignorados.

4.7 Funções para Manipulação de Datas

SYSDATE

Retorna a data do sistema.

Exemplo: SELECT SYSDATE FROM DUAL;

SYSDATE

--------

18/08/05

Função TO_CHAR

Converte campo do tipo data em uma string. È possível extrair substrings

correspondentes ao dia, mês , ano, hora, minuto e segundo.

Exemplos:

SELECT NOMEPACIENTE FROM PACIENTE

WHERE TO_CHAR(DATANASC,’MM/YYYY’) = ‘03/1959’;

SELECT TO_CHAR(SYSDATE, 'HH24:MI:SS') FROM DUAL;

TO_CHAR(

--------

14:42:38

Função ADD_MONTHS

Soma ou subtrai o número de meses indicados da data.

Exemplo:

SELECT ADD_MONTHS(DATACONS,+3) FROM CONSULTA;

O exemplo acima exibe o campo data da consulta acrescido de 3 meses

Para subtrair usar –3.

Para Somar Dias: basta somar o número de dias ao campo data.

Page 20: Apostila sql2013

Banco de Dados 20

Prof.ª Maria Angélica

20

update consulta

set datacons = datacons + 7

where codpaciente = 003;

Subtração entre duas datas

O Oracle devolve o número de dias.

SELECT (SYSDATE – DATANASC) FROM PACIENTE;

Inclusão de data com a hora minuto e segundo usando a função TO_DATE

Insert into consulta

values (020, To_Date(‘20/09/2003:10:15:00’,‘dd/mm/yyyy:hh24:mi:ss’) ,’P’, ........);

5. Extraindo Dados de mais de uma Tabela - Junção

As vezes torna-se necessário juntar duas ou mais tabelas seguindo um determinado

critério com o objetivo de selecionar colunas das mesmas. Neste caso as colunas das

tabelas envolvidas na relação são comparadas. Será apresentado a seguir a junção

denominada equi-join.

Equi-Join : Quando o valor da coluna de uma tabela tem o seu valor correspondente na

segunda.

Exemplo : Exibir o nome do paciente e o código de todas as consultas realizadas por

ele.

Select nompaciente, codconsulta, data

From paciente, consulta

Where paciente.codpaciente = consulta.codpaciente;

Será exibido na tela:

NOMPACIENTE CODCONSULTA DATA

--------------------- ---------------------- --------

Pedro Luiz Silva 010 10-AUG-97

Pedro Luiz Silva 020 12-SEP-97

Pedro Luiz Silva 028 01-NOV-97

Antônio Vieira 014 15-JAN-98

Cristina Souza 024 15-MAR-98

Equação de Junção

Indica

o

formato

1-24

Page 21: Apostila sql2013

Banco de Dados 21

Prof.ª Maria Angélica

21

Cristina Souza 030 20-ABR-98

Exemplo: Exibir código do paciente, nome do paciente, e o nome do médico e o

código de cada consulta

Select paciente.codpaciente, nompaciente, codconsulta, nommedico

From paciente, consulta, medico

Where paciente.codpaciente = consulta.codpaciente

and

consulta.codmedico = medico.codmedico;

Será exibido na tela:

CODPACIENTE NOMPACIENTE CODCONSULTA NOMMEDICO

--------------------- ---------------------- --------------------- -------------------

507 Pedro Luiz Silva 010 Dr. Carlos Wen

507 Pedro Luiz Silva 020 Dr. Sérgio Cesar

507 Pedro Luiz Silva 028 Dr. Sérgio Cesar

604 Cristina Souza 024 Dr. Eleno Góis

604 Cristina Souza 030 Dr. Carlos Wen

6. Visões

É uma forma de visualizar várias tabelas como se fossem uma única tabela. Uma visão é

como uma tabela lógica, pois não existe fisicamente e seus dados são obtidos

dinamicamente a partir de tabelas do banco de dados. Ela pode conter colunas de

diferentes tabelas e linhas que satisfaçam alguma condição.

As visões ou visualizações tem como vantagem o fato de poder limitar as colunas e linhas

que serão exibidas na tela. Este recurso é importante para proteção contra acesso a dados

não permitidos para um determinado usuário. Outra vantagem é a simplificação do

comando Select uma vez que, para um comando Select complexo e frequentemente

utilizado podemos criar uma visão facilitando a execução do comando.

Comando Create View

Create [ or replace ] View < nome_visão> [ < nome_coluna1>, . . . ]

as <consulta>

[with check option [constraint < restrição> ] ] ;

Equação de Junção

Para 3 tabelas

Page 22: Apostila sql2013

Banco de Dados 22

Prof.ª Maria Angélica

22

Exemplos:

Create View pacsorocaba

as select * from pacientes

where cidpaciente = ´Sorocaba´

with check option ;

Create or replace View pacientes-res

as select codpaciente, nomepaciente

from paciente ;

Create View PacConsulta

as select codpaciente, nomepaciente, codconsulta,dataconsulta

from paciente, consultas

where paciente.codpaciente = consultas.codpaciente ;

OBS: A view PacConsulta se refere a mais de uma tabela.

Para selecionar todos os dados da view criada :

Select * from paciente_res;

Obs: A cláusula order by não pode ser usada em views.

Comando Drop View

Exclui uma visão do dicionário de dados.

Drop view < nome da Visão> ;

Exemplo:

Drop view pacientes-res ;

Alteração de dados através de uma Visão

Uma visão pode sofrer operações de alteração, deleção, inclusão e consulta respeitando

porém as seguintes restrições:

Page 23: Apostila sql2013

Banco de Dados 23

Prof.ª Maria Angélica

23

Deleção, Atualização e Inclusão de dados (delete, update e insert) através de uma

visão não é permitida se:

A visão foi criada a partir da junção de uma ou mais tabelas.

Se existir uma função de agrupamento (group by)

Se possuir a cláusula distinct

Se possuir colunas definidas por expressões

Além disso, o insert não é permitido se alguma coluna Not Null, sem valor default

especificado, não foi selecionada pela visão.

Page 24: Apostila sql2013

Banco de Dados 24

Prof.ª Maria Angélica

24

7. Subconsultas

7.1 Consultas Encadeadas (Claúsula Where com Subquery)

Uma subquery ou subconsulta é quando o resultado de uma consulta é utilizado por outra

consulta, de forma encadeada e contida no mesmo comando SQL.

Restrições:

A query interna deve ser usada dentro de parênteses

A subquery não pode conter a cláusula order by

Quando utilizando múltiplas colunas em uma subquery, estas colunas devem aparecer

na mesma ordem e com os mesmos tipos de dados da query principal, além do mesmo

número de colunas

Podem ser utilizados operadores lógicos

As cláusulas numa instrução SQL são executadas na seguinte ordem:

From (produto cartesiano)

where (restrição)

group by (agrupamento das linhas que satisfizerem o where)

having (restrição sobre linhas do agrupamento)

Exemplo:

Produto Item-pedido

@Codigo produto @Numero do pedido

Descrição @Codigo do produto

Unidade Quantidade

Valor unit.

Page 25: Apostila sql2013

Banco de Dados 25

Prof.ª Maria Angélica

25

Consulta: Que produtos tem pedidos cuja quantidade é superior a 20 ?

Select descricao from produto

Where cod_produto in (select cod_Produto from item-pedido

where quantidade > 20)

Resultado:

Descrição

Disquetes

Papel

Caneta

Construtores:

A construção in testa a pertinência de conjuntos, onde o conjunto é uma coleção de

valores produzidos por uma cláusula select. O not-in testa a não pertinência de

conjuntos.

O construtor exist retorna o valor true se o resultado da subconsulta é não vazio. O not

exists testa a não existência de tuplas em uma subconsulta.

Consulta: Quais vendedores ganham um salário fixo abaixo da média?

Vendedor

@codigo-vendedor

Nome-vendedor

Faixa-de-Comissão

Salário-Fixo

Select nome-vendedor from vendedor

Where salario-fixo < (select AVG(salario-fixo) from vendedor);

Page 26: Apostila sql2013

Banco de Dados 26

Prof.ª Maria Angélica

26

Consulta: Quais os produtos que não estão presentes em nenhum pedido?

Select cod-produto, descrição from produto

Where not exists

( select * from item-pedido where

produto.cod-produto = item-pedido.cod-produto)

Consulta: Quais clientes estão presentes em mais de três pedidos ?

Cliente Pedido

@Código-cliente @Numero-pedido

Nome-cliente Prazo-entrega

Endereço Codigo-cliente

Cidade Codigo-vendedor

Cep

Select nome-cliente from cliente where exists

(select count( * ) from pedido where

pedido.cod-cliente = cliente.cod-cliente

group by cliente.cod-cliente

having count(*) > 3 );

Exemplos com base no Modelo da vídeo-locadora:

Consulta: Exibir nome dos sócios com uma ou mais locações

Select cod-socio

from socio

where exists (select cod-socio from locacao

where locacao.cod-socio = socio.cod-socio);

ou podemos usar o operador IN :

select cod-socio

from socio

where cod-socio in (select cod-socio from locacao);

Consulta: Exibir código dos sócios que não possuam locações.

Page 27: Apostila sql2013

Banco de Dados 27

Prof.ª Maria Angélica

27

- Utilizaremos o operador NOT EXISTS.

Select cod-socio

from socio

where not exists (select cod-socio from locacao

where locacao.cod-socio = socio.cod-socio)

- Podemos também escrever este comando utilizando o operador NOT IN :

Select cod-socio

from socio

where cod-socio not in ( select cod-socio from locacao);

7.2 Subconsultas em comandos Update e Delete.

É possível utilizar subconsultas como argumento da cláusula where.

Exemplo:

1. Alterar o valor da consulta em menos 10% se o campo desconto da tabela de

paciente for igual a ‘S’.

UPDATE CONSULTA

SET VALCONSULTA = VALCONSULTA * 0.9

WHERE CODPACIENTE IN

(SELECT CODPACIENTE FROM PACIENTE

WHERE DESCONTO = ‘S’);

2. Excluir os pacientes que não tem consultas realizadas.

DELETE PACIENTE WHERE CODPACIENTE NOT IN

(SELECT DISTINCT CODPACIENTE FROM CONSULTA)

Page 28: Apostila sql2013

Banco de Dados 28

Prof.ª Maria Angélica

28

7.3 Cláusula Having

A Cláusula HAVING é utilizada para selecionar linhas de uma seleção feita com group

by ( restrição para o group by). É muito utilizada em subqueries.

Exemplo: Alunos cuja média final é superior à média do aluno JOSE(cod_aluno = 002).

Select nom_aluno, avg(val_nota_final)

from matricula m, aluno a

where m.cod_aluno = a .cod_aluno

group by nom_aluno

having avg(val_nota_final) > (select avg(val_nota_final) from

matricula where cod_aluno = 002);

8. Variáveis de Substituição em Consultas

Uma consulta pode conter variáveis que são informadas no momento da sua execução.

Exemplo:

SQL> Select codsocio, nomesocio

2 from socio where

3 cidsocio = &cidade;

Enter value for cidade: ‘Sorocaba’

Old 3: cidsocio = &cidade

new 3: cidsocio = ‘Sorocaba’

Para que a variável seja pedida apenas uma vez utilizar o símbolo &&. Na próxima

referência a esta variável, ela já assume o valor especificado anteriormente.

SQL> Select codsocio, nomesocio

2 from socio where

3 cidsocio = &&cidade;

Enter value for cidade: ‘Sorocaba’

Old 3: cidsocio = &&cidade

new 3: cidsocio = ‘Sorocaba’

8.1 Comando Define

Cria uma variável, ou substitui o valor previamente definido.

Page 29: Apostila sql2013

Banco de Dados 29

Prof.ª Maria Angélica

29

Exemplo:

SQL> Define codigo = 5;

SQL> Select nomesocio, endsocio from socio

where codsocio = &codigo ;

=> O comando Undefine libera a variável.

SQL> undefine codigo;

8.2 Comando Accept

Permite criar uma variável e obter o valor para ela, incluindo um texto

explicativo.

ACCEPT variável [number / char] [Prompt / Noprompt ‘mensagem-de- solicitação:’ ]

[Hide]

Com o comando accept é possível:

- Testar o tipo de dado que está sendo informado.

- Incluir texto explicativo.

- Suprimir o eco, isto é não aparecer o que está sendo digitado.

Exemplo:

SQL> accept nome char prompt ‘ Informe o Nome: ` ;

Informe o Nome: João da Silva

SQL> Select codsocio, endsocio from socio

where nomesocio = &nome;

Char faz com que o tipo de dado seja verificado.

SQL> accept password char prompt ´ Informe a senha: ` hide;

Informe a senha: ******

Neste caso não aparece o que está sendo digitado.

SQL> accept codsocio char noprompt;

Page 30: Apostila sql2013

Banco de Dados 30

Prof.ª Maria Angélica

30

Neste caso não aparece a mensagem.

9. Usando Apelidos para Tabelas

Apelidos ou table aliases podem ser usados para :

1- Simplificar o uso do nome de tabelas nas consultas;

2- Realizar junção usando a mesma tabela; isto é join de uma tabela com ela mesma.

Exemplo:

SQL> select distinct nomesocio

from locacao l, socio s

where l.codsocio = s.codsocio;

SQL> select e.nomfunc, g.nomefunc

from empregado e, funcionário g

where e.mgr = g.numfunc

Tabela funcionário

numfunc ( numero de matrícula do funcionário)

nomfunc (nome do funcionário)

mgr (numero de matrícula gerente)

Utilizando Sinônimos

Sinônimos podem ser definidos também no dicionário de dados da forma:

Create synonym func for funcionário;

Sinônimos podem ser removidos pelo comando DROP

SQL> Drop synonym [ Nome-do-sinônimo]

Page 31: Apostila sql2013

Banco de Dados 31

Prof.ª Maria Angélica

31

10 . Criação de seqüências automáticas

Seqüências são estruturas do banco de dados que geram números seqüenciais.

Isto é interessante para gerar chaves primárias ou seqüências geradas pelo próprio

sistema.

Sintaxe:

Create sequence Nome-da-sequencia

[ Increment by incrementador]

[ start with valor-inicial]

[ maxvalue valor_maximo | nomaxvalue ]

[ minvalue valor_minimo | nominvalue ]

[ Cycle | nocycle ]

[ cache | nocache ]

[ order | noorder ]

Exemplo:

SQL> Create sequence SEQcli

increment by 1

start with 10

maxvalue 9999

nocache

minvalue 1

order;

SQL> Insert into cliente values

(seqcli.nextval, ´Maria da Silva`, ´Rua das Flores`,

´Sorocaba`, ´01-sep-97` );

Para verificação e utilização dos números gerados pela seqüência:

nome-da-sequencia.nextval => indica o próximo valor da sequência

nome-da-sequencia.currval => indica o valor corrente

SQL> select nsocio.currval from dual;

SQL> select nsocio.nextval from dual;

Para alterar uma sequência:

SQL> Alter sequence seq increment by 1

Page 32: Apostila sql2013

Banco de Dados 32

Prof.ª Maria Angélica

32

Para eliminar uma sequência:

SQL> Drop sequence seq;

11. Inclusão de tabelas a partir de outra tabela

É possível usar os dados de uma tabela já existente para inclusão em outra.

Insert into nome-da-tabela [ (coluna, coluna, ...) ]

select lista-de-seleção

from tabela;

Exemplo:

SQL> insert into socio-aux ( codsocio, nomesocio, datinclusão)

select codsocio, nomesocio, datinclusão

from socio where cidsocio = ´Sorocaba`;

ou se as duas tabelas tem as mesmas colunas:

SQL> insert into socio_aux

select * from socio;

12. Criando uma Tabela através de uma consulta

É possível criar uma tabela usando como base uma já existente.

Create table paciente-bkp

as

select * from paciente;

Neste caso será criada a tabela paciente_bkp com estrutura igual a tabela paciente e

herdará também os dados.

Create table paciente-fem

as

select codpaciente, nomepaciente

where sexo = ´F´

Neste caso será criada a tabela paciente-fem apenas com dois campos da tabela paciente e

somente com as linhas cujo campo sexo for igual a ´F´.

Page 33: Apostila sql2013

Banco de Dados 33

Prof.ª Maria Angélica

33

Dica: Para criar uma nova tabela aproveitando a estrutura de outra mas sem levar os

dados deve-se utilizar a cláusula Select com uma condição(Where) que force a consulta a

não retornar nehuma linha.

13. O Dicionário de Dados do Oracle-8

Consiste de um conjunto de tabelas e views que são um guia de referência sobre a

base de dados.

Contém informações sobre:

- O nome dos usuários Oracle

- Direitos e privilégios

- Nome dos objetos do banco de Dados

- Constrains de tabelas

Acesso ao dicionário de dados Através de comandos select nas tabelas e views do

dicionário.

Principais Views:

User_xxx Mostra informações sobre objetos do usuário

all_xxxxxx Mostra objetos que o usuário tem acesso além dos objetos do próprio

usuário

Dba_xxxxx Para usuários que tem acesso de dba, mostra objetos pertencentes a base de

dados .

Dictionary Contém todos os objetos do diconário de dados acessíveis pelo usuário

Exemplo:

SQL> Select * from dictionary;

As views mais utilizadas são:

Nome da View Descrição

Dictionary Todos os objetos do dicionário de dados acessíveis pelo

usuário

User_objects Objetos pertencentes ao usuário

User_tables Descrição das tabelas do usuário

User_sequences Descrição das sequences do usuário

User_synonym Sinônimos do usuário

Page 34: Apostila sql2013

Banco de Dados 34

Prof.ª Maria Angélica

34

User_views texto das views do usuário

User_indexes Descrição dos índices do usuário

all_objects Objetos acessíveis pelo usuário

Exemplo:

Tabelas do usuário corrente:

select table_name from user_tables;

Colunas do tipo date na tabela locação

select column_name from user_tab_columns

where data_type = ´DATE` ;

Informações do objeto do usuário corrente

select object_name, object_type , created from user_objects;

Definição de uma view

select text from user_views

where view_name = ´sociossor`;

Todos os sinônimos visíveis pelo usuário

Select synonym_name, table_name from all_synonyms;

Consultar o nome da primary Key da tabela sócio

Select constraint_name from user_constraints where table_name = ´SOCIO` and

constraint_type = ´P` ;

Obs: tipos de constrains:

P = Primary Key

C = Cláusula Check

R = Foreign Key

Verificar todas as constraints

select constraint_name, constraint_type, table_name from user_constraints;

Page 35: Apostila sql2013

Banco de Dados 35

Prof.ª Maria Angélica

35

14. Transações

Até agora vimos os comandos que pertencem a categoria DDL e DML. Existe uma

terceira categoria de comandos chamada TPL (Transaction Process Language). Esta

categoria inclui os comandos COMMIT e ROLLBACK que são os responsáveis pela

gravação definitiva no banco de dados das alterações feitas pelos comandos DDL e DML

e pela recuperação da situação anterior caso necessário.

Commit : Grava uma transação no Banco de dados

Rollback: Restaura uma transação. Recupera a posição em que o banco estava após o

último commit ser executado.

Exercício:

1- Inclua um novo paciente na tabela de pacientes.

Através do comando select verifique se a inclusão foi realizada.

Digite:

SQL> Rollback ;

Execute o select novamente e voce irá notar que o registro incluído não existe mais.

2- Inclua um novo paciente na tabela de pacientes.

Digite:

SQL> Commit ;

Através do comando select verifique se a inclusão foi realizada.

Digite:

SQL> Rollback ;

Execute o select novamente e voce irá notar que o registro incluído ainda existe apesar

do Rollback ter sido executado. Isto acontece porque o rollback desfaz o que foi feito

entre o último commit executado e a situação atual.

Page 36: Apostila sql2013

Banco de Dados 36

Prof.ª Maria Angélica

36

15. Utilização dos Operadores Relacionais no Oracle

UNIÃO - unir 2 consultas em uma única

As tabelas devem ser união compatíveis isto é ter a mesma estrutura.

select * from paciente

union select * from paciente_bkp;

_______________________________________________________________________

INTERSECÇÃO - unir 2 consultas, somente as linhas idênticas serão

retornadas.

select * from paciente

intersect select * from paciente_bkp;

_______________________________________________________________________

DIFERENÇA - unir 2 consultas. Retorna todas as linhas da primeira

consulta, menos as linhas iguais à segunda consulta.

select * from paciente

minus select * from paciente_bkp;

_______________________________________________________________________

Outros Operadores

(+) Indica que uma coluna é "outer join".

Mesmo não existindo na outra tabela uma linha correspondente à

coluna indicada com o operador.

select A.nome, B.nome from paciente A, paciente_bkp B

where A.codpaciente = B.codpaciente (+);

_______________________________________________________________________

PROJEÇÃO

select codpaciente, nomepac from paciente;

SELEÇÃO

select * from paciente

where cidade = 'São Roque';

Page 37: Apostila sql2013

Banco de Dados 37

Prof.ª Maria Angélica

37

junção - (inner join)

_______________________________________________________________________

deletar linha da tabela paciente_bkp

delete from paciente_bkp

where codpaciente = 003;

________________________________________________________

Page 38: Apostila sql2013

Banco de Dados 38

Prof.ª Maria Angélica

38

16. Exercícios

16.1 Lista de exercícios complementar sobre o modelo Paciente-Consulta

Lista número 1

1- Criar uma nova coluna na tabela paciente com o nome País varchar2(15);

2- Alterar a coluna endereço da tabela de paciente para 28 posições.

3- Excluir a nova coluna criada no exercício 1.

4- Incluir a restrição NOT NULL na coluna endereco.

5- Alterar a data de nascimento do paciente de código = 001 para ´01-09-1960´.

6- Alterar o campo desconto de todos os pacientes para ´N´.

7- Sobre a tabela Paciente, alterar o campo endereço para ‘Rua Melo Alves,40’ e

cidade para ‘Itu” para o paciente de código = 02.

8- Excluir a consulta 002, somente se o campo valor consulta for igual a zero.

9- Excluir o paciente de código 5

10- Excluir todos os pacientes da cidade de sorocaba de sexo feminino.

11- Alterar o campo desconto de todos os pacientes de sexo feminino e idade

superior a 60 anos para ‘S’.

12- Criar um novo campo na tabela paciente para registrar o telefone do paciente. Este

campo deverá ser varchar2(15). Inserir o numero de telefone dos pacientes neste

novo campo.

Page 39: Apostila sql2013

Banco de Dados 39

Prof.ª Maria Angélica

39

16.2 Laboratório SQL - Lista Número 2

As tabelas apresentadas neste item deverão ser utilizadas nos exercícios da parte 2.1

a parte 2.6 da lista número 2.

Observação:

PK - Chaves primárias

FK - Chaves estrangeiras

Parte 2.1 – Criando e manipulando o banco de dados

1. Criar as tabelas do modelo acima.

2. Inserir pelo menos 5 linhas de dados para cada tabela.

3. Alterar o campo endereço da tabela Cliente para 30 posições.

4. Acrescentar um novo campo de nome Pco_Unit (numérico com 4 inteiros e duas

decimais), na tabela de itens de pedido.

5. Alterar o CEP de todos os clientes da cidade de Sorocaba para ‘18035-400’.

6. Alterar o prazo de entrega de todos os pedidos do cliente de código 20 para mais 10

dias.

7. Alterar o valor unitário para mais 10% para todos os produtos com unidade = ‘KG’.

Cliente

Cod_cliente (num,5) (PK)

Nome_cliente (alfan.,30)

Endereco (alfan.,25)

Cidade (alfan.,20)

Cep (alfan.,10)

UF (alfan.,2)

Pedido

Num_pedido (num,5) (PK)

Prazo_entrega (data)

Cod_cliente (FK )

Cod_vendedor (FK)

Produto

Cod_produto (num,3) (PK)

Descrição (alfan.,20)

unidade (alfan.,2)

valor_unitario (6 inteiros e 2 decimais)

Item_Pedido

Num_pedido (FK)

cod_produto(FK) PK

Quantidade 5 inteiros

Vendedor

Cod_vendedor (num,5) (PK)

nomevendedor (alfanum. 30 posições)

faixa_comissão (2 inteiros e 2 decimais)

salario_fixo ( 5 inteiros e 2 decimais)

Page 40: Apostila sql2013

Banco de Dados 40

Prof.ª Maria Angélica

40

8. Excluir todos os produtos com unidade = ‘CX’ e valor unitário superior a 50,00.

Parte 2.2 – Realizando Consultas

1. Listar número do pedido e prazo de entrega de todos os pedidos.

2. Listar a descrição e o valor unitário dos produtos.

3. Listar nome e endereço de todos os clientes.

4. Listar nome de todos os vendedores.

5. Listar todas as informações da tabela de clientes.

6. Listar todas as informações da tabela produtos.

7. Listar o nome de todos os vendedores. Alterar o cabeçalho da coluna para nome.

8. Listar o preço dos produtos simulando um aumento em 10%.

9. Listar o salário fixo dos vendedores simulando o aumento em 5%.

10. Listar o nome dos clientes que moram em Sorocaba.

11. Listar todos os dados dos vendedores com salário fixo <$400,00.

12. Listar o código do produto e a descrição para os produtos cuja unidade seja igual a

"Kg".

13. Listar o número dos pedidos com prazo de entrega entre 01/05/2012 a 01/06/2012.

14. Listar o pedido e o prazo de entrega para os pedidos com data de entrega no ano de

2004.

15. Listar os dados dos produtos cujo valor unitário seja maior que $100,00 e menor que

$200,00.

16. Listar o número do pedido e o código do produto cuja quantidade esteja entre 1000 e

1500.

17. Listar o nome dos vendedores cujo nome comece por "José".

18. Listar o nome de todos os clientes cujo ultimo nome seja "Silva".

19. Listar a descrição e o código dos produtos que tem a seqüência "AC" em qualquer

parte da descrição.

Page 41: Apostila sql2013

Banco de Dados 41

Prof.ª Maria Angélica

41

20. Listar os nomes dos clientes que não tenham endereço cadastrado.

21. Listar as cidades onde moram os clientes (exibir cada cidade apenas uma vez).

22. Listar os dados dos clientes por ordem alfabética de nome.

23. Listar os dados dos clientes por ordem alfabética decrescente de cidade.

24. Listar os dados dos clientes por ordem de cidade e por ordem do nome dos clientes.

25. Listar os códigos e a descrição dos produtos, cuja unidade igual o "Kg" por ordem

alfabética de descrição.

Parte 2.3 – Consultas usando funções

1. Listar a maior quantidade que conste na tabela de item do pedido.

2. Listar o menor valor unitário da tabela de produtos.

3. Listar a somatória dos salários fixos pago aos vendedores.

4. Listar o numero de produtos cuja unidade seja igual a "Lt".

5. Listar o numero de clientes agrupados por cidade.

6. Listar quantos pedidos cada vendedor realizou.

7. Listar o maior e o menor valor unitário para cada tipo de unidade de produto.

8. Listar o numero de clientes, agrupados por cidade para todas as cidades que aparecem

mais de 4 vezes na tabela de clientes.

Parte 2.4 – Consultas avançadas

1. Listar o código e o nome dos vendedores que efetuaram vendas para o cliente com código 10.

2. Listar o número do pedido, prazo de entrega, a quantidade e a descrição do produto com

código 100.

3. Quais os vendedores (código e nome) fizeram pedidos para o cliente 'José da Silva'.

4. Listar o número do pedido, o código do produto, a descrição do produto, o código do

vendedor, o nome do vendedor , o nome do cliente, para todos os clientes que moram em

Sorocaba.

Page 42: Apostila sql2013

Banco de Dados 42

Prof.ª Maria Angélica

42

5. Listar o código do produto, a descrição, a quantidade pedida e o prazo de entrega para

o pedido número 123.

6. Quais os cliente ( nome e endereço) da cidade de Itu ou Sorocaba tiveram seus

pedidos tirados com o vendedor de código igual a 10.

Parte 2.5 – Visões

1. Escreva uma visão que exiba o número do pedido, codcliente e prazo de entrega.

2. Escreva uma visão que liste todos os produtos com unidade = ‘KG’.

3. Escreva uma visão que liste todos os produtos com valor_unitário menor que a

média.

4. Escreva uma visão que liste o numero total de pedidos feitos por vendedor. Esta

visão deve conter o Codigo do vendedor, nome do vendedor e número total de

pedidos.

Qual das visões acima é atualizável?

Parte 2.6 – Subconsultas

1. Listar todos os clientes que moram na mesma cidade que 'João da Silva'.

2. Quais produtos tem valor unitário maior que a média.

3. Quais os clientes que só compraram com o vendedor com codigo 10 e com mais

nenhum outro vendedor (fidelidade).

4. Quais vendedores não fizeram mais de 5 pedidos.

5. Quais os vendedores não fizeram nenhum pedido no mês de maio/2013

6. Listar o nome do vendedor que mais fez pedidos.

7. Listar o nome dos clientes e o número total de pedidos associados a cada cliente em

ordem decrescente de vendas, isto é do cliente que mais tem pedidos para o que

menos tem.

8. Excluir todos os itens dos pedidos feitos pelo cliente de código =2;

9. Alterar o valor unitário de todos os produtos sem vendas no ano de 2013 para menos

20%.

Page 43: Apostila sql2013

Banco de Dados 43

Prof.ª Maria Angélica

43

Laboratório SQL - Lista Número 3

1- Criar uma sequência automática para o número do pedido da tabela pedido. Incluir

duas tuplas usando este recurso.

2- Criar uma tabela de nome itens-bkp a partir da tabela de itens. Esta nova tabela

deverá conter os campos: numero do pedido, código do produto para todos os pedidos

do ano de 2011.

3- Listar o nome de todas as tabelas de seu banco de dados e o nome dos campos que

são chave estrangeira nestas tabelas.

4- Listar todas as constraints da tabela pedido.

5- Listar o nome de todas as visões que você criou em seu banco de dados e o seu

respectivo texto.

6- Listar todas as cláusulas CHECK e o nome da tabela a qual pertence.

7- Crie uma visão que exiba o nome da tabela, nome da coluna, tipo e a constraint

(P,R,C) caso exista.

==============================================================

Anexo Dicas:

Para declarar valores default em tabelas:

Na criação da tabela:

Create table teste

(codigo number(3) PRIMARY KEY,

VALOR NUMBER(3) DEFAULT 10);

SQL> INSERT INTO TESTE(CODIGO) VALUES (4);

1 linha criada.

SQL> SELECT * FROM TESTE14;

CODIGO VALOR

---------- ----------

1 2

2

Page 44: Apostila sql2013

Banco de Dados 44

Prof.ª Maria Angélica

44

4 10

Após criação da tabela, ao adicionar uma nova coluna: