Sunteți pe pagina 1din 104

Introducció

n
a
SQL

Introducción a SQL Pág . - 1


Introducción a SQL Pág . - 2
Términos y Conceptos Básicos - Objetivos
Al concluir esta sección estará capacitado para:

♦ Definir SQL
♦ Definir un sistema manejador de bases de datos relacional
♦ Listar y definir los términos de una base de datos
♦ Listar las tablas que están en la base de datos IMCLASS
♦ Reconocer como se insertan y extraen datos desde una base de
datos.

Objetivos En esta sección aprenderá los conceptos básicos de una base


de datos, y serán definidos los términos usados para referenciar
entidades. También se incluye una breve explicación del sistema
manejador de bases de datos relacionales y como se insertan y
extraen datos en una base de datos.

Introducción a SQL Pág . - 3


SQL

♦ Structured Query Language (Lenguaje de consulta estructurado)

• Es una forma estándar de consulta de datos específicos


• Es una forma de extraer y manipular datos de una base de datos
• Usado para todas las funciones de bases de datos, incluyendo
administración, creación de esquemas y datos recuperables
• Puede ser usado de forma implícita dentro de una aplicación

Introducción a SQL Pág . - 4


Base de Datos
♦ Definición: Un cuerpo o conjunto de datos en el cual existen
relaciones entre sus elementos

Ejemplo:
SURCE97
SURCE97
Proyecto
Mov_Est

Est_fin

Oficio
Ofi_Pro

Introducción a SQL Pág . - 5


Sistema Manejador De Base De Datos (DBMS)

♦ Definición: Es un programa que permite la definición de estructuras de


bases de datos, el almacenamiento y la recuperación de datos de
estas estructuras.

Administrador
BD
Usuarios SURCE97
SQL anywhere
Servidor

Tabla • Conjunto de renglones o lista de valores


• Análogo a un “archivo”

Columna • Análogo a un “campo” de un registro


• Cada columna en un renglón dado tiene un valor único de
dato
• Cada columna es de un tipo de dato único
Renglón
• Análogo a un “registro” de un archivo
• Todos los renglones de una tabla tienen el mismo conjunto de
columnas
Llave Primaria

• Una o más columnas cuyo contenido es único dentro de la


tabla y puede ser usado para identificar los renglones de otra
tabla.
Llave Foránea

• Una o más columnas de una tabla que existe como llave


primaria en otra tabla. Los nombres de las columnas de las
llaves foráneas no tienen que ser iguales a los nombres de las
columnas de las llaves primarias.

Introducción a SQL Pág . - 6


Tablas

Nombres de Columnas

Ent_fed Proyec Munici Eje_fis


22 97/000001 01 1997

Renglones 22 97/000002 02 1997

22 97/000003 01 1997

Columnas

Ejemplo: La tabla PROYECTO contiene información de los proyectos

Llaves Primarias

♦ Cada renglón puede ser accesado por una “llave primaria” única

• En todos los renglones, algunas columnas o grupos de columnas


deberán identificar únicamente este renglón.

Introducción a SQL Pág . - 7


Tabla Proyecto
Llave Primaria

Ent_fed Proyec Munici Eje_fis


22 97/000001 01 1997

22 97/000002 02 1997

22 97/000003 01 1997

La concatenación de “Ent_fed + Proyec” es un identificador único para cada producto,


por eso es una llave primaria.

Visión General: Crear una Tabla


1. El Diseñador de una base de datos crea las tablas

create table PROYECTO


(ent_fed char(2) not null,
proyec char(12) not null,
munici char(3) not null,
progra char(2) null)

2. En una tabla que esta creada, se pueden insertar datos

insert PROYEC
(‘26’,’97/000002’,’02’,’SS’)

Introducción a SQL Pág . - 8


Visión General: Extraer datos de una Tabla
♦ Extraer datos de una tabla
select * from PROYECTO

♦ Nombres Convencionales
• Forma corta
nombre_tabla.nombre_columna

• Forma completa
base_datos.propietario.nombre_tabla.nombre_columna

♦ Ejemplo:

PROYECTO.name
SURCE97.dba.PROYECTO.munici
SURCE97.admdeleg.PROYMIO.nom_com

♦ Nombres convencionales Defaults


• El valor default para el propietario es el de la base
actual
• El valor default para la base de datos es el de la
base de datos actual

Usar el dba
• Propietario de la base de datos
• Utilice “dba” si el propietario de la tabla es también
el propietario de la base de datos.

Introducción a SQL Pág . - 9


Sumario

♦ Structured Query Language (SQL) -es una forma estándar para


obtener y manipular datos de una base de datos.

♦ Base de datos - Un cuerpo de datos en el cual existe una relación


entre sus elementos.

♦ Sistema manejador de base de datos - Programa que permite la


definición de estructuras de bases de datos, el almacenamiento y la
recuperación de estas estructuras.

♦ Términos - Tabla, columna, renglón, llave primaria.

♦ Nombres convencionales - BD.propietario.nom_tabla.nom_columna

Introducción a SQL Pág . - 10


Joins y Subconsultas - Objetivos
Al concluir esta sección estará capacitado para:

♦ Elaborar consultas y subconsultas en base a una o varias


operaciones join
♦ Realizar subconsultas con joins externos
♦ Extraer un conjunto de renglones de la misma tabla con más de una
subconsulta
♦ Renombrar el resultado de una subconsulta

Introducción a SQL Pág . - 11


La cláusula KEY JOIN
♦ KEY JOIN indica una operación join
♦ Una consulta puede ser simplificada en su estructura al utilizar un
KEY JOIN

♦ Ejemplo (sin utlizar KEY JOIN)

select proyec, nom_ofi


from PROYECTO, MUNICI
where PROYECTO.ent_fed = MUNICI.ent_fed
and PROYECTO.munici = MUNICI.munici

♦ Ejemplo (utlizando KEY JOIN)

select proyec, nom_ofi


from PROYECTO key join MUNICI

Resultado sin KEY JOIN Resultado con KEY JOIN


proyec munici proyec munici
97/000029 Ensenada 97/000029 Ensenada
97/000030 Ensenada 97/000030 Ensenada
97/000031 Ensenada 97/000031 Ensenada
97/000063 Ensenada 97/000063 Ensenada
97/000064 Ensenada 97/000064 Ensenada
97/000065 Ensenada 97/000065 Ensenada
97/001905 Ensenada 97/001905 Ensenada
97/000069 Ensenada 97/000069 Ensenada
97/000070 Ensenada 97/000070 Ensenada
97/000071 Ensenada 97/000071 Ensenada
97/000072 Ensenada 97/000072 Ensenada
97/000066 Ensenada 97/000066 Ensenada
97/000067 Ensenada 97/000067 Ensenada
97/000068 Ensenada 97/000068 Ensenada
97/000006 Ensenada 97/000006 Ensenada

Introducción a SQL Pág . - 12


KEY JOIN con más de una tabla
♦ Listar los proyectos, su tipo y el municipio al que pertenecen para el
fondo 1 y el programa ‘SB’

select proyec, nom_ofi, descri


from PROYECTO key join MUNICI
key join LINEAM
where fondo = 1 and progra = 'SB'
order by PROYECTO.munici

Resultado

proyec nom_ofi descri


97/000355 Ensenada Social
97/000356 Ensenada Social
97/000351 Mexicali Social
97/000352 Mexicali Social
97/000358 Tecate Social
97/000357 Tecate Social
97/000353 Tijuana Social
97/000354 Tijuana Social
97/0307 Tijuana Apoyo
97/000359 Concejo Mpal. de playas de Rosarito Social
97/000360 Concejo Mpal. de playas de Rosarito Social

Introducción a SQL Pág . - 13


KEY LEFT OUTER JOIN / KEY RIGHT OUTER JOIN
♦ Al especificar una operación join en una consulta puede suceder el
caso que alguna de las tablas no contenga datos para establecer la
relación, esto reflejaría un resultado incompleto o bien no se
obtendría ningún registro

• Supongamos dos tablas A y B

A key left outer join B

El resultado incluye los renglones de A que no esten contenidos en


B y los que además cumplen la condición de la relación

A key right outer join B

El resultado incluye los renglones de B que no esten contenidos en


A y los que además cumplen la condición de la relación

Ejemplos

select PRO_ESP.proyec, CAR_GEN.descri select PRO_ESP.proyec, CAR_GEN.descri


from PRO_ESP key left outer join CAR_GEN from PRO_ESP key join CAR_GEN
where PRO_ESP.munici = 1 where PRO_ESP.munici = 1
order by PRO_ESP.proyec order by PRO_ESP.proyec

proyec descri proyec descri


00053 (NULL) 97/000007 CONSTRUCCION DE 4 AULAS TIPO
REGIONAL EN E.P.E.LA ESPERANZA
97/000006 (NULL) sgc01 Pavimentación de Av. Prueba mediante maquinaria
de plancha al calor.
97/000007 CONSTRUCCION DE 4 AULAS TIPO
REGIONAL EN E.P.E.LA ESPERANZA
97/000008 (NULL)
97/000009 (NULL)
97/000029 (NULL)
97/000030 (NULL)
97/000031 (NULL)
97/000063 (NULL)
97/000064 (NULL)
97/000065 (NULL)
97/000066 (NULL)
97/000067 (NULL)

Introducción a SQL Pág . - 14


KEY LEFT OUTER JOIN / KEY RIGHT OUTER JOIN
(Continuación)
♦ Los valores que se desean desplegar en el resultado de la consulta y
que no se encuentran en alguna de las tablas utilizadas para la
operación join aparecen como NULL

♦ Otra forma de representar el KEY LEFT/RIGHT OUTER JOIN es


utlizando en el WHERE las columnas que establezcan el join

WHERE A.columna1 *= B.columna1 (KEY LEFT OUTER JOIN)


AND A.columna2 *= B.columna2 (KEY LEFT OUTER JOIN)

WHERE A.columna1 =* B.columna1 (KEY RIGHT OUTER JOIN)


AND A.columna2 =* B.columna2 (KEY RIGHT OUTER JOIN)

Introducción a SQL Pág . - 15


Subconsultas con joins externos
♦ En una subconsulta es posible definir operaciones joins para obtener
un resultado (columna o función agregada) que forme parte de la lista
de columnas de la consulta principal

• Ejemplo
Lista los proyectos del municipio 1 y la descripción del fondo,
programa y subprograma

select P.proyec, P.fondo,


(select F.nombre
from FONDO F
where P.eje_fis = F.eje_fis
and P.fondo = F.fondo),
P.progra,
(select PR.descri
from PROGRAMA PR
where P.eje_fis = PR.eje_fis
and P.fondo = PR.fondo
and P.progra = PR.progra),
P.subpro,
(select S.descri
from SUBPROG S
where P.eje_fis = S.eje_fis
and P.fondo = S.fondo
and P.progra = S.progra
and P.subpro = S.subpro)
from PROYECTO P
where P.munici = 1

Resultado
proyec fondo nombre progra descri subpro descri
97/000029 2 Fondo para el Desarrollo Regional y el SG ELECTRIFICACION 01 Urbana
Empleo
97/000030 2 Fondo para el Desarrollo Regional y el SG ELECTRIFICACION 01 Urbana
Empleo
97/000031 2 Fondo para el Desarrollo Regional y el SG ELECTRIFICACION 01 Urbana
Empleo
97/000063 2 Fondo para el Desarrollo Regional y el SD ALCANTARILLADO 03 Construcción
Empleo
97/000064 2 Fondo para el Desarrollo Regional y el SD ALCANTARILLADO 03 Construcción
Empleo
97/000065 2 Fondo para el Desarrollo Regional y el SD ALCANTARILLADO 03 Construcción
Empleo
97/001905 2 Fondo para el Desarrollo Regional y el SS ASISTENCIA SOCIAL Y SERVICIOS 01 Nutrición,
Empleo COMUNITARIOS Alimentación y
Salud
97/000069 2 Fondo para el Desarrollo Regional y el SI VIALIDADES URBANAS 01 Reconstrucción
Empleo
97/000070 2 Fondo para el Desarrollo Regional y el SI VIALIDADES URBANAS 01 Reconstrucción
Empleo
97/000071 2 Fondo para el Desarrollo Regional y el SI VIALIDADES URBANAS 01 Reconstrucción
Empleo
97/000072 2 Fondo para el Desarrollo Regional y el SI VIALIDADES URBANAS 01 Reconstrucción
Empleo
97/000066 2 Fondo para el Desarrollo Regional y el SI VIALIDADES URBANAS 01 Reconstrucción
Empleo

Introducción a SQL Pág . - 16


97/000067 2 Fondo para el Desarrollo Regional y el SI VIALIDADES URBANAS 01 Reconstrucción
Empleo
97/000068 2 Fondo para el Desarrollo Regional y el SI VIALIDADES URBANAS 01 Reconstrucción
Empleo
97/000006 2 Fondo para el Desarrollo Regional y el SJ INFRAESTRUCTURA EDUCATIVA 02 Construcción
Empleo
97/000007 2 Fondo para el Desarrollo Regional y el SJ INFRAESTRUCTURA EDUCATIVA 02 Construcción
Empleo
97/000008 2 Fondo para el Desarrollo Regional y el SJ INFRAESTRUCTURA EDUCATIVA 02 Construcción
Empleo
97/000009 2 Fondo para el Desarrollo Regional y el SJ INFRAESTRUCTURA EDUCATIVA 02 Construcción
Empleo

Subconsultas con joins externos (continuación)


