Sie sind auf Seite 1von 74

SQL

Prof. Roger Cristhian Gomes

SQL
SQL - Structured Query Language
Linguagem de acesso e manipulao de
sistemas de base de dados
computacionais que segue o padro ANSI

Existem

diferenas entre as verses de SQLs


dos vrios produtos comerciais
Em geral os comandos principais mantm um
padro entre estas verses

SQL

Pode ser dividido basicamente em duas


partes:
DDL

Utilizada para manipular a estrutura da base de


dados tabelas e ndices

DML

Data Definition Language

Data Manipulation Language

Utilizada para manipular o contedo das tabelas


da base de dados tuplas

DDL

Os principais comandos DDL:


CREATE

TABLE Cria uma nova tabela na

base
ALTER TABLE Modifica uma tabela
DROP TABLE Remove uma tabela da base
CREATE INDEX Cria um novo ndice para a
tabela
DROP INDEX Remove um ndice da tabela

CREATE

A clusula CREATE utilizada para a


criao de uma srie de objetos em um
banco de dados
Criao

CREATE DATABASE <nome_base>

Criao

de uma base de dados


de uma seqncia

CREATE SEQUENCE <nome_tabela> START


WITH <valor> INCREMENT BY <valor>

CREATE
Criao

CREATE TABLE <nome_tabela>


( <coluna1> <tipo1>,
<coluna2> <tipo2>,
...
)

Criao

de tabelas

de ndices

CREATE INDEX <nome_indice> ON


<nome_tabela> (<colunas>)

CREATE TABLE

Para a criao de uma tabela devemos


especificar sua estrutura, o tipo de dado
que ser utilizado em cada uma das
colunas, e se haver algum tipo de
constraint
Contraints:

PRIMARY KEY
FOREIGN KEY
INDEX

CREATE TABLE

Tipos de dados (Oracle):


VARCHAR2

CHAR
NUMBER
DATE
CLOB

XMLTYPE

(n)

CREATE TABLE

EXEMPLO
CREATE TABLE CONTA
( cod_agen
VARCHAR2(5),
cod_cli
VARCHAR2(5),
num_conta
NUMBER PRIMARY KEY,
saldo
NUMBER NOT NULL,
CONSTRAINT foreign_agen FOREIGN KEY
(cod_agen) REFERENCES agencia (cod_agen)
);

ALTER TABLE

A clusula ALTER TABLE utilizada para


modificar a estrutura de uma tabela,
inserindo, alterando ou removendo uma
determinada coluna ou condio
ALTER TABLE <nome_tabela> ADD
<coluna> <tipo>
ALTER TABLE <nome_tabela> DROP
COLUMN <coluna>

ALTER TABLE

EXEMPLO
ALTER TABLE conta ADD data_cont date DEFAULT
SYSDATE

Cod_agen

Cod_cli

Num_conta

Saldo

Data_cont

Ag1

C3

101

500

10/04/2008

Ag2

C2

202

730

10/04/2008

Ag3

C1

404

620

10/04/2008

Ag4

C4

303

280

10/04/2008

Ag3

C3

505

170

10/04/2008

DROP

Utilizado para remover toda a estrutura de


um objeto do banco
DROP

DATABASE <nome_base>
DROP TABLE <nome_tabela>
DROP INDEX <nome_indice>

DROP INDEX

Exemplo
DROP INDEX index_agecli

CREATE VIEW

Uma VIEW, ou viso, uma tabela virtual


dentro de um banco de dados.
Utilizada

para otimizar e facilitar a consulta de


um conjunto de informaes que pode estar
dispersa em vrias fontes (tabelas) diferentes

CREATE

VIEW <nome_view> AS
SELECT <colunas> FROM <tabela>
WHERE <coluna1> = <valor1>

CRATE VIEW

Exemplo
CREATE

VIEW v_conta AS
SELECT CO.cod_cli, CL.nome_cli,
CO.cod_agen, CO.num_conta, CO.saldo
FROM conta CO, cliente CL
WHERE CO.cod_cli = CL.cod_cli

CREATE VIEW

Exemplo
Tabela

Cod_cli

v_conta

Nome_cli

Cod_agen Num_conta

Saldo

C3

Maria

Ag1

101

