Bases_asir_cap4 Realización de Consultas Luis Hueso Ibáñez

download Bases_asir_cap4 Realización de Consultas Luis Hueso Ibáñez

of 35

Transcript of Bases_asir_cap4 Realización de Consultas Luis Hueso Ibáñez

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    1/35

    Captulo 4

    Realizacin de

    consultas

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    2/35

    NDICE CAPTULO 4

    Introduccin sentencia SELECTBase de datos de ejemploConsultas bsicas

    Clusula ORDER BY

    Clusula DISTINCT Clusula LIMIT Expresiones Funciones propias de MySQL

    Clusula WHERE Predicados en SQL Funciones de agregado Clusula GROUP BY Clusula HAVING

    SubconsultasConsultas sobre varias tablas

    Reunin (JOIN) Unin/Interseccin/Diferencia

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    3/35

    Sentencia SELECT

    Formato bsico sentencia SELECT

    SELECT [ ALL | DI STI NCT | DI STI NCTROW]expr esi on_sel ect , . . .FROM r ef er enci as_de_t abl asWHERE condi ci ones[ GROUP BY

    [ ASC | DESC] , . . . [ WI TH ROLLUP] ]

    [ HAVI NG condi ci ones][ ORDER BY[ ASC | DESC] , . . . ]

    [ LI MI T ]

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    4/35

    Base de datos ejemplo I

    Diseo

    equi po( i d_equi po, nombr e_equi po, ci udad, web_of i ci al ,

    punt os)

    j ugador( i d_j ugador , nombr e, apel l i do, i d_capi t an,posi ci on, f echa_al t a, sal ar i o_br ut o, equi po)

    par t i do( el ocal , evi si t ant e, r esul t ado, f echa, ar bi t r o)

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    5/35

    Base de datos ejemplo II

    Datos tabla jugadores

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    6/35

    Base de datos ejemplo III

    Datos tabla equipos

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    7/35

    Base de datos ejemplo IV

    Datos tabla partidos

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    8/35

    Consultas bsicas

    Ejemplo

    -Obtener todos los datos de todos los equipos

    SELECT *

    FROM equi po;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    9/35

    Clasula ORDER BY

    Permite mostrar resultados ordenados por uno o varios campos

    Ordenacin por un campo:

    -Seleccionar los nombres, apellido y posicin de todos los jugadoresordenados por posicin

    SELECT nombr e, apel l i do, posi ci nFROM j ugadorORDER BY posi ci n;

    Ordenacin por varios campos:

    -Seleccionar el nombre, equipo y posicin de los jugadores ordenados porequipo y posicin

    SELECT nombr e, equi po, posi ci onFROM j ugadorORDER BY equi po, posi ci n;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    10/35

    Clusula DISTINCT

    Muestra nicamente filas con valoresdistintos

    -Seleccionar los distintos equipos que existen en latabla jugador

    SELECT DI STI NCT equi poFROM j ugador ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    11/35

    Clusula LIMIT

    Limita el nmero de filas en el resultado

    -Obtener los 5 primeros registros de la tabla jugador

    SELECT * FROM j ugador LI MI T 5;

    -Obtener los datos de los tres ltimos equipos clasificados

    (son 6 equipos en total)

    SELECT * FROM equi po ORDER BY puest o DESC LI MI T3, 6;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    12/35

    Expresiones

    Uso de operadores sobre las columnas a mostrar

    Ejemplo

    -Calcular el salario neto anual a percibir por cadajugador suponiendo que el IRPF es un 18%.

    SELECT nombr e, apel l i do, sal ar i o * 0, 82AS sal ar i o net o anual FROM j ugador ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    13/35

    Funciones propias de MySQL

    Funciones de control de flujo

    CASE, I F, I FNULL, NULLI F

    Funciones de cadena

    -Funciones de comparacin: LI KE, NOT LI KE y STRCMP.

    -Funciones de expresiones regulares: NOT REGEXP y REGEXP=RLI KE.

    Funciones matemticas

    Funciones de fecha y hora

    Funciones de bsqueda tipo full-text

    Funciones XML

    Funciones de compresin y codificacin

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    14/35

    Clusula WHERE y predicados I

    Predicados en clasulas WHERE

    x = y x es igual a y

    x y x!=y x no es igual a yx < y x es menor que yx > y x es mayor que yx = y x es mayor o igual que y

    -Seleccionar datos de jugadores que no pertenezcan al equipo 3:

    SELECT * FROM j ugador WHERE equi po 3;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    15/35

    Clusula WHERE y predicados II

    Predicado para comprobar valor nulo

    nom_col umna I S [ NOT] NULL

    -Seleccionar aquellos datos de equipos cuya web es nula

    SELECT * FROM equi po WHERE web I S NULL;

    Predicado IN: pertenencia a un conjunto

    expr esi n [ NOT] I N ( val or 1, val or 2, )

    -Obtener los datos de los equipos menos los de Valencia y Madrid

    SELECT *FROM equi poWHERE ci udad NOT I N ( Val enci a , Madr i d ) ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    16/35

    Clusula WHERE y predicados III

    Predicado [NOT] BETWEEN exp1 AND exp2

    expr esi on1 [ NOT] BETWEEN expr 2 AND expr 3

    -Obtener los datos de partidos de marzo de 2010

    SELECT *FROM par t i doWHERE f echa BETWEEN 01- 03- 2010 AND 31- 03- 2010;

    Predicado LIKE

    nom_col umna [ NOT] LI KE ct e_al f anumr i ca

    -Obtener los datos de los equipos cuyo nombre empiece por E

    SELECT *FROM equi poWHERE nombr e_equi po LI KE E% ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    17/35

    Clusula WHERE y predicados IV

    Predicado REGEXP y expresiones regulares

    nom_col umna [ NOT] REGEXP ct e_al f anumr i ca

    -Obtener los datos de los equipos cuyo nombre empiece por vocal

    SELECT *FROM equi poWHERE nombre_equi po REGEXP [ aei ou] +

    Predicados compuestos

    Combinacin de condiciones con OR y AND

    -Seleccionar el nombre de jugadores de los equipos 1 y 2 que jueguen comopivot.SELECT nombr e FROM j ugadorWHERE posi ci on = base AND ( equi po=1 OR equi po=2) ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    18/35

    Funciones de agregado I

    Funciones cuyos valores de entrada son varias filas en una consulta

    AVG: devuelve la media de los valores de la coleccin.

    MAX: devuelve el valor mximo de la coleccin.

    MIN: devuelve el valor mnimo.

    SUM: devuelve la suma.

    COUNT: devuelve el nmero de elementos que tiene la coleccin.-

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    19/35

    Funciones de agregado II

    Formato 1

    nom_f unci n ( [ DI STI NCT] nom_col umna )

    Formato 2

    nom_f unci n ( expr esi n)

    Formato 3

    COUNT ( *)

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    20/35

    Funciones de agregado III

    -Calcular el nmero de jugadores que miden ms de dos metros

    SELECT COUNT( comi si on) FROM j ugador WHERE al t ura > 2, 00;

    -Calcular el salario medio de todos los jugadores

    SELECT AVG( sal ar i o) AS Sal ar i o Medi o FROM j ugador ;

    -Encontrar el salario ms alto, el ms bajo y la diferencia entre ambos

    SELECT MAX( sal ar i o) , MI N( sal ar i o) , MAX( sal ar i o) -MI N( sal ar i o) Di f er enci a sal ar i os FROM j ugador ;

    -Hallar el nmero de ciudades en las que hay equipos registrados

    SELECT COUNT ( DI STI NCT ci udad) FROM equi po;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    21/35

    Clusula GROUP BY

    Consultas con agrupamiento de filasFormato

    GROUP BY col 1 [ , col 2] . . .

    -Seleccionar el nmero de jugadores por equipo

    SELECT COUNT( *) GROUP BY equi po;

    -Seleccionar el salario, mnimo y mximo de los jugadores, agrupados por

    equipo

    SELECT equi po, MI N( sal ar i o) , MAX( sal ar i o)

    FROM j ugadorGROUP BY equi po;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    22/35

    Clusula HAVING

    Permite imponer condiciones sobre el resultado de funciones de agregado

    Formato

    HAVI NG condi ci n

    -Seleccionar el salario medio de cada equipo, pero solo para aquellos cuya

    media sea superior a 50000

    SELECT AVG( sal ar i o)FROM j ugadorGROUP BY equi poHAVI NG AVG( sal ar i o) > 50000;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    23/35

    Subconsultas

    Consultas cuya condicin depende del resultado de otra/s consulta/s

    Se diferencian dos tipos:

    No correlacionadas:la consulta interna puede realizarse independientemente de la externa.

    Correlacionadas:

    la consulta interna debe tener en cuenta algun campo de la consulta

    externa para realizarse.

    Ejemplo subconsulta no correlacionada:

    -Obtener los datos de los jugadores cuyo salarios sea mayor que el de Gasol.

    SELECT * FROM j ugadores WHERE sal ar i o> ( SELECT sal ar i oFROM j ugadores WHERE apel l i do= Gasol ) ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    24/35

    Predicados en subconsultas

    Cuantificadores (ALL, SOME, ANY)Cuantificador ALL: establece una condicin sobre todos los valores devueltos

    por la subconsulta.

    -Obtener el nombre de los jugadores que ganen ms que todos los delequipo 2.

    SELECT nombr e FROM j ugador WHERE sal ar i o > ALL ( SELECT

    sal ar i o FROM j ugador WHERE equi po= 2) ;

    Cuantificador ANY o SOME: condicin se cumple si alguno de los valoresdevueltos por la subconsulta coincide con el criterio de bsqueda.

    -Seleccionar los jugadores que ganen ms que alguno de los del equipo 5.

    SELECT nombr e FROM j ugador WHERE sal ar i o > ANY ( SELECTsal ar i o FROM j ugador WHERE equi po = 5) ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    25/35

    Predicados en subconsultas

    Cuantificadores (IN y EXISTS)Predicado IN: implica considerar la subconsulta como un conjunto de

    valores a los que aplicar el predicado

    -Datos de los jugadores que jueguen en Zaragoza:

    SELECT *FROM j ugador

    WHERE equi po I N( SELECT i d_equi po FROM equi po WHERE ci udad= Zar agoza ) ;

    Predicado EXISTS: Devuelve Verdadero si la subconsulta subsiguientees no vaca y Falso en caso contrario

    -Obtener los datos de los jugadores pero solo si hay ms de 10 equipos

    SELECT * FROM j ugador WHERE EXI STS ( SELECT COUNT( *) FROMequi po HAVI NG COUNT( *) >10) ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    26/35

    Consultas correlacionadas I

    Consulta en la que se requieren campos de la consulta externa para

    resolver la subconsulta o consulta interna.

    Procesamiento de consultas correlacionadas:

    1. La consulta externa pasa los valores de cada fila de la consulta a la

    consulta interna o subconsulta.

    2. La consulta interna usa los valores que le pasa la consulta externa para

    evaluarlos.

    3. La consulta interna devuelve los valores que cumplan las condiciones a laconsulta externa.

    4. Se repite el proceso para todas las filas de la consulta externa.

    -Obtener los datos de jugadores que miden ms que la media de su equipo

    SELECT *FROM j ugador j 1WHERE al t ura >( SELECT AVG( al t ura) FROM j ugador j 2 WHERE

    j 1. equi po=j 2. equi po) ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    27/35

    Consultas correlacionadas II

    Consultas correlacionadas con predicado EXISTS

    Este predicado es frecuentemente usado en subconsultas correlacionadas

    para verificar cuando un valor recuperado por la consulta externa existe

    en el conjunto de resultados obtenidos por la consulta interna

    -Obtener los datos de los capitanes de los equipos

    SELECT * FROM j ugador j 1

    WHERE j 1. i d_j ugador EXI STS ( SELECT * FROM j ugador j 2WHERE j 1. i d_j ugador = j 2. capi t an) ;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    28/35

    Otros usos Subconsultas

    Subconsultas como una expresin (en la clasula SELECT)

    -Datos de los jugadores con el salario medio de su equipo y la diferencia

    de ste con el de cada jugador:

    SELECT num_emp, sal ,( SELECT AVG( sal ) ' medi a' FROM emp) AS t ,sal - ( SELECT avg( sal ) ' medi a' FROM emp) AS di f er enci a;

    Consultas como tablas derivadas

    -Obtener el mximo salario total de todos los equipos

    SELECT max( t der i vada. maxsal )

    FROM( SELECT sum( sal ar i o) ' maxsal ' FROM j ugador GROUP BY

    equi po) AS t der i vada;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    29/35

    CONSULTAS SOBRE VARIAS TABLAS

    A veces se requiere el uso de ms de una tabla

    -Porque la condicin implica otros campos que estn en otras tablas

    -Porque queremos mostrar informacin que est en ms de una tabla

    Para ello disponemos de la operacin de reunin o JOIN que es equivalenteal producto cartesiano de dos o ms tablas

    El proceso de diseo de una consulta de varias tablas se resume en:

    1. Analizar la consulta para ver las tablas necesarias para resolverla

    2. Incluir dichas tablas en la clusula FROM

    3. Filtrar filas espurias usando campos comunes o claves ajenas

    4. Aadir los filtros o clusulas necesarias tal como si trabajsemos con unanica tabla

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    30/35

    CONSULTAS SOBRE VARIAS TABLASOperaciones de reunin (JOIN) I

    La operacin JOIN incluye variantes

    INNER JOIN: composicin interna

    -Obtener nmero de jugadores de equipos de Madrid:

    SELECT COUNT( *) FROM j ugador j , equi po e

    WHERE j . equi po = e. i d_equi po AND ci udad= Madr i d;

    OUTER JOIN: composicin externa

    Se incluyen registros combinado aunque tengan valor nulo.

    Hay dos variantes:

    -LEFT incluye solo los registros nulos de la tabla izquierda

    -RIGHT incluye solo los registros nulos de la tabla derecha

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    31/35

    CONSULTAS SOBRE VARIAS TABLAS

    Operaciones de reunin (JOIN) II-Mostrar los datos de todos los jugadores incluyendo datos de sus equipos en

    caso de tener

    SELECT COUNT( *) FROM j ugador j LEFT J OI N equi po eON j . equi po = e. i d_equi po;

    STRAIGHT_JOIN: composicin directa

    Equivalente a la reunin interna salvo que as se obliga a procesar

    primero la tabla indicada en primer lugar (tendr su importancia en

    optimizacin)

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    32/35

    CONSULTAS SOBRE VARIAS TABLASOperaciones de Unin

    Unin

    Se muestra el resultado de dos consultas con el mismo nmero y

    tipo de campos

    Sintaxis

    SELECT . . .UNI ON [ ALL | DI STI NCT]SELECT . . .

    [ UNI ON [ ALL | DI STI NCT]SELECT . . . ]

    -Mostrar, ordenados por nombre, los nombres de

    jugadores de los equipos 1 y 2.

    ( SELECT nombr e FROM j ugadorWHERE equi po=1)UNI ON

    ( SELECT nombr e FROM j ugadorWHERE equi po=2)ORDER BY 1 LI MI T 10;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    33/35

    CONSULTAS SOBRE VARIAS TABLASOperaciones de Interseccin

    Interseccin

    Operacin entre dos conjuntos cuyo resultado es el conjunto deelementos comunes en ambos..

    -Obtener el listado de equipos que han jugado como locales y visitantes.

    Si lo hicisemos con otro gestor como Postgresql:

    SELECT l ocal FROM equi poI NTERSECT

    SELECT vi si t ant e FROM equi po;

    CONSULTAS SOBRE VARIAS TABLAS

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    34/35

    CONSULTAS SOBRE VARIAS TABLAS

    Operaciones de Diferencia

    Diferencia

    Operacin entre dos conjuntos cuyo resultado es el conjunto de elementos que son

    distintos

    -Para obtener todos los nombres de jugadores del equipo 1 que no coincidan con

    ningn nombre del equipo 2

    En PostgreSQL:

    SELECT nombr e FROM equi po WHERE i d_equi po=1EXCEPTSELECT nombr e FROM equi po WHERE i d_equi po=2;

    En MySQL tenemos dos posibilidades, una subconsulta y una combinacin:

    SELECT nombre FROM equi po WHERE i d_equi po=1 AND nombr e NOT I N( SELECTnombre FROM equi po WHERE i d_equi po=2;

    SELECT DI STI NCT a. nombreFROM j ugador a LEFT J OI N j ugador b USI NG a. nombr eWHERE ( a. equi po=1 OR a. equi po=2)AND ( b. equi po=1 OR b. equi po=2)AND b. nombre I S NULL;

  • 7/25/2019 Bases_asir_cap4 Realizacin de Consultas Luis Hueso Ibez

    35/35

    FIN CAPTULO 4