segunda-feira, 27 de junho de 2011

Configurando ADSL no linux com o rp-pppoe

Artigo que ensina a configurar uma conexão pppoe para conectar o seu linux ao ADSL.

Detalhe importante: Precisa Provedor...
Configurando o Linux
(RedHat 7.1) para o novo Speedy
IP Dinâmico (13/09/2001)
Introdução:
Informações sobre o meu computador:
Requisitos para a configuração:
Configurando:

* adsl-setup
* adsl-start
* ping ...
* adsl-status
* adsl-stop

Informações do Sistema usado:

* Sistema Operacional:
* Linux RedHat 7.1 ADSL-Modem:
Zyxel-Parks Prestige 642R

Requisitos para a configuração:

> Sistema Operacional Linux (RedHat 7.1 em meu caso, porém acredito que funcione em diversas distribuições Linux)
Placa de rede funcionando

Pacote RP-PPPoE instalado (rp-pppoe-2.6-5.i386.rpm / RedHat 7.1)
Arquivos /etc/ppp/firewall-standalone e /etc/ppp/firewall-masq

Configurando:
1)Entre no linuxconf e deixe sua placa de rede em modo DISABLED.

2)Depois de instalado o RP-PPPoE, rode os comandos(como root):

* adsl-setup

As saídas de adsl-setup deverão ser as seguintes:

[root@localhost /root]# adsl-setup
Welcome to the Roaring Penguin ADSL client setup. First, I will run
some checks on your system to make sure the PPPoE client is installed
properly...

Looks good! Now, please enter some information:

USER NAME

>>> Enter your PPPoE user name (default bxxxnxnx@sympatico.ca):
Digite o seu login@provedor

INTERFACE

>>> Enter the Ethernet interface connected to the ADSL modem
For Solaris, this is likely to be something like /dev/hme0.
For Linux, it will be ethn, where 'n' is a number.
(default eth0):
Digite o ethx da placa de rede ligada ao modem ADSL

Do you want the link to come up on demand, or stay up continuously?
If you want it to come up on demand, enter the idle time in seconds
after which the link should be dropped. If you want the link to
stay up permanently, enter 'no' (two letters, lower-case.)
NOTE: Demand-activated links do not interact well with dynamic IP
addresses. You may have some problems with demand-activated links.
>>> Enter the demand value (default no):
Sugiro que digite "no" neste item

DNS

Please enter the IP address of your ISP's primary DNS server.
If your ISP claims that 'the server will provide DNS addresses',
enter 'server' (all lower-case) here.
If you just press enter, I will assume you know what you are
doing and not modify your DNS setup.
>>> Enter the DNS information here:
Digite o DNS primário de seu provedor, ex: 200.204.0.10 ou simplesmente Enter

Please enter the IP address of your ISP's secondary DNS server.
If you just press enter, I will assume there is only one DNS server.
>>> Enter the secondary DNS server address here:
Digite o DNS secundário de seu provedor, ex: 200.204.0.138 ou simplesmente Enter

PASSWORD

>>> Please enter your PPPoE password:
>>> Please re-enter your PPPoE password:
Digite e confirme sua senha de autenticação

FIREWALLING

Please choose the firewall rules to use. Note that these rules are
very basic. You are strongly encouraged to use a more sophisticated
firewall setup; however, these will provide basic security. If you
are running any servers on your machine, you must choose 'NONE' and
set up firewalling yourself. Otherwise, the firewall rules will deny
access to all standard servers like Web, e-mail, ftp, etc. If you
are using SSH, the rules will block outgoing SSH connections which
allocate a privileged source port.

The firewall choices are:
0 - NONE: This script will not set any firewall rules. You are responsible
for ensuring the security of your machine. You are STRONGLY
recommended to use some kind of firewall rules.
1 - STANDALONE: Appropriate for a basic stand-alone web-surfing workstation
2 - MASQUERADE: Appropriate for a machine acting as an Internet gateway
for a LAN
Choose a type of firewall (0-2):
Firewall. Digite a opção que melhor se encaixa à sua configuração:

