Você está na página 1de 67

Captulo 4 A Linguagem SQL

Murilo Silva de Camargo

SQL - Structured Query Language


Estrutura bsica Operaes de conjunto Funes agregadas Valores nulos Sob consultas aninhadas Relaes derivadas Vises Modificao do banco de dados Juno de relaes Linguagem de definio de dados SQL embutida
2

O Exemplo da Empresa Bancria


agencia (nome_agencia, cidade_agencia, fundos) cliente (nome_cliente, rua_cliente, cidade_cliente) conta (nome_agencia, numero_conta, saldo) emprestimo (nome_agencia, numero_emprestimo, total) depositante (nome_cliente, numero_conta) devedor (nome_cliente, numero_emprestimo)
3

Estrutura Bsica

SQL baseada em operaes em conjuntos e relaes com algumas modificaes e melhorias. Uma consulta tpica da SQL tem a forma:
select A1, A2, ..., An from r1, r2, ..., rm where P Ais representam atributos ris representam relaes P um predicado.

Esta consulta equivalente expresso da lgebra relacional: O resultado de uma consulta SQL uma relao.
4

A1, A2 , ..., A n(P (r1 r2 ... rm))

A Clusula select

A clusula select corresponde operao de projeo da lgebra relacional. Ela usada para listar os atributos desejados no resultado de uma consulta. Achar os nomes de todas as agncias na relao emprstimo

select nome_agencia from emprestimo

Na sintaxe da lgebra relacional pura, esta consulta poderia ser: Um asterisco na clusula select denota todos atributos

nome_agencia (emprestimo)

select * from emprestimo


5

A Clusula select (Cont.)


SQL permite duplicatas nas relaes, bem como nos resultados das consultas. Para forar a eliminao de duplicatas, deve-se inserir declarao distinct depois do select. Achar os nomes de todas as agncias na relao emprstimo e remover as duplicatas select distinct nome_agencia from emprestimo A decvlarao all especifica que duplicatas no devem ser removidas. select all nome_agencia from emprestimo
6

A Clusula select (Cont.)

A clusula select pode conter expresses aritmticas envolvendo os operadores +, - , * , e /, e operaes em constantes ou atributos de tuplas. A consulta:
select nome_agencia, numero_emprestimo, total * 100 from emprestimo

retornaria uma relao a qual a igual a relao emprstimo, exceto que o atributo total multiplicado por 100.
7

A Clusula where

A clusula where corresponde ao predicado de seleo da lgebra relacional. Ele consiste de um predicado envolvendo atributos das relaes que aparecem na clusula from. Achar todos os numeros de emprstimos de emprstimos feitos na agncia Perryridge com totais maiores que $1200. select numero_empustimo from emprestimo where nome_agencia = 'Perryridge' and total > 1200 SQL usa os conectivos lgicos and, or, e not. Ele permite o uso de expresses aritmticas como operandos para os operadores de comparao.
8

A Clusula where (Cont.)

SQL inclui um operador de comparao between para simplificar clusulas where que especificam que um valor deva ser menos ou igual a algum valor e maior ou igual que algum outro valor. Achar o nmero do emprstimo dos emprstimos com total entre $90,000 e $100,000 (isto , $90,000 and $100,000) select numero_emprestimo from emprestimo where total between 90000 and 100000
9

A Clusula from

A clusula from corresponde ao produto cartesiano da lgebra relacional . Lista as relaes que sero mapeadas na avaliao da expresso. Encontre o produto cartesiano devedor emprestimo
select * from devedor,emprestimo

Encontre o nome e o nmero de emprstimo de todos os clientes que possuem um emprstimo na agncia Perryridge. select distinct nome_cliente,devedor.numero_emprestimo from devedor,emprestimo where devedor.numero_emprestimo = emprestimo.numero_emprestimo and nome_agencia = 'Perryridge'
10

A Operao Rename

A SQL possui um mecanismo para renomear tanto relaes quanto atributos atravs da clusula as, da seguinte forma
nome_antigo as novo_nome

