Manual SQL Versao 2

47
U UNIVERSIDADE F FEDERAL DE S SÃO C CARLOS CENTRO DE CIÊNCIAS EXATAS E DE TECNOLOGIA DEPARTAMENTO DE ESTATÍSTICA I INTRODUÇÃO AO SAS SQL FELIPE MARANGONI PEDRO FERREIRA FILHO JANEIRO 2010

Transcript of Manual SQL Versao 2

Page 1: Manual SQL Versao 2

UUNNIIVVEERRSSIIDDAADDEE  FFEEDDEERRAALL  DDEE  SSÃÃOO  CCAARRLLOOSS  

CCEENNTTRROO  DDEE  CCIIÊÊNNCCIIAASS  EEXXAATTAASS  EE  DDEE  TTEECCNNOOLLOOGGIIAA  

DDEEPPAARRTTAAMMEENNTTOO  DDEE  EESSTTAATTÍÍSSTTIICCAA   

 

 

 

      

IINNTTRROODDUUÇÇÃÃOO  AAOO  SSAASS­­SSQQLL        

FFEELLIIPPEE  MMAARRAANNGGOONNII  

PPEEDDRROO  FFEERRRREEIIRRAA  FFIILLHHOO    

                

JJAANNEEIIRROO  22001100   

 

Page 2: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 1  

 1. Introdução 

   Structure Query Language ou SQL é uma sublinguagem que nos possibilita trabalhar e 

relacionar  grandes  bases  de  dados  de  forma  simples,  rápida  e  flexível.  Devido  às  grandes 

vantagens  em  utilizá‐la,  diversas  companhias  como  IBM,  Microsoft,  Sybase  ou  Oracle  a 

adotaram em seus produtos. 

  Este manual utilizará o SAS – Statistical Analisys System, um software estatístico que 

também trabalha com este tipo de linguagem através do procedimento PROC SQL. 

 

1.1 Porquê  aprender PROC SQL    Diferentemente das linguagens procedurais, SQL é uma linguagem declarativa, ou seja, 

uma consulta SQL especifica a forma do resultado e não o caminho para se chegar a ele. Desta 

maneira, a simples utilização do PROC SQL ao  invés do SAS Data steps  (Ambiente Natural do 

SAS) eliminará diversos passos e procedimentos em seu programa. 

  Alem  disso,  também  disponibiliza  Procedures  para  criar,  modificar,  relacionar  ou 

eliminar bancos, produzir relatórios ou mesmo permitir uma maior segurança das informações 

presentes nos Data Sets. 

 

2. Criando Uma Biblioteca Pessoal    Primeiramente, utilizando o SAS Data step, criaremos uma Biblioteca  em um diretório 

especificado pelo programador, onde armazenaremos  todos os bancos de dados e arquivos 

referentes ao mesmos. Criar uma biblioteca significa especificar um  local de armazenamento 

qualquer no computador do usuário, onde todos os bancos de dados ficarão salvos e poderão 

ser acessados através do SAS. 

  No  exemplo  a  seguir,  criamos  uma  biblioteca  chamada  DADOS,  em  que  todos  os 

arquivos nela salvos, serão armazenados na área de trabalho do programador. 

 SAS DATA STEP  

LIBNAME DADOS 'C:\Felipe Marangoni\Desktop\SQL - Arquivos'; RUN;

   Por  default,  o  SAS  já  disponibiliza  uma  biblioteca  chamada WORK,  porem  qualquer 

banco  de  dados  armazenados  nela  será  temporário  e  será  apagado  ao  encerrarmos  a 

respectiva sessão SAS. Podemos visualizar a criação da biblioteca DADOS dentro do diretório 

Libraries. 

Page 3: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 2  

 

                        3. Trabalhando com um conjunto de dados 

   Para as diversas funções do PROC SQL, utilizaremos um banco de dados referente ao 

processo seletivo 2008 da UFSCar. 

 Data Sets:                           As diversas  funções disponibilizadas no SQL encontram‐se em palavras reservadas de 

programação. 

 

Page 4: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 3  

    

3.1 Ordenando OUTPUT de acordo com uma Variável    Podemos então, verificar o conteúdo lido de qualaquer uma das Tabelas:  CÓDIGO SQL  

PROC SQL; SELECT INSCRICAO, SEXO, CAMPUS FROM DADOS.GERAL ORDER BY INSCRICAO; QUIT; 

   É possível validar esta operação através dos comandos VALIDATE ou NOEXEC, usados 

apenas para  conferir  se a  sintaxe encontra‐se  correta  sem que o  todo o procedimento  seja 

executado. 

 CÓDIGO SQL  

PROC SQL; VALIDATE SELECT INSCRICAO, SEXO, CAMPUS FROM DADOS.GERAL ORDER BY INSCRICAO;

QUIT;  CÓDIGO SQL  

PROC SQL NOEXEC; SELECT INSCRICAO, SEXO, CAMPUS FROM DADOS.GERAL ORDER BY INSCRICAO;

QUIT;  

OUTPUT PARCIAL 

Page 5: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 4  

 Verificamos  que  o  resultado  é  apresentado  de  forma  ordenada  por  número  de 

inscrição, e com apenas as variáveis especificadas. Podemos ainda ordenar a tabela através da 

posição ordinal em que a variável  se encontra dentro do SELECT. Se  for mantida   a variável 

Inscricao na primeira posição, obteremos o mesmo  resultado ao utilizarmos o valor 1, como 

vemos a seguir.  

 CÓDIGO SQL  

PROC SQL; SELECT INSCRICAO, SEXO, CAMPUS FROM DADOS.GERAL ORDER BY 1; QUIT; 

 OUTPUT PARCIAL 

 