500

C2

Roberto

Ag2

202

730

C1

Joo

Ag3

404

620

C4

Carlos

Ag4

303

280

C3

Maria

Ag3

505

170

Exerccios
Tabela Cliente
Cod_cli Nome_cli Rua

Cidade

Idade

C1

Joo

Rua X1

Botucatu

34

C2

Roberto

Rua N2

Pardinho

29

C3

Maria

Rua V5

Pardinho

42

C4

Carlos

Rua T8

Botucatu

45

C5

Ana

Rua X1

Botucatu

27

Tabela Agencia
Cod_agen
Nome_agen Gerente

Cidade

Ag1

Centro

Jair

Botucatu

Ag2

Principal

Raul

Pardinho

Ag3

Especial

Valeria

Pardinho

Ag4

Bairro

Valeria

Botucatu

Exerccios

Tabela Emprestimo
Cod_agen
Cod_cli

Num_emprest

Valor

Ag3

C1

E1

1500

Ag2

C2

E2

800

Ag2

C2

E3

300

Ag1

C3

E4

700

Ag3

C3

E5

500

Tabela Conta
Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

Exerccios
1.
2.

3.
4.

5.
6.

Escreva o SQL de criao de cada uma das tabelas:


cliente, conta, agencia e emprstimo.
Insira uma nova coluna na tabela cliente que
armazene o bairro do cliente (este campo no pode
ser nulo).
Remova o campo que foi inserido no exerccio 2.
Crie uma seqncia numrica para comeando em 1 e
sendo incrementado de 1 em 1, para ser o novo
cdigo de cliente.
Para a tabela cliente: Insira um novo campo cdigo
(numrico), e a transforme na nova chave primria.
Crie uma view contendo os cdigos e nomes dos
clientes, alm das informaes sobre sua conta e
emprstimos.

DML

Principais comandos DML:


SELECT

Extrai dados de uma tabela da

base
UPDATE Altera alguma informao da
tabela
DELETE Deleta uma tupla de uma tabela
INSERT Insere uma nova tupla na tabela da
base

SELECT

Usado para extrair informaes de uma


relao

SELECT <colunas> FROM <relacao>

clusula SELECT equivale a projeo ()


da algebra relacional, onde <coluna> so os
atributos que iro ser apresentados
A lista de atributos <coluna> pode ser
substituida por * (exibindo todas as colunas)

FROM

A clusula FROM determina qual, ou


quais, relaes sero utilizadas, as
relaes so determinadas em <relacao>
Quando

na lista de relaes <relacao> existir


mais de uma relao, ento a clusula FROM
determinar o produto cartesiano destas
relaes

SELECT

<colunas> FROM <R1, R2>

SELECT

Exemplos:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

(1) SELECT cod_cli FROM conta


(2) SELECT cod_cli, cod_agen FROM conta

SELECT

Resultados:

(1)
Cod_cli

(2)
Cod_cli

Cod_agen

C3

C3

Ag1

C2

C2

Ag2

C1

C1

Ag3

C4

C4

Ag4

C3

C3

Ag3

SELECT - DISTINCT

A clusula DISTINCT fora a eliminao de


duplicidade dos resultados da clusula
SELECT:
SELECT DISTINCT cod_cli FROM conta
Cod_cli
C3

C2
C1
C4

WHERE

A clusula WHERE utilizada em


conjunto com a clusula SELECT e
determina as condies de seleo
Equivalente

ao operador de seleo da
lgebra relacional

SELECT

<colunas> FROM <relacao>


WHERE <condicao>

WHERE

Operadores de condio:
=,

<>, >, >=, <, <=


BETWEEN determina a condio entre um
intervalo de valores
LIKE determina uma condio a partir de
um casamento de padro (pattern)
IN determina a condio a partir de um
conjunto de valores possveis

WHERE

Exemplo:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

(1) SELECT * FROM conta WHERE saldo > 550

WHERE

Resultado:
(1)
Cod_agen

Cod_cli

Num_conta

Saldo

Ag2

C2

202

730

Ag3

C1

404

620

LIKE

Uso do LIKE:
SELECT * FROM conta WHERE nome LIKE A%

Relacao Conta

Cod_cli

Nome

C1

Alberto

C2