0 - nenhuma proteção de firewall (não recomendado)
1 - computador único ligado ao speedy
2 - computador que funciona como gateway de uma rede

Start this connection at boot time

Do you want to start this connection at boot time?
Please enter no or yes.
Digite:

yes - se deseja que a conexão se estabeleça durante o boot do Linux
no - se deseja que a conexão seja feita manualmente(veja Conexão Manual)

** Summary of what you entered **

Ethernet Interface: eth0
User name: xxxxxx@provedor
Activate-on-demand: No
Primary DNS: xxx.xxx.xxx.xxx
Secondary DNS: yyy.yyy.yyy.yyy
Firewalling: STANDALONE

Accept these settings and adjust configuration files (y/n)? y
Digite "y" e a saída deverá ser a seguinte:

Adjusting /etc/ppp/pppoe.conf
Adjusting /etc/resolv.conf
(But first backing it up to /etc/resolv.conf-bak)
Adjusting /etc/ppp/pap-secrets and /etc/ppp/chap-secrets



Congratulations, it should be all set up!

Type 'adsl-start' to bring up your ADSL link and 'adsl-stop' to bring
it down. Type 'adsl-status' to see the link status.
Pronto, seu PPPoE está configurado!

Conexão Manual
*
adsl-start

[root@localhost ppp]# adsl-start
. Connected!
Se a palavra Connected! aparecer, parabéns! Você está na internet!
Para testar sua conexão, dê um ping para algum site que você conheça :
*
ping ...

[root@localhost ppp]# ping www.uol.com.br
PING www.uol.com.br (200.231.204.160) from xxx.xxx.xx.xx : 56(84) bytes of data.64 bytes from ortega.uol.com.br (200.231.204.160): icmp_seq=0 ttl=243 time=136.089 msec
64 bytes from ortega.uol.com.br (200.231.204.160): icmp_seq=1 ttl=243 time=159.902 msec

--- www.uol.com.br ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max/mdev = 136.089/147.995/159.902/11.912 ms
*
adsl-status

[root@localhost /root]# adsl-status
adsl-status: Link is up and running on interface ppp0
ppp0 Link encap:Point-to-Point Protocol
inet addr:xxx.xxx.xxx.xxx P-t-P:yyy.yyy.yyy.yyy Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0
Se o resultado da saída de adsl-status for semelhante a este, a conexão ADSL está de pé.
*
adsl-stop

[root@localhost /root]# adsl-stop
Killing adsl-connect (1560)
Killing pppd (1579)
Este comando desliga sua conexão ADSL

Observações:

Se por um acaso os arquivos /etc/ppp/firewall-standalone e /etc/firewall-masq não estiverem instalados, pode ser que o PPPoE não conecte, dando a impressão que o erro é no provedor ou no Speedy.

Na minha distribuição do RedHat 7.1 estes arquivos não estavam incluídos. Analisando os scripts de conexão, percebi que estes arquivos não existiam. Pode ser que em sua distribuição apareçam.

terça-feira, 7 de junho de 2011

Requisitos recomendados para rodar Crysis 2 no máximo

Modo advanced

  1. CPU: Core 2 Duo 2,6 GHz / Athlon 64 X2 6000 +
  2. GPU: Geforce GTX 280 / Radeon HD 4870 com 1GB de VRAM
  3. RAM: 3 GB no Windows 7
Com essa configuração dará pra rodar de boa em 1680 x 1050 acima de 30 fps.


Modo Hardcore

  1. CPU: Core i5 / i7 com 3 GHz / Phenom X4 de 3,2 GHz
  2. GPU: Geforce GTX 560 Ti / Radeon HD 5870 com 1,5 GB de RAM
  3. RAM: 4 GB no Windows 7


Com essa configuração dará pra rodar o jogo em 1920 x 1200 acima de 30 fps.

