Banco de Dados I. Linguagem de Consulta (parte II) Recuperando Dados de Várias Tabelas (JOINS)



Documentos relacionados
Banco de Dados I. Linguagem de Consulta (parte I) DDL DML

Linguagem de Banco de Dados DML Exercícios

O comando CREATE TABLE cria a tabela solicitada e obedece à seguinte forma:

PROGRAMA. 3.SQL Básico. 3.1 Criação de tabelas 3.2 Queries simples 3.3 Subqueries 3.4 Agregação. Prof. Dr. Marcos Tsuzuki

Comandos de Manipulação

SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

Operação de União JOIN

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

SQL Linguagem de Manipulação de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

EXERCÍCIOS PRÁTICOS. Banco de Dados

Linguagem de Consulta Estruturada (SQL)

SQL. Prof. Márcio Bueno.

Álgebra Relacional. Conjunto de operações que usa uma ou duas relações como entrada e gera uma relação de saída. Operações básicas:

Structured Query Language (SQL)

Linguagem SQL. Comandos Básicos

Linguagem de Consulta - SQL

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. Exemplo Clínica. (

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

EXEMPLOS DE COMANDOS NO SQL SERVER

SQL DML. Frederico D. Bortoloti

3) Palavra-chave distinct (select-from). Obter apenas os pibs distintos entre si.

SQL (Structured Query Language)

f. Vocês podem selecionar todos os campos indicando-os, ou seja, sem usar * (boa prática) g. Muito relevante na manutenção de BD e de aplicações.

Básico da Linguagem SQL. Definição de Esquemas em SQL. SQL(Structured Query Language)

Programação SQL. Introdução

Prof.: Clayton Maciel Costa

UNIVERSIDADE VEIGA DE ALMEIDA CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO CURSO SUPERIOR DE TECNOLOGIA EM PROCESSAMENTO DE DADOS BANCO DE DADOS

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

SQL (Linguagem de Consulta Estruturada)

Linguagem de Consulta Estruturada SQL- DML

Exercícios. Exercícios

SQL BÁSICO. Introdução. Prof. Suelane Garcia. Linguagem SQL (Structured Query Language)

Projeto e Implementação

Múltiplas Tabelas. Disciplina de Banco de Dados

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Memória de aula Semanas 15 e 16

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

Comandos DDL. id_modulo = id_m odulo

Linguagem SQL Parte I

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Linguagem SQL (Parte I)

SQL - Banco de Dados. Disciplina: Banco de Dados. Professor: José Antônio. José Antônio - CEFET-RN 23/09/2015

Banco de Dados. Marcio de Carvalho Victorino Exercícios SQL

NOME SEXO CPF NASCIMENTO SALARIO

Programação WEB II. PHP e Banco de Dados. progweb2@thiagomiranda.net. Thiago Miranda dos Santos Souza

Descrição Tinyint[(M)] Inteiro pequeno. Varia de 128 até +127

CREATE TABLE AUTOR ( cod_autor int not null primary key, nome_autor varchar (60) )

SQL. Autor: Renata Viegas

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

Principais Comandos SQL Usados no MySql

Introdução ao SQL. Aécio Costa

IF685 Gerenciamento de Dados e Informação - Prof. Robson Fidalgo 1

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Pedro F. Carvalho OCP Oracle g LINGUAGEM SQL. São José do Rio Preto

Consultas SQL Parte II

Princípio dos anos 70 IBM desenvolve a linguagem Sequel para o System R. Standards ISO e ANSI SQL-86, SQL-89, SQL-92, SQL:1999, SQL:2003

4.6. SQL - Structured Query Language

SQL: Definição de tabelas, Modificações à Base de Dados

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

DML - SELECT Agrupando Dados

1. Domínio dos Atributos

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Banco de Dados I Linguagem SQL Parte 2. Autor: Prof. Cláudio Baptista Adaptado por: Prof. Ricardo Antonello

