Você está na página 1de 28

SQL - Structured Query Language

Linguagem de Consulta Estruturada


1.GERAL .1.Introduo SQL .2.Funes VFP 2.Select 3.Especiais 4.Outros 5.Exerccios Comandos

ao .1.Comando .1.Relacionamento .1.Comando .1.Com Alunos I Select (Join) Insert do .2.Clusula .2.Operadores Where .3.Opo .3.Usando Like no Query Where .2.Comando .2.Com Alunos II Update Sub- .3.Comando .3.Com Duplicatas I Delete .4.Com Duplicatas II e .5.Com Funcionrios .6.Com Join .7.Especiais .8.Insert,Update,Delete .9.Download de dbf.

.4.Clusula .4.Clusula Union Order By .5.Funes .5.Full, Left do SQL Right Join .6.Clusula .6.Clusula Into Group By .7.Clusula Having .8.Opo Top .9.Opo Distinct

Respostas dos Exerccios: AlunosI AlunosII DuplicatasI DuplicatasII Funcionrios Join Especiais Insert/Update/Delete

1.1.Introduo ao SQL
SQL a linguagem padro da indstria de bancos de dados relacionais. O padro ANSI

a adotou em 1986. Os principais Bancos de Dados Relacionais aceitam alguma forma do SQL, procurando estar no padro ANSI. Abaixo, algumas terminologias em Banco de Dados: . Tabela - Estrutura bsica de armazenamento de dados; . Linha - Combinao dos valores das colunas em uma tabela. O mesmo que registro; . Coluna - Representa um tipo de dados em uma tabela. descrita por um nome de coluna; . Atributo - rea que pode conter um tipo de dados. a interseo de uma linha com uma coluna. O mesmo que campo; . Chave Primria - a coluna que identifica com exclusividade cada linha de uma tabela; . Chave Estrangeira - uma coluna ou conjunto de colunas referente a uma chave primria de uma outra tabela. A partir da chave estrangeira podemos relacionar tabelas (join).

Incio da Pgina

1.2.Funes do VFP
Durante a execuo de uma consulta, podemos escolher o formato de exibio do campo. Para isso utilizamos algumas funes do aplicativo utilizado. Lembre-se que o SQL utilizado em vrios aplicativos, e cada aplicativo possui suas prprias funes. As funes de converso de dados do VFP so:

Funo DATE() DTOC() DAY() YEAR() SUBSTR()

Descrio Retorna data atual do Sistema Converte campo data para caracter Retorna apenas dia do campo data Retorna apenas ano do campo data Retorna uma parte caracterSUBSTR(nome,1,20) do campo

Exemplo DATE() DTOC(nascimento) DAY(nascimento) MONTH(nascimento) YEAR(nascimento)

MONTH() Retorna apenas ms do campo data

VAL()

Converte campo caracter para numrico

VAL(cidade)

WHERE.

As funes podem ser usadas tanto no SELECT quanto na clusula

Incio da Pgina

2.1.Comando Select
O comando principal do SQL o comando recuperador de informaes, o SELECT. Este comando permite recuperar (exibir) dados de uma ou mais tabelas. Quando utilizamos em mais de uma tabela, devemos utilizar o relacionamento de chaves primrias e estrangeiras para transformar dois registros em um s. Na verdade, a tabela criada apenas lgica. Na execuo do Select existem apenas duas clusulas obrigatrias: o prprio Select, que define as colunas a serem exibidas e o FROM, que define as tabelas que sero utilizadas. Exemplo: SELECT * FROM alunos onde "*" significa que todas as colunas sero exibidas e "Alunos" o nome da tabela. No lugar do "*", voc pode informar os campos que voc deseja exibir. Tambm pode alterar o nome da coluna exibida (apenas para o resultado do select). Exemplo: alunos SELECT aluno Cdigo, nome, nascimento Data FROM

O comando acima exibe trs campos da tabela alunos, sendo que o primeiro e o terceiro campo tiveram o nome da coluna alterada para Cdigo e Data, respectivamente.

Incio da Pgina

2.2.Clusula Where
Responsvel por filtrar linhas da tabela, definindo uma ou mais condies. Exemplo: Exibir todos os campos da tabela ALUNOS onde o sexo igual a "F": Select * From Alunos Where sexo = "F" Na clusula Where podemos utilizar mais de uma condio, ligando-as com AND e OR. Como estas ligaes lgicas so do SQL e no do aplicativo, NO usamos os pontos no incio e no fim (.and. e .or.), utilizadas normalmente na linguagem de programao. Outras duas opes do Where so o IN e o BETWEEN. O IN semelhante ao OR, podendo usar qualquer valor (numrico, data ou caracter) e seus valores de comparao ficam entre parnteses. Usamos o IN quando os valores de comparao so mnimos ou quando h intervalos entre eles (01 ou 05, 'A' ou 'M' ou 'T'). J o BETWEEN uma opo de faixa de valores, que no contm intervalos (salrios entre R$500 e R$900, nomes de 'A' at 'F'). Exemplos: Select * from alunos where cidade in ("01","04","37") Select * from alunos where sexo = "F" and turno in ("M","V") Select * from alunos where month(nascimento) between 1 and 6 Select * from alunos where nome in ("A","C") and day(nascimento) between 10 and 20 Observao: Podemos utilizar a opo NOT para condies contrrias do IN e BETWEEN.

Incio da Pgina

2.3.Opo Like no Where