3.2 Agrupando OUTPUT de acordo com uma Variável    Podemos  agrupar  o  banco  de  dados  de  acordo  com  alguma  variável  de  interesse. 

Como exemplos, utilizaremos a variável Cidade, em GERAL. 

 

Page 6: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 5  

 CÓDIGO SQL  

PROC SQL; SELECT INSCRICAO, ISENTO, CIDADE FROM DADOS.GERAL GROUP BY CIDADE; QUIT;

 OUTPUT PARCIAL 

   É  possível  verificar  que  os  indivíduos  encontram‐se  distribuídos  de  acordo  com  as 

cidades de origem. 

 

3.3 Utilizando Operações com Escalares    Os operadores escalares disponíveis são: 

 

 

Page 7: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 6  

   Considerando que o total de pontos possíveis é 190, podemos criar uma nova variável 

chamada  Aproveitamento  através  da  multiplicação  de  TPontos  por  100/190  (em  valores 

percentuais). 

 CÓDIGO SQL  

PROC SQL; SELECT INSCRICAO, TPONTOS, TPONTOS*(100/190) AS APROVEITAMENTO FROM DADOS.GERAL; QUIT; 

 OUTPUT PARCIAL 

   Alem  disso,  é  possível  refinar  a  busca  utilizando  a  ordenação  e  o  agrupamento  em 

conjunto. 

 

3.4 Voltando ao Ambiente Natural SAS    No  exemplo  acima,  criamos  uma  nova  variável  cujo  conteúdo  não  existia 

anteriormente. Caso haja  interesse, é possível voltar a trabalhar com esta variável utilizando 

SAS Data step. 

 

3.4.1 ODS LISTING  

A partir do comando ODS do PROC SQL, será obtido um novo banco que chamaremos de 

APTOTAL, armazenado na biblioteca WORK do SAS. 

 CÓDIGO SQL  

ODS LISTING CLOSE; ODS OUTPUT SQL_Results = APTOTAL; PROC SQL; SELECT INSCRICAO, TPONTOS*(100/190) AS APROVEITAMENTO FROM DADOS.GERAL; QUIT;

Page 8: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 7  

ODS OUTPUT CLOSE; ODS LISTING;

 WORK.APTOTAL  

    Como  não  especificamos  a  biblioteca,  por  default  o  arquivo  ficará  gravado  na 

biblioteca temporária Work do SAS. 

 

3.7.4 Modificando Tabelas e Variáveis    No  exemplo  abaixo,  verificamos  que  é  possível  modificar  características  de  uma 

variável como o formato, tipo, descrição, dentre outras opções. 

 CÓDIGO SQL  

PROC SQL; ALTER TABLE DADOS.SEXO MODIFY SX CHAR(1) LABEL='Descricao';

QUIT;

  DADOS.SEXO 

   Verifica‐se que existem diversos operadores e  funções que nos  auxiliam  a  trabalhar 

com um banco de dados. Na tabela abaixo, podemos visualizar todos eles. 

 

Page 9: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 8  

  

3.4.2 Criando uma tabela através do comando CREATE TABLE    Podemos voltar também ao ambiente natural SAS através do comando CREATE TABLE 

de  uma  forma  ainda mais  simplificada.  Verificaremos  que  o  resultado  será  idêntico  ao  do 

exemplo anterior. 

 CÓDIGO SQL  

PROC SQL; CREATE TABLE APTOTAL2 AS SELECT INSCRICAO, TPONTOS*(100/190) AS APROVEITAMENTO FROM DADOS.GERAL;

QUIT;  

WORK.APTOTAL2  

  

3.5 Inserindo Novas Observações    Existem  alguns  comandos  que  permitem  que  novas  linhas  ou  observações  sejam 

inseridas no banco de dados de forma manual. 

Page 10: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 9  

3.5.1 Função INSERT através do comando SET    Através  da  função  INSERT  é  possivel  inserir  observações manualmente  através  da 

digitação  dos  dados.  Deve‐se  ressaltar  que  esta  é  uma  forma  indicada  para  a  inclusão  de 

apenas poucas observações. 

  CÓDIGO SQL  

PROC SQL; INSERT INTO DADOS.CAMPUS SET CAMPUS = 4, CC = 'Campinas';

QUIT;  

3.5.2 Função INSERT através do comando VALUES    É  possível  também  inserir  diretamente  toda  uma  linha  através  da  função  VALUES, 

como visto no exemplo a seguir. 

 CÓDIGO SQL 

 PROC SQL;

INSERT INTO DADOS.CAMPUS VALUES (5,'Araraquara');

QUIT;  

3.6 Removendo Linhas    O comando DELETE possibilita a remoção de uma ou mais linhas de uma determinada 

tabela. Para  a  seleção das  linhas  a  serem deletadas, pode‐se  trabalhar  conjuntamente  com 

operadores lógicos dentro da função WHERE. 

 CÓDIGO SQL  

PROC SQL; DELETE FROM DADOS.CAMPUS WHERE CAMPUS GE 4;

QUIT;  

3.7Alterando Colunas através do comando ALTER TABLE    Através  do  comando  ALTER  TABLE,  é  possível  alterar  uma  tabela,  modificando, 

adicionando ou transformando variáveis. 

 

3.7.1 Adicionando uma nova variável  

Page 11: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 10  

CÓDIGO SQL  

PROC SQL; ALTER TABLE DADOS.CAMPUS ADD CODIGO CHAR(2);

QUIT;

 DADOS.CAMPUS  

   

3.7.2 Trabalhando com os recursos conjuntamente  

  Dentro de um único procedure, podemos trabalhar com diversos operadores de forma 

seqüencial. No exemplo a seguir, observa‐se que são executadas diversas  funções dentro de 

um único PROC SQL. 

 CÓDIGO SQL  

