Você está na página 1de 52

Curso de Extenso de SQL

Professor
George Hamilton

1
Conceitos bsicos em SQL

Prof. George Hamilton

Linguagem SQL
A linguagem SQL prpria para a
realizao de operaes como recuperar
dados (consulta), atualizar ou eliminar
dados, alterar colunas de tabelas, criar e
eliminar tabelas e qualquer outras
modificaes que se deseje fazer em um
banco de dados relacional.
Prof. George Hamilton

Comandos da SQL
Os comandos SQL podem ser divididos em
quatro grupos:
1.
2.
3.
4.

Seleo/Consulta;
Definio de dados;
Manipulao de dados;
Controle de dados.

O Comando SELECT
Recupera informaes do banco de dados;
Utilizado para realizar consultas.

Operaes usando o SELECT


SELEO

PROJEO

UNIO

INTERSEO

JUNO

a1 b1
a2 b1
a3 b2

b1 c1
b2 c2
b3 c3

a1 b1 c1
a2 b1 c1
a3 b2 c2

DIFERENA

Sintaxe bsica do SELECT


SELECT [DISTINCT] {*, coluna [apelido],}
FROM tabela;

 SELECT identifica quais colunas sero recuperadas


 FROM identifica as tabelas das quais as colunas sero recuperadas

Selecionando todas as colunas


SQL> SELECT * FROM dept;

DEPTNO
--------10
20
30
40

DNAME
-------------ACCOUNTING
RESEARCHING
SALES
OPERATIONS

LOC
--------------NEW YORK
DALLAS
CHICAGO
BOSTON

Selecionando colunas especficas


SQL> SELECT deptno, dname
FROM dept;

DEPTNO
--------10
20
30
40

DNAME
-------------ACCOUNTING
RESEARCHING
SALES
OPERATIONS

Expresses Aritmticas
possvel criar expresses sobre os campos
do tipo numrico e data utilizando os
operadores aritmticos.
Operador

Descrio

Soma

Subtrao

Multiplicao

Diviso

Usando Operadores Aritmticos


SQL> SELECT ename, sal, sal*12
FROM emp;
ENAME
SAL
SAL*12
--------------- --------- --------KING
5000
60000
BLAKE
2850
34200
CLARK
2450
29400
ALLEN
1600
19200
WARD
1250
15000

14 rows selected.

Precedncia dos Operadores


*

 Multiplicao e diviso tm prioridade sobre soma


e subtrao;
 Operadores com a mesma prioridade so avaliados
da esquerda para a direita;
 Utilizar parntses para definir prioridades e tornar
os comandos mais legveis.

Precedncia dos Operadores


SQL> SELECT ename, sal, 12*sal+10
FROM emp;
ENAME
SAL 12*SAL+10
--------------- --------- --------KING
5000
60010
BLAKE
2850
34210
CLARK
2450
29410
ALLEN
1600
19210
WARD
1250
15010

14 rows selected.

Utilizando Parnteses
SQL> SELECT ename, sal, 12* (sal+10)
FROM emp;
ENAME
SAL 12*(SAL+10)
--------------- --------- ----------KING
5000
60120
BLAKE
2850
34320
CLARK
2450
29520
ALLEN
1600
19320
WARD
1250
15120

14 rows selected.

Valores Nulos
Um valor nulo um atributo sem um valor.
Quando um valor nulo pode ocorrer?
O valor no conhecido
O valor ainda no foi preenchido
O atributo no se aplica

Nulo diferente de zero ou espaos

Valores Nulos
SQL> SELECT ename, job, comm
FROM emp;
ENAME
JOB
COMM
--------------- --------------- --------KING
PRESIDENT
BLAKE
MANAGER
CLARK
MANAGER
ALLEN
SALESMAN
300
WARD
SALESMAN
50
MARTIN
SALESMAN
1400
TURNER
SALESMAN
0
MILLER
CLERK

14 rows selected.

Valores Nulos em Expresses Aritmticas


Expresses aritimticas contendo nulos, retornam nulo.
SQL> SELECT ename, job, 10*sal+comm
FROM emp;
ENAME
JOB
10*SAL+COMM
--------------- --------------- ----------KING
PRESIDENT
BLAKE
MANAGER
CLARK
MANAGER
ALLEN
SALESMAN
16300
WARD
SALESMAN
12550

14 rows selected.

Definindo Apelidos para Colunas


Renomeia o cabealho da coluna;
Segue o nome da coluna. Pode ser
precedido da palavra-chave AS;
Deve estar entre aspas duplas se contiver
espaos, caracteres especiais ou para
diferenciar maisculas de minsculas.

Usando apelidos para colunas


SQL> SELECT empno as matricula, ename, mgr gerente
FROM emp;
MATRICULA ENAME
GERENTE
--------- --------------- --------7839 KING
7698 BLAKE
7839
7782 CLARK
7839

14 rows selected.

Usando apelidos para colunas


