A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

SQL Structured Query Language Linguagem de Consulta Estruturada

Apresentações semelhantes


Apresentação em tema: "SQL Structured Query Language Linguagem de Consulta Estruturada"— Transcrição da apresentação:

1 SQL Structured Query Language Linguagem de Consulta Estruturada
Além de realizar consultas ao BD, possui muitos outros recursos como: Definição da estrutura de dados Modificação de dados no BD Especificação de restrições de segurança

2 Linguagens de consulta
SQL Combina álgebra relacional e cálculo relacional QBE (Query-by-Example) Baseada no cálculo relacional de domínio QUEL Baseada no cálculo relacional de tuplas

3 SQL Versão original desenvolvida pela IBM, no início da década de 1970
Originalmente denominada Sequel Structured English Query Language Linguagem de Consulta Estruturada em Inglês

4 SQL Em 1986, o ANSI (American National Standards Institute) e a ISO (International Organization for Standardization) publicaram um padrão SQL, chamado SQL-86 Em 1989, o ANSI publicou um padrão estendido chamado SQL-89 Depois foi a SQL-92, seguida da SQL:1999 A versão mais recente é a SQL:2003.

5 SQL É composta de: Linguagem de definição de dados (DDL)
Linguagem de manipulação de dados (DML) Integridade Definição de visões (view) Controle de transação SQL embutida e SQL dinâmica Autorização

6 Tipos de Domínio Básicos em SQL
O padrão SQL aceita vários tipos de domínio internos, incluindo: char(n) ou character(n) – cadeia de caracteres de tamanho fixo com tamanho n especificado pelo usuário varchar(n) ou character varying(n) – cadeia de caracteres de tamanho variável com tamanho n máximo definido pelo usuário int ou integer – subconjunto finito dos inteiros dependente da máquina smallint – inteiro pequeno Subconjunto dos inteiros que depende do equipamento

7 Tipos de Domínio Básicos em SQL
numeric(p,d) – número de ponto fixo, cuja precisão é definida pelo usuário onde p é a quantidade de dígitos do número e d é o número de casas decimais Exemplo: numeric(3,1) permite 44,5 não permite 444,5 não permite 0,32

8 Tipos de Domínio Básicos em SQL
real - número de ponto flutuante, cuja precisão depende do equipamento double precision – número de ponto flutuante de precisão dupla, cuja precisão depende do equipamento float(n) – número de ponto flutuante, com precisão definida pelo usuário em pelo menos n dígitos Ponto flutuante: formato numérico que pode ser usado para representar números muito pequenos ou muito grandes. São armazenados em duas partes: uma mantissa e um expoente. A mantissa especifica os dígitos do número, e o expoente define a sua magnitude (a posição do ponto decimal). Exemplo: os números e são expressos, respectivamente, como 3146E5 e 451E-7 na notação de ponto flutuante.

9 Tipos de Dados Internos na SQL
date – data contendo ano com quatro dígitos, mês e dia do mês time – horário em horas, minutos e segundos Obs.: a SQL permite que a declaração de domínio de um atributo seja especificada como NOT NULL A SQL92 permite a definição de domínios usando a cláusula create domain Exemplo: create domain nome_pessoa char(20)

10 Definição de Esquema em SQL
Uma relação SQL é definida pelo comando create table: create table r (A1D1, ..., AnDn, <regras de integridade1>, ..., <regras de integridadek>) Onde: r: nome da relação Ai: nome do atributo Di: tipo de domínio

11 Definição de Esquema em SQL
As regras de integridade, permitidas pelo comando create table, englobam: primary key (Aj1, Aj2, ..., Ajm) diz que os atributos Aj1, Aj2, ..., Ajm formam a chave primária da relação check (P) especifica um predicado P que precisa ser satisfeito por todas as tuplas em uma relação

12 Definição de Esquema em SQL
A cláusula UNIQUE define as chaves alternativas (secundárias) [2] UNIQUE (atributo_nome)

13 Exemplo de Definição de Esquema em SQL
create table cliente ( cliente_nome char(30), ou cliente_nome char(30) primary key , cliente_rg char(12) not null, cliente_rua char(30), primary key (cliente_nome)) create table agencia ( agencia_nome char(20), agencia_cidade char(20), ativo numeric(16,2), primary key (agencia_nome), check (ativo >= 0)) Obs.: Os atributos declarados como chave primária são necessariamente not null e unique

