Base de Datos DDL y DML
2020-2021
Agenda
SQL DDL: Lenguaje para definición de datos
SQL DML: Lenguaje para manipulación de datos
Lenguaje Relacional
SQL
Structured Query Language: Basado en álgebra y cálculo relacional.
1. Definición de esquemas (DDL)
2. Manipulación de datos (DML)
3. Posibilidad de embebido (DML)
4. Definición de Vistas. (DDL)
5. Seguridad. (DCL)
6. Integridad. (DDL)
7. Control de transacciones. (DCL)
8. Control de sesión (DCL)
9. Control del sistema (DCL)
SQL
Definición de esquemas (DDL)
CREATE DATABASE crea una nueva base de datos especificando
características físicas de la misma.
CREATE SCHEMA engloba múltiples comandos CREATE TABLE,
CREATE VIEW y GRANT en una sola transacción.
CREATE TABLE crea una tabla, definiendo sus columnas,
restricciones y ubicaciones de almacenamiento.
ALTER TABLE modifica (redefine) o añade columnas, restricciones o
ubicaciones de almacenamiento.
DROP elimina (remueve) objetos de la base de datos :
tablas, vistas, procedimientos, disparadores, índices,
paquetes, funciones, usuarios, etc.
SQL
• DROP TABLE
Permite eliminar la tabla nombrada
Al borrar una tabla:
• Desaparecen todos los datos
• Cualquier vista y sinónimo referente a la tabla seguirá existiendo,
pero ya no funcionarán (conviene eliminarlos)
• Las transacciones pendientes son aceptadas (COMMIT)
El borrado de una tabla es irreversible, y no hay ninguna petición de
confirmación.
SQL
Para consultar las tablas de usuario utilice:
•USER_TABLES
SELECT * FROM USER_TABLES
obtiene una vista de las tablas del usuario actual. La columna
TABLES_NAME muestra el nombre de la tabla.
SQL
Definición de esquemas (DDL)
SQL
Definición de esquemas (DDL) codigo Prestamo Plan de ahorro
cuenta
SQL
Definición de esquemas (DDL)
SQL
Definición de esquemas (DDL)
SQL
Manipulación de datos (DML)
SELECT Consulta (recupera datos) de una o más tablas o
vistas. El resultado es una tabla (filas y columnas)
que a su vez puede ser usada en otra sentencia DML
(en ese caso se dice “subquery” o vista temporal).
INSERT Inserta nueva(s) fila(s) a una tabla o a una vista.
DELETE Elimina las filas de una tabla o vista que cumplan la
condición WHERE (el predicado). Si no se especifica
la condición, todas las filas son eliminadas.
UPDATE Actualiza (modifica) los valores de columnas en las
filas que cumplan la condición WHERE. Si no se
especifica la condición, todas las filas son
actualizadas.
SQL - DML
SELECT
Este comando permite:
• Obtener datos de ciertas columnas de una tabla (proyección)
• Obtener registros (filas) de una tabla de acuerdo con ciertos criterios
(selección)
• Mezclar datos de tablas diferentes (asociación, join)
SELECT lista_select proyección (p)
FROM lista_tablas producto (X)
WHERE condición selección (s)
Theta Join :
p (lista_select) ( |X| (condición) (lista_tablas) )
Condiciones de búsqueda
SELECT
Sintaxis:
SELECT items Seleccionables
FROM Tabla1 [,Tabla2,…]
WHERE Condición Selección
Items seleccionables:
• Columnas
• Todas: *
• Algunas: se especifican
• Expresiones
• Constantes
Condiciones de búsqueda
SELECT
Selección de filas:
DISTINCT: permite eliminar filas duplicadas de la selección. Ejemplo:
SELECT DISTINCT job from emp;
WHERE: condición de selección de filas especificas. Está formado por
expresiones lógicas.
• Columnas, expresiones o constantes.
• Operador de comparación: =, !=, <>, ^=, >, >=, <, <=, BETWEEN …
AND…, IN (lista), IS NULL, LIKE %, _, NOT condición
• Columnas, expresiones o constantes.
Unidas por operadores lógicos:
• AND
• OR
Condiciones de búsqueda
SELECT
Ejemplos:
• Selección de todos los registros de la tabla
SELECT * FROM Clientes;
• Selección de algunos campos
SELECT apellidopaterno, apellidomaterno, nombre FROM Clientes;
• Cálculos aritméticos
SELECT descripcion, precio, precio*0.18 FROM Productos;
SELECT descripcion, precio, precio*0.18 AS igv FROM Productos;
• Concatenación
SELECT descripcion, clasificacion || ‘-’|| modelo FROM Productos;
Condiciones de búsqueda
Test de comparación (=,<>,<,<=,>,>=)
Condiciones de búsqueda
Test de pertenencia a conjunto (IN)
Condiciones de búsqueda
Test de pertenencia (IN)
Condiciones de búsqueda
Test de rango (BETWEEN)
Condiciones de búsqueda
Test de correspondencia con patrón (LIKE)
Test de valor nulo (NULL)
SQL - DML
SELECT
Unión ()
(comando SELECT)
UNION
(comando SELECT)
Diferencia (-)
(comando SELECT)
MINUS
(comando SELECT)
Intersección ()
(comando SELECT)
INTERSECT
(comando SELECT)
SQL - DML
SELECT DISTINCT
SELECT Puesto FROM Persona; SELECT DISTINCT Puesto
FROM Persona;
PUESTO PUESTO
GERENTE GERENTE
GERENTE SUBGERENTE
SUBGERENTE ASISTENTE
SUBGERENTE SECRETARIA
SUBGERENTE …..
ASISTENTE
ASISTENTE
ASISTENTE
ASISTENTE
SECRETARIA
SECRETARIA
…..
SQL - DML
SELECT … UNION…,
SELECT … UNION ALL
SELECT Sueldo FROM Persona WHERE IdDepartamento = ‘001’
UNION ALL
SELECT Sueldo FROM Persona WHERE IdDepartamento = ‘002’;
Sueldo
1000
1300
1000
1300
1500
...
SQL - DML
SELECT … UNION…,
SELECT … UNION ALL
SELECT Sueldo FROM Persona WHERE IdDepartamento = ‘001’
UNION
SELECT Sueldo FROM Persona WHERE IdDepartamento = ‘002’;
Sueldo
1000
1300
1500
...
SQL - DML
SELECT
GROUP BY Agrupa filas seleccionadas en una sola con información
agregada, basándose en la(s) expresión(es).
HAVING Restringe qué filas obtenidas por el GROUP BY serán
devueltas por el query.
UNION
UNION ALL Combinan (de acuerdo a la correspondiente operación
relacional) el resultado de dos queries en uno solo.
INTERSECT La cantidad y tipos de datos de las columnas de los queries
MINUS deben ser iguales (aunque se permiten diferentes longitudes)
ORDER BY Ordena las filas seleccionadas por un query.
FOR UPDATE Bloquea (“lock”) las filas seleccionadas por el query hasta
que finalice la transacción
SELECT
Anidamiento (Subqueries)
Un subquery es un comando SELECT colocado “dentro de” otro comando
SQL (llamado “comando padre”), para que este último utilice las filas
resultado de la selección.
Un subquery es evaluado sólo una vez para el comando padre.
• La sub consulta (query interno) se ejecuta una vez antes de la consulta
principal
• El resultado de la sub consulta es usado por la consulta principal
SELECT
Anidamiento (Subqueries)
Puede ser usado para :
• Definir las filas a insertar cuando se usa el comando CREATE TABLE o
INSERT.
• Definir las filas a incluir cuando se usa el comando CREATE VIEW o
CREATE SNAPSHOT
• Definir uno o más valores a asignarse a filas existentes cuando se usa el
comando UPDATE
• Proveer valores a usarse en las condiciones adjuntas a las cláusulas
WHERE y HAVING cuando se usa el comando SELECT, UPDATE o
DELETE.
SELECT
• Obtener los empleados cuyos sueldos sean mayores al promedio o
al de su jefe
SELECT [Link], [Link], [Link] "Jefe", Sub consulta.
Devuelve un
[Link] "Sueldo del Jefe" valor
FROM Persona P, Persona J
WHERE [Link] = [Link]
AND
([Link] > ( SELECT AVG(Sueldo) FROM Persona)
OR
[Link] > [Link] )
SELECT
• Obtener los departamentos que tenga un salario promedio menor
que el salario promedio de la Cia.
SELECT IdDepartamento, AVG(Sueldo)
FROM Persona
GROUP BY IdDepartamento
HAVING AVG(Sueldo) < (SELECT AVG(Sueldo) FROM Persona)
SQL - DML
SELECT
Pertenencia ()
SELECT a1
FROM R1
WHERE a1 IN (SELECT a2
FROM R2 ... )
SELECT
• Obtener los compañeros del señor “FIESTAS" (del mismo
departamento que éste)
Devuelve
más de un
SELECT IdDepartamento, NPersona valor
FROM Persona
WHERE IdDepartamento IN (SELECT IdDepartamento
FROM Persona
WHERE NPersona LIKE “FIESTAS%")
SELECT
• Obtener los nombres de los trabajadores que no son Gerentes ni
Subgerentes
Es una lista
SELECT NPersona de valores
FROM Persona
WHERE Puesto NOT IN (”GERENTE”,”SUBGERENTE”)
SELECT
Usando una sub consulta en la cláusula FROM
Una sub consulta en la cláusula FROM de una sentencia SELECT
es también llamada una vista en línea. Una sub consulta en una
cláusula FROM de una sentencia SELECT define un origen de
datos para esa sentencia SELECT en particular, y solo esa
sentencia SELECT. Es como
una tabla
“virtual”
SELECT
Sub consultas escalares
Una sub consulta que obtiene exactamente un valor de una columna
de una fila es también llamada sub consulta escalar.
Sub consultas de múltiples columnas escritas para comparar dos o
más columnas, usando una cláusula WHERE compuesta y
operadores lógicos, no pueden ser calificados como sub consultas
escalares.
SELECT
Anidamiento Correlacionado
(Correlated subqueries)
Un subquery correlacionado es un comando SELECT que es
evaluado para cada fila procesada por el “comando padre”, el que
puede ser un comando SELECT, UPDATE o DELETE.
Se ejecuta cada vez que el subquery hace referencia a una
columna de una tabla del comando padre.
Si se tiene a la misma tabla en el subquery y en comando padre, es
necesario el alias.
En otros casos siempre es recomendable el uso de alias para
calificar a las columnas.
SELECT
• Obtener las personas cuyos salarios excedan al promedio de su
respectivo departamento.
Se relacionan
en la
SELECT IdDepartamento, NPersona, Sueldo condición
FROM Persona P
WHERE Sueldo > (SELECT AVG (Sueldo)
FROM Persona R
WHERE [Link] = [Link])
SQL - DML
SELECT
Existencia ()
SELECT a1, ... an
FROM R1 , ... Rn
WHERE EXISTS (SELECT a1 ...
FROM Rm ... )
SELECT a1, ... an
FROM R1 , ... Rn
WHERE NOT EXISTS (SELECT a2
FROM R2 ... )
SQL - DML
EXISTS
Este operador es frecuentemente usado en sub consultas
correlacionadas para verificar cuando un valor recuperado por la
consulta externa existe en el conjunto de resultados obtenidos por la
consulta interna. Si la sub consulta obtiene al menos una fila, el
operador obtiene el valor TRUE. Si el valor no existe, se obtiene el
valor FALSE.
Consecuentemente, NOT EXISTS verifica cuando un valor
recuperado por la consulta externa no es parte del conjunto de
resultados obtenidos por la consulta interna.
SELECT
• Obtener los nombres de los departamentos que cuenten con algún
empleado
No necesita
especificar
SELECT nDepartamento columnas
FROM Departamento
WHERE EXISTS (SELECT *
FROM Persona
WHERE [Link] =
[Link])
SELECT
• Obtener los nombres de los departamentos que no tengan ningún
empleado
SELECT nDepartamento
FROM Departamento
WHERE NOT EXISTS (SELECT *
FROM Persona
WHERE [Link] =
[Link])
SELECT
• Obtener los nombres de los departamentos que no tengan ningún
empleado
(Usando COUNT(*))
SELECT nDepartamento
FROM Departamento
WHERE (SELECT COUNT(*) FROM Persona
WHERE [Link] =
[Link]) = 0
SQL - DML
SELECT - Usando Expresiones
Se desea hallar el impuesto total que se debe pagar por los sueldos,
agrupados por departamento. El impuesto es el 10% del sueldo.
SELECT [Link]||’-’||[Link] Departamento,
0.1*(SUM([Link])) Impuesto
FROM Persona a, Departamento b
WHERE [Link] = [Link]
GROUP BY [Link]||’-‘||[Link];
Departamento Impuesto
001-Finanzas 1500
002-Marketing 2000
… ...
Consultas sumarizadas
Funciones de columna
SUM () calcula el total de una columna.
AVG () calcula el valor promedio de una columna.
MIN() encuentra el valor más pequeño en una columna.
MAX() encuentra el valor mayor en una columna.
COUNT() cuenta el número de valores en una columna.
COUNT(*) cuenta las filas de resultados de la consulta
Consultas sumarizadas
Funciones de columna
El argumento de una función columna puede ser un solo nombre de
columna.
¿Cuál es el rendimiento de cuota promedio de los vendedores?
SELECT AVG(100*(VENTAS/CUOTA)) FROM REPVENTAS
AVG (100*(VENTAS/CUOTA))
-----------------------------------------
102.60
Ordenación de los resultados de una consulta
Cláusula ORDER BY
Se puede pedir a SQL que ordene los resultados de una consulta
incluyendo la cláusula ORDER BY en la sentencia SELECT.
La cláusula ORDER BY, consta de las palabras claves ORDER BY,
seguidas de una lista de especificaciones de ordenación separadas
por comas.
Muestra las ventas de cada oficina, ordenadas en orden por región y
dentro de cada región por ciudad.
SELECT CIUDAD, REGION, VENTAS FROM OFICINAS
ORDER BY REGION, CIUDAD
CIUDAD REGION VENTAS
-------------------- ------------------ ------------------
Chiclayo Norte $2,800,352.00
Trujillo Norte $756,000.00
Arequipa Sur $1,745,000.00
Ordenación de los resultados de una consulta
Cláusula ORDER BY
Utilizando la cláusula ORDER BY se puede solicitar la ordenación en
secuencia ascendente o descendente, y se puede ordenar con
respecto a cualquier elemento en la lista de selección de la consulta.
Por omisión, SQL ordena los datos en secuencia ascendente. Para
solicitar ordenación en secuencia descendente, se incluye la palabra
DESC en la especificación de ordenación.
Lista las oficinas, clasificadas en orden descendente de ventas, de modo
que las oficinas con mayores ventas aparezcan en primer lugar.
SELECT CIUDAD, REGION, VENTAS FROM OFICINAS
ORDER BY VENTAS DESC
CIUDAD REGION VENTAS
-------------------- ------------------ ------------------
Chiclayo Norte $2,800,352.00
Arequipa Sur $1,745,000.00
Trujillo Norte $756,000.00
Ordenación de los resultados de una consulta
Cláusula ORDER BY
También se puede utilizar la palabra clave ASC para especificar
orden ascendente, pero puesto que ésta es la secuencia de
ordenación por omisión, la palabra clave se suele omitir.
Lista las oficinas, clasificadas en orden descendente de rendimiento de
ventas, de modo que las oficinas con mejores rendimientos aparezcan
primero.
SELECT CIUDAD, REGION, (VENTAS-OBJETIVO) FROM OFICINAS
ORDER BY 3 DESC
CIUDAD REGION (VENTAS-OBJETIVO)
-------------------- ------------------ ----------------------------
Chiclayo Norte $112,352.00
Arequipa Sur $10,740.00
Trujillo Norte -$16,000.00
Consultas sumarizadas
Funciones de columna
Cálculo del total de una columna (SUM)
La función columna SUM() calcula la suma de una columna de
valores de datos. Los datos de la columna deben tener un tipo
numérico (entero, decimal, coma flotante o monetario).
¿Cuáles son las cuotas y ventas totales para todos los vendedores?
SELECT SUM(CUOTA), SUM(VENTAS) FROM REPVENTAS
SUM(CUOTA) SUM(VENTAS)
-------------------- -----------------
$2,700,000.00 $2,800,352.00
Consultas sumarizadas
Funciones de columna
Cálculo del promedio de una columna (AVG)
La función columna AVG() calcula el promedio de una columna de
valores de datos. Al igual que una función SUM(), los datos de la
columna deben tener un tipo numérico. Ya que la función AVG()
suma los valores de la columna y luego los divide por el número de
valores.
Calcula el precio medio de los productos del fabricante ACI.
SELECT AVG(PRECIO) FROM PRODUCTOS
WHERE ID_FAB=‘ACI’
AVG(PRECIO)
--------------------
$804.29
Consultas sumarizadas
Funciones de columna
Determinación de valores extremos (MIN y MAX)
Las funciones de columna MIN() y MAX() determinan los valores
mayor y menor de una columna, respectivamente. Los datos de la
columna pueden contener información numérica, de cadena o de
fecha/hora.
¿Cuáles son las cuotas asignadas mínimas y máxima.?
SELECT MIN(CUOTA), MAX(CUOTA) FROM REPVENTAS
MIN(CUOTA) MAX(CUOTA)
------------------ --------------------
$200,000.00 $350,000.00
Consultas sumarizadas
Funciones de columna
Determinación de valores extremos (MIN y MAX)
¿Cuál es la fecha de pedido más antigua en la base de datos.?
SELECT MIN(FECHA_PEDIDO) FROM PEDIDOS
MIN(FECHA_PEDIDO)
--------------------------------
14-ABRIL-2004
¿Cuál es el mejor rendimiento de ventas de todas los vendedores?
SELECT MAX(100*(VENTAS/CUOTA)) FROM REPVENTAS
MAX(100*(VENTAS/CUOTA))
----------------------------------------
135.44
Consultas sumarizadas
Funciones de columna
Cuenta de valores de datos (COUNT)
La función de columna COUNT() cuenta el número de valores de
datos que hay en una columna. Los datos de la columna pueden ser
de cualquier tipo. La función COUNT() siempre devuelve un entero,
independientemente del tipo de datos de la columna.
¿Cuántos clientes hay?
SELECT COUNT(NUM_CLIE) FROM CLIENTES
COUNT(NUM_CLIE)
----------------------------
21
Consultas sumarizadas
Funciones de columna
Cuenta de valores de datos (COUNT)
¿Cuántos vendedores superan su cuota?
SELECT COUNT(NOMBRE) FROM REPVENTAS
WHERE VENTAS > CUOTA
COUNT(NOMBRE)
----------------------------
7
¿Cuántos pedidos de más de $25,000 hay en los registros?
SELECT COUNT(IMPORTE) FROM PEDIDOS
WHERE IMPORTE > 25000.00
COUNT(IMPORTE)
---------------------------
4
Consultas sumarizadas
Funciones de columna
Cuenta de valores de datos (COUNT)
SQL soporta una función de columna especial COUNT(*) que cuenta
filas en lugar de valores de datos. He aquí la misma consulta,
reescrita utilizando la función COUNT(*)
SELECT COUNT(*) FROM PEDIDOS
WHERE IMPORTE > 25000.00
COUNT(*)
---------------
4
Consultas sumarizadas
Funciones de columna
Valores NULL y funciones de columna
Las funciones de columna SUM(), AVG(), MIN(), MAX() y COUNT()
aceptan cada una de ellas una columna de valores de datos como
argumento y producen un único valor como resultado.
SELECT COUNT(*), COUNT(VENTAS), COUNT(CUOTA) FROM
REPVENTAS
COUNT(*) COUNT(VENTAS) COUNT(CUOTA)
--------------- -------------------------- -------------------------
10 10 9
Consultas sumarizadas
Funciones de columna
Valores NULL y funciones de columna
La tabla REPVENTAS contiene diez filas, por lo que COUNT(*)
devuelve una cuenta de diez. La columna VENTAS contiene diez
valores no NULL, por lo que la función COUNT(VENTAS) también
devuelve una cuenta de diez. La columna CUOTA es NULL para el
vendedor más reciente. La función COUNT(CUOTA) ignora este
valor NULL y devuelve un menor valor.
Debido a estas anomalías, la función COUNT(*) es utilizada casi
siempre en lugar de la función COUNT(), a menos que
específicamente se desee excluir del total los valores NULL de una
columna en particular.
Consultas sumarizadas
Funciones de columna
Valores NULL y funciones de columna
Todas las funciones de grupo ignoran los valores nulos en las
columnas.
SELECT NVL (comision, 0) FROM empleados;
La función NVL forza al grupo de funciones a incluir los valores
nulos.
Consultas sumarizadas
Consultas agrupadas (cláusula GROUP BY)
Al igual que los subtotales son útiles en informes impresos, con
frecuencia es conveniente sumarizar los resultados de la consulta a
un nivel <<subtotal>>.
Cuál es el tamaño medio de un pedido?
SELECT AVG(IMPORTE) FROM PEDIDOS
AVG(IMPORTE)
-------------------------
$8,256.37
¿Cuál es el tamaño medio de pedido para cada vendedor?
SELECT REP, AVG(IMPORTE) FROM PEDIDOS
GROUP BY REP
REP AVG(IMPORTE)
------ -----------------------
101 $8,876.00
102 $5,694.00
103 $11,350.00
Consultas sumarizadas
Consultas agrupadas (cláusula GROUP BY)
La primera consulta es una consulta sumaria simple como la de los
ejemplos anteriores. La segunda consulta produce varias filas
sumarias – una fila por cada grupo, sumarizando los pedidos
aceptados por un solo vendedor.
SQL lleva a cabo la consulta del modo siguiente:
1. SQL divide los pedidos en grupos de pedidos, un grupo por cada
vendedor. Dentro de cada grupo, todos los pedidos tienen el
mismo valor en la columna REP.
2. Por cada grupo, SQL calcula el valor medio de la columna
IMPORTE para todas las filas del grupo, y genera una única fila
sumario de resultados. La fila contiene el valor de la columna
REP del grupo y el tamaño de pedido medio calculado.
Consultas sumarizadas
Consultas agrupadas (cláusula GROUP BY)
He aquí algunos ejemplos adicionales de consultas agrupadas.
¿Cuál es el rango de cuotas asignadas en cada oficina?
SELECT OFICINA_REP, MIN(CUOTA), MAX(CUOTA)
FROM REPVENTAS
GROUP BY OFICINA_REP
OFICINA_REP MIN(CUOTA) MAX(CUOTA)
--------------------- ------------------- --------------------
NULL NULL NULL
11 275,000.00 300,000.00
12 200,000.00 300,000.00
13 350,000.00 300,000.00
14 350,000.00 350,000.00
Consultas sumarizadas
¿Cuántos clientes diferentes son atendidos por cada vendedor?
SELECT REP_CLIE,‘Clientes por rep. de venta’ ,
COUNT(DISTINCT NUM_CLIE)
FROM CLIENTES
GROUP BY REP_CLIE
REP_CLIE Clientes por rep. de venta COUNT(DISTINCT NUM_CLIE)
-------------- -------------------------------------------- ----------------------------------------------
101 Clientes por rep. de venta 3
102 Clientes por rep. de venta 4
103 Clientes por rep. de venta 3
104 Clientes por rep. de venta 1
105 Clientes por rep. de venta 2
Cuando la cláusula GROUP BY está presente, informa a SQL que
debe dividir los resultados detallados en grupos y aplicar la función
de columna separadamente a cada grupo, produciendo un único
resultado por cada grupo.
Consultas sumarizadas
Múltiples columnas de agrupación
Se pueden agrupar resultados de consulta en base a contenidos de
dos o más columnas.
Calcula los pedidos totales por cada vendedor (REP) y por cada
cliente (CUST).
SELECT REP, CUST, SUM(IMPORTE) FROM PEDIDOS
GROUP BY REP, CUST
REP CUST SUM(IMPORTE)
--------------------- ------------------- -----------------------
101 2102 300,150.00
101 2108 20,130.00
101 2113 22,000.00
102 2106 350,000.00
102 2120 3,750.00
103 2111 4,589.00
Consultas sumarizadas
Múltiples columnas de agrupación
Incluso con múltiples columna de agrupación, SQL sólo proporciona
un único nivel de agrupación. También puede ordenar los datos con
la cláusula ORDER BY.
Calcula los pedidos totales para cada cliente de cada vendedor
(REP), ordenados por cliente y dentro de cada cliente por vendedor.
SELECT CLIE, REP, SUM(IMPORTE) FROM PEDIDOS
GROUP BY CLIE, REP
ORDER BY CLIE,REP
CLIE REP SUM(IMPORTE)
--------------------- ------------------- -----------------------
2101 106 10,150.00
2102 101 23,830.00
2103 105 35,754.00
2106 102 50,134.00
Consultas sumarizadas
Condiciones de búsqueda de grupos(cláusula HAVING)
Al igual que la cláusula WHERE puede ser utilizada para seleccionar
y rechazar filas individuales que participan en una consulta, la
cláusula HAVING puede ser utilizada para seleccionar y rechazar
grupos de filas.
La cláusula HAVING especifica por tanto una condición de búsqueda
para grupos.
¿Cuál es el tamaño de pedido promedio para cada vendedor (REP)
cuyos pedidos totalizan más de $30,000?.
SELECT REP, AVG(IMPORTE) FROM PEDIDOS
GROUP BY REP
HAVING SUM(IMPORTE) > 30,000
Consultas sumarizadas
Condiciones de búsqueda de grupos(cláusula HAVING)
REP AVG(IMPORTE)
--------------------- -------------------
105 8,150.00
101 16,430.00
105 11,754.00
102 50,134.00
La cláusula GROUP BY dispone primero de los pedidos en grupos
por vendedor. La consulta HAVING elimina entonces los grupos en
donde el total de los pedidos no excede a $30,000.00.
Finalmente, la cláusula SELECT calcula el tamaño de pedido medio
para cada uno de los grupos restantes y genera los resultados de la
consulta.
Consultas sumarizadas
Condiciones de búsqueda de grupos(cláusula HAVING)
1. Compone las tablas OFICINAS y REPVENTAS para hallar la
ciudad en donde trabaja cada vendedor.
2. Agrupa las filas resultantes por oficinas.
3. Elimina los grupos con dos o menos filas, estás representan
oficinas que no satisfacen el criterio de la cláusula HAVING.
4. Calcula la cuota total y las ventas totales para cada grupo.
SELECT
Conjunción lateral (Outer Join)
SELECT lista_select
FROM tabla1 , tabla2
WHERE [Link] = [Link] (+)
[Link] (+) = [Link]
Extiende el resultado de un Join simple : No sólo retorna las filas
resultado de la condición del WHERE sino además todas las de una
de las tablas.
Se generan NULLs para las respectivas columnas de esta tabla (
llamada “outer” o “lateral”).
No puede combinarse la misma tabla “outer” con más de una tabla
en el mismo SELECT.
• Obtener el sueldo promedio y total de sueldos de cada
departamento (aunque no tenga empleados)
SELECT [Link], [Link], Función de
AVG([Link]), SUM([Link]) columna
FROM Departamento D, Persona P
WHERE [Link] (+) = [Link]
GROUP BY [Link], NDepartamento
ORDER BY [Link]
Outer join
• Obtener el sueldo promedio y total de sueldos de cada
departamento (aunque no tenga empleados)
SELECT [Link], [Link],
AVG([Link]), SUM([Link])
FROM Departamento D, Persona P
WHERE [Link] (+) = [Link]
GROUP BY [Link], NDepartamento
ORDER BY [Link]
OUTER JOINT, fuerza a que aparezcan valores y completa con
valores nulos.
El (+) se debe poner a continuación de la columna cuya tabla va a
tener añadida la fila NULL imaginaria.
Consultas
Condición lateral (Outer Join)
Tabla Chicas Tabla Chicos
Nombre Ciudad Nombre Ciudad
María Boston Juan Boston
Nancy NULL Henry Boston
Susan Chicago Jorge NULL
Beatriz Chicago Sam Chicago
Ana Denver James Dallas
• Lista las chicas y chicos de la misma ciudad y las chicas desparejadas.
Consultas
Condición lateral (Outer Join)
SELECT * FROM CHICAS A, CHICOS B
WHERE [Link] = [Link] (+)
[Link] [Link] [Link] Ciudad
María Boston Juan Boston
María Boston Henry Boston
Susan Chicago Sam Chicago
Beatriz Chicago Sam Chicago
Ana Denver NULL NULL
Nancy NULL NULL NULL
La consulta produce seis filas de resultado, mostrando los pares chico/chica
emparejados y las chicas desparejadas. Los chicos desparejados faltan en los
resultados.
Consultas
Condición lateral (Outer Join)
Lista las chicas y chicos de la misma ciudad y los chicos desparejados.
SELECT * FROM CHICAS A, CHICOS B WHERE [Link] (+) = [Link]
[Link] [Link] [Link] Ciudad
María Boston Juan Boston
María Boston Henry Boston
Susan Chicago Sam Chicago
Beatriz Chicago Sam Chicago
NULL NULL Jorge Dallas
NULL NULL James NULL
La consulta también produce seis filas de resultado, mostrando los pares chico/chica
coincidentes y los chicos no coincidentes. Esta vez las chicas desparejadas faltan en
los resultados.
SQL - DML
INSERT
Inserta una fila en una tabla.
Sintaxis:
Inserción de todas las columnas:
INSERT INTO Tabla VALUES (valor1, valor2, …, valorN)
Inserción de algunas columnas:
INSERT INTO Tabla (col1, ….., colN) VALUES (val1, …, valN)
Ejemplo:
INSERT INTO dept VALUES (50, ‘Finanzas’, ‘Lima’);
INSERT INTO emp (empno, ename, hiredate, sal, deptno)
VALUES (1235, ‘Jorge’, ’01-JAN-11’,2500,30);
SQL - DML
UPDATE
Modifica los datos de una tabla específica.
Sintaxis:
UPDATE Tabla SET col1=val1, …, colN=valorN
[WHERE Condición Selección]
Ejemplo:
UPDATE emp
SET job=‘salesman’, sal=sal*1.5, deptno=30
WHERE deptno = (SELECT deptno FROM emp WHERE empno = 7788);