Sei sulla pagina 1di 32

1

POR: LUÍS FERNANDO E MAÍLSON

PASSO FUNDO, OUTUBRO DE 2007.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
2

Conceito:................................................................................................................................. 3
Características:........................................................................................................................ 5
Vantagens e Desvantagens...................................................................................................... 6
Comandos e Funções:............................................................................................................. 6
Comando: Create Table.......................................................................................................6
Exemplo 1....................................................................................................................... 7
Exemplo 2....................................................................................................................... 7
Exemplo 3....................................................................................................................... 8
Exemplo 4 -> Criando a tabela de professores................................................................8
Exemplo 5 -> Criando a tabela de disciplina cursada por um aluno............................... 9
Comando SELECT............................................................................................................10
EXEMPLO:................................................................................................................... 12
A cláusula ODER BY....................................................................................................... 13
A Clausula BETWEEN..................................................................................................... 14
A Clausula GROUP BY.................................................................................................... 14
Algumas funções utilizadas no comando SELECT.............................................................. 15
COUNT(*) (nome-campo)................................................................................................ 15
SUM (nome-campo)..........................................................................................................16
AVG (nome-campo)..........................................................................................................16
MAX (nome-campo)......................................................................................................... 17
MIN (nome-campo)......................................................................................................... 17
Instrução Delete.................................................................................................................... 18
Instrução INSERT INTO...................................................................................................... 18
Instrução UPDATE............................................................................................................... 21
A cláusula JOIN e suas variantes:......................................................................................... 22
exemplo:............................................................................................................................ 23
Outer join.......................................................................................................................... 24
Cross Join.......................................................................................................................... 26
Exemplo:....................................................................................................................... 26
Grant e Revoke ..................................................................................................................... 26
TRIGGERS........................................................................................................................... 28
Exemplo: .......................................................................................................................... 29
Eemplo:............................................................................................................................. 30
Consultas Encadeadas (Subqueries)...................................................................................... 30
EXEMPLOS:.....................................................................................................................31
Uniões................................................................................................................................... 31

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
3

SQL (Structured Query Language) ou (Linguagem de


Consulta Estruturada).

Conceito:

Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL,


é uma linguagem de pesquisa declarativa para banco de dados relacional (base
de dados relacional). Muitas das características originais do SQL foram inspiradas
na álgebra relacional.

O SQL foi desenvolvido originalmente no início dos anos 70 nos laboratórios da


IBM em San Jose, dentro do projeto System R, que tinha por objetivo demonstrar
a viabilidade da implementação do modelo relacional proposto por E. F. Codd. O
nome original da linguagem era SEQUEL, acrônimo para "Structured English
Query Language" (Linguagem de Consulta Estruturada em Inglês), vindo daí
o fato de, até hoje, a sigla, em inglês, ser comumente pronunciada "síquel" ao
invés de "és-kiú-él", letra a letra. No entanto, em português, a pronúncia mais
corrente é a letra a letra: "esse-quê-ele".

A linguagem SQL é um grande padrão de banco de dados. Isto decorre da sua


simplicidade e facilidade de uso. Ela se diferencia de outras linguagens de
consulta a banco de dados no sentido em que uma consulta SQL especifica a
forma do resultado e não o caminho para chegar a ele. Ela é uma linguagem
declarativa em oposição a outras linguagens procedurais. Isto reduz o ciclo de
aprendizado daqueles que se iniciam na linguagem.

Embora o SQL tenha sido originalmente criado pela IBM, rapidamente surgiram
vários "dialetos" desenvolvidos por outros produtores. Essa expansão levou à

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
4

necessidade de ser criado e adaptado um padrão para a linguagem. Esta tarefa foi
realizada pela American National Standards Institute (ANSI) em 1986 e ISO em
1987.

O SQL foi revisto em 1992 e a esta versão foi dado o nome de SQL-92. Foi revisto
novamente em 1999 e 2003 para se tornar SQL: 1999 (SQL3) e SQL: 2003,
respectivamente. O SQL: 1999 usa expressões regulares de emparelhamento,
queries recursivas e gatilhos (triggers). Também foi feita uma adição controversa
de tipos não-escalados e algumas características de orientação a objeto. O SQL:
2003 introduz características relacionadas ao XML, sequências padronizadas e
colunas com valores de auto-generalização (inclusive colunas-identidade).

