Publicado el 16 de Diciembre del 2020
890 visualizaciones desde el 16 de Diciembre del 2020
39,5 KB
13 paginas
Creado hace 12a (14/08/2012)
SQL (Structured Query Language)- DML
SELECT, UPDATE, INSERT, DELETE
CREATE: TABLE, INDEX, VIEW
DROP: TABLE, INDEX, VIEW
ALTER TABLE
Data Manipulation Language:
Data Definition Language:
Control Commands:
Authorization Commands:
Este lenguaje ofrece cuatro proposiciones de DML (Lenguaje de manejo de datos)
LOCK
COMMIT / ROLLBACK
UPDATE STATISTICS
GRANT, REVOKE
• SELECT (seleccionar)
• UPDATE (actualizar)
• DELETE (eliminar)
• INSERT (insertar)
Comando SELECT
Sintaxis:
SELECT {DISTINCT} elemento(s)
FROM tabla(s)
{WHERE condición}
{GROUP BY campo(s)}
{HAVING condición}
{ORDER BY campo(s)}
• Puede haber diferencias según el DBMS particular
• No confundir SELECT con la selección del álgebra relacional
Consultas Simples:
SELECT S#, SITUACION
FROM S
WHERE CIUDAD = “París”
ó
SELECT S.S#, S.SITUACION FROM S WHERE S.CIUDAD = “París”
S#
S2
S3
SITUACION
10
30
Recuperación simple
1. Obtener los números de parte de todas las partes suministradas
SELECT P# FROM SP
P#
P1
P2
P3
P4
P5
P6
P1
P2
P2
P2
P4
P5
SELECT DISTINCT P# FROM SP
P#
P1
P2
P3
P4
P5
P6
Recuperación de valores calculados
2. Obtener, para todas las partes, el nro. de parte y su peso en gramos
SELECT P.P#, ‘Peso en gramos = ‘ , P.PESO * 454 FROM P ;
P#
P1
P2
P3
P4
P5
P6
Peso en gramos =
Peso en gramos =
Peso en gramos =
Peso en gramos =
Peso en gramos =
Peso en gramos =
5448
7718
7718
6356
5448
8626
3. Obtener los datos de todos los proveedores
SELECT * FROM S ;
(El resultado es toda la tabla)
Recuperación calificada
4. Obtener los números de proveedores radicados en París cuya situación sea mayor que 20.
SELECT S# FROM S
WHERE CIUDAD = París AND Situación > 20 ;
S#
S3
Recuperación con ordenamiento
5. Obtener números de proveedor y situación de los proveedores radicados en París, en orden
descendente por situación.
SELECT S#, SITUACION FROM S
WHERE CIUDAD = “París”
ORDER BY SITUACION DESC ;
S#
S3
S2
SITUACION
30
10
Consultas de reunión:
6. Obtener todas las combinaciones de información de proveedores y partes tales que el
proveedor y la parte en cuestión estén situados en la misma ciudad, pero omitiendo a los
proveedores cuya situación sea 20.
SELECT S.* , P.* FROM S, P
WHERE S.CIUDAD = P.CIUDAD
AND S.SITUACION <> 20 ;
S#
SNOMBRE
SITUACION
S.CIUDAD
P#
PNOMBRE
COLOR
PESO
P.CIUDAD
10
10
30
30
París
París
París
París
P2 Perno
P5 Leva
P2 Perno
P5 Leva
Jaimes
S2
S2
Jaimes
S3 Bernal
S3 Bernal
Recuperación de campos específicos de una reunión:
7. Obtener todas las combinaciones de número de proveedor/número de parte tales que el
París
París
París
París
Verde
Azul
Verde
Azul
17
12
17
12
proveedor y la parte en cuestión estén cosituados.
SELECT S.S# , P.P# FROM S, P
WHERE S.CIUDAD = P.CIUDAD ;
S#
S1
S1
S1
S2
S2
S3
S3
S4
S4
S4
P#
P1
P4
P6
P2
P5
P2
P5
P1
P4
P6
Funciones de agregados: COUNT, SUM, AVG, MAX, MIN
• Actúan sobre una columna
8. Obtener el número total de proveedores
SELECT COUNT (*) FROM S ;
Resultado: 5
9. Obtener el número de proveedores que suministran partes en la actualidad
SELECT COUNT (DISTINCT S#) FROM SP ;
Resultado: 4
Función de agregados en el SELECT con una condición:
10. Obtener el número de envíos de la parte P2
SELECT COUNT (*) FROM SP WHERE P# = “P2” ;
Resultado: 4
11. Obtener la cantidad total suministrada de la parte P2
SELECT SUM(CANT) FROM SP WHERE P# = ‘P2’;
Resultado: 1000
Empleo de GROUP BY:
12. Calcular la cantidad total suministrada de cada parte
SELECT P# , SUM(CANT) FROM SP GROUP BY P# ;
P#
P1
P2
P3
P4
P5
P6
600
1000
400
500
500
100
Empleo de HAVING (con)
13. Obtener los números de todas las partes suministradas por más de un proveedor
SELECT P# FROM SP
GROUP BY P# HAVING COUNT(*) > 1 ;
P#
P1
P2
P4
P5
• HAVING es a los grupos lo que WHERE es a las filas.
• Las funciones de agregados van en la lista de campos. Si se hacen sobre los grupos se ponen
las funciones de agregados en el having.
OTRAS CARACTERÍSTICAS
Recuperación de datos con LIKE (como)
14. Obtener todas las partes cuyos nombres comiencen con la letra B
SELECT P.* FROM P
WHERE P.PNOMBRE LIKE ‘B%’ ;
P#
PNOMBRE
COLOR
PESO
CIUDAD
P3
P4
NOTAS:
Birlo
Birlo
Azul
Rojo
17
14
Roma
Londres
Para detectar la ausencia o presencia de nulos: nombre columna IS {NOT} NULL
SELECT S# FROM S
WHERE SITUACION IS NULL ;
Resultado: S# = S5
Para buscar en un conjunto de valores: nombre columna IN (conjunto valores)
Recuperación de datos con subconsulta:
15. Obtener los nombres de los proveedores que suministran la parte P2
SELECT SNOMBRE FROM S
WHERE S# IN (SELECT S# FROM SP WHERE P# = “P2” ) ;
SNOMBRE
Salazar
Jaimes
Bernal
Corona
equivale a: SELECT SNOMBRE FROM S
WHERE S# IN (‘S1’,’S2’,’S3’,’S4’) ;
también podría expresarse como una consulta de reunión:
SELECT S.NOMBRE FROM S, SP
WHERE S.S# = SP.S# AND SP.P# = ‘P2’ ;
16. Obtener los nombres de los proveedores que suministren por lo menos una parte roja
SELECT SNOMBRE FROM S
WHERE S# IN
(SELECT S# FROM SP
WHERE P# IN
(SELECT P# FROM P
WHERE COLOR = ‘Rojo’ )) ;
SNOMBRE
Salazar
Jaimes
Corona
Función de agregados en una subconsulta:
17. Obtener los números de los proveedores cuya situación sea menor que el valor máximo actual
de situación en la tabla S
SELECT S# FROM S
WHERE SITUACION < (SELECT MAX (SITUACION) FROM S) ;
S#
S1
S2
S4
Consulta con EXISTS (existe)
18. Obtener los nombres de los proveedores que suministran la parte P2
SELECT SNOMBRE FROM S
WHERE EXISTS (SELECT * FROM SP WHERE S# = S.S# AND P# = ‘P2’)
• EXITS (subconsulta) da verdadero si el resultado de evaluar la subconsulta no es el
conjunto vacío
• Esta consulta se podría haber resuelto utilizando IN
Consulta NOT EXISTS
19. Obtener los nombres de los proveedores que no suministran la parte P2 ( lo inverso del caso
anterior)
SELECT SNOMBRE FROM S
WHERE NOT EXISTS ( SELECT * FROM SP WHERE S# = S.S# AND P# = ‘P2’);
Resultado:
SNOMBRE
Aldana
• Equivale a enunciar: “seleccionar nombres de proveedores tales que no exista un envio que
relacione a esos proveedores con la parte P2”. Y resolverla con un IN
SELECT SNOMBRE FROM S
WHERE S# NOT IN ( SELECT S FROM SP P# = ‘P2’);
20. Obtener los nombres de los proveedores que suministren todas las partes (Obtener el nombre
de los proveedores tales que no exista una parte que no suministren)
Resultado:
SELECT SNOMBRE FROM S
WHERE NOT EXISTS
(SELECT * FROM P WHERE NOT EXISTS
(SELECT * FROM SP WHERE S# = S.S# AND P = P.P# )) ;
SNOMBRE
Salazar
Consulta con UNION
21. Obtener los números de las partes que pesen más de 16 libras o sean suministradas por el
proveedor S2 (o las dos cosas)
SELECT P# FROM P WHERE PESO > 16
UNION
SELECT P# FROM SP WHERE S# = ‘S2’ ;
Consulta con MINUS
P1
P2
P3
P6
Operaciones de actualización
UPDATE (ACTUALIZAR)
UPDATE tabla SET campo = expresión [, campo = expresión ]...
[WHERE condición ] ;
• Sin WHERE se modifican todas las filas
1- Modificación de un solo registro
• Cambiar a color amarillo el color de la parte P1, aumentar su peso en 5 e indicar que su
ciudad es desconocida
UPDATE P
SET COLOR = 'Amarillo', PESO = PESO + 5, CIUDAD = NULL
WHERE P# = 'P1' ;
2- Modificación de varios registros
• Duplicar la situación de todos los proveedores de Londres.
UPDATE S
SET SITUACION = 2 * SITUACION
WHERE CIUDAD = ‘Londres’ ;
3- Modificación con subconsulta
• Poner en cero la cantidad enviada por todos los proveedores de Londres
UPDATE SP
SET CANT = 0
WHERE S# IN (SELECT S# FROM S WHERE CIUDAD =‘Londres’) ;
4- Modificación de varios tablas
• Cambiar el número de proveedor S2 a S9.
UPDATE S
SET S# = 'S9'
WHERE S# = 'S2' ;
UPDATE SP
SET S# = 'S9'
WHERE S# = 'S2' ;
Si se la altera en forma incorrecta se puede violar la integridad de datos ( int. referencial)
DELETE (ELIMINAR)
DELETE FROM tabla [WHERE condición] ;
• Elimina todos los registros de una tabla que satisfagan una condición
1- Eliminación de un solo registro
• Eliminar el proveedor S5
DELETE FROM S
WHERE S# = 'S5' ;
2- Eliminación de varios registros
• Eliminar todos los envíos cuya cantidad sea mayor que 300
DELETE FROM SP
WHERE CANT > 300 ;
• Eliminar todos los envíos
DELETE FROM SP
- SP existe pero vacía. La estructura se borra con DROP.
3- Eliminación con subconsulta
• Eliminar todos los envíos de los proveedores situados en Londres
DELETE FROM SP
WHERE S# IN (SELECT S# FROM S WHERE CIUDAD = 'Londres') ;
INSERT (INSERTAR)
INSERT INTO tabla [ ( campo1 [, campo2, ..]) ]
VALUES ( valor1 [, valor2,...] ) ;
INSERT INTO tabla [ ( campo1 [, campo2, ..]) ]
subconsulta ;
o bien
1- Inserción de un solo registro
• Añadir: parte P7 (ciudad Atenas, peso 24, nombre y color desconocidos) a la tabla P
INSE
Comentarios de: SQL (Structured Query Language)- DML (0)
No hay comentarios