14 Exemplo de Definição de Esquema em SQL – Cont.
create table conta ( conta_numero char(5), agencia_nome char(20), saldo numeric(12,2), primary key (conta_numero), check (saldo >= 0)) create table depositante ( cliente_nome char(30), primary key (cliente_nome, conta_numero))

15 Exemplo de Definição de Esquema em SQL – Cont.
create table emprestimo ( emprestimo_numero char(4), agencia_nome char(20), quantia numeric(12,2), primary key (emprestimo_numero)) create table devedor ( cliente_nome char(30), primary key (cliente_nome, emprestimo_numero))

16 Outros Comandos Drop table – remove todas as tuplas e o esquema de uma relação Drop table r Exemplo: drop table devedor Delete from - remove todas as tuplas de uma relação delete from r Exemplo: delete from devedor

17 Outros Comandos Alter table – adiciona atributos a uma relação existente Alter table r add A D r é o nome de uma relação existente A é o nome do atributo a ser acrescentado e D é o domínio do atributo acrescentado Exemplo: Alter table conta add conta_codigo int

18 Outros Comandos Alter table r drop A – remove atributos de uma relação
r é o nome de uma relação existente A é o nome de um atributo da relação Exemplo: Alter table conta drop conta_codigo

19 Outros Comandos Alter table r add column nacionalidade char(15)
comando para adicionar o atributo nacionalidade à uma relação Exemplo: Alter table cliente add column nacionalidade char(15) drop column nacionalidade comando para eliminar o atributo nacionalidade de uma relação Alter table cliente drop column nacionalidade

20 Exemplo de Definição de Esquema em SQL – Cont.
Exercício 1): Adicionar os seguintes campos a tabela cliente cliente_rua_numero smallint cliente_bairro char(20) cliente_cidade char(20) cliente_estado char(2) Alter table cliente add cliente_rua_numero smallint; Alter table cliente add cliente_bairro char(20); Alter table cliente add cliente_cidade char(20); Alter table cliente add cliente_estado char(2)

21 Inserção de Dados insert into cliente values('ademar',' ','rua jorge winter', 11,'centro','taubate','sp'); insert into cliente values('andre',' ','rua jaques felix', 12,'centro','taubate','sp'); insert into cliente values('bruna',' ','av. getulio vargas', 13,'centro','pindamonhangaba','sp'); insert into cliente values('carlos',' ','rua general cana barros', 14,'centro','caçapava','sp'); insert into cliente values('glenda',' ','av. ademar de barros', 15,'centro','sao jose dos campos','sp'); insert into cliente values('helena',' ', 'av. presidente dutra', 16,'centro','guaratingueta','sp'); insert into cliente values('joana',' ','rua barao de mesquita', 17,'centro','rio de janeiro','rj'); insert into cliente values('joao',' ','av. presidente dutra', 18,'centro','guaratingueta','sp'); insert into cliente values('liliane',' ','rua jorge winter', 19,'centro','taubate','sp'); insert into cliente values('silvio',' ','rua general cana barros', 20,'centro','caçapava','sp'); insert into cliente values('tiago',' ','av. voluntarios da patria', 21,'centro','mairipora','sp'); insert into cliente values('vivian',' ','av. voluntarios da patria', 22,'centro','mairipora','sp'); insert into cliente values('william',' ','av. paulista', 23,'centro','sao paulo','sp');

22 Inserção de Dados insert into agencia values('caçapava','caçapava', ); insert into agencia values('central', 'guaratingueta', ); insert into agencia values('centro', 'mairipora', ); insert into agencia values('cta','sao jose dos campos', ); insert into agencia values('independencia', 'guaratingueta', ); insert into agencia values('justiça federal','sao jose dos campos', ); insert into agencia values('monte castelo','taubate', ); insert into agencia values('monteiro lobato','taubate', ); insert into agencia values('silva barros', 'guaratingueta', );

