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

Linguagens de consulta

SQL

Combina álgebra relacional e cálculo relacional Baseada no cálculo relacional de domínio Baseada no cálculo relacional de tuplas

QBE (Query-by-Example)

QUEL

SQL

Versão original desenvolvida pela IBM, no início dos anos 70 Originalmente denominada Sequel  Structured English Query Language  Linguagem de Consulta Estruturada em Inglês

SQL

É composta de:  Linguagem de definição de dados  Linguagem de manipulação de dados  Incorporação DML  Definição de visões  Autorização  Integridade  Controle de transações

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 Corresponde à seleção do predicado da álgebra relacional

Where

Cláusula select

Encontre os nomes de todas as agencias da relação emprestimo
 

select agencia_nome from emprestimo; (omissão de where ⇒ predicado é
TRUE)

Encontre os nomes de todas as agencias da relação emprestimo, eliminando duplicidades
 

select distinct agencia_nome from emprestimo;

 

Cláusula select

Encontre os nomes de todas as agencias da relação emprestimo, especificando explicitamente que as duplicidades não serão eliminadas
 

select all agencia_nome from emprestimo;

Multiplicar os totais da relação emprestimo por 100
 

select agencia_nome, emprestimo_numero, total*100 from emprestimo;

Cláusula where

Encontre todos os números de emprestimos feitos na agencia “Monteiro Lobato” com totais acima de R$1200
  

select emprestimo_numero from emprestimo where agencia_nome= "Monteiro Lobato" and total>1200;

Cláusula where

Encontrar os números de emprestimo cujos totais estejam entre R$500 e R$1000 inclusive  select emprestimo_numero  from emprestimo  where total between 500 and 1000; ou

 
  

select emprestimo_numero from emprestimo where total >= 500 and total <= 1000;

Cláusula from

Encontre os nomes, números de emprestimo e total de todos os clientes que tenham um emprestimo no banco

 

select cliente_nome, devedor.emprestimo_numero, total from devedor, emprestimo where devedor.emprestimo_numero=emprestimo.empr estimo_numero;

Cláusula from

Encontre os nomes e os números de emprestimo de todos os clientes que tenham um emprestimo na agencia “Independência”

 

select cliente_nome, devedor.emprestimo_numero from devedor, emprestimo where devedor.emprestimo_numero = emprestimo.emprestimo_numero and agencia_nome = "Independência";

Operação Rename

Encontre os nomes e os números de emprestimo de todos os clientes que tenham um emprestimo na agencia “Independência”, substituindo o atributo emprestimo_numero por emprestimo_id

select cliente_nome, devedor.emprestimo_numero as emprestimo_id  from devedor, emprestimo  where devedor.emprestimo_numero = emprestimo.emprestimo_numero and agencia_nome = "Independência"; •AS não é opcional
•Não funciona substituir os campos emprestimo_numero, por emprestimo_id

Variáveis Tuplas

Para todos os clientes que possuem um emprestimo, encontre seus nomes e respectivos números de emprestimo e totais  select distinct cliente_nome, d.emprestimo_numero, total  from devedor as d, emprestimo as e  where d.emprestimo_numero = e.emprestimo_numero;
 

Encontre os nomes das agencias que tenham fundos maiores que ao menos uma agencia localizada em Taubaté a palavra  select distinct a.agencia_nome chave AS é opcional  from agencia a, agencia g

Operações com strings

Encontre os nomes de agencias que comecem pela letra c
  

select agencia_nome from agencia where agencia_nome like "C%";

Obs: no access usa-se *.

Encontre os nomes de agencias que possuam a substring “ça” em seus nomes
  

select agencia_nome from agencia where agencia_nome like "%ça%";

Operações com strings

Encontre os nomes de agencias que não comecem pela letra c
  

select agencia_nome from agencia where agencia_nome not like "C%";

Operações com strings

Encontre os nomes de agencias que possuam pelo menos 4 caracteres na string do seu nome
  