♦ Las subconsultas con joins externos que no cumplen la condición de
relación se presentan con valor NULL
♦ Una subconsulta con un join externo solo puede regresar como
resultado un valor (columna, función agregada) de un renglón

• Ejemplo
Lista los proyectos específicos y la descripción del municipio y
localidad a la que pertenecen

select P.proyec,
(select M.nom_ofi
from MUNICI M
where P.ent_fed = M.ent_fed
and P.munici = M.munici),
(select L.nombre
from LOCALI L
where P.ent_fed = L.ent_fed
and P.munici = L.munici
and P.locali = L.locali)
from PRO_ESP P

Resultado
proyec nom_ofi nombre
97/000055 Tijuana TIJUANA
97/000056 Tijuana TIJUANA
97/000076 Tecate LAZARO CARDENAS, COL.
97/000029 Ensenada POPULAR 89, FRACC
97/000030 Ensenada POPULAR 89, FRACC
97/000031 Ensenada POPULAR 89, FRACC
97/000048 Mexicali PROGRESO,COL.
97/000049 Mexicali PROGRESO,COL.
97/000050 Mexicali PROGRESO,COL.
97/000043 Tijuana CUMBRES, COL.
97/000044 Tijuana TIJUANA
97/000045 Tijuana LAZARO CARDENAS, COL.
97/000077 Tecate LAZARO CARDENAS, COL.
97/000078 Tecate LAZARO CARDENAS, COL.
97/000046 Tijuana CUMBRES, COL.
97/000047 Tijuana (NULL)
97/000057 Tijuana (NULL)
97/000058 Tijuana (NULL)

Introducción a SQL Pág . - 17


97/000063 Ensenada RUIZ CORTINES
97/000064 Ensenada RUIZ CORTINES
97/000065 Ensenada RUIZ CORTINES
97/000051 Tijuana MURUA, FRACC.
97/000052 Tijuana LOMAS TAURINAS,COL.
97/000053 Tijuana (NULL)

Subconsultas con joins externos para una misma tabla


♦ Una subconsulta con joins externos es muy útil cuando se requiere
obtener un conjunto de valores que estan contenidos en la misma
tabla y no pueden extraerse con una sola condición dentro de la
consulta
♦ Al resultado de una subconsulta se le puede asignar un nombre que
sirva como un identificador más preciso, esto utilizando la sentencia
AS
• Ejemplo
Listar los nombres de los proyectos para el municipio 2 y su estructura
financiera federal y estatal para cada uno en la fase de aprobación

select P.proyec,
(select E.can_act
from EST_FIN E
where P.ent_fed = E.ent_fed
and P.proyec = E.proyec
and E.fase_pre = 3
and E.tipo_inv = 1) as inv_federal,
(select E.can_act
from EST_FIN E
where P.ent_fed = E.ent_fed
and P.proyec = E.proyec
and E.fase_pre = 3
and E.tipo_inv = 2) as inv_estatal
from PROYECTO P
where P.munici = 2

Resultado
proyec inv_federal inv_estatal
97/000048 736607.0000 245536.0000
97/000049 9375.0000 9375.0000
97/000050 (NULL) (NULL)
97/000472 97500.0000 32500.0000
97/000119 (NULL) (NULL)
97/000033 679330.0000 226443.0000
97/000034 8646.0000 8646.0000
97/000035 (NULL) (NULL)
97/000036 538978.0000 179659.0000
97/000037 1502771.0000 500924.0000
97/000038 19126.0000 19126.0000
97/000039 (NULL) (NULL)
97/000040 262319.0000 87440.0000
97/000041 452413.0000 150804.0000

Introducción a SQL Pág . - 18


Sumario
♦ La cláusula KEY JOIN permite simplificar la operación join en una
consulta
♦ KEY LEFT/RIGHT OUTER JOIN son empleados cuando se requieren
extraer renglones que no cumplan con la operación join
♦ Otra forma de representar el KEY LEFT/RIGHT OUTER JOIN es
(*= / =*) en el WHERE de las columnas a relacionar
♦ Las subconsultas con joins externos se consideran como columnas a
extraer con un solo valor dentro de la consulta principal
♦ El resultado de una subconsulta puede renombrarse por medio de la
sentencia AS

Introducción a SQL Pág . - 19


Extraer Datos I - Objetivos
Al concluir esta sección estará capacitado para:

♦ Conectarse a la base de datos apropiada


♦ Escribir una consulta usando condiciones para restringir datos
extraídos
♦ Usar expresiones Booleanas en la condición de la consulta

Objetivos En esta sección, aprenderá a usar los elementos básicos de


SQL para extraer datos desde la base de datos.

Introducción a SQL Pág . - 20


SQL Anywhere: Una Visión General

software de cliente
SQL anywhere

software de cliente

♦ El software cliente es usado para accesar al Servidor de SQL


Anywhere, el cual en su turno accesa a la base de datos.

Introducción a SQL Pág . - 21


Seleccionar una Base de Datos
♦ Desde SQL AnyWhere se puede seleccionar la base de datos

BD
BD
NOMINA
BD
SQL Anywhere SURCE
IMCLASS

Introducción a SQL Pág . - 22


Recuperación Simple - select/from
♦ Se utiliza para extraer datos de la base de datos

• cláusula select para ver las columnas que desee


• cláusula from especifica la(s) tabla(s) de donde son extraídos los
datos

♦ Ejemplo (todas las columnas)


“ * ” indica “todas las columnas de la tabla PROYECTO

Select * from PROYECTO

Sintaxis select lista_select


from lista_tabla

Resultado

ent_fed proyec munici eje_fis fondo progra subpro con_pro cat_pes ..................
18 97/C05003 5 1997 1 SC 01 00 0 ..................
18 97/C05004 5 1997 1 SE 03 0A 0 ..................
18 97/C05001 5 1997 1 SE 02 00 0 ..................
18 97/C07002 7 1997 1 SJ 02 0A 0 ..................
18 97/C07001 7 1997 1 SK 02 00 0 ..................
18 97/C13003 13 1997 1 SG 01 0B 0 ..................
18 97/C03006 3 1997 1 SE 02 00 0 ..................
18 97/C16002 16 1997 1 SG 01 0B 0 ..................
18 97/C13005 13 1997 1 SG 01 0B 0 ..................
18 97/C13006 13 1997 1 SG 01 0B 0 ..................
18 97/C13007 13 1997 1 SG 01 0B 0 ..................
18 97/C13008 13 1997 1 SG 01 0B 0 ..................
18 97/C13004 13 1997 1 SG 02 0B 0 ..................
18 97/C13001 13 1997 1 SE 02 00 0 ..................
18 97/C13002 13 1997 1 SD 02 00 0 ..................
18 97/C05002 5 1997 1 SJ 02 0C 0 ..................
18 97/C16001 16 1997 1 SG 02 0B 0 ..................
18 97/C05005 5 1997 1 SJ 02 0B 0 ..................
. . . . . . . . . ..................
. . . . . . . . . ..................
. . . . . . . . . ..................

Introducción a SQL Pág . - 23


Recuperación Simple - (continuación)
♦ Ejemplo (una columna)

Listar solamente la columna proyec de la tabla PROYECTO

select proyec
from PROYECTO

Resultado

proyec
97/C05003
97/C05004
97/C05001
97/C07002
97/C07001
97/C13003
97/C03006
97/C16002
97/C13005
97/C13006
97/C13007
97/C13008
97/C13004
97/C13001
97/C13002
97/C05002
97/C16001
97/C05005
.
.
.

Introducción a SQL Pág . - 24


Recuperación Simple - select/from (continuación)
♦ Ejemplo (más de una columna)

Listar los proyectos y su municipio de la tabla PROYECTO

select proyec, munici


from PROYECTO

Resultado

proyec munici
97/C05003 5
97/C05004 5
97/C05001 5
97/C07002 7
97/C07001 7
97/C13003 13
97/C03006 3
97/C16002 16
97/C13005 13
97/C13006 13
97/C13007 13
97/C13008 13
97/C13004 13
97/C13001 13
97/C13002 13
97/C05002 5
97/C16001 16
97/C05005 5
. .
. .
. .

Introducción a SQL Pág . - 25


Reordenar columnas
♦ El orden de columnas en la selección será el orden determinado de
las columnas en el resultado

• Ejemplo

Lista los municipios de los proyectos de la tabla PROYECTO

select munici, proyec


from PROYECTO

Resultado

munici proyec
5 97/C05003
5 97/C05004
5 97/C05001
7 97/C07002
7 97/C07001
13 97/C13003
3 97/C03006
16 97/C16002
13 97/C13005
13 97/C13006
13 97/C13007
13 97/C13008
13 97/C13004
13 97/C13001
13 97/C13002
5 97/C05002
16 97/C16001
5 97/C05005
. .
. .
. .

Introducción a SQL Pág . - 26


Eliminar Duplicados
♦ distinct elimina renglones duplicados en la salida

♦ Ejemplo (sin distinct)


Lista los programas que se encuentran en la tabla PROYECTO

select progra
from PROYECTO

♦ Ejemplo (con distinct)


Lista sólo una ocurrencia de cada programa de la tabla PROYECTO

select distinct progra


from PROYECTO

Sintaxis select [ distinct lista_select ]


from tabla

Sin utilizar distinct Utilizando distinct


progra progra
SC SC
SE SE
SE SJ
SJ SK
SK SG
SG SD
SE UB
SG SF
SG SL
SG TH
SG TJ
SG SH
SG ST
SE TF
SD TE
SJ SS
SG SP
SJ
SJ
.
.
.

Introducción a SQL Pág . - 27


distinct
♦ distinct actúa sobre el renglón completo

• Ejemplo
Lista sólo una ocurrencia de los programas y subprogramas de los
proyectos

select distinct progra, subpro


from PROYECTO

select progra, subpro select distinct progra, subpro


from PROYECTO from PROYECTO
progra subpro progra subpro
SC 01 SC 01
SE 03 SE 03
SE 02 SE 02
SJ 02 SJ 02
SK 02 SK 02
SG 01 SG 01
SE 02 SG 02
SG 01 SD 02
SG 01 SE 01
SG 01 UB 02
SG 01 SC 03
SG 01 SD 01
SG 02 SF 02
SE 02 UB 03
SD 02 SL 02
SJ 02 SC 02
SG 02 SE 04
SJ 02 TH 02
SJ 02 UB 01
SJ 02 SD 03
. . . .
. . . .
. . . .

Introducción a SQL Pág . - 28


distinct (continuación)

El distinct es usado para:

• Encontrar cada valor posible en una columna en particular


• Agrupar valores en categorías
• Ejemplo
Lista cada municipio de la tabla PRO_ESP

select distinct munici


from PRO_ESP

Resultado

munici
16
5
13
17
7
6
2
20
15
3
4
14
10
18
19
8
998

Introducción a SQL Pág . - 29


Extracción Calificada - select/from/where
♦ La cláusula where limita cuales renglones son extraídos

• Ejemplo
Lista los proyectos específicos del municipio con clave 2

select proyec, munici


from PRO_ESP
where munici = 2

♦ Las condiciones de búsqueda son expresiones booleanas (verdadero,


falso) aplicadas a cada renglón para determinar el resultado que
deberá regresar

Sintaxis select lista_select


from lista_de_tablas
where condición

Resultado
proyec munici
97/C02001 2
97/C02002 2
97/C02003 2
97/C02004 2
97/C02005 2
97/C02007 2
97/C02008 2
97/C02009 2
97/C02010 2
97/C02006 2
97/C02013 2
97/C02014 2
97/C02011 2
97/C02012 2
97/C02016 2
97/C02015 2
97/C02017 2
97/C02018 2
97/C02019 2
97/C02020 2
97/C02021 2

Introducción a SQL Pág . - 30


Extracción Calificada - select/from/where (continuación)
♦ Calificadores en la cláusula where

• Operadores de comparación (=, >, <, >=,<=)


• Rangos (between y not between)
• Caracteres iguales (like y not like)
• Valores desconocidos (is null e is not null)
• Listas (in y not in)
• Combinaciones (and, or)

♦ not niega una expresión booleana y palabras claves como like, null,
between y in

Ejemplo de NOT select proyec, munici


from PRO_ESP
where munici not between 1 and 5

Resultado
proyec munici
97/C16002 16
97/C16001 16
97/C13009 13
97/C13010 13
97/C17001 17
97/C17002 17
97/C17003 17
97/C17004 17
97/C17005 17
97/C17006 17
97/C17008 17
97/C07002 7
97/C07001 7
97/C13003 13
97/C13005 13
97/C13006 13
97/C13007 13
97/C13008 13
97/C13004 13
97/C13001 13
. .
. .3
. .

Introducción a SQL Pág . - 31


select/from/where - Operadores de comparación

Operador Significado

= igual
> mayor que
< menor que
>= mayor o igual que
<= menor o igual
!= diferente que
<> diferente que
!> no es mayor que
!< no es menor que

No es igual a <> es igual a !=

menor que !< es igual a >=

mayor que !> es igual a <=

Nota Use comillas en los tipos de datos char, varchar, y datetime;


por ejemplo:

where proyec = ‘97/C16002’

Introducción a SQL Pág . - 32


select/from/where - Operadores de Comparación
♦ Ejemplo (igual =)
Lista los proyectos que pertenecen al programa ‘SK’

select proyec, nombre


from PROYECTO
where progra = ‘SS’