23 Inserção de Dados insert into conta values('a-306', 'caçapava',500);
insert into conta values('a-305', 'centro',350); insert into conta values('a-222', 'centro', 700); insert into conta values('a-101', 'cta', 500); insert into conta values('a-217', 'cta', 750); insert into conta values('a-201', 'justiça federal', 900); insert into conta values('a-215', 'monteiro lobato', 700); insert into conta values('a-102', 'monteiro lobato', 400);

24 Inserção de Dados insert into emprestimo values('l-17', 'caçapava', 750); insert into emprestimo values('l-93', 'central', 500); insert into emprestimo values('l-16', 'centro', 3000); insert into emprestimo values('l-15', 'independencia', 1500); insert into emprestimo values('l-23', 'justiça federal', 2000); insert into emprestimo values('l-14', 'monteiro lobato', 1500); insert into emprestimo values('l-11', 'silva barros', 900);

25 Inserção de Dados insert into devedor (cliente_nome, emprestimo_numero)values('ademar', 'l-16'); insert into devedor (cliente_nome, emprestimo_numero)values('carlos', 'l-93'); insert into devedor (cliente_nome, emprestimo_numero)values('helena', 'l-15'); insert into devedor (cliente_nome, emprestimo_numero)values('joana', 'l-14'); insert into devedor (cliente_nome, emprestimo_numero)values('joao', 'l-17'); insert into devedor (cliente_nome, emprestimo_numero)values('silvio', 'l-11'); insert into devedor (cliente_nome, emprestimo_numero)values('silvio', 'l-23'); insert into devedor (cliente_nome, emprestimo_numero)values('william', 'l-17');

26 Exemplo de Definição de Esquema em SQL – Cont.
Exercício 2): Inserir os seguintes dados na tabela depositante (com letras minúsculas e sem acento) insert into depositante values('andre', 'a-306'); insert into depositante values('helena', 'a-102'); insert into depositante values('joana', 'a-101'); insert into depositante values('joana', 'a-201'); insert into depositante values('joao', 'a-217'); insert into depositante values('liliane', 'a-222'); insert into depositante values('silvio', 'a-215'); insert into depositante values('silvio', 'a-306'); insert into depositante values('tiago', 'a-305');

27 SQL A estrutura básica de uma expressão em SQL é composta de três cláusulas: Select Corresponde à operação de PROJEÇÃO da álgebra relacional From Corresponde à operação de produto cartesiano da álgebra relacional Where Corresponde à seleção do predicado da álgebra relacional

28 SQL A SQL forma o produto cartesiano das relações nomeadas na cláusula from Realiza uma seleção de álgebra relacional usando o predicado da cláusula where Depois, projeta o resultado nos atributos da cláusula select O resultado de uma consulta SQL é uma relação

29 Cláusula select Encontre as cidades de residência dos clientes do banco select cliente_cidade from cliente; (omissão de where  predicado é TRUE) Encontre as cidades de residência dos clientes do banco, eliminando duplicidades select distinct cliente_cidade from cliente; 

30 Cláusula select Exercício 3):
Encontre os nomes de todas as agências da relação empréstimo Encontre os nomes de todas as agências da relação empréstimo, eliminando duplicidades Encontre os nomes de todas as agências da relação empréstimo, especificando explicitamente que as duplicidades não serão eliminadas select agencia_nome from emprestimo; select distinct agencia_nome

31 Cláusula select Encontre as cidades de residência dos clientes do banco, especificando explicitamente que as duplicidades não serão eliminadas select all cliente_cidade from cliente; Multiplicar as quantias da relação empréstimo por 100 select agencia_nome, emprestimo_numero, quantia*100 from emprestimo;

32 Cláusula where Encontre todos os números de empréstimos feitos na agencia “Monteiro Lobato” com quantia acima de R$1200 select emprestimo_numero from emprestimo where agencia_nome= 'monteiro lobato' and quantia>1200;

33 Cláusula where Encontrar os números de empréstimo cujas quantias estejam entre R$500 e R$1000 inclusive select emprestimo_numero from emprestimo where quantia between 500 and 1000;

34 Cláusula where Exercício 4)
Encontrar os números de empréstimo cujas quantias estejam entre R$500 e R$1000 inclusive, sem utilizar a palavra between; select emprestimo_numero from emprestimo where quantia >= 500 and quantia <= 1000;