Esta opo utilizada na pesquisa parcial de dados, como nome incompleto de cliente, sobrenome igual a nome, etc. Para utilizar o Like, definimos que tipo de substituio queremos em um campo caracter: substituio de um ou mais caracteres. Utilizamos: _ (underline) : define a substituio de apenas um caracter; % (percentual): define a substituio de uma cadeia de caracteres (string), no importa o tamanho. Podemos usar a opo NOT para negao. Exemplos: Listar todas as pessoas onde o nome inicia com 'EDUARDO' Select * From alunos Where nome Like 'EDUARDO %' 'PAULA' Listar todas as pessoas que possuam, nome ou sobrenome, Select * From alunos Where nome Like '% PAULA %'

Listar todos os nomes onde a segunda letra 'A' Select * From alunos Where nome Like '_A%' Observao: Se precisamos pesquisar uma string que possua o sinal _ ou %, devemos utilizar o parmetro ESCAPE, precedendo o caracter com o simbolo informado no ESCAPE. Exemplo: Pesquisar palavras que iniciam com '%': Select * From alunos Where nome Like '\%%' Escape '\' Incio da Pgina

2.4.Clusula Order By
Ordena a exibio por uma ou mais colunas definidas (e separadas por vrgula). Exemplo: SELECT aluno, nome,curso ;

FROM Alunos ; ORDER BY curso, nome Os campos que forem aparecer na lista definida pelo SELECT. usar a opo DESC para ordernar de forma j padro. Podemos substituir o nome Exemplo: usados na clusula ORDER BY no so obrigados a Aps o nome da coluna ordenada, podemos

descendente, seno a opo ASC (ascendente) que do campo pelo seu nmero da posio no select.

SELECT aluno, nome, curso ; FROM alunos ; ORDER BY 3, 2

Incio da Pgina

2.5.Funes do SQL
O SQL possui funes prprias que calculam valores agrupando mais de uma linha. Pode ser a contagem de linhas (registros) ou um clculo com um campo numrico da tabela. AVG() : calcula a mdia de uma coluna de dados numricos. COUNT(): conta o nmero de itens selecionado em uma coluna. MIN() : determina o menor valor de Item_Selecionado em uma coluna. coluna. MAX() SUM() : determina o maior valor de Item_Selecionado em uma : totaliza uma coluna de dados numricos. Exemplos:

Qual a mdia de dbitos dos alunos da cidade "01" Select avg(debito) from alunos where cidade = "01" Quantos alunos do sexo feminino estudam o curso "02" select count(*) from alunos where sexo = "F" and curso = "02" Qual o menor e o maior dbito dos alunos do turno matutino select min(debito), max(debito) from alunos where turno = "M" Qual a soma e quantos alunos devem acima de R$ 100,00 select sum(debito), count(*) from alunos where debito > 100

Incio da Pgina

2.6.Clusula Group By
Agrupa as linhas de consulta com base nos valores de uma ou mais colunas. O parmetro pode ser o nome do campo ou seu nmero no resultado do comando Select. A clusula Group By muito til quando a utilizamos para trabalhar junto s funes do comando Select, como encontrar a soma de um campo numrico, dependendo de outro campo (sum), ou simplesmente contar o nmero de registro agrupados (count). Exemplo: Quantos alunos existem em cada curso? Select curso, count(*) Quantidade From alunos GROUP BY CURSO Quantos alunos estudam por turno e curso? Select turno, curso, count(*) From alunos GROUP BY 1, CURSO

Incio da Pgina

2.7.Clusula Having
Especifica uma condio de filtragem que os grupos devem satisfazer para que sejam

includos nos resultados da consulta. HAVING deve ser utilizada com GROUP BY. Ela pode incluir quantas condies de filtragem voc desejar, conectadas com o operador AND ou OR. Voc tambm pode utilizar NOT para inverter o valor de uma expresso lgica. A maior importncia da clusula Having ser utilizada como o WHERE, porm para o resultado do GROUP BY. No where, no h como utilizar as funes do SELECT dentro do where (sum, count, min ...); somente o HAVING aceita estas funes na filtragem. Exemplo: Quantos alunos existem em cada curso? Exiba apenas os que possuem 44 alunos. Select curso, count(*) Quantidade From alunos group by curso ; HAVING count(*) = 44 Quantos alunos estudam por turno e curso, onde o menor dbito igual a R$10,00? Select turno, curso, count(*) From alunos GROUP BY 1, CURSO ; HAVING MIN(DEBITO) = 10

Incio da Pgina

2.8.Opo Top
Executa uma query onde o resultado da consulta contm um nmero especfico de linhas ou uma porcentagem de linhas no resultado da consulta. Voc deve incluir uma clusula ORDER BY quando incluir a clusula TOP. A clusula ORDER BY especifica as colunas nas quais a clusula TOP determina o nmero de linhas para incluir no resultado da consulta. Observao: se o campo ordenado se repetir (data, valor) podemos ter mais linhas do que definimos. Exemplos:

Selecionar apenas as 5 primeiras linhas de alunos ordenada pela chave primria Select Top 5 aluno, nome From alunos Order By nome Quais so os dois maiores dbitos de alunos? Select top 2 aluno, nome, debito from alunos order by debito

desc

Quais so os 2% maiores dbitos de alunos? Select top 2 PERCENT aluno, nome, debito from alunos order by debito desc

Incio da Pgina

