Professional Documents
Culture Documents
SELECT permite
Considere el siguiente modelo fsico relacional y su correspondiente cdigo SQL en MySQL y Oracle
La traduccin a SQL es
CREATE TABLE artista ( idArtista NUMBER, nombreArtista CHAR(35) NOT NULL, CONSTRAINT pk_Artista PRIMARY KEY (idArtista), CONSTRAINT ak_nombreArtista UNIQUE ( nombreArtista )
);
CREATE TABLE disco ( asin CHAR(12), idArtista NUMBER NOT NULL, nombreAlbum CHAR(20) NOT NULL, yearLanzamiento NUMBER(4), marca CHAR(20), CONSTRAINT pk_disco PRIMARY KEY (asin),
CREATE TABLE disco ( asin CHAR(12), idArtista INTEGER NOT NULL, nombreAlbum CHAR(20) NOT NULL, yearLanzamiento INTEGER(4), marca CHAR(20), CONSTRAINT pk_disco PRIMARY KEY (asin), CONSTRAINT fk_artistaDisco FOREIGN KEY (idArtista) REFERENCES artista
(idArtista) ) ENGINE = innoDB;
CREATE TABLE canciones ( idCancion INTEGER AUTO_INCREMENT, posicion INTEGER NOT NULL, asin CHAR(12) NOT NULL, nombreCancion CHAR(30) NOT NULL, duracion CHAR(6), estilo CHAR(15), CONSTRAINT pk_canciones PRIMARY KEY (idCancion), CONSTRAINT fk_DiscoCanciones FOREIGN KEY (asin) REFERENCES disco (asin) ) ENGINE = innoDB;
Reglas de Combinacin:
Pueden combinarse tantas tablas como se desee. El criterio de combinacin puede estar formado por ms de una pareja de columnas. En la clusula
SELECT
tablas, condicionen o no la combinacin. Si hay columnas con el mismo nombre en las distintas tablas, deben identificarse especificando la tabla de procedencia o utilizando un alias de tabla. Es necesario incluir una clasula WHERE que asocie las tablas mediante las correspondientes llaves
Para lograr el resultado correcto necesitamos asociar un disco con el nombre del artista que lo interpreta. Y esto se puede hacer si aadimos la condicin en la cual idArtista el mismo valor en la fila de la tabla disco que en la fila correspondiente de la tabla artista.
Ejemplo: Considere el siguiente Modelo fsico relacional. Que descibe las relaciones existentes para el torneo apertura 2009 del futbol Mexicano de 1era divisin.
Ejemplo:
Generar un listado con los nombres de todos los jugadores del Amrica que jugaron como porteros durante el torneo Apertura 2009.
SELECT E.nombreEquipo,
J.nombre Nombre, P.nombrePosicion Posicion FROM equipo E, posicion P, jugador J WHERE (J.idEquipo = E.idEquipo) AND ( J.idEquipo = 1) AND (J.idPosicion = 1) AND (P.idPosicion = J.idPosicion) AND (J.jj >0 ) ORDER BY J.nombre
3.2.5. Subconsultas
Una subconsulta es una instruccin SELECT anidada dentro de una sentencia SELECT, SELECT...INTO, INSERT...INTO, DELETE, o UPDATE o dentro de otra subconsulta. Una subconsulta, a su vez, puede contener otra subconsulta y as hasta un mximo de 16 niveles. Las particularidades de las subconsultas son:
1. Su resultado no se visualiza, sino que se pasa a la consulta principal para su comprobacin. 2. Puede devolver un valor nico o una lista de valores y en dependencia de esto se debe usar el operador del tipo correspondiente. 3. No puede usar el operador BETWEEN, ni contener la setencia ORDER BY. 4. Puede contener una sola columna, que es lo ms comn, o varias columnas.Este ltimo caso se llama subconsulta con columnas mltiples. Cuando dos o ms columnas sern comprobadas al mismo tiempo, deben encerrarse entre parntesis.
Ejemplo: Nombres de los jugadores que han participado ms que el promedio, equipo y posicin durante un torneo
SELECT equipo, nombreJugador, posicion, minutos FROM femexfut WHERE minutos > ( SELECT AVG(minutos) FROM femexfut WHERE torneo = 'Bicentenario 2010' AND jj > 0) AND torneo = 'Bicentenario 2010' ORDER BY equipo, posicion, nombreJugador
Descargar Ejecutar
La consulta ms interna calcula el promedio de minutos jugados, y la consulta ms externa lo utiliza para seleccionar los nombres de los jugadores que participan ms del promedio. El valor de comparacin puede ser un valor simple, como en el ejemplo anterior, o un conjunto de valores. Hay que tener en cuenta este detalle ya que el tipo de operador a utilizar vara. En el primer caso se puede utilizar un operador de comparacin de carcter aritmtico (<, >, etc.). Y en el segundo uno de tipo lgico (IN).
Las subconsultas pueden devolver ms de una columna, y se habrn de comparar de manera consecuente:
Las columnas de la clausula WHERE de la consulta principal deben estar agrupadas por parntesis. Las columnas encerradas entre parntesis deben coincidir en nmero y tipo de datos con los datos que devuelve la subconsulta.
Se puede utilizar una subconsulta para insertar valores en una tabla en el momento de la creacin de la misma. Ejemplo: Crear una tabla con los datos de los jugadores que participan ms que el promedio y su desviacin:
CREATE TABLE borrame SELECT minutos, nombreJugador FROM femexfut WHERE minutos > ( SELECT AVG(minutos) + STDDEV(minutos) FROM femexfut WHERE jj > 0 AND torneo = 'Bicentenario 2010') AND torneo = 'Bicentenario 2010' ORDER BY minutos DESC, nombreJugador
Ejecutar No es necesario especificar tipos ni tamaos de las columnas, ya que vienen determinados por los tipos y tamaos de las columnas recuperadas en la subconsulta.
SELECT fecha, precio FROM dolar WHERE fecha = ( SELECT MAX(fecha) FROM dolar)