SQL - Ayuda con consulta SQL

 
Vista:
sin imagen de perfil

Ayuda con consulta SQL

Publicado por Juan (4 intervenciones) el 20/08/2015 16:27:42
Buenas tardes.

Me han pasado una consulta en SQL y no entiendo muy bien si eso funciona o no, ni que quiere decir el carácter "?".

A ver si alguien me puede ayudar y decirme si funcionaría y que es lo que quiere decir ese carácter dentro de la consulta.

La consulta es la siguiente:

1
SELECT a.nombre, a.apellido, a.direccion FROM tabla1 a WHERE a.id IN (SELECT b.id FROM tabla2 b WHERE (b.cod = ? OR b.cod2 = "***") AND b.paso = ? AND b.mod = ?) ORDER BY a.orden

No sé que quiere decir el comodín "?", dentro de la consulta o si está bien.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Ayuda con consulta SQL

Publicado por leonardo_josue (1173 intervenciones) el 20/08/2015 18:28:16
Hola Juan:

En primer lugar debes aclararnos algunas cosas,

1. ¿con qué BD's estás trabajando? este dato es muy importante, ya que aunque la mayoría de los DBMS's están basados en un SQL Estandar, hay diferencias sintácticas entre cada uno de ellos, por lo que una sentencia puede que no se ejecute en todos los motores.

2. ¿Estás trabajando sólo con consultas SQL o con algún lenguaje de programación como JAVA, PHP, ASP.NET, etc?

Dependiendo de estas dos preguntas entonces te podríamos dar una respuesta un poco más clara.

Por lo general, el uso del (?) indica que la sentencia SQL se va a "completar" con parámetros que el usuario debe enviar y que pueden ser capturados, calculados o extraidos de manera dinámica.

JAVA por ejemplo es uno de los lenguajes que hace esto, de tal manera que puedes tener algo como esto:

1
2
3
4
5
Statement s = Database.createStatement("SELECT * FROM T WHERE a < ? AND a > ?");
    s.prepare();
    s.bind(1, valor_maximo);
    s.bind(2, valor_minimo);
    Cursor c = s.getCursor();

es decir, estás colocando DOS PARÁMETROS para las comparaciones con el campo a, para encontrar los registros que se encuentren entre un rango... Supongamos que las variables valor_maximo y valor_minimo las igualamos a 20 y 10 respectivamente, entonces la consulta "final" sería algo así:

1
SELECT * FROM T WHERE a < 20 AND a > 10

El uso de parámetros tiene el objetivo de evitas cosas terribles que hacen los programadores como esto:

1
2
Statement s = Database.createStatement("SELECT * FROM T WHERE a < ' + valor_maximo + ' AND a > ' + valor_minimo + '");
    Cursor c = s.getCursor();

es decir, armar la consulta "al vuelo", concatenando los valores que necesita... esta práctica es terrible pues hace que tu consulta sea vulnerable ataques tipo SQL inyection. Si no conoces el tema, preguntale a SAN GOOGLE al respecto.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar