Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: Saknoc en 13 Marzo 2016, 02:48 am



Título: MySQL - Consultas
Publicado por: Saknoc en 13 Marzo 2016, 02:48 am
Buenas, tengo que hacer varios ejercicios para clase de bases de datos y hay un par de cosillas que no me salen y no encuentro por internet.

Una de las consultas es:
Nombre de las provincias cuya segunda letra es una "O" (bien mayúscula o minúscula) y cuya última letra es una "A" (bien mayúscula o minúscula.

Mi respuesta (que no me muestra en la consulta lo que me debería de mostrar) es:
SELECT nombre FROM provincias WHERE nombre LIKE ('_O%') OR nombre LIKE ('_o%') AND nombre LIKE ('%A') OR nombre LIKE ('%a');

Otra consulta que tengo que hacer y no me sale es:
Nombre de las provincias que contienen el texto "MA" (bien mayúsculas o minúsculas) o cuyo código comienza y termina por el mismo caracter.

Mi respuesta es:
SELECT nombre FROM provincias WHERE nombre LIKE ('%MA%') OR nombre LIKE ('%ma%') AND codpro LIKE ('_%') = ('%_');

La parte que dice que tiene que contener el texto "MA" creo que si lo tengo bien, pero lo de que comience y termine por el mismo caracter no me sale.

Y la última consulta que no me sale es:
Mostrar las 11 primeras letras de la descripción de los artículos cuyo código contenga una A en la segunda posición.

No sé que he de poner para que salgan las 11 primeras letras.

Gracias por vuestra atención.  :)


Título: Re: MySQL - Consultas
Publicado por: xiruko en 13 Marzo 2016, 04:32 am
Hola,

Una de las consultas es:
Nombre de las provincias cuya segunda letra es una "O" (bien mayúscula o minúscula) y cuya última letra es una "A" (bien mayúscula o minúscula.

Mi respuesta (que no me muestra en la consulta lo que me debería de mostrar) es:
SELECT nombre FROM provincias WHERE nombre LIKE ('_O%') OR nombre LIKE ('_o%') AND nombre LIKE ('%A') OR nombre LIKE ('%a');

Eso es porque AND tiene preferencia sobre OR, por lo que la consulta que estás haciendo es equivalente a esta:
Código
  1. SELECT `nombre` FROM provincias
  2. WHERE `nombre` LIKE '_O%' OR (`nombre` LIKE '_o%' AND `nombre` LIKE '%A') OR `nombre` LIKE '%a';

Cuando seguramente tú querías poner esta (fíjate en los paréntesis):
Código
  1. SELECT `nombre` FROM provincias
  2. WHERE (`nombre` LIKE '_O%' OR `nombre` LIKE '_o%') AND (`nombre` LIKE '%A' OR `nombre` LIKE '%a');

Como en programación hay muchas maneras de hacer una misma cosa, te dejo otra opción para que le eches un vistazo:
Código
  1. SELECT `nombre` FROM provincias
  2. WHERE LOWER(nombre) LIKE '_o%a';

Otra consulta que tengo que hacer y no me sale es:
Nombre de las provincias que contienen el texto "MA" (bien mayúsculas o minúsculas) o cuyo código comienza y termina por el mismo caracter.

Mi respuesta es:
SELECT nombre FROM provincias WHERE nombre LIKE ('%MA%') OR nombre LIKE ('%ma%') AND codpro LIKE ('_%') = ('%_');

La parte que dice que tiene que contener el texto "MA" creo que si lo tengo bien, pero lo de que comience y termine por el mismo caracter no me sale.

Para esta consulta y la siguiente, la respuesta se llama  SUBSTRING (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring):
Código
  1. SELECT `nombre` FROM provincias
  2. WHERE LOWER(nombre) LIKE '%ma%' OR SUBSTRING(codpro, 1, 1) = SUBSTRING(codpro, -1);

Y la última consulta que no me sale es:
Mostrar las 11 primeras letras de la descripción de los artículos cuyo código contenga una A en la segunda posición.

Me he inventado los nombres de la tabla y de los campos ya que para esta pregunta no pusiste tu intento:
Código
  1. SELECT SUBSTRING(descripcion, 1, 11) FROM articulos
  2. WHERE `codigo` LIKE '_A%';

Gracias por vuestra atención.  :)

De nada :)

Saludos!


Título: Re: MySQL - Consultas
Publicado por: Saknoc en 13 Marzo 2016, 11:10 am
Hola,

Eso es porque AND tiene preferencia sobre OR, por lo que la consulta que estás haciendo es equivalente a esta:
Código
  1. SELECT `nombre` FROM provincias
  2. WHERE `nombre` LIKE '_O%' OR (`nombre` LIKE '_o%' AND `nombre` LIKE '%A') OR `nombre` LIKE '%a';

Cuando seguramente tú querías poner esta (fíjate en los paréntesis):
Código
  1. SELECT `nombre` FROM provincias
  2. WHERE (`nombre` LIKE '_O%' OR `nombre` LIKE '_o%') AND (`nombre` LIKE '%A' OR `nombre` LIKE '%a');

Como en programación hay muchas maneras de hacer una misma cosa, te dejo otra opción para que le eches un vistazo:
Código
  1. SELECT `nombre` FROM provincias
  2. WHERE LOWER(nombre) LIKE '_o%a';

Para esta consulta y la siguiente, la respuesta se llama  SUBSTRING (http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_substring):
Código
  1. SELECT `nombre` FROM provincias
  2. WHERE LOWER(nombre) LIKE '%ma%' OR SUBSTRING(codpro, 1, 1) = SUBSTRING(codpro, -1);

Me he inventado los nombres de la tabla y de los campos ya que para esta pregunta no pusiste tu intento:
Código
  1. SELECT SUBSTRING(descripcion, 1, 11) FROM articulos
  2. WHERE `codigo` LIKE '_A%';

De nada :)

Saludos!

Muchísimas gracias xiruco. Hay cosas que no venían en los apuntes porque quiere que nos busquemos también la vidilla por internet, pero no encontraba nada. La verdad que el substring lo he utilizado muchísimas veces en cadenas.

Gracias :)