You are on page 1of 49

SQL

Definicin de Datos Manipulacin de Datos

Introduccin
En 1986, el ANSI (American National Standard Institute) defini

un estndar para SQL que en 1987 fue adoptado como estndar internacional por la ISO (International Organization for Standardization) Es un lenguaje orientado a la transformacin: transforma los datos de entrada en las salidas requeridas Tiene dos componentes principales:
Un lenguaje de definicin de datos (DDL, Data Definition

Language) para definir la estructura de la base de datos y controlar el acceso a los datos Un lenguaje de manipulacin de datos (DML, Data Manipulation Language) para extraer y actualizar los datos
2

SQL

IBBDD

Definicin de Datos
Identificadores y tipos de datos del estndar Operadores Especiales Restricciones de integridad Instrucciones de definicin Vistas, Procedimientos Almacenados y Triggers Control de acceso Ejemplo

SQL

IBBDD

Identificadores y Tipos de Datos


Identificadores vlidos de SQL:
Se utilizan para identificar tablas, columnas y vistas Pueden contener letras maysculas, letras minsculas, dgitos y el carcter de

subrayado (_) No pueden tener ms de 128 caracteres, deben comenzar con una letra y no pueden contener espacios
Tipos de datos y declaraciones:

Booleanos: BOOLEAN Caracteres: CHAR, VARCHAR Numricos exactos: SMALLINT, INT, DEC NUMERIC Numricos aproximados: REAL, DOUBLE PRECISION Fecha y hora: DATE, TIME, TIMESTAMP Intervalos (perodos ao-mes o da-hora): INTERVAL Objetos de gran tamao: CHARACTER LARGE OBJECT, BINARY LARGE OBJECT
IBBDD

SQL

Operadores Especiales
Operador
||

Significado
Concatena cadenas de caracteres

LOWER
UPPER CURRENT_DATE CURRENT_TIME EXTRACT

Convierte las letras maysculas en minsculas


Convierte las letras minsculas en maysculas Devuelve la fecha actual Devuelve la hora actual Devuelve el valor de un campo especificado de un valor de fecha y hora o de intervalo. Por ejemplo EXTRACT(YEAR FROM factura.fecha)

CURRENT_TIMESTAMP Devuelve la fecha y la hora actuales

SQL

IBBDD

Restricciones de Integridad
Tipo
Datos requeridos Restricciones de dominio

Formato
NOT NULL CHECK (condicin)

Ejemplo
apellido VARCHAR NOT NULL sexo CHAR NOT NULL CHECK (sexo IN (M, F))

CREATE DOMAIN nombre [AS] tipo CREATE DOMAIN TipoSexo AS CHAR [DEFAULT DEFAULT M CHECK (VALUE IN (M, opcinPredet] [CHECK F)); cond] Para definir: DROP DOMAIN sexo TipoSexo NOT NULL nombre [RESTRICT | CASCADE]

SQL

IBBDD

Restricciones de Integridad
Tipo
Integridad de entidades

Formato
PRIMARY KEY UNIQUE

Ejemplo
PRIMARY KEY (dni) apellido VARCHAR(15) NOT NULL, nombre VARCHAR(15) NOT NULL, UNIQUE (apellido, nombre) Subclusulas: ON UPDATE opcin ON DELETE opcin Opcin: CASCADE|SET NULL|SET DEFAULT|NO ACTION Sirve para definir restricciones sobre reglas de negocio, por ejemplo para chequear que no se vendan ms unidades que las existentes de un producto
IBBDD

Integridad referencial

FOREIGN KEY (columna [,]) REFERENCES tabla [subclusula] CREATE ASSERTION nombre CHECK condicin

Restricciones generales

SQL

Instrucciones de Definicin
De base de datos: CREATE|DROP SCHEMA De dominios: CREATE|ALTER|DROP DOMAIN De tablas: CREATE|ALTER|DROP TABLE De vistas: CREATE|DROP VIEW