Introdução ao SQL Avançado

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

Banco de Dados. Prof. Antonio

A linguagem SQL

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

Linguagem de Consulta - SQL

O que são Bancos de Dados?

1. Assinale as afirmações que são verdadeiras e as que são falsas, corrigindo-as:

Programação SQL. INTRODUÇÃO II parte

SQL consulta com operadores

Definida pelo American National Standard Institute (ANSI) em 1986

FEAP - Faculdade de Estudos Avançados do Pará PROFª LENA VEIGA PROJETOS DE BANCO DE DADOS UNIDADE V- SQL

Linguagem SQL Sub-linguagem DDL

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

1. Introdução. DB2 da IBM ORACLE da Oracle Corporation; RDB da Digital SYBASE da Sybase INC SQL Server da Microsoft Ingres da Computer Associates

Linguagem SQL (Parte II)

ROTEIRO. A Linguagem SQL (I parte) CEFET.PHB - PI Prof. Jefferson Silva. As partes da linguagem SQL. A Linguagem de Definição de Dados (SQL-DDL)

PHP INTEGRAÇÃO COM MYSQL PARTE 1

S Q L 31/03/2010. SQL - Structured Query Language Linguagem de Consulta Estruturada

Programação SQL. Manipulação de Dados. DML Data Manipulation Language

Banco de Dados. Structured Query Language SQL. Prof. Walteno Martins Parreira Jr 1.

Bases de Dados 2005/2006. Aula 5

ADMINISTRAÇÃO DE BANCO DE DADOS

SQL Structured Query Language

Banco de Dados. Maurício Edgar Stivanello

S Q L 15/01/2013. Enfoques de SQL. Enfoques de SQL SQL. Usos de SQL. SQL - Origem/Histórico. Gerenciamento de Dados e Informação

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

Tarefa Orientada 13 Agrupamento e sumário de dados

BDII SQL Junção Revisão 8

SQL - Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL

Transcrição:

Banco de Dados I Linguagem de Consulta (parte II) Recuperando Dados de Várias Tabelas (JOINS)

Exemplo - pedido Diagrama Entidade-Relacionamento N Pedido N possui N Produto N faz tira 1 Cliente 1 Vendedor

Exemplo Pedido Diagrama ER N Pedido Pedido N N possui N Produto Produto faz tira 1 Cliente Cliente 1 Vendedor Diagrama de Tabelas Pedido Item_de_Pedido (possui ) (possui ) Produto Cliente Vendedor

Exemplo Pedido PEDIDO PEDIDO Núm_pedido Núm_pedido Prazo_entrega Prazo_entrega Código_cliente Código_cliente Código_vendedor Código_vendedor ITEM_DO_PEDIDO ITEM_DO_PEDIDO Núm_pedido Núm_pedido Código_produto Código_produto Quantidade Quantidade CLIENTE CLIENTE Código_cliente Código_cliente Nome_cliente Nome_cliente Endereço Endereço Cidade Cidade CEP CEP UF UF CGC CGC IE IE VENDEDOR VENDEDOR Código_vendedor Código_vendedor Nome_vendedor Nome_vendedor Faixa_comissão Faixa_comissão Salário_fixo Salário_fixo PRODUTO PRODUTO Código_produto Código_produto Descrição Descrição Unidade Unidade Val_unit Val_unit

SQL:DDL Revisão Linguagem de Definição de Dados:... create, alter, drop Consultando informações: select