SQL> SELECT ename, sal*12 Salario Annual
FROM emp;
ENAME
Salario Annual
--------------- -------------KING
60000
BLAKE
34200
CLARK
29400
ALLEN
19200

14 rows selected.

Operador de Concatenao
Concatena colunas ou cadeias de caracteres
a colunas;
Representado por duas barras verticais : ||
Cria uma uma cadeia de caracteres como
coluna resultante.

Usando o Operador de Concatenao


SQL> SELECT ename|| ||job AS Funcionarios
FROM emp;
Funcionarios
------------------------------KING PRESIDENT
BLAKE MANAGER
CLARK MANAGER
ALLEN SALESMAN
WARD SALESMAN
MARTIN SALESMAN

14 rows selected.

Literal
Literal um caracter, expresso ou nmero
includo no SELECT
Literais do tipo data e caracter devem
aparecer entre aspas simples
A cadeia de caracteres repetida para cada
linha retornada pelo comando de seleo

Usando Literais
SQL> SELECT ename|| is a ||job as Funcionarios
FROM emp;
Funcionarios
-----------------------------------KING is a PRESIDENT
BLAKE is a MANAGER
CLARK is a MANAGER
ALLEN is a SALESMAN
WARD is a SALESMAN
MARTIN is a SALESMAN

14 rows selected.

Linhas duplicadas
O resultado padro das consultas inclui todas as linhas,
inclusive as duplicadas.
SQL> SELECT deptno
FROM emp;
DEPTNO
--------10
30
10
30
30
30
30
10

14 rows selected.

Eliminando linhas duplicadas


Clusula DISTINCT
SQL> SELECT distinct deptno
FROM emp;
DEPTNO
--------10
20
30

Apresentando a estrutura da tabela


DESC[RIBE] tabela

Apresentando a estrutura da tabela


SQL> DESCRIBE EMP

Name
Null?
------------------- -------EMPNO
NOT NULL
ENAME
JOB
MGR
HIREDATE
SAL
COMM
DEPTNO

Type
-------------NUMBER(4)
VARCHAR2(15)
VARCHAR2(15)
NUMBER(4)
DATE
NUMBER(7,2)
NUMBER(7,2)
NUMBER(2)

2
Selees com Critrios
Ordenao

Limitando as linhas retornadas


pelo SELECT
Selecione todos os empregados cujo cargo
SALESMAN
EMPNO
--------7499
7521
7654
7844

ENAME
--------------ALLEN
WARD
MARTIN
TURNER

JOB
--------------SALESMAN
SALESMAN
SALESMAN
SALESMAN

Limitando as linhas retornadas


pelo SELECT
Clusula WHERE
SELECT [DISTINCT] {*, coluna [apelido],}
FROM
tabela
WHERE condio(es);

Clusula WHERE
SQL> SELECT ename, job, deptno
FROM emp
WHERE job=PRESIDENT;

ENAME
JOB
DEPTNO
--------------- --------------- --------KING
PRESIDENT
10

Cadeias de caracteres e datas


Devem estar entre aspas simples
Existe diferena entre maisculas e
minsculas para as cadeias de caracteres
O valor padro para datas DD-MON-YY
SQL> SELECT ename, job, deptno
FROM emp
WHERE hiredate=15-AUG-83;

Operadores de Comparao
Operador

Descrio

Igual a

>

Maior que

>=

Maior ou igual a

<

Menor que

<=

Menor ou igual a

<>

Diferente de

Usando os Operadores de Comparao


SQL> SELECT ename, sal, comm
FROM emp
WHERE sal<=comm;

ENAME
SAL
COMM
--------------- --------- --------MARTIN
1250
1400

Outros Operadores de Comparao


Operador
BETWEEN
AND
IN (lista)

Descrio
Valores entre um valor mnimo
e um mximo (inclusive)
valores que esto na lista de valores
especificados pelo operador IN

LIKE

valores que sigam a um


determinado padro

IS NULL

valores que sejam nulos

Usando o Operador BETWEEN


SQL> SELECT ename, sal
Mnimo Mximo
FROM emp
WHERE sal BETWEEN 1000 and 2000;
ENAME
SAL
--------------- --------ALLEN
1600
WARD
1250
MARTIN
1250
TURNER
1500
MILLER
1300
ADAMS
1100
6 rows selected.

Usando o Operador IN
SQL> SELECT empno, ename, mgr
FROM emp
WHERE mgr IN (7902,7698,7782)
EMPNO
--------7499
7521
7654
7844
7934
7900
7369

ENAME
MGR
--------------- --------ALLEN
7698
WARD
7698
MARTIN
7698
TURNER
7698
MILLER
7782
JAMES
7698
SMITH
7902

7 rows selected.

Usando o Operador LIKE


As condies de busca podem conter letras
ou nmeros
% significa nenhum ou vrios caracteres
quaisquer
_ significa um caracter qualquer