Direcx 11 e tudo no máximo

  1. CPU: Core i5 / i7 com 3 GHz / Phenom X4 de 3,2 GHz
  2. GPU: Geforce GTX 570 / Radeon HD 6970 com 2 GB de RAM
  3. RAM: 4 GB no Windows 7


Com essa configuração dará pra rodar o jogo em 1920 x 1200 acima de 40 fps.

Modo requisitos minimos

Para quem ainda não viu os requisitos minimos. Veja logo abaixo

  1. Sistema Operacional: Windows XP, Vista ou Windows 7, com o último Service Pack
  2. CPU: Intel Core 2 Duo de 2 GHz ou AMD Athlon 64 X2 2 GHz ou melhor
  3. RAM: 2 GB (Vista requer 3 GB)
  4. Espaço no disco rígido: 9 GB
  5. GPU: Nvidia 8800GT com 512 Mb de RAM, ATI 3850HD com 512 Mb de RAM ou mais

quinta-feira, 19 de maio de 2011

Comandos Básicos Linux

 
 
Comandos básicos
ls [-al]: listagem do diretório.
cp [-ir]: copiar arquivos.
mv [-i]: mover ou renomear arquivos.
rm [--]: deletar arquivos.
mkdir/rmdir: cria/deleta diretórios.
ln -s path link: cria links simbólicos (symlinks) para arquivos ou diretórios.
Outros comandos
file: determina o tipo do arquivo (/etc/magic).
cat: exibe o conteúdo do arquivo na tela.
head / tail: exibe linhas no inicio / fim do arquivo.
less / more: lista o conteúdo do arquivo.
man filename: manual online do programa.
ctrl+alt+del/reboot: reinicia o sistema.
shutdown -h now/halt: desliga o computador.
Combinações
CTRL+C: sai (kill) do programa.
CTRL+ALT+BackSpace: sai (kill) do servidor X.
CTRL+L: limpa a tela.
CTRL+A / E: move o cursor para o início / fim da linha.
CTRL+U / K: deleta da posição do cursor até o início / fim da linha.
CTRL+H: deleta palavra anterior ao cursor.
CTRL+R: busca comando digitado no history do bash.
CTRL+D: logout (para isto altere ou unset a var. $IGNOREEOF).
Mais no terminal
stty -a: lista configurações do terminal.
reset: reseta o terminal (volta ao normal).
(SHIFT)PGUP/PGDN: barra de rolagem do bash.
TAB: auto-completa os comandos digitados no terminal.
MOUSE2/3: cola o texto selecionado (gpm).
CTRL+S (Scroll Lock): desabilita o vt.
CTRL+Q (Scroll Lock): habilita o vt (tente isto caso o terminal trave).
ALT+Fx: muda de console. CTRL+ALT+Fx: muda de console em modo gráfico.
Usuários
w: informações gerais sobre usuários logados e seus processos.
who: informações dos usuários atuais (do utmp)
last: listagem do histórico de logins (/var/log/wtmp)
lastlog: retorna informações sobre últimos logins.
Processos
CTRL+Z: suspende o processo temporariamente.
top: os processos que consomem mais recursos do sistema.
jobs: lista as tarefas rodando em fore/background.
bg/fg: manda processo para o back/foreground.
nice/renice: altera prioridades.
ps -auxw: lista todos os processos do sistema: PID (process id), TTY (terminal ou ? caso seja um daemon), STAT (estado do processo), TIME (tempo de CPU consumido), COMMAND (o comando executado). pstree -p: idem.
time: calcula o tempo decorrente do início ao término de um processo. # time updatedb   real    1m42.233s   user    0m0.490s   sys     0m10.290s
Matando processos
kill: as opções mais comuns são (onde id é o mesmo que PID):
kill -HUP id-do-processo: reinicia processo.
kill -9 id-do-processo: mata processo.
killall processo: mata processo pelo nome.
killall -HUP processo: reinicia processo pelo nome.
Sistema
df -h (espaço livre e ocupado nos discos)
du -sh(x) (espaço ocupado pelo diretório e seus subdiretórios)
Informações do sistema:
free: status da memória e swap.
vmstat: status da memória virtual (processos, cpu).
lsdev, lspci: listagem do hardware/dispositivos pci.
pnpdump: retorna configuração das placas ISA PnP.
lsmod / rmmod: lista/remove módulos na memória.
procinfo: cat /proc ;)
Informações do ambiente X:
xdpyinfo: recursos do servidor X.
showrgbq: retorna a database de cores rgb.
xlsfonts: lista as fontes reconhecidas pelo X.
xset m 5/2 1: ajusta a velocidade e acel. do mouse.
Rede
Listando processos listening na porta 80 e seus PIDs   lsof -n -i:80 (-i4: ipv4 e -n: sem resolver hostnames)
  fuser -v 80/tcp (lista processos que escutam na porta tcp 80 em modo ps-like)
