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

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

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.

Apresentações semelhantes


Apresentação em tema: "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."— Transcrição da apresentação:

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. –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)

2 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

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

4 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 cidadeOrigem idade nrocliente Cliente saldo nroconta N Agência Conta Tem M Pertence NM

5 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) );

6 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)

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

8 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 CONSTRAINTEMPDEPTO FOREIGN KEY(NRODEPTO) REFERENCES DEPTO(NRODEPTO) ON DELETE SET DEFAULT ON UPDATE CASCADE);

9 9 Restrições (CONSTRAINTS) e Valores Default Exercícios: criar as tabelas Cliente e Agencia (Script 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) );

10 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) );

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

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

13 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

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

15 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 Agencia WHERE nroagencia = 1; DELETE FROM Agencia; nomecidadeOrigemidade 1MariaSao Paulo24 2JoaoRibeirao Preto50

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

17 17 Relações dos exemplos e exercícios Cliente nroclientenomecidadeOrigemidade 1MariaSao Paulo24 2JoaoRibeirao Preto80 3JoseSao Paulo50 4AnaCampinas45 5SebastiaoBrotas70 nroagenciacidade 1Sao Carlos 2 3Ibitinga 4Campinas Agencia nroagencianrocontasaldo Conta Cliente_tem_Conta nroAgencianroContanroCliente

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

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

20 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,cidadeOrigem FROM Cliente WHERE idade > 60;

21 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 nome FROM Cliente, Cliente_tem_Conta CTC, Conta WHERE Conta.saldo < 200 AND CTC.nroconta = Conta.nroconta AND CTC.nroagencia = Conta.nroagencia AND Cliente.nrocliente = CTC.nrocliente;

22 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.

23 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 saldo FROM Cliente, Cliente_tem_Conta CTC, Conta WHERE idade > 60 AND CTC.nroconta = Conta.nroconta AND CTC.nroagencia = Conta.nroagencia AND Cliente.nrocliente = CTC.nrocliente;

24 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 Renda FROM Conta ORDER BY Renda DESC;

25 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 Renda FROM Conta ORDER BY Renda DESC; SELECT nroagencia, nroconta, saldo*0.038 As cpmf FROM Conta ORDER BY cpmf ASC;

26 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, nroconta FROM Conta WHERE nroagencia = 2 OR saldo IN (100,200,300); SELECT nroagencia,nroconta FROM conta WHERE saldo IS NULL;

27 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, nroconta FROM Conta WHERE nroagencia = 2 OR saldo IN (100,200,300); SELECT nroagencia,nroconta FROM conta WHERE saldo IS NULL; SELECT nroagencia, nroconta FROM Conta WHERE nroagencia = 1 AND saldo NOT IN (100,300);

28 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 cidadeOrigem FROM Cliente WHERE (idade BETWEEN 50 AND 70) AND nome LIKE %Jose%; SELECT nome FROM Cliente WHERE anoNascimento LIKE 195_;

29 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);

30 30 Consultas aninhadas (SUB-SELECTS) Exercício: Obtenha as cidades em que a cliente Maria tem conta. SELECT DISTINCT cidade FROM Agencia WHERE nroagencia IN (SELECT nroagencia FROM Cliente, Cliente_tem_Conta CTC WHERE nome = Maria AND Cliente.nrocliente = CTC.nrocliente);

31 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));

32 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 C WHERE EXISTS( SELECT * FROM Cliente_Tem_Conta CTC WHERE C.nrocliente = CTC.nrocliente );

33 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 C WHERE EXISTS( SELECT * FROM Cliente_Tem_Conta CTC WHERE C.nrocliente = CTC.nrocliente ); SELECT nome FROM Cliente C WHERE NOT EXISTS( SELECT * FROM Cliente_Tem_Conta CTC WHERE C.nrocliente = CTC.nrocliente );

34 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 < 60 UNION SELECT nome FROM Cliente WHERE cidadeOrigem=Sao Paulo;

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

36 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); nroagenciacidadenroagencianrocontasaldo 1Sao Carlos Sao Carlos Sao Carlos Sao Carlos Ibitinga--- 4Campinas---

37 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 Conta GROUP BY nroagencia; SELECT nroagencia, SUM(saldo) FROM Conta GROUP BY nroagencia HAVING SUM(saldo) > 100;

38 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 Cliente WHERE nrocliente IN ( SELECT nrocliente FROM Cliente_Tem_Conta GROUP BY nrocliente HAVING COUNT(nroconta) >= 2);

39 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 Cliente WHERE nrocliente IN ( SELECT nrocliente FROM Cliente_Tem_Conta GROUP BY nrocliente HAVING COUNT(nroconta) >= 2); SELECT nroagencia, AVG(saldo) FROM Conta GROUP BY nroagencia HAVING MIN(saldo) > 50;

40 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 AS SELECT Cliente.nome FROM Cliente, Cliente_tem_Conta CTC, Conta WHERE Conta.saldo < 0 AND CTC.nroconta = Conta.nroconta AND CTC.nroagencia = Conta.nroagencia AND CTC.nrocliente = Cliente.nrocliente WITH CHECK OPTION;


Carregar ppt "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."

Apresentações semelhantes


Anúncios Google