Tal como dito anteriormente, o SQL, embora padronizado pela ANSI e ISO, possui
muitas variações e extensões produzidas pelos diferentes fabricantes de sistemas
gerenciadores de bases de dados. Tipicamente a linguagem pode ser migrada de
plataforma para plataforma sem mudanças estruturais principais.

Outra aproximação é permitir para código de idioma procedural ser embutido e


interagir com o banco de dados. Por exemplo, o Oracle e outros incluem Java na
base de dados, enquanto o PostgreSQL permite que funções sejam escritas em
Perl, Tcl, ou C, entre outras linguagens.

A SQL apresenta uma série de comandos que permitem a definição dos dados,
chamada de DDL (Data Definition Language – Definição de Dados Declarados),
composta entre outros pelos comandos Create, que é destinado à criação do
Banco de Dados, das tabelas que o compõe, além das relações existentes entre
as tabelas. Como exemplo da classe DDL temos os comandos Create, Alter, Drop
e Rename.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
5

Os comandos da série DML (Data Manipulation Language – Manipulação de


Dados Declarados), destinados às consultas, inserções, exclusões e alterações
em um ou mais registros de uma ou mais tabelas de maneira simultânea. Como
exemplo de comandos da classe DML temos os comandos Select, Insert,
UpDate, Delete, Commit e Rollback.
Uma subclasse de comandos DML, é a DCL (Data Control Language – Controle
de dados Declarados), que dispõe de comandos de controle como Grant,
Revoke e Lock.

Características:

• Linguagem como o Inglês;


• Não incluí nenhuma referência a caminhos de acesso explícitos;
• É um modo de recuperar e manipular dados de um BD;
• Pode ser usado por um terminal ON-LINE;
• Pode ser usado na forma de “EMBEDDED SQL” em um programa de
aplicação;
• Possui uma série completa de operações de atualização;
• Usado para administração.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
6

Vantagens e Desvantagens

SQL é a linguagem que o a maioria dos bancos de dados relacionais utiliza como
linguagem de comandos. É portável e fácil de ser aprendida. Entretanto, todas as
declarações SQL devem ser executadas individualmente pelo servidor de banco
de dados. Isto significa que a aplicação cliente deve enviar o comando para o
servidor de banco de dados, aguardar que seja processado, receber os
resultados, realizar algum processamento e enviar o próximo comando para o
servidor. Tudo isto envolve comunicação entre processos e pode, também,
envolver tráfego na rede se o cliente não estiver na mesma máquina onde se
encontra o servidor de banco de dados.

Comandos e Funções:

Comando: Create Table


O comando CREATE TABLE permite criar e definir a estrutura de uma tabela
(arquivo) definindo as colunas (campos) e as chaves primárias e estrangeiras
existentes.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
7

Exemplo 1

CREATE TABLE PRODUTOS (


ID INTEGER NOT NULL,
NOME VARCHAR(50) NOT NULL,
DATA DATE DEFAULT CURRENTE DATE NOT NULL,
PRECO DOUBLE PRECISION ( CHECK PRECO > 0),
ESTOQUE INTEGER (CHECK ESTOQUE > 0),
VALOR COMPUTED BY (PRECO * ESTOQUE),
CONSTRAINT PK_PRODUTOS PRIMARY KEY(ID));

Exemplo 2

CREATE TABLE filmes (


cod CHARACTER(5) CONSTRAINT pk_filmes PRIMARY KEY,
titulo CHARACTER VARYING(40) NOT NULL,
did DECIMAL(3) NOT NULL,
data_prod DATE,
tipo CHAR(10),
duracao INTERVAL HOUR TO MINUTE
);

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
8

Exemplo 3

CREATE TABLE distribuidores (


did DECIMAL(3) PRIMARY KEY DEFAULT NEXTVAL('serial'),
nome VARCHAR(40) NOT NULL CHECK (nome <> '')
);