PROC SQL; ALTER TABLE DADOS.GERAL ADD APTOTAL NUM MODIFY TPONTOS FORMAT=INT8.2, APTOTAL FORMAT=PERCENT8.2; UPDATE DADOS.GERAL SET APTOTAL = TPONTOS/190; SELECT INSCRICAO, TPONTOS, APTOTAL FROM DADOS.GERAL;

QUIT;

 OUTPUT 

Page 12: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 11  

 

3.7.3 Excluindo Variáveis ou Tabelas  CÓDIGO SQL  

PROC SQL; ALTER TABLE DADOS.CAMPUS DROP CODIGO;

QUIT;   

4. Verificando o Conteúdo de um Banco     CÓDIGO SQL  

PROC SQL; DESCRIBE TABLE DADOS.GERAL;

RUN;  LOG  

   

4.1 Identificando Dados Duplicados    Em um conjunto de dados como este, que possui mais de 26 mil observações, é de se 

esperar que existam colunas com informações iguais. A partir do comando DISTINCT, é possível 

selecionar cada uma das informações, sem necessidade de repeti‐las, tendo uma visão geral do 

conteúdo de uma específica variável. 

 CÓDIGO SQL  

PROC SQL; SELECT DISTINCT OP1 FROM DADOS.GERAL;

QUIT; OUTPUT PARCIAL 

Page 13: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 12  

 

4.2 Identificando dados únicos    Outra possibilidade é a de encontrar valores que não se repetem no  Data Set, o que 

muitas vezes é de grande utilidade para o programador, como veremos a seguir. 

 CÓDIGO SQL:  

PROC SQL; SELECT UNIQUE CIDADE FROM DADOS.GERAL; QUIT; 

              OUTPUT PARCIAL 

Page 14: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 13  

  

   Neste caso, o comando UNIQUE permite ao programador identificar variações de uma 

mesma cidade, ou mesmo erros de digitação, podendo assim fazer as devidas modificações. 

 5. Operadores Lógicos e Funções 

   Podemos  utilizar  operadores  e  funções  para  definir  dados  específicos  de  um  banco  ou 

relacionar tabelas a partir de uma variável em comum. 

 

  CÓDIGO SQL  

PROC SQL; SELECT DISTINCT OP1 FROM DADOS.GERAL WHERE OP1 >= 137 and op1 <= 151; QUIT;

      

Page 15: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 14  

 OUTPUT  

 CÓDIGO SQL 

PROC SQL; SELECT INSCRICAO, CIDADE, SEXO, TPONTOS FROM DADOS.GERAL WHERE SEXO EQ 2 AND (TPONTOS GE 155 AND TPONTOS LE 160)

GROUP BY CIDADE; QUIT;

 OUTPUT  

  

6. Trabalhando com Duas ou Mais Bases  Não  é  difícil  nos  depararmos  com  uma  situação  em  que  as  informações  desejadas 

encontram‐se  espalhadas  por  diferentes  bases  de  dados.  Uma  questão muito  comum  é  a 

necessidade de se trabalhar e  interagir com todos estes data sets simultaneamente. A seguir, 

caminharemos por diferentes bancos de dados de uma forma simplificada, utilizando algumas 

das funções já vistas inicialmente. 

Neste  primeiro  caso,  repetiremos  o  exemplo  acima,  trabalhando  com  o  banco Geral  e 

buscando no banco  Sexo, a variável  SX que  corresponde ao  formato da variável  SEXO. Vale 

destacar  que  é  necessário  existir  uma  variável  em  comum  em  ambos  os  data  sets  que 

diferencie as informações (foreign key) que neste caso será SEXO. 

 

Page 16: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 15  

CÓDIGO SQL  

ODS LISTING CLOSE; ODS OUTPUT SQL_Results = NOVODATA; PROC SQL;

SELECT GERAL.INSCRICAO, GERAL.CIDADE, SEXO.SX, GERAL.TPONTOS FROM DADOS.GERAL, DADOS.SEXO WHERE GERAL.SEXO = SEXO.SEXO;

QUIT; ODS OUTPUT CLOSE; ODS LISTING;

 

OUTPUT  

  

  Podemos observar que neste novo banco “NOVODATA” conterá as duas  informações 

conjuntamente, que até então estavam separadas. Ao se trabalhar com ambos os data sets, se 

obtêm uma  saída muito mais  informativa,  já que o  código  relativo a  variável em questão é 

substituído pelo seu respectivo formato. 

  Desta forma, podemos ter uma grande diversidade de aplicações: 

 CÓDIGO SQL    PROC SQL; SELECT GERAL.INSCRICAO, GERAL.SEXO, GERAL.CAMPUS, GERAL.OP1 FROM DADOS.GERAL, DADOS.SEXO, DADOS.CAMPUS, DADOS.CURSO WHERE GERAL.SEXO = SEXO.SEXO;

QUIT;  OUTPUT PARCIAL 

Page 17: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 16  

  CÓDIGO SQL    PROC SQL; SELECT GERAL.INSCRICAO, GERAL.OP1, CURSO.NOME_CURSO, ISENCAO.SN FROM DADOS.GERAL, DADOS.CURSO, DADOS.ISENCAO WHERE GERAL.OP1 >= 137 and GERAL.OP1 <= 151 AND GERAL.OP1 = CURSO.OP1 AND GERAL.ISENTO = ISENCAO.ISENTO ORDER BY GERAL.OP1;

QUIT;

 OUTPUT PARCIAL 

  

2.8.2 Combinando bancos    Existem  diversas  opções  para  junções  de  dois  ou mais  bancos  de  dados.  A  seguir 

veremos algumas possibilidades de concatenações de forma bem simplificada. 

 

2.8.2.1 Concatenando utilizando a função LEFT    Ao  utilizarmos  a  opção  LEFT,  ao  unirmos  duas  tabelas,  àquela  que  dispormos  à 