Ricardo

C3

Ana

LIKE

Resultado

Cod_cli

Nome

C1

Alberto

C3

Ana

Renomeando

Os nomes das colunas da clusula


SELECT e as tabelas da clusula FROM
podem ser renomeadas usando a clusula
AS:
SELECT

cod_cli AS codigo_cliente FROM


conta AS tc
SELECT tc.cod_cli AS codigo_cliente FROM
conta AS tc

Exerccios
Tabela Cliente
Cod_cli Nome_cli Rua

Cidade

Idade

C1

Joo

Rua X1

Botucatu

34

C2

Roberto

Rua N2

Pardinho

29

C3

Maria

Rua V5

Pardinho

42

C4

Carlos

Rua T8

Botucatu

45

C5

Ana

Rua X1

Botucatu

27

Tabela Agencia
Cod_agen
Nome_agen Gerente

Cidade

Ag1

Centro

Jair

Botucatu

Ag2

Principal

Raul

Pardinho

Ag3

Especial

Valeria

Pardinho

Ag4

Bairro

Valeria

Botucatu

Exerccios

Tabela Emprestimo
Cod_agen
Cod_cli

Num_emprest

Valor

Ag3

C1

E1

1500

Ag2

C2

E2

800

Ag2

C2

E3

300

Ag1

C3

E4

700

Ag3

C3

E5

500

Tabela Conta
Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

Exerccios
1.
2.
3.
4.
5.

6.

Selecione todos os clientes com idade maior que 30


anos.
Selecione todos os clientes com idade entre 20 e 30
anos.
Selecione todos os clientes que possuem saldo maior
que 600 na conta.
Selecione todas as agencias que possuem
emprstimos com valor igual ou superior a 700.
Selecione todos os clientes e seus respectivos
gerentes, que possuem contas com saldo menor ou
igual 300.
Selecione todos os clientes e suas respectivas contas,
que possuam nome terminado com o.

INSERT

A clusula INSERT utiliza para inserir


novas tuplas em uma determinada tabela
da base
Formas

bsicas:

INSERT INTO <tabela> VALUES (valor1, valor2, ...)

INSERT INTO <tabela> (coluna1, coluna2, ...)


VALUES (valor1, valor2, ...)

INSERT

Exemplo:
Inserir

a tupla abaixo na tabela Conta

Cod_agen
Ag1

Cod_cli
C4

Num_conta
606

Saldo
900

(1) INSERT INTO conta (cod_agen, cod_cli, num_conta,


saldo) VALUES (Ag1, C4, 606, 900)

INSERT

Resultado:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

Ag1

C4

606

900

UPDATE

A clusula UPDATE usada para


modificar informaes contidas nas
tabelas da base
Forma

bsica:

UPDATE <tabela> SET <coluna> = <novo_valor>


WHERE <coluna2> = <valor_x>

UPDATE

Exemplo:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

(1) UPDATE conta SET saldo = 1000 WHERE


cod_cli = C3

UPDATE

Resultado:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

1000

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

1000

DELETE

A clusula DELETE utilizada para


excluir uma tupla inteira de uma
determinada tabela da base
Forma

bsica:

DELETE FROM <tabela> WHERE <coluna> =


<valor>

DELETE

Exemplo:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

(1) DELETE FROM conta WHERE cod_cli = C4

DELETE

Resultado:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

1000

Ag2

C2

202

730

Ag3

C1

404

620

Ag3

C3

505

1000

Exerccios
Tabela Cliente
Cod_cli Nome_cli Rua

Cidade

Idade

C1

Joo

Rua X1

Botucatu

34

C2

Roberto

Rua N2

Pardinho

29

C3

Maria

Rua V5

Pardinho

42

C4

Carlos

Rua T8

Botucatu

45

C5

Ana

Rua X1

Botucatu

27

Tabela Agencia
Cod_agen
Nome_agen Gerente

Cidade

Ag1

Centro

Jair

Botucatu

Ag2

Principal

Raul

Pardinho

Ag3

Especial

Valeria

Pardinho

Ag4

Bairro

Valeria

Botucatu

Exerccios

Tabela Emprestimo
Cod_agen
Cod_cli

Num_emprest

Valor

Ag3

C1

E1

1500