Criação e Destruição de Tabelas CREATE TABLE <tabela> (<descrição das colunas>); (<descrição das chaves>); char (n) : cadeia de caracter de tamanho fixo (pode-se usar character - máx n 255) varchar ou varchar2 (n): caracteres de tamanho variável. (pode-se usar smallint: é um inteiro pequeno character varing - máx n 2000). number (p,d): número com máx de 38 caracteres. p é o total incluindo a casa decimal e d é o número de casas decimais. Ex numeric(3,1) 44,5 444,5 e 0,32 float (n): número em ponto flutuante com precisão definida pelo usuário em pelo menos n dígitos. date: tipo calendário contendos século, ano (4 dígitos), mês e dia do mês.+ horas horário, em horas, minutos e segundos. ( 12:00 quando somente data, DD-MON-YY ) long: alfanumérico de tamanho variável. ( 2Giga), um por tabela. Não pode ser usado em consulta raw ou long raw: campo binário de tamanho variável. ( 2000 e 2Giga)

Ex:tabelas ITEM_DO_PEDIDO CREATE TABLE ITEM_DO_PEDIDO (num_pedido smallint not null unique, código_produto smallint not null unique, quantidade number(3), FOREIGN KEY (num_pedido) REFERENCES PEDIDO, FOREIGN KEY (código_produto) REFERENCES PRODUTO); CREATE TABLE ITEM_DO_PEDIDO (num_pedido smallint not null, código_produto smallint not null, quantidade number(3), FOREIGN KEY (num_pedido) REFERENCES PEDIDO, FOREIGN KEY (código_produto) REFERENCES PRODUTO, PRIMARY KEY (num_pedido, código_produto));

Ex:tabelas Vendedor e Produto CREATE TABLE VENDEDOR (código_vendedor smallint not null, nome_vendedor char(20), salário_fixo number(6,2), faixa_comissão char(1), PRIMARY KEY código_vendedor) ( ); CREATE TABLE PRODUTO (código_produto smallint not null, unidade char(3), descrição_produto char(30), val_unit number(10,2), PRIMARY KEY código_produto) ( );

Destruição de Tabelas Forma: DROP TABLE <tabela>; DROP TABLE PEDIDO;

Consultando dados: estrutura Select colunas (projeção π) From tabela Where restrições (linhas seleção δ) Aluno RA Nome Idade tabela 952001 992655 Ana Marcão 19 20 Linha 1 302566 Paulinha 22......... Coluna 1

Extraindo Dados de uma Tabela: Comando SELECT (projeção - π ) A) Selecionando Colunas Especificas da Tabela: Forma: Problema : Select <nome(s) da(s) coluna(s)> from <tabela>; -Listar todos os produtos com respectivas descrições, unidades e valores unitários. SQL: Resultado: Select descrição, unidade, valor_unitário from produto;

Extraindo Dados de uma Tabela: Comando SELECT (projeção - π ) B) Selecionando todas as Colunas da Tabela Forma: Select * from <tabela> ; Problema: - Listar todo o conteúdo de Vendedor SQL: Select * From vendedor ; Código do Vendedor Nome do Vendedor Salário Fixo Faixa de Comissão 209 José 1.800,00 C 111 Carlos 2.490,00 A 11 João 2.780,00 C 240 Antônio 9.500,00 C 720 Felipe 4.600,00 A 213 Jonas 2.300,00 A 101 João 2.650,00 C 310 Josias 870,00 B 250 Maurício 2.930,00 B

Selecionando somente alguns Registros da Tabela: ( seleção - δ) Forma: Onde: Where Select <nomes da(s) coluna(s)> from <tabela> Where <restrições>; <nome da coluna> <operador> <valor> C.1) Operadores Relacionais: =, <> ou!=, <, > >=, <= Observações: quando o atributo é do tipo caracter, o <valor> deve estar entre aspas ( ). Ex: Parafuso. Em SQL existe diferença entre Parafuso e parafuso.

Selecionando somente alguns Registros da Tabela: ( seleção - δ) Problema: - Listar o num_pedido, o código_produto e a quantidade dos itens do pedido com a quantidade igual a 35. SQL: Select num_pedido, código_produto, quantidade from item_do_pedido Where quantidade = 35; Resultado: Número do Código do Quantidade Pedido Produto 121 31 35 138 77 35

