Projeto de Banco de Dados SQL-Consultas Comando SELECT Prof. Luiz Antônio Vivacqua C. Meyer (la.vivacqua@gmail.com)
Sintaxe Geral SELECT [ALL/DISTINCT] coluna1, coluna2,..., colunan FROM nome_tabela1, nome_tabela2,..., nome_tabelan [WHERE predicado] [GROUP BY coluna1, coluna2,..., colunax] [HAVING predicado] [ORDER BY coluna1[asc/desc], coluna2[asc/desc],..., colunay[asc/desc]];
Peça Fornecimento Fornecedor
Recuperação Simples: Obter a identificação de todas as peças fornecidas. Select id_peca from fornecimento;
Recuperação Simples sem ocorrência de duplicatas. Obter o código dos fornecedores que fornecem peça Select Distinct id_peca From fornecimento; Recuperação simples de toda a tabela. Obter todas as informações dos fornecedores Select * From Fornecedor;
Recuperação qualificada: Obter a identificacao dos fornecedores de SP com status > 20. Select id, nome From fornecedor Where Cidade = sp and status > 20; Obs: A condição ou predicado que segue WHERE pode incluir os operadores comparativos =, >, <, >=, <=, <> e os operadores lógicos AND, OR, NOT. Recuperação com Ordenação: Obter a identificação e o status de fornecedores de SP, na ordem decrescente de status. Select id, Status From fornecedor Where cidade = sp Order by status desc;
CONSULTA COM JUNÇÃO : RECUPERA DADOS DE MAIS DE UMA TABELA. Obter o nome dos fornecedores que fornecem peças. Select distinct nome From Fornecedor, Fornecimento Where Fornecedor.id=id_forn; Junção com condição adicional: Obter o nome do fornecedor que fornece a peça P2. Select distinct nome From Fornecedor, Fornecimento Where Fornecedor.id=id_forn and id_peca= p3 ;
Junção de três tabelas: Obter o nome das peças que são fornecidas por fornecedores do RJ Select Distinct Peca.nome From fornecedor S, peca P, fornecimento SP Where S.id = id_forn and P.id = id_peca and S.cidade= rj ; Inner Join Obter o nome dos fornecedores que fornecem peças. Select distinct nome From Fornecedor INNER JOIN Fornecimento ON fornecedor.id = id_forn;
LEFT JOIN Obter o nome dos fornecedores e a qtde fornecida de peças inclusive dos que não fazem fornecimento Select nome, qtde From Fornecedor LEFT JOIN Fornecimento ON fornecedor.id = id_forn; RIGHT JOIN O inverso do Left join Obter o nome das peças e o nome dos fornecedores na mesma cidade inclusive os fornecedores em outras cidades select P.nome, F.nome from peca P RIGHT JOIN fornecedor F ON P.cidade=F.cidade
Full Join Left Join + Right Join Select P.nome, F.nome, P.cidade, F.cidade from peca P FULL JOIN fornecedor F ON P.cidade=F.cidade
Funções embutidas COUNT retorna o número de linhas na tabela. SUM retorna a soma dos valores na coluna que tem que ser numérica. AVG retorna a média de valores na coluna que tem que ser numérica. MAX retorna o maior valor na coluna. MIN retorna o menor valor na coluna. Obter o número total de fornecedores. Select count(*) From fornecedor;
Obter o número de fornecedores que fornecem peças Select count(distinct id_forn) From fornecimento; Obter o número de fornecimentos para a peça P2. Select count(*) From Fornecimento Where id_peca = p2
Obter a quantidade total de peças P2 fornecidas. Select SUM(Qtde) From fornecimento Where id_peca = p2 ; Uso do Group By A cláusula group by pode ser usada em conjunto com funções de forma de agrupar o resultado segundo uma ou mais colunas.
Obter a quantidade total de cada peça fornecida. Select id_peca, SUM(Qtde) From fornecimento Group by id_peca; Uso do having A cláusula having funciona para os Grupos assim como o Where para linhas.
Obter a identificação da peça e a soma das quantidades fornecidas de todas as peças fornecidas com qtde > 500. Select id_peca, SUM(Qtde) From fornecimento Group by id_peca Having SUM(Qtde) > 500;
Recuperação com Like _ vale para qq caracter % vale para qq sequência de n caracteres onde n pode ser 0. Negação Not Like Obter a identificação e a cor das peças cujos nomes começam com a letra R. Select id, cor From Peca Where nome like r%';
Obter a identificação, peso e cor das peças cujos nomes começam com a letra r, tem b na terceira letra e terminam com e. Select id, peso, cor From Peca Where nome like r_b%e'; Recuperação com NULL Usado para testar a presença ou ausência de valores nulos. Obter a identificação dos fornecedores com status igual a nulo. Select id From fornecedor Where status IS NULL;
Recuperação com Subconsulta Subconsulta é uma expressão SELECT FROM WHERE aninhada dentro de uma cláusula WHERE ou HAVING. É executada uma vez antes da execução da consulta externa Obter os nomes dos fornecedores que fornecem a peça P2. Select distinct nome From fornecedor Where id IN (Select id_forn From fornecimento Where id_peca = p2 );
Subconsulta com vários níveis de aninhamentos. Obter os nomes dos fornecedores que forneçam pelo menos uma peça vermelha. Select distinct nome From fornecedor Where id IN (Select id_forn From fornecimento Where id_peca IN (Select id From Peca where cor = 'verde'));
Subconsulta c/ operador diferente de IN Obter a identificação e o nome dos fornecedores localizados na mesma cidade que o fornecedor S1 Select id, nome From fornecedor Where cidade = (Select cidade From fornecedor Where id = s1 );
Função numa subconsulta Obter o nome e a cidade dos fornecedores cujo status seja inferior ao maior status existente. Select nome, cidade From fornecedor Where status < (Select MAX(status) From fornecedor);
Operadores de conjunto SQL - CONSULTAS Combinam os resultados das consultas que devem ter o mesmo número de colunas com o mesmo tipo de dados. Union É o operador de união da teoria de conjuntos tradicionais. O resultado é a união dos resultados da cada consulta. As duplicidades são sempre eliminadas. Obter a identificação das peças que pesam mais de 15 ou que são fornecidas por S2. Select id From Peca Where peso > 15 UNION Select id_peca From fornecimento Where id_forn = S2 ;
Consulta com Intersect É o operador de interseção de conjuntos. O resultado é a interseção dos resultados da cada consulta. Obter as cidades onde existam fornecedores e peças. Select cidade From fornecedor INTERSECT Select cidade From Peca;
Consulta com EXCEPT É o operador de subtração de conjuntos. O resultado apresenta as linhas da primeira consulta que não estão na segunda consulta. Obter as cidades onde existam fornecedores e que não existam peças. Select cidade From fornecedor EXCEPT Select cidade From Peca;