Encontre o nome e o nmero do emprstimo dos clientes que possuem um emprstimo na agncia Perryridge; substitua o nome da coluna numero_emprstimo por numero_do_emprestimo_do_devedor.
select distinct nome_cliente, devedor.numero_emprestimo as numero_do_emprestimo_do_devedor from devedor, emprestimo where devedor.numero_emprestimo = emprestimo.numero_emprestimo and nome_agencia = 'Perryridge'
11

Variveis Tuplas

Variveis tuplas so definidas na clusula from atravs do uso da clusula as . Encontre o nome dos clientes e seus nmeros de emprstimo para todos os clientes que possuem um emprstimo em alguma agncia.
select distinct nome_cliente, T.numero_emprestimo from devedor as T, emprestimo as S where T.numero_emprestimo =S.numero_emprestimo

Encontre o nome de todas as agncias que possuam fundos maiores que ao menos uma agncia daquelas localizadas no Brooklyn.
select distinct T.nome_agencia from agencia as T, agencia as S where T.fundos > S.fundos and S.cidade_agencia = 'Brooklyn'
12

Operaes com Strings

SQL inclui operadores de comparao de strings. Padres so descritos usando dois caracteres especiais:
% combina com qualquer substring, independente do tamanho. _ combina caractere a caractere .

Encontre o nome de todos os clientes cuja rua contenha o substring Main.


select nome_cliente from cliente where rua_cliente like '%Main%'

Combine com o substring 'Main%'


like 'Main \ %' escape ' \ '

13

Operaes em Strings (cont.)


Caractersticas: sensvel ao tamanho das letras (case sensitive) Permite encontrar diferenas, e no coincidncias, atravs do uso de not like. Possui operaes de concatenao, extrao de substrings, indicao de tamanhos, converso de maisculas para minsculas e vice-versa, etc.
14

Ordenando a Apresentao de Tuplas

Listar em ordem alfabtica os nomes de todos os clientes que tm um emprstimo na agncia Perryridge: select distinct nome_cliente from devedor, emprestimo where devedor.numero_emprestimo = emprestimo.numero_emprestimo and nome_agencia = 'Perryridge' order by nome_cliente A palavra desc indica ordem descendente, e asc a ordem ascendente (default) de apresentao dos dados. SQL deve executar uma classificao para realizar uma solicitao order by. Como classificar uma grande quantidade de dados pode ser demorada, aconselhvel usar o order by apenas quando necessrio.

15

Ordenao e apresentao de tuplas (continuao)

SQL pode executar uma ordenao por diversos atributos.


select * from emprestimo order by total desc, numero_emprestimo asc

16

Duplicatas

Em relaes com duplicidades, SQL pode definir quantas cpias da tupla aparecem no resultado. Em verses multiconjuntos dos operadores da lgebra relacional - dadas as relaes r1 e r2:

1. Se existe c1 cpias da tupla t1 em r1, e t1 satisfaz a seleo , ento existem c1 cpias de t1 em (r1). 2. Para cada cpia da tupla t1 em r1, em que existe uma cpia da tupla A(t1) em A(r1), onde A(t1) denota a projeo de uma tupla nica t1. 3. Se existe c1 cpias da tupla t1 em r1 e c2 cpias da tupla t2 em r2, existe c1 c2 cpias da tupla t1.t2 em r1 r2.
17

Duplicatas (Cont.)

Suponhas que as relaes r1 com o esquema (A,B) e r2 com esquema (C) sejam os seguintes multiconjuntos: Ento B(r1) poderia ser {(a),( a)}, enquanto B(r1) r2 poderia ser
r1 = {(1,a),(2,a)} r2 = {(2),(3),(3)}

{(a,2),(a,2),(a,3),(a,3),(a,3),(a,3)} A clusula SQL select A1, A2, ..., An from r1, r2, ..., rm where P A1, A2, ..., An (P (r1 r2 ... rm))

equivalente expresso em lgebra relacional:


18

Operaes de Conjuntos

