SQL-92: Consultas Básicas III

Con esta tercera parte acabo las consultas b�sicas, pod�is ver las dos anteriores en I y II.

Los nombres de las columnas dentro de una misma tabla deben ser �nicos, pero que ocurre cuando hacemos una consulta que hace referencia a varias columans de igual nombre, pero en distintas tablas… pongamos un ejemplo para ver claramente este problema de ambig�edad:

Imaginemos estas dos tablas:

DEPARTAMENTO (nombred, numerod, nssdire, fechainicdire)

OFICINA_DEPTO (numerod, oficina)

Y deseamos sacar el c�digo, nombre y oficinas de los departamento de Marketing y de Investigaci�n.

SELECT Departamento.numerod, nombred, oficina FROM Departamento, Oficina_depto WHERE Departamento.nombred IN (‘Marketing’, ‘Investigaci�n’) AND Departamento.numerod = Oficina_depto.numerod;

veamos como hemos empleado algo nuevo, el opedaror IN que podemos usarlo para tomar filas con distintos valores (tanto como le colomentos dentro de los par�ntesis del IN) en una columna.

Otra manera de solucionar el problema de la ambig�edad a la hora de consultar en varias tablas, es utilizar seud�nimos (esta soluci�n es m�s elegante). Para el mismo ejemplo que el anterior:

SELECT nombred, D.numerod, oficina FROM Departamento D, Oficina_depto AS O WHERE D.nombred IN (‘Marketing’, ‘Investigaci�n’) AND D.numerod = O.numerod;

veamos como se acortan la longitud de la consulta considerablemente, he marcado el AS como negrita para avisar que es opcional, mi consejo es que no os acostumbreis a colocarlo, porque existe incompatibilidades con algunas bases de datos descendientes de SQL-92 como es el caso de ORACLE.

Y la �ltima manera que veremos para solucionar el tema de la ambig�edad es renombrando las columnas, hay dos maneras, realizar la operaci�n entre el SELECT y FROM y la otra en el FROM. Primero veremos la que se utiliza entre el SELECT y FROM:

SELECT E.nombre AS nom_empleado, S.nombre AS nom_supervisor FROM Empleado E, Empleado S WHERE E.nssjefe = S.nss;

en este caso el utilizar AS no es ning�n problema en bases de datos ORACLE.

La segunda manera de renombramiento de columnas es en la cl�usula FROM:

SELECT nom, num, oficina FROM Departamento D(nom,num,dire,inidire), Oficina_depto WHERE nom IN (‘Marketing’, ‘Investigaci�n’) AND num = numerod;

vemos como la tabla� DEPARTAMENTO (nombred, numerod, nssdire, fechainicdire), ha sido renombrada completamente, esto no funciona en bases de datos como ORACLE.

Y para terminar con el tema de consultas b�sicas lo haremos con el orden de presentaci�n. SQL permite realizar consultas y mostrarnos filas de forma ordenada, gracias a la cl�usula ORDER BY, que ordena seg�n el valor de una o varias columnas, puede ser Ascendente ASC (por defecto) o Descedente DESC. Suele ser una operaci�n muy costosa. Las filas no se ordenan en la tabla sino que se ven ordenadas sin estarlo. Pongamos un ejemplo de que queremos sacar el nombre y apellido de todos los empleados, ordenado por el salario que tienen de mayor a menor:

SELECT nombre, apellido FROM Empleado ORDER BY salario DESC;

aunque podr�a a�adir tantos campos como quisiese,separandolos a trav�s de una coma.

Pues esto es todo sobre consultas b�sicas, el siguiente art�culo trata sobre ‘Tablas como conjuntos’.

You may also like...

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>