Exemplo 4 -> Criando a tabela de professores

CREATE TABLE Professores


(
codigo number(5),
nome varchar(30),
rg varchar(10),
telefone char(10),
endereco varchar(40),
data_nascimento date,
formacao varchar(40),
CONSTRAINT PK_PROF PRIMARY KEY (codigo)
);

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
9

Exemplo 5 -> Criando a tabela de disciplina cursada por um aluno

CREATE TABLE Cursa(


cod_aluno number(5),
cod_disciplina number(5),
semestre varchar(5),
nota1 number(2,2),
nota2 number(2,2),
exame number(2,2),
media_final number(2,2),
faltas number(2),
situacao char(1),
CONSTRAINT PK_CURSA PRIMARY KEY
(cod_aluno,cod_disciplina,semestre),
CONSTRAINT FK_ALUNO FOREIGN KEY (cod_aluno)
REFERENCES Alunos (codigo),
CONSTRAINT FK_DISCIPLINA FOREIGN KEY (cod_disciplina)
REFERENCES Disciplina(codigo));

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
10

Comando SELECT

A instrução SELECT é a mais poderosa da linguagem SQL. Ela permite selecionar


um conjunto
de registros em uma ou mais tabelas que atenda a uma determinada condição
definida pelo comando. Sua sintaxe é:

SELECT ALL FROM nome-tabela [AS APELIDO] [,nome-tabela]


DISTINCT

WHERE condição
GROUP BY nome-coluna
HAVING condição
ORDER BY nome-campo ASC DESC

ONDE:

nome-tabela - Representa o nome da(s) tabela(s) que contem as colunas que


serão selecionadas ou que serão utilizadas para a execução da consulta.
Apelido: Os nomes que serão usados como títulos de colunas em vez dos nomes
originais das colunas na tabela.
condição - Representa a condição para a seleção dos registros. Este seleção
poderá resultar em um ou vários registros.
nome-coluna - Representa a(s) coluna(s) cujos resultados são grupados para
atender à consulta.
ALL (*) - Opção default. Mostra todos os valores obtidos na seleção.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
11

DISTINCT - Opção que mostra os valores obtidos na seleção eliminando as


duplicidades.
WHERE - Especifica o critério de seleção dos registros nas tabelas especificadas.

GROUP BY - Especifica o(s) campo(s) que serão grupados para atender a


consulta.
HAVING - Especifica uma condição para seleção de um grupo de dados. Esta
opção só é utilizada combinada com a opção GROUP BY.

EX:
SELECT DEPT_ID,AVG(SALARY)
FROM S_EMP
GROUP BY DEPT_ID
HAVING AVG(SALARY) > 2000;

EX:
SELECT id_pedido, total_produtos = COUNT(*)
FROM item_pedido
GROUP BY id_pedido
HAVING COUNT(*) >5

ORDER BY - Esta opção quando utilizada apresenta o resultado da consulta


ordenado de forma crescente ou decrescente pelos campos definidos.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
12

A Cláusula WHERE

Freqüentemente é necessário localizar registros em um banco de dados que


satisfaçam certos
critérios de seleção. O SQL utiliza a clausula WHERE para especificar os critérios
de seleção para a
consulta. O formato mais simples para uma consulta com critérios é:
SELECT * FROM nome-tabela WHERE condição;
SELECT * FROM Alunos WHERE ano_nascimento < 1984;
A condição da cláusula WHERE pode conter os operadores <, >, <=, >=, <> e
LIKE. O operador.
LIKE é utilizado para coincidência de padrão, o que permite a busca de valores
semelhantes ao digitado utilizando os caracteres curinga (* e ?). O asterisco indica
qualquer número de caracteres em seqüência na posição do asterisco dentro do
padrão. Já a interrogação indica um único caracter na posição.

EXEMPLO:

Em uma tabela que temos os alunos Anderson, André e Manoel.


SELECT * FROM Alunos WHERE nome LIKE “?n*”;
No SELECT acima o retorno será Anderson e André, uma vez que buscamos
apenas os valores iniciados por qualquer letra, tendo a segunda letra um “n” e
finalizado por qualquer seqüência.
SELECT * FROM Alunos WHERE nome LIKE “*n*”;