As operaes de conjuntos union, intersect e except operam em relaes e correspondem s operaes , e (diferena) da lgebra relacional. Estas operaes eliminam as duplicatas; se desejarmos obter as repeties, devemos explicitar atravs da forma union all, intersect all e except all. Suponha uma tupla que ocorra m vezes em r e n vezes em s, ento temos :
m + n vezes em r union all s min (m, n) vezes em r intersect all s max (0, m-n) vezes em r except all s
19

Operaes de Conjuntos (cont.)

Encontre todos os clientes que possuam um emprstimo, uma conta ou ambos:


(select nome_cliente from depositante ) union (select nome_cliente from devedor)

Encontre todos os clientes que possuem ambos uma conta e um emprstimo:


(select nome_cliente from depositante ) intersect (select nome_cliente from devedor )

Encontre todos os clientes que possuem uma conta mas no possuem emprstimo;
(select nome_cliente from depositante) except (select nome_cliente from devedor )
20

Funes Agregadas

Essas funes operam nos multi-conjuntos de valores de uma coluna de uma relao e retornam um valor avg: mdia dos valores min: valor mnimo max: valor mximo sum: soma dos valores count: nmero de valores
21

Funes Agregadas (Cont.)

Encontre a mdia dos saldos em contas na agncia Perryridge.


select avg (saldo) from contas where nome_agencia = 'Perryridge'

Encontre o nmero de tuplas na relao clientes:


select count (*) from cliente

Encontre o nmero de depositantes no banco:


select count (distinct nome_cliente) from depositante
22

Funes Agregadas Group By

Encontre o nmero de depositantes em cada agncia.


select nome_agencia, count (distinct nome_cliente ) from depositante,conta where depositante.numero_conta =conta.numero_conta group by nome_agencia Nota: Atributos na clusula select fora das funes agregadas devem aparecer na lista group by.

23

Funes Agregadas Having

Encontre o nome de todas as agncias onde a mdia do saldo das contas seja maior que $1,200
select nome_agencia, avg (saldo) from conta group by nome_agencia having avg (saldo) > 1200

Nota: predicados na clusula having so aplicados aps a formao dos grupos.

24

Valores Null
possvel para as tuplas ter valor nulo, denotados por null, para alguns de seus atributos. Significa valor desconhecido ou inexistente. O resultado de uma expresso aritmtica envolvendo null null. As operaes envolvendo null retornam false
(true or unknown)= true, (false or unknown)= unknown (unknown or unknown)= unknown (true and unknown)= unknown, (false and unknown)= false, (unknown and unknown)= unknown Resultado da clusula where tratado como false se a sua avaliao desconhecida P is unknown true se a avaliao do predicado P = unknown.
25

Valores Null (continuao)

Encontre todos os nmeros de emprstimo que aparecem na relao emprstimo com valores null para o total.
select numero_emprestimo from emprestimo where total is null

Total de todos os emprstimos


select sum (total) from emprestimo

A declarao acima ignora valores null no total ; o resultado ser null somente se no existir nenhuma tupla com o atributo total diferente de null Todas as operaes agregadas, exceto count(*) ignoram tuplas com valores null nos atributos agregados .
26

Subconsultas Aninhadas

SQL prov um mecanismo para aninhamento de subconsultas. Uma subconsulta uma expresso select-fromwhere que aninhada dentro de uma outra consulta. As aplicaes mais comuns para as subconsultas so testes para membros de conjuntos, comparao de conjuntos e cardinalidade de conjuntos.

27

Membro de Conjunto

F in r t r (t =F)
(5 in

0 4 5 0 (5 in 4 ) = false 6 0 (5 not in 4 6 ) = true


28

) = true

Exemplo (Consulta Aninhada)

Encontrar todos os clientes que possuem uma conta e um emprstimo no banco.


select distinct nome_cliente from devedor where nome_cliente in (select nome_cliente from depositante)

Encontrar todos os clientes que tenham um emprstimo no banco mas no tenham uma conta neste banco.
select distinct nome_cliente from devedor where nome_cliente not in (select nome_cliente from depositante)

29

Exemplo (Consulta Aninhada)