select agencia_nome from agencia where agencia_nome like "____%";

Ordenação

Classificar em ordem alfabética os nomes de todos os clientes que tenham um emprestimo na agencia “Monteiro Lobato”
  

select cliente_nome from devedor, emprestimo where devedor.emprestimo_numero=emprestimo.empr estimo_numero and agencia_nome= "Monteiro Lobato" order by cliente_nome;

Ordenação

Listar a relação emprestimo inteira em ordem decrescente de Total. Se emprestimos possuírem totais iguais, organizar os números de emprestimo em ordem ascendente
  

select * from emprestimo order by total desc, emprestimo_numero asc;

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 select cliente_nome from devedor;

Como na Álgebra relacional, as relações participantes da operação de união precisam ser compatíveis

Exercício: obter o resultado da consulta anterior com todas as repetições

Operação Interseção

Encontre os nomes de todos os clientes que tenham emprestimo e conta no banco
Como na Álgebra relacional, as relações participantes da operação de interseção precisam ser compatíveis
  

select distinct depositante.cliente_nome from depositante, devedor where depositante.cliente_nome=devedor.cliente_nome;

Exercício: obter o resultado da consulta anterior com todas as repetições

Operação Diferença

Encontre os nomes de todos os clientes que tenham uma conta e nenhum emprestimo no banco
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);

Exercício: obter o resultado da consulta anterior com todas as repetições

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

Funções Agregadas

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

Funções Agregadas - Avg

Encontre a média dos saldos em contas na agencia “Monteiro Lobato”  select avg(saldo)  from conta  where agencia_nome="Monteiro Lobato";

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 agencias do banco  select agencia_nome, avg(saldo)  from conta

Funções Agregadas Count

Encontre o número de depositantes de cada agencia

 

select agencia_nome, count(distinct cliente_nome) from conta, depositante where conta.conta_numero = depositante.conta_numero group by agencia_nome;
Não é permitido o uso do distinct com o count

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 agencias 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;

Funções Agregadas - Avg

Encontre a média dos saldos de todas as contas
 

select avg(saldo) from conta;

Funções Agregadas Count

Encontre o número de tuplas da relação cliente
 

select count(*) from cliente;

Não é permitido o uso do distinct com o count(*)

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= "Mairiporã" and cliente.cliente_nome=depositante.cliente_nome And depositante.conta_numero=conta.conta_numero  group by depositante.cliente_nome  having count(depositante.cliente_nome) >= Se uma cláusula Where e uma cláusula Having aparecem na mesma consulta, o 1;
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.

Funções Agregadas - Avg

Encontre o saldo mais alto em uma conta do banco
 

select max(saldo) from conta

Valores Nulos

Encontrar todos os números de emprestimo que aparecem na relação emprestimo com valores nulos para total  select emprestimo_numero  from emprestimo  where total is null;

O predicado IS NOT NULL testa a ausência de valores nulos.

Valores Nulos

Totalize o montante de todos os emprestimos  select sum(total)  from emprestimo;

Subconsultas Aninhadas – Membros de Conjuntos

Encontre todos os clientes que tenham tanto conta quanto emprestimo 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

Subconsultas Aninhadas – Membros de Conjuntos

Encontre todos os clientes que tenham tanto conta quanto um emprestimo na agencia “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" );

Subconsultas Aninhadas – Membros de Conjuntos

Selecione os nomes do clientes que tenham um emprestimo no banco e cujos nomes não sejam nem Silvio nem João  select distinct cliente_nome  from devedor  where cliente_nome not in ("Silvio","João");

– Comparação de Conjuntos

Encontre os nomes das agencias que tenham fundos maiores que ao menos uma agencia localizada em Taubaté
  

 

select agencia_nome from agencia where fundos > some (select fundos from agencia where agencia_cidade = "Taubaté" )

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.

Remoção

Remova todos os registros de conta do cliente Silvio
  

delete from depositante where cliente_nome="Silvio";

 