Selecionando somente alguns Registros da Tabela: C.2) Operadores Lógicos: AND, OR ; NOT. Uso de ( ) para alterar a precedência : AND > OR Problema : -Listar os produtos que tenham unidade igual a M e valor unitário igual a R$ 1,05 SQL: Select descrição_produto from produto Where unidade = M AND val_unit = 1.05 ; Resultado: DESCRICAO Papel

Selecionando somente alguns Registros da Tabela: Exerc 3: Liste os clientes e seus respectivos endereços que moram em São Paulo OU estejam na faixa de CEP entre '30077000' e '30079000'. SQL: Resultado: Select from Where nome_cliente, endereço cliente (CEP >= 30077000 AND CEP <= 30079000 ) OR cidade = 'São Paulo ; NOME CLIENTE ENDERECO CLIENTE Flávio Av.Pres.Vargas10 Jorge Rua Caiapo13 Maurício Av.Paulista1236 sl 2345 Rodolfo Largo da Lapa 27 sobrado Beth Av. Climério n.45 Lívio Av. Beira Mar n.1256 Renato Rua Meireles n.1231 bl.2 sl.345

Selecionando somente alguns Registros da Tabela: Problema: - Mostrar todos os pedidos que não tenham prazo de entrega igual a 15 dias SQL: Select num_pedido from pedido Where NOT ( prazo_entrega = 15 ); Resultado: NÚMERO DO PEDIDO 121 97 137 148 104 203... 98 91

Selecionando Registros da Tabela: C.3) Operadores Between e NOT Between Where <nome da coluna> BETWEEN <valor1> AND <valor2> Where <nome da coluna> NOT BETWEEN <valor1> AND <valor2> Pesquisa por uma determinada coluna que esteja dentro da faixa de valores Não há necessidade dos operadores >=, <= e AND. Os VALOR1 e VALOR2 têm que ser do mesmo tipo de dado da coluna.

Selecionando Registros da Tabela: C.3) Operadores Between e NOT Between Problema: -Listar o código e a descrição dos produtos que tenham o valor unitário na faixa de R$ 0,32 até R$ 2,00. SQL: Select from código_ produto, descrição_produto produto Where val_unit BETWEEN 0.32 AND 2.00; Resultado: CÓDIGO DO DESCRIÇÃO PRODUTO 25 Queijo 31 Chocolate 78 Vinho 53 Linha 87 Cano 77 Papel

Selecionando Registros da Tabela: C.4) Operadores LIKE e NOT LIKE -Where <nome da coluna> LIKE <valor>; -Where <nome da coluna> NOT LIKE <valor>; LIKE e NOT LIKE só trabalham sobre colunas que sejam do tipo CHAR. Eles têm praticamente o mesmo funcionamento que os operadores =, < >, Podem utilizar os símbolos ( % ) e ( _ ) que podem fazer o papel de "Curinga": % - substitui uma palavra _ - substitui um caractere Ex LAPIS % 'pode enxergar os seguintes registros: LAPIS PRETO, LAPIS CERA', 'LAPIS BORRACHA BROCA N_ pode enxergar os seguintes registros; 'BROCA N1, 'BROCA N9, BROCA N3,

Selecionando Registros da Tabela: C.4) Operadores LIKE e NOT LIKE Exerc 4: - Listar todos os produtos que tenham a sua unidade começando por K. SQL: Select código_produto, descrição_produto from produto Where unidade LIKE 'K_ ; Resultado: CODIGO DO PRODUTO DESCRIÇÃO 25 Queijo

Selecionando Registros da Tabela: C.5) Operadores IN e NOT IN -Where <nome da coluna> IN <valores>; -Where <nome da coluna> NOT IN <valores> ; Pesquisam registros que estão ou não contidos no conjunto de <valores> fornecido. Estes minimizam o uso dos operadores: =, <>, AND e OR.