Ag2

C2

E2

800

Ag2

C2

E3

300

Ag1

C3

E4

700

Ag3

C3

E5

500

Tabela Conta
Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

Exerccios
1.

2.

3.
4.

5.
6.

Inserir na tabela emprestimo um emprstimo para o


cliente C4 no valor de 850.
Modificar o nome do gerente da agencia Ag3 para
Felipe.
Zerar os valores dos emprstimos menor que 600.
Modificar as informaes da agencia Ag1 deixando o
nome igual a Principal e o gerente igual a Carlos.
Deletar todos os clientes que moram na rua Rua X1.
Deletar todas as contas com saldo menor que 300.

ORDER BY

A clusula ORDER BY utilizada para


ordenar as linhas resultantes de uma
consulta na base
Forma

bsica:

SELECT <coluna1, coluna2> FROM <tabela>


ORDER BY <coluna1>

ORDER BY

Exemplo:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

(1) SELECT * FROM conta ORDER BY saldo

ORDER BY

Resultado:
Tabela

Resultado

Cod_agen

Cod_cli

Num_conta

Saldo

Ag3

C3

505

170

Ag4

C4

303

280

Ag1

C3

101

500

Ag3

C1

404

620

Ag2

C2

202

730

ORDER BY

Por padro o resultado ordenado em


ordem crescente (ASC), porem a ordem
pode ser explicitada:

Crescente (ASC)
Decrescente (DESC)

SELECT <coluna1, coluna 2> FROM <tabela>


ODER BY <coluna1> DESC

Operadores para WHERE

AND e OR
SELECT <colunas> FROM <tabela> WHERE
<coluna1> = <valor1> AND <coluna2> = <valor2>
SELECT <colunas> FROM <tabela> WHERE
<coluna1> = <valor1> OR <coluna2> = <valor2>

IN

SELECT <colunas> FROM <tabela> WHERE


<coluna1> IN (<valor1>, <valor2>)

Operadores para WHERE

BETWEEN

SELECT <colunas> FROM <tabela> WHERE


<coluna1> BETWEEN <valor1> AND <valor2>

NOT (modificador)
NOT IN
NOT BETWEEN

Executar JOIN em SQL

Para a execuo de um JOIN em SQL


necessrio que as tabelas contenham
identificadores em comum a serem
comparados

SELECT <colunas> FROM <tabela1>, <tabela2>


WHERE <tabela1>.<atributo1> =
<tabela2>.<atributo1>

Exemplo
Tabela Conta
Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Tabela Cliente
Cod_cli

Nome_cli

Rua

Cidade

Idade

C1

Joo

Rua X1

Botucatu

34

C2

Roberto

Rua N2

Pardinho

29

C3

Maria

Rua V5

Pardinho

42

Exemplo
SELECT cod_agen, t1.cod_cli, nome_cli, num_conta, saldo
FROM conta AS t1, cliente AS t2
WHERE t1.cod_cli = t2.cod_cli
Cod_agen

Cod_cli

Nome_cli

Num_conta

Saldo

Ag1

C3

Maria

101

500

Ag2

C2

Roberto

202

730

UNION

A clusula UNION serve para unir duas


tabelas (ou dois resultados) em uma nica
tabela de resultado
Equivalente operao U de lgebra relacional
Os atributos de ambas tabelas tm que ser
equivalentes

SELECT <colunas> FROM <tabela1>


UNION
SELECT <colunas> FROM <tabela2>

UNION

Exemplo:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

UNION
(1) SELECT cod_cli FROM conta WHERE saldo >= 500
UNION
(2) SELECT cod_cli FROM conta WHERE saldo > 300

(1)
Cod_cli

(2)
Cod_cli

Resultado

C3

C4

C3

C2

C3

C2

C1

Cod_cli

C1
C4

UNION ALL
(1) SELECT cod_cli FROM conta WHERE saldo >= 500
UNION ALL
(2) SELECT cod_cli FROM conta WHERE saldo > 300

(1)
Cod_cli

(2)
Cod_cli

Resultado

C3

C4

C3

C2

C3

C2

C1

Cod_cli

C1
C4
C3

INTERSECT

A clusula INTERSECT serve para


