Unidad 04 01 Consultas I

download Unidad 04 01 Consultas I

of 37

description

Subconsultas SQL parte 1.Muy esquematico con algún ejemplo.

Transcript of Unidad 04 01 Consultas I

  • Fundamentos Bases de Datos Consultas

    (1 parte)

  • Fundamentos Bases de Datos Consultas

    Las sentencias DML del lenguaje SQL son: SELECT: extrae informacin de la BD, de una o varias

    tablas INSERT: inserta registro(s) en alguna tabla DELETE: borra registro(s) de una tabla UPDATE: modifica registros de una tabla (Cualquier ejecucin de un comando en un SGBD se denomina consulta (del trmino ingls query), debe entenderse como peticin al SGBD para realizar una operacin determinada.)

  • Fundamentos Bases de Datos Consultas

    Sintaxis: SELECT [DISTINCT] select_expr [,select_expr] ...

    [FROM tabla]

    siendo select_expr: nombre_columna [AS alias]

    | *

    | expresion El prametro DISTINCT fuerza a evitar las repeticiones y que solo se muestren los registros con valores distintos

  • Fundamentos Bases de Datos Consultas

    # consulta 1 SELECT * FROM vehiculos;

    +-----------+----------------+---------+

    | matricula | modelo | marca |

    +-----------+----------------+---------+

    | 1129FGT | ibiza gt | seat |

    | 1132GHT | leon tdi 105cv | seat |

    | M6836YX | corolla g6 | toyota |

    | 7423FZY | coupe | hyundai |

    | 3447BYD | a3 tdi 130cv | audi |

    +-----------+----------------+---------+

  • Fundamentos Bases de Datos Consultas

    SELECT matricula,

    concat(marca,modelo) as coche

    FROM vehiculos;

    +-----------+---------------------+

    | matricula | coche |

    +-----------+---------------------+

    | 1129FGT | seatibiza gt |

    | 1132GHT | seatleon tdi 105cv |

    | M6836YX | toyotacorolla g6 |

    | 7423FZY | hyundaicoupe |

    | 3447BYD | audia3 tdi 130cv |

    +-----------+---------------------+

    (La funcin concat en Oracle solo admite 2 parmetros)

  • Fundamentos Bases de Datos Consultas

    SELECT 1+6;

    +-----+

    | 1+6 |

    +-----+

    | 7 |

    +-----+

    SELECT matricula, modelo,1+5

    FROM vehiculos;

    +-----------+----------------+-----+

    | matricula | modelo | 1+5 |

    +-----------+----------------+-----+

    | 1129FGT | ibiza gt | 6 |

    | 1132GHT | leon tdi 105cv | 6 |

    | M6836YX | corolla g6 | 6 |

    | 7423FZY | coupe | 6 |

    | 3447BYD | a3 tdi 130cv | 6 |

    +-----------+----------------+-----+

    (En Oracle para poder utilizar las expresiones algebraicas es necesario especificar FROM dual)

  • Fundamentos Bases de Datos Consultas

    SELECT marca FROM

    vehiculos;

    +---------+

    | marca |

    +---------+

    | seat |

    | seat |

    | toyota |

    | hyundai |

    | audi |

    +---------+

    SELECT DISTINCT

    marca

    FROM vehiculos;

    +---------+

    | marca |

    +---------+

    | seat |

    | toyota |

    | hyundai |

    | audi |

    +---------+

    Realizar actividad 4.1

  • Fundamentos Bases de Datos Consultas

    Filtro: condicin que cualquier SGBD interpreta para seleccionar registros y mostrarlos como resultado de la consulta SELECT [DISTINCT] select_expr

    [,select_expr] ...

    [FROM tabla]

    [WHERE filtro];

    siendo filtro la expresin que indica la condicin o condiciones que deben satisfacerse

  • Fundamentos Bases de Datos Consultas

    SELECT * FROM vehiculos

    WHERE marca='seat';

    +-----------+----------------+-------+

    | matricula | modelo | marca |

    +-----------+----------------+-------+

    | 1129FGT | ibiza gt | seat |

    | 1132GHT | leon tdi 105cv | seat |

    +-----------+----------------+-------+

  • Fundamentos Bases de Datos Consultas

    #expresin 1 (oracle): (2+3)*7 SELECT (2+3)*7 from dual;

    (2+3)*7

    ----------

    35

    #expresin 2 (mysql): (2+3)>(6*2) SELECT (2+3)>(6*2);

    +-------------+

    | (2+3)>(6*2) |

    +-------------+

    | 0 | #0 = falso, es falso que 5>12 +-------------+

  • Fundamentos Bases de Datos Consultas

    #(mysql): la fecha de hoy -31 aos;

    SELECT date_sub(now(), interval 31 year);

    +-----------------------------------+

    | date_sub(now(), interval 31 year) |

    +-----------------------------------+

    | 1980-12-19 13:41:40 |

    +-----------------------------------+

    Leer fichero expresiones.pdf

  • Fundamentos Bases de Datos Consultas

    #selecciona los nombres de los jugadores de los Lakers:

    #selecciona los nombres de los jugadores espaoles de los Lakers:

    SELECT Nombre FROM jugadores WHERE

    Nombre_equipo='Lakers';

    SELECT Nombre FROM jugadores WHERE

    Nombre_equipo='Lakers'

    and Procedencia='Spain';

  • Fundamentos Bases de Datos Consultas

    #Selecciona los jugadores espaoles y eslovenos de los Lakers

    SELECT Nombre, Altura, Procedencia FROM jugadores

    WHERE Nombre_equipo='Lakers'

    AND (Procedencia='Spain' OR Procedencia='Slovenia');

    +---------------+--------+-------------+

    | Nombre | Altura | Procedencia |

    +---------------+--------+-------------+

    | Pau Gasol | 7-0 | Spain |

    | Sasha Vujacic | 6-7 | Slovenia |

    +---------------+--------+-------------+

  • Fundamentos Bases de Datos Consultas

    IN: Operador de pertenencia a conjuntos.

    Sintaxis:

    Nombre_columna IN

    (valor_1, valor_2 , valor_3,)

    Permite comprobar si una columna tiene un valor igual que cualquiera de los que estn incluidos en el conjunto de valores indicados de una manera ms corta que utilizando el anidamiento de condiciones con OR.

  • Fundamentos Bases de Datos Consultas

    #Selecciona los jugadores espaoles, eslovenos y serbios de los Lakers

    SELECT Nombre, Altura,Procedencia

    FROM jugadores

    WHERE Nombre_equipo='Lakers' AND

    Procedencia IN

    ('Spain','Slovenia','Serbia &

    Montenegro');

  • Fundamentos Bases de Datos Consultas

    BETWEEN: Operador de rango.

    Sintaxis: Nombre_columna BETWEEN valor_1 AND valor_2

    Permite seleccionar los registros que estn incluidos en un rango de valores de una manera ms corta que anidando condiciones con el operador AND.

  • Fundamentos Bases de Datos Consultas

    SELECT Nombre, Nombre_equipo, Peso FROM

    jugadores

    WHERE Peso BETWEEN 270 AND 300;

    +----------------+---------------+------+

    | Nombre | Nombre_equipo | Peso |

    +----------------+---------------+------+

    | Chris Richard | Timberwolves | 270 |

    | Paul Davis | Clippers | 275 |

    | .... | .... | ... |

    | David Harrison | Pacers | 280 |

    +----------------+---------------+------+

    Realizar actividad 4.2

  • Fundamentos Bases de Datos Consultas

    IS: Operador de test de valor nulo.

    IS NOT: Operador de test de valor no nulo

    Sintaxis: Nombre_columna IS null;

    Nombre_columna IS NOT null;

    Permite verificar si un valor es nulo o no.

  • Fundamentos Bases de Datos Consultas

    #seleccionar jugadores cuya procedencia es desconocida SELECT nombre,Nombre_equipo

    FROM jugadores WHERE Procedencia IS null;

    +----------------+---------------+

    | nombre | Nombre_equipo |

    +----------------+---------------+

    | Anthony Carter | Nuggets |

    +----------------+---------------+

    #la consulta contraria saca el resto de jugadores SELECT nombre,Nombre_equipo

    FROM jugadores WHERE Procedencia IS NOT null;

  • Fundamentos Bases de Datos Consultas

    Seleccionan los registros que cumplen una serie de caractersticas usando los caracteres comodn % y _.

    El carcter comodn % busca coincidencias de cualquier nmero de caracteres, incluso cero caracteres.

    El carcter comodn _ busca coincidencias de exactamente un carcter.

  • Fundamentos Bases de Datos Consultas

    SELECT * FROM vehiculos WHERE modelo

    LIKE '%tdi%';

    +-----------+----------------+-------+

    | matricula | modelo | marca |

    +-----------+----------------+-------+

    | 1132GHT | leon tdi 105cv | seat |

    | 3447BYD | a3 tdi 130cv | audi |

    +-----------+----------------+-------+

  • Fundamentos Bases de Datos Consultas

    Sacar los equipos que empiecen por R, que terminen por S y que tengan 7 caracteres.

    Sacar los equipos que aparezca en su nombre como segunda letra la o.

  • Fundamentos Bases de Datos Consultas

    Consiste en limitar el nmero de registros devuelto por una consulta. Este tipo de filtro no es estndar y su funcionamiento vara con el SGBD. Sintaxis MySQL: LIMIT [desplazamiento,]n_filas

    Donde n filas indica el nmero de registros a devolver y desplazamiento a partir de qu registro se empieza a contar.

    Sintaxis ORACLE: rownum

  • Fundamentos Bases de Datos Consultas

    #devuelve los 4 primeros registros

    SELECT nombre, Nombre_equipo

    FROM jugadores limit 4;

    #devuelve 3 registros a partir del sexto

    SELECT nombre, Nombre_equipo

    FROM jugadores LIMIT 5,3;

  • Fundamentos Bases de Datos Consultas

    # Saca los 25 primeros jugadores

    SELECT *

    FROM jugadores

    WHERE rownum

  • Fundamentos Bases de Datos Consultas

    Para mostrar ordenados los registros se utiliza la clusula ORDER BY:

    SELECT [DISTINCT] select_expr

    [,select_expr] ...

    [FROM tabla]

    [WHERE filtro]

    [ORDER BY {nombre_columna | expr |

    posicin} [ASC | DESC] , ...];

  • Fundamentos Bases de Datos Consultas

    SELECT

    Division,Nombre

    FROM equipos

    WHERE

    Conferencia='West'

    ORDER BY

    Division ASC,

    Nombre DESC;

    +-----------+---------------+

    | Division | Nombre |

    +-----------+---------------+

    | NorthWest | Trail Blazers |

    | NorthWest | Timberwolves |

    | NorthWest | Supersonics |

    | NorthWest | Nuggets |

    | NorthWest | Jazz |

    | Pacific | Warriors |

    | Pacific | Suns |

    | Pacific | Lakers |

    | Pacific | Kings |

    | Pacific | Clippers |

    | SouthWest | Spurs |

    | SouthWest | Rockets |

    | SouthWest | Mavericks |

    | SouthWest | Hornets |

    | SouthWest | Grizzlies |

    +-----------+---------------+

  • Fundamentos Bases de Datos Consultas

    Se pueden generar consultas ms complejas que resuman cierta informacin, extrayendo informacin calculada de varios conjuntos de registros.

    Hay que hacer uso de las funciones de columna que convierten un conjunto de registros en una informacin simple:

    SUM (Expresin) #Suma los valores indicados en el argumento

    AVG (Expresin) #Calcula la media de los valores

    MIN (Expresin) #Calcula el mnimo

    MAX (Expresin) #Calcula el mximo

    COUNT (nbColumna) #Cuenta el nmero de valores de una columna (excepto los nulos)

    COUNT (*) #Cuenta el nmero de valores de una fila incluyendo los nulos.

  • Fundamentos Bases de Datos Consultas

    SELECT count(*) FROM vehiculos;

    +----------+

    | count(*) |

    +----------+

    | 5 |

    +----------+

  • Fundamentos Bases de Datos Consultas

    #consulta 1: Cunto pesa el jugador ms pesado de la nba? SELECT max(peso) FROM jugadores;

    #consulta 2: Cunto mide el jugador ms bajito de la nba? SELECT min(altura) FROM jugadores;

    #consulta 3: Cuntos jugadores tienen los Lakers? SELECT count(*) FROM jugadores WHERE Nombre_equipo='Lakers';

    #consulta 4: Cunto pesan de media los jugadores de los Blazers?

    SELECT avg(peso) FROM jugadores WHERE Nombre_equipo='Blazers';

  • Fundamentos Bases de Datos Consultas

    Con las consultas de resumen se pueden realizar agrupaciones de registros.

    Se denomina agrupacin de registros a un conjunto de registros que cumplen que tienen una o varias columnas con el mismo valor.

  • Fundamentos Bases de Datos Consultas

    SELECT [DISTINCT] select_expr

    [,select_expr] ...

    [FROM tabla]

    [WHERE filtro]

    [GROUP BY expr [, expr].... ]

    [ORDER BY {nombre_columna | expr |

    posicin} [ASC | DESC] , ...]

  • Fundamentos Bases de Datos Consultas

    SELECT * FROM vehiculos;

    +-----------+----------------+---------+

    | matricula | modelo | marca |

    +-----------+----------------+---------+

    | 1129FGT | ibiza gt | seat |

    | 1132GHT | leon tdi 105cv | seat |

    | M6836YX | corolla g6 | toyota |

    | 7423FZY | coupe | hyundai |

    | 3447BYD | a3 tdi 130cv | audi |

    +-----------+----------------+---------+

    SELECT marca, count(*)

    FROM

    vehiculos GROUP BY

    marca;

    +---------+----------+

    | marca | count(*) |

    +---------+----------+

    | audi | 1 |

    | hyundai | 1 |

    | seat | 2 |

    | toyota | 1 |

    +---------+----------+

  • Fundamentos Bases de Datos Consultas

    #Cunto pesa el jugador ms pesado de cada equipo? SELECT Nombre_equipo, max(peso)

    FROM jugadores GROUP BY Nombre_equipo;

    #Cuntos equipos tiene cada conferencia en la nba? SELECT count(*), conferencia

    FROM equipos GROUP BY conferencia;

    #Cunto pesan de media los jugadores de Espaa, Francia e Italia? SELECT avg(peso), procedencia FROM jugadores WHERE procedencia IN ('Spain','Italy','France') GROUP BY procedencia;

  • Fundamentos Bases de Datos Consultas

    Los filtros de grupos deben realizarse mediante el uso de la clusula HAVING ya que WHERE acta antes de agrupar los registros. SELECT [DISTINCT] select_expr [,select_expr] ...

    [FROM tabla]

    [WHERE filtro]

    [GROUP BY expr [, expr].... ]

    [HAVING filtro_grupos]

    [ORDER BY {nombre_columna | expr | posicin} [ASC | DESC] , ...]

    HAVING aplica los mismos filtros que la clusula WHERE.

  • Fundamentos Bases de Datos Consultas

    # Seleccionar los equipos de la nba cuyos jugadores pesen de media ms de 228 libras

    SELECT Nombre_equipo, avg(peso)

    FROM jugadores

    GROUP BY Nombre_equipo

    HAVING avg(peso)>228

    ORDER BY avg(peso);

  • Fundamentos Bases de Datos Consultas

    # seleccionar qu equipos de la nba tienen ms de 1 jugador espaol

    SELECT Nombre_equipo,count(*)

    FROM jugadores

    WHERE procedencia='Spain'

    GROUP BY Nombre_equipo

    HAVING count(*)>1;