• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

smacking

Ajuda SQL

15 mensagens neste tópico

Olá. Sou novo na programação e no SQL, estou a começar a estudar isto agora no curso que frequento. Tenho um "TPC" (nao é bem, é um trabalho para subir nota) para fazer, e não consigo fazer um dos exercicios, que é o seguinte:

- fazer uma pesquisa ao campo Nome de uma determinada tabela

- fazer com que, se existir de facto o termo da pesquisa na tabela, criar uma nova tabela com essa pesquisa em maiusculas

- exemplo: Pesquisa - "Qual é o nome?" - Resposta: "dr"

                  Resultado (Imaginemos que ha alguem na tabela chamada André) -                Nome                Novo_Nome

                                                                                                                                  André                    AnDRé

É básicamente isto, sei que isto é SQL básico, mas para mim é um pouco dificil. Se alguem souber, agradeço que responda :P

Obrigado.

P.S. - Isto é mesmo SQL maís básico. Neste momento usamos access, e um dos exercicios que fazemos, por exemplo, é:

SELECT Format(Avg(Idade),'0.00') & " Anos" AS Media_Idade, Round(Avg(Idade)) & " Anos" AS Arredondamento

FROM FuncionariosAMZ;

:)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vamos lá tentar ajudar.

Não entendo bem tudo o que queres mas cada um ponto é uma questão ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, nao é uma questão, tentava apenas explicar melhor o objectivo do exercicio, por tópicos.

Bem, vou tentar ser mais preciso, utilizando o mesmo método.

Básicamente o que tenho de fazer é Criar uma Pesquisa (indo buscar os dados a uma tabela anteriormente criada), que permita ao utilizador inserir uma cadeira de caracter(es) para a qual a consulta deve verificar se essa cadeia existe no campo Nome da tabela anteriormente criada.

Vou tentar descrever de novo o objectivo, com um exemplo:

- Pergunta: "Qual a cadeia de caracteres existentes(ou nao) no nome pretende procurar?"

- Resposta: "ol"

- Imaginemos que na tabela criada, no campo nome, há uma pessoa chamada "João Oliveira" e outra chamada "Filipa Anzol"

- Então, a consulta tem de devolver duas colunas, desta forma:

               Nome                |                  Novo_Nome(esta coluna tem de ser criada no código da consulta..)

        João Oliveira                                                 joão OLiveira

        Filipa Manuela                                               filipa anzOL

Fui claro desta vez?

P.S. - Um colega meu resolveu o exercicio da seguinte forma:

SELECT nome, LCASE( MID ( nome , 1 , INSTR(nome, [insira a String] ) -1 ) ) & UCASE( MID ( nome , INSTR(nome, [insira a String] ), LEN( [insira a String] )  ) ) & LCASE( MID ( nome , INSTR(nome, [insira a String] ) + LEN( [insira a String] )  ) ) AS [Novo Nome]

FROM aluno

Mas, para além de não perceber por inteiro o que lá está, não quero copiar, mas sim aprender.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha primeira abordagem seria algo do género:

SELECT nome
FROM aluno
WHERE nome = '%ol%'

De uma forma menos formal, passo o pleonasmo, "Obter todos os nomes de alunos cujo nome tenha qualquer coisa ou nada, seguido de 'ol', terminando com qualquer coisa ou nada".

Esta é a forma mais simples e mais natural, basicamente estamos a tentar encontrar todos os registos que cumpram a clausula WHERE, o operador % corresponde a "qualquer coisa ou nada", quer dizer que nesse local pode aparecer um qualquer conjunto de caracteres ou não qualquer valor.

A minha dúvida irá para o motor de bases de dados que estão a usar, que pode ou não conter um operador de = sensível a maiúsculas e minúsculas. Se assim for basta usar uma das funções de conversão que o motor tenha.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A minha primeira abordagem seria algo do género:

Foi o que pensei também quando li, mas pelo que vejo deve ser (quase de certeza) em access e não SQL Server.

Se for em Access o wildcard mudar para "*" e não "%".

Pequena correcção ao teu código: tens de usar "LIKE" e não "=".

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, realmente a sintaxe não está correcta para Access, o wildcard não está certo e o igual tem mesmo de passar a um LIKE, por outro lado o LIKE não é sensível a maiúsculas/minúsculas pelo que só com essas alterações fica o problema resolvido.

Não está correcta para access nem sei se estará para outros motores, pelo menos a parte do igual.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, realmente a sintaxe não está correcta para Access, o wildcard não está certo e o igual tem mesmo de passar a um LIKE, por outro lado o LIKE não é sensível a maiúsculas/minúsculas pelo que só com essas alterações fica o problema resolvido.

Não está correcta para access nem sei se estará para outros motores, pelo menos a parte do igual.

Sim, para o Access também tenho de testar e tem um sintaxe um pouco próprio (como os parênteses rectos para aparecer uma caixa de diálogo) . Já usei muito mas agora estou um pouco enferrujado.

De qualquer maneira é melhor esperar por detalhes ;)

Não está correcta para access nem sei se estará para outros motores, pelo menos a parte do igual.

Em SQL Server é também "LIKE '%ol%'"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Em Oracle tb......

De qualquer modo, li o post assim na diagonal... mas a propósito das maiusculas e minusculas... o melhor é uniformizar tudo à cabeça...

SELECT nome
FROM aluno
WHERE lcase(nome) like lcase('%ol%')

...agora fiquei com dúvidas se é lcase ou lower......

um destes será sem dúvida....

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não deixa de ser curioso o tipo de soluções que se conseguem arranjar, há sempre uma cabeça que encontra a forma mais complicada de resolver um problema, olhando para a 3ª resposta do smacking, a solução apresentada é, só por si, de se puxar pela cabeça só a tentar compreender ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A questão é que estando a fazer tudo em Aceess, ele tem que criar os "interfaces de pesquisa " Inputbox... enquanto corre a pesquisa... talvez tenha sido por isso que ficou assim pro complexo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A questão é que estando a fazer tudo em Aceess, ele tem que criar os "interfaces de pesquisa " Inputbox... enquanto corre a pesquisa... talvez tenha sido por isso que ficou assim pro complexo.

Mesmo assim, quando tive a primeira cadeira de bases de dados também usávamos MS Access, não era por isso que se complicava dessa forma, até porque bastaria substituir a expressão regular por um valor de entrada.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

o facto de complicar... é que vai mostrar ao prof...que ele se esforçou... e inventou um bocado... ou entao.. que ele copiou ;-)

de qq modo...quanto mais situações despistar... mais sólida fica a query.... e mais tempo demora a processar...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Pessoal, obrigado a todos pela ajuda. Tentei abordar todos as respostas que vocês deram, e consegui alguma coisa, nao ficou perfeito, mas paciencia, tambem só aquele meu colega conseguiu.

Obrigado a todos ! ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora