1 sql (structured query language) linguagem padrão usada em bd relacionais –sql1 ou sql-86:...

40
1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais SQL1 ou SQL-86: primeira versão do padrão. – SQL2 ou SQL-92: versão usada atualmente. – SQL3 ou SQL-99: versão que incorpora novos conceitos como orientação a objetos, além de operações e tipos novos (boolean e e character, por exemplo). A linguagem SQL: Linguagem de Definição de Dados (Data Definition Language - DDL) Linguagem de Manipulação de Dados (Data Manipulation Language - DML)

Upload: internet

Post on 18-Apr-2015

119 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

1

SQL (Structured Query Language) Linguagem padrão usada em BD relacionais

– SQL1 ou SQL-86: primeira versão do padrão.– SQL2 ou SQL-92: versão usada atualmente.– SQL3 ou SQL-99: versão que incorpora novos conceitos como

orientação a objetos, além de operações e tipos novos (boolean e e character, por exemplo).

A linguagem SQL:

– Linguagem de Definição de Dados (Data Definition Language - DDL)

– Linguagem de Manipulação de Dados (Data Manipulation Language - DML)

Page 2: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

2

Linguagem de definição de dados (DDL) • Criação de esquemas: CREATE SCHEMA

• Criação de tabelas: CREATE TABLE

• Tipos de dados

• Criação de domínios: CREATE DOMAIN

• Restrições e valores default

• Remoção de esquemas: DROP SCHEMA

• Remoção de tabelas: DROP TABLE

• Alteração de tabelas: ALTER TABLE

Page 3: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

3

Esquema • Serve para agrupar tabelas e outros elementos

(constraints, views, domínios) que pertencem a uma mesma aplicação de banco de dados.

• Pode ser associado a uma autorização para usá-lo:

• Catálogo: coleção de esquemas que possui um INFORMATION_SCHEMA, com informação sobre os elementos do esquema e usuários autorizados.– Restrições de integridade somente podem ser definidas entre

tabelas que pertencem ao mesmo catálogo.– Esquemas do mesmo catálogo podem compartilhar definições

de domínio.

CREATE SCHEMA BANCO AUTHORIZATION JSMITH;

Page 4: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

4

Mapeamento para modelo relacional:Agencia(nroagencia,cidade)

Conta(nroagencia, nroconta, saldo)

Cliente_tem_Conta(nroagencia, nroconta, nrocliente)

Cliente(nrocliente, nome, idade, cidadeOrigem)

Exemplo: Esquema de uma aplicação bancária

cidade

nroagencia

nome

cidadeOrigemidade

nroclienteCliente

saldo

nroconta

N

AgênciaConta

Tem

M

PertenceN M

Page 5: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

5

Criação de Tabelas

O esquema em que a tabela é declarada pode ser indicado:

CREATE TABLE nome_tabela( nome_coluna tipo [NOT NULL][SET DEFAULT value], ... PRIMARY KEY (nome_coluna) [CONSTRAINT (nome_restrição)] [UNIQUE (nome_coluna)] [FOREIGN KEY (nome_coluna) REFERENCES nome_tabela (nome_coluna) ON DELETE CASCADE/SET NULL/SET DEFAULT ON UPDATE CASCADE/SET NULL/SET DEFAULT]);

CREATE TABLE Banco.Agencia...

create table Agencia( nroagencia integer NOT NULL, cidade varchar2(30) NOT NULL, PRIMARY KEY(nroagencia));

Page 6: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

6

Tipos de dados

• Numérico:– INTEGER (ou INT), SMALLINT– FLOAT, REAL, DOUBLE PRECISION– DECIMAL(i,j) ou DEC(i,j) ou NUMERIC(i,j), i é o total de dígitos

e j o número de casas decimais

• String/Caracter– Tamanho fixo: CHAR(n) ou CHARACTER(n)– Tamanho variável: VARCHAR(n), VARCHAR2(n) ou CHAR

VARYING(n)

