You are on page 1of 10

Structured Query Language (SQL): Introduccin

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

Bases de Datos: Structured Query Language (SQL)


Franco Guidi Polanco
Escuela de Ingeniera Industrial Pontificia Universidad Catlica de Valparaso, Chile fguidi@ucv.cl

SQL contiene la funcionalidad tanto de un DDL (Data Definition Language), como de un DML (Data Manipulation Language).

Revisin: 15 de Mayo de 2005


Franco Guidi Polanco 2

Dominios de datos ms comnmente utilizados en SQL Caracteres: tipo CHAR CHAR(largo) Tipos numricos exactos:
SMALLINT INTEGER NUMERIC NUMERIC [(Precisin [, escala ] ) ]

Instrucciones en SQL SQL como DDL:


Crear tablas (CREATE TABLE) Modificar estructura de tablas (ALTER TABLE) Eliminar tablas (DROP TABLE)

SQL como DML:


Insertar nuevas tuplas (INSERT) Actualizar contenidos de tuplas (UPDATE) Eliminar tuplas (DELETE) Seleccionar tuplas (SELECT)

Nmeros en punto flotante


FLOAT

Fecha: tipo DATE

Franco Guidi Polanco

Franco Guidi Polanco

CREATE TABLE Permite crear una nueva tabla


CREATE TABLE <nombre de tabla> (<nombre de campo> <tipo> [(<tamao>)] <restriccin>, ...otros campos)

CREATE TABLE Algunas restricciones son:


NULL o NOT NULL UNIQUE. Indica que no pueden existir dos filas con el mismo valor para este campo. PRIMARY KEY. Indica que el campo es clave primaria. Solo se usa si la clave se compone de 1 campo, si no, se usa PRIMARY KEY (campo, campo, ...) despus de las definiciones de campos. DEFAULT. Inserta un valor por omisin cuando el registro se crea sin un valor para el campo (ej.: COSTO INTEGER DEFAULT = 1). FOREIGN KEY. Indica que el campo es clave fornea. Funciona igual que PRIMARY KEY, pero va seguido de: REFERENCES <nombre de tabla> (<nombre de campo>), que indica la tabla y campos referenciados.

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

Franco Guidi Polanco

Franco Guidi Polanco

ALTER TABLE

DROP TABLE

Permite modificar la estructura de un tabla.


ALTER TABLE <nombre de tabla> ADD|DROP|MODIFY (especificacin de campo(s)...)

Permite eliminar una tabla.


DROP TABLE <nombre de tabla>

La especificacin de campos se hace igual que en el caso de CREATE TABLE


Ej.: ALTER TABLE PEDIDO ADD (FECHA DATE NOT NULL)
PEDIDO
NRO_PED RUT_PROV FECHA

Ej.: DROP TABLE PEDIDO


PEDIDO
NRO_PED RUT_PROV FECHA

Franco Guidi Polanco

Franco Guidi Polanco

INSERT

UPDATE

Agrega nuevos registros a una tabla.


INSERT INTO <tabla> [(<lista de campos>)] VALUES (<lista de valores>|<expresin select>)
PEDIDO

Modifica los valores de uno o ms campos de un conjunto de registros de una tabla.


UPDATE <tabla> SET <lista de asignaciones> [WHERE <condiciones lgicas>] UPDATE PEDIDO SET RUT_PROV=60.155.842-K WHERE NRO_PED = 115
115 60.155.842-K

INSERT INTO PEDIDO (NRO_PED, RUT_PROV) VALUES (130, 50.155.842-K)


130

NRO_PED 100 115 120 50.155.842-K

RUT_PROV 15.333.222-1 50.251.366-9 17.322.568-2

PEDIDO
NRO_PED 100 115 120 RUT_PROV 15.333.222-1 50.251.366-9 17.322.568-2

Franco Guidi Polanco

Franco Guidi Polanco

10

DELETE

SELECT

Elimina uno o ms registros de una tabla.


DELETE FROM <tabla> [WHERE <condiciones lgicas>]

Permite efectuar consultas sobre la BD


SELECT [DISTINCT] <lista de campos> FROM <lista de tablas> [WHERE <condiciones lgicas>] [ORDER BY <lista de campos>] [GROUP BY <lista de campos>]

Se pueden usar ciertas funciones agregadas:


UPDATE PEDIDO WHERE NRO_PED = 115
PEDIDO
NRO_PED 100 115 120 RUT_PROV 15.333.222-1 60.155.842-K 17.322.568-2

SUM AVG MIN MAX COUNT

