Sunteți pe pagina 1din 106

Introducci

n
a
SQL
Introduccin a SQL

Pg . - 1

Introduccin a SQL

Pg . - 2

Trminos y Conceptos Bsicos - Objetivos


Al concluir esta seccin estar capacitado para:
Definir SQL
Definir un sistema manejador de bases de datos relacional
Listar y definir los trminos de una base de datos
Listar las tablas que estn en la base de datos IMCLASS
Reconocer como se insertan y extraen datos desde una base de
datos.

Objetivos

En esta seccin aprender los conceptos bsicos de una base de


datos, y sern definidos los trminos usados para referenciar
entidades. Tambin se incluye una breve explicacin del sistema
manejador de bases de datos relacionales y como se insertan y
extraen datos en una base de datos.

Introduccin a SQL

Pg . - 3

SQL
Structured Query Language (Lenguaje de consulta estructurado)

Es una forma estndar de consulta de datos especficos


Es una forma de extraer y manipular datos de una base de datos
Usado para todas las funciones de bases de datos, incluyendo
administracin, creacin de esquemas y datos recuperables
Puede ser usado de forma implcita dentro de una aplicacin

Introduccin a SQL

Pg . - 4

Base de Datos
Definicin: Un cuerpo o conjunto de datos en el cual existen relaciones
entre sus elementos

Ejemplo:
SURCE97

SURCE97
Mov_Est

Proyecto

Est_fin

Oficio

Introduccin a SQL

Ofi_Pro

Pg . - 5

Sistema Manejador De Base De Datos (DBMS)


Definicin: Es un programa que permite la definicin de estructuras de
bases de datos, el almacenamiento y la recuperacin de datos de
estas estructuras.

Administrador

BD
Usuarios

SQL anywhere

SURCE97

Servidor
Tabla

Conjunto de renglones o lista de valores


Anlogo a un archivo

Columna

Anlogo a un campo de un registro


Cada columna en un rengln dado tiene un valor nico de dato
Cada columna es de un tipo de dato nico

Rengln

Anlogo a un registro de un archivo


Todos los renglones de una tabla tienen el mismo conjunto de
columnas

Llave Primaria

Una o ms columnas cuyo contenido es nico dentro de la


tabla y puede ser usado para identificar los renglones de otra
tabla.

Llave Fornea

Una o ms columnas de una tabla que existe como llave


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

Introduccin a SQL

Pg . - 6

Tablas
Nombres de Columnas

Ent_fed
Renglones

Proyec

Munici

Eje_fis

22

97/000001

01

1997

22

97/000002

02

1997

22

97/000003

01

1997

Columnas

Ejemplo: La tabla PROYECTO contiene informacin de los proyectos

Llaves Primarias
Cada rengln puede ser accesado por una llave primaria nica
En todos los renglones, algunas columnas o grupos de columnas
debern identificar nicamente este rengln.

Introduccin a SQL

Pg . - 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 concatenacin de Ent_fed + Proyec es un identificador nico para cada producto, por


eso es una llave primaria.

Visin General: Crear una Tabla


1. El Diseador 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)

Introduccin a SQL

Pg . - 8

Visin 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 tambin
el propietario de la base de datos.

Introduccin a SQL

Pg . - 9

Sumario
Structured Query Language (SQL) -es una forma estndar para

obtener y manipular datos de una base de datos.


Base de datos - Un cuerpo de datos en el cual existe una relacin

entre sus elementos.


Sistema manejador de base de datos - Programa que permite la

definicin de estructuras de bases de datos, el almacenamiento y la


recuperacin de estas estructuras.
Trminos - Tabla, columna, rengln, llave primaria.
Nombres convencionales - BD.propietario.nom_tabla.nom_columna

Introduccin a SQL

Pg . - 10

Joins y Subconsultas - Objetivos


Al concluir esta seccin 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 ms de una
subconsulta
Renombrar el resultado de una subconsulta

Introduccin a SQL

Pg . - 11

La clusula KEY JOIN


KEY JOIN indica una operacin 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
97/000029
97/000030
97/000031
97/000063
97/000064
97/000065
97/001905
97/000069
97/000070
97/000071
97/000072
97/000066
97/000067
97/000068
97/000006

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

munici
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada

Introduccin a SQL

munici
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada
Ensenada

Pg . - 12

KEY JOIN con ms 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
97/000355
97/000356
97/000351
97/000352
97/000358
97/000357
97/000353
97/000354
97/0307
97/000359
97/000360

nom_ofi
Ensenada
Ensenada
Mexicali
Mexicali
Tecate
Tecate
Tijuana
Tijuana
Tijuana
Concejo Mpal. de playas de Rosarito
Concejo Mpal. de playas de Rosarito

descri
Social
Social
Social
Social
Social
Social
Social
Social
Apoyo
Social
Social

Introduccin a SQL

Pg . - 13

KEY LEFT OUTER JOIN / KEY RIGHT OUTER JOIN


Al especificar una operacin join en una consulta puede suceder el
caso que alguna de las tablas no contenga datos para establecer la
relacin, esto reflejara un resultado incompleto o bien no se obtendra
ningn 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 adems cumplen la condicin de la relacin
A key right outer join B
El resultado incluye los renglones de B que no esten contenidos en
A y los que adems cumplen la condicin de la relacin

Ejemplos
select PRO_ESP.proyec, CAR_GEN.descri
from PRO_ESP key left outer join CAR_GEN
where PRO_ESP.munici = 1
order by PRO_ESP.proyec

select PRO_ESP.proyec, CAR_GEN.descri


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

proyec
00053

descri
(NULL)

proyec
97/000007

97/000006

(NULL)

sgc01

97/000007

CONSTRUCCION DE 4 AULAS TIPO


REGIONAL EN E.P.E.LA ESPERANZA
(NULL)
(NULL)
(NULL)
(NULL)
(NULL)
(NULL)
(NULL)
(NULL)
(NULL)
(NULL)

97/000008
97/000009
97/000029
97/000030
97/000031
97/000063
97/000064
97/000065
97/000066
97/000067

Introduccin a SQL

descri
CONSTRUCCION DE 4 AULAS TIPO
REGIONAL EN E.P.E.LA ESPERANZA
Pavimentacin de Av. Prueba mediante maquinaria
de plancha al calor.

Pg . - 14

KEY LEFT OUTER JOIN / KEY RIGHT OUTER JOIN


(Continuacin)
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
operacin 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)

Introduccin a SQL

Pg . - 15

Subconsultas con joins externos


En una subconsulta es posible definir operaciones joins para obtener
un resultado (columna o funcin agregada) que forme parte de la lista
de columnas de la consulta principal
Ejemplo
Lista los proyectos del municipio 1 y la descripcin 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
97/000029

fondo
2

97/000030

97/000031

97/000063

97/000064

97/000065

97/001905

97/000069

97/000070

97/000071

97/000072

nombre
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para

el Desarrollo Regional y el

progra
SG

descri
ELECTRIFICACION

subpro
01

descri
Urbana

el Desarrollo Regional y el

SG

ELECTRIFICACION

01

Urbana

el Desarrollo Regional y el

SG

ELECTRIFICACION

01

Urbana

el Desarrollo Regional y el

SD

ALCANTARILLADO

03

Construccin

el Desarrollo Regional y el

SD

ALCANTARILLADO

03

Construccin

el Desarrollo Regional y el

SD

ALCANTARILLADO

03

Construccin

el Desarrollo Regional y el

SS

ASISTENCIA SOCIAL Y SERVICIOS 01


COMUNITARIOS

el Desarrollo Regional y el

SI

VIALIDADES URBANAS

01

Nutricin,
Alimentacin y
Salud
Reconstruccin

el Desarrollo Regional y el

SI

VIALIDADES URBANAS

01

Reconstruccin

el Desarrollo Regional y el

SI

VIALIDADES URBANAS

01

Reconstruccin

el Desarrollo Regional y el

SI

VIALIDADES URBANAS

01

Reconstruccin

Introduccin a SQL

Pg . - 16

97/000066

97/000067

97/000068

97/000006

97/000007

97/000008

97/000009

Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo
Fondo para
Empleo

el Desarrollo Regional y el

SI

VIALIDADES URBANAS

01

Reconstruccin

el Desarrollo Regional y el

SI

VIALIDADES URBANAS

01

Reconstruccin

el Desarrollo Regional y el

SI

VIALIDADES URBANAS

01

Reconstruccin

el Desarrollo Regional y el

SJ

INFRAESTRUCTURA EDUCATIVA

02

Construccin

el Desarrollo Regional y el

SJ

INFRAESTRUCTURA EDUCATIVA

02

Construccin

el Desarrollo Regional y el

SJ

INFRAESTRUCTURA EDUCATIVA

02

Construccin

el Desarrollo Regional y el

SJ

INFRAESTRUCTURA EDUCATIVA

02

Construccin

Subconsultas con joins externos (continuacin)


Las subconsultas con joins externos que no cumplen la condicin de
relacin se presentan con valor NULL
Una subconsulta con un join externo solo puede regresar como
resultado un valor (columna, funcin agregada) de un rengln
Ejemplo
Lista los proyectos especficos y la descripcin 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
97/000055
97/000056
97/000076
97/000029
97/000030
97/000031
97/000048
97/000049
97/000050
97/000043
97/000044
97/000045