• DATE (YYYY-MM-DD)• TIME (HH:MM:SS)• TIMESTAMP (time + date)

Page 7: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

7

Domínios

• Pode-se criar domínios e usar como tipo de dados

• Criar a tabela Cliente

CREATE DOMAIN D_IDADE AS NUMERIC(2,0);

create table Cliente( nrocliente integer NOT NULL, nome varchar2(30) NOT NULL, idade D_IDADE, cidadeOrigem varchar2(15) NOT NULL DEFAULT = ‘Sao Carlos’, PRIMARY KEY(nrocliente));

Page 8: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

8

Restrições (CONSTRAINTS) e Valores Default • NOT NULL• DEFAULT• PRIMARY_KEY• UNIQUE• FOREIGN KEY

• Restrições em ação referencial :– SET NULL, CASCADE,SET

DEFAULT

– evento: ON DELETE, ON UPDATE

CREATE TABLE EMPREGADO( NROEMP CHAR(2) NOT NULL, NOME VARCHAR(20) NOT NULL, SUPERVISOR CHAR(2), NRODEPTO INTEGER DEFAULT 1, CONSTRAINT EMPPK PRIMARY KEY (NROEMP), CONSTRAINT EMPSK FOREIGN KEY(SUPERVISOR) REFERENCES EMPREGADO(NROEMP)

ON DELETE SET NULL ON UPDATE CASCADE CONSTRAINT EMPDEPTO FOREIGN KEY(NRODEPTO) REFERENCES DEPTO(NRODEPTO)

ON DELETE SET DEFAULT ON UPDATE CASCADE);

Page 9: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

9

Restrições (CONSTRAINTS) e Valores Default

Exercícios: • criar as tabelas Cliente e Agencia (Script tabelas1.sql)

@ C:\Scripts\tabelas1.sql• criar as tabelas Conta e Cliente_tem_Conta

Conta(nroagencia, nroconta, saldo)

Cliente_tem_Conta(nroagencia, nroconta, nrocliente)

Cliente(nrocliente, nome, idade, cidadeOrigem)

create table Conta( nroconta integer not null, nroagencia integer not null, primary key (nroconta,nroagencia), foreign key (nroagencia) references Agencia(nroagencia) );

Page 10: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

10

Restrições (CONSTRAINTS) e Valores Default

Exercício: criar a tabela Cliente_tem_Conta

create table Cliente_tem_Conta( nrocliente integer not null, nroconta integer not null , nroagencia integer not null, primary key (nrocliente,nroconta,nroagencia), foreign key (nrocliente) references Cliente(nrocliente), foreign key (nroconta,nroagencia) references Conta (nroconta,nroagencia));

Page 11: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

11

Remoção de esquemas e tabelas

• DROP SCHEMA: – RESTRICT: somente apaga o esquema, se ele estiver vazio– CASCADE: apaga o esquema e todos seus elementos

• DROP TABLE:

– RESTRICT: a tabela é apagada somente se ela não referenciada ou não estiver em nenhuma view

– CASCADE: a tabela é apagada, e todas as outras tabelas que a referenciam e views também são.

Quais tabelas serão apagadas?Resposta: Cliente_tem_Conta e Conta

DROP SCHEMA BANCO CASCADE;

DROP TABLE CONTA CASCADE;

Page 12: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

12

Alteração de tabelas

• Adicionar ou remover atributos e restrições: ALTER TABLE– RESTRICT: a operação só se completa se não existirem views

ou restrições referenciando a coluna a ser removida.– CASCADE: apaga todas as visões e restrições que referenciam a

coluna a ser removida.

• Exercícios– Adicione a coluna CPF à tabela Cliente– Exclua a coluna CPF da tabela Cliente

ALTER TABLE Cliente ADD email varchar2(12);ALTER TABLE Cliente DROP COLUMN cidadeOrigem CASCADE; ALTER TABLE Cliente ALTER cidadeOrigem DROP DEFAULT;ALTER TABLE Cliente ALTER cidadeOrigem SET DEFAULT = ‘Sao Paulo’;

