c3.hu3.p1.p2.El ser humano y el sentido de su existencia.pptx
Bd sql
1. Structured Query Language (SQL): Introducción
Originalmente era el lenguaje de interrogación del DBMS
relacional System R (IBM) en la segunda mitad de los años
’70.
Posteriormente adoptado por otros sistemas
Bases de Datos: Structured Query Luego transformado en estándar:
Language (SQL) 1986 – Primera versión ANSI
1989 – Llamado SQL-89
1992 – Llamado alternativamente SQL-92 o SQL-2
Franco Guidi Polanco 1999 – Llamado alternativamente SQL-99 o SQL-3
Escuela de Ingeniería Industrial SQL contiene la funcionalidad tanto de un DDL (Data
Pontificia Universidad Católica de Valparaíso, Chile Definition Language), como de un DML (Data Manipulation
fguidi@ucv.cl Language).
Revisión: 15 de Mayo de 2005
Franco Guidi Polanco 2
Dominios de datos más comúnmente utilizados en SQL Instrucciones en SQL
Caracteres: tipo CHAR SQL como DDL:
CHAR(largo) Crear tablas (CREATE TABLE)
Tipos numéricos exactos: Modificar estructura de tablas (ALTER TABLE)
SMALLINT Eliminar tablas (DROP TABLE)
INTEGER
NUMERIC
NUMERIC [(Precisión [, escala ] ) ] SQL como DML:
Números en punto flotante Insertar nuevas tuplas (INSERT)
FLOAT Actualizar contenidos de tuplas (UPDATE)
Fecha: tipo DATE Eliminar tuplas (DELETE)
Seleccionar tuplas (SELECT)
Franco Guidi Polanco 3 Franco Guidi Polanco 4
2. CREATE TABLE CREATE TABLE
Permite crear una nueva tabla Algunas restricciones son:
NULL o NOT NULL
CREATE TABLE <nombre de tabla>
(<nombre de campo> <tipo> [(<tamaño>)] <restricción>, UNIQUE. Indica que no pueden existir dos filas con el mismo
valor para este campo.
...otros campos)
PRIMARY KEY. Indica que el campo es clave primaria. Solo se
Los valores posibles para <tipo> dependen del usa si la clave se compone de 1 campo, si no, se usa PRIMARY
KEY (campo, campo, ...) después de las definiciones de campos.
DBMS utilizado (ej.: integer, char, date).
DEFAULT. Inserta un valor por omisión cuando el registro se
El <tamaño> es usado solo en ciertos tipos de crea sin un valor para el campo (ej.: COSTO INTEGER DEFAULT
datos (ej.: char). = 1).
FOREIGN KEY. Indica que el campo es clave foránea.
Ej.: CREATE TABLE PEDIDO PEDIDO Funciona igual que PRIMARY KEY, pero va seguido de:
NRO_PED INTEGER NOT NULL, NRO_PED RUT_PROV REFERENCES <nombre de tabla> (<nombre de campo>), que
RUT_PROV CHAR(10) NOT NULL) indica la tabla y campos referenciados.
Franco Guidi Polanco 5 Franco Guidi Polanco 6
ALTER TABLE DROP TABLE
Permite modificar la estructura de un tabla. Permite eliminar una tabla.
ALTER TABLE <nombre de tabla> ADD|DROP|MODIFY DROP TABLE <nombre de tabla>
(especificación de campo(s)...)
La especificación de campos se hace igual que en
el caso de CREATE TABLE
Ej.:
Ej.: ALTER TABLE PEDIDO ADD DROP TABLE PEDIDO
FECHA
(FECHA DATE NOT NULL) PEDIDO
PEDIDO NRO_PED RUT_PROV FECHA
NRO_PED RUT_PROV
Franco Guidi Polanco 7 Franco Guidi Polanco 8
3. INSERT UPDATE
Agrega nuevos registros a una tabla. Modifica los valores de uno o más campos
de un conjunto de registros de una tabla.
INSERT INTO <tabla>
[(<lista de campos>)] UPDATE <tabla>
VALUES (<lista de valores>|<expresión select>) SET <lista de asignaciones>
[WHERE <condiciones lógicas>]
PEDIDO
INSERT INTO PEDIDO NRO_PED RUT_PROV UPDATE PEDIDO
(NRO_PED, RUT_PROV) 100 15.333.222-1 SET RUT_PROV=’60.155.842-K’ PEDIDO
NRO_PED RUT_PROV
VALUES (130, ’50.155.842-K’) 115 50.251.366-9 WHERE NRO_PED = 115
100 15.333.222-1
120 17.322.568-2
115 60.155.842-K 115 50.251.366-9
130 50.155.842-K 120 17.322.568-2
Franco Guidi Polanco 9 Franco Guidi Polanco 10
DELETE SELECT
Elimina uno o más registros de una tabla. Permite efectuar consultas sobre la BD
SELECT [DISTINCT] <lista de campos>
DELETE FROM <tabla> FROM <lista de tablas>
[WHERE <condiciones lógicas>]
[WHERE <condiciones lógicas>] [ORDER BY <lista de campos>]
[GROUP BY <lista de campos>]
Se pueden usar ciertas funciones “agregadas”:
UPDATE PEDIDO PEDIDO SUM
WHERE NRO_PED = 115 NRO_PED RUT_PROV AVG
MIN
100 15.333.222-1
MAX
115 60.155.842-K COUNT
120 17.322.568-2
Franco Guidi Polanco 11 Franco Guidi Polanco 12
4. Ejemplo Ejemplos SELECT (1): SELECT … FROM …
Pedidos Proveedores Obtener todos los datos de todos los
Fecha_
proveedores:
Ped# Prov# Prov# Nombre Ciudad
pedido
1 10/03/1999 5645462-8 5645462-8 YTF Santiago
2 11/03/1999 6353134-4 6353134-4 ZYZ Arica
3 11/03/1999 8545432-8 8545432-8 MNO Santiago
SELECT * FROM PROVEEDORES
Detalles Artículos
Nombre_ Prov# Nombre Ciudad
Ped# Art# Cantidad Art#
articulo
685431-4 Lápiz 5645462-8 ABC Santiago
1 685431-4 50
878795-7 Tijeras 6353134-4 XYZ Arica
1 878795-7 48
468624-8 Agenda 8545432-8 MNO Santiago
2 468624-8 500
3 556546-3 10 556546-3 CD-ROM
3 878795-7 12 996589-0 Lápiz
Franco Guidi Polanco 13 Franco Guidi Polanco 14
Ejemplos SELECT (2): proyección Ejemplos SELECT (3)
Obtener Prov# y Nombre de todos los Obtener los códigos de todos los artículos:
proveedores:
SELECT Prov#, Nombre
SELECT ART#
FROM PROVEEDORES
FROM ARTICULO
Art#
Prov# Nombre
685431-4
5645462-8 ABC
878795-7
6353134-4 XYZ
468624-8
8545432-8 MNO
556546-3
996589-0
Franco Guidi Polanco 15 Franco Guidi Polanco 16
5. Ejemplos SELECT (4): cláusula DISTINCT Ejemplos SELECT (5): selección de tuplas
Obtener los códigos de los artículos Obtener toda la información de los proveedores de
Santiago:
solicitados:
Art#
SELECT *
SELECT ART# 685431-4
878795-7
FROM PROVEEDORES
WHERE PROVEEDORES.CIUDAD =‘Santiago’
FROM DETALLES 468624-8
556546-3
878795-7
SELECT *
SELECT DISTINCT ART# Art#
FROM PROVEEDORES
WHERE CIUDAD =‘Santiago’
FROM DETALLES 685431-4 Prov# Nombre Ciudad
878795-7
5645462-8 ABC Santiago
468624-8
8545432-8 MNO Santiago
556546-3
Franco Guidi Polanco 17 Franco Guidi Polanco 18
Ejemplos SELECT (6) Ejemplos SELECT (7): ordenamiento
Obtener los códigos de pedidos por cantidades Obtener los nombres de los proveedores en orden
comprendidas entre 10 y 48: alfabético:
SELECT NOMBRE
SELECT DISTINCT PED#
FROM PROVEEDORES
FROM DETALLES
ORDER BY NOMBRE
WHERE CANTIDAD >= 10
AND CANTIDAD <= 48
Nombre
Ped#
MNO
1 YTF
3 ZYZ
Franco Guidi Polanco 19 Franco Guidi Polanco 20
6. Ejemplos SELECT (8): join Ejemplos SELECT (9)
Obtener los códigos de pedidos con los datos de Obtener las ciudades de los proveedores que han
los proveedores a los que estos van dirigidos: entregado lápices:
SELECT PED#, PROV#, NOMBRE, CIUDAD SELECT DISTINCT CIUDAD
Ciudad
FROM PEDIDOS, PROVEEDORES FROM ARTICULOS, DETALLES,
WHERE PEDIDOS.PROV# = PROVEEDORES.PROV# PEDIDOS, PROVEEDORES Santiago
WHERE ARTICULOS.ART# = DETALLES.ART#
AND DETALLES.PED# = PEDIDOS.PED#
AND PEDIDOS.PROV# = PROVEEDORES.PROV#
AND ARTICULOS.NOMBREARTICULO = ‘Lápiz’
Ped# Prov# Nombre Ciudad
1 5645462-8 YTF Santiago
2 6353134-4 ZYZ Arica
3 8545432-8 MNO Santiago
Franco Guidi Polanco 21 Franco Guidi Polanco 22
Ejemplos SELECT (10): redenominación SELECT y funciones agregadas
Encontrar todos las parejas distintas de códigos Si en la instrucción SELECT no hay un GROUP BY (visto
artículos : más adelante), las funciones agregadas operan sobre todas
las tuplas
Funciones agregadas:
SELECT A.ART#, B.ART# COUNT(): cuenta tuplas
FROM ARTICULOS A, ARTICULOS B MIN(): obtiene el menor valor para un campo
A.Art# B.Art#
WHERE A.ART# < B.ART# MAX(): obtiene el mayor valor para un campo
685431-4 878795-7 SUM(): suma los valores de un campo
685431-4 996589-0
AVG(): calcula el promedio de valores de un campo
468624-8 556546-3
468624-8 685431-4 STDEV(): calcula la d.e. de valores de un campo
468624-8 878795-7 VARIANCE(): calcula la varianza de valores de un campo
468624-8 996589-0
556546-3 685431-4
556546-3 996589-0
Franco Guidi Polanco 23 Franco Guidi Polanco 24
7. SELECT y funciones agregadas SELECT y funciones agregadas: regla
Contar los proveedores: Regla para el uso de funciones agregadas:
SELECT COUNT(*)
FROM PROVEEDORES Count(*) Si una instrucción SELECT no contiene la cláusula GROUP BY,
3 y si la cláusula SELECT contiene una o más funciones
agregadas, todos los identificadores de columna
Sumar especificados en la cláusula SELECT deben estar
SELECT SUM( Cantidad ) contenidos en una función agregada.
FROM DETALLES
WHERE ART#=‘878795-7’ Sum(Cantidad)
60
!
Franco Guidi Polanco 25 Franco Guidi Polanco 26
SELECT y funciones agregadas: regla Interrogaciones anidadas
Ejemplo Se utiliza una expresión SELECT como parte de la
cláusula where.
Situación válida: Por ejemplo: obtener el código de los artículos que
SELECT SUM( Cantidad )
hayan sido pedidos en la mayor cantidad:
FROM DETALLES
WHERE ART#=‘878795-7’ SELECT ART#
Situación NO valida: FROM DETALLES Art#
WHERE CANTIDAD = 468624-8
SELECT Art#, SUM( Cantidad ) (SELECT MAX(CANTIDAD)
FROM DETALLES
FROM DETALLES)
WHERE ART#=‘878795-7’
Franco Guidi Polanco 27 Franco Guidi Polanco 28
8. Interrogaciones anidadas: cláusula EXISTS / NOT EXISTS Interrogaciones anidadas: cláusula EXISTS / NOT EXISTS
Permite generar condiciones basadas en la Mostrar los datos de los artículos que no han sido
existencia o inexistencia de tuplas. pedidos:
Ejemplo: encontrar los artículos que tienen el
mismo nombre (pero código diferente) :
SELECT *
SELECT *
FROM ARTICULOS
FROM ARTICULOS A1
WHERE NOT EXISTS
WHERE EXISTS Art#
Nombre_
(SELECT * Artículos (SELECT * articulo
FROM ARTICULOS A2 Art#
Nombre_ FROM DETALLES 996589-0 Lápiz
articulo
WHERE A1.NOMBRE_ARTICULO = WHERE ARTICULOS.ART# =
685431-4 Lápiz
A2.NOMBRE_ARTICULO AND 996589-0 Lápiz DETALLES.ART# )
A1.ART# <> A2.ART# )
Franco Guidi Polanco 29 Franco Guidi Polanco 30
Interrogaciones con agrupamiento: SELECT … GROUP
Interrogaciones con agrupamiento: SELECT … GROUP BY
BY
GROUP BY: permite agrupar tuplas sobre la base GROUP BY es útil con funciones agregadas.
de similitudes. Ejemplo: encontrar la cantidad de proveedores de
Ejemplo: Encontrar las ciudades de los cada ciudad:
proveedores
SELECT CIUDAD, COUNT(*)
SELECT CIUDAD FROM PROVEEDORES Ciudad Count(*)
FROM PROVEEDORES Ciudad
GROUP BY CIUDAD Santiago 2
Arica 1
GROUP BY CIUDAD Santiago
Arica
La función COUNT(*) es aplicada a cada línea agrupada.
Franco Guidi Polanco 31 Franco Guidi Polanco 32
9. Regla para el uso de SELECT … GROUP BY… Regla para el uso de SELECT … GROUP BY… (cont.)
Regla para el uso de la cláusula GROUP BY: Ejemplos:
Situación válida:
Si una instrucción SELECT contiene la cláusula GROUP BY,
todos los identificadores de columna especificados en la SELECT Art#, SUM(Cantidad)
cláusula SELECT deben estar contenidos en una función FROM Detalles
agregada o en la lista de columnas presentes en la cláusula GROUP BY Art#
GROUP BY (o en ambas).
Situación no válida:
! SELECT Art#, Ped#, SUM(Cantidad)
FROM Detalles
GROUP BY Art#
Franco Guidi Polanco 33 Franco Guidi Polanco 34
Interrogaciones con agrupamiento: SELECT … GROUP BY
Regla para el uso de SELECT … GROUP BY … HAVING
… HAVING …
HAVING se usa con GROUP BY, para establecer Regla para el uso de la cáusula HAVING:
una condición de filtro sobre tuplas agregadas.
Ejemplo: Encontrar los códigos de artículo y las
cantidades para los cuales se haya pedido en total
50 o más unidades. Todos los identificadores de columnas
especificados en la cláusula HAVING deben
SELECT Art#, SUM(Cantidad) estar contenidos en una función agregada o
FROM Detalles
GROUP BY Art#
Art#
685431-4
878795-7
Sum(Cantidad)
50
60
!
en la lista de columnas especificadas en la
cláusula GROUP BY.
HAVING SUM(Cantidad)>=50 468624-8 500
Franco Guidi Polanco 35 Franco Guidi Polanco 36
10. Regla para el uso de SELECT … GROUP BY … HAVING
(cont.)
Ejemplos:
Situación válida:
SELECT Art#, SUM(Cantidad)
FROM Detalles
GROUP BY Art#
HAVING ART#=‘878795-7’ AND SUM(Cantidad)>=50
Situación no válida:
SELECT Art#, SUM(Cantidad)
FROM Detalles
GROUP BY Art#
HAVING PED#=‘1’
Franco Guidi Polanco 37