35 Cláusula from A clausula from isolada define um produto cartesiano das relações na cláusula Já que a junção natural é definida em termos de um produto cartesiano, uma seleção e uma projeção, é simples escrever uma expressão para a junção natural

36 Cláusula from Encontre os nomes, números de empréstimo e quantia de todos os clientes que tenham um empréstimo no banco select cliente_nome, devedor.emprestimo_numero, quantia from devedor, emprestimo where devedor.emprestimo_numero=emprestimo.emprestimo_numero;

37 Cláusula from Exercício 5)
Encontre os nomes, números de conta e saldo de todos os clientes que tenham uma conta no banco select cliente_nome, depositante.conta_numero, saldo from depositante, conta where depositante.conta_numero=conta.conta_numero;

38 Cláusula from Encontre os nomes e os números de empréstimo de todos os clientes que tenham um empréstimo na agencia “independencia” select cliente_nome, devedor.emprestimo_numero, quantia from devedor, emprestimo where devedor.emprestimo_numero = emprestimo.emprestimo_numero and agencia_nome = 'independencia';

39 Operação de Renomeação
Encontre os nomes e os números de empréstimo de todos os clientes que tenham um empréstimo na agência “independencia”, substituindo o atributo emprestimo_numero por emprestimo_id select cliente_nome, devedor.emprestimo_numero as emprestimo_id, quantia from devedor, emprestimo where devedor.emprestimo_numero = emprestimo.emprestimo_numero and agencia_nome = 'independencia'; AS não é opcional Não funciona substituir os campos emprestimo_numero, por emprestimo_id

40 Operação de Renomeação
Exercício 6) Encontre os nomes e os números de conta de todos os clientes que tenham uma conta na agência “cta”, substituindo o atributo conta_numero por conta_id select cliente_nome, depositante.conta_numero as conta_id from depositante, conta where depositante.conta_numero = conta.conta_numero and agencia_nome = 'cta';

41 a palavra chave AS é opcional
Variáveis Tuplas Para todos os clientes que possuem um empréstimo, encontre seus nomes e respectivos números de empréstimo e quantias, atribuindo a variável d à relação devedor e a variável e à relação empréstimo select distinct cliente_nome, d.emprestimo_numero, quantia from devedor as d, emprestimo as e where d.emprestimo_numero = e.emprestimo_numero; a palavra chave AS é opcional

42 Variáveis Tuplas Exercício 7)
Para todos os clientes que possuem uma conta, encontre seus nomes e respectivos números de conta e saldo , atribuindo a variável d à relação depositante e a variável c à relação conta select distinct cliente_nome, d.conta_numero, saldo from depositante as d, conta as c where d.conta_numero = c.conta_numero;

43 a palavra chave AS é opcional
Variáveis Tuplas Encontre os nomes das agências que tenham ativo maiores que ao menos uma agência localizada em taubate select distinct a.agencia_nome from agencia a, agencia g where a.ativo>g.ativo and g.agencia_cidade='taubate'; a palavra chave AS é opcional

44 Variáveis Tuplas Exercício 8):
Encontre os nomes e as cidades das agências que tenham ativo maiores que ao menos uma agência localizada em taubate. Observe que não devem constar no resultado da consulta as agências de taubate. select distinct a.agencia_nome, a.agencia_cidade from agencia a, agencia g where a.ativo>g.ativo and g.agencia_cidade='taubate' and a.agencia_cidade!='taubate'; DIFERENTE: <> ou !=

45 Operações com strings Encontre os nomes de agências que comecem pela letra c select agencia_nome from agencia where agencia_nome like 'c%'; Obs: no access usa-se *. Encontre os nomes de agências que possuam a substring “ça” em seus nomes where agencia_nome like '%ça%';

46 Operações com strings Encontre os nomes de agências que não comecem pela letra c select agencia_nome from agencia where agencia_nome not like 'c%';

47 Operações com strings Encontre os nomes de agências que comecem com ”Monte” concatenado com outro substring select agencia_nome from agencia where agencia_nome like 'monte'||'%';

