You are on page 1of 7

APOSTILA

DE

SQL Comando SELECT


Apostila de SQL Comando SELECT

Professor Jean A. A. Vieira


CPS ETEC Dr. Carolino da Motta e Silva / UNIPINHAL

Instruo SELECT

Esta apostila foi desenvolvida para auxiliar os alunos a compreenderem melhor o funcionamento do comando SELECT, um dos comandos mais importantes da programao utilizando Banco de Dados. O comando SELECT que pertence a linguagem SQL totalmente compatvel com o SQL Padro ANSI, que o oficial na maioria dos bancos de dados, ento algumas clusulas podem no funcionar em outros bancos, porm na maioria dos SGBD ela ira funcionar sem maiores problemas. Vale lembrar que os estudos de informtica no se completa com aulas praticas nem tericas, mas sim com o empenho do prprio aluno (voc), em praticar exerccios de interesse particular ou coletivo em busca de respostas as duvidas que surgiro.

A Instruo SELECT Instrui o Banco de Dados para retornar a informao como um conjunto de registros conforme comandado. A Sintaxe: SELECT [predicado { * | tabela.* | [tabela.]campo1 [AS alias1] [, [tabela.]campo2 [AS alias2] [, ...]]} FROM expressotabela [, ...] [IN bancodedadosexterno] [WHERE... ] [GROUP BY... ] [HAVING... ] [ORDER BY... ] [WITH OWNERACCESS OPTION]

As partes que compes o SELECT : predicado - Um dos seguintes predicados: ALL, DISTINCT, DISTINCTROW ou TOP. Voc usa o predicado para restringir o nmero de registros que retornam. Se nenhum for especificado, o padro ser ALL. * (asterisco) - Especifica que todos os campos da tabela ou tabelas especificadas so selecionados.
Apostila de SQL Comando SELECT

Professor Jean A. A. Vieira


CPS ETEC Dr. Carolino da Motta e Silva / UNIPINHAL

tabela - O nome da tabela que contm os campos dos quais os registros so selecionados. campo1, campo2 - Os nomes dos campos dos quais os dados sero recuperados. Se voc incluir mais de um campo, eles sero recuperados na ordem listada. alias1, alias2 - Os nomes que sero usados como ttulos de colunas em vez dos nomes originais das colunas na tabela. O nome da tabela ou tabelas contendo os dados que voc quer recuperar. Banco de dados externo - O Nome do banco de dados (base de dados) que contm as tabelas em expresso tabela se no estiver no banco de dados atual.

IMPORTANTE: - A instruo SELECT no muda os dados no banco de dados. SELECT normalmente a primeira palavra em uma instruo SQL. A maior parte das instrues SQL so instrues SELECT. A sintaxe mnima da instruo SELECT : SELECT campos FROM tabela Voc pode usar um asterisco (*) para selecionar todos os campos na tabela. O exemplo abaixo seleciona todos os campos na tabela Funcionrios: SELECT * FROM Funcionrios; Se o nome de um campo estiver includo em mais de uma tabela na clusula FROM, preceda-o com o nome da tabela e o operador . (ponto). No exemplo abaixo, o campo Departamento est nas tabelas Funcionrios e Supervisores. A instruo SQL seleciona Departamento da tabela Funcionrios e NomeSupv da tabela Supervisores:

SELECT Funcionrios.Departamento, Supervisores.NomeSupv FROM Funcionrios INNER JOIN Supervisores WHERE Funcionrios.Departamento = Supervisores.Departamento;

Apostila de SQL Comando SELECT

Professor Jean A. A. Vieira


CPS ETEC Dr. Carolino da Motta e Silva / UNIPINHAL

Se voc quiser um nome de campo diferente ou um nome que no esteja implcito na expresso usada para gerar o campo, use a palavra reservada AS. O exemplo abaixo usa o ttulo Nasc para nomear o objeto Field retornado no objeto Recordset resultante: SELECT DataNasc AS Nasc FROM Funcionrios;

Sempre que voc usar funes de Totais que retornem nomes de objetos Field ambguos ou duplicados, voc precisar usar a clusula AS para fornecer um nome alternativo para o objeto Field. O exemplo abaixo usa o ttulo Contagem para nomear o objeto Field retornado no objeto Recordset resultante: SELECT COUNT(FuncionrioID) AS Contagem FROM Funcionrios; Voc pode usar outras clusulas na instruo SELECT para restringir e organizar posteriormente os seus dados retornados.

GROUP BY opcional. Valores de resumo so omitidos se no houver qualquer funo aggregate SQL na instruo SELECT. Os valores Null nos campos GROUP BY so agrupados e no omitidos. No entanto, os valores Null no so avaliados em qualquer funo aggregate SQL. Use a clusula WHERE para excluir linhas que voc no quer agrupadas e use a clusula HAVING para filtrar os registros aps eles terem sido agrupados. A no ser que contenha dados Memo ou OLE Object, um campo na lista de campos GROUP BY pode fazer referncia a qualquer campo em qualquer tabela listada na clusula FROM. Mesmo que o campo no esteja includo na instruo SELECT, fornecida a instruo SELECT, inclua pelo menos uma funo SQL. O programa principal de banco de dados do Jet no pode agrupar campos Memo ou OLE Objects. Todos os campos na lista de campos SELECT devem ser includos na clusula GROUP BY ou includos como argumentos em uma funo aggregate SQL. HAVING opcional. HAVING semelhante a WHERE, que determina quais registros so selecionados. Depois que os registros so agrupados com GROUP BY, HAVING determina quais registros so exibidos: SELECT CategoriaID, Sum(UnidadesNoEstoque) FROM Produtos GROUP BY CategoriaID HAVING Sum(UnidadesNoEstoque) > 100 AND LIKE "BOS*"; Uma clusula HAVING pode conter at 40 expresses vinculadas por operadores lgicos, como And ou Or.

Apostila de SQL Comando SELECT

Professor Jean A. A. Vieira


CPS ETEC Dr. Carolino da Motta e Silva / UNIPINHAL

ORDER BY opcional. Entretanto, se voc quiser exibir seus dados na ordem classificada, voc deve utilizar ORDER BY. O padro ordem de classificao ascendente (A a Z, 0 a 9). Os dois exemplos abaixo classificam os nomes dos funcionrios pelo sobrenome. SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome; SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome ASC; Para classificar em ordem descendente (Z a A, 9 a 0), adicione a palavra reservada DESC ao final de cada campo que voc quiser classificar em ordem descendente. O exemplo abaixo seleciona salrios e os classifica em ordem descendente SELECT Sobrenome, Salrio FROM Funcionrios ORDER BY Salrio DESC, Sobrenome; Se voc especificar um campo que contm dados Memo ou OLE Objects na clusula ORDER BY, um erro ocorrer. O programa principal de banco de dados do Jet no classifica campos deste tipo. ORDER BY normalmente o ltimo item em uma instruo SQL. Voc pode incluir campos adicionais na clusula ORDER BY. Os registros so classificados primeiro pelo primeiro campo listado depois de ORDER BY. Os registros que tiverem valores iguais naquele campo so classificados pelo valor no segundo campo listado e assim por diante.

Exemplos de Comando SELECT:


Exemplo da instruo SELECT, clusula FROM Esse exemplo seleciona os campos "Sobrenome" e "Nome" de todos os registros da tabela "Funcionrios". SELECT Sobrenome, Nome FROM Funcionrios Esse exemplo seleciona todos os campos da tabela "Funcionrios". SELECT Funcionrios.* FROM Funcionrios; Esse exemplo conta o nmero de registros que tm uma entrada no campo "CdigoPostal" e nomeia o campo retornado como "Tcp". SELECT Count(CdigoPostal) AS Tcp FROM Clientes; Esse exemplo mostra qual seria o salrio se cada funcionrio recebesse um aumento de 10 porcento. No altera o valor original dos salrios. SELECT Sobrenome, Salrio AS Atual, Salrio * 1.1 AS Proposto FROM Funcionrios;
Apostila de SQL Comando SELECT

Professor Jean A. A. Vieira


CPS ETEC Dr. Carolino da Motta e Silva / UNIPINHAL

Esse exemplo coloca o ttulo Nome no topo da coluna "Sobrenome". O ttulo Salrio exibido no topo da coluna "Salrio". SELECT Sobrenome AS Nome, Salrio FROM Funcionrios; Esse exemplo mostra o nmero de funcionrios e os salrios mdio e mximo. SELECT Count(*) AS [Total de Funcionrios], Avg(Salrio) AS [Salrio Mdio], Max(Salrio) AS [Salrio Mximo] FROM Funcionrios; Para cada registro, mostra Sobrenome e Salrio no primeiro e ltimo campos. A seqncia de caracteres "tem um salrio de" retornada como o campo do meio de cada registro. SELECT Sobrenome, 'tem um salrio de', Salrio FROM Funcionrios; Exemplo de clusula GROUP BY Esse exemplo cria uma lista de nomes de departamentos nicos e o nmero de funcionrios em cada um destes departamentos. SELECT Departamento, Count([Departamento]) AS Tbc FROM Funcionrios GROUP BY Departamento; Para cada ttulo de funo nico, calcula o nmero de funcionrios do departamento de Vendas que tm este ttulo. SELECT Ttulo, Count(Ttulo) AS Tbc FROM Funcionrios WHERE Departamento = 'Vendas' GROUP BY Ttulo; Esse exemplo calcula o nmero de itens em estoque para cada combinao de nmero e cor do item. SELECT Item, Sum(Unidades) AS Tbc FROM ItensEmEstoque GROUP BY Item, Cor; Exemplo de clusula HAVING Esse exemplo seleciona os ttulos de cargos do departamento de Produo atribudos a mais de 50 funcionrios. SELECT Ttulo, Count(Ttulo) FROM Funcionrios WHERE Departamento = 'Produo' GROUP BY Ttulo HAVING Count(Ttulo) > 50;

Apostila de SQL Comando SELECT

Professor Jean A. A. Vieira


CPS ETEC Dr. Carolino da Motta e Silva / UNIPINHAL

Esse exemplo seleciona os departamentos que tenham mais de 100 funcionrios. SELECT Departamento, Count([Departamento]) FROM Funcionrios GROUP BY Departamento HAVING Count(Departamento) > 100; Exemplo de clusula ORDER BY As instrues SQL mostradas abaixo usam a clusula ORDER BY para classificar os registros em ordem alfabtica e depois por categoria. Esse exemplo ordena os registros pelo sobrenome, em ordem descendente (ZA). SELECT Sobrenome, Nome FROM Funcionrios ORDER BY Sobrenome DESC; Esse exemplo ordena, primeiro, por categoria ID e depois por nome do produto. SELECT CategoriaID, ProdutoNome, PreoUnit FROM Produtos ORDER BY CategoriaID, NomeProduto;

Apostila de SQL Comando SELECT

Professor Jean A. A. Vieira


CPS ETEC Dr. Carolino da Motta e Silva / UNIPINHAL