Pipes e Redirecionamentos...
Através de 'pipes', a saída de um comando (stdout [file descriptor 1]) é passada como a entrada (stdin) do outro. Em geral, a saída é o terminal e a entrada o teclado. Exemplos:
dmesg | less ; ls -l | more
echo "Broadcast Message" | wall
Através de '<' e '>' é possível definir qual será o stdin e o stdout. Exemplos:
dmesg > dmesg.txt ; more < dmesg.txt
ls -l /tmp >> list.txt (concatena)
O sinal de maior é equivalente ao comando tee.
E para alterar o stderr (mensagens de erro [file descriptor 2]):
ls /admin > list.txt 2>erros.txt (se o diretório não existir, o stderr será o erros.txt e o stdout o list.txt)
ls /admin > list.txt 2>&1 listagem_e_erros.txt (se houver, erros serão repassados para o mesmo local que o stdout)
Operadores Lógicos
&&: 'e' (retorna true se todas as expressões forem verdadeiras)
||: 'ou' (retorna true se uma das expressões forem verdadeiras)
O sinal ';' executará ambas as expressões independente do retorno. Por exemplo:
make ; make install (os comandos serão executados em sequência)
make && make install (o segundo comando somente será executado se o primeiro não retornar erro)
PermissõesAs permissões dos arquivos são definidas através dos comandos chmod, chown e chgrp.
Estrutura do comando:
 chmod
Ao listar as informações de um arquivo ou diretório, o formato é o seguinte: drwxrwxrwx.
Respectivamente: diretório (d), permissão do dono (read/write/execute), do grupo (read/write/execute) e de outros (read/write/execute).
Por exemplo, para transformar um arquivo em executável:
  • chmod +x nome_do_arquivo (executável para todos)
  • chmod g+x nome_do_arquivo (executável para o grupo)
Para alterar o usuário e o grupo de um arquivo ou diretório:
  • chown root.root /sbin/firewall.sh (-R: recursivamente)
Outros exemplos:
  • chmod 755 (executável): -rwxr-xr-x
  • chmod 4700 (suid) set user id para programas que precisam rodar com permissão de root: -rws------
Para calcular o valor numérico das permissões, basta considerar o valor do executavel como 1, de escrita como 2 e de leitura como 4, que seria o equivalente decimal aos bits:
rwx = 111 (todos bits ligados) = 2**2 + 2**1 + 2**0 = 7
Dessa forma, uma permissao de leitura e escrita (4+2) para o owner, e de leitura apenas para os outros teria o valor 644. Para calcular a umask, que seria a máscara de permissão aplicada na criação de um novo arquivo, basta então subtrair 666 (ou 777 para diretórios) resultando em umask 022.
Como se encontrar no sistema

Localizar arquivo por nome:
find [path...] -name [nome_do_arquivo]
find . -name slackware.png
find / -name "*.png" -print (arquivos png do dir. atual)
find /home -size +5000k -print (arquivos com mais de 5Mb)

Local de um binário:
whereis (ou which) [nome_do_arquivo]
which gcc
gcc: /usr/bin/gcc