2.9.Opo Distinct
Uma seleo padro executada com a opo ALL, que trabalha com todas as linhas da(s) tabela(s). A opo DISTINCT exclui linhas duplicadas das colunas selecionadas. Observao: Voc s pode utilizar DISTINCT uma vez em cada SELECT. Exemplo: Exibir as linhas existentes da tabela alunos cidade e turno: Select Distinct cidade, turno from alunos que combinam

Incio da Pgina

3.1.Relacionamento (Join)
Para criarmos um banco de dados, a anlise dos dados (utilizando Ferramentas CASE) deve gerar informaes normalizadas para no haver armazenamento redundante. A partir do DER (Diagrama Entidade-Relacionamento) ligamos as chaves primrias s chaves estrangeiras para identificar as relaes entre tabelas. No SQL, esta ligao sempre deve ser informada no comando para recuperar uma Query que pode possuir campos de mais de uma tabela. Por exemplo, no comando Select, para exibir o cdigo do funcionrio e a UF da sua cidade devemos executar: SELECT funcions.funcionario, cidades.uf FROM funcions, cidades ; WHERE funcions.cidade = cidades.cidade Note que o campo PODE ser precedido do nome da tabela mais um ponto, para mostrar de qual tabela corresponde o campo. Se exibir nomes de campo iguais de duas tabelas, voc DEVE colocar o nome da tabela antes do campo. Exemplo: SELECT funcions.nome, cidades.nome FROM funcions, cidades ; WHERE funcions.cidade = cidades.cidade De qualquer forma, sempre a condio de ligao a comparao entre chave primria e chave estrangeira. NUNCA esquea de colocar esta condio de ligao, seno haver uma gerao de relacionamento errado (N para N invlido). O nome da tabela pode ser substitudo, na identificao dos campos, por um apelido (alias). Desta forma, voc estar customizando a digitao do comando. Exemplo: SELECT f.funcionario, f.nome, c.cidade, c.nome, c.uf FROM funcions F, cidades C ; WHERE f.cidade = C.cidade A Query exibida no uma tabela (ou viso) fsica. lgica. Por isso, no haver criao fsica (no HD) de uma nova tabela. Cuidado: se h join com duas tabelas, h uma condio de ligao. Se h join com mais de duas tabelas, haver mais de uma condio de ligao. Exemplo: SELECT f.nome, c.nome, e.nome FROM funcions f, cidades c, estab e ; WHERE f.cidade = c.cidade AND f.estab = e.estab

Incio da Pgina

3.2. Operadores
As colunas recuperadas pelo comando SELECT, at agora, foram atributos das tabelas em sua forma simples ou utilizando funes do aplicativo (val(), month(), year(), etc). Mas tambm podemos gerar colunas que so resultados de clculos aritmticos, utilizando operadores como: +, -, *, /, **. Exemplos: Exiba o nome do funcionrio e seu salrio com aumento de 5% SELECT nome, salario * 1.05 Com_Aumento FROM funcions Exiba a duplicata 10 com o valor menos R$3,00 e o campo pago dividido por 3 SELECT duplicata, valor - 33 Valor, pago / 3 Dividido FROM duplics Por falta de exemplo, digite o comando abaixo SELECT nome, 3 ** 3 Potencia FROM funcions where salario > 1400 Outros exemplos de alterao das colunas recuperadas so a concatenao e as funes substr() e iif(). Normalmente so utilizados para emisso de relatrio ou consultas: Exiba dia e ano do nascimento e cdigo mais nome concatenados dos funcionarios SELECT substr(dtoc(nascimento),1,5), funcionar+' - '+nome FROM funcions Exiba o valor das duplicatas e 'alto ' se valor maior que R$20,00 seno 'baixo' SELECT valor, iif(valor>20,'alto ','baixo') FROM duplics Incio da Pgina

3.3. Sub-Query
A clusula WHERE do comando Select serve para condies, o nmero de linhas recuperadas numa query. Porm, pode haver situao que a pode ser concretizada com as informaes atuais do Select. Para isso, usamos o um Select para auxiliar na condio da clusula WHERE, tendo um select dentro de (Sub-Query). Exemplo: filtrar, com condio no resultado de outro select

Quais so os funcionrios que recebem mais que a mdia de todo o cadastro? .Forma Simples: Select avg(salario) from funcions (para achar o salario medio: 348,85) Select * from funcions where salario > 348.85 .SUB-QUERY: Select * from funcions where salario > (select avg(salario) from funcions) Quais so os funcionrios do mesmo estabelecimento dos funcionrios 24 e 127? Select * from funcions where estab in ; (select estab from funcions where val(funcionar) in (24,127)) OBSERVAES: . Ateno com a quantidade de linhas do segundo select. Se retornar uma linha, pode-se utilizar =, >, <, <>. Se retornar mais de uma linha, TEM que utilizar IN. . Repare nos exemplos acima: o resultado da sub-query deve ser sempre compatvel com o campo da condio do Select principal. Incio da Pgina

3.3. Clusula UNION


Combina os resultados finais de um SELECT com os resultados finais de outro SELECT. Como padro, UNION verifica os resultados combinados e elimina linhas duplicadas. Utilizando ALL, o comando no elimina linhas duplicadas. Observaes Importantes para o UNION: No possvel utilizar UNION para combinar subconsultas; Os dois comandos SELECT devem ter o mesmo nmero de colunas na sada da consulta;