Selecionando Registros da Tabela: C.5) Operadores IN e NOT IN Problema: - Listar os vendedores que são da faixa de comissão A e B. SQL: Select from Where nome_vendedor vendedor faixa comissão IN ( A, 'B'); Resultado: NOME VENDEDOR Carlos Felipe Jonas Josias Maurício

Selecionando Registros da Tabela: C.6) Operadores IS NULL e IS NOT NULL Problema: - Where<nome da coluna> IS NULL; - Where<nome da coluna> IS NOT NULL; - Mostrar os clientes que não tenham inscrição estadual. SQL: Select * from cliente Where IE IS NULL;

Selecionando Registros da Tabela: D) Ordenando os Dados Selecionados Select<nome da(s) coluna(s)> from <tabela> Where<condição(es)> order by <nome da(s) coluna(s)> ASC / DESC ou order by <número da coluna > ASC (default) / DESC Problema: - Mostrar em ordem alfabética a lista de vendedores e seus respectivos salários fixos. SQL: Select nome_vendedor, salário_fixo from vendedor order by nome_vendedor;

Selecionando Registros da Tabela: E) Realizando CÁLCULOS com Informações Selecionada Problema: - Mostrar o novo salário fixo dos vendedores, de faixa de comissão 'C, calculado com base no reajuste de 75% acrescido de R$ 120,00 de bonificação. Ordenar pelo nome do vendedor. SQL: Select from Where order by nome_vendedor, novo salário = (salário_fixo * 1.75) + 120 vendedor faixa comissão = 'C' nome_vendedor;

Selecionando Registros da Tabela: E) Realizando CÁLCULOS com Informações Selecionada F) Utilizando Funções sobre Conjuntos MAX, MIN SUM, AVG F.1) Buscando Máximos e Mínimos (MAX, MIN) Problema: - Mostrar o menor e o maior salário de vendedor. SQL: Resultado: F.2) Totalizando Colunas (SUM) Select MIN(salário_fixo), MAX(salário_fixo) from vendedor ; MIN(salário fixo) MAX(salário fixo) 870,00 9.500,00 Problema: - Mostrar a quantidade total pedida para o produto 'VINHO' de código '78'. SQL: Select from SUM(quantidade), item_do_pedido Where código_produto = 78 ;

Selecionando Registros da Tabela: E) Realizando CÁLCULOS com Informações Selecionada Problema: - Qual a média dos salários fixos dos vendedores? SQL: Select AVG (salário_fixo), from vendedor; Resultado: AVG(salário_fixo) 3.324,44 F.4) Contando os Registros (COUNT) Problema: - Quantos vendedores ganham acima de R$ 2.500., de salário fixo? SQL: Select COUNT(*), from vendedor Where salário_fixo >2500 ; Resultado: COUNT(*) 5

Selecionando Registros da Tabela: F.5) Utilizando a Cláusula DISTINCT Vários registros dentro de uma tabela podem conter os mesmos valores, com exceção da chave primária. Algumas consultas podem trazer informações erradas. A cláusula DISTINCT, foi criada para não permitir que certas redundâncias, obviamente necessárias, causem problemas. Problema: - Quais as unidades de produtos, diferentes, na tabela produto? SQL: Resultado: Select DISTINCT unidade, from produto; UNIDADE K BAR L M SAC G

Recuperando Dados de Várias Tabelas (JOINS) Trabalhamos até agora com a recuperação de dados sobre apenas uma tabela, no entanto um banco de dados é formado por várias tabelas que se relacionam. Para recuperar informações em de várias tabelas muitas vezes precisamos realizar uma JUNÇÃO (JOIN) entre as tabelas. É esta operação e suas implicações que será abordado nesta momento.

Recuperando Dados de Várias Tabelas (JOINS) O Conceito de Qualificadores de Nome Consiste em identificar as colunas pôr meio do nome das tabela. Qualificador de nome para a coluna descrição da tabela PRODUTO será: PR0DUT0. descrição Os qualificadores de nome são utilizados em uma consulta para efetivar a junção (JOIN) entre tabelas. (nomes de colunas iguais em tabelas diferentes)