esquerda, logo após o comando FROM, será completamente selecionada. No caso da tabela à 

Page 18: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 17  

direita, apenas as observações ligadas pela variável chave comum em ambas as tabelas é que 

serão selecionadas.  

 

    CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB1 LEFT JOIN DADOS.TAB2 ON TAB1.X = TAB2.X;

QUIT;  OUTPUT 

    

2.8.2.2 Concatenando utilizando a função RIGHT    Da  mesma  forma  que  no  exemplo  anterior,  ao  utilizarmos  o  comando  RIGHT,  o 

resultado será parecido, porem com a tabela que estava do lado direto, logo após o comando 

FROM. 

 CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB1 RIGHT JOIN DADOS.TAB2 ON TAB1.X = TAB2.X;

QUIT;  OUTPUT 

Page 19: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 18  

 

2.8.2.3 Concatenando utilizando a função FULL    Ao utilizarmos a função FULL, todas as observações serão selecionadas e dispostas de forma a manter a igualdade da variável chave.  CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB1 FULL JOIN DADOS.TAB2 ON TAB1.X = TAB2.X;

QUIT;  OUTPUT 

 

2.8.2.3 Concatenando utilizando a função COALESCE    Podemos ainda conseguir o mesmo resultado do exemplo anterior, aplicando a função 

COALESCE, excluindo a variável X que aparece duas vezes. 

 CÓDIGO SQL  

PROC SQL; SELECT COALESCE(TAB1.X,TAB2.X), A, B FROM DADOS.TAB1 FULL JOIN DADOS.TAB2 ON TAB1.X = TAB2.X;

QUIT;  OUTPUT 

  

2.8.2.3 Junção de Tabelas através do operador EXCEPT    Através  do operador  EXCEPT,  serão  selecionadas  as observações  únicas da primeira 

tabela,  ou  seja,  que  estejam  presente  na  primeira  tabela  e  não  estejam  na  segunda.  Para 

exemplificação, passaremos a trabalhar com novas tabelas. 

 

Page 20: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 19  

      CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB3 EXCEPT SELECT * FROM DADOS.TAB4;

QUIT;  

OUTPUT 

  

Caso utilizemos EXCEPT ALL, observações repetidas no primeiro banco e que não estejam 

contidas no segundo, serão preservadas. 

 CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB3 EXCEPT ALL SELECT * FROM DADOS.TAB4;

QUIT;  

Page 21: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 20  

OUTPUT 

 Se utilizarmos ainda a função CORR, todas as observações repetidas e uma mesma variável 

e em ambos os bancos serão excluídas, sejam elas acompanhadas de  informações diferentes 

de outras variáveis ou não. Desta maneira, apenas serão mantidas as observações realmente 

únicas no primeiro banco. 

 CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB3 EXCEPT CORR SELECT * FROM DADOS.TAB4;

QUIT;  OUTPUT 

 

2.8.2.4 Junção de Tabelas através do operador INTERSECT  

O  operador  INTERSECT  permite  que  selecionemos  linhas  que  pertençam  em  ambas  as 

tabelas. 

 CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB3 INTERSECT SELECT * FROM DADOS.TAB4;

QUIT;  OUTPUT  

 

Page 22: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 21  

  Assim como no primeiro caso, as opções ALL e CORR também poderão ser utilizadas. 

 

2.8.2.5 Junção de Tabelas através do operador UNION  

O  operador  UNION  fará  a  junção  completa  das  tabelas,  excluindo  apenas  as  linhas 

duplicadas. 

 CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB3 UNION SELECT * FROM DADOS.TAB4;

QUIT;  OUTPUT 

 

 2.8.2.5 Junção de Tabelas através do operador OUTER UNION 

 O operador OUTER UNION  concatenará as duas  tabelas, uma abaixo da outra,  sem que 

nenhuma  linha  seja  excluída.  Utilizando  a  opção  CORR,  verifica‐se  a  união  da  variável  em 

comum. 

 CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB3 OUTER UNION SELECT * FROM DADOS.TAB4;

QUIT;  

Page 23: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 22  

OUTPUT 

 CÓDIGO SQL  

PROC SQL; SELECT * FROM DADOS.TAB3 OUTER UNION CORR SELECT * FROM DADOS.TAB4;

QUIT;  OUTPUT 

 

2.9 Utilizando referencia em um mesmo SELECT  

Criando uma nova coluna com referência a outra calculada em um mesmo SELECT.  CÓDIGO SQL  

PROC SQL; SELECT INSCRICAO, TPONTOS, CIDADE, TPONTOS/190 AS APROVEITAMENTO, CALCULATED APROVEITAMENTO*100 AS PORCENTAGEM format=inter8.2 FROM DADOS.GERAL ORDER PORCENTAGEM DESC;

QUIT;  

Page 24: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 23  

OUTPUT PARCIAL 

  

É ainda possível, colocar na forma de porcentagem diretamente, excluindo uma linha de programação e otimizando o processo.  CÓDIGO SQL  

PROC SQL; SELECT INSCRICAO, TPONTOS, CIDADE, TPONTOS/190 AS APROVEITAMENTO format=percent8.2 FROM DADOS.GERAL ORDER BY APROVEITAMENTO DESC;

QUIT;  

Page 25: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 24  

OUTPUT PARCIAL 

  

2.10 Identificando Não‐Missing  CÓDIGO SQL    PROC SQL; SELECT INSCRICAO, TPONTOS, COALESCE(ISENTO) FROM DADOS.GERAL;

QUIT;

OUTPUT  

2.11 Inserindo uma coluna de referência    Através da  função MONOTONIC(  ) é possível  adicionar uma  coluna  ao OUTPUT que 