Page 13: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

13

Linguagem de manipulação de dados (DML) • Inserção de dados: INSERT INTO• Atualização de dados: UPDATE• Exclusão de dados: DELETE FROM• Consulta de dados: SELECT

– WHERE

– Operadores aritméticos e ORDER BY

– Operadores lógicos, IN, NOT IN, IS NULL

– BETWEEN, LIKE

– Consultas aninhadas

– ALL, ANY

– EXISTS, NOT EXISTS

– UNION, INTERSECT, MINUS

– Tipos de JOIN

– Funções de agregação e agrupamento

Page 14: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

14

Inserção e atualização de dados

• Inserir dados: INSERT INTO

– Inserindo uma agência

• Atualizar dados: UPDATE

– Atualizando uma agência

INSERT INTO nome_tabela [(lista_de_valores)]VALUES (Lista_de_Valores);

INSERT INTO Agencia(nroagencia, cidade)VALUES (1,‘Sao Carlos’);

UPDATE nome_tabela SET nome_coluna = valor, ...WHERE (condição);

UPDATE Agencia SET cidade = ‘Campinas’WHERE nroagencia = 1;

Page 15: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

15

Exclusão de dados

• Excluir dados: DELETE FROM

– Excluindo agência 1

– Excluindo todas agências

• Exercícios:– Inserir clientes:

– Atualizar cliente 2 com idade = 60 e cidadeOrigem = ‘Sao Carlos’– Excluir cliente Joao

DELETE FROM nome_tabela[WHERE (condição)];

DELETE FROM AgenciaWHERE nroagencia = 1;

DELETE FROM Agencia;

nrocliente nome cidadeOrigem idade

1 Maria Sao Paulo 24

2 Joao Ribeirao Preto 50

Page 16: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

16

Consulta de dados

SELECT [DISTINCT] coluna1, coluna2, … ,colunaNFROM tabela1, tabela2,...,tabelaN[WHERE condições][GROUP BY coluna1, coluna2,...,colunaN][HAVING (condições)][{INTERSECT | MINUS | UNION} commando_select][ORDER BY coluna {ASC | DESC}, …];

Page 17: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

17

Relações dos exemplos e exercícios

Clientenrocliente nome cidadeOrigem idade

1 Maria Sao Paulo 24

2 Joao Ribeirao Preto 80

3 Jose Sao Paulo 50

4 Ana Campinas 45

5 Sebastiao Brotas 70

nroagencia cidade

1 Sao Carlos

2 Sao Carlos

3 Ibitinga

4 Campinas

Agencianroagencia nroconta saldo

1 1111 100

1 2222 200

2 3333 100

2 1111 50

Conta

Cliente_tem_Conta

nroAgencia nroConta nroCliente

1 1111 1

1 1111 2

1 2222 1

1 2222 3

2 3333 3

2 1111 4

Page 18: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

18

SELECT e DISTINCT

• Obtenha uma listagem de todas as cidades de origem dos clientes.

– Álgebra relacional

– SQL

• Exercício: Obtenha uma listagem de todas as cidades em que existem agências

π(cidadeOrigem)(σ (Cliente) )

SELECT DISTINCT cidadeOrigem FROM Cliente;

Page 19: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

19

SELECT e DISTINCT

• Obtenha uma listagem de todas as cidades de origem dos clientes.

– Álgebra relacional

– SQL

• Exercício: Obtenha uma listagem de todas as cidades em que existem agências

π(cidadeOrigem)(σ (Cliente) )

SELECT DISTINCT cidadeOrigem FROM Cliente;

SELECT DISTINCT cidade FROM Agencia;

Page 20: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

20

WHERE, operador relacional, uso explícito de relações, uso de variáveis

• Obtenha o nome e a cidade de origem dos clientes com mais de 60 anos.

– Álgebra relacional

– SQL

π( nome, cidadeOrigem) (σ(idade>60) (Cliente) )

SELECT nome,cidadeOrigemFROM ClienteWHERE idade > 60;