Resultado
proyec nombre
97/C07001 SISTEMA DE PURIFICACION DE AGUA ESC. PRIM. MIGUEL HIDALGO Y COSTILLA
97/C19016 RECONSTRUCCION DE BARDEO EN LA ESC. PRIM. LEONA VICARIO
97/C19006 PROTECCION DE LAS VENTANAS EN 3 AULAS ESC. PRIM CUAUHTEMOC
97/C03018 REHABILITACION CERCADO PERIMETRAL JARDIN DE NIÑOS NARCISO MENDOZA
97/C03019 REHABILITACION DE CASA DEL MAESTRO Y SERVICIOS SANITARIOS ESC. PRIM. FCO. I. MADERO
97/C14014 REHABILITACION DE ESC. PRIM. MIGUEL HIDALGO
97/C07006 REHAB. DE ACCESO A LA ESC. SEC. FED. NO. 9 "RICARDO FLORES MAGON"

Ejemplo Busca los proyectos que no pertenezcan al programa ‘SE’


No igual select proyec, nombre
from PROYECTO
where progra != ‘SE’

Ejemplo Busca los proyectos con un costo total mayor a $300,000


Mayor que select *
from PROYECTO
where costo_tot > 300000
Ejemplo Busca los nombres de los proyectos que su primer letra sea
Menor que menor a “C”
select nombre
from PROYECTO
where nombre < ‘C’

Introducción a SQL Pág . - 33


select/from/where - Rangos
♦ between es usado para especificar un rango inclusivo : los valores
limites son incluidos en la búsqueda

• Ejemplo

select num_ofi, tipo_inv, cantid


from EST_OFI
where cantid between 75000 and 100000

♦ not between excluye el valor más alto y el más bajo que han sido
especificados

• Ejemplo

select num_ofi, tipo_inv, cantid


from EST_OFI
where cantid not between 75000 and 100000

Resultado between
num_ofi tipo_inv cantid
COP-DPP-F1-5-0013 1 88850.0000
COP-DPP-F1-5-0037 1 80933.0000
COP-DPP-F1-5-0012 1 91285.0000
COP-DPP-F1-5-0040 1 82209.0000
COP-DPP-F1-5-0017 1 97693.0000
COP-DPP-F1-5-0067 1 82571.0000

Resultado not between


num_ofi tipo_inv cantid
COP-DPP-F1-5-0026 1 7584.0000
COP-DPP-F1-5-0026 1 63441.0000
COP-DPP-F1-5-0026 1 39867.0000
COP-DPP-F1-5-0036 1 49068.0000
COP-DPP-F1-5-0036 1 122167.0000
COP-DPP-F1-5-0015 1 17068.0000
COP-DPP-F1-5-0015 1 180341.0000
COP-DPP-F1-5-0044 1 552427.0000
COP-DPP-F1-5-0044 1 723851.0000
COP-DPP-F1-5-0041 1 228116.0000
. . .
. . .
. . .

Introducción a SQL Pág . - 34


select/from/where - Usar Caracteres
♦ Palabra clave like
• Utilizada para seleccionar renglones cuyos campos son iguales a
la cadena de caracteres especificada
• Utilizada con datos de tipo caracter
• Puede usar opciones

opciones significado
% cualquier cadena de cero o muchos caracteres

_ cualquier carácter

[] cualquier caracter del conjunto

[^] cualquier caracter que no este dentro del rango


especificado
• Encerrar las opciones y las cadenas de caracteres entre comillas

Introducción a SQL Pág . - 35


select/from/where - Usar Caracteres (continuación)
♦ Ejemplo (like usando %)
Busca el nombre de los proyectos que comiencen con la letra “P”
select proyec, nombre
from PROYECTO
where nombre like ‘P%’

♦ Ejemplo (not like usando %)


Busca los proyectos cuyo nombre no comience con “P”

select proyec, nombre


from PROYECTO
where nombre not like ‘P%’

Resultado where nombre like ‘P%’


proyec nombre
97/C02002 PAVIMENTACION CALLE JUAREZ ENTRE 20 DE NOV. Y FCO. COSIO
97/C02003 PAVIMENTACION DE CALLES: ABASOLO, ISMAEL ZUÑIGA, MORELOS Y 20 DE NOVIEMBRE
97/C19006 PROTECCION DE LAS VENTANAS EN 3 AULAS ESC. PRIM CUAUHTEMOC

Resultado where nombre not like ‘P%’


proyec nombre
97/C05003 REHAB. DEL SISTEMA DE AGUA POTABLE ( RED DE DISTRIBUCION )
97/C05004 CONSTRUCCION DE GUARNICIONES
97/C05001 CONSTRUCCION DE EMPEDRADOS
97/C07002 CONSTRUCCION AULA PREESCOLAR CONCEPCION JAIME ESPINOZA COL. EL CARRIZAL
97/C07001 SISTEMA DE PURIFICACION DE AGUA ESC. PRIM. MIGUEL HIDALGO Y COSTILLA
97/C13003 AMPLIACION RED ELECTRICA BARRIO DE ARRIBA
97/C03006 EMPEDRADO DE CALLES
97/C16002 AMPLIACION RED ELECTRICA COL. EL TACOTE
97/C13005 AMPLIACION RED ELECTRICA BARRIO DE ENMEDIO
97/C13006 AMPLIACION RED ELECTRICA COL. BUENOS AIRES
97/C13007 AMPLIACION RED ELECTRICA BARRIO DE ABAJO
97/C13008 AMPLIACION RED ELECTRICA COL. PROGRESO
97/C13004 AMPLIACION RED ELECTRICA COL. NUEVA
97/C13001 EMPEDRADO CALLES COL. LAZARO CARDENAS
97/C13002 AMPLIACION ALCANTARILLADO SANITARIO COL. BUENOS AIRES
97/C05002 CONST. DE CERCO PERIMETRAL ESC. TELESEC. VICENTE GUERRERO
. .
. .
. .

Introducción a SQL Pág . - 36


select/from/where - Usar Caracteres (continuación)
♦ Ejemplo (conjunto de valores)
Busca el nombre de los proyectos que comiencen con las letras “B”, “D”
o “P”
select nombre
from PROYECTO
where nombre like ‘[BDP]%’

♦ Ejemplo (rango de caracteres)


Busca los proyectos cuyo nombre comience con cualquiera de las
letras del rango “F” a “P”

select nombre
from PROYECTO
where nombre like ‘[F-P]%’

Resultado Resultado
where nombre where nombre
like ‘[BDP]%’ like ‘[F-P]%’
nombre nombre
PAVIMENTACION CALLE JUAREZ ENTRE 20 DE NOV. Y FCO. COSIO INTRODUCCION DEL SISTEMA DE AGUA POTABLE COL. LOS LIRIOS
INTRODUCCION DEL SISTEMA DE AGUA POTABLE COL. LOS COLOMOS
PAVIMENTACION DE CALLES: ABASOLO, ISMAEL ZUÑIGA, MORELOS Y 20 DE NOVIEMBRE
INTRODUCCION DEL SISTEMA DE AGUA POTABLE COL. NUEVAS PALOMAS
DRENAJE PLUVIAL EN UNIDAD DEPORTIVA INTRODUCION DEL SISTEMA DE AGUA POTABLE COL. BENITO JUAREZ OTE.
PAVIMENTACION CALLE JUAREZ ENTRE 20 DE NOV. Y FCO. COSIO
DESPIEDRE AGRICOLA CON MAQUINARIA
PAVIMENTACION DE CALLES: ABASOLO, ISMAEL ZUÑIGA, MORELOS Y 20 DE NOVIEMBRE
BALASTREO DE CALLES COL. SAN RAFAEL NIVELACION Y BALASTREO DE CALLES EN COL. LAZARO CARDENAS
IMPLANTACION DE PASTO Y CERCO PERIMETRAL DE 100 HAS.
BALASTREO DE CAMINO SACACOSECHAS PTA. AZUL- LADRILLERAS
PROTECCION DE LAS VENTANAS EN 3 AULAS ESC. PRIM CUAUHTEMOC
PROTECCION DE LAS VENTANAS EN 3 AULAS ESC. PRIM CUAUHTEMOC GASTOS DEL GRUPO OPERATIVO

Introducción a SQL Pág . - 37


select/from/where - Listas
♦ Palabra clave in
• Permite seleccionar renglones con columnas cuyo contenido
corresponde a alguno de los valores de la lista

• Ejemplo (in)
Busca los proyectos que sean del programa “SD” o “SL”

select proyec, progra


from PROYECTO
where progra in (‘SD’, ‘SL’)

Resultado

proyec progra
97/C13002 SD
97/C17037 SD
97/C17038 SD
97/C02008 SL
97/C02014 SD
97/C02018 SD
97/C15005 SL
97/C04001 SD
97/C08005 SD
97/S00001 SD
97/C17033 SD
97/C17034 SD
97/C17035 SD
97/C17036 SD
97/C18005 SD
97/C18006 SD
97/C04008 SD
97/C18008 SD
97/C03017 SL

Introducción a SQL Pág . - 38


select/from/where - Conectores condicionales
♦ Conectores condicionales con operadores lógicos: and/or

♦ and
• Conecta dos o más condiciones
• Regresa resultado sólo cuando todas las condiciones son
verdaderas
• Ejemplo:
Busca los proyectos del programa “SE” que se localicen en el
municipio con clave 2
select proyec, progra, munici
from PROYECTO
where progra = ‘SE’ and munici = 2

Resultado
proyec progra munici
97/C02001 SE 2
97/C02004 SE 2
97/C02005 SE 2
97/C02007 SE 2
97/C02011 SE 2
97/C02012 SE 2

Introducción a SQL Pág . - 39


select/from/where - Conectores condicionales
♦ or
• Conecta dos o más condiciones
• Regresa un resultado cuando alguna de las condiciones es
verdadera
• Es inclusivo
• Ejemplo (or)
Busca los proyectos que pertenezcan al programa “SD” o que sean
de modalidad de ejecución “C”
select proyec, progra, mod_eje
from PROYECTO
where progra = ‘SD’ or mod_eje = ‘C’

Resultado
proyec progra mod_eje
97/C13003 SG C
97/C16002 SG C
97/C13005 SG C
97/C13006 SG C
97/C13007 SG C
97/C13008 SG C
97/C13004 SG C
97/C13002 SD AM
97/C16001 SG C
97/C17039 SC C
97/C17040 SC C
97/C17041 SC C
97/C17042 SC C
97/C17037 SD C
97/C17038 SD C
97/C06015 SG C
97/06016 SG C
97/C06017 SG C
97/C06018 SG C
97/C02002 SF C
97/C02003 SF C
97/C02014 SD AM
97/C02018 SD AM
97/C20005 SJ C
97/C15001 UB C
97/C13012 UB C
. . .
. . .
. . .

Introducción a SQL Pág . - 40


select/from/where - Conectores condicionales
(continuación)

♦ Cuando se utiliza más de un operador lógico, el orden por default en


el cual son evaluados es: not/and/or
♦ Use paréntesis para forzar el orden de evaluación ó aclarar la
intención
♦ Ejemplo (sin paréntesis)
Busca los proyectos de los programas “SK” y “SE”, aquellos que
pertenezcan al programa “SE” que tengan un costo superior a
$200,000.00

select proyec, progra, costo_tot


from PROYECTO
where progra = ‘SK’ or progra = ‘SE’ and costo_tot > 200000

Resultado
proyec progra costo_tot
97/C07001 SK 27105.0000
97/C17008 SE 287175.0000
97/C17007 SE 213456.0000
97/C02011 SE 286424.0000
97/C03005 SE 326410.0000
97/C10002 SE 256529.0000
97/C19016 SK 32479.0000
97/C19006 SK 7078.0000
97/C03018 SK 46383.0000
97/C03019 SK 23460.0000
97/C14014 SK 92587.0000
97/C07006 SK 82236.0000

♦ Ejemplo utilizando paréntesis con and/or

select proyec, progra, costo_tot


from PROYECTO
where (progra = ‘SK’ or progra = ‘SE’) and costo_tot > 200000

Resultado
proyec progra costo_tot
97/C17008 SE 287175.0000
97/C17007 SE 213456.0000
97/C02011 SE 286424.0000
97/C03005 SE 326410.0000
97/C10002 SE 256529.0000

Introducción a SQL Pág . - 41


Sumario
♦ extraer datos
select [distinct] nombre_columna
from nombre_tabla
[where condiciones_búsqueda]

♦ distinct - elimina renglones duplicados en la salida

♦ where - determina exactamente cuales renglones serán extraídos

Introducción a SQL Pág . - 42


Sumario
♦ Operadores de Comparación - (=) igual a; (>) mayor que; (<) menor
que; (>=) mayor que o igual; (<=) menor que o igual; (!=) o (<>)
diferente a; (!>) no mayor que; (!<) no menor que

♦ between - rango inclusivo: los valores limites son incluidos en la


búsqueda
select [distinct] nombre_columna
from nombre_tabla
[where condiciones_búsqueda]

♦ not - niega una expresión

Introducción a SQL Pág . - 43


Sumario
♦ like - utilizada para extraer datos de tipo char, varchar, y datatime
% cualquier cadena de cero o muchos caracteres

_ cualquier caracter

[] cualquier caracter del conjunto

[^] cualquier caracter que no este dentro del rango


especificado
♦ and/or - conectores de condiciones

♦ in - selecciona valores que coincidan con algún valor de la lista de


valores

Introducción a SQL Pág . - 44


CAPITULO III

VISTAS Y
PROCEDIMIENTOS
ALMACENADOS.