nom_ofi
Tijuana
Tijuana
Tecate
Ensenada
Ensenada
Ensenada
Mexicali
Mexicali
Mexicali
Tijuana
Tijuana
Tijuana

nombre
TIJUANA
TIJUANA
LAZARO CARDENAS, COL.
POPULAR 89, FRACC
POPULAR 89, FRACC
POPULAR 89, FRACC
PROGRESO,COL.
PROGRESO,COL.
PROGRESO,COL.
CUMBRES, COL.
TIJUANA
LAZARO CARDENAS, COL.

Introduccin a SQL

Pg . - 17

97/000077
97/000078
97/000046
97/000047
97/000057
97/000058
97/000063
97/000064
97/000065
97/000051
97/000052
97/000053

Tecate
Tecate
Tijuana
Tijuana
Tijuana
Tijuana
Ensenada
Ensenada
Ensenada
Tijuana
Tijuana
Tijuana

LAZARO CARDENAS, COL.


LAZARO CARDENAS, COL.
CUMBRES, COL.
(NULL)
(NULL)
(NULL)
RUIZ CORTINES
RUIZ CORTINES
RUIZ CORTINES
MURUA, FRACC.
LOMAS TAURINAS,COL.
(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 condicin dentro de la
consulta
Al resultado de una subconsulta se le puede asignar un nombre que
sirva como un identificador ms 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 aprobacin
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
97/000048
97/000049
97/000050
97/000472
97/000119
97/000033
97/000034
97/000035

inv_federal
inv_estatal
736607.0000
245536.0000
9375.0000
9375.0000
(NULL)
(NULL)
97500.0000
32500.0000
(NULL)
(NULL)
679330.0000
226443.0000
8646.0000
8646.0000
(NULL)
(NULL)

Introduccin a SQL

Pg . - 18

97/000036
97/000037
97/000038
97/000039
97/000040
97/000041

538978.0000
1502771.0000
19126.0000
(NULL)
262319.0000
452413.0000

179659.0000
500924.0000
19126.0000
(NULL)
87440.0000
150804.0000

Introduccin a SQL

Pg . - 19

Sumario
La clusula KEY JOIN permite simplificar la operacin join en una

consulta
KEY LEFT/RIGHT OUTER JOIN son empleados cuando se requieren

extraer renglones que no cumplan con la operacin 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

Introduccin a SQL

Pg . - 20

Extraer Datos I - Objetivos


Al concluir esta seccin estar capacitado para:
Conectarse a la base de datos apropiada
Escribir una consulta usando condiciones para restringir datos
extrados
Usar expresiones Booleanas en la condicin de la consulta

Objetivos

En esta seccin, aprender a usar los elementos bsicos de


SQL para extraer datos desde la base de datos.

Introduccin a SQL

Pg . - 21

SQL Anywhere: Una Visin 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.

Introduccin a SQL

Pg . - 22

Seleccionar una Base de Datos


Desde SQL AnyWhere se puede seleccionar la base de datos

BD
BD

SQL Anywhere

SURCE

BD

NOMINA

IMCLASS

Introduccin a SQL

Pg . - 23

Recuperacin Simple - select/from


Se utiliza para extraer datos de la base de datos
clusula select para ver las columnas que desee
clusula from especifica la(s) tabla(s) de donde son extrados 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
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
18
.
.
.

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
.
.
.

munici
5
5
5
7
7
13
3
16
13
13
13
13
13
13
13
5
16
5
.
.
.

eje_fis
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
1997
.
.
.

fondo
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
.
.
.

progra
SC
SE
SE
SJ
SK
SG
SE
SG
SG
SG
SG
SG
SG
SE
SD
SJ
SG
SJ
.
.
.

subpro
01
03
02
02
02
01
02
01
01
01
01
01
02
02
02
02
02
02
.
.
.

con_pro
00
0A
00
0A
00
0B
00
0B
0B
0B
0B
0B
0B
00
00
0C
0B
0B
.
.
.

Introduccin a SQL

cat_pes
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
.
.
.

..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................
..................

Pg . - 24

Recuperacin Simple - (continuacin)


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
.
.
.

Introduccin a SQL

Pg . - 25

Recuperacin Simple - select/from (continuacin)


Ejemplo (ms de una columna)
Listar los proyectos y su municipio de la tabla PROYECTO
select proyec, munici
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
.
.
.

munici
5
5
5
7
7
13
3
16
13
13
13
13
13
13
13
5
16
5
.
.
.

Introduccin a SQL

Pg . - 26

Reordenar columnas
El orden de columnas en la seleccin 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
5
5
5
7
7
13
3
16
13
13
13
13
13
13
13
5
16
5
.
.
.

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
.
.
.

Introduccin a SQL

Pg . - 27

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 slo 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
SC
SE
SE
SJ
SK
SG
SE
SG
SG
SG
SG
SG
SG
SE
SD
SJ
SG
SJ
SJ
.
.
.

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

Introduccin a SQL

Pg . - 28

distinct
distinct acta sobre el rengln completo

Ejemplo
Lista slo una ocurrencia de los programas y subprogramas de los
proyectos
select distinct progra, subpro
from PROYECTO

select progra, subpro


from PROYECTO

select distinct progra, subpro


from PROYECTO

progra
SC
SE
SE
SJ
SK
SG
SE
SG
SG
SG
SG
SG
SG
SE
SD
SJ
SG
SJ
SJ
SJ
.
.
.

progra
SC
SE
SE
SJ
SK
SG
SG
SD
SE
UB
SC
SD
SF
UB
SL
SC
SE
TH
UB
SD
.
.
.

subpro
01
03
02
02
02
01
02
01
01
01
01
01
02
02
02
02
02
02
02
02
.
.
.

subpro
01
03
02
02
02
01
02
02
01
02
03
01
02
03
02
02
04
02
01
03
.
.
.

Introduccin a SQL

Pg . - 29

distinct (continuacin)
El distinct es usado para:
Encontrar cada valor posible en una columna en particular
Agrupar valores en categoras
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

Introduccin a SQL

Pg . - 30

Extraccin Calificada - select/from/where


La clusula where limita cuales renglones son extrados

Ejemplo
Lista los proyectos especficos del municipio con clave 2
select proyec, munici
from PRO_ESP
where munici = 2
Las condiciones de bsqueda son expresiones booleanas (verdadero,
falso) aplicadas a cada rengln para determinar el resultado que
deber regresar

Sintaxis

select lista_select
from lista_de_tablas
where condicin

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

munici
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2

Introduccin a SQL

Pg . - 31

Extraccin Calificada - select/from/where (continuacin)


Calificadores en la clusula where

Operadores de comparacin (=, >, <, >=,<=)


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 expresin 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
97/C16002
97/C16001
97/C13009
97/C13010
97/C17001
97/C17002
97/C17003
97/C17004
97/C17005
97/C17006
97/C17008
97/C07002
97/C07001
97/C13003
97/C13005
97/C13006
97/C13007
97/C13008
97/C13004
97/C13001
.
.
.

munici
16
16
13
13
17
17
17
17
17
17
17
7
7
13
13
13
13
13
13
13
.
.3
.

Introduccin a SQL

Pg . - 32

select/from/where - Operadores de comparacin


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

Introduccin a SQL

Pg . - 33

select/from/where - Operadores de Comparacin


Ejemplo (igual =)

Lista los proyectos que pertenecen al programa SK


select proyec, nombre
from PROYECTO
where progra = SS

Resultado
proyec
97/C07001
97/C19016
97/C19006
97/C03018
97/C03019
97/C14014
97/C07006

nombre
SISTEMA DE PURIFICACION DE AGUA ESC. PRIM. MIGUEL HIDALGO Y COSTILLA
RECONSTRUCCION DE BARDEO EN LA ESC. PRIM. LEONA VICARIO
PROTECCION DE LAS VENTANAS EN 3 AULAS ESC. PRIM CUAUHTEMOC
REHABILITACION CERCADO PERIMETRAL JARDIN DE NIOS NARCISO MENDOZA
REHABILITACION DE CASA DEL MAESTRO Y SERVICIOS SANITARIOS ESC. PRIM. FCO. I.
MADERO
REHABILITACION DE ESC. PRIM. MIGUEL HIDALGO
REHAB. DE ACCESO A LA ESC. SEC. FED. NO. 9 "RICARDO FLORES MAGON"

Ejemplo
No igual

Busca los proyectos que no pertenezcan al programa SE


select proyec, nombre
from PROYECTO
where progra != SE

Ejemplo
Mayor que

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


select *
from PROYECTO
where costo_tot > 300000
Busca los nombres de los proyectos que su primer letra sea
menor a C
select nombre
from PROYECTO
where nombre < C

Ejemplo
Menor que

Introduccin a SQL

Pg . - 34

select/from/where - Rangos
between es usado para especificar un rango inclusivo : los valores

limites son incluidos en la bsqueda


Ejemplo
select num_ofi, tipo_inv, cantid
from EST_OFI
where cantid between 75000 and 100000
not between excluye el valor ms alto y el ms 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
COP-DPP-F1-5-0013
COP-DPP-F1-5-0037
COP-DPP-F1-5-0012
COP-DPP-F1-5-0040
COP-DPP-F1-5-0017
COP-DPP-F1-5-0067

tipo_inv
1
1
1
1
1
1

cantid
88850.0000
80933.0000
91285.0000
82209.0000
97693.0000
82571.0000

Resultado not between


num_ofi
COP-DPP-F1-5-0026
COP-DPP-F1-5-0026
COP-DPP-F1-5-0026
COP-DPP-F1-5-0036
COP-DPP-F1-5-0036
COP-DPP-F1-5-0015
COP-DPP-F1-5-0015
COP-DPP-F1-5-0044
COP-DPP-F1-5-0044
COP-DPP-F1-5-0041
.
.
.

tipo_inv
1
1
1
1
1
1
1
1
1
1
.
.
.

cantid
7584.0000
63441.0000
39867.0000
49068.0000
122167.0000
17068.0000
180341.0000
552427.0000
723851.0000
228116.0000
.
.
.

Introduccin a SQL

Pg . - 35

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 carcter

[]

cualquier caracter del conjunto

[^]

cualquier caracter que no este dentro del rango


especificado
Encerrar las opciones y las cadenas de caracteres entre comillas

Introduccin a SQL

Pg . - 36

select/from/where - Usar Caracteres (continuacin)


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
97/C02002
97/C02003
97/C19006

nombre
PAVIMENTACION CALLE JUAREZ ENTRE 20 DE NOV. Y FCO. COSIO
PAVIMENTACION DE CALLES: ABASOLO, ISMAEL ZUIGA, MORELOS Y 20 DE NOVIEMBRE
PROTECCION DE LAS VENTANAS EN 3 AULAS ESC. PRIM CUAUHTEMOC

Resultado where nombre not like P%


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
.
.
.

nombre
REHAB. DEL SISTEMA DE AGUA POTABLE ( RED DE DISTRIBUCION )
CONSTRUCCION DE GUARNICIONES
CONSTRUCCION DE EMPEDRADOS
CONSTRUCCION AULA PREESCOLAR CONCEPCION JAIME ESPINOZA COL. EL CARRIZAL
SISTEMA DE PURIFICACION DE AGUA ESC. PRIM. MIGUEL HIDALGO Y COSTILLA
AMPLIACION RED ELECTRICA BARRIO DE ARRIBA
EMPEDRADO DE CALLES
AMPLIACION RED ELECTRICA COL. EL TACOTE
AMPLIACION RED ELECTRICA BARRIO DE ENMEDIO
AMPLIACION RED ELECTRICA COL. BUENOS AIRES
AMPLIACION RED ELECTRICA BARRIO DE ABAJO
AMPLIACION RED ELECTRICA COL. PROGRESO
AMPLIACION RED ELECTRICA COL. NUEVA
EMPEDRADO CALLES COL. LAZARO CARDENAS
AMPLIACION ALCANTARILLADO SANITARIO COL. BUENOS AIRES
CONST. DE CERCO PERIMETRAL ESC. TELESEC. VICENTE GUERRERO
.
.
.

Introduccin a SQL

Pg . - 37

select/from/where - Usar Caracteres (continuacin)


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
where nombre
like [BDP]%

Resultado
where nombre
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
INTRODUCCION DEL SISTEMA DE AGUA POTABLE COL. NUEVAS PALOMAS
INTRODUCION DEL SISTEMA DE AGUA POTABLE COL. BENITO JUAREZ OTE.
PAVIMENTACION CALLE JUAREZ ENTRE 20 DE NOV. Y FCO. COSIO
PAVIMENTACION DE CALLES: ABASOLO, ISMAEL ZUIGA, MORELOS Y 20 DE NOVIEMBRE
NIVELACION Y BALASTREO DE CALLES EN COL. LAZARO CARDENAS
IMPLANTACION DE PASTO Y CERCO PERIMETRAL DE 100 HAS.
PROTECCION DE LAS VENTANAS EN 3 AULAS ESC. PRIM CUAUHTEMOC
GASTOS DEL GRUPO OPERATIVO

PAVIMENTACION DE CALLES: ABASOLO, ISMAEL ZUIGA, MORELOS Y 20 DE


NOVIEMBRE
DRENAJE PLUVIAL EN UNIDAD DEPORTIVA
DESPIEDRE AGRICOLA CON MAQUINARIA
BALASTREO DE CALLES COL. SAN RAFAEL
BALASTREO DE CAMINO SACACOSECHAS PTA. AZUL- LADRILLERAS
PROTECCION DE LAS VENTANAS EN 3 AULAS ESC. PRIM CUAUHTEMOC

Introduccin a SQL

Pg . - 38

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
97/C13002
97/C17037
97/C17038
97/C02008
97/C02014
97/C02018
97/C15005
97/C04001
97/C08005
97/S00001
97/C17033
97/C17034
97/C17035
97/C17036
97/C18005
97/C18006
97/C04008
97/C18008
97/C03017

progra
SD
SD
SD
SL
SD
SD
SL
SD
SD
SD
SD
SD
SD
SD
SD
SD
SD
SD
SL

Introduccin a SQL

Pg . - 39

select/from/where - Conectores condicionales


Conectores condicionales con operadores lgicos: and/or

and
Conecta dos o ms condiciones
Regresa resultado slo 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
97/C02001
97/C02004
97/C02005
97/C02007
97/C02011
97/C02012

progra
SE
SE
SE
SE
SE
SE

munici
2
2
2
2
2
2

Introduccin a SQL

Pg . - 40

select/from/where - Conectores condicionales


or
Conecta dos o ms 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 ejecucin C
select proyec, progra, mod_eje
from PROYECTO
where progra = SD or mod_eje = C

Resultado
proyec
97/C13003
97/C16002
97/C13005
97/C13006
97/C13007
97/C13008
97/C13004
97/C13002
97/C16001
97/C17039
97/C17040
97/C17041
97/C17042
97/C17037
97/C17038
97/C06015
97/06016
97/C06017
97/C06018
97/C02002
97/C02003
97/C02014
97/C02018
97/C20005
97/C15001
97/C13012
.
.
.

progra
SG
SG
SG
SG
SG
SG
SG
SD
SG
SC
SC
SC
SC
SD
SD
SG
SG
SG
SG
SF
SF
SD
SD
SJ
UB
UB
.
.
.

mod_eje
C
C
C
C
C
C
C
AM
C
C
C
C
C
C
C
C
C
C
C
C
C
AM
AM
C
C
C
.
.
.

Introduccin a SQL

Pg . - 41

select/from/where - Conectores condicionales


(continuacin)
Cuando se utiliza ms de un operador lgico, el orden por default en el

cual son evaluados es: not/and/or


Use parntesis para forzar el orden de evaluacin aclarar la
intencin
Ejemplo (sin parntesis)
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
97/C07001
97/C17008
97/C17007
97/C02011
97/C03005
97/C10002
97/C19016
97/C19006
97/C03018
97/C03019
97/C14014
97/C07006

progra
SK
SE
SE
SE
SE
SE
SK
SK
SK
SK
SK
SK

costo_tot
27105.0000
287175.0000
213456.0000
286424.0000
326410.0000
256529.0000
32479.0000
7078.0000
46383.0000
23460.0000
92587.0000
82236.0000

Ejemplo utilizando parntesis con and/or


select proyec, progra, costo_tot
from PROYECTO
where (progra = SK or progra = SE) and costo_tot > 200000
Resultado
proyec
97/C17008
97/C17007
97/C02011
97/C03005
97/C10002

progra
SE
SE
SE
SE
SE

costo_tot
287175.0000
213456.0000
286424.0000
326410.0000
256529.0000

Introduccin a SQL

Pg . - 42

Sumario
extraer datos
select [distinct] nombre_columna
from nombre_tabla
[where condiciones_bsqueda]
distinct - elimina renglones duplicados en la salida

where - determina exactamente cuales renglones sern extrados

Introduccin a SQL

Pg . - 43

Sumario
Operadores de Comparacin - (=) 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

bsqueda
select [distinct] nombre_columna
from nombre_tabla
[where condiciones_bsqueda]
not - niega una expresin

Introduccin a SQL

Pg . - 44

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 algn valor de la lista de

valores

Introduccin a SQL

Pg . - 45

CAPITULO III
VISTAS Y
PROCEDIMIENTOS
ALMACENADOS.

Introduccin a SQL

Pg . - 46

Vistas y Procedimientos Almacenados - Objetivos


Al concluir esta seccin 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

Introduccin a SQL

Pg . - 47

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 clusula que no se puede utilizar en
la definicin de la vista, esto por el hecho de que los renglones no se
encuentran en un orden particular
Es importante sealar 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 definicin de vistas y procedimientos es recomendable guardarlos en archivos


de texto con extensin SQL

Introduccin a SQL

Pg . - 48

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
S5
SB
SC
SC
SC
SC
SC
SD
SD
SD
SE
SE
SE
SE
SE
SF
SF
SG
SG

nom_progra
PROTECCION Y PRESERVACION ECOLOGICA
ESTIMULOS A LA EDUCACION BASICA
AGUA POTABLE
AGUA POTABLE
AGUA POTABLE
AGUA POTABLE
AGUA POTABLE
ALCANTARILLADO
ALCANTARILLADO
ALCANTARILLADO
URBANIZACION
URBANIZACION
URBANIZACION
URBANIZACION
URBANIZACION
PAVIMENTACION EN COLONIAS POPULARES
PAVIMENTACION EN COLONIAS POPULARES
ELECTRIFICACION
ELECTRIFICACION

subpro
01
01
01
02
03
04
05
01
02
03
01
02
03
04
05
01
02
01
02

nom_subpro
Reforestacin
Apoyo a la Educacin Primaria
Rehabilitacin
Ampliacin
Construccin
Conduccin de Agua
Dotacin de Agua
Rehabilitacin
Ampliacin
Construccin
Construccin de Calles
Empedrado y Adoquinamiento de Calles
Guarniciones y Banquetas
Construccin y Remodelacin de Plazas Cvicas y Jardines
Alumbrado Pblico
Concreto
Asfalto
Urbana
Rural

Introduccin a SQL

Pg . - 49

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
1

progra
S5

1
1
1
1
1
1
1
1
1
1
1
1
1

SB
SC
SC
SC
SC
SC
SD
SD
SD
SE
SE
SE
SE

1
1

SE
SF

SF

1
1

SG
SG

nom_progra
PROTECCION Y PRESERVACION
ECOLOGICA
ESTIMULOS A LA EDUCACION BASICA
AGUA POTABLE
AGUA POTABLE
AGUA POTABLE
AGUA POTABLE
AGUA POTABLE
ALCANTARILLADO
ALCANTARILLADO
ALCANTARILLADO
URBANIZACION
URBANIZACION
URBANIZACION
URBANIZACION

subpro
01

nom_subpro
Reforestacin

01
01
02
03
04
05
01
02
03
01
02
03
04

URBANIZACION
PAVIMENTACION EN COLONIAS
POPULARES
PAVIMENTACION EN COLONIAS
POPULARES
ELECTRIFICACION
ELECTRIFICACION

05
01

Apoyo a la Educacin Primaria


Rehabilitacin
Ampliacin
Construccin
Conduccin de Agua
Dotacin de Agua
Rehabilitacin
Ampliacin
Construccin
Construccin de Calles
Empedrado y Adoquinamiento de Calles
Guarniciones y Banquetas
Construccin y Remodelacin de Plazas Cvicas y
Jardines
Alumbrado Pblico
Concreto

02

Asfalto

01
02

Urbana
Rural

Introduccin a SQL

Pg . - 50

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 ejecucin 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
existirn durante la ejecucin del mismo
Los valores resultantes de la ejecucin del procedimiento sern
obtenidos de la ltima consulta especificada, siempre y cuando no se
envien a una tabla temporal
Se define una tabla temporal al anteponer el smbolo # a su nombre

Introduccin a SQL

Pg . - 51

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

Introduccin a SQL

Pg . - 52

Crear un Procedimiento (continuacin)


Ejemplo:
Crear un procedimiento que presente los proyectos y las instancias
que los proponen, norman y ejecutan para la modalidad de
inversin 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;

Introduccin a SQL

Pg . - 53

Eliminar y Ejecutar un Procedimiento


Sintaxis para eliminar
drop procedure nombre del procedimiento
Sintaxis para ejecutar
nombre del procedimiento parmetro 1, parmetro 2, parmetro n
Ejecutar el procedimiento sp_proy

Resultado
proyec
97/001067

dep_pro
00000020

97/000610

02000112

97/001069

02000112

97/000428

02000112

97/000905

00000020

97PRUEB
A2040

02000503

C-00053

00000011

C-00053A

00000011

nom_dep_pro
SECRETARIA DE
DESARROLLO
SOCIAL
GOBIERNO DEL
ESTADO
GOBIERNO DEL
ESTADO

dep_nor
00000020

nom_dep_nor
SECRETARIA DE
DESARROLLO
SOCIAL
I. C. B. C.

dep_eje
02000503

nom_dep_eje
XV AYUNTAMIENTO DE
ENSENADA

02000101

S.A.H.O.P.E.

SECRETARIA DE
DESARROLLO
SOCIAL
S. E. B. S.

02000106

SRIA. DE LA
CONTRALORIA

GOBIERNO DEL
ESTADO
SECRETARIA DE
DESARROLLO
SOCIAL
XV
AYUNTAMIENTO
DE ENSENADA

02000109

02000101

S.A.H.O.P.E.

00000020

SECRETARIA DE
DESARROLLO SOCIAL

02000503

XV AYUNTAMIENTO DE
ENSENADA

02000214

SECRETARIA DE
DESARROLLO
SOCIAL
SECRETARIA DE
ENERGIA, MINAS
E INDUSTRIA
PARAESTATAL
COPLADE

SECRETARIA DE
EDUCACION
PUBLICA
SECRETARIA DE
EDUCACION
PUBLICA

00000020

SECRETARIA DE
DESARROLLO SOCIAL

02000214

COPLADE

00000020

SECRETARIA DE
DESARROLLO SOCIAL

02000216
00000020

00000020
00000018

Introduccin a SQL

Pg . - 54

Procedimientos con Parmetros


Ejemplo
Eliminar el procedimiento sp_proy e incluir al mismo los parmetros
para modalidad de inversin, submodalidad de inversin 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
97/001067

dep_pro
00000020

97/000610

02000112

97/001069

02000112

97/000428

02000112

97/000905

00000020

97PRUEB
A2040

02000503

C-00053

00000011

nom_dep_pro
SECRETARIA DE
DESARROLLO
SOCIAL
GOBIERNO DEL
ESTADO
GOBIERNO DEL
ESTADO

dep_nor
00000020

GOBIERNO DEL
ESTADO
SECRETARIA DE
DESARROLLO
SOCIAL
XV
AYUNTAMIENTO
DE ENSENADA

02000109

SECRETARIA DE
EDUCACION

02000214

02000216
00000020

00000020
00000018

nom_dep_nor
SECRETARIA DE
DESARROLLO
SOCIAL
I. C. B. C.

dep_eje
02000503

nom_dep_eje
XV AYUNTAMIENTO DE
ENSENADA

02000101

S.A.H.O.P.E.

SECRETARIA DE
DESARROLLO
SOCIAL
S. E. B. S.

02000106

SRIA. DE LA
CONTRALORIA

02000101

S.A.H.O.P.E.

SECRETARIA DE
DESARROLLO
SOCIAL
SECRETARIA DE
ENERGIA, MINAS
E INDUSTRIA
PARAESTATAL
COPLADE

00000020

SECRETARIA DE
DESARROLLO SOCIAL

02000503

XV AYUNTAMIENTO DE
ENSENADA

00000020

SECRETARIA DE
DESARROLLO SOCIAL

Introduccin a SQL

Pg . - 55

PUBLICA

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 ejecucin 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 instruccin read

Introduccin a SQL

Pg . - 56

Extraer Datos II - Objetivos


Al concluir esta seccin estar capacitado para:
Renombrar encabezados de columnas de los datos extrados
Utilizar funciones numricas en la extraccin de datos
Definir el significado de un valor NULL
Ordenar la salida de datos

Objetivos:

En esta seccin aprender a ordenar el resultado de una consulta.


Adems aprender a trabajar con valores nulos (null) y a obtener datos
derivados del uso de operaciones aritmticas.

Introduccin a SQL

Pg . - 57

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 operacin
(-, *, /, %, 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

Introduccin a SQL

Pg . - 58

Renombrar Columnas (continuacin)


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 instruccin?
select ent_fed, proyec munici
from PROYECTO
where progra = TH

Resultado usando coma


ent_fed
18
18
18

proyec
97/C02016
97/C13013
97/C02021

munici
2
13
2

Resultado no usando coma


ent_fed
18
18
18

munici
97/C02016
97/C13013
97/C02021

Introduccin a SQL

Pg . - 59

Cadena de Caracteres en el Resultado de la Consulta


Es posible adicionar una cadena de caracteres a la clusula select
Ejemplo (cadena de caracteres)
select El proyecto es:, proyec
from PROYECTO
where proyec = '97/C02016'

Resultado
El proyecto es:
El proyecto es:

proyec
97/C02016

Introduccin a SQL

Pg . - 60

Expresiones Numricas - Operadores Aritmticos


Smbolo
+
*
/
%

Operacin
adicin
substraccin
multiplicacin
divisin
mdulo

Las operaciones pueden usarse en cualquier columna numrica


Utilizado en cualquier clusula que permita una expresin
Ejemplo (multiplicacin)
select proyec, cantid *pre_uni
from DET_CAR

Resultado
proyec
97/C07002
97/S00001

cantid * costo
252535640.476900
569824.000000

Ejemplo (divisin)
select proyec, costo_tot/12
from PROYECTO
where proyec = 97/C02016
Resultado
proyec
97/C02016

costo_tot / 12
22638.0833333

Introduccin a SQL

Pg . - 61

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 informacin no disponible
Is null debe ser utilizado para determinar valores null contenidos en
una columna; la sintaxis = null es vlida 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 operacin el resultado ser null

Introduccin a SQL

Pg . - 62

select / order by
La clusula 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 ms de una columna)
select proyec, munici
from PROYECTO
order by munici, proyec

Sintaxis

select [ distinct ] lista_select


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

Resultado:
order by proyec

Resultado:
order by munici, proyec

proyec
96/C20007
97/06016
97/08006
97/C02001
97/C02002
97/C02003
97/C02004
97/C02005
97/C02006
97/C02007
97/C02008
97/C02009
97/C02010
97/C02011
97/C02012
97/C02013
.
.

proyec
97/C02001
97/C02002
97/C02003
97/C02004
97/C02005
97/C02006
97/C02007
97/C02008
97/C02009
97/C02010
97/C02011
97/C02012
97/C02013
97/C02014
97/C02015
97/C02016
.
.

munici
20
6
8
2
2
2
2
2
2
2
2
2
2
2
2
2
.
.

Introduccin a SQL

munici
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
2
.
.

Pg . - 63

select/order by (continuacin)
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
532.4166667
589.8333333
665.5000000
692.5000000
881.1666667
884.9166667
929.4166667
956.5000000
964.8333333
988.6666667
1055.1666667
.
.

proyec
97/C17029
97/C19006
97/C03011
97/C08005
97/C02010
97/C03009
97/C14003
97/C03016
97/C02008
97/C13009
97/C06015
.
.

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

munici
5
17
17
17
17
2
2
2
.
.

Introduccin a SQL

Pg . - 64

Sumario
Renombrar columnas - select ttulo_columna = nombre_columna
] select nombre_columna ttulo_columna