Page 21: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

21

WHERE, operador relacional, uso explícito de relações, uso de variáveis

• Obtenha o nome dos clientes cujo saldo é inferior a

R$200,00 t1 σ(saldo<200) (Conta)

t2 π(nrocliente) (t1 |x| Cliente_tem_Conta) (t1.nroagencia = Cliente_tem_Conta.nroagencia AND

t1.nroconta = Cliente_tem_Conta.nroconta)

resp π(nome) (t2 |x| (t2.nrocliente= Cliente.nrocliente) Cliente)

SELECT nomeFROM Cliente, Cliente_tem_Conta CTC, ContaWHERE Conta.saldo < 200AND CTC.nroconta = Conta.nrocontaAND CTC.nroagencia = Conta.nroagenciaAND Cliente.nrocliente = CTC.nrocliente;

Page 22: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

22

WHERE, operador relacional, uso explícito de relações, uso de variáveis

• Exercício: Obtenha o saldo dos clientes, cuja idade é maior que 60 anos.

Page 23: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

23

WHERE, operador relacional, uso explícito de relações, uso de variáveis

• Exercício: Obtenha o saldo dos clientes, cuja idade é maior que 60 anos.

SELECT saldoFROM Cliente, Cliente_tem_Conta CTC, ContaWHERE idade > 60AND CTC.nroconta = Conta.nrocontaAND CTC.nroagencia = Conta.nroagenciaAND Cliente.nrocliente = CTC.nrocliente;

Page 24: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

24

Operador aritmético e ORDER BY(DESC/ASC) • Obtenha a renda mensal de cada conta (2% ao mês) em

ordem descrescente de renda.

• Exercício: Obtenha qual seria o valor de CPMF a ser pago, em ordem crescente, com a movimentação de todo o saldo da conta (Dado: CPMF = 0,38%)

SELECT nroagencia, nroconta, saldo*0.02 As RendaFROM ContaORDER BY Renda DESC;

Page 25: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

25

Operador aritmético e ORDER BY(DESC/ASC) • Obtenha a renda mensal de cada conta (2% ao mês) em

ordem descrescente de renda.

• Exercício: Obtenha qual seria o valor de CPMF a ser pago, em ordem crescente, com a movimentação de todo o saldo da conta (Dado: CPMF = 0,38%)

SELECT nroagencia, nroconta, saldo*0.02 As RendaFROM ContaORDER BY Renda DESC;

SELECT nroagencia, nroconta, saldo*0.038 As cpmfFROM ContaORDER BY cpmf ASC;

Page 26: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

26

Operador lógico, IN, NOT IN, IS NULL

• Obtenha as contas da agência 2 ou dos clientes cujo saldo seja R$100 ou 200 ou 300.

• Obtenha as contas cujo saldo seja nulo.

• Exercício: Obtenha as contas da agência 1, cujo saldo não seja R$100 nem 300 (Use NOT IN).

SELECT nroagencia, nrocontaFROM ContaWHERE nroagencia = 2OR saldo IN (100,200,300);

SELECT nroagencia,nrocontaFROM contaWHERE saldo IS NULL;

Page 27: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

27

Operador lógico, IN, NOT IN, IS NULL

• Obtenha as contas da agência 2 ou dos clientes cujo saldo seja R$100 ou 200 ou 300.

• Obtenha as contas cujo saldo seja nulo.

• Exercício: Obtenha as contas da agência 1, cujo saldo não seja R$100 nem 300 (Use NOT IN).

SELECT nroagencia, nrocontaFROM ContaWHERE nroagencia = 2OR saldo IN (100,200,300);

SELECT nroagencia,nrocontaFROM contaWHERE saldo IS NULL;

SELECT nroagencia, nrocontaFROM ContaWHERE nroagencia = 1AND saldo NOT IN (100,300);

Page 28: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

28

BETWEEN, LIKE

• Obtenha as cidades de origem dos clientes que possuam ‘José’ no nome e cuja idade esteja entre 50 e 70 anos.