De ndices (algunos SGBD): CREATE|DROP INDEX


De procedimientos: CREATE|ALTER|DROP PROCEDURE De triggers: CREATE|DROP TRIGGER
8

SQL

IBBDD

Vistas
CREATE [OR REPLACE] VIEW nombre_vista [(lista_columnas)] AS sentencia_select

SQL

IBBDD

Vistas
Son resultados dinmicos de una o ms operaciones sobre tablas

para producir otra tabla Una vista es una tabla virtual que se produce cuando es invocada Se utilizan para definir operaciones frecuentes en una base de datos y para modularizar operaciones complejas (igual que las asignaciones en AR) Pueden ser para actualizar tablas, con algunas restricciones:

10

No se puede eliminar filas duplicadas de los resultados Slo se puede usar nombres de columnas en la expresin de seleccin Debe haber slo una tabla origen No puede haber subconsultas sobre la tabla origen No puede haber funciones ni restricciones sobre grupos de filas
IBBDD

SQL

Procedimientos Almacenados
CREATE PROCEDURE nombre_procedimiento ([parmetro[,...]]) [COMMENT 'string'] cuerpo parmetro: [ IN | OUT | INOUT ] nombre_parmetro tipo tipo: Cualquier tipo de dato de SQL cuerpo: sentencia_SQL |BEGIN sentencia_SQL; END
11

SQL

IBBDD

Procedimientos Almacenados
Son procedimientos almacenados en la base de datos (stored

procedures) Para invocar un procedimiento almacenado se usa la sentencia CALL nombre_sp ([parmetro[,...]]) La lista de parmetros encerrada entre parntesis siempre debe estar presente. Si el procedimiento no tiene parmetros, se debe especificar una lista vaca (). Si no se especifica IN (de entrada), OUT (de salida) o INOUT (de entrada y salida) antes del nombre del parmetro, se asume por defecto IN.
12

SQL

IBBDD

Ejemplo de Procedimiento Almacenado en MySQL (con parmetro de salida)


mysql> delimiter // mysql> CREATE PROCEDURE simpleproc (OUT param1 INT) -> BEGIN -> SELECT COUNT(*) INTO param1 FROM t; -> END// Query OK, 0 rows affected (0.00 sec) mysql> delimiter ; mysql> CALL simpleproc(@a); Query OK, 0 rows affected (0.00 sec) mysql> SELECT @a; +------+ | @a | +------+ |3 | +------+ 1 row in set (0.00 sec)

13

SQL

IBBDD

Triggers
CREATE TRIGGER nombre_trigger tiempo_activacin tipo_operacin ON nombre_tabla FOR EACH ROW cuerpo tiempo_activacin: { BEFORE | AFTER } tipo_operacin: { INSERT | UPDATE | DELETE }
14

SQL

IBBDD

Triggers
Un trigger (disparador) es un mecanismo de control sobre una tabla, definido

en la base de datos con un nombre, que se activa cuando se ejecuta una operacin especfica sobre la tabla. No se puede definir triggers sobre vistas ni sobre tablas temporales. El tiempo de activacin determina que el cuerpo se ejecute antes (BEFORE) o despus (AFTER) de que cada fila de la tabla sea modificada. El tipo de operacin determina qu modificacin en las filas de la tabla activa al trigger. El cuerpo del trigger es la sentencia que se ejecuta cuando ste se activa. Para ejecutar ms de una sentencia, se debe usar la construccin BEGIN ... END. Las operaciones en cascada sobre claves forneas no activan triggers. Dentro del cuerpo del trigger, se puede referir a las columnas de la tabla asociada usando los alias OLD y NEW. OLD.nombre_columna refiere a una columna de una fila existente antes de que sea actualizada o borrada. NEW.nombre_columna refiere a la columna de una nueva fila a ser insertada o a una fila existente despus de ser actualizada.
IBBDD

15

SQL

Control de Acceso
Concesin de privilegios a otros usuarios