Introducción a SQL Pág . - 45


Vistas y Procedimientos Almacenados - Objetivos

Al concluir esta sección estará capacitado para:

♦ Identificar las ventajas que ofrecen las vistas y los procedimientos


♦ Crear vistas y procedimientos en la base de datos del SURCE
♦ Eliminar las vistas y los procedimientos de una base de datos
♦ Realizar consultas tomando como base las vistas y los procedimientos

Introducción a SQL Pág . - 46


Vistas
♦ Una vista es considerada como una “Tabla Adicional” que puede estar
construida en base a una consulta especificada al momento de
crearla, la cual puede incluir operaciones join, subconsultas o
simplemente la consulta de una tabla con sentencias group by,
having, etc.
♦ La sentencia order by es la única cláusula que no se puede utilizar en
la definición de la vista, esto por el hecho de que los renglones no se
encuentran en un orden particular
♦ Es importante señalar que las vistas se encuentran almacenadas en
la base de datos. De tal manera que al realizar modificaciones a la
base de datos, la consulta que se realice de la vista contendrá datos
actualizados.

Nota: La definición de vistas y procedimientos es recomendable guardarlos en archivos


de texto con extensión SQL

Introducción a SQL Pág . - 47


Crear una vista
♦ Sintaxis
create view nombre de la vista
as sentencias select sin order by
♦ Es recomendable anteponer “v_” al nombre que se le asigne a la
vista, con el fin de identificarlas facilmente en la base de datos
♦ Ejemplo:
• Crear una vista que contenga las descripciones de los programas y
subprogramas para el fondo 1
create view v_progra_subpro_fondo as
select P.progra, P.descri as nom_progra,
S.subpro, S.descri as nom_subprog
from PROGRAMA P, SUBPROG S
where P.eje_fis = S.eje_fis and P.fondo = S.fondo
and P.progra = S.progra and P.fondo = 1

♦ Una vez creada la vista se puede consultar como cualquier tabla

select *
from v_progra_subpro_fondo
order by progra, subpro

Resultado
progra nom_progra subpro nom_subpro
S5 PROTECCION Y PRESERVACION ECOLOGICA 01 Reforestación
SB ESTIMULOS A LA EDUCACION BASICA 01 Apoyo a la Educación Primaria
SC AGUA POTABLE 01 Rehabilitación
SC AGUA POTABLE 02 Ampliación
SC AGUA POTABLE 03 Construcción
SC AGUA POTABLE 04 Conducción de Agua
SC AGUA POTABLE 05 Dotación de Agua
SD ALCANTARILLADO 01 Rehabilitación
SD ALCANTARILLADO 02 Ampliación
SD ALCANTARILLADO 03 Construcción
SE URBANIZACION 01 Construcción de Calles
SE URBANIZACION 02 Empedrado y Adoquinamiento de Calles
SE URBANIZACION 03 Guarniciones y Banquetas
SE URBANIZACION 04 Construcción y Remodelación de Plazas Cívicas y Jardines
SE URBANIZACION 05 Alumbrado Público
SF PAVIMENTACION EN COLONIAS POPULARES 01 Concreto
SF PAVIMENTACION EN COLONIAS POPULARES 02 Asfalto
SG ELECTRIFICACION 01 Urbana
SG ELECTRIFICACION 02 Rural

Introducción a SQL Pág . - 48


Eliminar una vista
♦ Sintaxis
drop view nombre de la vista
♦ Ejemplo
• Incluir en la vista v_progra_subpro_fondo la columna fondo y que
incluya ambos fondos
drop view v_progra_subpro_fondo
create view v_progra_subpro_fondo as
select P.fondo, P.progra, P.descri as nom_progra,
S.subpro, S.descri as nom_subprog
from PROGRAMA P, SUBPROG S
where P.eje_fis = S.eje_fis and P.fondo = S.fondo
and P.progra = S.progra

♦ Consultar la vista para fondo 1

select *
from v_progra_subpro_fondo
where fondo = 1
order by progra, subpro

Resultado
fondo progra nom_progra subpro nom_subpro
1 S5 PROTECCION Y PRESERVACION 01 Reforestación
ECOLOGICA
1 SB ESTIMULOS A LA EDUCACION BASICA 01 Apoyo a la Educación Primaria
1 SC AGUA POTABLE 01 Rehabilitación
1 SC AGUA POTABLE 02 Ampliación
1 SC AGUA POTABLE 03 Construcción
1 SC AGUA POTABLE 04 Conducción de Agua
1 SC AGUA POTABLE 05 Dotación de Agua
1 SD ALCANTARILLADO 01 Rehabilitación
1 SD ALCANTARILLADO 02 Ampliación
1 SD ALCANTARILLADO 03 Construcción
1 SE URBANIZACION 01 Construcción de Calles
1 SE URBANIZACION 02 Empedrado y Adoquinamiento de Calles
1 SE URBANIZACION 03 Guarniciones y Banquetas
1 SE URBANIZACION 04 Construcción y Remodelación de Plazas Cívicas y
Jardines
1 SE URBANIZACION 05 Alumbrado Público
1 SF PAVIMENTACION EN COLONIAS 01 Concreto
POPULARES
1 SF PAVIMENTACION EN COLONIAS 02 Asfalto
POPULARES
1 SG ELECTRIFICACION 01 Urbana
1 SG ELECTRIFICACION 02 Rural

Introducción a SQL Pág . - 49


Procedimientos Almacenados
♦ Un procedimiento es un conjunto de sentencias de SQL y que se
guarda en la base de datos
♦ Con los procedimientos se amplia la velocidad de ejecución de las
consultas sin reducir la eficiencia en la respuesta del servidor de base
de datos. Esto porque el procedimiento es compilado en memoria
virtual del cliente
♦ En los procedimientos se pueden crear tablas temporales que
solamente existirán durante la ejecución del mismo
♦ Los valores resultantes de la ejecución del procedimiento serán
obtenidos de la última consulta especificada, siempre y cuando no se
envien a una tabla temporal
♦ Se define una tabla temporal al anteponer el símbolo “#” a su nombre

Introducción a SQL Pág . - 50


Crear un Procedimiento
♦ Sintaxis
create procedure nombre del procedimiento (parametros)
result (columna o valor resultante tipo de dato)
begin
sentencias select
end
♦ Es recomendable anteponer “sp_” al nombre que se le asigne al
procedimiento, con el fin de identificarlos facilmente en la base de
datos

Introducción a SQL Pág . - 51


Crear un Procedimiento (continuación)
♦ Ejemplo:
• Crear un procedimiento que presente los proyectos y las instancias
que los proponen, norman y ejecutan para la modalidad de
inversión ‘SP’ y submodalidad ‘00’ para el fondo 2

create procedure sp_proy ()


result (proyec varchar(12),
dep_pro varchar (8), nom_dep_pro varchar(90),
dep_nor varchar (8), nom_dep_nor varchar(90),
dep_eje varchar (8), nom_dep_eje varchar(90))
begin
select proyec, dep_nor, dep_pro, dep_eje
into #PROY
from proyecto
where mod_inv = 'SP'and sub_inv = '00'and fondo = 2;

select #PROY.proyec, #PROY.dep_pro, DEPEND.descri as nom_dep_pro


into #PROY_PRO
from DEPEND, #PROY
where DEPEND.depend = #PROY.dep_pro;

select #PROY.proyec, #PROY.dep_nor, DEPEND.descri as nom_dep_nor


into #PROY_NOR
from DEPEND, #PROY
where DEPEND.depend = #PROY.dep_nor;

select #PROY.proyec, #PROY.dep_eje, DEPEND.descri as nom_dep_eje


into #PROY_EJE
from DEPEND, #PROY
where DEPEND.depend = #PROY.dep_eje;

select #PROY.proyec, #PROY.dep_pro,


#PROY_PRO.nom_dep_pro, #PROY.dep_nor, #PROY_NOR.nom_dep_nor,
#PROY.dep_eje, #PROY_EJE.nom_dep_eje
from #PROY, #PROY_PRO, #PROY_NOR, #PROY_EJE
where #PROY.proyec = #PROY_PRO.proyec
and #PROY.proyec = #PROY_NOR.proyec
and #PROY.proyec = #PROY_EJE.proyec
end;

Introducción a SQL Pág . - 52


Eliminar y Ejecutar un Procedimiento
♦ Sintaxis para eliminar
drop procedure nombre del procedimiento

♦ Sintaxis para ejecutar


nombre del procedimiento parámetro 1, parámetro 2, parámetro n

♦ Ejecutar el procedimiento sp_proy

Resultado

proyec dep_pro nom_dep_pro dep_nor nom_dep_nor dep_eje nom_dep_eje


97/001067 00000020 SECRETARIA DE 00000020 SECRETARIA DE 02000503 XV AYUNTAMIENTO DE
DESARROLLO DESARROLLO ENSENADA
SOCIAL SOCIAL
97/000610 02000112 GOBIERNO DEL 02000216 I. C. B. C. 02000101 S.A.H.O.P.E.
ESTADO
97/001069 02000112 GOBIERNO DEL 00000020 SECRETARIA DE 02000106 SRIA. DE LA
ESTADO DESARROLLO CONTRALORIA
SOCIAL
97/000428 02000112 GOBIERNO DEL 02000109 S. E. B. S. 02000101 S.A.H.O.P.E.
ESTADO
97/000905 00000020 SECRETARIA DE 00000020 SECRETARIA DE 00000020 SECRETARIA DE
DESARROLLO DESARROLLO DESARROLLO SOCIAL
SOCIAL SOCIAL
97PRUEBA 02000503 XV 00000018 SECRETARIA DE 02000503 XV AYUNTAMIENTO DE
2040 AYUNTAMIENTO ENERGIA, MINAS ENSENADA
DE ENSENADA E INDUSTRIA
PARAESTATAL
C-00053 00000011 SECRETARIA DE 02000214 C O P LAD E 00000020 SECRETARIA DE
EDUCACION DESARROLLO SOCIAL
PUBLICA
C-00053A 00000011 SECRETARIA DE 02000214 C O P LAD E 00000020 SECRETARIA DE
EDUCACION DESARROLLO SOCIAL
PUBLICA

Introducción a SQL Pág . - 53


Procedimientos con Parámetros
♦ Ejemplo
Eliminar el procedimiento sp_proy e incluir al mismo los parámetros
para modalidad de inversión, submodalidad de inversión y fondo

drop procedure sp_proy


create procedure sp_proy (lti_fondo tinyint, ls_mod_inv varchar(3), ls_sub_inv varchar(3))
result (proyec varchar(12),
dep_pro varchar (8), nom_dep_pro varchar(90),
dep_nor varchar (8), nom_dep_nor varchar(90),
dep_eje varchar (8), nom_dep_eje varchar(90))
begin
select proyec, dep_nor, dep_pro, dep_eje
into #PROY
from proyecto
where mod_inv = @ls_sub_inv
and sub_inv = @ls_sub_inv
and fondo = @lti_fondo;

Ejecutar el procedimiento
sp_proy 2, ‘SP’, ‘00’

Resultado
proyec dep_pro nom_dep_pro dep_nor nom_dep_nor dep_eje nom_dep_eje
97/001067 00000020 SECRETARIA DE 00000020 SECRETARIA DE 02000503 XV AYUNTAMIENTO DE
DESARROLLO DESARROLLO ENSENADA
SOCIAL SOCIAL
97/000610 02000112 GOBIERNO DEL 02000216 I. C. B. C. 02000101 S.A.H.O.P.E.
ESTADO
97/001069 02000112 GOBIERNO DEL 00000020 SECRETARIA DE 02000106 SRIA. DE LA
ESTADO DESARROLLO CONTRALORIA
SOCIAL
97/000428 02000112 GOBIERNO DEL 02000109 S. E. B. S. 02000101 S.A.H.O.P.E.
ESTADO
97/000905 00000020 SECRETARIA DE 00000020 SECRETARIA DE 00000020 SECRETARIA DE
DESARROLLO DESARROLLO DESARROLLO SOCIAL
SOCIAL SOCIAL
97PRUEBA 02000503 XV 00000018 SECRETARIA DE 02000503 XV AYUNTAMIENTO DE
2040 AYUNTAMIENTO ENERGIA, MINAS ENSENADA
DE ENSENADA E INDUSTRIA
PARAESTATAL
C-00053 00000011 SECRETARIA DE 02000214 C O P LAD E 00000020 SECRETARIA DE
EDUCACION DESARROLLO SOCIAL
PUBLICA

Introducción a SQL Pág . - 54


Sumario
♦ Una vista es una “tabla adicional” que puede estar conformada en
base a un conjunto de sentencias de SQL, exceptuando el order by
♦ Un procedimiento es un conjunto de sentencias de SQL que permite
una mayor velocidad en la ejecución de una consulta
♦ Los procedimientos y las vistas son almacenados en la base de datos
♦ Para crear una vista o un procedimiento se recomienda editarlo en un
archivo de texto y posteriormente ejecutarlo con una instrucción read

Introducción a SQL Pág . - 55


Extraer Datos II - Objetivos

Al concluir esta sección estará capacitado para:

♦ Renombrar encabezados de columnas de los datos extraídos


♦ Utilizar funciones numéricas en la extracción de datos
♦ Definir el significado de un valor NULL
♦ Ordenar la salida de datos

Objetivos: En esta sección aprenderá a ordenar el resultado de una consulta.


Además aprenderá a trabajar con valores nulos (null) y a obtener datos
derivados del uso de operaciones aritméticas.