[, ...

Operadores aritmticos - (+) adicin; (-) substraccin; (*) multiplicacin;


(/) divisin; (%) mdulo
Valor null - Es un valor desconocido, las operaciones con null resultan
null
Is null - Usado para determinar un valor null en una columna
Clusula order by - Ordena el resultado de una columna (ascendente,
por defecto)

Introduccin a SQL

Pg . - 65

Organizar y Resumir Datos - Objetivos


Al concluir esta seccin estar capacitado para:
Utilizar las funciones agregadas
Organizar datos en grupos (group by)
Establecer condiciones para agrupar los datos (having)

Objetivos

En esta seccin aprender a incorporar funciones


agregadas, obtener datos agrupados y la conjuncin de
ambos en las consultas.

Introduccin a SQL

Pg . - 66

Funciones Agregadas
Funcin
count(*)
count(nombre_columna)
max(nombre_columna)
min(nombre_columna)
sum(nombre_columna)
avg(nombre_columna)

Obtiene
Nmero de renglones en una tabla
Nmero de renglones en la columna
que no contengan valor null
Valor mximo en la columna
Valor mnimo en la columna
Valor total de la columna
Valor promedio de la columna

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


sum y avg operan con valores numricos
Slo un rengln es resultado (si no se utiliza la clusula group by)
Las funciones agregadas no se usan en la clusula where

Sintaxis

select nombre_funcin_agregada ( [ distinct ] expresin )


from nombre_tabla
[ where . . . condiciones ]

Introduccin a SQL

Pg . - 67

Funcin Agregada - count


count obtiene el nmero de renglones que cumplen la condicin
Ejemplo (nmero de renglones localizados)
select count (*)
from CON_EJE
Resultado

count(*)
6

Ejemplo (nmero de renglones en la columna que no tienen valor


null)
select count (con_pej)
from CON_EJE
Resultado

count (con_pej)
0

Introduccin a SQL

Pg . - 68

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
97/1800897
97/001
4
97/C17029
97/C19006
97/C03011
97/C08005
97/C02010
97/C03009
97/C14003
97/C03016
97/C02008
97/C13009
97/C06015
97/C14007
97/C18001
.
.
.
97/C03005
97/C17037
97/C16005
97/C18005
97/C17036
97/C05012
97/C17038
97/C18008
97/S00001

costo_tot
100.0000
5000.0000
5000.0000
6389.0000
7078.0000
7986.0000
8310.0000
10574.0000
10619.0000
11153.0000
11478.0000
11578.0000
11864.0000
12662.0000
12830.0000
13372.0000
.
.
.
326410.0000
432235.0000
443717.0000
444207.0000
444333.0000
552029.0000
632251.0000
693956.0000
976800.0000

Introduccin a SQL

Pg . - 69

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 nmero 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
97/C07002
97/C07002
97/C07002

can_act
68670.0000
12118.0000
20197.0000

Introduccin a SQL

Pg . - 70

Funciones Agregadas
En la clusula SELECT se puede utilizar ms de una funcin agregada
Ejemplo
select min(costo_tot), max(costo_tot)
from PROYECTO
Resultado

min(costo_tot)
100.0000

Introduccin a SQL

max(costo_tot)
976800.0000

Pg . - 71

Funciones Agregadas - distinct


distinct elimina los valores duplicados antes de ejecutar una funcin
agregada

Se puede utilizar con sum, avg y count (opcional)


No puede ser usado con min, max y count(*)
Tambin se puede utilizar con count(nombre_columna)
Se utiliza slo con nombre_columna y no con expresiones
aritmticas

Introduccin a SQL

Pg . - 72

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 funcin 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 expresin_sin_funcin_agregada [, ... ] ]

