Professional Documents
Culture Documents
Originalmente era el lenguaje de interrogacin del DBMS relacional System R (IBM) en la segunda mitad de los aos 70. Posteriormente adoptado por otros sistemas Luego transformado en estndar:
1986 1989 1992 1999 Primera versin ANSI Llamado SQL-89 Llamado alternativamente SQL-92 o SQL-2 Llamado alternativamente SQL-99 o SQL-3
SQL contiene la funcionalidad tanto de un DDL (Data Definition Language), como de un DML (Data Manipulation Language).
Dominios de datos ms comnmente utilizados en SQL Caracteres: tipo CHAR CHAR(largo) Tipos numricos exactos:
SMALLINT INTEGER NUMERIC NUMERIC [(Precisin [, escala ] ) ]
Los valores posibles para <tipo> dependen del DBMS utilizado (ej.: integer, char, date). El <tamao> es usado solo en ciertos tipos de datos (ej.: char).
Ej.: CREATE TABLE PEDIDO NRO_PED INTEGER NOT NULL, RUT_PROV CHAR(10) NOT NULL) PEDIDO
NRO_PED RUT_PROV
ALTER TABLE
DROP TABLE
INSERT
UPDATE
PEDIDO
NRO_PED 100 115 120 RUT_PROV 15.333.222-1 50.251.366-9 17.322.568-2
10
DELETE
SELECT
11
12
Ejemplo
Pedidos
Ped# 1 2 3 Fecha_ pedido Prov#
Detalles
Ped# 1 1 2 3 3 Art# 685431-4 878795-7 468624-8 556546-3 878795-7 Cantidad 50 48 500 10 12
Artculos
Art# 685431-4 878795-7 468624-8 556546-3 996589-0 Nombre_ articulo Lpiz Tijeras Agenda CD-ROM Lpiz
Nombre
ABC XYZ MNO
Ciudad
Santiago Arica Santiago
13
14
Obtener Prov# y Nombre de todos los proveedores: SELECT Prov#, Nombre FROM PROVEEDORES
Prov#
5645462-8 6353134-4 8545432-8
Nombre
ABC XYZ MNO
15
16
Ejemplos SELECT (5): seleccin de tuplas Obtener toda la informacin de los proveedores de Santiago: SELECT * FROM PROVEEDORES WHERE PROVEEDORES.CIUDAD =Santiago SELECT * FROM PROVEEDORES WHERE CIUDAD =Santiago
Prov#
5645462-8 8545432-8
Art#
685431-4 878795-7 468624-8 556546-3
Nombre
ABC MNO
Ciudad
Santiago Santiago
17
18
Ejemplos SELECT (6) Obtener los cdigos de pedidos por cantidades comprendidas entre 10 y 48:
SELECT DISTINCT PED# FROM DETALLES WHERE CANTIDAD >= 10 AND CANTIDAD <= 48
Ped#
Ejemplos SELECT (7): ordenamiento Obtener los nombres de los proveedores en orden alfabtico:
SELECT NOMBRE FROM PROVEEDORES ORDER BY NOMBRE
Nombre
MNO 1 3 YTF ZYZ
19
20
Ejemplos SELECT (8): join Obtener los cdigos de pedidos con los datos de los proveedores a los que estos van dirigidos:
SELECT PED#, PROV#, NOMBRE, CIUDAD FROM PEDIDOS, PROVEEDORES WHERE PEDIDOS.PROV# = PROVEEDORES.PROV#
Ejemplos SELECT (9) Obtener las ciudades de los proveedores que han entregado lpices:
SELECT DISTINCT CIUDAD FROM ARTICULOS, DETALLES, PEDIDOS, PROVEEDORES WHERE ARTICULOS.ART# = DETALLES.ART# AND DETALLES.PED# = PEDIDOS.PED# AND PEDIDOS.PROV# = PROVEEDORES.PROV# AND ARTICULOS.NOMBREARTICULO = Lpiz
Ciudad
Santiago
Ped#
1 2 3
Prov#
5645462-8 6353134-4 8545432-8
Nombre
YTF ZYZ MNO
Ciudad
Santiago Arica Santiago
21
22
Ejemplos SELECT (10): redenominacin Encontrar todos las parejas distintas de cdigos artculos :
SELECT A.ART#, B.ART# FROM ARTICULOS A, ARTICULOS B WHERE A.ART# < B.ART#
A.Art#
685431-4 685431-4 468624-8 468624-8 468624-8 468624-8 556546-3 556546-3
B.Art#
878795-7 996589-0 556546-3 685431-4 878795-7 996589-0 685431-4 996589-0
23
24
SELECT y funciones agregadas Contar los proveedores: SELECT COUNT(*) FROM PROVEEDORES Sumar SELECT SUM( Cantidad ) FROM DETALLES WHERE ART#=878795-7
Si una instruccin SELECT no contiene la clusula GROUP BY, y si la clusula SELECT contiene una o ms funciones agregadas, todos los identificadores de columna especificados en la clusula SELECT deben estar contenidos en una funcin agregada.
Sum(Cantidad)
60
!
25 Franco Guidi Polanco 26
Interrogaciones anidadas Se utiliza una expresin SELECT como parte de la clusula where. Por ejemplo: obtener el cdigo de los artculos que hayan sido pedidos en la mayor cantidad:
SELECT ART# FROM DETALLES WHERE CANTIDAD = (SELECT MAX(CANTIDAD) FROM DETALLES)
Ejemplo
Situacin vlida:
SELECT SUM( Cantidad ) FROM DETALLES WHERE ART#=878795-7
Situacin NO valida:
SELECT Art#, SUM( Cantidad ) FROM DETALLES WHERE ART#=878795-7
Art# 468624-8
27
28
Permite generar condiciones basadas en la existencia o inexistencia de tuplas. Ejemplo: encontrar los artculos que tienen el mismo nombre (pero cdigo diferente) :
SELECT * FROM ARTICULOS A1 WHERE EXISTS (SELECT * FROM ARTICULOS A2 WHERE A1.NOMBRE_ARTICULO = A2.NOMBRE_ARTICULO AND A1.ART# <> A2.ART# )
Franco Guidi Polanco
Artculos
Art# 685431-4 996589-0 Nombre_ articulo Lpiz Lpiz
Art# 996589-0
29
30
GROUP BY: permite agrupar tuplas sobre la base de similitudes. Ejemplo: Encontrar las ciudades de los proveedores SELECT CIUDAD FROM PROVEEDORES GROUP BY CIUDAD
GROUP BY es til con funciones agregadas. Ejemplo: encontrar la cantidad de proveedores de cada ciudad:
SELECT CIUDAD, COUNT(*) FROM PROVEEDORES GROUP BY CIUDAD
Ciudad
Santiago Arica
Count(*)
2 1
Ciudad
Santiago Arica
31
32
Ejemplos:
Situacin vlida:
SELECT Art#, SUM(Cantidad) FROM Detalles GROUP BY Art#
!
Franco Guidi Polanco 33
Situacin no vlida:
SELECT Art#, Ped#, SUM(Cantidad) FROM Detalles GROUP BY Art#
34
HAVING se usa con GROUP BY, para establecer una condicin de filtro sobre tuplas agregadas. Ejemplo: Encontrar los cdigos de artculo y las cantidades para los cuales se haya pedido en total 50 o ms unidades. SELECT Art#, SUM(Cantidad) FROM Detalles GROUP BY Art# HAVING SUM(Cantidad)>=50
Franco Guidi Polanco
Art#
685431-4 878795-7 468624-8
Sum(Cantidad)
50 60 500
Todos los identificadores de columnas especificados en la clusula HAVING deben estar contenidos en una funcin agregada o en la lista de columnas especificadas en la clusula GROUP BY.
35
36
Ejemplos:
Situacin vlida:
SELECT Art#, SUM(Cantidad) FROM Detalles GROUP BY Art# HAVING ART#=878795-7 AND SUM(Cantidad)>=50
Situacin no vlida:
SELECT Art#, SUM(Cantidad) FROM Detalles GROUP BY Art# HAVING PED#=1
Franco Guidi Polanco 37