Remova todos os emprestimos com total entre R$1300 e R$1500
  

delete from emprestimo where total between 1300 and 1500;

Inserção

Inserir na agencia Caçapava, a conta de número A-307, com um saldo de R$1200
 

insert into conta values ("A-307", "Caçapava " ,1200);

Atualização

Aumentar todos os saldos em 5%
 

update conta set saldo = saldo * 1.05;

Alterar o dado de um atributo
  

update conta set saldo = 580 where saldo=525;

Tipos de Domínio em SQL

char(n) ou character(n) – cadeia de caracteres de tamanho fixo n varchar(n) ou character varying(n) – cadeia de caracteres de tamanho variável

Tamanho máximo n

int ou integer – subconjunto finito dos inteiros

Depende do equipamento Subconjunto dos inteiros que depende do equipamento

smallint – inteiro pequeno

Tipos de Domínio 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

Tipos de Domínio 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

Tipos de Domínio em 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)

Definição de Esquema em SQL

Uma relação SQL é definida pelo comando create table:
create table r (A1D1, ..., AnDn, <regras de ibtegridade1>, ..., <regras de integridadek>)

Onde:
  

r: nome da relação Ai: nome do atributo Di: tipo de domínio

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 especifica um predicado P que precisa ser satisfeito por todas as tuplas em uma relação

check (P)

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

Exemplo de Definição de Esquema em SQL – Cont.
create table conta ( conta_numero char(5), agencia_nome char(20), saldo integer, primary key (conta_numero), foreign key (agencia_nome) references agencia, check (saldo >= 0)) create table depositante ( cliente_nome char(30), conta_numero char(5), primary key (cliente_nome, conta_numero), foreign key (cliente_nome) references cliente, foreign key (conta_numero) references conta)

Exemplo de Definição de Esquema em SQL – Cont.
create table emprestimo ( agencia_nome char(20), emprestimo_numero char(4), total integer, primary key (emprestimo_numero), foreign key (agencia_nome) references agencia) create table devedor ( cliente_nome char(30), emprestimo_numero char(4), primary key (cliente_nome, emprestimo_numero), foreign key (cliente_nome) references cliente, foreign key (emprestimo_numero) references emprestimo)

Inserção de Dados
INSERT INTO cliente VALUES('ADEMAR','31-326-028-3','RUA JORGE WINTER', 11,'CENTRO','TAUBATÉ','SP'); INSERT INTO cliente VALUES('ANDRÉ','32-326-028-3','RUA JAQUES FELIX', 12,'CENTRO','TAUBATÉ','SP'); INSERT INTO cliente VALUES('BRUNA','33-326-028-3','AV. GETÚLIO VARGAS', 13,'CENTRO','PINDAMONHANGABA','SP'); INSERT INTO cliente VALUES('CARLOS','34-326-028-3','RUA GENERAL CANA BARROS', 14,'CENTRO','CAÇAPAVA','SP'); INSERT INTO cliente VALUES('GLENDA','35-326-028-3','AV. ADEMAR DE BARROS', 15,'CENTRO','SÃO JOSÉ DOS CAMPOS','SP'); INSERT INTO cliente VALUES('HELENA','36-326-028-3', 'AV. PRESIDENTE DUTRA', 16,'CENTRO','GUARATINGUETÁ','SP'); INSERT INTO cliente VALUES('JOANA','37-326-028-3','RUA BARÃO DE MESQUITA', 17,'CENTRO','RIO DE JANEIRO','RJ'); INSERT INTO cliente VALUES('JOÃO','38-326-028-3','AV. PRESIDENTE DUTRA', 18,'CENTRO','GUARATINGUETÁ','SP'); INSERT INTO cliente VALUES('LILIANE','39-326-028-3','RUA JORGE WINTER', 19,'CENTRO','TAUBATÉ','SP'); INSERT INTO cliente VALUES('SILVIO','40-326-028-3','RUA GENERAL CANA BARROS', 20,'CENTRO','CAÇAPAVA','SP'); INSERT INTO cliente VALUES('TIAGO','41-326-028-3','AV. VOLUNTÁRIOS DA PÁTRIA', 21,'CENTRO','MAIRIPORÃ','SP'); INSERT INTO cliente VALUES('VIVIAN','42-326-028-3','AV. VOLUNTÁRIOS DA PÁTRIA', 22,'CENTRO','MAIRIPORÃ','SP'); INSERT INTO cliente VALUES('WILLIAM','43-326-028-3','AV. PAULISTA', 23,'CENTRO','SÃO PAULO','SP');