GRANT {listaPrivilegios | ALL PRIVILEGES} ON nombreObjeto TO {listaIdentificadoresAutorizacin | PUBLIC} [WITH GRANT OPTION]
Privilegios
SELECT, DELETE, USAGE INSERT|UPDATE|REFERENCES [(nombreColumna [,])]

Revocacin de privilegios

REVOKE [GRANT OPTION FOR] {listaPrivilegios | ALL PRIVILEGES} ON nombreObjeto FROM {listaIdentificadoresAutorizacin | PUBLIC} [RESTRICT | CASCADE}
16

SQL

IBBDD

Ejemplo
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu) CREATE SCHEMA Facturacion; CREATE DOMAIN IdFactura AS NUMERIC(8); CREATE DOMAIN IdProducto AS CHAR(6); CREATE DOMAIN Precio AS DEC(6, 2);

17

SQL

IBBDD

Ejemplo
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
CREATE TABLE Factura(
nroFac IdFactura fecha DATE fPago CHAR(2) NOT NULL, NOT NULL DEFAULT CURRENT_DATE, NOT NULL CHECK (fPago IN (CO, DE, CR, CH)),

dto

NUMERIC(3, 2)

NOT NULL DEFAULT 0 CHECK (dto <=1),

PRIMARY KEY (nroFac));

18

SQL

IBBDD

Ejemplo
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
CREATE TABLE Producto(
codProd desc existAct IdProducto VARCHAR(30) NUMERIC(4) NOT NULL, NOT NULL, NOT NULL,

existMin
pVAct

NUMERIC(4)
Precio

NOT NULL,
NOT NULL,

PRIMARY KEY (codProd));


SQL

19

IBBDD

Ejemplo
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
CREATE TABLE VentaProd( nroFac IdFactura NOT NULL, codProd IdProducto NOT NULL, cant SMALLINT NOT NULL, pvu Precio NOT NULL, PRIMARY KEY (nroFac, codProd), FOREIGN KEY (nroFac) REFERENCES Factura ON DELETE NO ACTION ON UPDATE NO ACTION, FOREIGN KEY (codProd) REFERENCES Producto ON DELETE NO ACTION ON UPDATE NO ACTION);

20

SQL

IBBDD

Ejemplo
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)

CREATE TRIGGER ActProdVta AFTER INSERT ON VentaProducto FOR EACH ROW UPDATE Producto SET existAct = existAct NEW.cant WHERE Producto.codProd = NEW.codProd

21

SQL

IBBDD

Ejemplo
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)

CREATE TRIGGER ActProdModVta AFTER UPDATE ON VentaProducto FOR EACH ROW BEGIN
IF NEW.codProd <> OLD.codProd THEN # cambi el producto vendido
UPDATE Producto SET existAct = existAct + OLD.cantWHERE Producto.codProd = OLD.codProd; UPDATE Producto SET existAct = existAct - NEW.cant WHERE Producto.codProd = NEW.codProd;

ELSE IF NEW.cant <> OLD.cant THEN # cambi cantidad del mismo producto vendido
UPDATE Producto SET existAct = existAct + OLD.cant NEW.cant WHERE Producto.codProd = OLD.codProd; END IF;

END IF;

END

22

SQL

IBBDD

Ejemplo
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)

CREATE TRIGGER ActProdAnulVta AFTER DELETE ON VentaProducto FOR EACH ROW UPDATE Producto SET existAct = existAct + OLD.cant WHERE Producto.codProd = OLD.codProd

23

SQL

IBBDD

Manipulacin de Datos
Instrucciones de manipulacin de datos: SELECT, INSERT, UPDATE y DELETE

24

SQL

IBBDD

Equivalencias con el AR
T1||T2 SELECT * FROM T1 NATURAL JOIN T2

(equicombinacin de tuplas de T1 y T2 sobre la foreign key de una que referencie a la primary key de la otra)
(equicombinacin de tablas sobre los campos que se especifiquen cuando se quieren igualar campos que no coincidan con la primary key de una y la foreign key de la otra)