Usando o Operador LIKE


SQL> SELECT ename
FROM emp
WHERE ename like W%

ENAME
--------------WARD

Usando o Operador LIKE


possvel buscar por % ou _ utilizando o
caracter de escape
Para utlizar o caracter de escape preciso
especific-lo na consulta
Para selecionar todos os nomes de
empregado comeando por S_% o comado
seria:
SQL> SELECT ename
FROM emp
WHERE ename like S_%;

Usando o Operador IS NULL


SQL> SELECT ename, mgr
FROM emp
WHERE mgr IS NULL;

ENAME
MGR
--------------- --------KING

Operadores Lgicos
Operador
AND

Descrio
Retorna VERDADEIRO se as duas
condies forem satisfeitas

OR

Retorna VERDADEIRO se pelo menos


Uma das condies for satisfeita

NOT

Retorna VERDADEIRO se a condio


For FALSA

Usando o Operador AND


SQL> SELECT ename, job, sal
FROM emp
WHERE sal>=1000 and job=SALESMAN;

ENAME
--------------ALLEN
WARD
MARTIN
TURNER

JOB
SAL
--------------- --------SALESMAN
1600
SALESMAN
1250
SALESMAN
1250
SALESMAN
1500

Usando o Operador OR
SQL> SELECT ename, job, sal
FROM emp
WHERE sal>=2000 or job=MANAGER;
ENAME
--------------KING
BLAKE
CLARK
JONES
SCOTT
FORD
6 rows selected.

JOB
SAL
--------------- --------PRESIDENT
5000
MANAGER
2850
MANAGER
2450
MANAGER
2975
ANALYST
3000
ANALYST
3000

Usando o Operador NOT


SQL> SELECT ename, job
FROM emp
WHERE job not in (SALESMAN, MANAGER)
ENAME
--------------KING
MILLER
JAMES
SCOTT
FORD
SMITH
ADAMS
7 rows selected.

JOB
--------------PRESIDENT
CLERK
CLERK
ANALYST
ANALYST
CLERK
CLERK

AND e OR na mesma consulta


Usar parnteses para tornar a consulta mais clara;
SQL> SELECT ename, job, hiredate, sal
FROM emp
WHERE sal > 500 AND job =SALESMAN'
AND (hiredate>='03-DEC-83'
OR hiredate <='17-DEC-84);

ENAME
--------------ALLEN
WARD
MARTIN
TURNER

JOB
--------------SALESMAN
SALESMAN
SALESMAN
SALESMAN

HIREDATE
SAL
--------- --------15-AUG-83
1600
26-MAR-83
1250
05-DEC-83
1250
04-JUN-84
1500

ORDER BY
Ordena as linhas retornadas pela consulta;
ASC: ordem crescente
DESC: ordem decrescente

Se nada for especificado o padro ser ASC

Selecionando em Ordem Crescente


SQL> SELECT ename, job, hiredate
FROM emp
ORDER By hiredate;
ENAME
JOB
--------------- --------------WARD
SALESMAN
SMITH
CLERK
ALLEN
SALESMAN
JONES
MANAGER
MILLER
CLERK
MARTIN
SALESMAN
FORD
ANALYST
SCOTT
ANALYST

14 rows selected.

HIREDATE
--------26-MAR-83
13-JUN-83
15-AUG-83
31-OCT-83
21-NOV-83
05-DEC-83
05-DEC-83
05-MAR-84

Selecionando em Ordem Decrescente


SQL> SELECT ename, job, hiredate
FROM emp
ORDER By hiredate DESC;
ENAME
JOB
--------------- --------------JAMES
CLERK
KING
PRESIDENT
BLAKE
MANAGER
TURNER
SALESMAN
ADAMS
CLERK
CLARK
MANAGER
SCOTT
ANALYST
MARTIN
SALESMAN

14 rows selected.

HIREDATE
--------23-JUL-84
09-JUL-84
11-JUN-84
04-JUN-84
04-JUN-84
14-MAY-84
05-MAR-84
05-DEC-83

Ordenando pelo apelido da coluna


SQL> SELECT empno, ename, sal*12 anual
FROM emp
ORDER BY anual;
EMPNO ENAME
ANUAL
--------- --------------- --------7369 SMITH
9600
7900 JAMES
11400
7876 ADAMS
13200
7521 WARD
15000
7654 MARTIN
15000
7934 MILLER
15600
7844 TURNER
18000
7499 ALLEN
19200

14 rows selected.

Ordenando por mltiplas colunas


SQL> SELECT ename, deptno, sal
FROM emp
ORDER BY deptno, sal DESC;
ENAME
DEPTNO
SAL
--------------- --------- --------KING
10
5000
CLARK
10
2450
MILLER
10
1300
SCOTT
20
3000
FORD
20
3000
JONES
20
2975
ADAMS
20
1100
SMITH
20
800
BLAKE
30
2850

14 rows selected.

Você também pode gostar