Bd sql

410 views

Published on

material especial

Published in: Education, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
410
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
8
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Bd sql

  1. 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. 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_PROVFranco Guidi Polanco 7 Franco Guidi Polanco 8
  3. 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-2Franco 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-2Franco Guidi Polanco 11 Franco Guidi Polanco 12
  4. 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ápizFranco 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-0Franco Guidi Polanco 15 Franco Guidi Polanco 16
  5. 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-3Franco 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 ZYZFranco Guidi Polanco 19 Franco Guidi Polanco 20
  6. 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 SantiagoFranco 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-0Franco Guidi Polanco 23 Franco Guidi Polanco 24
  7. 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. 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. 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 500Franco Guidi Polanco 35 Franco Guidi Polanco 36
  10. 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

×