Cada coluna nos resultados da consulta de um SELECT deve ter o mesmo tipo de dado e a mesma largura da coluna correspondente ao outro SELECT; Se uma clusula ORDER BY estiver includa, ela afetar o resultado inteiro. S utilize nmero de coluna. Exemplos: Crie uma query exibindo os bancos e estabelecimentos em ordem alfabtica: Select * from bancos UNION Select * from estabs order by 2 Crie uma query exibindo os bancos e cidades em ordem alfabtica (estruturas diferentes): Select banco+space(3),nome+space(10),space(2) from bancos UNION ; Select cidade, nome, uf from cidades order by 2 UNION mais complexo. Junte um select de totais de cooperados por banco e outro select de cooperados. Exiba na ordem de sub-totais e cooperados por banco: Select 1,count(*),banco,space(32) from cooperados group by 3 UNION ; Select 2,val(cooperado),banco,nome from cooperados order by 3,1 Incio da Pgina

3.4. Clusula JOIN


Normalmente, criamos querys com relacionamentos entre tabelas para saber informaes que possuem realmente relacionamento (nome do estabelecimento do funcionario, nome da uf do funcionario, etc). Porm, em algum momento, podemos precisar justamente do contrrio, isto , registros que no se relacionam com a outra tabela. Motivo: a chave primria de uma tabela no existe na chave secundria de outra tabela. INNER JOIN - especifica que o resultado da consulta contm somente linhas de uma tabela, que correspondem a uma ou mais linhas em outra tabela. O mesmo uso do Where que conhecemos. LEFT JOIN - especifica que o resultado da consulta contm todas as linhas da tabela esquerda da palavra-chave JOIN, correspondendo apenas s linhas da tabela direita da palavra-chave JOIN. RIGHT JOIN - especifica que o resultado da consulta contm todas as linhas da tabela direita da palavra-chave JOIN, correspondendo apenas s linhas da tabela esquerda da palavra-chave JOIN. FULL JOIN - especifica que o resultado da consulta contm todas as linhas correspondentes e no correspondentes de ambas as tabelas.

ON - especifica as condies para as quais as tabelas so associadas. EXEMPLO: Quais so as cidades que no possuem nenhum aluno cadastrado de sua procedncia: SELECT a.cidade, c.cidade, c.nome from alunos a RIGHT JOIN cidades c ; ON a.cidade = c.cidade where a.cidade = space(2)

Incio da Pgina

3.4. Clusula INTO


Especifica onde os resultados da consulta devem ser armazenados. Destino pode ser: TABLE - Cria um arquivo do tipo DBF CURSOR - Cria um cursor temporrio. Mais utilizado para relatrios. ARRAY - Cria uma varivel matriz do tamanho do nmero de linhas x colunas da query, onde a primeira ocorrncia a linha e a Segunda ocorrncia a coluna. EXEMPLOS: Crie uma tabela de alunos da cidade 04 chamada cidade04.dbf: SELECT * from alunos where cidade = "04" INTO TABLE cidade04 Crie um curso com cdigo e nome do aluno e nome da sua cidade: SELECT a.aluno,a.nome,c.nome from alunos a, cidades c where a.cidade = c.cidade ; INTO CURSOR alunocid Gere em uma varivel matriz a quantidade de alunos da cidade 04: SELECT COUNT(*) from alunos where cidade = "04" INTO ARRAY x

Incio da Pgina

4.1. Comando INSERT


Inclui um registro ao final de uma tabela contendo os valores de campo especificados. Quando o registro a ser adicionado for de uma tabela do banco de dados, com definio de integridade referencial, chave primria e chaves secundrias poder haver problemas da insero como repetio da chave primria e campos no nulos. Clusulas: INTO tabela - Define o nome da tabela (nome_de_campos) - lista dos campos do registro que recebero os valores do VALUES VALUES (valores) - Valores a serem atribudos nos campos identificados. Devem estar na mesma sequncia e mesmo tipo dos campos. Exemplo: Incluir um registro na correspondentes: INSERT INTO cidades ("00020","BETIM","MG") tabela (cidade, cidades nome, com uf) valores VALUES

Incluir um registro na tabela Funcions: INSERT INTO funcions (funcionar,nome,nascimento,salario) ; VALUES ("000090","MARIA JUVENTINA",ctod("05/05/80"),700)

Incio da Pgina

4.2. Comando UPDATE


Altera valores de uma ou mais linhas da tabela especificada. Devem ser tomados os mesmos cuidados do comando INSERT quanto a chave primria e integridade referencial. Sintaxe: UPDATE nome_tabela - identifica o nome da tabela SET atribuio1,atribuio n - define os campos a serem alterados WHERE condio - especifica os registros a serem alterados. Se clusula Where for

omitida a atualizao ser feita para todos os registros. Exemplo: Altere a UF da cidade 20 da tabela cidades para "RJ" UPDATE cidades SET uf = "RJ" WHERE cidade = "00020" 5% Altere o salrio dos funcionrios da cidade "01", acrescentando UPDATE funcions SET salario = salario * 1.05 WHERE cidade = "01"

Incio da Pgina

4.3. Comando DELETE


Marca um ou mais registros para excluso. A excluso definitiva ser feita quando utilizamos o comando PACK. Para reintegrar os registros marcados para excluso utilizamos o comando RECALL ALL. Sintaxe: DELETE FROM nome_tabela - Define o nome da tabela dos registros a serem excluidos WHERE condio - Especifica os registros a serem excluidos. Exemplo: Excluir o registro onde cdigo do funcionrio 000735 DELETE FROM funcions WHERE funcionar = "000735" Excluir os funcionarios que recebem mais de R$ 1000,00. Reintegre-os depois DELETE FROM funcions WHERE salario > 1000 SELECT FUNCIONS RECALL ALL

