[ Foro de SQL (y MySQL) ]

Relacionar varias tablas.

19-Jun-2012 22:49
Francisco Carlos Lpez Prez
4 Respuestas

Buenas soy nuevo en el foro, me presentaré mi nombre es Francisco.
Aprovecho de paso para saludar a D. Nacho Cabanes de cuyas referencias como excelente profesor por innumerables docentes me ha llevado ha entrar en sus páginas de programación.

Quería formular dos consultas si me lo permiten ya que no se aún las reglas internas del foro.

La primera consulta es relacionada con las selects en SQL, por lo que he visto al relacionar varias tablas ¿hay que asignarle obligatoriamente tanto las alias a la condición (where) como a los campos a buscar? y en el from ¿no es preciso asignar el alias como ocurre con Oracle?.

La segunda consulta que quiero hacer es: ¿si he iniciado sesión, al hacer consultas o insertar datos me pueda dar un mensaje de error el servidor porque en el código php de esas selects o inserts vuelvo a introducir un session_start();?.

Gracias de antemano.


20-Jun-2012 06:42
Nacho Cabanes (+31)

Bienvenido, Francisco.

Las reglas del foro se pueden resumir en: si tienes dudas, pregunta. ;-)  Lo demás (respeto, buscar antes de preguntar, etc) se da por sentado...

Pon ejemplos para ilustrar tus dudas. Los "alias" no suelen ser necesarios ni en la condición, ni en los campos, ni en las tablas (juraría que tampoco en Oracle), sino que se usan para crear consultas más compactas. Serán necesarios en ciertos casos concretos, por ejemplo cuando existe ambigüedad porque dos campos se llamen igual.

La segunda consulta es de PHP, no de SQL, así que este no es el subforo más adecuado, pero... vamos con ello... nuevamente, depende del caso, y es difícil guiarte sin ejemplos, pero lo habitual es que una vez que se ha "iniciado sesión", uses "variables de sesión" para almacenar ciertos datos el usuario actual, y entonces, todas las páginas que vas visitando deberán comenzar con "session_start()", o se perderían esas variables de sesión y el sistema se comportaría como si el usuario no hubiera iniciado sesión.


20-Jun-2012 14:07
Francisco Carlos Lpez Prez

Lo primero gracias por la prontitud de la respuesta.

Siento haber hecho la consulta de php en el foro de SQL, no ocurrirá más.

Sí, tienes razón, el "alias" en Oracle es utilizado opcionalmente o cuando puede repetirse un nombre de un campo en distintas tablas para distinguir la tabla a la que hacemos referencia y no volver "loco" a Oracle, quizás no me expliqué bien anteriormente  por eso preguntaba porque he visto varios ejemplos de distintos autores que cruzaban tablas  y utilizaban siempre el "alias" y de ahí mi pregunta de si era siempre "obligatorio" utilizarlo en SQL ya que solo me han enseñado a utilizar Oracle y hasta ahora no había programado en SQL y utilizado MySQL (se que los cambios son mínimos), por favor corrígeme si estoy equivocado y tener un poco de paciencia conmigo.

Respecto a la pregunta me refería también a la propia select, en  caso de  de efectuarla con el "alias" ¿cual te parece el modo más correcto?:

Esta es la que he visto publicada:

1º: SELECT alum.NOMBRE, asig.NOMBRE
   FROM ALUMNOS,ASIGNATURAS
   WHERE alum.NOMBRE=asig.ALUMNOS

O esta que es la que conozco y utilizo en Oracle.

2º: SELECT alum.NOMBRE, asig.NOMBRE
   FROM ALUMNOS ALUM,ASIGNATURAS ASIG
   WHERE alum.NOMBRE=asig.ALUMNOS

Gracias.


29-Jun-2012 10:13
Nacho Cabanes (+31)

De esos dos ejemplos que propones, el segundo es correcto (usa alias) aunque peligroso (unas veces los usas en mayúsculas y otras en minúsculas, y eso no lo permitirán todos los gestores de bases de datos).

El primero es incorrecto: usas en unos sitios los nombres de las tablas y en otros un alias inexistente. Debería ser así (usando sólo nombres de tablas, cuando dos campos se llamen igual en distintas tablas, y ni eso cuando no haya ambigüedad):

 
SELECT alumnos.nombre, asignaturas.nombre
FROM alumnos,asignaturas
WHERE alumnos.codigo = asignaturas.codigoAlumno
 


Verás que he cambiado el WHERE: no tiene sentido usar el nombre para enlazar tablas, porque puede no ser único. Lo habitual es usar un "código" (ya sea el DNI o cualquier otro código arbitrario).


08-Jul-2012 18:02
Francisco Carlos Lpez Prez

Gracias Nacho por la aclaración.
Saludos.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)