Encontrar todos os clientes que tenham uma conta e um emprstimo na agncia Perryridge.
select distinct nome_cliente from devedor, emprestimo where devedor.numero_emprestimo=emprestimo.numero_em prestimo and nome_agencia = Perryridge and (nome_agencia, nome_cliente) in (select nome_agencia, nome_cliente from depositante, conta where depositante.numero_conta = conta.numero_conta)
30

Exemplo (Operador not in)

Conjuntos enumerados:
select distinct nome_cliente from devedor where nome_cliente not in (Smith, Jones)

31

Comparao de Conjuntos

Encontrar os nomes de todas as agncias que tenham fundos maiores que ao menos uma agncia localizada em Brooklyn select distinct T.nome_agencia from agencia as T, agencia as S where T.fundos > S.fundos and S.cidade_agencia = Brooklyn

32

A Clusula some

F <comp> some r t( t r ^ [F <comp> t]) Onde <comp> pode ser: <, , >, , =, <>
0 (5 < some 5 6 0 (5 < some 5 0 (5 = some 5 0 (5 = some 5 ) = true (pois 0 diferente de 5) ) = true ) = false ) = true (L-se: 5 < alguma tupla na relao)

(= some) in No entanto, ( some) not in


33

Exemplo (Clusula some)

Encontre todos as agncias que tm fundos maiores que ao menos uma agncia localizada em Brooklyn.
select nome_agencia from agencia where fundos > some (select fundos from agencia where cidade_agencia = Brooklyn)

34

A Clusula all

F <comp> all r t (t r ^ [F <comp> t])


0 (5 < all 5 6 6 (5 < all 10 4 (5 = all 5 4 (5 = all 6 ) = true (since 5= 4 and 5 = 6) ) = false ) = true ) = false

( all) not in No entanto, (= all) in


35

Exemplo (Clusula all)

Encontrar os nomes de todas as agncias que tenham fundos maiores que cada uma das agncias localizadas em Brooklyn.
select nome_agencia from agencia where fundos > all (select fundos from agencia where cidade_agencia = Brooklyn)

36

Exemplo (Clusula all)