Inserção de Dados
INSERT INTO agencia VALUES('CAÇAPAVA','CAÇAPAVA',16000000); INSERT INTO agencia VALUES('CENTRAL', 'GUARATINGUETÁ',8300000); INSERT INTO agencia VALUES('CENTRO', 'MAIRIPORÃ',15000000); INSERT INTO agencia VALUES('CTA','SÃO JOSÉ DOS CAMPOS',24000000); INSERT INTO agencia VALUES('INDEPENDÊNCIA', 'GUARATINGUETÁ',47000000); INSERT INTO agencia VALUES('JUSTIÇA FEDERAL','SÃO JOSÉ DOS CAMPOS',52000000); INSERT INTO agencia VALUES('MONTE CASTELO','TAUBATÉ',4000000); INSERT INTO agencia VALUES('MONTEIRO LOBATO','TAUBATÉ',9000000); INSERT INTO agencia VALUES('SILVA BARROS', 'GUARATINGUETÁ',68000000);

Inserção de Dados
INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO INSERT INTO 700); INSERT INTO 400); CONTA CONTA CONTA CONTA CONTA CONTA CONTA VALUES('A-306', VALUES('A-305', VALUES('A-222', VALUES('A-101', VALUES('A-217', VALUES('A-201', VALUES('A-215', 'CAÇAPAVA',500); 'CENTRO',350); 'CENTRO', 700); 'CTA', 500); 'CTA', 750); 'JUSTIÇA FEDERAL', 900); 'MONTEIRO LOBATO',

CONTA VALUES('A-102', 'MONTEIRO LOBATO',

Inserção de Dados
INSERT INTO INSERT INTO INSERT INTO INSERT INTO 15',1500); INSERT INTO 23',2000); INSERT INTO 14',1500); INSERT INTO 11',900); emprestimo emprestimo emprestimo emprestimo VALUES('CAÇAPAVA', 'L-17',750); VALUES('CENTRAL', 'L-93',500); VALUES('CENTRO', 'L-16',3000); VALUES('INDEPENDÊNCIA', 'L-

emprestimo VALUES('JUSTIÇA FEDERAL', 'Lemprestimo VALUES('MONTEIRO LOBATO', 'Lemprestimo VALUES('SILVA BARROS', 'L-

Inserção de Dados
INSERT INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO INTO devedor devedor devedor devedor devedor devedor devedor devedor VALUES('ADEMAR', 'L-16'); VALUES('CARLOS', 'L-93'); VALUES('HELENA', 'L-15'); VALUES('JOANA', 'L-14'); VALUES('JOÃO', 'L-17'); VALUES('SILVIO', 'L-11'); VALUES('SILVIO', 'L-23'); VALUES('WILLIAM', 'L-17');

Exercícios
  

Inserir dados nas demais tabelas Realizar consultas sobre as tabelas Execute as mesmas consultas realizadas no Database Desktop Salve o banco de dados

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

Alter table – adiciona atributos a uma relação existente
 

Alter table r add A D Exemplo: Alter table conta add conta_codigo int

Outros Comandos

Alter table r drop A – remove atributos de uma relação

Exemplo: Alter table conta drop conta_codigo add column nacionalidade char(15)

Alter table r

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

drop column nacionalidade

Sign up to vote on this title
UsefulNot useful