• Selecionar o nome dos clientes que nasceram na década de 50.

• % e _ são usados somente com Strings (char, varchar).

SELECT DISTINCT cidadeOrigemFROM ClienteWHERE (idade BETWEEN 50 AND 70)AND nome LIKE ‘%Jose%’;

SELECT nomeFROM ClienteWHERE anoNascimento LIKE ’195_’;

Page 29: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

29

Consultas aninhadas (SUB-SELECTS)

• Obtenha o número das agências em que a cliente ‘Maria’ tem conta.

• Exercício: Obtenha as cidades em que a cliente ‘Maria’ tem conta.

π(nroagencia) ( σ(nome=’Maria’) ( Cliente |x| Cliente_tem_Conta)) (Cliente.nrocliente= Cliente_tem_Conta.nrocliente)

SELECT nroagencia FROM Cliente_tem_Conta WHERE nrocliente IN (SELECT nrocliente FROM Cliente

WHERE nome = ‘Maria’);

Page 30: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

30

Consultas aninhadas (SUB-SELECTS)

• Exercício: Obtenha as cidades em que a cliente ‘Maria’ tem conta.

SELECT DISTINCT cidade FROM AgenciaWHERE nroagencia IN (SELECT nroagencia FROM Cliente, Cliente_tem_Conta CTC

WHERE nome = ‘Maria’ AND Cliente.nrocliente = CTC.nrocliente);

Page 31: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

31

ALL e ANY

• ALL: Selecione os nomes dos clientes que não possuam conta na agência 1.

• ANY: Selecione os nomes dos clientes que possuam pelo menos uma conta em qualquer agência de São Carlos.

SELECT nome FROM Cliente WHERE nrocliente <> ALL ( SELECT nrocliente FROM Cliente_Tem_Conta

WHERE nroagencia = 1);

SELECT nome FROM Cliente WHERE nrocliente IN ( SELECT nrocliente FROM Cliente_Tem_Conta WHERE nroagencia = ANY (SELECT nroagencia

FROM Agencia WHERE CIDADE = ‘Sao Carlos’));

Page 32: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

32

EXISTS e NOT EXISTS

• Testa se o retorno de uma determinada consulta é ou não vazio.

– Obtenha os nomes dos clientes que tenham alguma conta.

– Exercício: Obtenha os nomes dos clientes que não tenham nenhuma conta (NOT EXISTS).

SELECT nome FROM Cliente CWHERE EXISTS( SELECT * FROM Cliente_Tem_Conta CTC WHERE C.nrocliente = CTC.nrocliente );

Page 33: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

33

EXISTS e NOT EXISTS

• Testa se o retorno de uma determinada consulta é ou não vazio.

– Obtenha os nomes dos clientes que tenham alguma conta.

– Exercício: Obtenha os nomes dos clientes que não tenham nenhuma conta (NOT EXISTS).

SELECT nome FROM Cliente CWHERE EXISTS( SELECT * FROM Cliente_Tem_Conta CTC WHERE C.nrocliente = CTC.nrocliente );

SELECT nome FROM Cliente CWHERE NOT EXISTS( SELECT * FROM Cliente_Tem_Conta CTC WHERE C.nrocliente = CTC.nrocliente );

Page 34: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

34

UNION, INTERSECT, MINUS • Obtenha os nomes dos clientes cuja idade seja menor que

60 ou a cidade de origem seja ‘Sao Paulo’.

• Exercícios:– Obtenha os nomes dos clientes cuja idade seja menor que 60 e a

cidade de origem seja ‘Sao Paulo’ (INTERSECT).– Obtenha os nomes dos clientes cuja idade seja menor que 60 e a

cidade de origem não seja ‘Sao Paulo’ (MINUS).

SELECT nome FROM Cliente WHERE idade < 60UNIONSELECT nome FROM Cliente WHERE cidadeOrigem=‘Sao Paulo’;

Page 35: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

35

Tipos de JOIN