contenha uma seqüência ordenada, como referência à posição das observações nas linhas. 

 CÓDIGO SQL      PROC SQL; SELECT MONOTONIC() AS Numero_Linha, GERAL.INSCRICAO, CAMPUS.CC FROM DADOS.GERAL, DADOS.CAMPUS WHERE GERAL.CAMPUS = CAMPUS.CAMPUS;

QUIT;

Page 26: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 25  

OUTPUT PARCIAL 

   Existe  ainda  a  possibilidade  de  se  acrescentar  esta  coluna  através  do  comando NUMBER, como vemos a seguir.  CÓDIGO SQL      PROC SQL NUMBER; SELECT GERAL.INSCRICAO, CAMPUS.CC FROM DADOS.GERAL, DADOS.CAMPUS WHERE GERAL.CAMPUS = CAMPUS.CAMPUS;

QUIT;  OUTPUT PARCIAL 

 

2.12 Estatísticas Descritivas no SQL    O procedure SQL é  também uma  ferramenta excelente para a  criação de bancos de 

dados que  contenha  informações descritivas de outros data  sets.  Isto é possível  através de 

uma gama de funções disponíveis que permitem cálculos, estatísticas descritivas e resumos em 

geral. 

  Na tabela a seguir é possível visualizar essas funções. 

 

Page 27: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 26  

    Podemos  então  obter  o  número  de  cursos  disponíveis  através  da  função  COUNT 

aplicado à variável Nome_Curso ou OP1. 

 CÓDIGO SQL    PROC SQL; SELECT COUNT(NOME_CURSO) AS Numero_de_Cursos FROM DADOS.CURSO;

QUIT;  

OUTPUT 

    Podemos ainda trabalhar conjuntamente as estatísticas descritivas e as funções acima 

exemplificadas. 

 CÓDIGO SQL  

PROC SQL; SELECT MAX(TPONTOS) AS Melhor_Desempenho, MIN(TPONTOS) AS Menor_Desempenho FROM DADOS.GERAL WHERE OP1 EQ 151;

QUIT;  

Page 28: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 27  

 OUTPUT 

  CÓDIGO SQL  

PROC SQL; SELECT MEAN(TPONTOS*(100/190)) AS Media, STD(TPONTOS*(100/190)) AS Variancia, T(TPONTOS*(100/190)) AS T,

MEAN(TPONTOS*(100/190))/(STD(TPONTOS*(100/190))/N(TPONTOS)**(1/2)) AS Est_Teste

FROM DADOS.GERAL; QUIT;  

OUTPUT 

     Alem da possibilidade de aplicar as  funções a  todo o conjunto de valores, é possível 

obter o mesmo resultado em subconjuntos, simultaneamente. No exemplo a seguir, calcula‐se 

a média em cada um dos campus. 

  CÓDIGO SQL  

PROC SQL; SELECT CAMPUS, AVG(GERAL.TPONTOS)AS Medias FROM DADOS.GERAL GROUP BY CAMPUS;

QUIT;  

OUTPUT 

  

2.13 Predicados    Os  predicados  são  indicados  quando  desejamos  comparar  duas  condições  ou 

expressões. 

Page 29: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 28  

 

  

2.13.1 Selecionando um Grupo de Valores    Vimos  anteriormente  que  é  possível  selecionar  um  intervalo  específico  de  dados 

através da utilização de operadores lógicos. O comando BETWEEN é uma simplificação de uma 

destas operações. 

 CÓDIGO SQL 

PROC SQL; SELECT INSCRICAO, ISENTO, TPONTOS FROM DADOS.GERAL WHERE TPONTOS BETWEEN 20 AND 21 ORDER BY TPONTOS DESC;

QUIT;  

OUTPUT 

  

 

2.13.2 Selecionando valores nulos  CÓDIGO SQL 

PROC SQL; SELECT INSCRICAO, ISENTO, TPONTOS FROM DADOS.GERAL WHERE TPONTOS IS NULL;

QUIT;

Page 30: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 29  

SAS LOG 

  

2.13.2 Selecionando valores não nulos    Similarmente ao exemplo anterior, podemos aplicar a função NOT  IS NULL ou  IS NOT 

NULL para selecionar os valores diferentes de zero de nosso conjunto de dados. 

 CÓDIGO SQL 

PROC SQL; SELECT INSCRICAO, ISENCAO.SN, TPONTOS, SEXO.SX FROM DADOS.GERAL, DADOS.ISENCAO, DADOS.SEXO WHERE TPONTOS IS NOT NULL AND GERAL.CAMPUS = 1 AND GERAL.SEXO = 1 AND GERAL.SEXO = SEXO.SEXO AND OP1 = 137 AND TPONTOS GT 140 AND GERAL.ISENTO = ISENCAO.ISENTO;

QUIT;  

OUTPUT 

  

   

Page 31: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 30  

2.13.2 Aplicando a Função LIKE    Através desta função, é possível selecionar informações que contenham uma parte 

específica de texto. No exemplo a seguir, selecionaremos apenas as cidades que começam 

com a palavra “SAO”. 

 CÓDIGO SQL 

PROC SQL; SELECT DISTINCT CIDADE FROM DADOS.GERAL WHERE CIDADE LIKE 'SAO%'; ORDER BY CIDADE;

QUIT;  OUTPUT PARCIAL 

 Já neste  próximo  exemplo,  o  objetivo  é  obter  as  cidades  que  contenham  a  palavra 

“SAO”, não importando em que parte. 

 CÓDIGO SQL 

PROC SQL; SELECT DISTINCT CIDADE FROM DADOS.GERAL WHERE CIDADE LIKE '%SAO%'; ORDER BY CIDADE;

QUIT;  

Page 32: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 31  

OUTPUT PARCIAL 

    Outra  opção  é  obtermos  informações  que  começam  com  uma  determinada  letra, 