48 Operações com strings A SQL:1999 também oferece a operação similar to, que fornece uma correspondência de padrões mais poderosa do que a operação like Encontre os nomes de agências que possuam o caracter “ç” ou “c” em seus nomes select agencia_nome from agencia where agencia_nome similar to '%(ç|c)%';

49 Operações com strings Exercício 9)
Encontre os nomes de agências que iniciem com o caracter “c” ou “m” select agencia_nome from agencia where agencia_nome similar to '(c|m)%';

50 Operações com strings Encontre a cidade onde está localizada a agência ”Centro” select agencia_nome, agencia_cidade from agencia where agencia_nome = lower('CENTRO');

51 Ordenação Inserir os seguintes valores na relação empréstimo e na relação devedor: insert into emprestimo values('l-18','monteiro lobato',1000); insert into emprestimo values('l-19','monteiro lobato',1000); insert into emprestimo values('l-20','monteiro lobato',1000); insert into devedor values('carlos','l-18'); insert into devedor values('maria cecilia','l-19'); insert into devedor values('hedvandro','l-20');

52 Ordenação Classificar em ordem alfabética os nomes de todos os clientes que tenham um empréstimo na agência “Monteiro Lobato” select cliente_nome from devedor, emprestimo where devedor.emprestimo_numero=emprestimo.emprestimo_numero and agencia_nome= lower('MONTEIRO LOBATO') order by cliente_nome;

53 Ordenação Exercício 10) Classificar em ordem alfabética os nomes de todos os clientes que tenham uma conta na agência “CENTRO” select cliente_nome from depositante, conta where depositante.conta_numero=conta.conta_numero and agencia_nome= lower('CENTRO') order by cliente_nome;

54 Ordenação Listar a relação empréstimo inteira em ordem decrescente de quantia. Se empréstimos possuírem quantias iguais, organizar os números de empréstimo em ordem ascendente select * from emprestimo order by quantia desc, emprestimo_numero asc;

55 Operações de Conjunto As operações SQL union, intersect e except operam em relações e correspondem às operações da álgebra relacional ,  e - Como na Álgebra relacional, as relações participantes da operação de união, interseção e diferença precisam ser compatíveis, isto é, precisam ter o mesmo conjunto de atributos

56 Operação de União Encontre os nomes de todos os clientes que tenham um emprestimo, uma conta ou ambos no banco select cliente_nome from depositante union from devedor; Como na Álgebra relacional, as relações participantes da operação de interseção precisam ser compatíveis

57 Operação de União Exercício 11):
Obter o resultado da consulta anterior com todas as repetições (select cliente_nome from depositante) UNION ALL (select cliente_nome from devedor);

58 Operação Interseção Encontre os nomes de todos os clientes que tenham empréstimo e conta no banco select cliente_nome from depositante intersect select cliente_nome from devedor; Como na Álgebra relacional, as relações participantes da operação de interseção precisam ser compatíveis

59 Operação Interseção Exercício 12):
Obter o resultado da consulta anterior com todas as repetições (select cliente_nome from depositante) intersect all (select cliente_nome from devedor);

60 Operação Interseção Exercício 13)
Encontre os nomes de todos os clientes que tenham empréstimo e conta no banco, sem utilizar a palavra intersect select distinct depositante.cliente_nome from depositante, devedor where depositante.cliente_nome=devedor.cliente_nome;

61 Operação Diferença Encontre os nomes de todos os clientes que tenham uma conta e nenhum empréstimo no banco select cliente_nome from depositante except select cliente_nome from devedor; Como na Álgebra relacional, as relações participantes da operação Diferença precisam ser compatíveis select distinct cliente_nome from depositante where cliente_nome not in (select cliente_nome from devedor);

62 Operação Diferença Exercício 14):
Obter o resultado da consulta anterior com todas as repetições (select cliente_nome from depositante) except all (select cliente_nome from devedor);

63 Funções Agregadas Funções que tomam um conjunto ou subconjunto de valores como entrada e retornam um valor simples Existem cinco funções agregadas: Média (average): avg Mínimo (minimum): min Máximo (maximum): max Total (total): sum Contagem (count): count