Recuperando Dados de Várias Tabelas (JOINS) Juntar a tabela cliente com pedido, identificando os pedidos de cada cliente. CLIENTE CLIENTE Código_cliente Código_cliente Nome_cliente Nome_cliente Endereço Endereço Cidade Cidade CEP CEP UF UF CGC CGC IE IE PEDIDO PEDIDO Núm_pedido Núm_pedido Prazo_entrega Prazo_entrega Código_cliente Código_cliente Código_vendedor Código_vendedor

Recuperando Dados de Várias Tabelas (JOINS) Uma solução é realizar a operação de produto cartesiana entre os dois conjuntos. CLIENTE CLIENTE Código_cliente Código_cliente Nome_cliente Nome_cliente Endereço Endereço Cidade Cidade CEP CEP UF UF CGC CGC IE IE PEDIDO PEDIDO Núm_pedido Núm_pedido Prazo_entrega Prazo_entrega Código_cliente Código_cliente Código_vendedor Código_vendedor c1 c2... cn p1 p2... pn

Recuperando Dados de Várias Tabelas (JOINS) Uma solução é realizar a operação de produto cartesiana entre os dois conjuntos. CLIENTE CLIENTE Código_cliente Código_cliente Nome_cliente Nome_cliente Endereço Endereço Cidade Cidade CEP CEP UF UF CGC CGC IE IE PEDIDO PEDIDO Núm_pedido Núm_pedido Prazo_entrega Prazo_entrega Código_cliente Código_cliente Código_vendedor Código_vendedor SELECT FROM cliente, pedido cliente.codigo_cliente, pedido. codigo_cliente, num_pedido

Recuperando Dados de Várias Tabelas (JOINS) Podemos notar que dessa operação de junção, poucas informações podem ser extraídas. Uma vez que a operação realizada foi a de produto cartesiano, onde é feita a combinação de cada elemento de um conjunto com todos os elementos do outro conjunto. Assim, há a necessidade de qualificar o tipo de junção, para podermos obter algum resultado concreto. NOME CLIENTE PEDIDO.COD_CLIENTE NUMERO PEDIDO Ana 720 97 SELECT cliente.codigo_cliente, pedido. codigo_cliente, num_pedido FROM cliente, pedido Ana 260 111 Ana 870 54 Ana 390 119 Ana 260 103 Ana 830 203 Ana 410 121 Ana 110 104 Ana 180 105 Ana 720 83 Ana 290 108 Ana 410 89 Flávio 720 97 Flávio 260 111

Recuperando Dados de Várias Tabelas (JOINS) Assim, há a necessidade de qualificar o tipo de junção, para podermos obter algum resultado concreto. Equação de JUNÇÃO CLIENTE CLIENTE Código_cliente Código_cliente Nome_cliente Nome_cliente Endereço Endereço Cidade Cidade CEP CEP UF UF CGC CGC IE IE PEDIDO PEDIDO Núm_pedido Núm_pedido Prazo_entrega Prazo_entrega Código_cliente Código_cliente Código_vendedor Código_vendedor c1 c2... cn p1 p2... pn SELECT cliente.codigo_cliente, pedido. codigo_cliente, num_pedido FROM cliente, pedido AND cliente.codigo_cliente =pedido.codigo_cliente

Recuperando Dados de Várias Tabelas (JOINS) Juntar a tabela cliente com pedido, identificando os pedidos de cada cliente. CLIENTE CLIENTE Código_cliente Código_cliente Nome_cliente Nome_cliente Endereço Endereço Cidade Cidade CEP CEP UF UF CGC CGC IE IE PEDIDO PEDIDO Núm_pedido Núm_pedido Prazo_entrega Prazo_entrega Código_cliente Código_cliente Código_vendedor Código_vendedor