Encontrar a agncia que tenha o maior saldo mdio. Observe que funes agregadas no podem ser novamente agregadas OBS.:(max (avg(...)) no permitido.
select nome_agencia from conta group by nome_agencia having avg(saldo) >= all (select avg(saldo) from conta group by nome_agencia
37

Verficao de Relaes Vazias

O construtor exists retorna o valor true se a subconsulta usada como argumento no-vazia. exists r r not exists r r =

38

Exemplo (Construtor exists)

Encontre todos os clientes que tenham uma conta em todas as agncias localizadas no Brooklin
select distinct S.nome_cliente from depositante as S where not exists ( (select nome_agencia from agencia where cidade_agencia = 'Brooklyn') except (select R.nome_agencia from depositante as T, conta as R where T.numero_conta = R.numero_conta and S.numero_cliente =T.numero_cliente))

Note que X -Y = X Y

39

Teste para Ausncia de Tuplas Repetidas


O contrutor unique testa se a sub-consulta tem alguma tupla repetida no seu resultado. Encontre todos os clientes que tenham apenas uma conta na agncia Perryridge.
select T.nome_cliente from depositante as T where unique ( select R.nome_cliente from conta, depositante as R where T.nome_cliente = R.nome_cliente and R.numero_conta = conta.numero_conta and conta.nome_agencia = 'Perryridge')
40

Exemplo (Clusula unique)

Encontre todos os clientes que tenham pelo menos duas contas na agncia Perryridge.
select distinct T.nome_cliente from depositante T where not unique ( select R.nome_cliente from conta, depositante as R where T.nome_cliente = R.nome_cliente and R.numero_conta = conta.numero_conta and conta.nome_agencia = 'Perryridge')
41

Relaes Derivadas

Encontre a mdia do balano de contas das agncias onde a mdia do balano de contas maior que $1200.
select nome_agencia, saldo_mdio from (select nome_agencia, avg (saldo) from conta group by nome_agencia) as result (nome_agencia,saldo_mdio) where saldo_mdio > 1200

Note que no necessrio usar a clusula having, j que calculamos na clusula from uma relao temporria e os atributos dessa relao podem ser usados diretamente no clusula where.
42

Vises

Fornecem um mecanismo para esconder certos dados do alcance de certos usurios. Para criar uma viso usa-se o comando:
create view v as <expresso query>

onde:
<expresso query> qualquer expresso correta o nome da viso representada por v

43

Usando views

Uma viso constituda de agncias e seus clientes


create view todos_clientes as (select nome_agencia,nome_cliente from depositante,conta where depositante.numero_conta = conta.numero_conta) union (select nome_agencia,nome_cliente from devedor, emprestimo where devedor.numero_emprestimo = emprestimo.numero_emprestimo) select nome_cliente from todos_clientes where nome agencia = 'Perryridge'

Encontre todos os clientes da agncia Perryridge


44

Modificaes no Banco de Dados - Remoo (delete)

Exclua todas os registros de contas da agncia Perryridge


delete from conta where nome_agencia = 'Perryridge'

45

Modificaes no Banco de Dados - Remoo (delete)

Exclua todas as contas de todas as agncias localizadas em Needham.


delete from conta where nome_agencia in (select nome_agencia from agencia where cidade_agencia = 'Needham') delete from depositante where numero_conta in (select numero_conta from agencia, conta where cidade_agencia = 'Needham' and agencia.nome_agencia = conta.nome_agencia)
46

Exemplo (Clusula delete)

Apague os registros de todas as contas com saldos abaixo da mdia no banco


delete from conta where saldo < (select avg (saldo) from conta) Problema: ao apagar tuplas de conta, o saldo mdio muda Solues usadas em SQL: 1. Primeiro, calcula o saldo mdio - avg (saldo) - e encontre todas as tuplas para excluso; 2. A seguir, apague todas tuplas encontradas acima (sem recalcular avg ou testar novamente as tuplas)
47

Modificaes no Banco de Dados - Insero (insert)

Adicionar uma nova tupla em conta insert into conta values ('Perryridge', A-9732, 1200) ou de forma equivalente insert into conta (nome_agencia, saldo, numero_conta) values ('Perryridge', 1200, A-9732) Adicionar uma nova tupla conta com saldo igual a nulo insert into account values ('Perryridge', A-777, null)
48

Modificaes no Banco de Dados - Insero (insert)

Fornea aos clientes da agncia Perryridge uma caderneta de poupana de $200 como brinde para cada emprestimo que eles tenham. O nmero do emprestimo ser usado como nmero da caderneta de poupana insert into conta select nome_agencia, numero_emprestimo,200 from emprestimo where nome_agencia = 'Perryridge' insert into depositante select nome_cliente, numero_emprestimo from emprestimo, devedor where nome_agencia = 'Perryridge' and emprestimo.numero_conta = devedor.numero_conta
49

Modificaes no Banco de Dados Atualizao (update)

Acrescentar 6% a todas as contas com saldos acima de $10.000. Todas as outras contas recebem 5%.
Escreva dois comandos update: update conta set saldo = saldo * 1.06 where saldo > 10000 update conta set saldo = saldo * 1.05 where saldo =< 10000 Aqui, a ordem dos comandos importante! SQL-92 fornece um construtor case que pode ser usado para realizar ambas as alteraes anteriores em um nico comando update
50

Atualizaes de uma Viso

Crie uma viso de todos os dados de emprstimos, omitindo o atributo total


create view agencia_emprestimo as select nome_agencia, numero_emprestimo from emprestimo insert into agencia_emprestimo values ('Perryridge', 'L-307') ('Perryridge', 'L-307',null)

Adicione uma nova tupla viso agencia-emprestimo


Esta insero deve ser representada pela insero da tupla na relao emprestimo.

Atualizaes em vises mais complexas so difceis ou podem ser impossveis de traduzir, e, assim, so proibitivas.
51

Composio de Relaes

Operaes de Juno tomam duas relaes e retornam como resultado uma outra relao. As operaes de Juno so normalmente usadas na clusula from. Condies de Juno define quais tuplas das duas relaes apresentam correspondncia, e quais atributos sero apresentados no resultado de uma juno. Tipos de Juno define como as tuplas em cada relao que no possuam nenhuma correspondncia(baseado na condio de juno) com as tuplas da outra relao devem ser tratadas.
Tipos de juno inner join left outer join rigth outer join full outer join Condies de juno natural on <predicate> using (A1, A2,..., A n)
52

Composio de Relaes (exemplos)

Relao emprestimo
nome_agencia numero_emprestimo

total 3000 4000 1700

Downtown Redwood Perryridge

L-170 L-230 L-260

Relao devedor
nome_cliente numero_emprestimo

Jones Smith Hayes

L-170 L-230 L-155


53

Composio de Relaes (exemplos)

emprestimo inner join devedor on emprestimo.numero_emprestimo= devedor.numero_emprestimo


total nome_cliente numero_emprestimo

nome_agencia numero_emprestimo

Downtown Redwood

emprestimo left outer join devedor on emprestimo.numero_emprestimo=devedor.numero_empre stimo


numero_emprestimo total nome_cliente numero_emprestimo

L-170 L-230

3000 4000

Jones Smith

L-170 L-230

nome_agencia

Downtown Redwood Perryridge

L-170 L-230 L-260

3000 4000 1700

Jones Smith null

L-170 L-230 null


54

Composio de Relaes (exemplos)

emprestimo natural inner join devedor


nome_agencia numero_emprestimo total nome_cliente

Downtown Redwood

L-170 L-230

3000 4000

Jones Smith

emprestimo natural right outer join devedor


nome_agencia numero_emprestimo total nome_cliente

Downtown Redwood null

L-170 L-230 L-155

3000 4000 null

Jones Smith Hayes

55

Composio de Relaes (exemplos)

emprestimo full outer join devedor using (numero_emprestimo)


nome_agencia numero_emprestimo total nome_cliente

Downtown Redwood Perryridge null

L-170 L-230 L-260 L-155

3000 4000 1700 null

Jones Smith null Hayes

Encontrar todos os clientes que tenham uma conta ou um emprestimo (mas no os dois) no Banco. select nome_cliente from (depositante natural full outer join devedor) where numero_conta is null or numero_emprestimo is null
56

Linguagem de Definio de Dados (DDL)


Permite no s a especificao de um conjunto de relaes, como tambm informaes acerca de cada uma das relaes, incluindo: O esquema de cada relao. O domnio dos valores associados a cada atributo. Regras de Integridade. O conjunto de ndices para manuteno de cada relao. Informaes sobre segurana e autoridade sobre cada relao. A estrutura de armazenamento fsico de cada relao no disco.
57

Tipos de Domnios em SQL


char(n). uma cadeia de caracter de tamanho fixo, com o tamanho n definido pelo usurio. varchar(n). uma cadeia de caracter de tamanho varivel, como tamanho mximo n definido pelo usurio. int. um inteiro (um subconjunto finito dos inteiros que depende do equipamento). smallint. um inteiro pequeno (um subconjunto do domnio dos tipos inteiros dependente do equipamento). numeric(p,d). um numero de ponto fixo cuja preciso definida pelo usurio. O numero consiste de p dgitos(mais o sinal), sendo que d dos p dgitos esto direita do ponto decimal.
58

real, double precision. So numeros de ponto flutuante e ponto flutuante de preciso dupla cuja preciso dependente do equipamento. float(n). um numero de ponto flutuante com a preciso definida pelo usurio em pelo menos n dgitos. date. Datas, contm um ano (com quatro dgitos), ms e dia do ms. time. Representa horrio, em horas, minutos e segundos. Valor nulo um membro de todos os tipos de domnios. Declarando um um domnio de atributo como sendo not null proibi-se, assim, a insero de valores nulos para esse tipo de atributo. create domain em SQL-92 permite definir domnios. create domain person-name char(20) not null
59

Tipos de Domnios em SQL (continuao)

Definio de Esquema em SQL

Definimos uma relao SQL usando o comando create table:

Exemplo:

create table r (A1 D1, A2 D2, ..., An Dn, regras de integridade1, ..., regras de integridadek ) r o nome da relao cada Ai o nome de um atributo no esquema da relao r Di o tipo de domnio dos valores no domnio dos atributos Ai create table agencia (nome_agencia char(15) not null, cidade_agencia char(30), fundos integer)

60

Regras de Integridade em create table


not null primary key (A1, ..., An) check (P), onde P um predicado Exemplo: declarar nome_agencia como chave primria para a relao agencia e verificar se o valor de fundos no negativo. create table agencia (nome_agencia char(15) not null, cidade_agencia char(30), fundos integer, primary key (nome_agencia), check (fundos >=0)) primary key so necessariamente declarados como not null in SQL-92 61

Comandos drop e alter table

O comando drop table remove todas as informaes de uma relao do banco de dados.. O comando alter table usado para adicionar atributos a uma relao existente. Todas as tuplas da relao recebem valores nulo para seu novo atributo. A forma do comando alter table e: alter table r add A D onde A o nome do novo atributo que ser adicionado e D seu domnio. O comando alter table tambm pode ser usado para remover atributos de uma relao alter table r drop A onde A o nome do atributo a ser removido da relao r.

62

Comandos SQL Embutidos

O padro SQL define que a SQL ser embutida em uma variedade de linguagens de programao, como Pascal, PL/I, Fortran, C, e Cobol. A linguagem na qual so embutidas consultas SQL chamada linguagem hospedeira, e as estruturas SQL permitidas na linguagem hospedeira so denominadas SQL embutida. EXEC SQL usado para identificar os pedidos em SQL embutida para o pr-processador EXEC SQL <comando SQL embutido > END EXEC
63

Exemplo - SQL Embutido


Suponha que temos na linguagem hospedeira uma varivel chamada total e que desejamos encontrar os nomes e cidades dos clientes dos clientes que tenham mais de um total em dlares em qualquer conta. Podemos escrever essa consulta como segue: EXEC SQL declare c cursor for select nome_cliente,cidade_cliente from depsito,cliente where depsito.nome_cliente = cliente.nome_cliente and depsito.saldo > :total END-EXEC
64

Exemplo - SQL Embutido

O comando open faz com que a consulta seja avaliada EXEC SQL open c END-EXEC O comando fetch determina os valores de uma tupla que sero colocados em variveis da linguagem host. EXEC SQL fetch c into :cn :an END-EXEC Pode-se utilizar um lao para processar cada tupla do resultado; uma varivel na rea de comunicao do SQL indica que no h mais tupla a ser processada. O comando close faz com que o sistema de banco de dados remova a relao temporria mantida para o resultado da consulta. EXEC SQL close c END-EXEC

65

SQL Dinmico

Permite que programas construam e submetam consultas SQL em tempo de execuo. Exemplo de uso de SQL dinmico dentro de um programa C.
char *sqlprog ='update conta set saldo = saldo * 1.05 where numero_conta =?' EXEC SQL prepare dinprog from :sqlprog; char conta[10] = 'A-101'; EXEC SQL execute dinprog using :conta;

O programa dinmico contm uma ?, que colocada para manter um valor gerado quando o programa SQL executado.
66

Outros Recursos SQL

Linguagens de Quarta Gerao linguagem especial para apoio aos programadores de aplicao na criao de telas de interface com o usurio e para formatao de dados na criao de relatrios; disponvel em muitos produtos comerciais de banco de dados. SQL sessions proporcionam uma abstrao de um cliente de um servidor (possivelmente remota) cliente conecta o servidor SQL, estabelecendo uma sesso executa uma srie de comandos fecha a sesso (desconecta) oferece comandos de commit para a efetivao do trabalho realizado durante a sesso, ou rollback para no efetiv-los Um ambiente SQL contm diversos componentes, inclusive a identificao do usurio e um esquema, que identifica qual dos diversos esquemas a sesso est usando.
67

Você também pode gostar