64 Funções Agregadas A entrada para sum e avg precisa ser um conjunto de números As outras operações podem operar também com dados não numéricos como strings

65 Funções Agregadas - Avg
Encontre a média dos saldos em contas na agência “Monteiro Lobato” select avg(saldo) from conta where agencia_nome= 'monteiro lobato';

66 Funções Agregadas - Avg
Exercício 15) Encontre a média das quantias emprestadas em empréstimos na agência “Monteiro Lobato” select avg(quantia) from emprestimo where agencia_nome= 'monteiro lobato';

67 Funções Agregadas - Avg
É possível aplicar funções agregadas não somente a um conjunto de tuplas, mas também a um grupo de conjunto de tuplas utilizando a cláusula Group by Encontre a média dos saldos nas contas de cada uma das agências do banco select agencia_nome, avg(saldo) from conta group by agencia_nome;

68 Funções Agregadas - Avg
Exercício 16) Encontre a média das quantias nos empréstimos de cada uma das agências do banco select agencia_nome, avg(quantia) from emprestimo group by agencia_nome;

69 Funções Agregadas - Count
Encontre o número de depositantes de cada agência select agencia_nome, count(distinct cliente_nome) from depositante, conta where depositante.conta_numero =conta.conta_numero group by agencia_nome;

70 Funções Agregadas - Count
Exercício 17) Encontre o número de devedores de cada agência select agencia_nome, count(distinct cliente_nome) from devedor, emprestimo where devedor.emprestimo_numero = emprestimo.emprestimo_numero group by agencia_nome;

71 Funções Agregadas - Avg
Quando a condição não se aplica a uma única tupla, mas a cada grupo determinado pela cláusula group by utiliza-se a cláusula Having Encontre quais agências possuem média dos saldos aplicados em conta maior que 600 select agencia_nome, avg(saldo) from conta group by agencia_nome having avg(saldo)>600;

72 Funções Agregadas - Avg
Exercício 18) Encontre quais agências possuem média das quantias emprestadas em empréstimos maior que 1000 select agencia_nome, avg(quantia) from emprestimo group by agencia_nome having avg(quantia)>1000;

73 Funções Agregadas - Avg
Encontre a média dos saldos de todas as contas select avg(saldo) from conta;

74 Funções Agregadas - Count
Encontre o número de tuplas da relação cliente select count(*) from cliente; No Postgres é permitido o uso do distinct com o count(*)

75 Funções Agregadas - Avg
Encontre o saldo médio para cada cliente que mora em Mairiporã e tenha ao menos uma conta select depositante.cliente_nome, avg(saldo) from cliente, depositante, conta where cliente_cidade= 'mairipora' and cliente.cliente_nome=depositante.cliente_nome and depositante.conta_numero=conta.conta_numero group by depositante.cliente_nome having count(depositante.cliente_nome) >= 1; Se uma cláusula Where e uma cláusula Having aparecem na mesma consulta, o predicado de Where é aplicado primeiro. As tuplas que satisfazem a Where são agrupadas pela cláusula Group by. Somente então Having é aplicada a cada grupo.

76 Funções Agregadas - Avg
Exercício 19) Encontre a quantia média devida por cada cliente que mora em Caçapava e tenha ao menos dois empréstimo select devedor.cliente_nome, avg(quantia) from cliente, devedor, emprestimo where cliente_cidade= 'caçapava' and cliente.cliente_nome=devedor.cliente_nome and devedor.emprestimo_numero=emprestimo.emprestimo_numero group by devedor.cliente_nome having count(devedor.cliente_nome) >= 2;

77 Funções Agregadas - Avg
Encontre o saldo mais alto em uma conta do banco select max(saldo) from conta

78 Funções Agregadas - Avg
Exercício 20): Encontre o menor saldo em uma conta do banco select min(saldo) from conta