Recuperando Dados de Várias Tabelas (JOINS) Juntar a tabela cliente com pedido, identificando os pedidos de cada cliente? CLIENTE CLIENTE Código_cliente PEDIDO Código_cliente PEDIDO Nome_cliente Nome_cliente Endereço Endereço Cidade Núm_pedido Cidade Núm_pedido CEP Prazo_entrega CEP Prazo_entrega UF Código_cliente UF Código_cliente CGC Código_vendedor CGC Código_vendedor IE IE SELECT cliente.codigo_cliente, pedido. codigo_cliente, num_pedido FROM cliente, pedido AND cliente.codigo_cliente=pedido.codigo_cliente NOME CLIENTE PEDIDO.COD_CLIENTE NÚMERPEDIDO Ana 720 97 Ana 720 101 Ana 720 137 Ana 720 148 Flávio 870 189 Jorge 110 104 Maurício 830 203 Rodolfo 410 121 Rodolfo 410 98 Rodolfo 410 127 Beth 20 143 Lívio 180 105 Susana 260 111 Susana 260 103 Susana 260 91 Susana 260 138 Renato 290 108 Sebastião 390 119

Problema: Quais clientes que têm prazo de entrega superior a 15 dias e que pertencem aos estados de São Paulo ( SP ) ou Rio de Janeiro (RJ)?

