Está en la página 1de 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
Bases de Datos: Structured Query Luego transformado en estndar:
Language (SQL) 1986 Primera versin 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 Ingeniera Industrial SQL contiene la funcionalidad tanto de un DDL (Data
Pontificia Universidad Catlica de Valparaso, Chile Definition Language), como de un DML (Data Manipulation
fguidi@ucv.cl Language).

Revisin: 15 de Mayo de 2005


Franco Guidi Polanco 2

Dominios de datos ms comnmente utilizados en SQL Instrucciones en SQL

Caracteres: tipo CHAR SQL como DDL:


CHAR(largo) Crear tablas (CREATE TABLE)
Tipos numricos exactos: Modificar estructura de tablas (ALTER TABLE)
SMALLINT Eliminar tablas (DROP TABLE)
INTEGER
NUMERIC
NUMERIC [(Precisin [, escala ] ) ] SQL como DML:
Nmeros 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


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> [(<tamao>)] <restriccin>, 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, ...) despus de las definiciones de campos.
DBMS utilizado (ej.: integer, char, date).
DEFAULT. Inserta un valor por omisin cuando el registro se
El <tamao> 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 fornea.
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>
(especificacin de campo(s)...)

La especificacin 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


INSERT UPDATE

Agrega nuevos registros a una tabla. Modifica los valores de uno o ms campos
de un conjunto de registros de una tabla.
INSERT INTO <tabla>
[(<lista de campos>)] UPDATE <tabla>
VALUES (<lista de valores>|<expresin select>) SET <lista de asignaciones>
[WHERE <condiciones lgicas>]
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 ms registros de una tabla. Permite efectuar consultas sobre la BD


SELECT [DISTINCT] <lista de campos>
DELETE FROM <tabla> FROM <lista de tablas>
[WHERE <condiciones lgicas>]
[WHERE <condiciones lgicas>] [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


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 Artculos
Nombre_ Prov# Nombre Ciudad
Ped# Art# Cantidad Art#
articulo

685431-4 Lpiz 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 Lpiz

Franco Guidi Polanco 13 Franco Guidi Polanco 14

Ejemplos SELECT (2): proyeccin Ejemplos SELECT (3)

Obtener Prov# y Nombre de todos los Obtener los cdigos de todos los artculos:
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


Ejemplos SELECT (4): clusula DISTINCT Ejemplos SELECT (5): seleccin de tuplas

Obtener los cdigos de los artculos Obtener toda la informacin 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 cdigos de pedidos por cantidades Obtener los nombres de los proveedores en orden
comprendidas entre 10 y 48: alfabtico:
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


Ejemplos SELECT (8): join Ejemplos SELECT (9)

Obtener los cdigos de pedidos con los datos de Obtener las ciudades de los proveedores que han
los proveedores a los que estos van dirigidos: entregado lpices:
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 = Lpiz
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): redenominacin SELECT y funciones agregadas

Encontrar todos las parejas distintas de cdigos Si en la instruccin SELECT no hay un GROUP BY (visto
artculos : ms 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


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 instruccin SELECT no contiene la clusula GROUP BY,
3 y si la clusula SELECT contiene una o ms funciones
agregadas, todos los identificadores de columna
Sumar especificados en la clusula SELECT deben estar
SELECT SUM( Cantidad ) contenidos en una funcin 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 expresin SELECT como parte de la


clusula where.
Situacin vlida: Por ejemplo: obtener el cdigo de los artculos que
SELECT SUM( Cantidad )
hayan sido pedidos en la mayor cantidad:
FROM DETALLES
WHERE ART#=878795-7 SELECT ART#
Situacin 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


Interrogaciones anidadas: clusula EXISTS / NOT EXISTS Interrogaciones anidadas: clusula EXISTS / NOT EXISTS

Permite generar condiciones basadas en la Mostrar los datos de los artculos que no han sido
existencia o inexistencia de tuplas. pedidos:
Ejemplo: encontrar los artculos que tienen el
mismo nombre (pero cdigo diferente) :
SELECT *
SELECT *
FROM ARTICULOS
FROM ARTICULOS A1
WHERE NOT EXISTS
WHERE EXISTS Art#
Nombre_

(SELECT * Artculos (SELECT * articulo

FROM ARTICULOS A2 Art#


Nombre_ FROM DETALLES 996589-0 Lpiz

articulo
WHERE A1.NOMBRE_ARTICULO = WHERE ARTICULOS.ART# =
685431-4 Lpiz
A2.NOMBRE_ARTICULO AND 996589-0 Lpiz 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 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: Ejemplos:


Situacin vlida:
Si una instruccin SELECT contiene la clusula GROUP BY,
todos los identificadores de columna especificados en la SELECT Art#, SUM(Cantidad)
clusula SELECT deben estar contenidos en una funcin FROM Detalles
agregada o en la lista de columnas presentes en la clusula GROUP BY Art#
GROUP BY (o en ambas).
Situacin no vlida:

! 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 cusula HAVING:
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. Todos los identificadores de columnas
especificados en la clusula HAVING deben
SELECT Art#, SUM(Cantidad) estar contenidos en una funcin agregada o
FROM Detalles
GROUP BY Art#
Art#

685431-4
878795-7
Sum(Cantidad)

50
60
!
en la lista de columnas especificadas en la
clusula GROUP BY.
HAVING SUM(Cantidad)>=50 468624-8 500

Franco Guidi Polanco 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

También podría gustarte