Criar um banco de dados com o local dos arquivos (para busca imediata)
updatedb
Para pesquisar: (s)locate [nome_do_arquivo]

Localizar texto em arquivo:
grep [param] [texto] [arquivo]
grep -ni man /var/log/packages/grep.tgz (-i : case insensitive, -n : número da linha)
(use ' '(aspas simples) no [texto] para procurar palavra exata.)
ls -l | grep '^-..x' (lista executáveis) ls -l | grep '^d' (lista diretórios - '^' indica a primeira letra da linha)

Outros:
cd - : alternar entre diretórios
pwd: listar caminho atual
Verificando integridade de um arquivo:
 
  sum: retorna checksum (16-bit) e número de blocos de cada arquivo.
$ sum arquivo.tar.gz   cksum: retorna CRC checksum e bytes de cada arquivo.
$ cksum *.tar.gz > cksums   md5sum: retorna o MD5 checksum (128-bit) do arquivo, e verifica a consistência.
$ md5sum --check MD5SUMS
Operações com texto:
comm/diff: compara dois arquivos.
ispell: verficador ortográfico (-d br: dicionário em português).
sort: ordena em ordem crescente, alfabética, etc.
uniq: remove linhas duplicadas.
cut: retorna area delimitada (-c5: quinto caracter).
wc: conta linhas, palavras e bytes.
fold: ajusta o texto para a largura especificada.
nl: numera as linhas de um arquivo.
fmt: reformata as linhas de um arquivo.
expand/unexpand: converte tabs em espaços e vice-versa.
tr: remove e substitui caracteres (-d a-d para remover as letras entre a-d, tr a-d A-D para torná-las maiúsculas).
Alterar data do sistema:
$ date 0109143001 (09/01/2001 14:30)
$ date -s "mm/dd/aaaa hh:mm:ss"
Criando aliases
  Adicionar arquivo de alias (ex: aliases.sh) em /etc/profile.d/
   chmod 755 aliases.sh

# exemplo de script alias.sh
# System wide functions and aliases
alias cdrom.on="mount /dev/hdd /mnt/cdrom"
alias cdrom.off="umount /dev/hdd"
alias zipdisk="mount -t vfat /dev/hdb4 /mnt/zip"
alias rm="rm -i"
alias x="startx -- -nolisten tcp"
Criando arquivos compactados
 
tar.gz
  É possível criar tarfile (tarball) da seguinte forma:
     tar -c file1 file2 > foo.tar
  Para 'zipar' o tar a mesma coisa:
     gzip -c file1 file2 > foo.tar.gz
 Ou então:
     tar -cvzf diretorio.tar.gz diretorio/
tar.bz2
  Troque o 'z' pelo 'j' para criar arquivos bzip2.      tar -jxvf arquivo.tar.bz2 (descompactanto bz2)
zip
     zip -r filename.zip files
 
Screenshots
import -w root tela.jpg
xwd > tela.xwd
 
O editor vi(m)
 
 a / i: adiciona texto (append/insert).
 y / p: copiar e colar (copy/paste).
 x: deletar letra.
 /: buscar palavra (n: next N: prev).
 u: desfazer (undo).
 v: selecionar texto (visual).
:edit file: cria novo buffer.
:ls: lista buffers.
:buffer N: edita buffer N.
:bdelete: deleta buffer.
:so \$VIMRUNTIME/syntax/2html.vim: converte source em html.
:ab SW slackware: cria abreviação (abclear: remove abs.)
 map :qa! : mapeia tecla (adicione em .vimrc)
Para gravar digite ESC seguido por :wq (write and quit), :q! (sair sem gravar) ou :qa! (fechar todos).
 
Outros utilitários no console
 