podendo  fixar  o  número  máximo  de  caracteres  através  do  comando  underline  “_”.  No 

exemplo abaixo, desejamos obter os cursos que começam por “E” e que sejam constituídos de 

no máximo mais 10 outras letras quaisquer. 

 CÓDIGO SQL 

PROC SQL; SELECT NOME_CURSO FROM DADOS.CURSO WHERE NOME_CURSO LIKE 'E__________';

QUIT;  OUTPUT 

   

  Variações desta mesma  ferramenta nos permitem uma  infinidade de opções. Abaixo, 

obteremos palavras cuja quarta letra seja “a”, sem restrições às demais. 

 CÓDIGO SQL 

PROC SQL; SELECT NOME_CURSO FROM DADOS.CURSO WHERE NOME_CURSO LIKE '___a%';

QUIT;  

Page 33: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 32  

OUTPUT 

  

2.13.3 Função CONTAINS  

  Esta função assemelha‐se muito à  função LIKE, em que nos permite selecionar dados 

que  contenham  determinados  trechos  ou  características,  em  qualquer  parte  do  texto.  O 

resultado abaixo também pode ser conseguido utilizando “?” no lugar de CONTAINS. 

 CÓDIGO SQL 

PROC SQL;

SELECT NOME_CURSO FROM DADOS.CURSO WHERE NOME_CURSO CONTAINS 'tec';

QUIT;

CÓDIGO SQL  PROC SQL;

SELECT NOME_CURSO FROM DADOS.CURSO WHERE NOME_CURSO ? 'tec';

QUIT;    Outra possibilidade é utilizando “%” antes e após o trecho desejado.  CÓDIGO SQL 

PROC SQL; SELECT NOME_CURSO FROM DADOS.CURSO WHERE NOME_CURSO LIKE '%tec%';

QUIT;  OUTPUT 

  

  

2.13.3 Função SOUNDS‐LIKE  

Page 34: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 33  

  A  função  SOUNDS‐LIKE  cujo  operador  é  dado  por  (=*)  é  uma  ferramenta  muito 

interessante.  Ela  permite  que  encontremos  pequenas  variações  de  uma  palavra,  cuja 

gramática ou mesmo fonética seja semelhante. 

 CÓDIGO SQL 

PROC SQL; SELECT CIDADE FROM DADOS.GERAL WHERE CIDADE =* 'SANTA BARBARA D´OESTE';

QUIT; OUTPUT PARCIAL 

 2.13.3 Verificando a Existência de um Valor 

   Através da  função EXISTS, é possível verificar  se dados de um  terminando data  sets 

possui  informações  guardadas  em  outro  determinando  banco.  No  exemplo  a  seguir, 

verificaremos  quais  observações  da  tabela  GERAL  possui  informações  referentes  à  variável 

Campus presente na tabela CAMPUS. 

  CÓDIGO SQL 

PROC SQL; SELECT INSCRICAO, ISENTO, CAMPUS FROM DADOS.GERAL G WHERE EXISTS (SELECT * FROM DADOS.CAMPUS C WHERE G.CAMPUS = C.CAMPUS);

QUIT;  

Page 35: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 34  

OUTPUT PARCIAL 

   Percebe‐se  que  todas  as  observações  do  banco  foram  selecionadas,  já  que  todas 

possuem o valor da variável Campus. 

 

2.14 Operações Condicionais    Outra  função muito  interessante  é  a  CASE, que permite  a  inclusão de  condições  às 

operações  executadas  dentre  da  função  SELECT.  Como  exemplo,  calcularemos  o 

aproveitamento dos  cursos,  levando  em  consideração um  total de pontos  igual  a 190,  com 

exceção da Música, que devido à prova de aptidão, possui um total de 220 pontos. 

 CÓDIGO SQL 

PROC SQL; SELECT OP1 'CURSOS', CASE OP1 WHEN 22 THEN MEAN(TPONTOS*(100/230)) ELSE MEAN(TPONTOS*(100/190)) END "APROVEITAMENTOS" FROM DADOS.GERAL GROUP BY OP1;

QUIT;

Page 36: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 35  

OUTPUT PARCIAL 

 

2.14 Inserindo um texto  CÓDIGO SQL 

PROC SQL; SELECT OP1 'CURSOS', 'O aproveitamento é:', CASE OP1 WHEN 22 THEN MEAN(TPONTOS*(100/230)) ELSE MEAN(TPONTOS*(100/190)) END "APROVEITAMENTOS" FROM DADOS.GERAL GROUP BY OP1;

QUIT; OUTPUT PARCIAL 

 

 

Page 37: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 36  

2.15 Operador IN    O  operador  IN  é  uma  simplificação  do  operador  WHERE.  No  exemplo  abaixo, 

realizaremos funções idênticas utilizando os dois operadores. 

 CÓDIGO SQL 

PROC SQL; SELECT OP1 'Cursos', INSCRICAO 'Número de Inscrição', SEXO 'Sexo' FROM DADOS.GERAL WHERE INSCRICAO = 1209892 OR INSCRICAO = 1000373 OR INSCRICAO = 1210041;

QUIT; CÓDIGO SQL 

PROC SQL; SELECT OP1 'Cursos', INSCRICAO 'Número de Inscrição', SEXO 'Sexo' FROM DADOS.GERAL WHERE INSCRICAO IN (1209892,1000373,1210041);

QUIT; OUTPUT 

   Alem  disso,  podemos  acrescentar  a  função  NOT  como  forma  de  exclusão  de  uma 

particularidade em questão. 

CÓDIGO SQL 

PROC SQL; SELECT CC 'Campus', Campus 'Número de Inscrição' FROM DADOS.CAMPUS WHERE CC NOT IN ('Araras','Sorocaba');

QUIT;