Incio da Pgina

5.1.Exerccios com Alunos I


SELECT com WHERE Observaes dos campos Campo SEXO -> M Campo TURNO -> M Campo SITUACAO -> A Suplementar (TABELA ALUNOS.DBF) Masculino F - Feminino Matutino V - Vespertino - Aprovado R - Reprovado

N - Noturno E - Exame

1) Qual o nome dos alunos do sexo feminino da tabela Alunos? 2) Quais so os alunos da cidade 04 e que fazem o curso 03? 3) Qual a cidade, o curso e o sexo dos alunos do turno matutino (valor 'M')? 4) Quais so as alunas que nasceram em Outubro? 5) Quem nasceu antes de 1980? 6) Quem nasceu em novembro e veio das cidades 01, 03 e 04? 7) Qual o nome, o turno, o curso e o nascimento que estuda a noite, nasceu em 1980 e possui um nome que inicia com A, M ou F? 8) Quem far Exame Suplementar no curso 04? 9) Quais so as mulheres que estudam de manh, e que fazem o curso 01 ou o curso 04? 10) Quem nasceu no primeiro semestre e na primeira quinzena do ms? 11) Quem foi reprovado ou ficou em exame suplementar que possui o nome comeando com M? 12) Quem est aprovado no curso 02 ou 04, que faz aniversrio entre 15 e 20 dos meses de abril, maio e junho, e estudou de manh ou a tarde?

Incio da Pgina

5.2.Exerccios com Alunos II


1) Qual a quantidade de alunos por cidade? 2) Quantos homens e quantas mulheres esto cadastradas na tabela alunos? 3) Quantas mulheres esto estudando por turno? 4) Qual a soma de dbitos dos alunos por sexo e turno? 5) Quais so os alunos que possuem "MARIA" no nome ou sobrenome? 6) Quais so os alunos onde o nome possui a segunda letra igual a letra "L"? 7) Qual a soma de dbitos por curso apenas dos alunos aprovados? 8) Altere o n 7 para exibir apenas os cursos onde a soma de dbitos maior que R$1000,00? 9) Qual o maior dbito de alunos por cidade? 10) Qual o menor dbito, o maior dbito e a mdia dos dbitos dos alunos por cidade, onde o dbito est entre R$5,00 e R$150,00?

11) Qual o nome e o dbito dos dois maiores devedores da tabela alunos? 12) Qual o nome e o dbito dos seis maiores devedores da tabela alunos? 13) Quais so as cidades cadastradas para os alunos existentes? (Uma linha por cidade). 14) Quais so os nomes de alunos que iniciam com A, a segunda letra qualquer uma e a terceira I? 15) Quais so os dias de nascimento existentes para os alunos da cidade 01 e dos cursos 01, 03 e 04.

Incio da Pgina

5.3.Exerccios com Duplicatas I


Observaes dos campos Campo FORMA -> P - Duplicata a PAGAR R - Duplicata a RECEBER Campo TIPOPGTO -> V - Pagto a VISTA P - Pagto a PRAZO Campo VENDEDOR -> Ser igual a zero se a duplicata a PAGAR. 1) Quais so as duplicatas do vendedor 3? 2) Quais so as duplicatas que no foram pagas em 1997? 3) Qual a maior duplicata a pagar? 4) Qual a menor duplicata a receber? 5) Quais so as duplicatas RECEBIDAS com atraso? 6) Qual o maior valor da duplicata recebida, vista, do ms de janeiro e do vendedor 3? 7) Quais so as 4 maiores vendas do vendedor 3? 8) Qual foi o valor pago (dupl. a pagar) por ms (campos Baixa e Pago)? 9) Quantas e qual a soma das duplicatas que ainda no foram pagas ou recebidas? Exibir o resultado separado pela forma. (campos Baixa, Valor e Forma)

Incio da Pgina

5.4.Exerccios com Duplicatas II


Observaes dos campos Campo FORMA -> P - Duplicata a PAGAR R - Duplicata a RECEBER Campo TIPOPGTO -> V - Pagto a VISTA P - Pagto a PRAZO Campo VENDEDOR -> Ser igual a zero se a duplicata a PAGAR. a - Crie uma query que exiba as colunas duplicata, vencimento, valor, pago e vendedor ordenada por mes de vencimento crescente e valor decrescente; b - Selecione duplicatas apenas com data de vencimento de 1997; c - Exiba duplicatas onde valor maior ou igual a 80,00. Somente duplicatas a receber; d - Exiba a query da letra c somente para duplicatas do ms de fevereiro e maro (no importa o ano); e - Altere a query da letra d para ser exibida classificada pelo nmero da duplicata; f - Selecione as colunas duplicata, data, valor e vendedor; g - Altere a query da letra f para selecionar apenas as duplicatas com valor de R$ 10,00 a R$ 70,00; h - Complemente a letra g com a condio de exibir somente as duplicatas do ms de dezembro; i - Altere a query da letra g para ser exibida classificada pela coluna vencimento em ordem decrescente e coluna duplicata em ordem ascendente; j - Selecione os campos duplicata, valor, vpago e dataentra; k - Altere a letra j para exibir as duplicatas 50 a 500, em ordem de vendedor; l - Altere a letra j para exibir as duplicatas do vendedor 1 ou 3, em ordem decrescente do campo pago; Incio da Pgina