whatis/apropos: descrição do programa.
bc: calculadora (ex: echo "scale=2;1/10"|bc //scale são as casas decimais).
nano: editor de texto simples (nano-editor.org).
jed: editor de texto para programadores.
mc: o midnight commander.

Comandos básicos em SQL


INSERINDO DADOS
                O comando para inclusão de dados é o INSERT, que possui a seguinte estrutura:

INSERT INTO nome_tabela (lista-de-campos)
VALUES (lista_dados)

OU
INSERT INTO nome_tabela  VALUES (lista_dados)
Onde:
Nome_tabela: nome da tabela no qual será inserido os dados.
Lista-de-campos: nome das colunas que receberão os valores.
Lista-dados: valores que serão inseridos na tabela. Estes campos devem estar na mesma ordem descrita em lista-de-campos, todos separados por vírgula. Se for utilizado um comando SELECT o mesmo deve retornar a mesma quantidade de colunas com os mesmos tipos de dados especificados em lista-de-campos.
Exemplos:
INSERT INTO EMPREGADOS(CODIGO, NOME, SALARIO, SECAO)
VALUES(1, 'HELBERT CARVALHO', 1.500, 1)

INSERT INTO EMPREGADOS VALUES(1,'HELBERT CARVALHO',1500,1)
      Na segunda opção foi omitida a declaração dos campos. Essa sintaxe funciona somente se for repassado valores para todas as colunas.
      Podemos também passar valores através de um comando SELECT, conforme abaixo:
INSERT INTO EMPREGADOS(CODIGO,NOME, SALARIO, SECAO)
      SELECT CODIGO,NOME,SALARIO, SECAO
      FROM EMPREGADOS_FILIAL
      WHERE DEPARTAMENTO = 2

                Neste comando todos os empregados da tabela EMPREGADOS_FILIAL foram cadastrados na tabela EMPREGADOS. Se o nome dos campos não for citado no comando INSERT, o SELECT deverá retornar valores compatíveis para todos os campos disponíveis na tabela de destino.

ATUALIZANDO DADOS
                O comando para atualizar registros é UPDATE, que tem a seguinte sintaxe:
UPDATE nome_tabela
SET CAMPO = 'novo_valor'
WHERE CONDIÇÃO
Onde:
Nome_tabela: nome da tabela que será modificada
Campo: campo que terá seu valor alterado
Novo_valor: valor que substituirá o antigo dado cadastrado em campo
Where: Se não for informado, a tabela intera será atualizada
Condição: regra que impõe condição para execução do comando
Exemplos:
UPDATE DEPARTAMENTO
SET SALARIO = 1000
WHERE CODIGODEP = 1
      No trecho acima, todos os colaboradores que fazem parte do departamento 1 terá o salário alterado para 1000.
UPDATE DEPARTAMENTO
SET NOME = 'HELBERT CARVALHO',SALARIO = 1000
WHERE CODIGO = 1
      Neste exemplo alteramos mais de um campo de uma vez.
Podemos combinar o comando SELECT com UPDATE. No exemplo a seguir, os funcionários de menor salário receberão aumento de 10%
UPDATE EMPREGADOS
SET SALARIO = salario * 1.1
WHERE SALARIO = (SELECT MIN(salario) FROM EMPREGADOS)
      O comando SELECT também pode ser utilizado na atribuição de valor ao campo:
UPDATE EMPREGADOS
SET SALARIO = (SELECT MAX(salario) FROM EMPREGADOS)
WHERE DEPARTAMENTO = 5
REMOVENDO DADOS
      O comando utilizado para apagar dados é o DELETE
DELETE FROM nome_tabela
WHERE condição

Onde:
Nome_tabela: nome da tabela que será modificada
Where: cláusula que impõe uma condição sobre a execução do comando

Exemplo:
DELETE FROM EMPREGADOS
WHERE CODIGO = 125
Sub-consultas SQL
                Uma sub-consulta é uma instrução SELECT aninhada dentro de outra instrução SELECT, INSERT, DELETE ou UPDATE. Veja abaixo alguns exemplos de sintaxe:
Comparação [ANY|SOME|ALL] (instrução sql)
Expressão [NOT] IN (instrução sql)
Expressão [NOT] EXISTS (instrução sql)

                Os predicados ANY e SOME, sinônimos, são utilizados para recuperar registro na consulta principal que satisfaçam a comparação com qualquer registro da sub-consulta.

Tabela A
X
Y
1
5
2
9
3
10
4
6

Tabela B
X
Y
10
4
20
3
30
11
40
9

Exemplo:

      SELECT * FROM A
      WHERE Y > ANY (SELECT Y FROM B WHERE X>20)

Resultado
X
Y
3
10

      Os registros da tabela A que forem maior do que qualquer registro do resultado da sub-consulta serão selecionados. Repare que nenhum registro da tabela A é maior do que 11, no entanto, o terceiro registro é maior do que 9.
Vamos a outro exemplo:

      SELECT * FROM A WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)

