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 ... )