5.5.Exerccios com Funcionrios


1) Quais so os 2 maiores salrios da tabela funcions?

2) Quais so os nomes de funcionrios que possuem o nome ou sobrenome PEDRO? 3) Quantos funcionrios nasceram no primeiro semestre (quantidade por ms)? 4) Quais so as cidades que, somando o salrio dos funcionrios, recebem mais de R$15000? 5) Exiba os funcionrios que possuem, no nome, as letras U, O, I, E e A (nesta ordem). 6) Altere o n 5 para exibir a media dos salarios por estabelecimento e cidade. 7) Altere o n 6 para exibir os agrupamentos onde a quantidade de funcionarios igual a trs e a mdia salarial maior que R$ 175,00 8) Qual o maior salrio por cidade? Exiba apenas as cidades onde o maior salrio maior que R$ 1400,00. 9) Quais so as cidades, a mdia e o menor salrio das cidades onde a quantidade de funcionrios menor que 20 pessoas? 10) Quantas pessoas por estabelecimento existem para os estabelecimentos onde a mdia do salrio est entre R$ 150 e R$ 1000?

Incio da Pgina

5.6.Exerccios com Join


Alunos, Cidades e Cursos 1)Qual a quantidade de alunos por cidade? Exiba tambm o nome da cidade. 2)Qual a soma de dbitos da cidade de Governador Valadares? 3)Quais so os alunos que estudam Engenharia Civil? 4)Quais so os alunos de Governador Valadares que estudam Engenharia Civil? 5)Quais so as alunas "ANA" que vieram da Bahia (BA)? 6)Quantos alunos, por estado (UF), devem mais de R$50,00? Filmes, tipos e precos 7)Quais so os filmes de comdia ('Comedia') que custam R$ 0,90 (0.9) a locao? Exiba nome do filme, o tipo de filme e valor da locao. 8)Quais so os filmes do mesmo preo do filme '00003'? Exiba nome do filme e o valor da locao. 9)Qual o tipo de filme que possui mais fitas para locao? Exiba a quantidade e o nome do tipo do filme.

10)Se todas as fitas estivessem alugadas, quanto a locadora receberia por tipo de filme? Exiba o cdigo do tipo de filme e a soma a receber.

Incio da Pgina

5.7.Exerccios com Comandos Especiais


Sub-query com a tabela alunos 1- Quais so os alunos que possuem dbito maior que a media dos dbitos dos alunos da cidade 01? 2- Quem nasceu no mesmo ms que o aluno 00014? 3- Quem mais velho que o aluno 01466? 4- Quais so os alunos da mesma cidade do aluno 01568 ou do aluno 00010? FULL, LEFT e RIGHT JOIN 5- Quais so os alunos que ainda no pagaram mensalidades? (alunos e pagamentos.dbf) 6- Quais so as cidades da tabela cidades no utilizadas na tabelas alunos? 7- Por um erro de crtica no cadastro, alguns cooperados possuem bancos inexistentes na tabela bancos. Quais so estes cooperados? 8- No comando select acima, altere-o para exibir tambem os bancos cadastrados na tabela bancos que nao possuem nenhum cooperado. 9- Quais sao as duplicatas (duplics) que possuem o codigo do vendedor nao cadastrado na tabela de vendedores (venders)? 10- Quais sao os vendedores imprestaveis (nao venderam nada em duplics)? 11- Exiba o resultado dos exercicios 9 e 10 juntos. Incio da Pgina UNION 12- Crie uma query que una o cdigo e nome da cidade com o cdigo e nome do estabelecimento, em ordem alfabtica 13- Crie uma query que une um select com a quantidade de cidades por UF e outro select com todas as cidades, em ordem de uf. 14- Crie uma query com trs comandos select usando a tabela alunos que resulta: "Nascidos em Agosto " | quantidade "Do Sexo Feminino " | quantidade "Da Cidade igual a 01" | quantidade

INTO e Operadores 15- Crie um cursor chamado desc_aluno com o nome do aluno, nome da sua cidade, campo sexo descritivo ("masculino" para M e "feminino" para f) e nome do seu curso. 16- Crie uma matriz chamada ufs com a UF e a quantidade de cidades por UF. 17- Crie uma tabela .dbf chamada alucurso04 com codigo do aluno, nome do aluno e nome do turno ("Matutino" para M, "Vespertino" para V e "Noturno" para N), para os alunos do curso 04.

5.8.Exerccios Delete

com Insert,

Update e

1- Insira um novo banco na tabela Bancos com o codigo igual a 123 2- Altere todos os cooperados que possuem o cadastro no banco 013 e 015 para o novo banco cadastrado (codigo 123) 3) Exclua as duplicatas (duplics) onde o valor pago (campo PAGO) menor que R$ 2,00 e diferente de zero.

Incio da Pgina

5.9. Tabelas para os Exerccios

Durante toda a utilizao do contedo da pgina, vamos necessitar de algumas tabelas do tipo .DBF, principalmente durante os exerccios. Mas ateno: as tabelas so extenso DBF para o VISUAL FOXPRO 5. Para receber as tabelas, envie-me um e-mail OBSERVAO: Se voc precisa das tabelas em outra verso avise no e-mail.

Incio da Pgina

Respostas dos Exerccios