Nesse SELECT procuramos qualquer aluno que tenha a letra “n” em seu nome, no
caso Anderson, André e Manoel.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
13

A cláusula ODER BY

ORDER BY é opcional. Entretanto, se você quiser exibir seus dados na ordem


classificada, você deve utilizar ORDER BY. O padrão ordem de classificação é
ascendente (A a Z, 0 a 9). Os dois exemplos abaixo classificam os nomes dos
funcionários pelo sobrenome.

SELECT Sobrenome, Nome FROM Funcionários ORDER BY Sobrenome;


SELECT Sobrenome, Nome FROM Funcionários ORDER BY Sobrenome ASC;

Para classificar em ordem descendente (Z a A, 9 a 0), adicione a palavra


reservada DESC ao final de cada campo que você quiser classificar em ordem
descendente. O exemplo abaixo seleciona salários e os classifica em ordem
descendente.

SELECT Sobrenome, Salário FROM Funcionários ORDER BY Salário DESC,


Sobrenome;

ORDER BY é normalmente o último item em uma instrução SQL. Você pode


incluir campos adicionais na cláusula ORDER BY. Os registros são classificados
primeiro pelo primeiro campo listado depois de ORDER BY. Os registros que
tiverem valores iguais naquele campo são classificados pelo valor
no segundo campo listado e assim por diante.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
14

A Clausula BETWEEN
A clausula BETWEEN permite fazer uma seleção de valores entre um
determinado intervalo. Por exemplo, deseja-se saber todos os alunos que estão
matriculados entre os semestres 2001A ate o semestre 2002B.

SELECT * FROM Cursa


WHERE Cursa.semestre BETWEEN “2001A" AND “2002B”;

A Clausula GROUP BY
Os dados resultantes de uma seleção podem ser agrupados de acordo com um
critério específico.
Este procedimento é realizado usando a cláusula GROUP BY. Apenas uma linha
do grupo é apresentada.
Como condição de agrupamento somente poderão aparecer itens do SELECT ou
funções do grupo. Por exemplo, deseja-se saber o total de créditos cursados pelos
alunos. Para resolver esse problema usamos uma função SUM (explicada mais
adiante) e a clausula GROUP BY.

SELECT cod_alu, SUM(Disciplinas.credito) AS [Total de Aula]


FROM Disciplinas INNER JOIN Cursa
ON Cursa.cod_dis= Disciplinas.codigo

GROUP BY cod_alu;

Nesse exemplo a quantidade de créditos está na tabela disciplinas, para cada


aluno soma-se a quantidade de créditos das disciplinas que ele cursa.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
15

Algumas funções utilizadas no comando SELECT.

COUNT(*) (nome-campo)

Retorna a quantidade de registros existentes no campo especificado. Quando a


opção * é utilizada o resultado é a quantidade de registros existentes. Quando é
referenciado o nome de um campo retorna a quantidade de valores existentes na
coluna. Por exemplo, deseja-se saber quantos alunos estão matriculados na
disciplina de Analise de Sistemas (código da disciplina igual a 1).

SELECT COUNT(cod_alu) AS Total FROM cursa WHERE cod_dis=1

Outro exemplo deseja-se saber quantas disciplinas são cursadas pelos alunos

SELECT cod_alu, count(*) AS [Total Disciplinas]


FROM Cursa
GROUP BY cod_alu;

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
16

SUM (nome-campo)

Retorna a soma dos valores existentes no campo especificado. Por exemplo,


deseja-se saber quantos créditos (aulas por semana) o aluno Anderson (código
igual a 1) cursa, para que se possa calcular a sua mensalidade.

SELECT SUM(Disciplinas.credito) AS [Total de Aula]FROM


Disciplinas INNER JOIN Cursa ON
Cursa.cod_dis = Disciplinas.codigo
WHERE Cursa.cod_alu=1;

Outro exemplo deseja-se calcular a mensalidade que os alunos pagam sabendo