Resultado
X
Y
1
5
2
9
3
10
4
6

      Todos os registros foram selecionados porque o valor de y no resultado da sub-consulta assume 3, que é menor do que todos os valores de y da tabela A. Se utilizarmos o ANY com sinal de igualdade teremos o mesmo resultado da cláusula IN. Exemplo:

SELECT * FROM A WHERE Y = ANY (SELECT Y FROM B)

Resultado

X
Y
2
9

      O predicado ANY também pode ser utilizado em conjunto com os comandos UPDATE e DELETE. Veja o exemplo:

UPDATE A
SET X = X * 10
WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)

DELETE FROM A
WHERE Y > ANY (SELECT Y FROM B WHERE X < 40)

      O predicado ALL é utilizado para recuperar os registros da consulta principal que satisfaçam a comparação com todos os registros recuperados na sub-consulta. Observe os exemplos:

SELECT * FROM A WHERE Y > ALL (SELECT Y FROM B)

X
Y





SELECT * FROM A WHERE Y > ALL (SELECT Y FROM B WHERE X > 30)

X
Y
3
10

      O uso de != ALL equivale a NOT IN

SELECT * FROM A WHERE Y != ALL (SELECT Y FROM B)

Resultado:
X
Y
1
5
3
10
4
6

      O predicado IN é utilizado para recuperar apenas os registros na consulta principal que contém equivalência na sub-consulta. É o mesmo que =ANY

SELECT * FROM A WHERE Y IN(SELECT Y FROM B)

Resultado:
X
Y
2
9

      No código a seguir retornamos os empregados que venderam um montante maior que R$ 50.000,00

SELECT * FROM EMPREGADO WHERE CODIGO IN
(SELECT CODEMPREGADO FROM VENDAS
      GROUPY BY CODEMPREGADO
      HAVING MAX(VALORTOTAL) > 50000)

      De maneira contrária, NOT IN pode ser utilizado para recuperar apenas os registros na consulta principal para os quais não exista equivalência na sub-consulta.

SELECT * FROM A WHERE Y NOT IN(SELECT Y FROM B)

Resultado:
X
Y
1
5
3
10
4
6
 
      O predicado EXISTS determina se a sub-consulta retorna algum registro. Esta cláusula produz resultados semelhantes ao uso de IN. Veja exemplo:

SELECT * FROM EMPREGADO WHERE EXISTS
(SELECT * FROM PEDIDOS
 WHERE EMPREGADO.CODIGO = PEDIDOS.CODEMPREGADO
 GROUP BY PEDIDOS.CODEMPREGADO
 HAVING MAX(PEDIDOS.VALOR_TOTAL) > 50000)

      Neste comando são retornados o nome e o departamento dos funcionários cuja soma de vendas ultrapassaram R$ 50.000,00.
                O predicado NOT EXISTS também pode ser utilizado produzindo o efeito contrário:

SELECT * FROM EMPREGADO WHERE NOT EXISTS
(SELECT * FROM PEDIDOS
 WHERE EMPREGADO.CODIGO = PEDIDOS.EMPREGADO)

 
© 2007 Template feito por Templates para Voc