Respostas - Aluno I
1) SELECT nome FROM alunos where sexo = "F" 2) SELECT * FROM alunos where cidade = "04" and curso = "03" 3) SELECT cidade, curso, sexo FROM alunos where turno = "M" 4) SELECT * FROM alunos where sexo = "F" and month(nascimento) = 10 5) SELECT * FROM alunos where year(nascimento) < 1980 6) SELECT * FROM alunos where month(nascimento) = 11 and cidade in ("01","03","04") 7) SELECT nome, turno, curso, nascimento FROM alunos where turno = "N" and ; year(nascimento) = 1980 and nome in ("A","M","F") 8) SELECT * FROM alunos where curso = "04" and situacao = "E" 9) SELECT * FROM alunos where sexo = "F" and turno = "M" and curso in ("01","04") 10) SELECT * FROM alunos where month(nascimento) < 7 and day(nascimento) < 16 11) SELECT * FROM alunos where situacao in ("R","E") and nome = "M" 12) SELECT * FROM alunos where situacao = "A" and curso in ("02","04") and ; day(nascimento) between 15 and 20 and month(nascimento) between 4 and 6 and ;

turno in ("M","V")

Incio da Pgina

Respostas - Alunos II
cidade, count(*) FROM alunos group by cidade sexo, count(*) FROM alunos group by sexo turno, count(*) FROM alunos group by turno sexo, turno, sum(debito) FROM alunos group by sexo, nome FROM alunos where nome like "%MARIA$" nome FROM alunos where nome like "_L%" sum(debito), curso FROM alunos where situacao = "A" group by curso 8) SELECT sum(debito), curso FROM alunos where situacao = "A" group by curso having sum(debito) > 1000 9) SELECT max(debito),cidade FROM alunos group by cidade 10) SELECT cidade, min(debito), max(debito), avg(debito) FROM SELECT SELECT SELECT SELECT SELECT 1) 2) 3) 4) 5) 6) 7) SELECT SELECT SELECT SELECT SELECT SELECT SELECT

turno ; ; alunos

11) 12) 13) 14) 15) and ;

group by cidade where debito between 5 and 150 TOP 2 nome, debito FROM alunos order by debito desc TOP 6 nome, debito FROM alunos order by debito desc DISTINCT cidade from alunos nome FROM alunos where nome like "A_I%" DISTINCT DAY(NASCIMENTO) FROM alunos where cidade = "01" curso in ("01","03","04")

Incio da Pgina

Respostas - Duplicatas I
1) SELECT * FROM duplics where vendedor = "0003" 2) SELECT * FROM duplics where year(vencimento) = 1997 and pago = 3) 4) 5) 6) SELECT max(valor) from duplics where forma="P" SELECT min(valor) from duplics where forma="R" SELECT * FROM duplics where baixa > vencimento and forma="R" SELECT max(valor) from duplics where tipopgto="V" and ; month(vencimento) = 1 and vendedor="0003" 7) SELECT TOP 4 * from duplics where vendedor = "0003" ; order by valor desc

8) SELECT sum(pago), month(baixa) from duplics group by 2 ; where pago > 0 9) SELECT count(*), sum(valor), forma from duplics ; where pago = 0 group by forma

Incio da Pgina

Respostas - Duplicatas II
a) SELECT DUPLICATA, VENCIMENTO, VALOR, PAGO, VENDEDOR FROM DUPLICS

ORDER BY VENCIMENTO ASC, VALOR DESC b) SELECT * FROM DUPLICS WHERE YEAR(VENCIMENTO)=1997 c) SELECT * FROM DUPLICS WHERE VALOR >=80 AND FORMA = "R" d) SELECT * FROM DUPLICS WHERE VALOR >=80 AND FORMA = "R" AND MONTH(VENCIMENTO) IN (2,3) e) SELECT * FROM DUPLICS WHERE VALOR >=80 AND FORMA = "R" AND MONTH(VENCIMENTO) IN (2,3) ; ORDER BY DUPLICATA f) SELECT DUPLICATA, VENCIMENTO, VALOR, VENDEDOR FROM DUPLICS g) SELECT DUPLICATA, VENCIMENTO, VALOR, VENDEDOR FROM DUPLICS ; WHERE VALOR BETWEEN 10 AND 70 h) SELECT DUPLICATA, VENCIMENTO, VALOR, VENDEDOR FROM DUPLICS ; WHERE VALOR BETWEEN 10 AND 70 AND MONTH(VENCIMENTO) = 12 i) SELECT DUPLICATA, VENCIMENTO, VALOR, VENDEDOR FROM DUPLICS ; WHERE VALOR BETWEEN 10 AND 70 ORDER BY VENCIMENTO DESC, DUPLICATA j) SELECT DUPLICATA, VALOR, PAGO, ENTRADA FROM DUPLICS k) SELECT DUPLICATA, VALOR, PAGO, ENTRADA FROM DUPLICS WHERE VAL(DUPLICATA) BETWEEN ; 50 AND 500 ORDER BY VENDEDOR l) SELECT DUPLICATA, VALOR, PAGO, ENTRADA FROM DUPLICS WHERE VENDEDOR IN ("0001","0003") ; ORDER BY PAGO DESC

Incio da Pgina

Respostas - Funcionrios

