You are on page 1of 15

SQL: SENTENCIA SELECT

1. Sintaxis
2. Consultas Sencillas
2.1 Lista de Seleccin
2.2 Clasula WHERE
3. Consultas Avanzadas
3.1 START WITH ... CONNECT BY
3.2 GROUP BY ... HAVING
4. Operaciones de Conjuntos
5. Clasulas Varias
6. Reuniones
7. Subconsultas
Vctor

BASES DE DATOS

CURSO 2005/2006

1. SINTAXIS
SELECT [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] ]
Vctor

BASES DE DATOS
CURSO 2005/2006

2. CONSULTAS SENCILLAS
2.1 Lista de Seleccin

Lista de seleccin

SELECT codc, a.*


FROM clientes c, articulos a, facturas f
WHERE 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

Vctor

BASES DE DATOS

CURSO 2005/2006

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

Vctor

BASES DE DATOS
CURSO 2005/2006

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

FUNCIONES para grupos

Vctor

Numricas: ABS(n), MOD(m,n), EXP(n)


De caracteres: LENGTH(cadena), CONCAT(c1,c2) ||
{COUNT|MAX|MIN|AVG|SUM} ([DISTINCT|ALL] expresin)
SELECT COUNT(DISTINCT coda) FROM suministros
BASES DE DATOS

CURSO 2005/2006

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;

Vctor

BASES DE DATOS
CURSO 2005/2006

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.

Vctor

SELECT *
FROM facturas f, clientes c
WHERE f.codc=c.codc
BASES DE DATOS

CURSO 2005/2006

2. CONSULTAS SENCILLAS
2.2 La clasula WHERE
Se pueden incluir los siguientes operadores:

Vctor

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

BASES DE DATOS
CURSO 2005/2006

2. CONSULTAS SENCILLAS
2.2 La clasula WHERE
Ejemplos:

Vctor

SELECT * FROM articulos


WHERE ctd>500 AND color=ROJO
SELECT * FROM articulos
WHERE color LIKE A%
SELECT p.codp, p.nombre, a.coda, a.nombre
FROM proveedores p, articulos a
WHERE p.codp IN ( subconsulta )
9

BASES DE DATOS
CURSO 2005/2006

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

Columnas de
agrupamiento

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

BASES DE DATOS
CURSO 2005/2006

10

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.

Vctor

BASES DE DATOS

11

CURSO 2005/2006

3. CONSULTAS AVANZADAS
3.2 GROUP BY ... HAVING
Ejemplos

Vctor

SELECT c.codc, SUM(f.precio)


FROM facturas f, clientes c
GROUP BY c.codc
SELECT c.codc, c.dni, SUM(f.precio)
FROM facturas f, clientes c
WHERE c.codc=f.codc
GROUP BY c.codc, c.dni
BASES DE DATOS
CURSO 2005/2006

12

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

Vctor

SELECT c.codc
FROM facturas f, clientes c
WHERE c.codc=f.codc
GROUP BY c.codc HAVING (SUM(f.precio)>5000)

BASES DE DATOS

13

CURSO 2005/2006

3. CONSULTAS AVANZADAS
3.2 GROUP BY ... HAVING

Orden de evaluacin de las clasulas de SELECT


1.
2.
3.
4.
5.
6.
7.

Vctor

FROM: selecciona las tablas|vista implicadas.


WHERE: descartar las filas que no cumplan la condicin
impuesta.
GROUP BY: crear grupos con las filas que queden tras el
WHERE, segn las columnas de agrupamiento.
HAVING: descartar los grupos que no satisfagan la condicin
impuesta.
SELECT: evaluar para cada grupo las expresiones de la lista de
seleccin produciendo una sola fila por grupo.
ORDER: ordenar los datos de acuerdo a los criterios establecidos.
Mostrar el resultado.
BASES DE DATOS
CURSO 2005/2006

14

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

UNION
UNION ALL
INTERSECT
MINUS

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

BASES DE DATOS

15

CURSO 2005/2006

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 facturas


WHERE codc=C1 OR codc=C9
UNION
SELECT pvp, coda FROM articulos

Vctor

BASES DE DATOS
CURSO 2005/2006

16

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

Vctor

BASES DE DATOS

17

CURSO 2005/2006

4. OPERACIONES DE
CONJUNTOS
4.4 INTERSECT
Devuelve las filas comunes a las consultas
implicadas.
Ejemplo:

Vctor

Consulta 1: P1, P2, P4, P5


Consulta 2: P2, P4, P8, P15
C1 INTERSECT C2: P2, P4

BASES DE DATOS
CURSO 2005/2006

18

4. OPERACIONES DE
CONJUNTOS
4.5 MINUS
Devuelve las filas que ha devuelto la primera
consulta, pero que no ha devuelto la segunda.
Ejemplo:

Vctor

Consulta 1: P1, P2, P4, P5


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

BASES DE DATOS

19

CURSO 2005/2006

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 proveedores
ORDER BY nombre

SELECT codp, nombre


FROM proveedores
ORDER BY 2

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.

Vctor

BASES DE DATOS
CURSO 2005/2006

20

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.

Vctor

Si no se desea que la consulta quede bloqueada


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

21

CURSO 2005/2006

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:

Vctor

Simple o equi reunin (Equi join)


Producto cartesiano
Reunin externa
BASES DE DATOS
CURSO 2005/2006

22

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:

Vctor

SELECT nombre, coda


FROM proveedores p, suministros s
WHERE p.codp=s.codp

BASES DE DATOS

23

CURSO 2005/2006

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:

Vctor

SELECT p.nombre, a.nombre


FROM proveedores p, articulos a
BASES DE DATOS
CURSO 2005/2006

24

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 t2
WHERE {t1.columna = t2.columna (+) |
t1.columna(+) = t2.columna }

Vctor

BASES DE DATOS

25

CURSO 2005/2006

6. REUNIONES
6.4 REUNIN EXTERNA (OUTER JOIN)
Ejemplo:

Vctor

SELECT p.codp, coda


FROM proveedores p, suministros s
WHERE p.codp = s.codp (+)
codp

coda

P1

NULL

P2

A2

P3

A7

BASES DE DATOS
CURSO 2005/2006

26

7. SUBCONSULTAS
7.1 SUBCONSULTAS ANIDADAS
Una consulta dentro de otra orden SQL (no
necesariamente un SELECT).

Ejemplo:

Vctor

SELECT * FROM proveedores p


WHERE p.codp IN (SELECT s.codp
FROM suministros s, articulos a
WHERE a.coda = s.coda AND
a.pvp > 100)

BASES DE DATOS

27

CURSO 2005/2006

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

Vctor

CREATE TABLE/VIEW
INSERT
UPDATE
WHERE
HAVING
START WITH

BASES DE DATOS
CURSO 2005/2006

28

7. SUBCONSULTAS
7.1 SUBCONSULTAS CORRELACIONADAS
Son subconsultas que se evalan una vez para
cada fila de la consulta padre.
Ejemplo:

SELECT c.codc
FROM clientes c
WHERE 5000 < (SELECT SUM(f.precio)
FROM facturas f
WHERE c.codc = f.codc
GROUP BY f.codc)

Vctor

BASES DE DATOS

29

CURSO 2005/2006

7. SUBCONSULTAS
7.1 SUBCONSULTAS CORRELACIONADAS
Ejemplo:

UPDATE tabla1
SET columna = (SELECT ... )

DELETE FROM tabla1


WHERE columna operador (SELECT ... )

Vctor

BASES DE DATOS
CURSO 2005/2006

30

You might also like