79 O predicado IS NOT NULL testa a ausência de valores nulos.
Encontrar todos os números de empréstimo que aparecem na relação empréstimo com valores nulos para quantia select emprestimo_numero from emprestimo where quantia is null; insert into emprestimo values(‘CAÇAPAVA','L-22') O predicado IS NOT NULL testa a ausência de valores nulos.

80 Valores Nulos Totalize o montante de todos os empréstimos
select sum(quantia) from emprestimo; Em geral todas as funções agregadas, exceto o count(*), ignoram os valores nulos de entrada

81 Subconsultas Aninhadas – Membros de Conjuntos
Encontre todos os clientes que tenham tanto conta quanto empréstimo no banco select distinct cliente_nome from devedor where cliente_nome in (select cliente_nome from depositante); O conectivo NOT IN verifica a ausência de membros de um conjunto

82 Subconsultas Aninhadas – Membros de Conjuntos
Encontre todos os clientes que tenham tanto conta quanto um empréstimo na agência “Monteiro Lobato” select distinct cliente_nome from depositante, conta where depositante.conta_numero = conta.conta_numero and agencia_nome = 'monteiro lobato' and cliente_nome in (select cliente_nome from devedor, emprestimo where devedor.emprestimo_numero = emprestimo.emprestimo_numero and agencia_nome = 'monteiro lobato' ); insert into conta values('A-307','MONTEIRO LOBATO',1000); insert into conta values('A-308','MONTEIRO LOBATO',1000); insert into conta values('A-309','MONTEIRO LOBATO',1000); insert into depositante values('CARLOS','A-307'); insert into depositante values('MARIA CEÇILIA','A-307'); insert into depositante values('HEDVANDRO','A-307');

83 Subconsultas Aninhadas – Membros de Conjuntos
Exercício 21): Encontre todos os clientes que tenham tanto conta quanto um empréstimo na agência “Caçapava” insert into depositante values('joao', 'a-306'); select distinct cliente_nome from depositante, conta where depositante.conta_numero = conta.conta_numero and agencia_nome = 'caçapava' and cliente_nome in (select cliente_nome from devedor, emprestimo where devedor.emprestimo_numero = emprestimo.emprestimo_numero and agencia_nome = 'caçapava' );

84 Subconsultas Aninhadas – Membros de Conjuntos
Encontre os nomes de todos os clientes que tenham um empréstimo e nenhuma conta no banco select cliente_nome from devedor where cliente_nome not in (select cliente_nome from depositante);

85 Subconsultas Aninhadas – Membros de Conjuntos
Exercício 22): Encontre os nomes de todos os clientes que tenham conta mas não tenham empréstimo no banco select cliente_nome from depositante where cliente_nome not in (select cliente_nome from devedor);

86 Subconsultas Aninhadas – Membros de Conjuntos
Selecione os nomes do clientes que tenham um empréstimo no banco e cujos nomes não sejam nem Silvio nem joao select distinct cliente_nome from devedor where cliente_nome not in ('silvio','joao');

87 Subconsultas Aninhadas – Comparação de Conjuntos
Encontre os nomes das agências que tenham ativo maiores que ao menos uma agência localizada em taubate select agencia_nome from agencia where ativo > some (select ativo from agencia where agencia_cidade = 'taubate') A SQL permite também comparações < some, <= some, >= some, = some e <> some. Obs: = some é idêntico a in, e <> some não é idêntico a not in. A palavra-chave any é sinônimo de some em SQL.

88 Subconsultas Aninhadas – Comparação de Conjuntos
Exercício 23): Encontre os nomes das agências que tenham quantia de empréstimo maior que ao menos uma quantia de empréstimo da agência “Monteiro Lobato” select agencia_nome from emprestimo where quantia > some (select quantia from emprestimo where agencia_nome = 'monteiro lobato')

89 Subconsultas Aninhadas – Comparação de Conjuntos
Encontre os nomes de todas as agências que tenham ativo maiores que cada uma agência localizada em taubate select agencia_nome from agencia where ativo > all (select ativo from agencia where agencia_cidade = 'taubate' ) O construtor >all corresponde a frase maior que todos. A SQL permite também comparações < all, <= all, >= all, = all e <> all. Obs: <> all é idêntico a not in.

90 Subconsultas Aninhadas – Comparação de Conjuntos
Encontre a agência que tem o maior saldo médio select agencia_nome from conta group by agencia_nome having avg(saldo) >= all (select avg (saldo) from conta group by agencia_nome)