1) SELECT TOP 2 NOME, SALARIO FROM FUNCIONS ORDER BY SALARIO DESC 2) SELECT NOME FROM FUNCIONS WHERE NOME LIKE "%PEDRO%" 3) SELECT COUNT(*), MONTH(NASCIMENTO) FROM FUNCIONS GROUP BY 2 WHERE MONTH(NASCIMENTO) < 7 4) SELECT SUM(SALARIO),CIDADE FROM FUNCIONS GROUP BY CIDADE HAVING SUM(SALARIO)>15000 5) SELECT NOME FROM FUNCIONS WHERE NOME LIKE "%U%O%I%E%A%" 6) SELECT AVG(SALARIO),ESTAB,CIDADE FROM FUNCIONS WHERE NOME LIKE "%U%O%I%E%A%" ; GROUP BY ESTAB, CIDADE 7) SELECT AVG(SALARIO),ESTAB,CIDADE FROM FUNCIONS WHERE NOME LIKE ; "%U%O%I%E%A%" GROUP BY ESTAB, CIDADE HAVING COUNT(*) = 3 AND AVG(SALARIO) > 175 8) SELECT MAX(SALARIO),CIDADE FROM FUNCIONS GROUP BY CIDADE HAVING MAX(SALARIO) >1400 9) SELECT CIDADE, AVG(SALARIO), MIN(SALARIO) FROM FUNCIONS GROUP BY CIDADE ; HAVING COUNT(*) < 20 10) SELECT COUNT(*), ESTAB FROM FUNCIONS GROUP BY ESTAB HAVING AVG(SALARIO) ; BETWEEN 150 AND 1000

Incio da Pgina

Respostas - Com Join


1) select c.nome, count(*) from alunos a, cidades c where a.cidade = c.cidade ; group by c.cidade 2) select c.nome, sum(debito) from alunos a, cidades c where a.cidade = c.cidade and ; c.nome = "GOVERNADOR VALADARES" 3) select a.nome, c.nome from alunos a, cursos c where a.curso = c.curso and ; c.nome = "Engenharia Civil" 4) select a.nome, c.nome ,ci.nome from alunos a, cursos c, cidades ci ; where a.curso = c.curso and a.cidade = ci.cidade and c.nome = "Engenharia Civil" and ; ci.nome = "GOVERNADOR VALADARES" 5) select a.nome, c.uf from alunos a, cidades c where a.cidade = c.cidade and ; a.nome like "ANA%" and c.uf = "BA" 6) select count(*), c.uf from alunos a, cidades c ; where a.cidade = c.cidade and a.debito > 50 group by c.uf 7) select t.nome, p.valor, f.nome from filmes f, tipos t, precos p ; where f.preco = p.preco and f.tipo = t.tipo and p.valor = 0.9 and t.nome = 'Comedia' 8) select f.filme, f.nome, p.valor from filmes f, precos p where f.preco = p.preco and ;

p.valor = (select p.valor from filmes f, precos p where f.preco = p.preco and ; f.filme = "00003") 9) select top 1 count(*),t.nome from filmes f, tipos t ; where f.tipo = t.tipo group by t.tipo order by 1 desc 10) select f.tipo, sum(p.valor) from filmes f, precos p where f.preco = p.preco ; group by f.tipo Incio da Pgina

Respostas - Especiais
1) select * from alunos where debito > (select avg(debito) from alunos where cidade="01") 2) select * from alunos where month(nascimento) = ; (select month(nascimento) from alunos where aluno="00014") 3) select * from alunos where nascimento < ; (select nascimento from alunos where aluno="00010") 4) select * from alunos where cidade in ; (select cidade from alunos where aluno in ("01568","00010")) OBSERVACAO: A execuo lenta, pois uma subquery com dois IN's 5) select * from alunos a left join pagamentos p on a.aluno = p.aluno where p.aluno = " " 6) select * from cidades c left join alunos a on a.cidade = c.cidade where a.cidade = " " 7) select * from bancos b right join cooperados c on b.banco = c.banco where b.banco = " " 8) select * from bancos b full join cooperados c on b.banco = c.banco ; where b.banco = " " OR c.banco = " " 9) select * from duplics d left join venders v on d.vendedor = v.vendedor ; where v.vendedor = " " (REPARE: somente duplicatas a pagar) 10) select * from duplics d right join venders v on d.vendedor = v.vendedor ; where d.vendedor=" " 11) select * from duplics d full join venders v on d.vendedor = v.vendedor ; where d.vendedor=" " or v.vendedor = " " 12) select cidade, nome from cidades union ; select estab, nome+space(10) from estabs order by 2 13) select 1, count(*), "Estado:"+uf+space(21), uf from cidades group by 4 union all ; select 2, 0, nome, uf from cidades order by 4, 1 14) select "Nascidos em Agosto", count(*) from alunos where month(nascimento) = 8 union ; select "Do Sexo Feminino ", count(*) from alunos where sexo = "F" union ; select "Cidade igual a 01 ", count(*) from alunos where cidade = "01" 15) select a.nome, c.nome, iif(sexo="M","Masculino","Feminino "), cr.nome ;

from alunos a, cidades c, cursos cr where a.cidade = c.cidade and a.curso = cr.curso ; into cursor desc_aluno 16) select uf, count(*) Quant_Cidades from cidades group by 1 into array ufs 17) select aluno, nome, iif(turno="M","Matutino ",iif(turno="V","Vespertino","Noturno ")) ; Turno from alunos into table alucurso04

Incio da Pgina

Respostas - Insert, Update e Delete


1) insert into bancos (banco, nome) values ("123","BANCO MUNDIAL") 2) update cooperados set banco = "123" where banco in ("013","015") 3) delete from duplics where pago > 0 and pago < 2

Incio da Pgina