que o valor do crédito é R$7,00.

SELECT cod_alu, SUM(Disciplinas.credito * 7.0)


AS [Total de Aula]
FROM Disciplinas INNER JOIN Cursa ON Cursa.cod_dis= Disciplinas.codigo
GROUP BY cod_alu;

AVG (nome-campo)

Retorna a média dos valores existentes no campo especificado. Por exemplo,


deseja-se saber quantas aulas em média um aluno assiste por dia.

SELECT AVG(Disciplinas.credito) AS [Media de Aulas] FROM


Disciplinas INNER JOIN Cursa ON
Disciplinas.codigo=Cursa.cod_dis

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
17

MAX (nome-campo)

Retorna o maior valor existente no campo especificado. Por exemplo, deseja-se


saber qual aluno teve a nota mais alta na primeira prova da disciplina da Analise
de Sistemas I (código da disciplina igual a 1) no semestre 2001A.

SELECT MAX(nota1) AS [Maior Nota], Alunos.nome AS nome


FROM Cursa INNER JOIN Alunos ON Alunos.RA=Cursa.cod_alu
WHERE Cursa.cod_dis=1 AND semestre=”2001A"
GROUP BY Cursa.cod_Alu, Alunos.nome;

MIN (nome-campo)
Retorna o menor valor existente no campo especificado. Por exemplo, deseja-se
saber qual aluno teve a nota mais baixa na primeira prova da disciplina da Analise
de Sistemas I (código da disciplina igual a 1) no semestre de 2001A.

SELECT MIN(nota1) AS [Menor Nota], Alunos.nome AS nome


FROM Cursa INNER JOIN Alunos ON Alunos.RA=Cursa.cod_alu
WHERE Cursa.cod_dis=1 AND semestre=”2001A"
GROUP BY Cursa.cod_Alu, Alunos.nome;

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
18

Instrução Delete
Essa instrução permite remover (deletar) um ou um grupo de registros em uma
tabela do Banco de
Dados. Sintaxe:

DELETE * FROM nome-tabela WHERE condição

Exemplo de instrução DELETE


Esse exemplo exclui todos os registros de Professores cujo código seja 1.
DELETE * FROM Professores WHERE codigo=1;
Se fosse necessário passar um parâmetro para o delete a estrutura seria assim
DELETE * FROM Professores
WHERE Professores.nome=[nome professor];

Instrução INSERT INTO

Este comando permite adicionar um ou vários registros a uma tabela do Banco de


Dados. A sintaxe para a execução é:

INSERT INTO nome-tabela [(nome-coluna, ...)]


VALUES (relação dos valores a serem incluídos)

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
19

ONDE:

nome-tabela - Representa o nome da tabela onde será incluído o registro.


nome-coluna - Representa o nome da(s) coluna(s) terão conteúdo no momento
da operação de inclusão.
Relação dos valores:- Representa os valores a serem incluídos na tabela.
Obs.: Este comando pode ser executado de duas maneiras:
Quando todos os campos da tabela terão conteúdo - Neste caso não é necessário
especificar as colunas, entretanto a relação dos valores a serem incluídos deverão
obedecer a mesma seqüência da definição da tabela. Por exemplo:

INSERT INTO Alunos