91 Verificação de Relações Vazias
Encontre todos os clientes que tenham tanto conta quanto empréstimo no banco select cliente_nome from devedor where exists (select * from depositante where depositante.cliente_nome = devedor.cliente_nome) Teste para ausência de tuplas repetidas select t.cliente_nome from depositante as t where unique (select r.cliente_nome from conta, depositante as r where t.cliente_nome = r.cliente_nome and r.conta_numero = conta.conta_numero and conta.agencia_nome = 'independencia') O construtor exists retorna true se o argumento de uma subconsulta é não-vazio

92 Relações Derivadas Encontre quais agências possuem média dos saldos aplicados em conta maior que 600 select agencia_nome, saldo_medio from (select agencia_nome, avg(saldo) from conta group by agencia_nome) as resultado (agencia_nome,saldo_medio) where saldo_medio > 600 Caso haja uma subconsulta na cláusula from, a relação resultante deve receber um nome e os atributos precisam ser rebatizados Note que não é necessário usar a cláusula having, uma vez que a relação temporária resultado é computada na cláusula from

93 create view v as <expressão da consulta>
Visões Uma visão em SQL é definida usando o comando create view. Para definir a visão é preciso dar-lhe um nome e definir a consulta que processará essa visão. A forma do comando create view é: create view v as <expressão da consulta> <expressão da consulta> é qualquer consulta válida nome da visão é representado por v

94 Visões Visão composta dos nomes de agências e nomes de clientes que tenham uma conta ou um empréstimo no banco create view todos_clientes as select agencia_nome, cliente_nome from depositante, conta where depositante.conta_numero = conta.conta_numero union from devedor, emprestimo where devedor.emprestimo_numero = emprestimo.emprestimo_numero;

95 Visões A visão calcula para cada agência a soma das quantias de todos os empréstimos por agência create view emprestimo_quantia_agencia (agencia_nome,emprestimo_quantia) as select agencia_nome, sum(quantia) from emprestimo group by agencia_nome

96 Visões Usando a visão todos_clientes encontrar todos os clientes da agência Monteiro Lobato select cliente_nome from todos_clientes where agencia_nome = 'monteiro lobato' O nome de uma visão pode aparecer em qualquer lugar onde o nome de uma relação aparece.

97 Visões Visões definidas usando outras views
create view cliente_monteiro_lobato as select cliente_nome from todos_clientes where agencia_nome = 'monteiro lobato'

98 Visões Consultas complexas são mais fáceis de escrever e entender se divididas em visões menores para depois serem combinadas Entretanto, a cláusula create view cria uma definição em um banco de dados e essa definição fica no banco até que um comando drop view nome_visão seja executado.

99 Remoção Remova todos os registros de conta do cliente Silvio
delete from depositante where cliente_nome='silvio'; Remova todos os empréstimos com quantia entre R$1300 e R$1500 from emprestimo where quantia between 1300 and 1500;

100 Remoção Remova todos os registros da relação devedor
delete from devedor Remova todas as contas das agências de Taubaté from conta where agencia_nome in (select agencia_nome from agencia where agencia_cidade='taubate')

101 Remoção Remova os registros de todas as contas com saldos abaixo da média do banco delete from conta where saldo < (select avg(saldo) from conta)

102 Inserção Inserir na agência Caçapava, a conta de número A-310, com um saldo de R$1200 insert into conta values ('a-310', 'caçapava' ,1200); Inserir na agência Caçapava, a conta de número A-311, com um saldo de R$1500 insert into conta (conta_numero,agencia_nome,saldo) values ('a-311', 'caçapava' ,1500)

103 Inserção Inserir na relação conta os registros de empréstimo da agência Monteiro lobato insert into conta select emprestimo_numero, agencia_nome, 200 from emprestimo where agencia_nome ='monteiro lobato'

104 Atualização Aumentar todos os saldos em 5%
update conta set saldo = saldo * 1.05; Alterar o dado de um atributo set saldo = 580 where saldo = 525;

105 Referência Bibliográfica
SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de Banco de Dados. Rio de Janeiro: Elsevier, 2006 – 2ª reimpressão.


Carregar ppt "SQL Structured Query Language Linguagem de Consulta Estruturada"

Apresentações semelhantes


Anúncios Google