consultas de seleccion

download consultas de seleccion

of 15

description

sql, consultas de seleccion

Transcript of consultas de seleccion

  • 1CURSO 2005/2006

    BASES DE DATOSVctor

    SQL: SENTENCIA SELECT

    1. Sintaxis2. Consultas Sencillas

    2.1 Lista de Seleccin2.2 Clasula WHERE

    3. Consultas Avanzadas3.1 START WITH ... CONNECT BY3.2 GROUP BY ... HAVING

    4. Operaciones de Conjuntos5. Clasulas Varias6. Reuniones7. Subconsultas

    2CURSO 2005/2006

    BASES DE DATOSVctor

    1. SINTAXISSELECT [DISTINCT|ALL]

    {* |{ [esquema.]{tabla | vista}.*| expresin [alias_c] }[, {[esquema.]{tabla | vista}.*| expresin [alias_c] }

    FROM [esquema.]{tabla | vista} [alias_t][, [esquema.]{tabla | vista} [alias_t] ]

    [WHERE condicin][ [START WITH condicin] CONNECT BY condicion][GROUP BY expresin [, expresin] [HAVING condicin] ][ {UNION | UNION ALL | INTERSECT | MINUS} orden SELECT ][ORDER BY {expresin | posicin} [ASC | DESC]

    [, {expresin | posicin} [ASC | DESC] ] ][FOR UPDATE [OF [ [esquema.]{tabla | vista}.]columna[, [ [esquema.]{tabla | vista}.]columna ] [NOWAIT] ]

  • 3CURSO 2005/2006

    BASES DE DATOSVctor

    2. CONSULTAS SENCILLAS

    2.1 Lista de Seleccin SELECT codc, a.*

    FROM clientes c, articulos a, facturas fWHERE c.codc=f.codc and f.coda=a.coda

    En la lista de seleccin pueden aparecer ALL | DISTINCT Expresiones Funciones

    Que acten sobre filas individuales Que acten sobre grupos de filas

    Lista de seleccin

    4CURSO 2005/2006

    BASES DE DATOSVctor

    2. CONSULTAS SENCILLAS

    2.1 Lista de Seleccin * : devuelve todas las columnas de una tabla|vista.

    {tabla|vista}.* *

    ALL: devuelve todas las filas, incluyendo filas duplicadas.

    DISTINCT: no devuelve las filas duplicadas. SELECT DISTINCT * FROM estudiantes

  • 5CURSO 2005/2006

    BASES DE DATOSVctor

    2. CONSULTAS SENCILLAS

    2.1 Lista de Seleccin Las EXPRESIONES suelen incluir referencias a

    las tablas|vistas que aparecen en la clasula FROM, pero tambin se pueden usar funciones. FUNCIONES para filas individuales

    Numricas: ABS(n), MOD(m,n), EXP(n) De caracteres: LENGTH(cadena), CONCAT(c1,c2) ||

    FUNCIONES para grupos {COUNT|MAX|MIN|AVG|SUM} ([DISTINCT|ALL] expresin)

    SELECT COUNT(DISTINCT coda) FROM suministros

    6CURSO 2005/2006

    BASES DE DATOSVctor

    2. CONSULTAS SENCILLAS

    2.1 Lista de Seleccin Los ALIAS permiten asignar un nombre

    alternativo a una tabla, vista o expresin dentro de una consulta.

    SELECT SUM(f.precio) Compras FROM facturas f

    SELECT p.codp, p.nombre, a.coda, a.nombre FROM proveedores p, articulos a;

  • 7CURSO 2005/2006

    BASES DE DATOSVctor

    2. CONSULTAS SENCILLAS

    2.2 La clasula WHERE Si no se incluye la clasula WHERE se har el producto

    cartesiano de todas las tablas|vistas incluidas en la clasula FROM

    SELECT * FROM facturas f, clientes c

    Cuando se incluye la clasula WHERE en una consulta slo se devolvern aquelas filas que cumplen la condicin especificada en dicha clasula.

    SELECT * FROM facturas f, clientes cWHERE f.codc=c.codc

    8CURSO 2005/2006

    BASES DE DATOSVctor

    2. CONSULTAS SENCILLAS

    2.2 La clasula WHERE Se pueden incluir los siguientes operadores:

    Artimticos: +, -, *, / Concatenacion: || Relacionales: =, !=, , = Lgicos: AND, OR, NOT Varios: IN, IS [NOT] NULL, LIKE patrn, %, _

  • 9CURSO 2005/2006

    BASES DE DATOSVctor

    2. CONSULTAS SENCILLAS

    2.2 La clasula WHERE Ejemplos:

    SELECT * FROM articulosWHERE ctd>500 AND color=ROJO

    SELECT * FROM articulosWHERE color LIKE A%

    SELECT p.codp, p.nombre, a.coda, a.nombreFROM proveedores p, articulos aWHERE p.codp IN ( subconsulta )

    10CURSO 2005/2006

    BASES DE DATOSVctor

    3. CONSULTAS AVANZADAS

    3.1 START WITH ... CONNECT BY Devuelve las filas segn una ordenacin

    jerrquica (se ver en la prctica 4).3.2 GROUP BY ... HAVING

    Permite agrupar filas GROUP BY columna1,[,columna2] ... Se crean grupos con las filas en los que coinciden

    los valores de todas las columnas de agrupamiento.

    Columnas de agrupamiento

  • 11CURSO 2005/2006

    BASES DE DATOSVctor

    3. CONSULTAS AVANZADAS

    3.2 GROUP BY ... HAVING Se evala la lista de seleccin para cada uno de los grupos,

    produciendo una sola fila en el resultado. Si se incluye GROUP BY, en la lista de seleccin slo puede haber:

    Constantes Funciones de grupo Expresiones idnticas a las del GROUP BY Expresiones que usan las expresiones anteriores y obtienen una sola fila

    por grupo NO se pueden especificar columnas en la lista de select que no estn en

    las columnas de agrupamiento! Las columnas que no aparecen en las columnas de agrupamiento slo

    pueden aparecer como parmentros de funciones agregadas.

    12CURSO 2005/2006

    BASES DE DATOSVctor

    3. CONSULTAS AVANZADAS

    3.2 GROUP BY ... HAVING Ejemplos

    SELECT c.codc, SUM(f.precio)FROM facturas f, clientes cGROUP BY c.codc

    SELECT c.codc, c.dni, SUM(f.precio)FROM facturas f, clientes cWHERE c.codc=f.codcGROUP BY c.codc, c.dni

  • 13CURSO 2005/2006

    BASES DE DATOSVctor

    3. CONSULTAS AVANZADAS

    3.2 GROUP BY ... HAVING ... HAVING

    Clasula opcional que se utiliza para descartar grupos de filas (funciona de forma similar al WHERE para las filas). SELECT c.codc

    FROM facturas f, clientes cWHERE c.codc=f.codcGROUP BY c.codc HAVING (SUM(f.precio)>5000)

    14CURSO 2005/2006

    BASES DE DATOSVctor

    3. CONSULTAS AVANZADAS

    3.2 GROUP BY ... HAVING Orden de evaluacin de las clasulas de SELECT

    1. FROM: selecciona las tablas|vista implicadas.2. WHERE: descartar las filas que no cumplan la condicin

    impuesta.3. GROUP BY: crear grupos con las filas que queden tras el

    WHERE, segn las columnas de agrupamiento.4. HAVING: descartar los grupos que no satisfagan la condicin

    impuesta.5. SELECT: evaluar para cada grupo las expresiones de la lista de

    seleccin produciendo una sola fila por grupo.6. ORDER: ordenar los datos de acuerdo a los criterios establecidos.7. Mostrar el resultado.

  • 15CURSO 2005/2006

    BASES DE DATOSVctor

    4. OPERACIONES DE CONJUNTOS

    4.1 Operaciones de Conjuntos Combinan las filas devueltas por dos o ms

    rdenes SELECT utilizando operaciones de conjuntos.

    El nmero de columnas y el tipo de datos de cada una de ellas debe ser el mismo en todas las sentencias SELECT combinadas.SELECT 1

    .......................................

    SELECT 2.......................................

    UNIONUNION ALLINTERSECTMINUS

    16CURSO 2005/2006

    BASES DE DATOSVctor

    4. OPERACIONES DE CONJUNTOS

    4.2 UNION Devuelve la unin de las filas devueltas por cada consulta

    individualmente, pero sin duplicados. Ejemplo:

    Consulta 1: P1, P2, P4, P5 Consulta 2: P2, P4, P8, P15 C1 UNION C2: P1, P2, P4, P5, P8, P15

    SELECT precio, coda FROM facturasWHERE codc=C1 OR codc=C9UNIONSELECT pvp, coda FROM articulos

  • 17CURSO 2005/2006

    BASES DE DATOSVctor

    4. OPERACIONES DE CONJUNTOS

    4.3 UNION ALL Devuelve la unin de las filas devueltas por cada

    consulta, pero con duplicados. Ejemplo:

    Consulta 1: P1, P2, P4, P5 Consulta 2: P2, P4, P8, P15 C1 UNION ALL C2: P1, P2, P4, P5, P2, P4, P8, P15

    18CURSO 2005/2006

    BASES DE DATOSVctor

    4. OPERACIONES DE CONJUNTOS

    4.4 INTERSECT Devuelve las filas comunes a las consultas

    implicadas. Ejemplo:

    Consulta 1: P1, P2, P4, P5 Consulta 2: P2, P4, P8, P15 C1 INTERSECT C2: P2, P4

  • 19CURSO 2005/2006

    BASES DE DATOSVctor

    4. OPERACIONES DE CONJUNTOS

    4.5 MINUS Devuelve las filas que ha devuelto la primera

    consulta, pero que no ha devuelto la segunda. Ejemplo:

    Consulta 1: P1, P2, P4, P5 Consulta 2: P2, P4, P8, P15 C1 MINUS C2: P1, P5

    20CURSO 2005/2006

    BASES DE DATOSVctor

    5. CLASULAS VARIAS

    5.1 ORDER BY {expresin | posicin} [ASC | DESC] Orderna las filas devueltas por la consulta basndose en

    expresin o la lista de posiciones relativas a la lista de seleccin.

    Ejemplos: SELECT codp, nombre

    FROM proveedoresORDER BY nombre

    Se pueden especificar varias expresiones. Si existe igualdad para la primera expresin para dos filas se irn evaluando las siguientes expresiones para intentar resolver la igualdad.

    SELECT codp, nombreFROM proveedoresORDER BY 2

  • 21CURSO 2005/2006

    BASES DE DATOSVctor

    5. CLASULAS VARIAS

    5.2 FOR UPDATE Bloquea las filas/columnas especificadas en la

    clasula FOR UPDATE hasta que se termine la transaccin.

    Si las filas que se desea bloquear ya estn bloqueadas por otro usuario, la consulta quedar a la espera de que el otro usuario las libere. Si no se desea que la consulta quede bloqueada

    esperando, se puede aadir NO WAIT a la clasula FOR UPDATE.

    22CURSO 2005/2006

    BASES DE DATOSVctor

    6. REUNIONES

    6.1 REUNIONES (JOINS) Una orden SELECT contiene una reunin cuando

    se combinan filas de dos o ms tablas. A travs de la clasula WHERE se determina

    cmo se combinan las filas de las tablas. Tipos de reuniones:

    Simple o equi reunin (Equi join) Producto cartesiano Reunin externa

  • 23CURSO 2005/2006

    BASES DE DATOSVctor

    6. REUNIONES

    6.2 EQUI REUNIN Es el tipo de reunin ms comn. Devuelve filas de dos o ms tablas|vistas de

    acuerdo a una condicin de igualdad. Ejemplo:

    SELECT nombre, codaFROM proveedores p, suministros sWHERE p.codp=s.codp

    24CURSO 2005/2006

    BASES DE DATOSVctor

    6. REUNIONES

    6.3 PRODUCTO CARTESIANO Ocurre al reunir tablas|vistas sin utilizar ninguna

    condicin en la clasula WHERE. Realiza el producto cartesiano de todas las

    tablas|vistas que aparecen en la clasula FROM. MUY INEFICIENTE!! 100x100 = 10.000 filas Ejemplo:

    SELECT p.nombre, a.nombreFROM proveedores p, articulos a

  • 25CURSO 2005/2006

    BASES DE DATOSVctor

    6. REUNIONES

    6.4 REUNIN EXTERNA (OUTER JOIN) Extiende una reunin simple aadindole las filas que no

    haban sido emparejadas con ninguna fila de la otra tabla. Las valores de las columnas que no se emparejan tomarn

    el valor NULL. SELECT columnas

    FROM tabla1 t1, tabla2 t2WHERE {t1.columna = t2.columna (+) |

    t1.columna(+) = t2.columna }

    26CURSO 2005/2006

    BASES DE DATOSVctor

    6. REUNIONES

    6.4 REUNIN EXTERNA (OUTER JOIN) Ejemplo:

    SELECT p.codp, codaFROM proveedores p, suministros sWHERE p.codp = s.codp (+)

    A7P3

    A2P2

    NULLP1

    codacodp

  • 27CURSO 2005/2006

    BASES DE DATOSVctor

    7. SUBCONSULTAS

    7.1 SUBCONSULTAS ANIDADAS Una consulta dentro de otra orden SQL (no

    necesariamente un SELECT). Ejemplo:

    SELECT * FROM proveedores pWHERE p.codp IN (SELECT s.codp

    FROM suministros s, articulos aWHERE a.coda = s.coda AND

    a.pvp > 100)

    28CURSO 2005/2006

    BASES DE DATOSVctor

    7. SUBCONSULTAS

    7.1 SUBCONSULTAS ANIDADAS Primero se realiza la subconsulta y despus la consulta

    padre. La subconsulta slo se ejecuta una sola vez. Usos

    CREATE TABLE/VIEW INSERT UPDATE WHERE HAVING START WITH

  • 29CURSO 2005/2006

    BASES DE DATOSVctor

    7. SUBCONSULTAS

    7.1 SUBCONSULTAS CORRELACIONADAS Son subconsultas que se evalan una vez para

    cada fila de la consulta padre. Ejemplo:

    SELECT c.codcFROM clientes cWHERE 5000 < (SELECT SUM(f.precio)

    FROM facturas fWHERE c.codc = f.codcGROUP BY f.codc)

    30CURSO 2005/2006

    BASES DE DATOSVctor

    7. SUBCONSULTAS

    7.1 SUBCONSULTAS CORRELACIONADAS Ejemplo:

    UPDATE tabla1SET columna = (SELECT ... )

    DELETE FROM tabla1WHERE columna operador (SELECT ... )