Problema: Select nome_cliente, UF, prazo_entrega from cliente, pedido Where UF IN ( SP, RJ') AND prazo_entrega > 15 AND cliente.cod_cliente = pedido.cod_cliente; NOME_CLIENTE UF PRAZO_ENTREGA Ana RJ 20 Maurício SP 30 Rodolfo RJ 20 Beth SP 30 Susana RJ 20

Exercício 7: - Mostrar os clientes e seus respectivos prazos de entrega, ordenados do maior para o menor.

ALIASES (sinônimos): Pode-se definir sinônimos, evitando escrever os nomes das tabelas nas qualificações de nome. A definição dos ALIASES é feita na clausula FROM. É utilizada normalmente nas outras clausulas (Where, order by, group by, having, select). Problema: - Apresentar os vendedores, ordenados por nome, que emitiram pedidos com prazos de entrega superiores a 15 dias e que tenham salários fixos igual ou superior a R$ 1.000,00. Select nome_vendedor, prazo_entrega from vendedor V, pedido P Where salário_fixo >= 1000.00 AND prazo_entrega > 15 AND V. cod_vendedor = P. cod_vendedor order by nome_vendedor;

Juntando mais de duas Tabelas Exerc 8: Mostre os clientes (ordenados) que têm prazo de entrega major que 15 dias para o produto QUEIJO e que sejam do Rio de Janeiro.

Exerc 9: Mostre todos os vendedores que venderam chocolate em quantidade superior a 10 Kg.

Exerc 10: Quantos clientes fizeram pedido com o vendedor João?

Problema: Quantos clientes da cidade do Rio de Janeiro, e Niterói tiveram seus pedidos tirados com o vendedor João?

Problema: Quantos clientes da cidade do Rio de Janeiro, e Niterói tiveram seus pedidos tirados com o vendedor João? Select cidade, número = COUNT (nome_cliente) from cliente C, pedido P, vendedor V Where nome_vendedor = 'João' AND CIDADE IN ('Rio de Janeiro', 'Niterói') AND V. cod_vendedor = P. cod_vendedor AND P. cod_cliente = V. cod cliente Group by cidade;

Utilizando Consultas Encadeadas (Subqueries) Subquery é quando o resultado de uma consulta é utilizado por outra consulta, de forma encadeada e contida no mesmo comando SQL. Sua forma geral: SELECT col1, col2 FROM tab1 WHERE col1, col2 IN ( SELECT col1, col2 FROM tab2 WHERE restrição);

Problema: Que produtos participam em qualquer pedido cuja quantidade seja 10?

Problema: Que produtos participam em qualquer pedido cuja quantidade seja 10? Select descrição from produto Where cod_produto IN ( Select cod_produto from item_pedido Where quantidade = 10 );

Exerc 11: Quais vendedores ganharam um salário fixo abaixo da média?

Exerc 12: Quais os produtos que não estão presentes em nenhum pedido? ( código e descrição) Select cód_produto, descrição from produto P Where not exists ( Select * from item_pedido Where cod_produto = P. cod_produto ) ;

Problema: Quais os vendedores que só venderam produtos por grama ('G )? Select DISTINCT cod_vendedor, nome vendedor from vendedor V Where G = ALL ( Select unidade from pedido P, item_pedido I, produto PR Where P. num_pedido = I. num_pedido AND I. cod_produto = PR. cod_produto AND p. cod_vendedor = V. cod vendedor ) ;

Exerc 13: Quais clientes estão presentes em mais de três pedidos?

Exerc 13: Quais clientes estão presentes em mais de três pedidos?

Combinando Resultados de Pesquisas ( UNION) Combina os resultados de duas ou mais colunas feitas sobre tabelas. Devem selecionar o mesmo número de colunas. As colunas selecionadas devem ser do mesmo tipo.

Problema: - Listar os nomes e códigos dos vendedores que têm salário fixo maior que RS 1.000,00 e nomes e códigos de clientes que residem no Rio de Janeiro. Select from Where codigo = cod_cliente, nome = nome_cliente cliente UF = RJ UNION Select cod_vendedor, nome_vendedor from vendedor Where salário_fixo > 1000.00

Adicionando Registro à Tabela Forma: INSERT INTO <nome da tabela> (<nome da(s) coluna(s)>) VALUES (<valores>);

Adicionando Registro à Tabela Adicionar a produto parafuso a tabela produto? Insert into produto values ( 108, 'Parafuso', 'Kg', 1.25 );

Adicionando Registros usando um SELECT Forma: INSERT INTO Problema: Select from <nome da tabela> (<nome da(s) coluna(s)>) <nome da(s) coluna(s)> <nome da tabela> Where <condição>; - Cadastrar como cliente os vendedores que emitiram mais de 50 pedidos. Usar para código de cliente o mesmo código de vendedor Insert into Cliente (cod_cliente, nome cliente) Select cod_vendedor, nome_vendedor, COUNT(*) from vendedor V, pedido p Where V. cod_vendedor = P. cod_vendedor having count ( * ) > 50 ;

Atualizando um Registro Forma: UPDATE <nome da tabela> Problema: Set <nome da(s) Coluna(s) > = valor Where <condição>; - Alterar o valor unitário do produto 'parafuso' de R$ 1.25 para R$ 1.62. update produto set val_unit = 1.62 Where descrição = 'Parafuso' ;

Problema: Pr- Atualizar o salário fixo de todos os vendedores em 27% mais uma bonificação de R$ 100,00. update vendedor set salário_fixo = (salario_fixo * 1.27) + 100.00;

Problema: - Acrescentar 2,5% ao preço unitário dos produtos que estejam abaixo da média dos preços, para aqueles comprados a Quilo. update produto set val_unit = val_unit * 1.025 Where val_unit < ( Select AVG ( val_unit ) from produto Where unidade = Kg ) ;

Apagando Registros da Tabela Forma: DELETE FROM <nome da tabela> WHERE <condição>;

Apagando Registros da Tabela Problema: - Apagar todos os vendedores com faixa de comissão nula. DELETE FROM vendedor Where faixa_ comissão IS NULL ;

Problema: Apagar todos os registros de pedidos realizados por vendedores fantasmas (operação caça-fantasma). DELETE FROM pedido P Where not exists ( Select cod_vendedor from vendedor ; Where cod_vendedor = P. cod_vendedor )