• INNER JOIN ou JOIN: deve-se especificar os atributos de junção, somente tuplas resultantes são retornadas.

– Obtenha os nomes dos clientes cujo número da conta é 1.

• NATURAL JOIN: Junção automática sobre campos do mesmo tipo e com mesmo nome.

– Obtenha os números das contas dos clientes cuja idade seja 24 anos.

SELECT nome FROM (Cliente JOIN (Cliente_tem_Conta CTC) ON Cliente.nrocliente = CTC.nrocliente)WHERE nroconta = 1;

SELECT nroconta, nroagencia FROM (Cliente NATURAL JOIN Cliente_tem_Conta)WHERE idade = 24;

Page 36: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

36

Tipos de JOIN

• LEFT OUTER JOIN , RIGHT OUTER JOIN, FULL OUTER JOIN: conserva o lado especificado.

– Obtenha todas as agências existentes, e suas respectivas contas.

SELECT *FROM (Agencia LEFT OUTER JOIN Conta ON Agencia.nroagencia = Conta.nroagencia);

nroagencia cidade nroagencia nroconta saldo

1 Sao Carlos 1 1111 100

1 Sao Carlos 1 2222 200

2 Sao Carlos 2 3333 100

2 Sao Carlos 2 1111 50

3 Ibitinga - - -

4 Campinas - - -

Page 37: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

37

Funções de Agregação e Agrupamento

• SUM, MIN, MAX, AVG, COUNT• GROUP BY: agrupa por campos, esses campos devem

aparecer na cláusula SELECT.• HAVING: permite estabelecer condições sobre as funções

de agrupamento.– Obtenha a média dos saldos dos clientes por agência.

– Obtenha as agências cujo total de dinheiro seja maior que R$100.

SELECT nroagencia, AVG(saldo)FROM ContaGROUP BY nroagencia;

SELECT nroagencia, SUM(saldo) FROM ContaGROUP BY nroagenciaHAVING SUM(saldo) > 100;

Page 38: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

38

Funções de Agregação e Agrupamento

– Selecione os nomes dos clientes que possuam pelo menos duas contas.

– Exercício: Obtenha a média dos saldos por agência, considerando no resultado somente as agências que tenham contas com saldo maior que R$50.

SELECT nome FROM ClienteWHERE nrocliente IN ( SELECT nrocliente FROM Cliente_Tem_Conta GROUP BY nrocliente HAVING COUNT(nroconta) >= 2);

Page 39: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

39

Funções de Agregação e Agrupamento

– Selecione os nomes dos clientes que possuam pelo menos duas contas.

– Exercício: Obtenha a média dos saldos por agência, considerando no resultado somente as agências que tenham contas com saldo maior que R$50.

SELECT nome FROM ClienteWHERE nrocliente IN ( SELECT nrocliente FROM Cliente_Tem_Conta GROUP BY nrocliente HAVING COUNT(nroconta) >= 2);

SELECT nroagencia, AVG(saldo) FROM ContaGROUP BY nroagenciaHAVING MIN(saldo) > 50;

Page 40: 1 SQL (Structured Query Language) Linguagem padrão usada em BD relacionais –SQL1 ou SQL-86: primeira versão do padrão. –SQL2 ou SQL-92: versão usada atualmente

40

Criação de visões

• Visões são consultas predefinidas carregadas na memória– WITH CHECK OPTION: atualiza a visão ao atualizar dados nas

tabelas.– CASCADED: atualização em cascata se tiver outras views

– LOCAL: atualiza unicamente essa view

CREATE VIEW nome_visao [ (column list) ] AS query1[WITH [CASCADED|LOCAL] CHECK OPTION];

CREATE VIEW clientes_em_debito ASSELECT Cliente.nomeFROM Cliente, Cliente_tem_Conta CTC, ContaWHERE Conta.saldo < 0AND CTC.nroconta = Conta.nrocontaAND CTC.nroagencia = Conta.nroagenciaAND CTC.nrocliente = Cliente.nroclienteWITH CHECK OPTION;