OUTPUT 

 

2.16 A Função HAVING 

Page 38: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 37  

   O comando HAVING, assim como WHERE, determina quais  linhas de determinada  tabela 

serão  selecionadas.  Porem  a  função WHERE  deve  ser  utilizada  antes  que  um  o  comando 

GROUP ocorra,  já que ela é aplicada em  linhas. No  caso da  ferramenta HAVING,  isso não é 

necessário, já que é aplicado diretamente aos grupos de dados. 

No  exemplo  abaixo  verificamos  que  o  comando  HAVING  será  usado  após  o  comando 

GROUP. 

 CÓDIGO SQL  

PROC SQL; SELECT OP1, MAX(TPONTOS) 'Máximo', AVG(TPONTOS) 'Média', MIN(TPONTOS) 'Mínimo', COUNT(TPONTOS) 'Numero de Inscritos' FROM DADOS.GERAL GROUP BY OP1 HAVING AVG(TPONTOS) GE 80;

QUIT;  

OUTPUT 

 Podemos  ainda  trabalhar  conjuntamente  com  as  funções  HAVING  e WHERE  como 

vemos no exemplo abaixo. 

CÓDIGO SQL  

PROC SQL; SELECT CURSO.NOME_CURSO 'Curso', AVG(TPONTOS) 'Média', STD(TPONTOS) 'Desvio Padrão', RANGE(TPONTOS) 'Amplitude' FROM DADOS.GERAL, DADOS.CURSO WHERE GERAL.OP1 = CURSO.OP1 GROUP BY CURSO.NOME_CURSO HAVING AVG(TPONTOS) LE 60;

QUIT;  

  

Page 39: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 38  

OUTPUT 

2.17 Trabalhando com Caracteres  

Existem uma  infinidade de possibilidades quando trabalhamos com variáveis categóricas. 

Nos exemplos a  seguir, veremos algumas das aplicações e operações disponíveis através da 

linguagem SQL. 

 

2.17 Concatenando duas variáveis categóricas  CÓDIGO SQL  

PROC SQL; SELECT CIDADE, CAMPUS.CC, CIDADE || "," || CAMPUS.CC AS NOVA_VARIAVEL FROM DADOS.GERAL, DADOS.CAMPUS WHERE GERAL.CAMPUS = CAMPUS.CAMPUS;

QUIT;  

OUTPUT PARCIAL 

   

2.17.2 Tamanho de um String    

Page 40: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 39  

CÓDIGO SQL 

PROC SQL; SELECT NOME_CURSO, LENGTH(NOME_CURSO) AS TAMANHO FROM DADOS.CURSO;

QUIT;

OUTPUT PARCIAL 

  

 3 Trabalhando com PROC SQL utilizando MACROS  Uma grande vantagem ao se utilizar SQL é a possibilidade de criar uma  interface com a 

linguagem SAS MACRO.  Esta implementação permite ao programador customizar operações e 

estender as capacidades do procedimento SQL. 

Uma macro é basicamente um procedimento que busca resumir um trecho repetitivo de 

código em um conjunto de operações cuja única diferença se dá pelo padrão de entrada, que 

mudará para cada uma das implementações que realizará. 

 

3.1 Criando Tabelas simultaneamente através de Macros  

  Inicialmente,  prepararemos  um  novo  conjunto  de  dados  CATEG,  criando  novas 

variáveis que servirão como parâmetros para a nova Macro. Teremos como objetivo a criação 

de quatro tabelas que conterão as variáveis  INSCRICAO, CIDADE e TPONTOS alem da variável 

única a cada uma delas: SEXO, ISENTO, CAMPUS, MAT. 

   

Page 41: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 40  

CÓDIGO SQL  

ODS LISTING CLOSE; ODS OUTPUT SQL_Results = DADOS.CATEG; PROC SQL;

SELECT INSCRICAO, CIDADE, TPONTOS, SEXO AS V1, ISENTO AS V2, CAMPUS AS V3, MAT AS V4 FROM DADOS.GERAL;

QUIT; ODS OUTPUT CLOSE; ODS LISTING;

   A seguir, criaremos uma Macro chamada MACRO1 que produzira quatro tabelas para 

cada uma das variáveis V1, V2, V3 e V4. 

 CÓDIGO SQL  

%MACRO MACRO1; %DO i=1 %TO 4;

PROC SQL; SELECT INSCRICAO, CIDADE, TPONTOS, V&i FROM DADOS.CATEG WHERE (TPONTOS GE 155 AND TPONTOS LE 160) ORDER BY V&i; QUIT;

%end; %mend MACRO1; %MACRO1;

 OUTPUT 

TABELA 1          TABELA 2 

        

Page 42: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 41  

 TABELA 3          TABELA 4 

   

3.2 Criando Tabelas específicas através de uma Macro ‐ Função    Podemos ainda  criar macros na  forma de  funções  cujos parâmetros  sejam definidos 

pelo programador, de acordo  com  seu  interesse. Diferentemente do exemplo anterior, esse 

tipo de macro retornará apenas a tabela para qual foi designada, dependendo do argumento 

fornecido.  

 

3.2.1 Macros de um parâmetro:  CÓDIGO SQL 

%MACRO FORMAT(VAR); %IF %UPCASE(&VAR) = SEXO %THEN %DO;

PROC SQL; SELECT INSCRICAO 'Inscrição', TPONTOS 'Total de Pontos', CIDADE 'Cidade', SX 'Sexo' FROM DADOS.GERAL, DADOS.SEXO WHERE GERAL.SEXO = SEXO.SEXO ORDER BY TPONTOS DES

%END; %ELSE %IF %UPCASE(&VAR) = ISENTO %THEN %DO;