VALUES (2, "André", "303569871", "R. Jaboticaba 37", 27/03/1978, "14-
5223778");

Quando apenas parte dos campos da tabela terão conteúdo - Neste caso devem
ser especificadas todas as colunas que terão conteúdo e os valores relacionados
deverão obedecer esta seqüência. Para os campos que não tem conteúdo
especificado será preenchido o valor NULL, como mostra o exemplo abaixo:

INSERT INTO Alunos (ra, nome, rg, endereco)


VALUES (1, "Anderson", "2722589-1", "R. Vendaval, 75”);

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
20

Obs:

O Access permite usar INSERT INTO para acrescentar um conjunto de registros


de uma outra tabela ou consulta utilizando a cláusula SELECT ... FROM, como
mostrado acima na sintaxe da consulta acréscimo de múltiplos registros. Nesse
caso, a cláusula SELECT especifica os campos a acrescentar à tabela destino
especificada. Veja no exemplo abaixo, a instrução SELECT cria uma tabela de
consulta onde serão inseridos os valores passados por parâmetro.

INSERT INTO Alunos ( ra, nome, rg, endereco, data_nascimento,


telefone )SELECT ra, nome, rg, endereco, data_nascimento, fone;

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
21

Instrução UPDATE

Esse comando permite atualizar os dados de um ou um grupo de registros em


uma tabela do Banco de Dados. Sua sintaxe é:

UPDATE nome-tabela
SET <nome-coluna = <novo conteúdo para o campo>
[nome-coluna = <novo conteúdo para o campo>]
WHERE condição

ONDE:

nome-tabela - Representa o nome da tabela cujo conteúdo será alterado.


nome-coluna - Representa o nome da(s) coluna(s) terão seus conteúdos
alterados com o novo valor especificado.
condição - Representa a condição para a seleção dos registros que serão
atualizados. Este seleção poderá resultar em um ou vários registros. Neste caso a
alteração irá ocorrer em todos os registros selecionados.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
22

OBS:

UPDATE é especialmente útil quando se quer alterar muitos registros ou quando


os registros que se quer alterar estão em várias tabelas. É possível alterar vários
campos ao mesmo tempo. O exemplo abaixo altera o professor da disciplina de
S.O. no período noturno, atribuindo a disciplina um novo Professor.

UPDATE Leciona SET cod_pro = 3 WHERE cod_dis = 2 OR cod_dis = 7;

UPDATE não gera um conjunto de resultados. Se você quiser saber quais


resultados serão alterados, examine primeiro os resultados da consulta seleção
que use os mesmos critérios e então execute a consulta atualização.

A cláusula JOIN e suas variantes:

Inner Join

O Inner Join, que geralmente é a maneira mais utilizada de se retornar dados


espalhados entre tabelas, funciona seguindo o princípio de que para os registros
retornados de uma tabela, deve haver algum tipo de relação com os registros da
outra tabela. No caso da igualdade, somente os registros das duas tabelas, que
possuírem o mesmo valor para um determinado campo, são retornados. Um

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
23

exemplo:

SELECT PED.PED_COD ,
PED. PED_DATA ,
ITEN. ITEN_COD ,
ITEN. ITEN_QTD
FROM PEDIDO PED , ITENSPEDIDO ITEN
WHERE
PED.PED_COD = ITEN.PED_COD

Percebam no exemplo acima que somente os registros que contiverem o mesmo


valor para o campo PED_COD nas duas tabelas são retornados. Apesar de existir
outra maneira de se fazer o INNER JOIN, eu recomendo a maneira com o
WHERE, pois torna o código da instrução mais legível. Em termos de
performance, as duas instruções se equivalem. Outra maneira, que retorna os
mesmos resultados:

SELECT PED.PED_COD ,
PED. PED_DATA ,
ITEN. ITEN_COD ,
ITEN. ITEN_QTD
FROM PEDIDO PED INNER JOIN ITENSPEDIDO ITEN
ON PED.PED_COD = ITEN.PED_COD

É importante lembrar também que o Inner join permite o uso de outros operadores
que não sejam somente o igual (=).

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
24

Outer join

O tipo de join chamado Outer join, possui o funcionamento um pouco diferente.


Utilizando o Outer join, além de podermos retornar os registros das duas tabelas
seguindo alguma relação, ainda podemos retornar registros que não entram nesta
relação.

Geralmente, este tipo de join pode ser utilizado em duas tabelas. Mas nada
impede que se utilize em mais de duas tabelas, como a tabela de cliente ao nosso
modelo PEDIDO-ITENS por exemplo.

Pensando na ligação entre duas tabela, foram criados duas opções para se utilizar
no Outer Join:

* Opção LEFT OUTER JOIN, visando aplicar o conceito de Outer Join na tabela
que se encontrar à esquerda da relação. Apesar de não ser recomendado, pode
ser substituída pelo operador *=

* Opção RIGHT OUTER JOIN, visando aplicar o conceito de Outer Join na tabela
que se encontrar à direita da relação. Apesar de não ser recomendado, pode ser
substituída pelo operador =*

Como podemos alterar a ordem na qual colocamos a tabela na instrução, há um


equivalência em termos de funcionalidade para estas opções de Outer Join.
Importante: esta ordem é em relação às tabelas, e não à comparação feita após a
palavra chave ON.

Por exemplo, queremos todos os pedidos que tenham relação com a tabela de
itens e também os pedidos que não tenham relação com nenhum item:

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
25

SELECT PED.PED_COD ,
PED. PED_DATA ,
ITEN. ITEN_COD ,
ITEN. ITEN_QTD
FROM PEDIDO PED LEFT OUTER JOIN ITENSPEDIDO ITEN
ON PED.PED_COD = ITEN.PED_COD

Pode ser escrita como:

SELECT PED.PED_COD ,
PED. PED_DATA ,
ITEN. ITEN_COD ,
ITEN. ITEN_QTD
FROM ITENSPEDIDO ITEN RIGHT OUTER JOIN PEDIDO PED
ON PED.PED_COD = ITEN.PED_COD

ou ainda:

SELECT PED.PED_COD ,
PED. PED_DATA ,
ITEN. ITEN_COD ,
ITEN. ITEN_QTD
FROM ITENSPEDIDO ITEN , PEDIDO PED
WHERE PED.PED_COD *= ITEN.PED_COD

Vejam que para os registros em que a relação de igualdade foi encontrada, os


campos de ambas as tabelas são retornados corretamente. Nos registros em que
nenhum item de pedido foi encontrado, é colocado o valor NULL para todos os
campos da tabela ITENSPEDIDO.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
26

Cross Join

O Cross Join possui uma funcionalidade completamente diferente dos outros tipos
de Join. Ele simplesmente obtém todos os registros de todas as tabelas e faz o
produto cartesiano (ou seja, cada registro de uma tabela é relacionado com cada
registro da outra tabela), obtendo assim, o número total de registros através da
multiplicação do total de registros das tabelas envolvidas no Cross Join.

Exemplo:

SELECT PED.PED_COD ,
PED. PED_DATA ,
CLI.CLI_COD,
CLI.CLI_NOME
FROM PEDIDO PED , CLIENTE CLI

Grant e Revoke

Existem dois comandos SQL que são usados para administra os privilégios:

. Grant: concede privilégios ao usuário.


. Revoke: revoga os privilégios do usuário.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
27

Por exemplo, caso queiramos conceder o privilégio de SELECT na tabela dept


para o usuário Scott, podemos usar o comando GRANT da seguinte forma:

GRANT SELECT ON TABLE dept TO Scott

A menos que o usuário Scott faça parte do grupo SYSADM ou DBADM ele não
poderá repassar esse privilégio para outro usuário.

Para revogar o privilégio concedido usamos o comando REVOKE da seguinte


forma:

REVOKE SELECT ON TABLE dept FROM Scott

Todos os privilégios de uma tabela podem ser removidos explicitamente através


do comando REVOKE ALL, por exemplo:

REVOKE ALL ON dept FROM Scott

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
28

TRIGGERS

O comando CREATE TRIGGER introduz um novo gatilho no banco de dados


atual. O gatilho fica associado com a relação tabela e executa a função
especificada função.

O gatilho pode ser especificado para disparar antes (BEFORE) da operação ser
realizada na tupla (antes das restrições serem verificadas e o INSERT, UPDATE
ou DELETE serem efetuados) ou após (AFTER) a operação ser realizada (ou seja,
após as restrições serem verificadas e o INSERT, UPDATE ou DELETE ter
completado). Se o gatilho disparar antes do evento, o gatilho pode evitar a
operação para a tupla atual, ou modificar a tupla sendo inserida (para as
operações de INSERT e UPDATE somente). Se o gatilho disparar após o evento
todas as modificações, incluindo a última inserção, atualização ou exclusão, são
"visíveis" para o gatilho.

O SELECT não modifica nenhuma linha, portanto não é possível criar gatilhos
para SELECT. Regras e visões são mais apropriadas para este caso.

Verificar se o código do distribuidor existe na tabela de distribuidores antes de


inserir ou atualizar uma linha da tabela filmes:

CREATE TRIGGER se_dist_existe


BEFORE INSERT OR UPDATE ON filmes FOR EACH ROW
EXECUTE PROCEDURE verificar_chave_primaria ('did', 'distribuidores', 'did');

Antes de remover um distribuidor, ou de atualizar o seu código, remover todas as


referências para a tabela filmes:

CREATE TRIGGER se_filme_existe


BEFORE DELETE OR UPDATE ON distribuidores FOR EACH ROW

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
29

EXECUTE PROCEDURE verificar_chave_primaria (1, 'CASCADE', 'did', 'filmes',


'did');

O segundo exemplo também pode ser implementado usando uma chave


estrangeira, como em:

CREATE TABLE distribuidores (


did DECIMAL(3),
nome VARCHAR(40),
CONSTRAINT se_filme_existe
FOREIGN KEY(did) REFERENCES filmes
ON UPDATE CASCADE ON DELETE CASCADE
);

Procedimento armazenado ou Stored Procedure

É uma coleção de comandos em SQL para gerenciamento de Banco de dados.


Encapsula tarefas repetitivas, aceita parâmetros de entrada e retorna um valor de
status (para indicar aceitação ou falha na execução). O procedimento armazenado
pode reduzir o tráfego na rede, melhorar a performance, criar mecanismos de
segurança, etc.

Exemplo:
Create procedure busca
@nomedebusca varchar (50)
as
select nome1, nome2
from nome_da_tabela
where nome = @nomedebusca

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
30

Eemplo:

CREATE PROCEDURE usp_PedidosLondon


AS
SELECT * FROM Orders WHERE ShipCity = 'London'
O comando é executado e a seguinte mensagem é exibida:
The command(s) completed successfully.
Agora podemos executar o Stored Procedure sempre que for necessário. Para
executá-lo, execute o comando:
exec usp_PedidosLondos

Consultas Encadeadas (Subqueries)

Uma subquery (consulta encadeada) é um método adicional para manipular


múltiplas tabelas. É uma instrução SELECT que é colocada:
• dentro de uma cláusula WHERE, HAVING ou SELECT de outra instrução
SELECT;
• dentro de instruções INSERT, UPDATE ou DELETE ou,
• dentro de outra subquery.

Temos como exemplos funções já vistas na instrução SELECT:

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
31

EXEMPLOS:

SELECT ALL FROM nome-tabela [AS APELIDO] [,nome-tabela]


DISTINCT

WHERE condição
GROUP BY nome-coluna
HAVING condição
ORDER BY nome-campo ASC DESC
SELECT SUM(Disciplinas.credito) AS [Total de Aula]FROM
Disciplinas INNER JOIN Cursa ON
Cursa.cod_dis = Disciplinas.codigo
WHERE Cursa.cod_alu=1;

Uniões

Podemos eventualmente unir duas linhas de consultas simplesmente utilizando a


palavra reservada UNION.

Liste todos os empregados que tenham códigos > 10 ou Funcionários que


trabalhem em departamentos
com código maior que 10.

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br
32

Poderíamos resolver esta pesquisa com um único Select, porém devido ao fato de
estarmos trabalhando em nosso exemplo com apenas duas tabelas não
conseguimos criar um exemplo muito adequado para utilização deste recurso.

(Select *
From Emp
Where EmpNume > 10)
Union
(Select *
From Emp
Where DepNume > 10);

Outro exemplo: Podemos querer saber quantos filmes de uma tabela fimes tem
mais de duas horas de duração ou ano maior do que 2000.

(Select *
From filmes
Where duracao > 2)
Union
(Select *
From filmes
Where data > 2000);

Serviço Nacional de Aprendizagem Comercial Senac Passo Fundo


Av. Sete de Setembro, 1045 CEP 90010-122 Passo Fundo RS Brasil Fone: (54) 313 4599 www.senacrs.com.br e-mail: senacpfundo@senacrs.com.br

Potrebbero piacerti anche