T1||T2 SELECT * FROM T1 INNER JOIN T2 ON ()

T1||T2 SELECT * FROM T1 NATURAL JOIN T2

WHERE T1 |T2 SELECT * FROM T1 LEFT JOIN T2 ON () T1 T2 T1 EXCEPT T2


25

SQL

IBBDD

Operaciones Unarias
Obtencin de tuplas de una nica tabla, con algunos o todos los atributos de la misma tabla

26

SQL

IBBDD

Operaciones Unarias
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Proyeccin o filtro de AR

codProd, desc (Producto)

SQL

SELECT codProd, desc FROM Producto;

atributos: codProd y desc de Producto

27

SQL

IBBDD

Operaciones Unarias
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Seleccin o filtro de tuplas: AR

existAct existMin (Producto)

SQL

productos con existencia actual menor o igual a la mnima

SELECT * FROM Producto WHERE existAct <= existMin;

28

SQL

IBBDD

Operaciones Unarias
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Proyeccin y seleccin:

AR

codProd, desc (existAct


existMin (Producto))

SQL

codProd y desc de productos con existencia actual menor o igual a la mnima

SELECT codProd, desc FROM Producto WHERE existAct <= existMin;

29

SQL

IBBDD

Operaciones de Combinacin de Tablas


Obtencin de tuplas de ms de una tabla (o de copias de tablas), con atributos de todas las tablas

30

SQL

IBBDD

Operaciones de Combinacin
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Combinacin de tablas: pares
AR

p1.codProd, p2.codProd, p1.desc p1.desc=p2.desc p1.codProd<p2.codProd(p1 (Producto) p2 (Producto))

SQL

de codProd y la descripcin de productos distintos que tengan la misma descripcin y que no aparezcan invertidos
31

SELECT p1.codProd, p2.codProd, p1.desc FROM Producto p1, Producto p2 WHERE p1.desc=p2.desc AND p1.codProd<p2.codProd;

SQL

IBBDD

Operaciones de Combinacin
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Equicombinacin de tablas:
AR

(Factura||1/9/11 fecha 30/9/11 VentaProd || Producto) SQL


SELECT nroFac, fecha, codProd, desc, cant FROM Factura NATURAL JOIN VentaProd NATURAL JOIN Producto WHERE EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011;
IBBDD

nroFac, fecha, codProd, desc, cant

nroFac, fecha de factura, codProd, desc y cant de productos vendidos en septiembre de 2011

32

SQL

Operaciones con Subconsulta de Tablas


Obtencin de tuplas con atributos de una o ms tablas a partir de las tablas de las que se obtiene resultados y de una o ms tablas adicionales

33

SQL

IBBDD

Operaciones con Subconsultas


Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Subconsulta de tablas: cdigo y
AR

codProd, desc (Producto) codProd, desc (Producto ||VentaProd ||1/9/11 fecha 30/9/11 Factura)
(SELECT codProd, desc FROM Producto) EXCEPT (SELECT codProd, desc FROM Factura NATURAL JOIN VentaProd NATURAL JOIN Producto WHERE EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011);

SQL

descripcin de productos que no se hayan vendido en septiembre de 2011

Algunas versiones de SQL no soportan el operador EXCEPT, y otras usan MINUS en lugar de EXCEPT.
34

SQL

IBBDD

Equivalencia entre EXCEPT y NOT EXISTS


AR

codProd, desc (Producto) codProd, desc (Producto ||VentaProd ||1/9/11 fecha 30/9/11 Factura)

SQL

CRT {(p.codProd, p.desc) | Producto(p) ( f, v) (Factura(f) VentaProd(v) v.nroFac=f.nroFac v.codProd=p.codProd 1/9/11 f.fecha 30/9/11)} SQL SELECT codProd, desc FROM Producto P WHERE NOT EXISTS (SELECT * FROM Factura NATURAL JOIN VentaProd V WHERE EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011 AND V.codProd=P.codProd);
IBBDD