PROC SQL; SELECT INSCRICAO 'Inscrição', TPONTOS 'Total de Pontos', CIDADE 'Cidade', SN 'Possui Isenção' FROM DADOS.GERAL, DADOS.ISENCAO; WHERE GERAL.SEXO = ISENCAO.ISENTO ORDER BY TPONTOS DES

%END; %ELSE %IF %UPCASE(&VAR) = CAMPUS %THEN %DO;

PROC SQL; SELECT INSCRICAO 'Inscrição', TPONTOS 'Total de Pontos', CIDADE 'Cidade', CC 'Campus' FROM DADOS.GERAL, DADOS.CAMPUS;

Page 43: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 42  

WHERE GERAL.SEXO = CAMPUS.CAMPUS ORDER BY TPONTOS DES

%END; %ELSE %IF %UPCASE(&VAR) = MAT %THEN %DO;

PROC SQL; SELECT INSCRICAO 'Inscrição', TPONTOS 'Total de Pontos', CIDADE 'Cidade', MATRICULADOS 'ESTÁ MATRICULADO' FROM DADOS.GERAL, DADOS.MATRICULADOS; WHERE GERAL.SEXO = MATRICULADOS.MAT ORDER BY TPONTOS DES

%END; %ELSE %DO; %PUT Variável Não Válida!; QUIT; %END; %MEND FORMAT; %FORMAT(SEXO);

 OUTPUT PARCIAL 

 3.2.2 Utilizando mais de um parâmetro  

CÓDIGO SQL 

%MACRO AGRUP(LIB, TAB, GROUP); PROC SQL;

SELECT &GROUP, MAX(TPONTOS) 'Máximo', AVG(TPONTOS) 'Média', MIN(TPONTOS) 'Mínimo', COUNT(TPONTOS) 'Numero de Inscritos' FROM &LIB..&TAB GROUP BY &GROUP HAVING AVG(TPONTOS) GE 80;

QUIT; %MEND AGRUP; %AGRUP(DADOS,GERAL,SEXO);

  

Page 44: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 43  

OUTPUT 

  

4. Utilizando Sub‐Funções  CÓDIGO SQL  ODS LISTING CLOSE; ODS OUTPUT SQL_Results = DADOS.SCARLOS; PROC SQL; SELECT INSCRICAO, TPONTOS, CC, NOME_CURSO FROM DADOS.GERAL, DADOS.CAMPUS, DADOS.CURSO WHERE GERAL.CAMPUS = CAMPUS.CAMPUS AND GERAL.OP1 = CURSO.OP1 AND GERAL.OP1 = 61; QUIT; ODS OUTPUT CLOSE; ODS LISTING; ODS LISTING CLOSE; ODS OUTPUT SQL_Results = DADOS.SOROCABA; PROC SQL; SELECT INSCRICAO, TPONTOS, CC, NOME_CURSO FROM DADOS.GERAL, DADOS.CAMPUS, DADOS.CURSO WHERE GERAL.CAMPUS = CAMPUS.CAMPUS AND GERAL.OP1 = CURSO.OP1 AND GERAL.OP1 = 63; QUIT; ODS OUTPUT CLOSE;

ODS LISTING; OUTPUT PARCIAL – SCARLOS 

       

Page 45: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 44  

OUTPUT ‐ SOROCABA 

 CÓDIGO SQL 

 PROC SQL; SELECT * FROM DADOS.SCARLOS WHERE TPONTOS >

(SELECT AVG(TPONTOS) FROM DADOS.SOROCABA) ORDER BY TPONTOS ASC;

QUIT;

OUTPUT PARCIAL ‐ SOROCABA 

  

4.1 Utilizando as funções ANY  e ALL em Sub‐Querys    Através da função ANY, podemos selecionar valores que satisfaçam qualquer uma das 

restrições  fixadas  pelo  programador.  Na  tabela  abaixo,  pode‐se  visualizar  isto  com  maior 

clareza. 

 

    

Page 46: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 45  

CÓDIGO SQL  

PROC SQL; SELECT INSCRICAO, NOME_CURSO, CC, TPONTOS FROM DADOS.GERAL, DADOS.CAMPUS, DADOS.CURSO WHERE GERAL.OP1 = CURSO.OP1 AND GERAL.CAMPUS = CAMPUS.CAMPUS AND GERAL.OP1 EQ 61 AND TPONTOS > ANY (SELECT AVG(TPONTOS) FROM DADOS.GERAL WHERE OP1 BETWEEN 62 AND 64 GROUP BY OP1) ORDER BY TPONTOS ASC;

QUIT;  OUTPUT PARCIAL 

     De forma similar, podemos utilizar a função ALL para obter resultados parecidos. Na 

tabela abaixo, pode‐se observar qual o retorno encontrado ao aplicar a função. 

 

  CÓDIGO SQL  

PROC SQL; SELECT INSCRICAO, NOME_CURSO, CC, TPONTOS FROM DADOS.GERAL, DADOS.CAMPUS, DADOS.CURSO

Page 47: Manual SQL Versao 2

Introdução ao SAS‐SQL – Felipe Marangoni & Pedro Ferreira Filho ‐  Janeiro 2010   Página 46  

WHERE GERAL.OP1 = CURSO.OP1 AND GERAL.CAMPUS = CAMPUS.CAMPUS AND GERAL.OP1 EQ 61 AND TPONTOS > ALL (SELECT AVG(TPONTOS) FROM DADOS.GERAL WHERE OP1 BETWEEN 62 AND 64 GROUP BY OP1) ORDER BY TPONTOS ASC;

QUIT;  OUTPUT PARCIAL 

    Referências Bibliográficas:  Lafler, K. P. (2004) – PROC SQL: Beyond the Basics Using SAS, SAS Institute Inc.  Prairie, K. ( 2005) – The Essential PROC SQL Handbook for SAS Users, SAS Institute Inc.