Introducción a SQL Pág . - 56


Renombrar Columnas
Existen dos formas de renombrar un encabezado de columna
1. Utilice nombre_columna_nueva = nombre_columna (ANSI-89
standard)

• Ejemplo
select ent_fed, Clave_Proyecto = proyec
from PROYECTO
where progra = ‘TH’

Sintaxis select nombre_columna_nueva =


nombre_columna_original [, ...]

select “nombre_columna_nueva” =
nombre_columna_original [, ...]

Nota Para poner el encabezado de una columna con un espacio utilice


comillas (“ ”). SQL reserva algunos caracteres para su operación
(-, *, /, %, etc.), por lo tanto evite utilizar estos en el nombre del
encabezado.

select “Clave del Proyecto” = proyec


from PROYECTO
where progra = ‘TH’

Resultado
Clave del Proyecto
97/C02016
97/C13013
97/C02021

Introducción a SQL Pág . - 57


Renombrar Columnas (continuación)
2. Utilice un espacio en blanco para separar nombre_columna y
nombre_nueva_columna
• Ejemplo
select ent_fed, proyec Clave_Proyecto
from PROYECTO
where progra = ‘TH’

♦ Cuidado: Al omitir una coma en la lista select, la columna será


tomada como encabezado y no como columna.

¿Qué salida produce la siguiente instrucción?


select ent_fed, proyec munici
from PROYECTO
where progra = ‘TH’

Resultado usando coma


ent_fed proyec munici
18 97/C02016 2
18 97/C13013 13
18 97/C02021 2

Resultado no usando coma


ent_fed munici
18 97/C02016
18 97/C13013
18 97/C02021

Introducción a SQL Pág . - 58


Cadena de Caracteres en el Resultado de la Consulta
♦ Es posible adicionar una cadena de caracteres a la cláusula select
• Ejemplo (cadena de caracteres)
select ‘El proyecto es:’, proyec
from PROYECTO
where proyec = '97/C02016'

Resultado
El proyecto es: proyec
El proyecto es: 97/C02016

Introducción a SQL Pág . - 59


Expresiones Numéricas - Operadores Aritméticos
Símbolo Operación
+ adición
- substracción
* multiplicación
/ división
% módulo

♦ Las operaciones pueden usarse en cualquier columna numérica


♦ Utilizado en cualquier cláusula que permita una expresión
♦ Ejemplo (multiplicación)
select proyec, cantid *pre_uni
from DET_CAR

Resultado
proyec cantid * costo
97/C07002 252535640.476900
97/S00001 569824.000000

♦ Ejemplo (división)
select proyec, costo_tot/12
from PROYECTO
where proyec = ‘97/C02016’

Resultado
proyec costo_tot / 12
97/C02016 22638.0833333

Introducción a SQL Pág . - 60


Valores NULL
♦ Un valor NULL es un valor desconocido

• Un null no implica un cero o un espacio en blanco; es un valor


especial que significa “información no disponible”
• Is null debe ser utilizado para determinar valores null contenidos
en una columna; la sintaxis “= null” es válida pero no
recomendada.
♦ Un valor null nunca es igual a otro valor null

♦ Los valores null se consideran en el ordenamiento y en los grupos

♦ Algunas columnas son definidas para permitir valores NULL

♦ Si un elemento es null en una operación el resultado será null

Introducción a SQL Pág . - 61


select / order by
♦ La cláusula order by ordena el resultado de la consulta (por default
en forma ascendente)
♦ Las columnas declaradas en el order by no es necesario que se
encuentren en la lista_select
♦ Cuando se utiliza el order by, los valores NULL son listados al
principio
♦ Ejemplo
select proyec, munici
from PROYECTO
order by proyec
♦ Ejemplo (usando más de una columna)
select proyec, munici
from PROYECTO
order by munici, proyec

Sintaxis select [ distinct ] lista_select


from tabla
[ where condiciones ]
[ order by { columna / expresión } [ asc |
desc ] [, ... ] ]

Resultado: Resultado:
order by proyec order by munici, proyec
proyec munici proyec munici
96/C20007 20 97/C02001 2
97/06016 6 97/C02002 2
97/08006 8 97/C02003 2
97/C02001 2 97/C02004 2
97/C02002 2 97/C02005 2
97/C02003 2 97/C02006 2
97/C02004 2 97/C02007 2
97/C02005 2 97/C02008 2
97/C02006 2 97/C02009 2
97/C02007 2 97/C02010 2
97/C02008 2 97/C02011 2
97/C02009 2 97/C02012 2
97/C02010 2 97/C02013 2
97/C02011 2 97/C02014 2
97/C02012 2 97/C02015 2
97/C02013 2 97/C02016 2
. . . .
. . . .

Introducción a SQL Pág . - 62


select/order by (continuación)
♦ Ejemplo (ordenar por una columna derivada)
Liste el costo total de los productos
select costo_tot / 12, proyec
from PROYECTO
order by costo_tot / 12

♦ Ejemplo (columna que no se declara en la lista_select)


select proyec, munici
from PROYECTO
order by progra

Resultado
order by costo_tot / 12
costo_tot / 12 proyec
532.4166667 97/C17029
589.8333333 97/C19006
665.5000000 97/C03011
692.5000000 97/C08005
881.1666667 97/C02010
884.9166667 97/C03009
929.4166667 97/C14003
956.5000000 97/C03016
964.8333333 97/C02008
988.6666667 97/C13009
1055.1666667 97/C06015
. .
. .

Resultado
order by progra (la columna no esta en lista_select)
proyec munici
97/C05003 5
97/C17039 17
97/C17040 17
97/C17041 17
97/C17042 17
97/C02010 2
97/C02006 2
97/C02013 2
. .
. .

Introducción a SQL Pág . - 63


Sumario
♦ Renombrar columnas - select título_columna = nombre_columna
[, ... ] select nombre_columna título_columna
♦ Operadores aritméticos - (+) adición; (-) substracción; (*)
multiplicación; (/) división; (%) módulo
♦ Valor null - Es un valor desconocido, las operaciones con null
resultan null
♦ Is null - Usado para determinar un valor null en una columna
♦ Cláusula order by - Ordena el resultado de una columna
(ascendente, por defecto)

Introducción a SQL Pág . - 64


Organizar y Resumir Datos - Objetivos
Al concluir esta sección estará capacitado para:

♦ Utilizar las funciones agregadas


♦ Organizar datos en grupos (group by)
♦ Establecer condiciones para agrupar los datos (having)

Objetivos En esta sección aprenderá a incorporar funciones


agregadas, obtener datos agrupados y la conjunción de
ambos en las consultas.

Introducción a SQL Pág . - 65


Funciones Agregadas
Función Obtiene
count(*) Número de renglones en una tabla
count(nombre_columna) Número de renglones en la columna
que no contengan valor null
max(nombre_columna) Valor máximo en la columna
min(nombre_columna) Valor mínimo en la columna
sum(nombre_columna) Valor total de la columna
avg(nombre_columna) Valor promedio de la columna

♦ Las funciones agregadas ignoran los valores null (excepto count(*))


♦ sum y avg operan con valores numéricos
♦ Sólo un renglón es resultado (si no se utiliza la cláusula group by)
♦ Las funciones agregadas no se usan en la cláusula where

Sintaxis select nombre_función_agregada ( [ distinct ] expresión )


from nombre_tabla
[ where . . . condiciones ]

Introducción a SQL Pág . - 66


Función Agregada - count
♦ count obtiene el número de renglones que cumplen la condición
• Ejemplo (número de renglones localizados)
select count (*)
from CON_EJE

Resultado count(*)
6

• Ejemplo (número de renglones en la columna que no tienen valor


null)
select count (con_pej)
from CON_EJE

Resultado count (con_pej)


0

Introducción a SQL Pág . - 67


Funciones Agregadas - max/min
♦ max encuentra el valor mayor en la columna
• Ejemplo
select max(costo_tot)
from PROYECTO

Resultado max(costo_tot)
976800.0000

♦ min encuentra el valor menor en la columna


• Ejemplo
select min(costo_tot)
from PROYECTO

Resultado min(costo_tot)
100.0000

Utilice la siguiente lista como referencia para los resultados anteriores


proyec costo_tot
97/1800897 100.0000
97/001 5000.0000
4 5000.0000
97/C17029 6389.0000
97/C19006 7078.0000
97/C03011 7986.0000
97/C08005 8310.0000
97/C02010 10574.0000
97/C03009 10619.0000
97/C14003 11153.0000
97/C03016 11478.0000
97/C02008 11578.0000
97/C13009 11864.0000
97/C06015 12662.0000
97/C14007 12830.0000
97/C18001 13372.0000
. .
. .
. .
97/C03005 326410.0000
97/C17037 432235.0000
97/C16005 443717.0000
97/C18005 444207.0000
97/C17036 444333.0000
97/C05012 552029.0000
97/C17038 632251.0000
97/C18008 693956.0000
97/S00001 976800.0000

Introducción a SQL Pág . - 68


Funciones Agregadas - sum/avg
♦ sum obtiene la suma de los renglones de una columna
• Ejemplo
select sum(can_act)
from EST_FIN
where proyec = ‘97/C07002’ and fase_pre = 3
Resultado sum(can_act)
100985.0000
♦ avg obtiene la suma de los renglones de una columna y lo divide
entre el número de estos
• Ejemplo
select avg (can_act )
from EST_FIN
where proyec = ‘97/C07002’ and fase_pre = 3
Resultado avg(can_act)
33661.66666667

Utilize la siguiente lista como referencia para los resultados anteriores

proyec can_act
97/C07002 68670.0000
97/C07002 12118.0000
97/C07002 20197.0000

Introducción a SQL Pág . - 69


Funciones Agregadas
♦ En la cláusula SELECT se puede utilizar más de una función
agregada
• Ejemplo
select min(costo_tot), max(costo_tot)
from PROYECTO

Resultado min(costo_tot) max(costo_tot)


100.0000 976800.0000

Introducción a SQL Pág . - 70


Funciones Agregadas - distinct
♦ distinct elimina los valores duplicados antes de ejecutar una función
agregada
• Se puede utilizar con sum, avg y count (opcional)
• No puede ser usado con min, max y count(*)
• También se puede utilizar con count(nombre_columna)
• Se utiliza sólo con nombre_columna y no con expresiones
aritméticas

Introducción a SQL Pág . - 71


select/group by
♦ group by organiza los datos dentro de grupos, formados en base al
contenido de una o varias columnas
• Frecuentemente es usado con funciones agregadas en la
lista_select
• La función agregada se aplica en cada grupo
• Los valores null en la columna agrupada son tratados como un
grupo
♦ Ejemplo
Agrupe los proyectos por programa y calcula el costo promedio para
cada uno.
select progra, costo_promedio = avg(costo_tot)
from PROYECTO
group by progra

Sintaxis select [ distinct ] lista_select


[ from tabla [, ... ] ]
[ where condiciones ]
[group by expresión_sin_función_agregada [, ... ] ]

Resultado

progra costo_promedio
SC 66207.62500000
SE 87279.39560440
SJ 81132.82758621
SK 44475.42857143
SG 136395.71428571
SD 290927.43750000
UB 113651.93103448
SF 195730.50000000
. .
. .
. .

Introducción a SQL Pág . - 72


select/group by (continuación)
♦ Los grupos se pueden formar por medio de una columna o utilizando
una expresión que no contenga una función agregada
• Ejemplo
select sum(can_act), proyec, count(proyec)
from EST_FIN
where fase_pre = 3
group by PROYEC

♦ Los grupos no se pueden formar por medio del título de la columna


♦ Normalmente el group by contiene las columnas y expresiones en la
lista_select
• El violar esta regla puede dar un resultado inesperado, pero si la
lista_select contiene una función agregada el resultado es correcto

Resultado