Franco Guidi Polanco

11

Franco Guidi Polanco

12

Ejemplo
Pedidos
Ped# 1 2 3 Fecha_ pedido Prov#

Ejemplos SELECT (1): SELECT FROM Proveedores


Prov# 5645462-8 6353134-4 8545432-8 Nombre YTF ZYZ MNO Ciudad Santiago Arica Santiago

Obtener todos los datos de todos los proveedores:

10/03/1999 5645462-8 11/03/1999 6353134-4 11/03/1999 8545432-8

SELECT * FROM PROVEEDORES


Prov#
5645462-8 6353134-4 8545432-8

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

Franco Guidi Polanco

13

Franco Guidi Polanco

14

Ejemplos SELECT (2): proyeccin

Ejemplos SELECT (3)

Obtener Prov# y Nombre de todos los proveedores: SELECT Prov#, Nombre FROM PROVEEDORES
Prov#
5645462-8 6353134-4 8545432-8

Obtener los cdigos de todos los artculos:

SELECT ART# FROM ARTICULO


Art#
685431-4

Nombre
ABC XYZ MNO

878795-7 468624-8 556546-3 996589-0

Franco Guidi Polanco

15

Franco Guidi Polanco

16

Ejemplos SELECT (4): clusula DISTINCT

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

Obtener los cdigos de los artculos solicitados:


Art#

SELECT ART# FROM DETALLES SELECT DISTINCT ART# FROM DETALLES

685431-4 878795-7 468624-8 556546-3 878795-7

Art#
685431-4 878795-7 468624-8 556546-3

Nombre
ABC MNO

Ciudad
Santiago Santiago

Franco Guidi Polanco

17

Franco Guidi Polanco

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

Franco Guidi Polanco

19

Franco Guidi Polanco

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

Franco Guidi Polanco

21

Franco Guidi Polanco

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#

SELECT y funciones agregadas


Si en la instruccin SELECT no hay un GROUP BY (visto ms adelante), las funciones agregadas operan sobre todas las tuplas Funciones agregadas:
COUNT(): cuenta tuplas MIN(): obtiene el menor valor para un campo MAX(): obtiene el mayor valor para un campo SUM(): suma los valores de un campo AVG(): calcula el promedio de valores de un campo STDEV(): calcula la d.e. de valores de un campo VARIANCE(): calcula la varianza de valores de un campo

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

Franco Guidi Polanco

23

Franco Guidi Polanco

24

SELECT y funciones agregadas Contar los proveedores: SELECT COUNT(*) FROM PROVEEDORES Sumar SELECT SUM( Cantidad ) FROM DETALLES WHERE ART#=878795-7

SELECT y funciones agregadas: regla Regla para el uso de funciones agregadas:


Count(*)
3

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

Franco Guidi Polanco

SELECT y funciones agregadas: regla

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

Franco Guidi Polanco

27

Franco Guidi Polanco

28

Interrogaciones anidadas: clusula EXISTS / NOT EXISTS

Interrogaciones anidadas: clusula EXISTS / NOT EXISTS

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

Mostrar los datos de los artculos que no han sido pedidos:


SELECT * FROM ARTICULOS WHERE NOT EXISTS (SELECT * FROM DETALLES WHERE ARTICULOS.ART# = DETALLES.ART# )

Artculos
Art# 685431-4 996589-0 Nombre_ articulo Lpiz Lpiz

Art# 996589-0

Nombre_ articulo Lpiz

29

Franco Guidi Polanco

30

Interrogaciones con agrupamiento: SELECT GROUP BY

Interrogaciones con agrupamiento: SELECT GROUP BY

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

La funcin COUNT(*) es aplicada a cada lnea agrupada.

Franco Guidi Polanco

31

Franco Guidi Polanco

32

Regla para el uso de SELECT GROUP BY

Regla para el uso de SELECT GROUP BY (cont.)

Regla para el uso de la clusula GROUP BY:


Si una instruccin SELECT contiene la clusula GROUP BY, todos los identificadores de columna especificados en la clusula SELECT deben estar contenidos en una funcin agregada o en la lista de columnas presentes en la clusula GROUP BY (o en ambas).

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#

Franco Guidi Polanco

34

Interrogaciones con agrupamiento: SELECT GROUP BY HAVING

Regla para el uso de SELECT GROUP BY HAVING

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

Regla para el uso de la cusula HAVING:

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

Franco Guidi Polanco

36

Regla para el uso de SELECT GROUP BY HAVING (cont.)

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