realizar a interseco das tuplas de duas
tabelas
Apenas tuplas equivalentes em ambas as
tabelas so selecionadas
Equivalente a operao de lgebra
relacional

INTERSECT

Exemplo:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

INTERSECT
(1) SELECT cod_cli FROM conta WHERE saldo >= 500
INTERSECT
(2) SELECT cod_cli FROM conta WHERE saldo < 400

(1)
Cod_cli

(2)
Cod_cli

Resultado

C3

C4

C3

C2

C3

C1

Cod_cli

MINUS

A clusula MINUS serve para subtrair de


uma tabela as tuplas que so equivalentes
as tuplas de uma segunda tabela
Somente as tuplas distintas de uma tabela
so selecionadas
Equivalente a operao - da lgebra
relacional

MINUS

Exemplo:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

MINUS
(1) SELECT cod_cli FROM conta WHERE saldo >= 500
MINUS
(2) SELECT cod_cli FROM conta WHERE saldo < 400

(1)
Cod_cli

(2)
Cod_cli

Resultado

C3

C4

C2

C2

C3

C1

C1

Cod_cli

FUNES
AVG (<coluna>) calcula a mdia
SUM (<coluna>) soma os valores
MIN (<coluna>) recupera o menor valor
MAX (<coluna>) recupera o maior valor
COUNT (<coluna>) quantidade de
colunas no nulas selecionadas
COUNT (*) informa a quantidade de
colunas selecionadas

FUNES
UPPER (<string>) transforma todas os
caracteres da string em maisculo
SYSDATE recupera a data corrente do
banco de dados
NVL (<exp1>,<exp2>) caso <exp1> seja
nula usa <exp2>, seno usa <exp1>
NVL2 (<exp1>,<exp2>,<exp3>) caso
<exp1> seja nula usa <exp2>, seno usa
<exp3>

GROUP BY

A clusula GROUP BY serve para agrupar


tuplas a partir de colunas com mesmo
valor, e para aplicar determinadas funes
em um conjunto de tuplas com valores em
comum

Forma bsica:

SELECT <colunas> FROM <tabela>


GROUP BY <coluna1>

GROUP BY

Exemplo:
Tabela

Conta

Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

(1) SELECT cod_cli, SUM(saldo) FROM conta


GROUP BY cod_cli ORDER BY cod_cli

GROUP BY

Resultado:
Tabela

Resultado

Cod_cli

Saldo

C1

620

C2

730

C3

670

C4

280

Exerccios
Tabela Cliente
Cod_cli Nome_cli Rua

Cidade

Idade

C1

Joo

Rua X1

Botucatu

34

C2

Roberto

Rua N2

Pardinho

29

C3

Maria

Rua V5

Pardinho

42

C4

Carlos

Rua T8

Botucatu

45

C5

Ana

Rua X1

Botucatu

27

Tabela Agencia
Cod_agen
Nome_agen Gerente

Cidade

Ag1

Centro

Jair

Botucatu

Ag2

Principal

Raul

Pardinho

Ag3

Especial

Valeria

Pardinho

Ag4

Bairro

Valeria

Botucatu

Exerccios

Tabela Emprestimo
Cod_agen
Cod_cli

Num_emprest

Valor

Ag3

C1

E1

1500

Ag2

C2

E2

800

Ag2

C2

E3

300

Ag1

C3

E4

700

Ag3

C3

E5

500

Tabela Conta
Cod_agen

Cod_cli

Num_conta

Saldo

Ag1

C3

101

500

Ag2

C2

202

730

Ag3

C1

404

620

Ag4

C4

303

280

Ag3

C3

505

170

Exerccios
1.
2.
3.
4.
5.

6.
7.

Selecione em ordem crescente de nome todos os


clientes com idade maior que 28 anos.
Selecione em ordem decrescente de saldo todas as
contas.
Selecione todos os clientes com idade igual a 34, 45
ou 27 anos.
Selecione todos os emprstimos que tm valor fora do
intervalo de 400 a 900.
Escreva a unio, interseco e diferena entre a
seleo dos emprstimos com valor menor que 750 e
maior que 450.
Selecione os cdigos das agncias e o valor total de
seus emprstimos.
Determine a mdia de idade dos clientes.

Das könnte Ihnen auch gefallen