(SELECT codProd, desc FROM Producto) EXCEPT (SELECT codProd, desc FROM Factura NATURAL JOIN VentaProd NATURAL JOIN Producto WHERE EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011);

35

SQL

Equivalencia entre EXCEPT, NOT IN y NOT EXISTS


(SELECT codProd, desc FROM Producto) EXCEPT (SELECT codProd, desc FROM Factura NATURAL JOIN VentaProd NATURAL JOIN Producto WHERE EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011); SELECT codProd, desc FROM Producto WHERE codProd NOT IN (SELECT codProd FROM Factura NATURAL JOIN VentaProd WHERE EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011); SELECT codProd, desc FROM Producto P WHERE NOT EXISTS (SELECT * FROM Factura NATURAL JOIN VentaProdV WHERE EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011 AND V.codProd=P.codProd));

36

SQL

IBBDD

Operaciones con Subconsultas


Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Subconsulta de tablas: cdigo y
SELECT p.codProd, p.desc FROM Producto p WHERE NOT EXISTS (SELECT f.fecha FROM Factura f WHERE EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011 AND NOT EXISTS (SELECT * FROM Venta v NATURAL JOIN Factura f2 WHERE v.codProd=p.codProd AND f2.fecha=f.fecha));
IBBDD

descripcin de productos que se hayan vendido todos los das de septiembre de 2011 que hubo ventas
37

SQL

Actualizacin de Tablas
Producto(codProd, desc, existAct, existMin, pVAct)
Incorporar el producto (1235, pendorchos de 9 mm, 50, 10, 5.75):

INSER INTO Producto VALUES (1235, pendorchos de 9 mm, 50, 10, 5.75);
Eliminar el producto 893:

DELETE FROM Producto WHERE codProd=893;


Aumentar el 1% el precio de venta actual de todos los productos:

UPDATE Producto SET pVAct=pVAct * 1,01;


38

SQL

IBBDD

Ordenamiento de Resultados
Para ordenar las filas de la tabla resultado de una consulta,

SQL provee la clusula ORDER BY para la instruccin SELECT Se debe especificar seguida de la lista de nombres de columnas por las que se desea ordenar los resultados y el sentido de la ordenacin ASC|DESC Si se usa la clusula, debe ser siempre la ltima de la instruccin SELECT

39

SQL

IBBDD

Operaciones de Agregacin (Clculos sobre Columnas)


Funciones de Agregacin Agregaciones por Grupos de Tuplas (clusula GROUP BY) Restriccin de Agrupamientos (clusula HAVING)

40

SQL

IBBDD

Funciones de Agregacin
Operan sobre una nica columna de una tabla y devuelven un nico

valor Para eliminar valores duplicados antes de emplear la funcin se debe usar la palabra clave DISTINCT antes del nombre de la columna (no tiene efecto con las funciones MIN y MAX) Cuando se usan para toda una tabla, la clusula SELECT no puede contener ninguna otra columna que no sea resultado de una funcin
Funcin
COUNT SUM AVG MIN MAX
41

Retorno
Nmero de valores en una columna Suma de valores de la columna Promedio de valores de la columna Valor mnimo de la columna Valor mximo de la columna
IBBDD

SQL

Operaciones de Agregacin
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Calcular el monto total de

efectivo recaudado en la fecha de hoy

SELECT SUM(cant*pvu*(1dto)) as recaudado FROM VentaProd NATURAL JOIN Factura WHERE fecha = CURRENT_DATE AND fPago = CO;

42

SQL

IBBDD

Agregaciones por Grupos de Tuplas (clusula GROUP BY)


Adems de devolver un nico valor para toda una tabla, las funciones de

agregacin pueden devolver valores para grupos de tuplas que tengan valores iguales en una lista de columnas La lista de columnas en las que cada grupo de tuplas tiene que tener el mismo valor se especifica en la clusula GROUP BY y cada elemento de la clusula SELECT debe tener un nico valor para cada grupo Todos los nombres de columnas contenidos en la lista SELECT excepto los que aparezcan en funciones de agregacin deben obligatoriamente aparecer en la clusula GROUP BY ( y no al revs) Cuando se usa la clusula GROUP BY, la clusula SELECT puede contener:

43

Nombres de columnas Funciones de agregacin para cada grupo de tuplas Constantes Expresiones que combinen algunos de los elementos anteriores
IBBDD

SQL

Operaciones de Agregacin
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Calcular el monto total de ventas

de cada da del mes de septiembre de 2011

SELECT fecha, SUM(cant*pvu*(1-dto)) as totVentas FROM VentaProd NATURAL JOIN Factura WHERE fecha BETWEEN 1-9-11 and 30-9-11 GROUP BY fecha;

fecha BETWEEN 1-9-11 and 30-9-11 EXTRACT(MONTH FROM fecha)=9 AND EXTRACT(YEAR FROM fecha)=2011
44

SQL

IBBDD

Operaciones de Agregacin
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Informar codProd, desc,

existAct y cantidad de unidades vendidas en el mes de septiembre de 2011 en orden ascendente de codProd

SELECT codProd, desc, existAct, SUM(cant) as cantVendida FROM Factura NATURAL JOIN VentaProd NATURAL JOIN Producto WHERE fecha BETWEEN 1-911 and 30-9-11 GROUP BY codProd, desc, existAct ORDER BY codProd;

45

SQL

IBBDD

Operaciones de Agregacin
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu) Informar de cada producto codProd, desc, existAct y cantidad de unidades vendidas en el mes de septiembre de 2011 en orden ascendente de codProd
46

(SELECT P.codProd, desc, existAct, SUM(cant) as cantVendida FROM Factura NATURAL JOIN VentaProd V NATURAL JOIN Producto P WHERE fecha BETWEEN 1-9-11 and 30-9-11 GROUP BY P.codProd, desc, existAct)

UNION
(SELECT codProd, desc, existAct, 0 as cantVendida FROM Producto P WHERE NOT EXISTS (SELECT * FROM Factura NATURAL JOIN VentaProd V WHERE P.codProd=V.codProd and fecha BETWEEN 1-9-11 and 30-9-11)) ORDER BY codProd;

SQL

IBBDD

Restriccin de Agrupamientos (clusula HAVING)


La clusula HAVING se usa con la clusula GROUP BY para

restringir los grupos que aparecen en la tabla de resultados La funcin de bsqueda de la clusula HAVING debe incluir al menos una funcin de agregacin Cualquier consulta que pueda expresarse utilizando la clusula HAVING puede siempre reescribirse sin utilizarla La clusula HAVING filtra grupos, mientras que la clusula WHERE puede filtrar tuplas que integren los grupos (no se puede usar funciones de agregacin en la clusula WHERE)

47

SQL

IBBDD

Operaciones de Agregacin
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu)
Listar las facturas con su monto

total del mes de septiembre de 2011 que superaron los 100 pesos

SELECT nroFac, fecha, fPago, dto, SUM(cant*pvu*(1-dto)) as montoFac FROM Factura NATURAL JOIN VentaProd WHERE fecha BETWEEN 1-911 and 30-9-11 GROUP BY nroFac, fecha, fPago, dto HAVING montoFac > 100;

48

SQL

IBBDD

Operaciones de Agregacin
Factura(nroFac, fecha, fPago, dto) Producto(codProd, desc, existAct, existMin, pVAct) VentaProd(nroFac, codProd, cant, pvu) Listar las facturas y la cantidad de productos distintos (lneas) de cada una del mes de septiembre de 2011 y de ms de 2 productos
SELECT nroFac, fecha, fPago, dto, COUNT(codProd) as cantProd FROM Factura NATURAL JOIN VentaProd WHERE fecha BETWEEN 1-911 and 30-9-11 GROUP BY nroFac, fecha, fPago, dto HAVING cantProd > 2;

49

SQL

IBBDD

You might also like