Resultado
progra
SC
SE
SJ
SK
SG
SD
UB
SF
.
.
.

costo_promedio
66207.62500000
87279.39560440
81132.82758621
44475.42857143
136395.71428571
290927.43750000
113651.93103448
195730.50000000
.
.
.

Introduccin a SQL

Pg . - 73

select/group by (continuacin)
Los grupos se pueden formar por medio de una columna o utilizando una
expresin que no contenga una funcin 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 ttulo 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 funcin agregada el resultado es correcto

Resultado
sum(can_act)
27763.0000
39954.0000
14048.0000
261573.0000
243327.0000
53210.0000
16669.0000
130662.0000
65929.0000
72990.0000
184760.0000
100985.0000
27105.0000
77889.0000
111075.0000
83002.0000
.
.
.
169135.0000
15312.0000
183002.0000

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

count(proyec
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
3
.
.
.
3
3
3

.
.
.
97/C16007
97/C10005
97/C10006

Introduccin a SQL

Pg . - 74

group by con una clusula where


La clusula where filtra los renglones antes de agruparlos
Aplica una condicin 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
18018002
18018003
18018005
18018006
18018008
18018010
18018013
18018014
18018015
18018017
18018018
18018019
18018020

sum(costo_tot)
606305.0000
692703.0000
448609.0000
445752.0000
580049.0000
359305.0000
125663.0000
273952.0000
443685.0000
3370364.0000
29937.0000
277525.0000
288576.0000

Introduccin a SQL

Pg . - 75

group by con la clusula having


La clusula having restringe los grupos
Aplica una condicin a los grupos despus de formarse
Ejemplo
Obtenga el costo promedio de los programas, adems agrpelos
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 funcin agregada

Resultado
progra
SC
SE
SE
SJ
SK
SG
SG
SD
SE
UB
SC
SD
SF
UB
SL
SC
SE
TH
UB

sub_pro
01
03
02
02
02
01
02
02
01
02
03
01
02
03
02
02
04
02
01

avg(costo_tot)
34383.88888889
122067.06250000
88240.84482759
78109.40740741
36541.80000000
126520.18181818
172606.00000000
249340.75000000
53974.20000000
94352.75000000
203166.50000000
377503.42857143
195730.50000000
148763.26666667
60213.00000000
50762.44444444
41325.00000000
271657.00000000
51605.83333333

Introduccin a SQL

Pg . - 76

Sumario
Funciones Agregadas
count - obtiene el nmero de registros que cumplen la condicin
max - encuentra el valor mximo de la columna
min - encuentra el valor mnimo 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
elemento select

select [ distinct ] lista_select


[ from tabla [, ... ] ]
[ where condiciones ]
[ group by [all] expresin_sin_funcin_agregada [, ... ] ]
[ having condiciones ]
[ order by { nombre_columna
| nmero_lista_select
| expresin } [ asc | desc ] [, ... ] ]

Introduccin a SQL

Pg . - 77

Joins - Objetivos
Al concluir esta seccin estar capacitado para:
Realizar un join basado en la igualdad
Utilizar un join incluyendo condiciones
Establecer un join como operacin de unin para varias tablas

Objetivos

Join es la operacin que permite el modelo relacional. En


esta seccin aprender los conceptos de relacionar
columnas de una a otra tabla. As como tambin a
establecer relaciones de varias tablas.

Introduccin a SQL

Pg . - 78

Joins

MUNICI
munici

ent_fed

nom_ofi

nom_com

tipo_num

...

Areas Centrales

AE

...

Delegacin

AE

...

Coplade

AE

...

18

Municipio para
Areas Centrales
Municipio para
Delegacin
Municipio para
Coplade
ACAPONETA

ACAPONETA

B1

18

18

PROYECTO
munici
1
1
2
2
2
.
.
.

ent_fed
18
18
18
18
18
.
.
.

proyec
97/C05003
97/C05004
97/C05001
97/C07002
97/C07001
.
.
.

eje_fis
1997
1997
1997
1997
1997
.
.
.

Introduccin a SQL

progra

...

SC
SE
SE
SJ
SK

...
...
...
...
...
.
.
.

fondo
1
1
1
1
1
.
.
.

.
.
.

Pg . - 79

Consultar dos tablas


MUNICI
ent_fed
18
18
18
.

PROYECTO

munici

ent_fed

9999
9998
1
.

18
18
18

97/C05004
97/C05001
97/C07002

munici
5
5
7

9999
9998
1
.

Consultar dos tablas

97/C05004
97/C05001
97/C07002

eje_fis
1997
1997
1997

TABLA RESULTANTE
munici
proyec

ent_fed
18
18
18
.

proyec

munici
5
5
7

eje_fis
1997
1997
1997

La operacin join permite extraer datos de dos o ms tablas


Join es la parte central del modelo relacional
Combina tablas en base a valores iguales de los
renglones de cada tabla

Introduccin a SQL

Pg . - 80

Pasos para establecer el join


1. Decida las columnas que necesita consultar
2. Utilice el diagrama Entidad-Relacin para observar las relaciones de
las tablas que requiera
3. En el diagrama Entidad-Relacin siga las lneas de relacin para
identificar las columnas que conectan las tablas

Introduccin a SQL

Pg . - 81

Operacin Join
PROYECTO
ent_fed
proyec
munici
eje_fis
fondo
progra
subpro
con_pro
cat_pes
nombre
tipo_cob
fase_pro
costo_tot
mod_inv
sub_inv
mod_reg
mod_eje
lineam
dep_pro
dep_nor
dep_eje
ele_bm
lug_reg

N
1

OFI_PRO
ent_fed
proyec
num_ofi
ent_emi
munici
lug_reg

1
N

OFICIO
num_ofi
ent_emi
ent_rec
lis_mun
eje_fis
fondo
tipo_ofi
fec_emi
fec_reg
emisor
recept
ofi_rel
tipo_aso
lug_reg

Las lneas de relacin ayudan a encontrar el join que conecta las


tablas

Introduccin a SQL

Pg . - 82

Operacin join (continuacin)


Join es una operacin multi-tabla.
Sintaxis
select [ tabla. ] nombre_columna, [... ]
from { tabla } { , tabla } [, ... ]
[ where condiciones ]
where: es la clusula 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 clusula 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 clusula where no


necesariamente tienen que ser datos del mismo tipo, pero deben
ser del tipo que SQL Anywhere implcitamente convierte.

Introduccin a SQL

Pg . - 83

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
COP-DPP-F1-5-0042
COP-DPP-F1-5-0042
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
...
...
COP-DPP-F1-5-0033
COP-DPP-F1-5-0074
COP-DPP-F1-5-0086
COP-DPP-F1-5-0086
COP-DPP-F1-5-0086
COP-DPP-F1-5-0086
COP-DPP-F1-5-0086
COP-DPP-F1-5-0086
COP-DDP-F2-5-1000
COP-DDP-F2-5-1000
COP-DDP-F2-5-1000

1
1
1
1
1
1
1
1
1
...
...
1
1
1
1
1
1
1
1
1
1
1

7
7
7
7
7
7
7
7
7
...
...
7
7
7
7
7
7
7
7
7
7
7

1
2
5
1
2
5
1
2
5
...
...
1
5
1
2
5
1
2
5
1
1
2

200762.0000
35429.0000
59048.0000
56442.0000
9960.0000
16600.0000
115065.0000
20305.0000
33843.0000
...
...
286433.0000
101117.0000
10412.0000
1838.0000
3062.0000
124442.0000
21960.0000
36600.0000
150000.0000
200000.0000
100000.0000

OFICIO

EST_OFI

Introduccin a SQL

Pg . - 84

Joins basados en la igualdad


Un rengln en una tabla hace referencia a un rengln en otra tabla,
porque el contenido de las columnas de cada tabla son iguales
Ejemplo
Liste las CLCs 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
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
...
...
C. FELIPE HARO FREGOSO
C. FELIPE HARO FREGOSO
C. FELIPE HARO FREGOSO
C. FELIPE HARO FREGOSO
C.P. JUAN RAMON CERVANTES GOMEZ

1800164
1800159
1800160
1800161
...
...
1800378
1800379
1800380
1800381
1800397

Introduccin a SQL

Pg . - 85

Joins basados en la igualdad (continuacin)


Ejemplo
Liste los proyectos refrendados, la inversion ejercida, avance fsico 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

Introduccin a SQL

Pg . - 86

Producto Cartesiano
Si no se especifican en el where las columnas utilizadas para relacionar
las tablas, el sistema asume que se desea obtener la combinacin 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
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
Fondo para el Desarrollo Regional y el Empleo
...
...
Fondo de Desarrollo Social Municipal
Fondo de Desarrollo Social Municipal
Fondo de Desarrollo Social Municipal
Fondo de Desarrollo Social Municipal
Fondo de Desarrollo Social Municipal
Fondo de Desarrollo Social Municipal
Fondo de Desarrollo Social Municipal
Fondo de Desarrollo Social Municipal
Fondo de Desarrollo Social Municipal

proyec
97/C05003
97/C05004
97/C05001
97/C07002
97/C07001
97/C14027
97/C02044
97/C14028
97/C02045
97/C14029
...
...
97/C05003
97/C05004
97/C05001
97/C07002
97/C14027
97/C02044
97/C14028
97/C02045
97/C14029

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

Introduccin a SQL

Pg . - 87

Joins con order by


Ejemplo (clusula adicional: order by)
Listar los oficios, su emisor, receptor y estructura financiera, as como
la cantidad que aporta cada elemento que participe en la definicin de
sta (tipo de inversin) y ordene por el nmero 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
001/97
001/97
001/97
001/97
002/97
002/97
003/97
003/97
0036/97
0036/97

emisor
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.

JALA
JALA
JALA
JALA
TEPIC
TEPIC
SAN BLAS
SAN BLAS
SANTIAGO
SANTIAGO

recept
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL

tipo_inv
1
2
1
2
1
2
1
2
1
2

cantid
193253.0000
34103.0000
184375.0000
32537.0000
63750.0000
11250.0000
27971.0000
4936.0000
18329.0000
3235.0000

OA-CPDM-130-97
OA-CPDM-130-97
OA-CPDM-130-97
OA-CPDM-130-97
OA-CPDM-130-97
OA-CPDM-130-97
S/N/97
S/N/97
S/N004
S/N004

AYTO. DE EL NAYAR
AYTO. DE EL NAYAR
AYTO. DE EL NAYAR
AYTO. DE EL NAYAR
AYTO. DE EL NAYAR
AYTO. DE EL NAYAR
SEDESOL
SEDESOL
SEDESOL (JORN.AGR.)
SEDESOL (JORN.AGR.)

SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL

1
2
1
2
1
2
1
2
1
2

11420.0000
2015.0000
2317.0000
409.0000
156290.0000
27580.0000
2731000.0000
409650.0000
243544.0000
42978.0000

DE
DE
DE
DE
DE
DE
DE
DE
DE
DE

Introduccin a SQL

Pg . - 88

Joins con group by


Ejemplo (clusula adicional: funcin 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 nmero de
oficio, emisor y receptor y ordene por nmero 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
002/97
003/97
0036/97
004/97
005-NIOS/97
005/97
006/97

AYTO. DE JALA
AYTO. DE TEPIC
AYTO. DE SAN BLAS
AYTO. DE SANTIAGO
SEDESOL(JORN.AGR.)
AYTO. DE HUAJICORI
SEDESOL
AYTO. DE SAN PEDRO
LGS.
AYTO. DE XALISCO
SEDESOL
...
...
GOB. DEL ESTADO
GOB. DEL ESTADO
GOB. DEL ESTADO
GOB. DEL ESTADO
GOB. DEL ESTADO
GOB. DEL ESTADO
GOB. DEL ESTADO
AYTO. DE EL NAYAR
SEDESOL
SEDESOL (JORN.AGR.)

SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
GOB. DEL EDO.
SEDESOL
SEDESOL

444268.0000
75000.0000
32907.0000
21564.0000
2247432.0000
563580.0000
566609.0000
6823.0000

SEDESOL
SEDESOL
...
...
AYTO. DEL NAYAR
AYTO. DEL NAYAR
AYTO. DEL NAYAR
AYTO. DEL NAYAR
AYTO. DEL NAYAR
AYTO. DE RUIZ
AYTO. DE SAMAO
SEDESOL
SEDESOL
SEDESOL

412992.0000
2214413.0000
...
...
971757.0000
965967.0000
1028593.0000
30795.0000
82369.0000
12384.0000
24942.0000
200031.0000
3140650.0000
286522.0000

0070-DPD/97
020/97
...
...
COP-DPP-FI-5-0069
COP-DPP-FI-5-0081
COP-DPP-FI-5-0099
COP-DPP-FI-5-0102
COP-DPP-FI-5-0115
COP-DPP-FI-5-0128
COP-DPP-FI-5-0148
OA-CPDM-130-97
S/N/97
S/N004

Introduccin a SQL

Pg . - 89

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
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta

num_ofi
020/97
S/N/97
004/97
S/N004
005/97
086-01/97
0070-DPD/97
COP-142/97

...
...
Aprobacin
Aprobacin
Aprobacin
Aprobacin

...
...
25-541711-F2-0032
25-541711-F2-0033
COP-DPP-FI-0160/97
COP-DPP-F1-5-0188

emisor
SEDESOL
SEDESOL
SEDESOL(JORN.AGR.)
SEDESOL (JORN.AGR.)
SEDESOL
SEDESOL (EMPLEO)
AYTO. DE XALISCO
AYTO. DE BAHIA DE
BANDERAS
...
...
SEDESOL
SEDESOL
GOB. DEL ESTADO
GOB. DEL ESTADO

Introduccin a SQL

recept
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
AYTO. STA. MA. ORO
SEDESOL
SEDESOL
...
...
AYTO. DE XALISCO
AYTO.DE JALA
AYTO. DE SAMAO
AYTO. DE AHUACATLAN

Pg . - 90

Joins con condiciones adicionales


(en la clusula where)
Ejemplo (condicin 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
COP-DPP-F1-5-0030
COP-DPP-F1-5-0026
COP-DPP-F1-5-0026
COP-DPP-F1-5-0026
COP-DPP-F1-5-0026
COP-DPP-F1-5-0036
COP-DPP-F1-5-0015
...
...
25-541711-F2-0030
25-541711-F2-0030
25-541711-F2-0031
25-541711-F2-0031
25-541711-F2-0031

emisor
GOB. DEL
GOB. DEL
GOB. DEL
GOB. DEL
GOB. DEL
GOB. DEL
GOB. DEL
...
...
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL

ESTADO
ESTADO
ESTADO
ESTADO
ESTADO
ESTADO
ESTADO

recept
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.
...
...
AYTO.
AYTO.
AYTO.
AYTO.
AYTO.

DE IXTLAN DEL RIO


STA. MA. DEL ORO
STA. MA. DEL ORO
STA. MA. DEL ORO
STA. MA. DEL ORO
AMATLAN DE CAAS
AMATLAN DE CAAS
DE
DE
DE
DE
DE

ACAPONETA
ACAPONETA
EL NAYAR
EL NAYAR
EL NAYAR

Introduccin a SQL

tipo_inv
2
1
2
5
2
2
2
...
...
2
2
2
1
2

cantid
5240.0000
7584.0000
1338.0000
2231.0000
7035.0000
8658.0000
3012.0000
...
...
1470.0000
3966.0000
2015.0000
2317.0000
409.0000

Pg . - 91

Joins con ms de dos tablas


En la clusula 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 clusula where se deben listar todas las condiciones necesarias
para conectar las tablas.
No es necesario desplegar la columna utilizada para unir ms de dos
tablas.
Ejemplo.
Listar la descripcin del tipo de oficio, el oficio, emisor, receptor y la
estructura financiera (tipo de invesin 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
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
Propuesta
...
...
Aprobaci
n
Aprobaci
n
Aprobaci
n
Aprobaci
n
Aprobaci
n

num_ofi
001/97
001/97
001/97
001/97
002/97
002/97
003/97
003/97
0036/97
0036/97
004/97
...
...
COP-DPP-FI-5-0128

emisor
AYTO. DE JALA
AYTO. DE JALA
AYTO. DE JALA
AYTO. DE JALA
AYTO. DE TEPIC
AYTO. DE TEPIC
AYTO. DE SAN BLAS
AYTO. DE SAN BLAS
AYTO. DE SANTIAGO
AYTO. DE SANTIAGO
SEDESOL(JORN.AGR.)
...
...
GOB. DEL ESTADO

recept
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
SEDESOL
...
...
AYTO. DE RUIZ

tipo_inv
1
2
1
2
1
2
1
2
1
2
1
...
...
1

cantid
193253.0000
34103.0000
184375.0000
32537.0000
63750.0000
11250.0000
27971.0000
4936.0000
18329.0000
3235.0000
199359.0000
...
...
10526.0000

COP-DPP-FI-5-0128

GOB. DEL ESTADO

AYTO. DE RUIZ

1858.0000

COP-DPP-FI-5-0148

GOB. DEL ESTADO

AYTO. DE SAMAO

13769.0000

COP-DPP-FI-5-0148

GOB. DEL ESTADO

AYTO. DE SAMAO

2431.0000

COP-DPP-FI-5-0148

GOB. DEL ESTADO

AYTO. DE SAMAO

8742.0000

Introduccin a SQL

Pg . - 92

Joins con ms de dos tablas (continuacin)


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 CLCs 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
1800012
1800012
1800012
1800012
1800012
1800164
1800159
1800160
1800161
1800162
1800163
1800183
1800108
1800003
1800003
1800003
1800003
1800105
1800106
1800107
1800109
1800110
1800153
...
...
1800378
1800379
1800380
1800381

benefi
C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE
C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE
C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE
C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE
C. JOSE FELIX TORRES HARO,\X0D\X0APRESIDENTE
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR F.
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIAR FREGOSO
C. SALVADOR AGUIR FREGOSO
C. SALVADOR AGUIAR FREGOSO
PROFR. AGUSTIN AGUILAR IBARRA
...
...
C. FELIPE HARO FREGOSO
C. FELIPE HARO FREGOSO
C. FELIPE HARO FREGOSO
C. FELIPE HARO FREGOSO

Introduccin a SQL

MUNICIPAL
MUNICIPAL
MUNICIPAL
MUNICIPAL
MUNICIPAL

proyec
97/C17028
97/C17029
97/C17030
97/C17031
97/C17032
97/C03019
97/C03013
97/C03017
97/C03016
97/C03015
97/C03018
97/C03020
97/C03005
97/C03001
97/C03002
97/C03006
97/C03007
97/C03004
97/C03009
97/C03011
97/C03003
97/C03008
97/C02021
97/C19029
97/C19028
97/C19027
97/C19030

Pg . - 93

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 mltiples tablas - cuando n tablas son utilizadas con el join, n1 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

Introduccin a SQL

Pg . - 94

Subconsultas - Objetivos
Al concluir esta seccin estar capacitado para:
Usar una subconsulta como un mtodo alternativo de la clusula join
Usar subconsultas para funciones adicionales de la clusula join

Objetivos

En esta seccin aprender a consultar las bases de


datos usando selects anidados (subconsultas).

Introduccin a SQL

Pg . - 95

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. 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
18
18
18

proyec
97/S00221
97/S00095
97/S00001

munici
14
14
4

eje_fis
1997
1997
1997

fondo
2
2
2

progra
TH
SS
SD

subpro
02
06
01

con_pro
00
00
00

cat_pes
2
0
0

18

97/S00016

998

1997

SS

08

00

18
18
18
18

18
16
14
7
...
...
8

1997
1997
1997
1997
...
...
1997

2
2
2
2
2

TB
TB
TB
TB
...
...
TF

01
01
01
01
...
...
04

00
00
00
00
...
...
00

0
0
0
0

18

97/S00053
97/S00054
97/S00055
97/S00056
...
...
97/S00287

18

97/S00282

1997

UB

03

0A

18

97/S00281

1997

UB

03

0A

18

97/S00280

1997

UB

03

0A

18

97/S00278

1997

UB

03

0A

18

97/S00291

1997

TE

01

00

18

97/S00293

1997

TE

01

00

18

97/S00289

1997

TF

01

00

18

97/S00290

1997

TF

01

00

...
...

...
...

Introduccin a SQL

...
...
2

nombre
DESPIEDRE MANUAL
EQUIPAMIENTO DE COCINA
REHABILITACION DEL
SISTEMA DE
ALCANTARILLADO SANIT.
GASTOS DEL GRUPO
OPERATIVO (JORNALEROS
AGRICOLAS)
TORTILLERIA
TORTILLERIA
TORTILLERIA
TORTILLERIA
...
...
PATIOS ASOLEADEROS PARA
EL CAFE
MACHETEO DE CAMINO DE
ACCESO
MACHETES DE CAMINO DE
ACCESO
CONSERVACION DEL
CAMINO DE ACCESO AL
POBLADO
RAHABILITACION DEL
CAMINO DE TERRACERIA
REHABILITACION DE LIENZOS
EN PAECELAS Y POTREROS
REHABILITACION DE LIENZOS
EN PARCELAS Y POTREROS
REHABILITACION DE
HUERTOS DE DURAZNO
REHABILITACION DE
HUERTAS DE DURAZNO

Pg . - 96

18

97/S00288

1997

TE

01

00

REHABILITACION DE LIENZOS
EN PARCELAS Y POTREROS

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
18
18

proyec
97/S00221
97/S00095

munici
14
14

eje_fis
1997
1997

fondo
2
2

progra
TH
SS

subpro
02
06

con_pro cat_pes
00
2
00
0

18

97/S00001

1997

SD

01

00

18

97/S00016

998

1997

SS

08

00

18
18
18
18
18

97/S00053
97/S00054
97/S00055
97/S00056
97/S00057

18
16
14
7
7

1997
1997
1997
1997
1997

2
2
2
2
2

TB
TB
TB
TB
TB

01
01
01
01
01

00
00
00
00
00

0
0
0
0
0

00

2
2

TB
...
...
TB
TF

01

7
7

1997
...
...
1997
1997

18
18

97/S00058
...
...
97/S00059
97/S00289

01
01

00
00

0
2

18

97/S00290

1997

TF

01

00

18

97/S00288

1997

TE

01

00

18
...
...

...
...

...
...

...
...

Introduccin a SQL

...
...

...
...

nombre
DESPIEDRE MANUAL
EQUIPAMIENTO DE
COCINA
REHABILITACION DEL
SISTEMA DE
ALCANTARILLADO S.
GASTOS DEL GRUPO
OPERATIVO (JORNALEROS
AGRICO.
TORTILLERIA
TORTILLERIA
TORTILLERIA
TORTILLERIA
PANADERIA
(TERMINACION)
TIENDA DE ABASTO
...
...
TORTILERIA
REHABILITACION DE
HUERTOS DE DURAZNO
REHABILITACION DE
HUERTAS DE DURAZNO
REHABILITACION DE
LIENZOS EN PARCELAS Y
POTREROS

Pg . - 97

Introduccin a SQL

Pg . - 98

Subconsulta - Vista General


Una subconsulta es una clusula select, usada como una expresin

que forma parte de otra clusula select, update, insert o delete


La subconsulta (select anidado) al ser evaluada substituye su

resultado dentro de la clusula exterior de consulta where


Las subconsultas son usadas:
Porque algunas veces son ms fcil de entender que un join, el
cual lleva a cabo algn propsito
Para efectuar algunas tareas que en otro caso sera imposible
realizar utilizando un join (por ejemplo usar una funcin agregada)

Sintaxis completa
de subconsulta

select lista_select
[ from { tabla } [ ,...] ]
[ where condiciones ] {operador_de_comparacin}
( select lista_select_subconsulta
[ from { tabla } [ ,...]
[ where condiciones ] )
Notas de la sintaxis
Slo las columnas

de la lista_select en la primera
declaracin select son desplegadas

La lista_select_subconsulta puede incluir slo un nombre de

columna, ms de una columna no se evaluar

Introduccin a SQL

Pg . - 99

Restricciones de Subconsultas
Si la clusula 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 clusulas order by, compute o

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

clusula group by

Introduccin a SQL

Pg . - 100

Niveles Mltiples de Anidacin

Una subconsulta puede contener una ms subconsultas


No existe un nivel mximo 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
18

proyec
97/S00139

munici
2

eje_fis
1997

fondo
2

progra
SS

subpro
06

con_pro cat_pes
00
0

18

97/S00020

1997

S5

07

00

18

97/S00021

1997

S5

07

00

18

97/S00022

1997

S5

07

00

Introduccin a SQL

nombre
ORGANIZACION PARA EL
CONSUMO (GRUPOS
OPER.)
PRODUCCION DE 50,000
PLANTAS
MANTENIMIENTO DE
50,000 PLANTAS
PLANTACION Y
NOVILIZACION SOCIAL,
CARGA Y DESCARGA DE
15,000 OPERATIVOS

Pg . - 101

Subconsultas que regresan Mltiples Renglones


Si la subconsulta regresa ms de un valor, debe usar in en la clusula

where de la consulta exterior en lugar de =


Ejemplo
Liste los oficios que se encuentran en aprobacin 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
COP-DPP-F1-5-0042
COP-DPP-F1-5-0042
COP-DPP-F1-5-0042
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0004
COP-DPP-F1-5-0033
COP-DPP-F1-5-0033
COP-DPP-F1-5-0033
...
...
25-541711-F2-0033
25-541711-F2-0033
25-541711-F2-0033
25-541711-F2-0033
COP-DPP-FI-0160/97
COP-DPP-FI-0160/97
COP-DPP-F1-5-0188
COP-DPP-F1-5-0188

tipo_inv
1
2
5
1
2
5
1
2
5
1
2
5
...
...
1
2
1
2
2
1
1
2

Introduccin a SQL

cantidad
200762.0000
35429.0000
59048.0000
56442.0000
9960.0000
16600.0000
115065.0000
20305.0000
33843.0000
286433.0000
50547.0000
84247.0000
...
...
193253.0000
34103.0000
184375.0000
32537.0000
17159778.0000
97238744.0000
190140.0000
33554.0000

Pg . - 102

Subconsultas que regresan Mltiples Renglones


(Continuacin)
Ejemplo
Liste la clave de los proyectos, nombre y costo total de los especficos 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
97/C8012
97/08006
97/S00056
97/S00062
97/S00107
97/V17089
97/S00178
97C/08024
97/S00003

nombre
CONSTRUCCION CERCO PERIMETRAL EN BENEFICIO HUMEDO DE CAFE
EMPEDRADO DE CALLES COL. NAVARREO
TORTILLERIA
FRUTERIA Y TIENDA DE ABASTO
MEJORAMIENTO DE TECHOS, PISOS Y MUROS
BECAS NIOS ESC. PRIMARIA LEONA VICARIO T. V.
HUERTO COMUNITARIO
ESC. PRIM. " 20 DE NOVIEMBRE "
CONSTRUCCION DE PLANTA DE TRATAMIENTO

Introduccin a SQL

costo_tot
68590.0000
73830.0000
45865.0000
64310.0000
60000.0000
21712.0000
1245.0000
22656.0000
1817200.0000

Pg . - 103

Subconsultas con Operadores de Comparacin


Las subconsultas pueden realizar algunas tareas que las clusulas join
no pueden hacer
Una clusula where en una declaracin select no puede incluir una
funcin agregada
Una subconsulta puede incluir una funcin agregada
Ejemplo (mayor que y una funcin agregada)
Liste los proyectos, sus nombres y costo total de los que se
encuentran en aprobacin; adems 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 ms de un valor para un
operador de comparacin

Sintaxis

select lista_select
[ from { tabla } [,...] ]
[ where expresin { = | != | > | >= | < | <= } [ any | all ] ]
(subconsulta)

Resultado
proyec
97/C07001
97/C13005
97/C13007
...
...
97/C02045
97/C14029

nombre
SISTEMA DE PURIFICACION DE AGUA ESC. PRIM. MIGUEL HIDALGO Y COSTILLA
AMPLIACION RED ELECTRICA BARRIO DE EN MEDIO
AMPLIACION RED ELECTRICA BARRIO DE ABAJO
...
...
DESAYUNOS ESCOLARES ESC. PRIMARIA IGNACIO ZARAGOZA T.V.
ESCUELA PRIMARIA JUAN ESCUTIA

Introduccin a SQL

costo _tot
27105.0000
27763.0000
14048.0000
...
...
18548.0000
22656.0000

Pg . - 104

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 instruccin indica Error: Subquery cannot return more than one result.

Subconsultas con Operadores de Comparacin


(Continuacin)
Ejemplo (dos condiciones)
Liste los proyectos que estn actualizados cuyo costo total sea menor
al promedio de los costos totales de todos los proyectos (Propuesta,
Actualizacin, Aprobacin, etc.)
select * from proyecto
where fase_pro =
(select fase_pre from fase_pre
where descri = Autorizacin) and costo_tot <
(select avg(costo_tot) from proyecto)

Resultado
ent_fed
18

proyec
97/08006

munici
8

eje_fis
1997

fondo
1

progra
SE

subpro
02

con_pro cat_pes
00
0

18

97/C8012

1997

TF

04

00

18

97/S0005
6
97/S0006
2
97/S0010
7
97/S0017

1997

TB

01

00

1997

TB

01

00

15

1997

SH

01

0B

12

1997

SS

08

00

18
18
18

Introduccin a SQL

nombre
EMPEDRADO DE CALLES
COL. NAVARREO
CONSTRUCCION CERCO
PERIMETRAL EN
BENEFICIO ...
TORTILLERIA
FRUTERIA Y TIENDA DE
ABASTO
MEJORAMIENTO DE
TECHOS, PISOS Y MUROS
HUERTO COMUNITARIO

Pg . - 105

18
18

8
97C/0802
4
97/V1708
9

1997

SB

01

00

17

1997

SB

01

00

ESC. PRIM. " 20 DE


NOVIEMBRE "
BECAS NIOS ESC.
PRIMARIA LEONA VICARIO
T. V.

Sumario
Una Subconsulta - es una clusula select, usada como una

expresin en parte de otra clusula select, update, insert, or delete.


El resultado de la subconsulta - sustituye valores dentro de la

consulta exterior

Subconsulta - debe contener una o ms subconsultas

Sintaxis

select lista_select
[ from { tabla } [,...] ]
[ where condicin ] {operador de comparacin}
( select lista_select_subconsulta
[ from { tabla } [ ,... ]
[ where condiciones ]
[ group by expresin [,...] ]
[ having condicin ]
[ order by { { tabla }. ] columna | nmero_lista_select
| expresin } [ asc | desc] [,...] ]
[ compute rengln ( columna ) [ ,... ] ]
[ by columna [ ,... ] ] )

Introduccin a SQL

Pg . - 106

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