sum(can_act) proyec count(proyec


27763.0000 97/C13005 3
39954.0000 97/C13006 3
14048.0000 97/C13007 3
261573.0000 97/C13008 3
243327.0000 97/C13004 3
53210.0000 97/C13001 3
16669.0000 97/C13002 3
130662.0000 97/C05002 3
65929.0000 97/C05003 3
72990.0000 97/C05004 3
184760.0000 97/C05001 3
100985.0000 97/C07002 3
27105.0000 97/C07001 3
77889.0000 97/C13003 3
111075.0000 97/C03006 3
83002.0000 97/C16002 3
. . .
. . .
. . .
169135.0000 97/C16007 3
15312.0000 97/C10005 3
183002.0000 97/C10006 3

Introducción a SQL Pág . - 73


group by con una cláusula where
♦ La cláusula where filtra los renglones antes de agruparlos
• Aplica una condición a la tabla antes de formar los grupos
• No acepta funciones agregadas

• Ejemplo
Lista las costos totales que ha ejercido cada dependencia
ejecutora en el programa de urbanizacion

select dep_eje, sum(costo_tot)


from PROYECTO
where progra = ‘SE’
group by dep_eje

Resultado

dep_eje sum(costo_tot)
18018002 606305.0000
18018003 692703.0000
18018005 448609.0000
18018006 445752.0000
18018008 580049.0000
18018010 359305.0000
18018013 125663.0000
18018014 273952.0000
18018015 443685.0000
18018017 3370364.0000
18018018 29937.0000
18018019 277525.0000
18018020 288576.0000

Introducción a SQL Pág . - 74


group by con la cláusula having
♦ La cláusula having restringe los grupos
• Aplica una condición a los grupos después de formarse

• Ejemplo
Obtenga el costo promedio de los programas, además agrúpelos
por programa y subprograma y solamente muestre aquellos que
presenten un precio promedio mayor a 60.000

select progra, subpro, avg(costo_tot)


from PROYECTO
group by progra, subpro
having avg(costo_tot) > 60.000

♦ having es normalmente usada con una función agregada

Resultado

progra sub_pro avg(costo_tot)


SC 01 34383.88888889
SE 03 122067.06250000
SE 02 88240.84482759
SJ 02 78109.40740741
SK 02 36541.80000000
SG 01 126520.18181818
SG 02 172606.00000000
SD 02 249340.75000000
SE 01 53974.20000000
UB 02 94352.75000000
SC 03 203166.50000000
SD 01 377503.42857143
SF 02 195730.50000000
UB 03 148763.26666667
SL 02 60213.00000000
SC 02 50762.44444444
SE 04 41325.00000000
TH 02 271657.00000000
UB 01 51605.83333333

Introducción a SQL Pág . - 75


Sumario
♦ Funciones Agregadas
• count - obtiene el número de registros que cumplen la condición
• max - encuentra el valor máximo de la columna
• min - encuentra el valor mínimo de la columna
• sum - suma los renglones de la columna especificada
• avg - obtiene el valor promedio de una columna

♦ isnull - substituye un valor null por uno real


♦ group by - organiza los renglones en grupos
♦ having - restringe los grupos

Sintaxis del select [ distinct ] lista_select


elemento select [ from tabla [, ... ] ]
[ where condiciones ]
[ group by [all] expresión_sin_función_agregada [, ... ] ]
[ having condiciones ]
[ order by { nombre_columna
| número_lista_select
| expresión } [ asc | desc ] [, ... ] ]

Introducción a SQL Pág . - 76


Joins - Objetivos
Al concluir esta sección estará capacitado para:

♦ Realizar un join basado en la igualdad


♦ Utilizar un join incluyendo condiciones
♦ Establecer un join como operación de unión para varias tablas

Objetivos Join es la operación que permite el modelo relacional. En


esta sección aprenderá los conceptos de relacionar
columnas de una a otra tabla. Así como también a
establecer relaciones de varias tablas.

Introducción a SQL Pág . - 77


Joins

MUNICI
munici ent_fed nom_ofi nom_com tipo_num ...
0 0 Municipio para Municipio para AE ...
Areas Centrales Areas Centrales
1 18 Municipio para Delegación AE ...
Delegación
2 18 Municipio para Coplade AE ...
Coplade
3 18 ACAPONETA ACAPONETA B1 .

. . . . . .

. . . . . .

. . . . . .

PROYECTO
munici ent_fed proyec eje_fis fondo progra ...
1 18 97/C05003 1997 1 SC ...
1 18 97/C05004 1997 1 SE ...
2 18 97/C05001 1997 1 SE ...
2 18 97/C07002 1997 1 SJ ...
2 18 97/C07001 1997 1 SK ...
. . . . . . .
. . . . . . .
. . . . . . .

Introducción a SQL Pág . - 78


Consultar dos tablas

MUNICI PROYECTO
ent_fed munici ent_fed proyec munici eje_fis
18 9999 18 97/C05004 5 1997
18 9998 18 97/C05001 5 1997
18 1 18 97/C07002 7 1997
. .

TABLA RESULTANTE
ent_fed munici proyec munici eje_fis
18 9999 97/C05004 5 1997
18 9998 97/C05001 5 1997
18 1 97/C07002 7 1997
. .

Consultar dos tablas La operación join permite extraer datos de dos o más tablas
• Join es la parte central del modelo relacional
• Combina tablas en base a valores iguales de los
renglones de cada tabla

Introducción a SQL Pág . - 79


Pasos para establecer el join
1. Decida las columnas que necesita consultar

2. Utilice el diagrama Entidad-Relación para observar las relaciones de


las tablas que requiera

3. En el diagrama Entidad-Relación siga las líneas de relación para


identificar las columnas que conectan las tablas

Introducción a SQL Pág . - 80


Operación Join

PROYECT OFI_PRO OFICIO


ent_fedO N ent_fed 1 num_ofi
proyec proyec ent_emi
munici num_ofi N ent_rec
eje_fis 1 ent_emi lis_mun
fondo munici eje_fis
progra lug_reg fondo
subpro tipo_ofi
con_pro fec_emi
cat_pes fec_reg
nombre emisor
tipo_cob recept
fase_pro ofi_rel
costo_tot tipo_aso
mod_inv lug_reg
sub_inv
mod_reg
mod_eje
lineam
dep_pro
dep_nor
dep_eje
ele_bm
lug_reg

♦ Las líneas de relación ayudan a encontrar el join que conecta las


tablas

Introducción a SQL Pág . - 81


Operación join (continuación)
♦ Join es una operación multi-tabla.
♦ Sintaxis
select [ tabla. ] nombre_columna, [... ]
from { tabla } { , tabla } [, ... ]
[ where condiciones ]

♦ where: es la cláusula central que se utiliza para relacionar las tablas


en el join
♦ Los valores null nunca se usan en el join (porque un valor null no es
igual a otro valor null)
♦ Las columnas que establecen el join no necesariamente deben estar
en la cláusula select.
♦ Las columnas con el mismo nombre en varias tablas deben ser
precedidas por el nombre de la tabla

where Los operandos empleados en la cláusula where no


necesariamente tienen que ser datos del mismo tipo, pero deben
ser del tipo que SQL Anywhere implícitamente convierte.

Introducción a SQL Pág . - 82


Consultar tablas usando el Join
♦ Ejemplo
select OFICIO.num_ofi, OFICIO.fondo, OFICIO.tipo_ofi,
EST_OFI.tipo_inv, EST_OFI.cantid
from OFICIO, EST_OFI
where OFICIO.num_ofi = EST_OFI.num_ofi

Resultado
num_ofi fondo tipo_ofi tipo_inv cantid

COP-DPP-F1-5-0042 1 7 1 200762.0000
COP-DPP-F1-5-0042 1 7 2 35429.0000
COP-DPP-F1-5-0042 1 7 5 59048.0000
COP-DPP-F1-5-0004 1 7 1 56442.0000
COP-DPP-F1-5-0004 1 7 2 9960.0000
COP-DPP-F1-5-0004 1 7 5 16600.0000
COP-DPP-F1-5-0004 1 7 1 115065.0000
COP-DPP-F1-5-0004 1 7 2 20305.0000
COP-DPP-F1-5-0004 1 7 5 33843.0000
... ... ... ... ...
... ... ... ... ...
COP-DPP-F1-5-0033 1 7 1 286433.0000
COP-DPP-F1-5-0074 1 7 5 101117.0000
COP-DPP-F1-5-0086 1 7 1 10412.0000
COP-DPP-F1-5-0086 1 7 2 1838.0000
COP-DPP-F1-5-0086 1 7 5 3062.0000
COP-DPP-F1-5-0086 1 7 1 124442.0000
COP-DPP-F1-5-0086 1 7 2 21960.0000
COP-DPP-F1-5-0086 1 7 5 36600.0000
COP-DDP-F2-5-1000 1 7 1 150000.0000
COP-DDP-F2-5-1000 1 7 1 200000.0000
COP-DDP-F2-5-1000 1 7 2 100000.0000

OFICIO EST_OFI

Introducción a SQL Pág . - 83


Joins basados en la igualdad
♦ Un renglón en una tabla hace referencia a un renglón en otra tabla,
porque el contenido de las columnas de cada tabla son iguales

♦ Ejemplo
Liste las CLC’s y su beneficiario

select CLC.clc, CLC_FED.benefi


from CLC, CLC_FED
where CLC.clc = CLC_FED.clc

Resultado
clc benefi

1800012 C. JOSE FELIX TORRES


HARO,\X0D\X0APRESIDENTE MUNICIPAL
1800164 C. SALVADOR AGUIAR FREGOSO
1800159 C. SALVADOR AGUIAR FREGOSO
1800160 C. SALVADOR AGUIAR FREGOSO
1800161 C. SALVADOR AGUIAR FREGOSO
... ...
... ...
1800378 C. FELIPE HARO FREGOSO
1800379 C. FELIPE HARO FREGOSO
1800380 C. FELIPE HARO FREGOSO
1800381 C. FELIPE HARO FREGOSO
1800397 C.P. JUAN RAMON CERVANTES GOMEZ

Introducción a SQL Pág . - 84


Joins basados en la igualdad (continuación)
♦ Ejemplo
Liste los proyectos refrendados, la inversion ejercida, avance físico y
financiero de estos, así como el numero de beneficiarios directos.

select PRO_ESP.proyec, PRO_ESP.ben_ind, REFRENDO.ava_fin,


REFRENDO.ava_fis
from PRO_ESP, REFRENDO
where PRO_ESP.proyec = REFRENDO.proyec

Resultado

proyec ben_ind ava_fin ava_fis

96/C09046 60 20.00 20.00

Introducción a SQL Pág . - 85


Producto Cartesiano
♦ Si no se especifican en el where las columnas utilizadas para
relacionar las tablas, el sistema asume que se desea obtener la
combinación de los renglones de cada tabla
• Esto se conoce como producto cartesiano

♦ Ejemplo
Combine la tabla Fondo con la tabla Proyecto

select FONDO.nombre, PROYECTO.proyec


from PROYECTO, FONDO

Resultado
nombre proyec
Fondo para el Desarrollo Regional y el Empleo 97/C05003
Fondo para el Desarrollo Regional y el Empleo 97/C05004
Fondo para el Desarrollo Regional y el Empleo 97/C05001
Fondo para el Desarrollo Regional y el Empleo 97/C07002
Fondo para el Desarrollo Regional y el Empleo 97/C07001
Fondo para el Desarrollo Regional y el Empleo 97/C14027
Fondo para el Desarrollo Regional y el Empleo 97/C02044
Fondo para el Desarrollo Regional y el Empleo 97/C14028
Fondo para el Desarrollo Regional y el Empleo 97/C02045
Fondo para el Desarrollo Regional y el Empleo 97/C14029
... ...
... ...
Fondo de Desarrollo Social Municipal 97/C05003
Fondo de Desarrollo Social Municipal 97/C05004
Fondo de Desarrollo Social Municipal 97/C05001
Fondo de Desarrollo Social Municipal 97/C07002
Fondo de Desarrollo Social Municipal 97/C14027
Fondo de Desarrollo Social Municipal 97/C02044
Fondo de Desarrollo Social Municipal 97/C14028
Fondo de Desarrollo Social Municipal 97/C02045
Fondo de Desarrollo Social Municipal 97/C14029

Explicación: La tabla proyecto contiene 972 renglones y 2 la tabla fondo, por lo tanto el
resultado es: 972 * 2 = 1944 renglones.

Introducción a SQL Pág . - 86


Joins con order by
♦ Ejemplo (cláusula adicional: order by)

Listar los oficios, su emisor, receptor y estructura financiera, así como


la cantidad que aporta cada elemento que participe en la definición de
ésta (tipo de inversión) y ordene por el número de oficio

select OFICIO.num_ofi, OFICIO.emisor, OFICIO.recept,


EST_OFI.tipo_inv, EST_OFI.cantid
from OFICIO, EST_OFI
where OFICIO.num_ofi = EST_OFI.num_ofi
order by OFICIO.num_ofi

Resultado
num_ofi emisor recept tipo_inv cantid
001/97 AYTO. DE JALA SEDESOL 1 193253.0000
001/97 AYTO. DE JALA SEDESOL 2 34103.0000
001/97 AYTO. DE JALA SEDESOL 1 184375.0000
001/97 AYTO. DE JALA SEDESOL 2 32537.0000
002/97 AYTO. DE TEPIC SEDESOL 1 63750.0000
002/97 AYTO. DE TEPIC SEDESOL 2 11250.0000
003/97 AYTO. DE SAN BLAS SEDESOL 1 27971.0000
003/97 AYTO. DE SAN BLAS SEDESOL 2 4936.0000
0036/97 AYTO. DE SANTIAGO SEDESOL 1 18329.0000
0036/97 AYTO. DE SANTIAGO SEDESOL 2 3235.0000

OA-CPDM-130-97 AYTO. DE EL NAYAR SEDESOL 1 11420.0000


OA-CPDM-130-97 AYTO. DE EL NAYAR SEDESOL 2 2015.0000
OA-CPDM-130-97 AYTO. DE EL NAYAR SEDESOL 1 2317.0000
OA-CPDM-130-97 AYTO. DE EL NAYAR SEDESOL 2 409.0000
OA-CPDM-130-97 AYTO. DE EL NAYAR SEDESOL 1 156290.0000
OA-CPDM-130-97 AYTO. DE EL NAYAR SEDESOL 2 27580.0000
S/N/97 SEDESOL SEDESOL 1 2731000.0000
S/N/97 SEDESOL SEDESOL 2 409650.0000
S/N004 SEDESOL (JORN.AGR.) SEDESOL 1 243544.0000
S/N004 SEDESOL (JORN.AGR.) SEDESOL 2 42978.0000

Introducción a SQL Pág . - 87


Joins con group by
♦ Ejemplo (cláusula adicional: función agregada y group by)

Liste los oficios, sus emisores y receptores así como la cantidad total
que se ha definido en la estructura de éste, agrupe por número de
oficio, emisor y receptor y ordene por número de oficio.

select EST_OFI.num_ofi, OFICIO.emisor, OFICIO.recept,


sum(EST_OFI.cantid)
from OFICIO, EST_OFI
where OFICIO.num_ofi = EST_OFI.num_ofi
group by EST_OFI.num_ofi, OFICIO.emisor, OFICIO.recept
order by EST_OFI.num_ofi

Resultado
num_ofi emisor recept sum(EST_OFI.cantid)

001/97 AYTO. DE JALA SEDESOL 444268.0000


002/97 AYTO. DE TEPIC SEDESOL 75000.0000
003/97 AYTO. DE SAN BLAS SEDESOL 32907.0000
0036/97 AYTO. DE SANTIAGO SEDESOL 21564.0000
004/97 SEDESOL(JORN.AGR.) SEDESOL 2247432.0000
005-NIÑOS/97 AYTO. DE HUAJICORI GOB. DEL EDO. 563580.0000
005/97 SEDESOL SEDESOL 566609.0000
006/97 AYTO. DE SAN PEDRO SEDESOL 6823.0000
LGS.
0070-DPD/97 AYTO. DE XALISCO SEDESOL 412992.0000
020/97 SEDESOL SEDESOL 2214413.0000
... ... ... ...
... ... ... ...
COP-DPP-FI-5-0069 GOB. DEL ESTADO AYTO. DEL NAYAR 971757.0000
COP-DPP-FI-5-0081 GOB. DEL ESTADO AYTO. DEL NAYAR 965967.0000
COP-DPP-FI-5-0099 GOB. DEL ESTADO AYTO. DEL NAYAR 1028593.0000
COP-DPP-FI-5-0102 GOB. DEL ESTADO AYTO. DEL NAYAR 30795.0000
COP-DPP-FI-5-0115 GOB. DEL ESTADO AYTO. DEL NAYAR 82369.0000
COP-DPP-FI-5-0128 GOB. DEL ESTADO AYTO. DE RUIZ 12384.0000
COP-DPP-FI-5-0148 GOB. DEL ESTADO AYTO. DE SAMAO 24942.0000
OA-CPDM-130-97 AYTO. DE EL NAYAR SEDESOL 200031.0000
S/N/97 SEDESOL SEDESOL 3140650.0000
S/N004 SEDESOL (JORN.AGR.) SEDESOL 286522.0000

Introducción a SQL Pág . - 88


Alias
♦ Para no teclear repetidamente el nombre de la tabla, se utiliza el alias
dentro de la consulta
♦ El alias puede usarse en cualquier parte de la consulta
♦ Ejemplo
Listar los oficios, emisores, receptores y el tipo de oficio

select T.descri, O.num_ofi, O.emisor, O.recept


from TIPO_OFI T, OFICIO O
where T.tipo_ofi = O.tipo_ofi
order by T.tipo_ofi

Sintaxis select lista_select


from tabla1 alias_para_tabla1, tabla2
alias_para_tabla2
where alias_para_tabla1.nombre_columna =
alias_para_tabla2.nombre_columna

Resultado

descri num_ofi emisor recept


Propuesta 020/97 SEDESOL SEDESOL
Propuesta S/N/97 SEDESOL SEDESOL
Propuesta 004/97 SEDESOL(JORN.AGR.) SEDESOL
Propuesta S/N004 SEDESOL (JORN.AGR.) SEDESOL
Propuesta 005/97 SEDESOL SEDESOL
Propuesta 086-01/97 SEDESOL (EMPLEO) AYTO. STA. MA. ORO
Propuesta 0070-DPD/97 AYTO. DE XALISCO SEDESOL
Propuesta COP-142/97 AYTO. DE BAHIA DE SEDESOL
BANDERAS
... ... ... ...
... ... ... ...
Aprobación 25-541711-F2-0032 SEDESOL AYTO. DE XALISCO
Aprobación 25-541711-F2-0033 SEDESOL AYTO.DE JALA
Aprobación COP-DPP-FI-0160/97 GOB. DEL ESTADO AYTO. DE SAMAO
Aprobación COP-DPP-F1-5-0188 GOB. DEL ESTADO AYTO. DE AHUACATLAN

Introducción a SQL Pág . - 89


Joins con condiciones adicionales
(en la cláusula where)
♦ Ejemplo (condición adicional)
Liste los oficios, emisor y receptor, en los que las invesiones de la
estructura financiera sean menor o igual a 10,000.00

select O.num_ofi, O.emisor, O.recept, E.tipo_inv, E.cantid


from Oficio O, EST_OFI E
where O.num_ofi = E.num_ofi and E.cantid <= 10000.00

Resultado

num_ofi emisor recept tipo_inv cantid


COP-DPP-F1-5-0030 GOB. DEL ESTADO AYTO. DE IXTLAN DEL RIO 2 5240.0000
COP-DPP-F1-5-0026 GOB. DEL ESTADO AYTO. STA. MA. DEL ORO 1 7584.0000
COP-DPP-F1-5-0026 GOB. DEL ESTADO AYTO. STA. MA. DEL ORO 2 1338.0000
COP-DPP-F1-5-0026 GOB. DEL ESTADO AYTO. STA. MA. DEL ORO 5 2231.0000
COP-DPP-F1-5-0026 GOB. DEL ESTADO AYTO. STA. MA. DEL ORO 2 7035.0000
COP-DPP-F1-5-0036 GOB. DEL ESTADO AYTO. AMATLAN DE CAÑAS 2 8658.0000
COP-DPP-F1-5-0015 GOB. DEL ESTADO AYTO. AMATLAN DE CAÑAS 2 3012.0000
... ... ... ... ...
... ... ... ... ...
25-541711-F2-0030 SEDESOL AYTO. DE ACAPONETA 2 1470.0000
25-541711-F2-0030 SEDESOL AYTO. DE ACAPONETA 2 3966.0000
25-541711-F2-0031 SEDESOL AYTO. DE EL NAYAR 2 2015.0000
25-541711-F2-0031 SEDESOL AYTO. DE EL NAYAR 1 2317.0000
25-541711-F2-0031 SEDESOL AYTO. DE EL NAYAR 2 409.0000

Introducción a SQL Pág . - 90


Joins con más de dos tablas
♦ En la cláusula from se deben listar todas las tablas que se utilizan en
la consulta (ya sea que se extraigan o no datos de las mismas).
♦ En la cláusula where se deben listar todas las condiciones necesarias
para conectar las tablas.
♦ No es necesario desplegar la columna utilizada para unir más de dos
tablas.
♦ Ejemplo.
Listar la descripción del tipo de oficio, el oficio, emisor, receptor y la
estructura financiera (tipo de invesión y cantidad)

select T.descri, O.num_ofi, O.emisor, O.recept, E.tipo_inv, E.cantid


from TIPO_OFI T, OFICIO O, EST_OFI E
where T.tipo_ofi = O.tipo_ofi and O.num_ofi = E.num_ofi
order by O.tipo_ofi, O.num_ofi

Resultado
descri num_ofi emisor recept tipo_inv cantid
Propuesta 001/97 AYTO. DE JALA SEDESOL 1 193253.0000
Propuesta 001/97 AYTO. DE JALA SEDESOL 2 34103.0000
Propuesta 001/97 AYTO. DE JALA SEDESOL 1 184375.0000
Propuesta 001/97 AYTO. DE JALA SEDESOL 2 32537.0000
Propuesta 002/97 AYTO. DE TEPIC SEDESOL 1 63750.0000
Propuesta 002/97 AYTO. DE TEPIC SEDESOL 2 11250.0000
Propuesta 003/97 AYTO. DE SAN BLAS SEDESOL 1 27971.0000
Propuesta 003/97 AYTO. DE SAN BLAS SEDESOL 2 4936.0000
Propuesta 0036/97 AYTO. DE SANTIAGO SEDESOL 1 18329.0000
Propuesta 0036/97 AYTO. DE SANTIAGO SEDESOL 2 3235.0000
Propuesta 004/97 SEDESOL(JORN.AGR.) SEDESOL 1 199359.0000
... ... ... ... ... ...
... ... ... ... ... ...
Aprobación COP-DPP-FI-5-0128 GOB. DEL ESTADO AYTO. DE RUIZ 1 10526.0000
Aprobación COP-DPP-FI-5-0128 GOB. DEL ESTADO AYTO. DE RUIZ 2 1858.0000
Aprobación COP-DPP-FI-5-0148 GOB. DEL ESTADO AYTO. DE SAMAO 1 13769.0000
Aprobación COP-DPP-FI-5-0148 GOB. DEL ESTADO AYTO. DE SAMAO 2 2431.0000
Aprobación COP-DPP-FI-5-0148 GOB. DEL ESTADO AYTO. DE SAMAO 5 8742.0000

Introducción a SQL Pág . - 91


Joins con más de dos tablas (continuación)
♦ Cuando n tablas se utilizan con el join, necesariamente se requieren
n-1 condiciones join, esto para evitar un producto cartesiano.
♦ Ejemplo (tres tablas - dos condiciones).
De las CLC’s liste el beneficiario y las claves de los proyectos para los
cuales se está liberando el recurso

select C.clc, CF.benefi, CE.proyec


from CLC C, CLC_FED CF, CLC_EST CE
where (C.clc = CF.clc ) and (CF.clc = CE.clc
and CF.sec_clcf = CE.sec_clcf)

Resultado
clc benefi proyec
1800012 C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE MUNICIPAL 97/C17028
1800012 C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE MUNICIPAL 97/C17029
1800012 C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE MUNICIPAL 97/C17030
1800012 C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE MUNICIPAL 97/C17031
1800012 C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE MUNICIPAL 97/C17032
1800164 C. SALVADOR AGUIAR FREGOSO 97/C03019
1800159 C. SALVADOR AGUIAR FREGOSO 97/C03013
1800160 C. SALVADOR AGUIAR FREGOSO 97/C03017
1800161 C. SALVADOR AGUIAR FREGOSO 97/C03016
1800162 C. SALVADOR AGUIAR FREGOSO 97/C03015
1800163 C. SALVADOR AGUIAR FREGOSO 97/C03018
1800183 C. SALVADOR AGUIAR FREGOSO 97/C03020
1800108 C. SALVADOR AGUIAR F. 97/C03005
1800003 C. SALVADOR AGUIAR FREGOSO 97/C03001
1800003 C. SALVADOR AGUIAR FREGOSO 97/C03002
1800003 C. SALVADOR AGUIAR FREGOSO 97/C03006
1800003 C. SALVADOR AGUIAR FREGOSO 97/C03007
1800105 C. SALVADOR AGUIAR FREGOSO 97/C03004
1800106 C. SALVADOR AGUIAR FREGOSO 97/C03009
1800107 C. SALVADOR AGUIAR FREGOSO 97/C03011
1800109 C. SALVADOR AGUIR FREGOSO 97/C03003
1800110 C. SALVADOR AGUIAR FREGOSO 97/C03008
1800153 PROFR. AGUSTIN AGUILAR IBARRA 97/C02021
... ...
... ...
1800378 C. FELIPE HARO FREGOSO 97/C19029
1800379 C. FELIPE HARO FREGOSO 97/C19028
1800380 C. FELIPE HARO FREGOSO 97/C19027
1800381 C. FELIPE HARO FREGOSO 97/C19030

Introducción a SQL Pág . - 92


Sumario
♦ Sintaxis:
select [ tabla ].nombre_columna, [ ...]
from { tabla }, { tabla }, [ ...]
[ where condiciones ]

♦ Producto cartesiano - todas las posibles combinaciones de los


renglones de cada tabla.
♦ Alias - mediante una abreviatura permite referenciar tablas dentro de
un elemento simple del SQL
♦ Join con múltiples tablas - cuando n tablas son utilizadas con el join,
n-1 condiciones son necesarias para evitar el producto cartesiano.

Sintaxis del alias select lista_select


from nombre_tabla nombre_alias1, nombre_tabla
nombre_alias2
where nombre_alias1.nombre_columna =
nombre_alias2.nombre_columna

Introducción a SQL Pág . - 93


Subconsultas - Objetivos
Al concluir esta sección estará capacitado para:

♦ Usar una subconsulta como un método alternativo de la cláusula join


♦ Usar subconsultas para funciones adicionales de la cláusula join

Objetivos En esta sección aprenderá a consultar las bases de


datos usando selects anidados (subconsultas).

Introducción a SQL Pág . - 94


Subconsulta - Un ejemplo introductorio
♦ ¿Qué proyectos se tienen para el “Fondo para el Desarrollo Regional
y el Empleo”?

1. Busque la clave para el “Fondo para el Desarrollo Regional y el


Empleo”
select fondo from fondo
where nombre = ‘Fondo para el Desarrollo Regional y el Empleo’

Resultado: ‘2’

2. Busque los proyectos para los cuales el fondo sea igual a ‘2’
select * from proyecto
where fondo = 2

Resultado para la consulta 2


ent_fed proyec munici eje_fis fondo progra subpro con_pro cat_pes nombre
18 97/S00221 14 1997 2 TH 02 00 2 DESPIEDRE MANUAL
18 97/S00095 14 1997 2 SS 06 00 0 EQUIPAMIENTO DE COCINA
18 97/S00001 4 1997 2 SD 01 00 0 REHABILITACION DEL
SISTEMA DE
ALCANTARILLADO SANIT.
18 97/S00016 998 1997 2 SS 08 00 0 GASTOS DEL GRUPO
OPERATIVO (JORNALEROS
AGRICOLAS)
18 97/S00053 18 1997 2 TB 01 00 0 TORTILLERIA
18 97/S00054 16 1997 2 TB 01 00 0 TORTILLERIA
18 97/S00055 14 1997 2 TB 01 00 0 TORTILLERIA
18 97/S00056 7 1997 2 TB 01 00 0 TORTILLERIA
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
18 97/S00287 8 1997 2 TF 04 00 2 PATIOS ASOLEADEROS PARA
EL CAFE
18 97/S00282 9 1997 2 UB 03 0A 2 MACHETEO DE CAMINO DE
ACCESO
18 97/S00281 9 1997 2 UB 03 0A 2 MACHETES DE CAMINO DE
ACCESO
18 97/S00280 9 1997 2 UB 03 0A 2 CONSERVACION DEL CAMINO
DE ACCESO AL POBLADO
18 97/S00278 9 1997 2 UB 03 0A 2 RAHABILITACION DEL
CAMINO DE TERRACERIA
18 97/S00291 7 1997 2 TE 01 00 2 REHABILITACION DE LIENZOS
EN PAECELAS Y POTREROS
18 97/S00293 7 1997 2 TE 01 00 2 REHABILITACION DE LIENZOS
EN PARCELAS Y POTREROS
18 97/S00289 7 1997 2 TF 01 00 2 REHABILITACION DE
HUERTOS DE DURAZNO
18 97/S00290 7 1997 2 TF 01 00 2 REHABILITACION DE
HUERTAS DE DURAZNO
18 97/S00288 7 1997 2 TE 01 00 2 REHABILITACION DE LIENZOS
EN PARCELAS Y POTREROS

Introducción a SQL Pág . - 95


Subconsulta - Un ejemplo introductorio
♦ La siguiente subconsulta obtiene un resultado igual que el ejemplo
anterior.

• Utilizar un select anidado.

select * from proyecto


where fondo =
(select fondo from fondo
where nombre = ‘Fondo para el Desarrollo Regional y
el Empleo’)

Resultado

ent_fed proyec munici eje_fis fondo progra subpro con_pro cat_pes nombre
18 97/S00221 14 1997 2 TH 02 00 2 DESPIEDRE MANUAL
18 97/S00095 14 1997 2 SS 06 00 0 EQUIPAMIENTO DE
COCINA
18 97/S00001 4 1997 2 SD 01 00 0 REHABILITACION DEL
SISTEMA DE
ALCANTARILLADO S.
18 97/S00016 998 1997 2 SS 08 00 0 GASTOS DEL GRUPO
OPERATIVO (JORNALEROS
AGRICO.
18 97/S00053 18 1997 2 TB 01 00 0 TORTILLERIA
18 97/S00054 16 1997 2 TB 01 00 0 TORTILLERIA
18 97/S00055 14 1997 2 TB 01 00 0 TORTILLERIA
18 97/S00056 7 1997 2 TB 01 00 0 TORTILLERIA
18 97/S00057 7 1997 2 TB 01 00 0 PANADERIA
(TERMINACION)
18 97/S00058 7 1997 2 TB 01 00 0 TIENDA DE ABASTO
... ... ... ... ... ... ... ... ... ...
... ... ... ... ... ... ... ... ... ...
18 97/S00059 7 1997 2 TB 01 00 0 TORTILERIA
18 97/S00289 7 1997 2 TF 01 00 2 REHABILITACION DE
HUERTOS DE DURAZNO
18 97/S00290 7 1997 2 TF 01 00 2 REHABILITACION DE
HUERTAS DE DURAZNO
18 97/S00288 7 1997 2 TE 01 00 2 REHABILITACION DE
LIENZOS EN PARCELAS Y
POTREROS

Introducción a SQL Pág . - 96


Subconsulta - Vista General

♦ Una subconsulta es una cláusula select, usada como una expresión


que forma parte de otra cláusula select, update, insert o delete

♦ La subconsulta (select anidado) al ser evaluada substituye su


resultado dentro de la cláusula exterior de consulta where

♦ Las subconsultas son usadas:


• Porque algunas veces son más fácil de entender que un join, el
cual lleva a cabo algún propósito

• Para efectuar algunas tareas que en otro caso sería imposible


realizar utilizando un join (por ejemplo usar una función agregada)

Sintaxis completa select lista_select


de subconsulta [ from { tabla } [ ,...] ]
[ where condiciones ] {operador_de_comparación}
( select lista_select_subconsulta
[ from { tabla } [ ,...]
[ where condiciones ] )

Notas de la sintaxis

• Sólo las columnas de la lista_select en la primera


declaración select son desplegadas

• La lista_select_subconsulta puede incluir sólo un nombre


de columna, más de una columna no se evaluará

Introducción a SQL Pág . - 97


Restricciones de Subconsultas
♦ Si la cláusula where de la consulta exterior incluye un nombre de
columna, ésta necesitará un join compatible con el nombre de la
columna en la lista_select_subconsulta

♦ Una subconsulta no puede incluir las cláusulas order by, compute o


into

♦ El distinct no puede ser usado con subconsultas que incluyan una


cláusula group by

Introducción a SQL Pág . - 98


Niveles Múltiples de Anidación
♦ Una subconsulta puede contener una ó más subconsultas

• No existe un nivel máximo de anidamiento


• Ejemplo: (dos subconsultas)
Listar los proyectos que se encuetran en propuesta por el municipio 2

select * from proyecto


where munici = 2 and fase_pro =
(select fase_pre
from fase_pre
where descri = 'Propuesta')

Resultado

ent_fed proyec munici eje_fis fondo progra subpro con_pro cat_pes nombre
18 97/S00139 2 1997 2 SS 06 00 0 ORGANIZACION PARA EL
CONSUMO (GRUPOS OPER.)
18 97/S00020 2 1997 2 S5 07 00 0 PRODUCCION DE 50,000
PLANTAS
18 97/S00021 2 1997 2 S5 07 00 0 MANTENIMIENTO DE
50,000 PLANTAS
18 97/S00022 2 1997 2 S5 07 00 0 PLANTACION Y
NOVILIZACION SOCIAL,
CARGA Y DESCARGA DE
15,000 OPERATIVOS

Introducción a SQL Pág . - 99


Subconsultas que regresan Múltiples Renglones
♦ Si la subconsulta regresa más de un valor, debe usar in en la cláusula
where de la consulta exterior en lugar de =
• Ejemplo
Liste los oficios que se encuentran en aprobación y su estructura
financiera

select num_ofi, tipo_inv, cantid


from est_ofi where num_ofi in
(select num_ofi
from oficio
where tipo_ofi in
(select tipo_ofi
from TIPO_OFI
where descri like 'Aprobaci_n'))

Resultado
num_ofi tipo_inv cantidad
COP-DPP-F1-5-0042 1 200762.0000
COP-DPP-F1-5-0042 2 35429.0000
COP-DPP-F1-5-0042 5 59048.0000
COP-DPP-F1-5-0004 1 56442.0000
COP-DPP-F1-5-0004 2 9960.0000
COP-DPP-F1-5-0004 5 16600.0000
COP-DPP-F1-5-0004 1 115065.0000
COP-DPP-F1-5-0004 2 20305.0000
COP-DPP-F1-5-0004 5 33843.0000
COP-DPP-F1-5-0033 1 286433.0000
COP-DPP-F1-5-0033 2 50547.0000
COP-DPP-F1-5-0033 5 84247.0000
... ... ...
... ... ...
25-541711-F2-0033 1 193253.0000
25-541711-F2-0033 2 34103.0000
25-541711-F2-0033 1 184375.0000
25-541711-F2-0033 2 32537.0000
COP-DPP-FI-0160/97 2 17159778.0000
COP-DPP-FI-0160/97 1 97238744.0000
COP-DPP-F1-5-0188 1 190140.0000
COP-DPP-F1-5-0188 2 33554.0000

Introducción a SQL Pág . - 100


Subconsultas que regresan Múltiples Renglones
(Continuación)
• Ejemplo
Liste la clave de los proyectos, nombre y costo total de los específicos y
que pertenecen al municipio de TEPEZALA.

select proyec, nombre, costo_tot


from proyecto
where proyec in
(select proyec
from pro_esp
where munici =
(select munici
from munici
where nom_ofi = 'TEPEZALA'))

Resultado
proyec nombre costo_tot
97/C8012 CONSTRUCCION CERCO PERIMETRAL EN BENEFICIO HUMEDO DE CAFE 68590.0000
97/08006 EMPEDRADO DE CALLES COL. NAVARREÑO 73830.0000
97/S00056 TORTILLERIA 45865.0000
97/S00062 FRUTERIA Y TIENDA DE ABASTO 64310.0000
97/S00107 MEJORAMIENTO DE TECHOS, PISOS Y MUROS 60000.0000
97/V17089 BECAS NIÑOS ESC. PRIMARIA LEONA VICARIO T. V. 21712.0000
97/S00178 HUERTO COMUNITARIO 1245.0000
97C/08024 ESC. PRIM. " 20 DE NOVIEMBRE " 22656.0000
97/S00003 CONSTRUCCION DE PLANTA DE TRATAMIENTO 1817200.0000

Introducción a SQL Pág . - 101


Subconsultas con Operadores de Comparación

♦ Las subconsultas pueden realizar algunas tareas que las cláusulas


join no pueden hacer
• Una cláusula where en una declaración select no puede incluir una
función agregada
• Una subconsulta puede incluir una función agregada
• Ejemplo (mayor que y una función agregada)
Liste los proyectos, sus nombres y costo total de los que se
encuentran en aprobación; además que el costo total de estos
proyectos sea menor al promedio de las cantidades aprobadas de
todos los proyectos.

select proyec, nombre, costo_tot


from proyecto
where fase_pro =
(select fase_pre
from fase_pre
where descri like 'Aprobaci_n')
and costo_tot < (select avg (can_act)
from est_fin
where fase_pre =
(select fase_pre
from fase_pre where descri like 'Aprobaci_n'))

• Regresa error si una subconsulta obtiene más de un valor para un


operador de comparación

Sintaxis select lista_select


[ from { tabla } [,...] ]
[ where expresión { = | != | > | >= | < | <= } [ any | all ] ]
(subconsulta)

Resultado
proyec nombre costo _tot
97/C07001 SISTEMA DE PURIFICACION DE AGUA ESC. PRIM. MIGUEL HIDALGO Y COSTILLA 27105.0000
97/C13005 AMPLIACION RED ELECTRICA BARRIO DE EN MEDIO 27763.0000
97/C13007 AMPLIACION RED ELECTRICA BARRIO DE ABAJO 14048.0000
... ... ...
... ... ...
97/C02045 DESAYUNOS ESCOLARES ESC. PRIMARIA IGNACIO ZARAGOZA T.V. 18548.0000
97/C14029 ESCUELA PRIMARIA JUAN ESCUTIA 22656.0000

Introducción a SQL Pág . - 102


Ejemplo de error

select proyec, nombre, costo_tot from proyecto


where fase_pro =
(select fase_pre from fase_pre
where descri like 'Aprobaci_n') and costo_tot <
(select can_act from est_fin
where fase_pre =
(select fase_pre from fase_pre
where descri like 'Aprobaci_n'))

Al ejecutar la instrucción indica Error: Subquery cannot return more than one result.

Subconsultas con Operadores de Comparación


(Continuación)

♦ Ejemplo (dos condiciones)

Liste los proyectos que estén actualizados cuyo costo total sea menor
al promedio de los costos totales de todos los proyectos (Propuesta,
Actualización, Aprobación, etc.)

select * from proyecto


where fase_pro =
(select fase_pre from fase_pre
where descri = ‘Autorización’) and costo_tot <
(select avg(costo_tot) from proyecto)

Resultado
ent_fed proyec munici eje_fis fondo progra subpro con_pro cat_pes nombre
18 97/08006 8 1997 1 SE 02 00 0 EMPEDRADO DE CALLES
COL. NAVARREÑO
18 97/C8012 8 1997 1 TF 04 00 0 CONSTRUCCION CERCO
PERIMETRAL EN BENEFICIO
...
18 97/S0005 7 1997 2 TB 01 00 0 TORTILLERIA
6
18 97/S0006 2 1997 2 TB 01 00 0 FRUTERIA Y TIENDA DE
2 ABASTO
18 97/S0010 15 1997 2 SH 01 0B 0 MEJORAMIENTO DE
7 TECHOS, PISOS Y MUROS
18 97/S0017 12 1997 2 SS 08 00 0 HUERTO COMUNITARIO
8
18 97C/0802 8 1997 1 SB 01 00 1 ESC. PRIM. " 20 DE
4 NOVIEMBRE "
18 97/V1708 17 1997 1 SB 01 00 1 BECAS NIÑOS ESC.
9 PRIMARIA LEONA VICARIO
T. V.

Introducción a SQL Pág . - 103


Sumario
♦ Una Subconsulta - es una cláusula select, usada como una
expresión en parte de otra cláusula select, update, insert, or delete.

♦ El resultado de la subconsulta - sustituye valores dentro de la


consulta exterior

♦ Subconsulta - debe contener una o más subconsultas

Sintaxis select lista_select


[ from { tabla } [,...] ]
[ where condición ] {operador de comparación}
( select lista_select_subconsulta
[ from { tabla } [ ,... ]
[ where condiciones ]
[ group by expresión [,...] ]
[ having condición ]
[ order by { { tabla }. ] columna | número_lista_select
| expresión } [ asc | desc] [,...] ]
[ compute renglón ( columna ) [ ,... ] ]
[ by columna [ ,... ] ] )

Introducción a SQL Pág . - 104

S-ar putea să vă placă și