Está en la página 1de 188

Bsse de Datos Laborutorio

C I BERTEC

Basesde Datos
abontorio)
Hans Ch. GuevaraParker

2004
BASE DE DATO E . LABO RATO NI O

lnd¡e

Presentación

Red de contenidos

Sesionesde aprendizaje

SESION 1 El IrcnguajeSQL- Odenado aimplemenación 9


SESIÓN 2 Creaciónde Basede Datos 15
SESIÓN 3 Creación de Tablas e integridad relación 25
SESIÓN 4 Implementación de Consulas Sencillas 37
SESIÓN 5 Cteación y mantenimiento de índices 47
SESIÓN 6 Pdmem Semanade PrácticasÚnicas
SESIÓN 7 Primera Pricicr de Laboratorio
SESIÓN 8 Ingreso, Modificación y Eliminación de datos 53
SESIÓN 9 Consulas Condicionales(If eústs, and, >, (, =, (), 63
Between,In, Like, and, Distinct)
SESIÓN 10 FuncionesAgrupadasy búsquedade grupos 89
SESIÓN 11 Consulas Multiablas 101
SESIÓN 12 SegundaSemanade PrácticasÚtti."t
SESIÓN 13 SegundaPrictca de Laboratodo
SESIÓN 14 Cteaciónde Visas
Sub Consulas anidadasy cortelacionadas, 113
SESIÓN 15 Continuaciónde Visas, IJso del Erwin 1,27
SESIÓN 16 ProgramaciónTransact-SQL / Instruccionesy ejemplos 739
SESIÓN 17 Creación de ProcedimientosAlmacenadosy Triggers 161
SESIÓN 13 Tercera Ptáctica de Labomtorio
SESIÓN 19 Presenaciónde proyectos
SESIÓN 20 TerceraSemanade PtácticasÚnicas

GIBENTEG caRRERADEcou?urActóra I l¡rFonn^flcA


lAsE DE DATO E. LABO RATO NI O

El curso de Laboratorio de Base de Datos permitirá al estudiante comprsnder y

ttiüzar las característicasy beneficios del SQL Server. Nos mostrará paso a paso,

como implementar bases de datos, que resultará de grztnaywdapata eI desartollo de


otras aplicaciones.

El curso contatá con veinte sesiones,a taz6n de una pot semana. En las clases se

promoverá Lapamcrpación constante de los alumnos con eiercicios de distinto nivel,


con la finalidad de lograr la comprensión del curso en forma detallada. Asimismo, a
través de tareas domicitiarias el alumno refotzarálas clases reahzadasen el salón.

Los temas se desarrollarán en forma didáctica y dinámica, incidiendo en el asPecto

p,ráctico-analítico, pzr:a" lo cual se hari una combinación equitativa de los

conocimientos teóricos con las aplicaciones realizadasen laboratorio.

C-TEG GARRERA DE GONPUÍAG¡ÓX E IXFORTATIGA


BASE D E DATO A . LABO RATO RI O

Reddeconüenldos

DML
trnguaje deD¿tos
deManipulación

DATAB,ASE DATABASE DATABASE FROM


TABI.E TABLE TABLE WHERE
FUNCTION FUNCTION FUNCTION GROUPBY
PROCEDURE PROCEDURE PROCEDURE HAVING
TRIGGER TRICGER TRICGER ORDERBY
VIEW VIETT VIEIüI
INDEX INDEX
DEFAULT DEFAULT
RUI,E RULE

caRRERADEootpurAcrón e rrFoRtATtcA
BASE DE DATO S ' LABO RATO RI O

El l€nguqfeSOLSener-
Orbrrhdoalm@

TEMA $

En esta sesión veremos una panorámicageneml del SQL Senrer,ademásilustraremos


brevementelas canctetísticasybeneficiosmásimpotantes quenos propotcionaSQL.

ESPECÍFICOS
OBJETTVOS

o Identificar la üsión geneml del cuso.

o Comprendet la Importancia de la existencia de las Basesde datos

CONTENIDO

o Brcve historiadel SQL

o Por que existenl¿sbasesde datos?

o Identificarlasvenajasipe nos proporcionael SQL.

DEGolpuraclón e nronuÁncl
cARRERA
lo

1.. DEFINICIÓN

SQL Server es un sistema administrador para Bases de Datos relacionalesbasadasen la

arquitectura Cliente / Servidor (R.DBMS) que usa Transact-SQL para mandar peticiones

entre un cüente y el SQL Server.

- Relalionel Daleb€ee

Cliente

2. ARQUITECTURA CLIENTE / SER\TDOR

la carga de tabajo en tareas


SQL Server usa la arquitectura Cliente / Servidor p^r^ sepaLr^r

que coffan en computadoras tipo Servidor y tareas que corran en computadoras tipo

Cüente:

El Cüente es responsable de la parte lóg¡ca y de presentar la información al usuario.


".L
Generalmente, el cliente corre en una o más computadoras Cliente, aunque también

puede correr en una comPutadoraServidor con SQL Servet.

o.!oSQL Serveradministra Basesde Datos y distribuye los recutsosdisponiblesdel servidor


(talescomo memoria, opetacionesde disco, etc) entre las multiples peticiones.

La arquitectura Cliente /Servidor permite desarrollar aplicaciones pan reahzar en una

variedadde ambientes.

DEcompurActór e ltlronmÁt¡cl
cARRERA GIBERTEG
BASE DE DAT OS - L ABORAT OR¡ O

3. SISTEMA ADMINISTRADOR PARA BASES DE DATOS RELACIONALES


G,DBMS)

El RDBMS es iesponsablede:

tr
Mantener las relaciones entre la información y la Base de Datos.
tr
Aseguratse de que la información es aimacenadacoffectamente, es decir, que las reglas

que definen las relacionesente los datos no seanüoladas.


tr
Recuperar todalainformación en un punto conocido en caso de que el sistema falle.

4. TRANSACT - SOL

Éste es una versión de SQL (Structured Qr.ry Languaje) usado como lenguaje de
programaciórrpar^ SQL Server. SQL es un conjunto de comandos que permite especificar

la información que se desearestaurar o modificar. Con Transact - SQL se puede tener

accesoa la información, re¡1i22¡búsquedas, y administrar sistemasde Bases de


^cfrJahzaf
Datos Relacionales.

f
t" Aunque se denomine SQL, debido a que el ptopósito general es recuperar datos,

realmente SQL nos brinda muchas más opciones, en realidad es una heramienta mucho

más interesante. Podemos utilizar más funciones que el DBMS (Database Management

System - Sistemade Gestión de Base de Datos) nos proporciona. Por ejemplo:

4.1. Definición de datos

Permite al Usuario definir la estructura y otgmnzación de datos almacenados y de las

relacionesentre ellos.

4.2. Recuperaciónde Datos

Permite al Usuario o a un progfam^, recuperar datos almacenadosde la base de datos y

utilizarlos.

CIBERTEC caRRERADEcoiltpurActóil E ¡¡rronmÁncl


4.3. Manipulación de datos

Permite al usuario o a un ptogr rfla,^cfiahzr la base de datos, añadiendo nuevos datos,

eliminando datos y modificando datos almacenados'

4.4. Control de acceso

Normalmente utilizado para restringir la capacidad de un usuaria Par^ recuPerar, añ^dlr

y modificar datos, protegiendo así los datos almacenados frente a accesos no

autorizados.

4.5. Compartición de datos

Se utiliza pam coordinar la Compartición de datos pof Parte de usuarios concufrentes'

asegurandoque no interfieran unos con otros.

4.6. Integidad de datos

SQL define restricciones de integridad en la base datos, ptotegiéndol^ contl:^

comrpciones indebidaso actnJtzactonesinconsistentes.

Es decir, ahotapodemos darnos cuenta que SQL es un lenguaie que tiene un completo

dominio de una Base de Datos, con ayuda de un sistemade gestión de Base de Datos.

A continuación detallaremos algunos papelesimportantes que iuega el SQL'

a. SQL es un lenguajede consultasInteractivas

b. SQL es un lenguajede programación de basede datos

c. SQL es un lenguaje de Administración de Base de datos

d. SQL es un knguaje cliente - Servidor

SQL es un lenguajede basede datos distribuídas.

f. SQL es un lenguaiede pasarelade Basede datos

GARRERA DE COMPUTACIó|{ E ITTTONUATICI CIBERTEC


BASE D E DAT OS. L ABORAT ORIO

5. ALGUNAS \E,NTATAS

o Asignación Dinámica de Recursos.La asignación ünámica de recursosdel SQL Sewet

es una característica muy útil. La asignación dinámica de recursos permite Ia

escalabilidaddel uso del disco y memoria p^t^ a las necesidadesde la base


^comodarse
de datos en cada momento. Esta flexibiüdad permite un mejor rendimiento y simplifica

la administración del software. La eliminación de dispositivos también es una ventai^

añadida.

o El Soporte 9x para \X/indows. El soporte para la plataforma Wingx aumenta

significativamentela base de aplicacionesposiblespan el SQL Server 7.0. Al usarlo con

la repücacióndistribuída de fusión del SQL Server 7.0, el soporte Wingx permite que las

empresascon sucursalespequeños que incluyen sólo unos pocos sistemas!7in9x en

cada oficina remota aprovechen de las aplicacionesdel Servidor SQL a ravés de la

empfesaentefa.

o I-os Serviciosde Transformación de Datos @TS).La nueva característicaDTS del SQL

Server7.0 es una poderosaherramientay muy flexible. Aunque Microsoft la ha diseñado

pensando en faciütat el almacenamientode datos, la utilidad del producto no acabadh.

DTS simpüftca la importación y la exportación de datos entre dos bases de datos

compatibles con OT tr. DB. DTS también genera scripts Visual Basic ffBScript) que se

puede ejecutar desde el WSH CX/indows Scripting Host) u otros entomos COM

(Component Object Model).

6. ALGUNAS DES\G,NTATAS:

o La instalación y operación requiere del Intemet Explorer (IE) 4.0. k guste o no, la
tnterfaz del navegadorde rX/ebsigue siendo cadavez más habitual, y su uso es lo ultimo

en desarrollo de interfaces.Podemos entender por qué Nficrosoft quiete usado con el

servidor SQL, ya que también es un produce de la compañía.Sin embargo,no tenemos

ninguna utiiidad para un navegadot de web en nuestro servidor de la basede datos, y su

instalaciónes un problema que posiblemente,a más de uno le gustaríaevitar.

CIBERTEC caRRERADEcoupurActón e tNFoRMAflcA


l4

Fara remrdar

Recuerde que SQL Servet es un sistema de administración de bases de datos telacionales

S.DBMS: Relational Database Management System) Cliente/Servidor de alto rendimiento y


se ha diseñado paa admitir un elevado volumen de prccesamiento de transacciones (como

l¿s de entrada de pedidos en línea, inventario, facturación o conabilidaQ, además de

aplicaciones de almacén de datos y de ayuda en la toma de decisiones (como aplicaciones de

anáüsisde ventas) sobte redes basadasen llindows NT.

caRRERADEcompurac¡ó¡ e rxronmÁrlcl
BASE D E DAT OS . L ABORAT ORIO

Grcaciotr de Bases de Datos

TEMA

o En esta sesión aprenderemos a manejat el Administador Colporativo tanto como el

Anahzador de Consultas, de manera general. Esa sesión nos será de gan utilidad para el

desarrollo de las siguientes sesiones. Además listaremos rápidamente todos los

componentes del SQL Server paratener una visión general de las siguientes sesiones.

OBJETIVOSESPECÍFICOS

o TJnlizarlos procedimientos necesariospara crear un Base de Datos usando el Administrador

Coqporativo o el AnalDador de Consult¿s

CONTE,NIDO

o Conociendo el Administradot Colporativo.

o Conociendo el Anñzador de Consulas'

o Componentes del SQL

CIBERTEG caRRERADEcofitpuracÉil E INFoRMATIcA


1.. ¿QUÉ ES UNA BASE DE DATOS?

Una base de datos es un contenedor de objetos relacionadosenffe sí, de manera lógca y


,coherente. Estos objetos incluyen los orígenes de datos, dimensiones compartidas y

funciones de basede datos. Si estosobjetos van a compartirse entre varios cubos,los objetos

y los cubos deben encontrarsedentro de la misma basede datos.

2, APRENDIE,NDO A CREAR UNA BASE DE DATOS

Para crezr una base de datos, determine el nombre de la base de datos, el ptopietario (el

usuario que crea la base de datos), su tamaño y los atchivos y grupos de archivos uilizados

para alrnacenaAa.

Antes de crear una basede datos, considerelo siguiente:

a) De forma predeterminada,tienen permiso p^t^ crc^nuna base de datos las funciones

fijas del servidor sysadmin y dbcreator, aunque se puede otorgar permisos a otros

usuaflos.

b) El usuario que creala basede datos se conúerte en su propietario.

.) En un servidor pueden crearsehasta32.767basesde datos.

d) El nombre de la base de datos debe ajustarse a las reglas establecidaspara los

identificadores.

Seutilizan tres tipos de archivos pan dmacen r un basede datos:

2.1. Archivos pdncipales

Estos archivos contienen la información de inicio panla base de datos. Este archivo se

uüza también pan almacenar datos. Cada base de datos tiene un único archivo

pritr.tprl.

2.2. Arctttvos secundarios

Estos archivos contienen todos los datos que no caben en el archivo de datos principal.

No es necesario que las bases de datos tengan archivos de datos secundarios si el

caRRERADEcompurAc¡ón e txronmÁrtcl GIBERTEC


BASE DE DAT OS. L ABORAT ORIO

archivo principal es lo suficientementegtande como para contener todos los datos.

Algunas basesde datos pueden ser muy grandes y necesitarvarios archivos de datos

secundarioso udtzar archivos secundariosen unidadesde disco distintas.de modo que


los datos esténdistdbuidos en varios discos.

2.3. Registro de transacciones

Estos archivos contienen la información de registro que se uiüza para recuperar labase

de datos. Debe haber al menos un archivo de registro de transaccionespara cada base

de datos, aunque puede habet más de uno. El tamaño mínimo para un archivo de

registro es 512 kilobytes ((B).

Importante: L,os archivos de datos y de registro de tansacciones de Microsoft@ SQL

ServerrM2000 no deben colocarseen sistemasde atchivos comprimidos ni en una unidad de

red temota, como por ejemplo un directorio de red compartido.

Cuando se ctea una base de datos, todos los archivos que la componen se llenan con ceros

que suplantan los datos de los archivos ya eliminados que hubieran quedado en el disco.

Aunque esto provoque que el proceso de creación de los archivos seamás largo, así se eüta

que el sistema operativo tenga que llenar los archivos con ceros cuando se escriban por

primera vez datos en los archivos durante las operacioneshabitualescon la base de datos.
Así se mejora el rendimiento de las opemcionescotidianas.

Es recomendable especificar el tamaño máximo de crecimiento del archivo. De ese modo se

evita que se agote el espacio disponible en el disco il agrcgardatos. Para especificarun

tamaño máximo para el atchivo, utilice el parámetro MAXSIZE de la instrucción CREATE

DATABASE o bien la opción Iimitzr crecimiento de archivo a @aB) cuando utilice el


cuadto de diálogo Propiedades del Administrador colpotativo de SQL Server para creat la

basede datos.

Después de crear una base de datos, se recomienda cteat una copia de seguridadde la base

de datos master.

CIBERTEC CARRERADE coMPuTAcIóN E ¡xponuÁr|cI


3. CóltO CREAR UNA BASE DE, DATOS (IJSANDo EL ADNUNISTRADSR

CORPORATTVO)

3.1,. Paracrearuna basede datos:

3.1.1.Expanda un grupo de servidotesy, a continuación,un servidor'

'erMI
j Raízde !a co_¡1¡_o]a_
a€ffi
H ft Grupode 5QL5ervet
H& (windows
NT)
dedato¡
fulfrf eases
6-fi Servicios de datos
de transformacidn
H:.lll Administración
[] ül Duplicación
* ü3 sequridad
E¡ f,l Serviriosde comPatibilidad
+: 3 NetaDataServices

de datos y, a
3.1,.2.Hagaclic con el botón secundariodel mouse (ratón) en Bases
continuación. en Nueva basede datos.

CIBERTEC
CARRERA DE COMPUTACIóN E INFORMÁTICA
BASE D E DAT OS. L ABORAT ORIO

3.1.3.Escribaun nombre r,anla nuevabasede datos.

gs .iq' + #, BB le l+[l;\1tuI ffit


Arhd I i,eoserdc dafos I ebmentcs
I

3 Rai¡de la consola
hl S Servidores Microsoft
5
j
ü S aupo de5QL5err Generd | Éuchivos
dedarmI nruarr"rü:trl**J"*
H fiD (windows
m # $E#*d6tl* Hsnke:
il.f,f Servicios d W
+J.il]l gdm¡n¡stra Sesedtdel¡u$
itl t--i Lrupllcaclor g*"4o,
rl [3 sesuridad
ii:.ft Servicios d . Prouetw.er
fr- É3 MetaData '
:FechedecreaciSn
*'
ladiéiu
.-.-¡ ,
,::,:::::::t::::::::::=':.1::::--:::.:-:::::::.
:r,..fiiii@ra#-:: lt! t
f.:

t€C'ia f'S#é*

Observación: Los archivos de registro de transaccionesy de la basede datos principal se

crean utilizando el nombre de base de datos que ha especificado como prefijo, por

ejemplo, newdb-Data.mdf y newwdb-Log.1df. Los tamaños iniciales de estos archivos

son los mismos que los tamaños predeterminados especificadospan \a base de datos

model. El archivo principal contiene las tablasdel sistemaparala basede datos.

L Pan cambiar los valores predeterminados del nuevo archivo de base de datos

principal, h^g clic en la ficha General. Pata cambiar los valores

predeterminados correspondientes aI nuevo archivo de registro de


transacciones,haga clic en la ficha Registro de transacciones.

2. Para cambiar los valores predeterminados proporcionados en las columnas

Nombre de archivo, Ubicación, Tamaño inicial Mg) y Grupo de archivos (no

apücablepara el registro de transacciones),haga clic en la celda apropiada pan

czmbiar y escribir el nuevo valor.

.). Paraespecificarcómo debe crecer el archivo, hagaclic en una de estasopciones:

CIBERTEC cARRERADEcompurActóN E IrronuÁr¡ce


20

3.1,. Para permitir que el archivo actualmente seleccionado ctezcz cuando sea
necesariomás espaciopara los datos, haga cüc en Crecimiento automático del

archivo.

3.2. Para especificarque el archivo debe crecer en incrementos fijos, haga clic en En

megabltes y especifique un valor.

3.3. Para especificar que el archivo debe crecer en un porcentaje de su tamaño

actual,haga clic en Por porcentaje y especifique un valor.

3.4. Pata especificar el límite de tamaño del archivo, haga clic en una de estas

opciones:

3.4.1,. Para que el archivo crezc tanto como seanecesatio,haga clic

No limitar el crecimiento de los atchivos.

3.4.2. Para especificarel t¿maño máximo que se debe permitir que alcanceei

archivo, haga clic en Limitar crecimiento de atchivo a ([48) r-

especifiqueun valor.

Nota: El tamaño máximo de una base de datos está determinado por la cantidad de

espacio de disco disponible y los límites de licencia establecidospor la venión de SQL

Server que utilice.

4. COMO CREAR UNA BASE DE, DATOS (L]SANDO EL ANALIZADOR DE


CONSULTAS)

A1
Crearunabase de datos indiüdual.

En esteejemplo se crea una base de datos llamadaVENTAS y se especificaun


único archivo. El archivo especificado se convierte en el archivo principal y se
crea automáicamente un archivo de registro de transacciones de 1 MB. Como
no se especifican MB ni KB en el parámetro SIZE del atchivo principal, se
asignaen megabltes. Ya que no existe (filespec> para el archivo de registro de
transacciones,éste no tiene MAXSIZE y puede crecer hasta llenar todo el
espaciodisponible en el disco.

cARRERADE compurAcróx e TNFoRMÁTtcA CIBERTEC


AASE D E DAT OS. L ABORAT ORIO

CREATE DATABASE Ventas


ON
O{AME = venta_dag
FILENAME =' C:\program files\MicrosoftSqlServer\Mssql\Data\venta.mdf',
SIZE= 4,
MAXSIZE = 10,
FILEGROWTH = 1)
GO

4.2. Crear una basede datos sin especificarlos archivos

Este ejemplo crea una base de datos llamada bd_ejemplo y úea los archivos
principal y de registro de transaccionescorrespondientes.Debido a que la
instrucción no tiene elementos (filespec>, el archivo prin.rp^l de la base de
datos tiene el tamaño del archivo principal de la base de datos model. El registro
de transaccionestiene el tamaño del archivo del regisffo de ffansaccionesde la
base de datos model. como no se ha especificado MAXSIZE, los archivos
pueden crecerhastallenar todo el espaciodisponible en el disco.

CREATE DATABASE bd_ejemplo

4.3. Crear una basede datos sin especificarSIZE

Este ejemplo cre una basede datos llamadaVentas2. El archivo venta2 dat se
convierte en el archivo pdncipal, con un tarnaño ig""l tamaño del archivo
^l
pri".tp^l de la base de datos model. El archivo de registro de transaccionesse
crea automíticamente y es un 25 por ciento del tamaño del archivo principat, o
51213, el que seamayor. como no se ha especificadoMAXSIZE,los archivos
pueden crecerhastallenar todo el espaciodisponible en el disco.

CREATE DATABASE Ventas2


ON
(I\AME = venta2_dat,
FILENAME ='c:\ptogram files\microsoftsql
server\mssql\data\venta2.mdf)

GIBERTEC cARRERA
DEcoupurActót{ E tnronmÁrtcl
Observación: Cabe tesaltar que además existen más métodos P^fa c:ref Bases de

Datos, pero inicialmentepodfemos tabaiar usando est¿s3 formas.

COMPONENTES DEL SQL

El lenguaje SQL esrá compuesto por comandos, cláusulas,opemdores y funciones de


s-
agregado.Estos elementos Se combinan en las instrucciones pafa creat, actluÑzat
manioular las basesde datos'

5.1. Comandos

Existen dos tiPos de comandos SQL:

o Los DLL que permiten úeaf y definir nuevasbasesde datos, camPose

índices.

o I-os DML que permiten generar consultas para ordenat, filtrat y extraer

datos de la basede datos.

Comandos DI T

Desctipción
Comando
CRE^*TE, j¡l;rado paÍz cre f rluevastablas,camPose índices

DROP lmpleado pan elirnnat tablas e índices


Jt\zado para modificar las tablas agregando campos o
ALTE,R
:ambiando la definición de Ios campos.

Comandos DML

Descripción
Comando
Utilizado para consultar registrosde la basede datos que
SE,LECT
;atisfagan un criterio determinado
Jüzado p^r^ c rgar lotes de datos en la basede d¿tos en
INSE,RT
rna única operación.
Utilizado para modificar los valores de los campos y
UPDATE
registrosespecificados
Jüt do para eliminar tegistros de una tabla de una base
DELETE,
le datos

caRRERADEcotlPuTAclÓx e lxronuÁncl
r
BASE D E DAT OS. L ABORAT ORIO

5.2. Cláusulas

Las cláusulasson condicionesde modificación utilizadaspara definir los datos


que deseaseleccionar o manipular.

Cláusula Descripción
Jnlizadapara especificarla tablade la cual sevan a
FROM
;eleccionatlos registros
Jilirada para especificarlas condicionesque deben reunir
WHERE
os registrosque sevan a seleccionar
JtrhzadzpaLrasepararlos registrosseleccionadosen gruPos
GROUP BY
:soecíficos
'Jüzadapara
expresarla condición que debe satisfacercada
HA\TNG
+uPo
lJiltzadapara ordenar los registrosseleccionadosde
ORDER BY
rcuerdo con un orden esDecífico

5.3. Operadores

5.3.1,. OpemdoresLógicos

Operador Uso
1s el "y" lógico. Evalua dos condiciones y der,'uelve
AND
rn valor de verdad sólo si ambasson ciertas.
ls el "o" lógico. Evalua dos condicionesy del'uelve
OR
¡n valor de verdar si alguna de las dos es cierta.
\Jegación lógca. Del'uelve el valor contrario de Ia
NOT
:xoresión.

5.3.2. Operadoresde Comparación

Operador Uso
\{enot que

Mayor que
Distinto de
Menor ó Igual que
Mayor ó Igual que
.gual que
BETSTE,EN J¡lizado para especificarun intervalo de valores.
LIKE Jüzado en la comparación de un modelo
Júhzadopara especificarregistrosde una basede
In
latos.

caRRERA DE compurActóN E tNFoRMATlca


5.4. Funciones de Agregado

Las funciones de agegado se usan dentro de una cláusulaSELECT en gfupos

de registtos para devolvet un único valor que se aplica a un gruPo de tegistros.

Función Desctipción

Jüzadaper:a calc'tlar el promedio de los valorcs de un camPo


AVG
leterminado
COUNT Jnllzadapara devolver el número de registros de la selección

Jn\zadapara devolver la suma de todos los valores de un


SUM
:ampo determinado
Jnlizadapara devolver el valor más alto de un campo
MAX
:specificado
Jn\lzadaparadevolver el valor más bajo de un campo
MIN
:specificado

Nota: Durante las demás sesiones se expücara detalladamente como unlizat las instfucdones
que acabamosde mostrar.

Para re{trordar

o Recuerdesiempre que una base de datos es una colección de objetos, como tablas,vistas r'

procedimientos almacenados. Cada base de datos tiene su propio registto de las

trarisacciones y una base de datos se mantiene coherente lógicamente en términos de

restriccionesde integridad entre ios objetos de la misma. Si deseamoscrear una base de

datos podemos haceda de dos manefas, una es usando el administador corporativo y d' ona

es usando el analizadorde consultas.

cARRERADE GoMPurAc¡Ól e INFoRMATIGA CIBERTEC


¡A3 E DE DAÍ O A . LABO RAÍ O RI O

Greaciolt de TaHm e
hftgriHRelrclón

TEMA

o I-os sistemasde gestiónde basede datos orgarraany estmctunmlos d¿tosde al modo que
puedanset recuperadosy manipularlospot usuariosy programasde aplicación.La estnrcnra
másimportarrtede rula basede datosdacional son las ablas. En estasesiónaptenderemos
a cte¡Ánsy a dacionarlas de la ma¡retaideal.

ESPECÍFICOS
OBJETTVOS

algúncasopequeñodemaneraqueel alumnopuedacomprender
o Crearablasdesa:rollando
el uso de las daciones entre ellas.

CONTENIDO

CREA]3, TABLE,ALTERTABLE.

PRIMARYKEY, FOREIGN KEY.

cr¡EtfEc Glrtrt¡\ ocj corntflct0r ¡ lIñoilAflGr


I, APRENDIENDO A CREARTABIAS

1.1. ¿QUEES UNA TABIA?

Una tabla es una colecciónde datos sobte una entidad (Persona,Lugar, Cosa
específica, que tiene un número discreto de atributos designados (por ejemplc,

cantidad o tipo). Las t¿blasesránen el corazón de SQL Servery del modelo relacioni

en general. Las tablas son fáciles de entender ya que son prácticamente iguales a L*

Iistas que uüza de manera cotidiana. En SQL Server una abla suele denominars.

tabla de base, para hacer énfasissobre donde se almacenanlos datos. La utiliz¿glf¡ d¡


<< Tabla de base >>, también distingue la tzbla de una vista (\,/rew),una tabla virfua

que es una consultaintema de una tabla base.

Conforme se utiliza la base de datos con frecuenciase enconffará conveniente defiru:

tablaspropias p^r^ almacenardatos personaleso datos extraídosde otras tablas.

Los atributos de los datos de una tabla (como tamaño, color, cantidad, fecha, etc.

toman lafotma de columnas con nombrc enlatzbla.

Las columnas de la tabla recién creada se definen en el cuelpo de las sentenci.¡

CRÉATE TABLE. La definición de columnas aparecen en una lista separada po:

comas e incluida entre paréntesis.Las definición de la columna determina el orden de


'tzqurerda
a derechade la columnaenlatabla.

Nombre de columna:

Pueden serigualesa los nombre de las columnas de otras tablas.

b. Tipo de datos

Identifica la clasede datos que Ia columna dmacenará.

Si la columna contiene datos requeddos


La cláusula NOT NULL impide que valores NULL en la
^p^fezcan
columna o en caso contrado admite valores NULL.

Las tablassuelenestarrelacionadascon otras tablas.

caRRERADEcorpuracróx e rxronuÁr¡cl GIBERTEC


tASE DE DAT OS. L ABORAT ORIO 27

-.2. ;Qué son las relaciones?

Otra cuestión de diseño...el término "relaciones" usualmentese refiere a las relaciones


entre claves foráneas y primarias entre tablas. Este concepto es importante porque
cuando las tablas de una base de datos relacional son diseñadas,estasrelacionesdeben
ser definidas porque determinan que columnas son o no claves primarias o claves
foráneas.

A continuación veamoslos tipos de relación pueden existir enffe las tablas.

1.2.1 RelaciónUno-a-Varios:

La relaitón uno a varios es el tipo de relación más común. En este tipo de


relación, una fila de la tabla A puede tener varias columnas coincidentes en la
tabla B, pero una fila de Ia tabla B sólo puede tener una fila coincidente en la
tabla A. Por ejemplo, las tablas publishers y tides tienen una relación uno a
varios: cadaeditor produce muchos títulos, pero cadatínrlo procede de un único
editor. Una relación de uno a varios sólo se crea si una de las' columnas
relacionadases una clave principal o tiene una restricción única. El lado de la
clave principal de una relación de uno a varios se indica con un símbolo de llave
I El lado de la claveextema de una relación seindica con un símbolo de infinito.
a

.
1.2.2 Relacionesde varios a varios

En las relacionesde varios a varios, una fila de la tabla A puede tener varias filas
coincidentes en la tabla B, y viceversa. Para crear una relación de este tipo,
defina una tercera tabla, denominada tabla de unión, cuya clave principal está
formada por las clavesextemasde las tablasA y B. Por eiemplo,latzbla auüom
y la tabla tides tienen una relación de varios a varios definida por una relación de
uno a varios entre cada de estastablas y la tabla tideauthors.La claveptir.tprt
de la tabla titleauthors es la combinación de la columna at' id (la clave principal
de la tabla authors) y la columna tide id (la ciaveprincipal de la tabla tides).

1.2.3 Relacionesde uno a uno

En una relación de uno a uno, una fila de la tabla A no puede tener más de una
fila coincidente en \a tablaB v viceversa.IJna relación dá rr.ro a uno se crea si las
dos columnas relacionadasson clavesprincioaleso tienen restriccionesúnicas.

Este tipo de relación no es común porque la mayona de la información


telacionadade estam^net¿-estanaen una tabla. Se ouede udtzar una dación de
uno a uno pafa:

. Dividit una tabla con muchas columnas.

Aislar parte de una tabla por razonesde seguridad.

Almacenar datos que no se deseen conservar y se puedan eliminar


fácilmente con tan sólo suprimir la tabla.

o Almacenar información aplicableúnicamente a un subconiunto de la tabla


principal.

CIBERTEC cARRERA
DEcoupuractóN E txronuÁncl
El lado de la clave principalde una relación de uno 2 uno se indica cofl un
símbolo de llave. El lado de la clave externa también se indica con un símbolc'
de llave.

Ahora que ya conocemos el concepto de tablas y el concePto de relaciones'


empez temos a implementar nuestfasTablas para distintos casos.

Si queremos implementar una base de datos que tiene el siguiente diagama de

entidad relación:

Recomendaciones:

Podemos rcahzarlosde dos métodos:

uni
1. Implementamos las tablas,las llavesprimarias,la llaves fotáneasy la relacionesen

forma directa.

2. Implementaciónpaso a Paso. Con ayrda de ALTERTABLE


2.1,. Creamoslas Tablas

2.2. Agregamos las llaves Pdmarias (ADD PRIMARY KEY)

2.3. Agregamoslas llavesForáneasy Relaciones(ADD FOREIGN KEY-

REFE,RE,NCES)

A continuación det¿llaremosambos casos.

CIBERTEE
GARRERADE comPurAclÓN E lNFoRilATlca
I¡¡E OE DAT OS. L ABORAT OR¡ O

. .\CTIVIDADES

:. lmplementamos las tablas, las llaves primarias, la llaves foráneas y las relaciones en rura

tbrma ditecta.

ANALIZADOR DE CONSULTAS

CreateDatabaseVentas

L seventas

CreateTable Distrito (

coddis char(S) not null pdmary ke¡

desdischat(15))

CreateTable Cliente (

codcli char(S) not null primary ke¡

descüchar(25),

ruccli char(1O),

telcli char(8),

dircli chat(2O),

coddis char(5) tefetences distrito )

Create Table Factura(

numfac char(10) not null primary ke¡

fecfac datetime,

codcli char(5) referencescüente)

Cteate Table Ptoducto (

codpto chat(S) not null primary key,

despro varcharQ}),

prepro floatQ))

CIBERTEG caRRERADEcoupuraclóN E lxronmÁncl


30

Cteate Table DetalleFactura (

numfac chat(1O)not null refetences factwa,

codpro char(5) not null referencesproducto,

canpro i"t, pri-rq'key (numfac,codpto))

2. Implementación Paso a Paso.

ANALIZADOR DE, CONSULTAS

Cteate Database Ventas

Use ventas

CreateTable Distrito (

coddis char(S) not null,

desdischar(l5)

CreateTable Cüente (

codcü char(S) not null,

descli chat(25),

ruccli char(10),

telcli char(8),

dircü char(20),

coddis chat(S))

cARRERA DE compuraclón e tilFoRtATlcA CIBERTEC


¡¡3E D E D AT OS - L ABORAT ORIO 3l

tl:eare Table Factuta(

numfac char(10)not null,

fecfac datetime,

codcli char(S))

CreateTable Producto (

codpro char(S) not null,

despro varchatQ}),

prepro floatQ))

CreateTable DetalleFactura(

numfac char(lO) not,

codpro char(S) not null,

canpro int)

Agegando las llavesprimarias a todaslas tablas

-\lter Table Distrito Add PrimaryKey (coddis)

-\lter Table CüenteAdd PrimaryKey (codcli)

-\lter Table Factura Add PdmaryKey (numfac)

^\lter Table PtoductoAdd Primarykey (codprc)

-\ltet Table DetallefacturaAdd PrimaryKey (numfac,codpro)

CIBERTEC caRRERADEcorutpuractóil E tnronmÁncl


Agregando llaves Foráneasy rclacionando tablas

Agregando Ia referencia a Ia tabla dismto

Alter Table clienre

Add Foreign Key coddis ReferencesDistrito

Agregando Ia refetencia a Ia ubla cliente

AlterTable fac¡xa

Add Foreign Key codcli ReferencesCüente

Agegando Ia refetencia a Ia tabla factuta

Alter Table detallefactura

Add Foreign Key numfac ReferencesFactura

Agrcgando la rcferencia a Ia tablaptoducto

Alter Table detallefactura

Add Foreign Key codpro ReferencesProducto

caRRERADEcotpuraclót e ¡¡rronuÁr¡cl
BASE D E DAT OS. L ABORAT ORIO

L\SO DE APLICACIÓN No. 1

L\TPRESA "2OOA4IL[A.S"

--r empresa"200 Millas" se dedicaa la extraccióny fabncaciónde productos derivados delaÁca


:-¿'¡namarítima de nuestro litoral. Tiene su sede en el Callao y desde aJlíreohzasus actividades de
::oducción y distribución de sus ptoductos a sus diferentes clientes.Los productos son tanto
:.rra el consulno humano (Conservas) como también para la industda, como por ejemplo
lerrilizantes, Insumos Químicos. etc., y a 1o largo de sus 5 años de funcionamiento,tiene una
acogidadebido ala cñdad de productos que fabdca, asícomo los precios con los cualeslos
-:n
:oTnerciñza.

Er el ultimo año, el Ing.


Juan Quitoz, gerente general de "200 millas" , ha decidido que para
.cgui¡ con el ritrno de crecimiento de la empresa y convertirla en corto plazo en una empresa
:cier dentro del ámbito donde se desarrolla,se necesitaser cada vez más competitivos, lo que
::rplica tener un mejor control sobre las materiasprimas, el proceso productivo, la distribución
:e los productos, su comerciñzacióq etc. Se ha elaboradopara ello una cartet^ de proyectos,
je los cualesalgunos esán en su fase de análisis y otros en la de desarrollo. Denüo de estos
:limos, se encuentra el Sistemade Control del Proceso Productivo, el cual tiene un módulo
jenominado "Seguimiento de Extracción de MateriaPrirna". Este módulo conffola., como su
::ombre lo indica, las diferentes actiüdades desde la extracción de la matena prima hasta la
:.i¡ricación de los ptoductos finales. El modulo permitirá efectuar un adecuadoseguimientoy
--¡rrsro de toda la información pertinente. El responsabledel proyecto es el Sr. anahstaRubén
J[:2. quien actualmente se encuentra en la etapa del diseño de una Base de Datos la cual
:<rnita el adecuado registto de toda la información dedvada de las actividades propias del
::::duio.

::'i sus constantes visitas y entrevistas con la Ing. Inés Tang, supervisota del área de
Pioducción, ella ha manifestadolo siguiente:

" Le empresaposee una flota de aproximadamente100 embarcacionesde distinta capacidad y


::r. Es importante para nosotfos almacenarla información de cada una de las embatcaciones,
'-. cuales están debidamente codificadas.Es necesario registrar también el nombre, fecha de
,,'mpra, tipo de embatcación y capacidadde almacenamiento.

::r ias cliferentes embarcaciones se encuentan tabaiando penonal debidamente capacitado en


' ubicación y extacción del pescado. Es de nuestra incumbencia maritener un catáogo
"rm-alizado de dicho personal, el en cual se registren el código, apellido patemo, apellido
:::i¡emo, nombres, fecha de ingeso, libreta electoral, catgo,número de camé de seguroy haber
r:slco. Un tabajadot solo esta asignado a una embarcación y par^ llevar el manejo de una
=::'barcaciónse requierela participación de varios trabajadores.

c|AERÍEG CARRERADE COÍIIPUTACIÓNE IXTONUANCI


Las actividadesde pesca son de gran imporancia dentro del proceso productivo. Nosotros las
llamamos Faenas de Pesca. Las faenas de Pesca son ejecutadas por una determinada
embarcación, por lo que es lógico pensar que una embarcación ha ejecutado vadas Faenas de
Pesca.Cada faena tiene un número que nos permite identificada y distinguitla de otras faenas.Es
necesario mantener infotmación de cada faena almacenando su número. Fecha de inicio. Fecha
de fin y laZona del mar donde se ejecutó.

Para un mejor control de las especiesma¡inas que extraemos de nuesüo litoral se maneja un
catalogo denominado Especies, en el cual se detalla la información más relevante de las materias
pdmas (pescados) que permiten la elabotación de nuestros productos. En este catalogo se
registra información como el código del pescado,nombre del pescado,tipo de pescado y su
coización en el mercado (por tonelada métrica).

Se sabe que rüia Faena de Pescapuede recoger una o más especies,por ejemplo,la Faena
"F093" recogió Atun, Sardina y Anchoveta y como es lógico deducir, una especie puede ser
tecogida en varias faenas.

Pot último es importante aJmacenatla informaciínacerca de los difetentes productos que se


fabncan en"200 Millas ".Par^ tal efecto se maneja una relación con la información pertinente
de cadaproducto, como su código, descripción, tipo, precio de venta y unidad de medida.
Pan Ia fabicaciín de un determinado producto se emplean una o más especiesy una especie
sirve para lapreparairón de difercntes ptoductos.

Finalmente necesitamos una Base de Datos que nos permita dmacenar la información descrita
anteriormenteasícomo satisfacernecesidadesDuntualescomo:

0 ¿Qué barco ejecutó una determinadzfaer:u;?


| ¿Qué especiesy en qué cantidad se recogió en urra determinada Faena?
a ¿Qué especies y en que cantidad se necesita pan la elaboración de un determinado
producto?
| ¿Qué empleados laboran en un Barco?, entre otros requerimientos de información.

La elaboración de una adecuada estructura de Base de Datos gararnzará la satisfacción de las


necesidadesestablecidas"
Tras el manifiesto de la Srta. Tang , el Sr. Díaz debe de elaborar la Base de Datos que permita el
soporte de manejo de informaciónpara el modulo a desarrollar.
Asuma Ud. el papel del Sr. Dn, y elabore los Modelos Genéricos y Detallados, así como las
consideracionesfinalesnecesariasparalaimplementación de la basede datos en cuestión.

Desartollo

1. Analice el siguiente caso, si es posible hágalo gupal (3), e implemente lero el diagrama de
entidad relación
2. Compruebe los result¿dos con el üagrama que se mostará en la siguientepág1na.
3. Implemente las tablas y las relaciones de las 2 formas antedormente recomendadas.

cARRERADEcoiltpurac¡óx e txronmÁrlct GIBERTEC


AASE D E DAT OS - L ABORAT ORIO

Diasrama de Entidad Relación

E,MPRE,SA"2OOMIL[-{S"

COD-BAR gINUM_FAE EFoLPRo-


N0lvl_8AR rsr
$'lcoo $lcoo¡sr
.::::i
FET-COM -lcnl_n¡c
]cnr'r-r-rrc
TIP-BAR
CAPBAR
Tblnorediente

ú_
il ::i _El'lP
'r-frr_EMP
+5_pAT
<-_ -|l{l
=- r A-
th-i$lr ,,-: :llr!
iü_
=:-.lc
{
tl \IUM-FAT COD-E5P lr-]COD-PRO
::::l =ECINI NOMEsP I{illl}
= DE5-PRO
1--:]VIL =EC-FIN PRE
E5P ry
tl.ttÍ. TIP-PRO
:::-iON-MAR PREPRO
::i -iAR :OD-BAR
-i
-1

caRRERA DE coirpuraclóN E tNFoRüÁTtca


Palar€mrdar

Recuerde siemprc que las ablas son e)corazón de l¿s basesde datos relacionales en general

y'de SQL Server en particular. I¿s restricciones de integidad aseguranque la clave prim"ri^

identifique unívocamente zczüentidad rcpresenadadelabase de datos y ademásasegunn

que las telaciones ente entidades de l¿ base de datos se preserven durante las

acnralizaciones.

caRRERADEco[purAcrón ¡ rNFontATtcA
DATO A. LAI O TATO RI O
'C

@¡OndeGorcuth
Senc¡llas

irhfA
. Fn est¿ sesión cuáles son las casctetísticas de SQL que pernriten efectr¡ar consultas a las

basesde datos, inicialmente veremos las cláusulasmás importantes para iniciar r¡na consula.

qtE-flvos ESPECÍFTCOS

. Utilizar los comandosSQL de maneraquc nos pemia recupererinformacion de alguna


basede datos.

@{TENIDO

. Inmoduccióna lasconsulas

. Uso del SELECT, FROIA IüTHERE,ORDERBY.

cñttn¡f Dl'Gmr'l'rcüffi tlrÉor*f |lllr


7. INTRODUCCIÓN A Il.S CONSULTAS

Las consultas de selección se utilizan para indicar al motor de datos que der.uc-.r

información de las bases de datos, est¿ información es der,'ueltaen forma de conjunto dr

registros que se pueden almacenaten un objeto Recordset. Este conjunto de registros cs

modificable.

2. USO DEL COMANDO SELECT, FROM, WHERE y ORDER BY

2.1. SEI-E,CT

I-a cláusula SELECT lista los datos a recuperar por la sentencia SELECT. l-os

elementos o datos a seleccionar pueden set columnas de la base de datos o columna-. ¿

calcular por SQL cuando efectua la consula o también el asterisco (*) p"." recuperr

todos los campos de un ficheto o tabla..

Exptesión-columna puede ser rül simple nombte de campo (pot ejemplo


MATRICUIA). Expresiones más compleias pueden incluir operaciones matemáticas o

de manipulación de caracteres (por ejemplo APELLIDOS + ', ' + NOMBRE). N[ás

adelanteveremos estasexpfesiones de forma más amplia.

Las exptesiones de columnas deben ir sepatadaspor comas si existen más de una (por

ejemplo APELLIDOS, NOMBRE, DNI, DOMICILIO).

Los nombres de campos pueden ir ptecedidos por el nombre de la tabla o su alias. Por

ejemplo ALUMNOS.MATRICUIA o A.MATRICULA donde A es el alias para b


t¿bla o fichero ALUMNOS.

SEI-E,CT ALUMNOS. MATRICUIA FROM ALUMNOS

SELECT A. MATRICULA FROM ALUMNOS A

GARRERADE coTPuTAcIÓil E INFoRilIATIGA CIBERTEC


m [¡ ! ¿¡ ' os . LABO RATO RI O

; l":

* : : ! - -r FROM üsta las tablas o ficheros que contienen los datos a recuperarpor la
'-: -a. El tbrmato de esa cláusulaes:

SELECT t FROM NombreTablalAlias

- ::-.¡:eTablapuede ser uno o más nombres de tabla en el directorio de trabajo si se


::,:- o en un directorio distinto si se especifica.
-sre,

;Qué es un ALIAS?

-\lias_Tablaes un nombre que se usapara referirsealatabla en el resto de la


sentenciaSELECT pan abrciar el nombre origrral y hacerlo más manejable,

en el caso de existir más de una tabla en la consulta y, tambiéfi p^r^ poder

rezhzarconsultasuniendo variasvecesla misma tabla.Por ejemplo:

SELECT A. NOMBRE. A. APETJTDOS

FROM MATRICUL M. ALUMNOS A

STHE,REM. MATRICULA = A. MATRICULA

AND M. GRUPO = ' 1A' AND ANO = 1995

es mucho más práctico y sencilloque:

SE,LE,CTALUMNOS. NOMBRE. ALUMNOS. APE TTDOS

FROM NI*TRICUL. ALUMNOS

\XTIERE MATRICUL. MATRICUIA = ALUMNO. MATRICUIA

AND MATRICUL. GRUPO = '14'AND ANO = 1.995

CIBERTEC CaRRERA
DEGoupuracló¡ e t¡ronmÁtlcl
40

Las dos sentenciasson idénticas y nos devolverían los nombres y apellidos del

alumnado matriculado en el año 1995 y que figuran en el grupo 1A. El nombre

de tablas junto al nombre de campo es obligatorio cuando exist¿ncampos con


nombre idéntico en las tablas que formen parre de la sentencia.Así en el

ejemplo anterior NOMBRE y APELLIDoS no lo necesitarían(aunque este


puesto) pero MATRICUI-A si lo necesitaporque en las dos tablas existe un
campo con esenombre.

Si no se pudiera u'i'lizar alias, no se podría unir una tabla consigo misma y la

siguiente consulta no se podría llevar a cabo:

SEIf,CT A. NOMBRE, A. APELLIDOS. H. NOMBRE

FROM ALUMNOS A. ALUMNOS H

WTIERE A. PADRE = H. PADRE

que nos devolverá el nombre de aquellos alumnos/as que tienen el mismo


padre, es decir, son hermanos.

2.3. STHERE

La cláusulaSflHERE dice a SQL que incluya sólo ciertas filas o tegistros de datos en los

resultadosde la consulta, es decir, que tienen que cumplir los registros que se desean

vetLa cláusulaWTIERE contiene condicionesen la forma:

\[T{ERE Expresión1operadorExpresion2

Donde Expresión1 y Expresion2 pueden ser nombres de campos,valores constanteso

expresiones.

Operador es un operador dacional que une dos expresiones.En las siguientessesiones

veremoslos distintos operadoresque sepuede u:ltza1

cARRERA
DEcompuraclón e ttronmAtlcl CIBERTEC
IASE D E DAÍOS. L ABORAT ORIO

Por ejemplo, la siguiente sentencia nos muestra el n" de alumnos que han nacido con

posterioddad aL985.

SEI-ECTCOUNT (*)

FROM ALUMNOS

'ürHERE YEARtrECHA-NACIMIENTO) > 1985

].4. ORDERBY

La cláusula ORDER BY ordena los resultados de la consulta en base a los datos de una

o más columnas.Si se omite,los resulados saldránordenadospot el pdmet campo que

seaclave en el índice que se hayzutltzado.

Por tanto, indica como deben clasificane los registros que se seleccionen. Tiene la

forma:

SELE,CT * FROM TABI-A

IDESC I ASq,...]
ORDERBY {Expresión-orden

Expresión-orden puede ser el nombre de un campo, expresión o el númeto de

posición que ocupa la expresión de columna en la cláusula SEI-ECT. Pot defecto se

ordenan ASCendentemerite (de menor a mayot). Si se deseará de mayor a menor se

ernplearáDESC (DESCendente). Por ejemplo, para mostrar los alumnos otdenados de

m yor edad a menor, seutiltzana

SEI-ECT NOMBRE. APELLIDOS

FROM ALUMNOS

ORDER BY FECHA NACIMIENTO DESC

CIERTEG caRRERADEcoupuractóx e lxronuÁrtcl


Para obtener un listado de alumnos por su lugar de nacimiento ordenado pt

provincias y dentro de cada provincia ordenados por localidades se utilizaría:

SELECT NOMBRE +'' +APELLIDOS, LOCALIDAD_NACIMIE\TO-

PROVIN CIA-NACIMIE,NTO

FROM ALUMNOS

ORDER BY PROVINCIA. LOCALIDAD

o lo mismo de otra forma:

SELECT NOMBRE + " + APETJJDOS,LOCALIDAD_NACIMIENTO-

PRO\TNCIA-NACIMIENTO

FROM ALUMNOS

ORDER BY 3.2

Donde los númetos son la posición actual de los campos mostrados en la cláu-suh

SEIf,CT

3. CONSULTAS CON PREDICADO

El ptedicado se incluye entre la cláusulay el pdmet nombre del campo a recuperar, los

posiblespredicadosson:

3.1. ALL: Devuelve todos los campos de la tabla

3.2. TOP: Devuelve un determinado número de registros de la abla

3.3. DISTINCT: Omite los registroscuyos campos seleccionadoscoincidan totalmente

GaRRERA
DEcompuracróx E tNFoRmATtca CIBERTEC
BASE DE DAT OS - L ABORAT ORIO

3.1,.Ar_r,

Si no se incluye ninguno de los predicados se asrüne ALL. El Motor de base de datos


seleccionatodos los registros que cumplen las condiciones de la instrucción SQL. No
se conveniente abusar de este predicado ya que obügamos al motot de la base de datos
a anahzarla estructura de la tabla para avengttar los campos que condene, es mucho
más rápido indicar el listado de campos deseados.

SEIECT ALL FROM Empleados


SEI-ECTx FROM Empleados

3.2.TOP

Del'uelve un cierto número de registros que entran entre al principio o al final de un


rango especificado por una cláusula ORDER BY. Supongamos que queremos
recuDerarlos nombres de los 25 orimetos estudiantesdel cuso 1994:

SEI-ECT TOP 25 NOMBRE. APELLIDO


FROM Esn¡diantes
ORDER BY Nota DESC

Si no se incluye la cláusula ORDER BY, la consula devolverá un conjunto arbitratio de


25 registros de la abia Estudiantes.El predicado TOP no elige enüe valotes iguales.En
el ejemplo anterior, si la nota media número 25 yIa26 son tguales,la consula devolvetá
26 registros. Se puede utilizat la pilabra reservada PERCENT para devolver un cierto
porcentaie de registros que caen al principio o al final de un rango especificado por la
cláusula ORDER BY. Supongamos que en lugar de los 25 pnmercs estudiantes
deseamosel 10 por ciento del curso:

SEI-E,CTTOP 10PERCENT NOMBRE. APETTTDO


FROM ESTUDIANTES
ORDE,RBY NOTA DESC

GTEC cARRERADEcorpurAcrór e r¡ronuÁncl


E
4

TOP no afecta a':t


El valor que va a continuación de TOP debe ser un Integer sin signo'

posible acuÑzactínde Ia consulta'

3.3. DISTINCT

seleccionados'P"*
Omite los registtos que contienen datos duplicados en los camPos
se incluyan en fl
que los valores de cada campo listado en la instrucción SELECT
en la tabla Empleao-'r
consulta deben set únicos. Por ejemplo, vatios empleadoslistados
en el campo Apelhó:*
pueden tenet el mismo apellido. Si dos registroscontienen IÁpez

la siguiente instrucción SQL der''uelveun único tegistro:

SELECT DISTINCT APELLIDO


FROM EMPLEADOS

Con otras palabms ei ptedicado DISTINCT devuelve aquellos feglstfos cuyos camlu
Ei resultado de -::n'
indicados en la cláusula SELECT posean un contenido diferente.
cambios subsiguiecs
consulta que utiliza DISTINCT no es actualizable y no refleia los

realizadospor otros usuatios.

4. ¿Cómo RecuperatInformación de otra basede Datos?

de tegistros de base'
Para concluir esta sesión haremos refetenciz a la rcatperación
que no se
datos extema. En ocasiones es necesario fecuPefaf información
situaciónla podemos
contenida en la basede datos que actualmenteestaen uso' Esta

de la siguiente forma:

SELE,CTNOMBRE, APELLIDO

FROM PESCA..DBO.EMPLEADOS

Donde PESCA es la basede datos que contienelatablaEmpleados.

CINNEM DE COilIPUTAGIóil E INFORilAT¡CA


BASE DE DAT OS - L ABORAT ORIO

.\CTIWDADES

Segunla basedatosPESCA:

1. Mostrarla descripciónde todoslos barcosexistentes:

SEI-E,CT* FROM TB BARCO

2. Mostrar la descripción de todos los barcos existentescuya capacidadde barco seamayor a


150 tripulantes.

II SELECT X F'ROMTB BARCO

I WHERE CAP_BAR> 150

J
I
,1. Mostrar la descripciónde todos los batcos, pero ordenadosalfabéticamenteen forma
descendentesegún el nombre del barco
ls

tS SEI-E,CT+ FROM TB BARCO

ORDERBYNOM BAR DESC

-t. Mostar la descripciónde los 10 pdmetos barcos existentesenla tablaTt¡-barco.


de

tra
SEI-E,CTTOP 10 X FROM TB BARCO
raf

Mostrar la descripción de los 2 primeros barcos existentes en la tabla Tb-barco, cuya fecha
de compra haya sido en el año 1997

SELECTTOP 10* FROMTB BARCOWHEREYEARtrEC-COM = 1992

CIBERTEG caRRERADEcoirpurAcróx e rxronmÁt¡cl


tlEC
De la basede datos PESCA

1,. Mostrar la relación de todos los empleados existentes

2. Mostar la dación de todos los empleados existentesque hayan nacido en el mes de

febrero.

J. Mostrar lzrcIadón de todos los empleados que tengan estado civil casado

4. Mostrar la relación de los empleadosque seancasadosylavezhayannacido en el mes


dematzo.

5. Mostra-t la relación de los empleados que sean solteros, que hayan nacido en el mes de
enero, y que ademásperciban un sueldo mayor a 2,000.

Panarccordar

La instrucción Select se utiliza para expresaf urra consulta SQL. Toda sentencia Seiec

ptoduce una abla de resulados que contiene una o más columnas y cero o más filas.

La cláusula Ftom especifica la(s) tabla(s) que contiene(n) los datos a recuperar de
'.."
consulta.

La cláusula \Where seleccionalas filas a incluir en los tesultados apücando una condicion oe

búsquedaa las filas de la basede datos.

o La cláusula Order by especifica que los resultados de la consula deben ser otdenados c

sentido ascendenteo descendente.basándoseen los valores de una o más columnas.

cARRERADEcoupurAcló¡r r tilFoRmÁTtca CIBERTB


BASE DE DAT OS - L ABORAT ORIO

Grreión y Mantenimiento de
lndices

TEMA

o Una de las estmcturas de almacenamiento físico proporcionadas por la mayona de los

sistemas de gestión de base de datos basados en SQL es el índice. Un Índice es una

estructura que proporciona un acceso rápido a las filas de una tabla en base a valores de un

o más columnas. En esta sesión aprenderemos cuándo y cómo es necesarioscrear los

índices.

ESPECÍFICOS
OBJE,TTVOS

¡ Entenderla importanciade Índicesen unabasede Datos.


o Discutirlasventajasy desvenajas

A CONTENIDO

o CREATE INDEX

t G-nTEC DEcorpurAcróx
GARRERA e rrronmÁrrcl
4A

1,. ¿QUESONLOSÍXOrCpSt

Un índice es una estructuraque ordena los valorcs de una o más columnas de una n¡,¿
de la base de datos, como la columna'apellidos'de una latabla 'empleado'. Si se bu--;
un empleado concreto Por su apeliido, el índice ayudaa obtener dicha información c:c.
mayor rapidezque si se rcñzauna búsquedaen todas las filas delatabla.

El índice proporciona punteros a los valores de datos almacenadosen las columnasde


-a
tabla que se seleccioneíy,a continuación, clasifica dichos punteros de acuerdo con a
otden que se especifique.La base de datos u¡li"a el índice con mucha más frecuenc,r
que se uüza el índice de un libro: zcuda al,índice para buscar un valor en parricular ,,'.r
continuación, sigue el puntero hastala fila que contenga dicho valor.

En diagramasde basesde datos se puede crear, modificar o eliminat cadatipo de íni;:


enla pág1nade propiedadesÍndices y claves correspondieritea una tabla seleccionac¡
Un índice se guarda en la basede datos cuando se guarda la tablaa la que está asociac,.
o cuando se guatda el üagrama en el que dicha tabla. Para ver más detallc.
^p^rece
consulte Crear un índice.

Como regla general, se debe crear un índice en una tabla sólo si los datos de '',
columnas indexadasse van a consultar con frecuencia.I-os índices ocupan espacio
disco y pueden volvet lentas las acciones de agtegar, eliminat y actualizayfilas. En ---

mzyona de las situaciones, estas desventajas de los índices son coffipensar-:¡
sobradamentePor laventap que supone recuperardatos a gran velocidad. Sin embarg "
si la aplicación acuahza datos con mucha frecuenciao se tienen limitaciones de espac,-
en disco,puede que seaconvenientelimitar el número de índices.

Antes de crear un índice, se deben determinat las columnas que se han de u:liz2¡ 1' .
tipo de índice que se deseacrear:

1.1. Columnasde índice

Se pueden creat índices tomando como base una sola columna o varias colum¡L-.
de una tabla de base de datos. Los índices basadosen varias columnas permrtc:
distingur entre filas en las que una columna puede tener el mismo valot.

Los índices también son útiles si se realizan con frecuenciaprocesos de búsquec-


o de ordenaciónbasadosen dos o más columnasalavez. Por ejemplo,si establecr
frecuentemente critedos para las columnas de nombre y apellido en la misn-
consulta,conüene crear en estasdos columnas un índice DatavaÁascolumnas.

Para determinar la utiüdad de un índice:


. Examine las cláusulas
'ü{HERE y JOIN de las consukas. cada columru
incluida en cualquierade las dos cláusulases una posible candidata para un
índice.
Experimente con el nuevo índice para observar su efecto en el rendimientc
de la ejecuciónde consultas.

GARRERADE coMPUTAcIÓN E IxronuÁT¡cI C¡BERTEC


¡ASE D E DAT OS . L ABORAT ORIO

Tenga en cuenta el número de índices que ya se han creado en la tabla.


Conviene evitar la existenciade un gran númeto de índicesen una sola tabla.
Examine las definiciones de los índices que ya se han creado en la tabla.
Conviene evitar la supelposición de índices que contengan columnas
compartidas.
Examine el número de valores de datos únicos en una columna y compárelo
con el número de filas de la abla. El resultado es el gado de selectividad de
dicha columna, que puede zyudar a decidir si una columna es candidata para
un índice y, en caso afirmativo, el tipo de índice apropiado.

1.2. Tipos de índices

Dependiendo de la funcionalidad de la basede datos, se pueden crear tres tipos de


índices (único, de claveprin.lpd y agrupado)en el Diseñadot de basesde datos.
Sugerencia Aunque un índice único ayrrdaalocahzar información, se recomienda
uüzar err su lugar restricciones únicas o de clave principal para lograr unos
resultadosóptimos en cuanto a rendimiento.

1,.2.1. Índice único


Un índice único es aquél en el que no se permite que dos filas tengan el
mismo valor de índice.

La mayona de las bases de datos impiden guardar una tabla con un


índice único cuando hay valotes de clave duplicados en los datos
existentes.La base de datos ambién puede evitar la incoqporación de
datos nuevos que creen valores de clave dupücados en la tabla.

Por ejemplo, si crea un índice único en la columna de apellidos de


empleadosen la tabla empleado,los empleadosno podrán compartir un
mismo apellido.

1.2.2. Índice de clave pri".rprl


En ocasiones,una tabla de base de datos tiene una columna o una
combinación de columnas cuyo valor identifica de forma exclusiva cada
fila de la tabla. Esta columna recibe el nombre de clave princrpal de la
tabla'.

Si se define una claveprincipal p^faun^ tabla en un diagramade basede


datos, se crea automáticamenteun índice de clave principal, que es un
tipo concreto de índice único. Este índice requiere que cada valor de la
clave principal seaúnico. También permite un accesoúpido a los datos
cuando seutiliza dicho índice en consultas.

1.2.3. Índice agrupado


En un índice agrupado, el orden fisico de las filas de la tabla coincide con
el otden lógico (indexado)de los valores de clave.Una tabla sólo puede
contener un índice agrupado.

En un índice no agrupado, el orden físico de las filas de la tabla no


coinciden con el orden lógico de los valores de clave.Normalmente, un
índice agrupado ptopotciona un accesoa los datos más rápido que un
índice no agrupado.

GTEC CARRERADE CoMPUTAGIÓNE IxronmÁT¡c¡


2. ¿Como crear un Índice?

I¿ sintaxis par^ cre r un índice en ua tabla ya definida en la siguiente:

CREATEI UNIQUE ] INDEX índice


ON tabla(campoIASCIDESqIcampoIASClDESq,...])
[v{TH { PRIMARY I DISALLON0NULL I IGNORE NULL }]

En donde:

Es el nombre del índice cre r.


^
Es el nombre de una t¿bla existente en la que se creatáel indice.

Es el nombre del campo o lista de campos que consituyen el índice.

Jndica el otden de los valores de los campos ASC indica un otden

ascendente (valor ptedeterminado) y DESC un orden descendente.

Indica que el índice no puede contener valotes dupücados.

DISALLOW
Prohíbe valores nulos en el índice
NULL

IGNORE Excluye del índice los valores nulos incluídos en los camPos que lo

NULL

Asigna al índice Ia categonade clave Pri.t.iprl, en cada tabla sólo pued.

istir un único indice que sea"Clave Principal". Si un índice es clave


implica que que no puede contener valores nulos ni

GARRERA DE GOMPUTACIÓN E INFORMATIGA CIBERTBC


BASE DE DAT OS - L ABORAT ORIO 5t

Eiemplos

I Crear un índice llamado Milndice en la tabla empleados con los campos Prefijo yTeléfono.

CREATE INDEX Milndice ON Empleados@refijo,Teléfono)

I
Crear un índice enlatablaEmpleados utiliz6de el campo ID, obligando que el campo ID

no contenga valores nulos ni repetidos.

CREATE UNIQUE INDEX Milndice oN Empleados(ID) wrTH DISALLOW NULL

\ENTAJAS Y DESVENTAJASDE LOS ÍNDICES

No obstante, las ventaias que ofrecen los índices por lo que respecta al rendimiento

también tienen un costo. Las tablas con índices necesian más espacio de

almacenamiento en la base de datos. Asimismo, es posible que los comandos de

inserción, actuÑzación o eliminación de datos sean más lentos y precisen más tiempo de

Procesopara mantener los índices. Cuando diseñe y cree índices, deberá asegurarseque
las ventajas en el tendimiento compensen suficientemente el costo adicional en cuanto a

espaciode almacenamientoy recursosde proceso.

>

de

IEG ITDG
cARRERA DE compurac¡óx e tNFoRMAT¡cA
32

Segunla basede datosPESCA:

1. Identificar cuálesson las ablas de donde es posible que se realicenlamayot cantidadde


.ánsoltas,y luegocreeíndicesa lascolumnasdeseadas.

Z. Compruebesusconsultasy verifique si los resultadosson más rápidosque las consultas


anteriotes.

krarccordar

CREATE INDEX y DROP INDEX defineníndices,loscualesaceleranlas


Las sentenci¿s
consultasde la base de datos notablementepero a cambio ellos ¿ñadenrecargo a las
¿ctualizaciones.

cARREnADEGotPUTAclÓx e llronnÁtrcr
BASE DE DAT OS - L ABORAT ORIO

Irqrmon Modiñcacióny
Eliminmion de IHas

TL\IA

o Esta sesión muestra como se puede unlizat SQL para añadt nuevos datos a una base,

suprimir datos de una base y modificar datos de una base ya existente. También

describircmos las cuestiones de integidad que se presentan cuando los datos se actualizan.

{lB"T
ETTVOSESPECIFICOS
¡s
¡s
r Describir las tres sentenciasSQL que se empleanpara modificat los CONTENIDO de una

basede datos.

r-O\TENIDO

o NSERT

o DE,LE,TE

o UPDATE

lBc CICTTEC GARRERA


DEcoitpuracróx e rnronuÁrrcl
1. INSERT

La sentenciade INSERT se utiliza panañaür tegistros a las ablas de la base de dato.- Hll

formato de la sentencia es:

Nombre-Tabla es únicamente el nombre de la tabla donde se deseaingresar los nuet"rn

datos.

Nombre-Columna es una lista opcional de nombres de campo en los que se insena¡¡m

valores en el mismo número y otden que se especificarán en la cláusula VALUES. Si r:'

se especifica la lisa de campos, los valores de expt en la cláusula VALUES deben :a

tantos como campos tenga la tabla y en el mismo orden que se definieron al crear l¡

tabla.

Expr es una lista de expresiones o valotes constantes, separados por comas, para dr

valor a los distintos campos del registro que se añaüñ a la tabla. Las cadenas <ie

caractefesdebetán estar enceffadas entre comillas.

1..1. Insertar or, Úni.o registro

Ejemplo: Añadir un registro a la tabla ALUMNO

INSERT INTO ALUMNO (CODIC,O,NOMBRE, APELLIDO, EDAD)


VALUES (a00034',?EDRO','ANDIA', 19)

Cada sentencia INSERT añade un único registro a la tabla. En el ejemplo sólo se han

especificado4 campos con sus respectivosvalores, el resto de campos quedarána nulo.

Un valor nulo NULL no significa blancos o ceros sino simplemente que el campo

nunca ha tenido un valor.

GARRERADE GoMPUTAcIóil E lrrronuÁrlcI CIBERTEC


E ¡C DA? OS - L ABORAT ORIO

f i¡ !
bserrar Multiples Registros

-\demás existe la posibilidad de agregarmultiples registros con ayuda de nuestro


comando SEI-E,CT anteriormente expücado. Veamos un ejemplo:

Supongamos que tenemos un tabla llamada CLIENTE con los siguientesdatos:

il,:.i¡:, , Emptesa Dirección Teléfono Tioo cli

i::ltü:. Finseth Av. I-osViñedos150 4342318 1

'(lr]lu": Orbi Av. Emiüo Cave¡ecia225 ryfi$35 1.

il rü:il. -: Serviemsa Jt. Collagate522 NULL 1


D
flilt"c Issa Calle Los Aviadores 263 3725910 1

:;:f,5 Mass Av. Tomas Marsano 880 4446177 2


^
Berker Av. Los Proceres521 3810322 2

:;1,- Fidenza Jt. El Niquel282 5289034 J

:,-r.E Intech Av. SanLuis 2619 5to P 2249493 1

Y tenemos una nueva tabla EJEMPLO, que ha sido creada Pof nosotfos, además

contiene los mismos campos o columnas de la abla CLIENTE. Ahota nuestro obieto

es tasladar todos los clientes de la tabla CLIENTE que tengan tip-cü = 7'z nuestra

nueva abla EJEMPLO. La respuestasetíala siguiente:

INSERT INTO EJEMPLO (código,empres¿,dirección,teléfono,tipo-.D

SEI-ECT código,empresa,dirección,teléfono,tipo-cli

FROM CIIENTE
ur
WHEREtiP-cli = 1
b.

E GIBERTEC cARRERADEcompurAclóx e ¡uronuÁt¡c¡


56

Como podemos observar es posible combinar nuestro comando INSERT con nuestra-s

consult¿sde Selección)par^ agre.'ardatos específicossin tener la necesidadde reÑznIo

uno Pof uno.

2. UPDATE,

La sentencia UPDATE se utiliza para carnbiar el contenido de los registros de una tabla

de la basede datos. Su formato es:

UPDATE Nombre-tabla SET nombre-columna= exPr,...

IWHERE { condición }]

Nombre_Tabla es únicamente el nombre de la tabla donde se desea ingresar los

nuevos datos.

Nombre_columna es el nombte de columna o campo cuyo valor se deseacambiar. En

una misma sentencia UPDATE pueden acttahzase varios campos de cada registro de

latabla.

Expr es el nuevo valor que se desea asignar al campo que le precede. La expresión

puede ser tin valor constante o una subconsulta. Las cadenas de caracteres deberán

estar enceffadas entre comillas. Las subconsultas enüe paréntesis.

La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT r'

determina que registros se modificarán.

Por ejemplo, subir el precio de compra delatabla de LIBROS un 10% de aquellosque

tengan más de 250 pág;nzs, sería:

UPDATE LIBROS
SET PRE,CIO= PRECIO
\X'HERE PAGINAS > 250

cARnERA DE cotPuTAclóx e lNFoRillATlca CIBERTEC


AASE DE DAT OS. L ABORAT ORIO 57

Otro ejemplo,par^ frjarIz fecha de matrícula (en la tabla matrícula) de todos aquellos

alumnos que la denen vacíazlzfechade ho¡ sepondría:

UPDATEMATRICUI-A

SETFECFIA-MATRICULA= TODAYO

WHERE FECHA_MATRICUIAIS NULL

Ejemplo utilizando una subconsulta:

UPDATE TIBROS
SETPRECTQ = (gtrrF.CTAVGERECIO)
FROMLIBROSWHEREPRECIOIS NOT NULL )
WHEREPRECIOIS NULL

Con estaultima sentenciase ha puesto ptecio a todos los libros que no lo tenían. Ese

precio ha sido el resultante de calcular la media entre los libros que si lo tenían'

Un ejemplo más simple podría ser fijando un precio único para todos los übros, sin

utitzar la cláusulaWHERE
fi

ET
UPDATE LIBROS

SETPRECIO = 200

-r.
DELE,TE
Pe

DELETE es especialmente útil cuando se desea eliminat varios tegistros. En una

instrucción DELETE, con multiples tablas, debe incluir el nombre de tabla (Iabla.+). Si

especifica más de una tabla pam eliminat registtos, todas deben tener uria telación de

muchos a uno. Si deseaeliminar todos los registros de una tabla, eliminar Ia propiz tabla

es más eficiente que ejecuar una consula de borrado.

G-fTEG cARRERADEcofutpurac¡ón e INFoRMATIcA


rfE
Se puede utiüzat DELETE para eliminar registros de una única tabla o desde vanc¡
lados de una relación uno a muchos. Las operaciones de eliminación en cascadaen uru

consulta únicamente eliminan desde varios lados de una relación. Por ejemplo, en .;
telación entre las tablasClientesy Pedidos,la tabla Pedidos es la parte de muchos por i_

que las operaciones en cascadasólo afectañn ala tablaPedidos. Una consula de borrad,-
elimina los registroscompletos, no únicamentelos datos en campos específicos.Si dese¿

eliminar valores en un campo especificado, cte r una consulta de zct;,,lización quo

cambie los valores a Null.

Unavez que se han eliminado los rcgistros u 'lizando una consula de borrado, no puede

deshacer la operación. Si desea saber qué registros se eliminarán, pdmero exarnine lcr

resulados de una consulta de selección que utiüce el mismo criterio y después ejecute L

consulta de borrado. Mantenga copias de seguridadde sus datos en todo momento. Í

elimina los registros equivocados podrá recuperados desde las copias de seguridad.

El formato de la sentenciaes:

DELETE FROM Nombre_Tabla[WHERE { condición }]

NombreJabla es únicamenteel nombre de la tabla donde se deseaborrar los datos.

La cláusula WHERE sigue el mismo formato que Ia vista en Ia sentencia SELECT ;

determina que registros se borratán.

Cada sentencia DELETE borra los tegistros que cumplen la condición impuesta -
todos si no se indica chusula WHERE.

Con el siguiente ejemplo se borrarían todos los registros de la tabla libros cu-¿

antigüedad, desde la fecha de adquisición, fuera mayor de 20 años.

DELETE FROM LIBROS


$rHERE MODCfODAY - FECHA,365)> 20

caRRERADEcompurAclóN E tNFoRuÁrtca CIBERTEE


IASE DE DAT OS. L ABORAT OR¡ O

Oto ejemplo: Pan borrar las notas de evaluacionesque, no sean la Final, de los

alumnos de años antedores a12002 seuriluanz la sentencia:

DELETE FROMNOTAS
I

WHEREeÑO < 2002


)
AND EVALUACION<> 'F'
I

\CTÑ'IDADES
e

^ Segunla basede datos VENTAS


i
1. Crear una t¿bla llamada Copia_Vendedot con la misma estructura de la tabla
Tb-Vendedor.

CREATE COPIA_\IENDEDOR (

coD_\'EN VARCHAR(3) PRIMARY KEY,

NOM_\EN VARCHAR(5O)NULL,

APE_\EN VARCHAR(5O)NULL,

SUE_VEN REAL NUT T ,

tr
FEC_ING DATETIME NUT J ,

TIP_\E,N VARCHARO) NULL )

Insertar a la tabla Copia_vendedor, todos los vendedore de la tabla Tb-Vendedor

que perciban un sueldo mayor de 800

qra

INSERT INTO COPIA \E,NDEDOR

SELE,CTX FROM TB VENDEDOR

WHERE SUE_VEN > 8OO

G-TEC caRRERADEcoilrpurAcló¡ e rxronmÁrrcl


llErc
Eliminar de la abla Copia_vendedor todos los empleados que pertenecen ai
vendedor ignlal,

DELETE FROMTB VENDEDOR

IflFIERE TIP_VEN = '1'

4. De los datos restantes de la tzbla Copia-vendedor actualice el campo


ingeso y coloque Ia fechz actual.

UPDATE COPIA_VENDEDOR

SET FEC_ING = TODAY0

Segunla basede datos PESCA:

1,. Creat una copia de la baseIa tabla Tb_Empleado

2. Insertar todos los empleadosalanuevatabla.

3. Eliminat de la nueva tabla todos los empleados nacidos despuésdel año 1969.

4. De los datos restantes en su nueva tabla actualice el campo Hab_Bas y coloque 1,000 prmr

todos los empleadosque tengan estadocivil casado..

CARRERADE GoTPUTAGIÓN E INFoRMATIGA CIBERTEC


BASE DE DAT OS. L ABORAT ORIO

Fara recordar

La sentencia INSEM de una fila añade una fila de datos z vna tabIa. Los valores para la

nueva fi.la se especificanen la sentenciacomo constantes.La sentenciaINSERT multifila

añade cero o más filas a una tabla. I-os valores para las nuevas filas provienen de una

a
consulta,especificadacomo parte de la sentenciaINSERT.
I

I
La sentencia UPDATE modifica los valotes de una o más columna en cero o más filas de

una tabla. Las filas a actuiltzar son especificadasmediante una condición de búsqueda.

La sentencia DELETE suprime cero o más filas de datos de una tabla. Las filas a suprimir

son especificadasmedianteuna condición de búsqueda.

A diferencia de Ia sentencia SEI-ECT, que puede operar sobre multiples tablas, las

sentencias INSERT, DELETE y UPDATE funcionan solamente sobre una única tabla

cadavez.

trf,

caRRERADEcoupurAclóx e rxronuÁrrcl
F GTEC
I¡¡E DE DAT OS - L ABORAT ORIO

Consulhs Condlcisrales

l-r-\L\

r l-as consultas más sencillas par^ recuperar datos son las que nos ayr.rdarana entender las

siguientessesiones.En esta sesión aprendercmos a recuperar algunas filas y a recuperar

algunascolumnas en base a una sola tabla .

oB_lETrvos ESPECT
FICOS

o Recuperat datos de multiples formas sencillas, haciendo uso de algunas condiciones de

comparación.

CONTE,NIDO

o AND )r(,=,()..

o IF EXISTS

a BE,T\X'EEN,IN,
AND, O& NOT
a DISTINCT.LIKE,

C!BERTEC caRRERADEGotputacrón e ¡xronmÁt¡cl


CONSULTAS CONDICIONALES - PRIMERA PARTE

1,. Cdterios de Selección

A lo largo de esta y la próxima sesión estudiaremos las posibilidades de filtrat los registros

con el fin de recuperar solamente aquellos que cumplan unas condiciones preestablecidas.

Antes de comenzar el desarrollo de esta sesión, hay que recaJcartres detalles de vira

imporancia. El primero de ellos es que cada vez que se desee establecet una condicióc

referida a un campo de texto la condición de búsqueda debe ir encerrada entre comilla-.

simples;la segundaes que no se posible establecercondiciones de búsquedaen los.campos


memo y;la terceray ultima hace teferencia alas fechas.Las fechasse deben escribir siemprc

según el formato de configuración de su sistema.

2. Operadotes Logicos

Operador Uso

Es el "y" lógico. Evalua dos condiciones y del'uelve un valor de verdad


AND
;ólo si ambasson ciertas.

ls el "o" lógrco. Evalua dos condiciones y der,rrelveun valot de verdar si


OR
üguna de las dos es cierta.

NOT tJegaciónlóglca. Devuelve el valor contario de la expresión.

Los operadoreslógicos soportadospor SQL son: AND, OR, XOR, Eqv, Imp, Is y Not.

A excepciónde los dos últimos todos poseenla siguientesinaxis:

<expresión1> operador <exptesión2>

En donde expresión1 y expresión2 son las condiciones a evaluar, el resulado de la

operación variz en función del operador lógico. I-,a tabla adjunta muestra los diferentes

posiblesresultados:

caRRERA DE cotpurAclóx e tNFoRtATtcA CIBERTEC


IASE DE DAT OS. L ABORAT OR¡ O

<expresiónl> Operador

Vetdad AND Falso


Verdad AND Verdad Vetdad
Falso AND Verdad Falso
Falso AND Falso Falso
Vetdad OR Falso Verdad
Verdad Verdad Verdad
Falso OR Verdad Vetdad
Falso OR Falso Falso
I
Verdad XOR Verdad Falso
I
Verdad XOR Falso
s
Falso XOR Verdad Verdad
6
Falso XOR Falso Falso
e Verdad Eqt Verdad Verdad
Vetdad Eqt Falso Falso
Falso Eqt Vetdad Falso
Falso Eqt Falso Verdad
Verdad I-p Verdad Vetdad
Verdad I-P Falso Falso
Verdad I-p Null Null
Falso I-P Verdad Verdad
Falso I-p Falso Verdad
Falso I-p Null Verdad
Null I-P Verdad Verdad
Null I-p Falso Null
Null I-P Null Null

S' . cualquiemde las anteriorescondicionesle anteponemosel operador NOT el resultadode la

.re:ación seráel resultadocontrario.

;" -jnmo operador denominado Is se emple^ para comparar dos variables de tipo objeto

. '-r':ieto1> Is <Objeto2>. Este operador devuelveverdad si los dos objetos son iguales

eú l¡ . ,r más condicionespueden set combinadaspara formar expresionesmás complejascon

nte: :rs:::ros cdterios. Cuando existendos o más condicionesdeberánestat unidaspot AND o OR.

ltEC E-TTEC GARRERADE coiIPuTAG¡Óil E INFoRMATIGA


Ejemplosde operadoreslógicos.

ANO = 1,995AND CURSO= 2'

debende cumplfuselasdos condicionesparaque seaciert¿la condicióntotal.

SEXO= 1r OR PAIS IS NOT NULL

Basta con que urra de las dos seaciera para que lo seala condición total.

NOT (AÑO = 7995AND CURSO= 2)

El operadotlógico NOT esútil pataponer al contrariouna condición.

SEI-ECT x FROM Empleados

WHERE Edad > 25 AND Edad < 50:

SELECT * FROM Empleados

\X'HERE (Edad> 25 AND Edad < 50)

OR Sueldo= 100:

SEIECT * FROM Empleados

WHERE NOT Esado = 'Soltero':

SEIECT * FROM Empleados

WfHERE(Sueldo> 100AND Sueldo< 500)

OR (Provincia= Madrid'AND Estado= 'Casado);

CARRERADE comPUTAcIÓil E ITIFoRMAT¡GA


¡I¡E DE DAT OS - L ABORAÍORIO

i OperadoresNuméricos

Ptrareahza¡ opetacionesnuméricasse puede uüzat los operadores:

Operador Significado

-r Suma

Resta
* Multiplicación

División
x*ó ^ Exponenciacion

-1.1.Ejemplos de operadoresnuméricos

Se tiene la siguiente información en la abla Producto:

CODIGO DESCRIPCION PRECIO


P001 PapelBond A-4 28.5
P002 PapelBond Oficio 33.25
P003 PapelBulky 9.5
P004 PapelPeriódico 8.5500002
P005 Carnrcho Tinta Negra 40.0

Sepide:
Mostrar los datosde un producto, ademásel IGV y el Importe de cadaproducto.

SELE,CTCODIGO, DESCRIPCION,PR.E,CIO,

IGV=( PRECIOx 0.18),IMPORTE= @RECIOx 0.18)+


PRECIO

FROM PRODUCTO

Entonces el resultado obtenido sería el siguiente:

E CaRRERA
DEcompuracróx e ¡x¡onuÁr¡cl
4. Operadores de caracteres
Las expresionesde caracteres
puedenincruirros siguientesoperadores:

Concatenación manteniendo spa.i ciinTlanco


"
Concatenaciónmoviendolor blroio, ¿ firrii

4.1. Ejemplos de operadoresde caracteres

Se tiene la siguiente información enlaablavendedor

CODIGO NOMBRE APELLIDO SUELDO


v01 JUAN DIAZ 1150.0
v02 IRMA SOTO 750.0
v03 CARLOS AREVALO 1950.0
v04 CESAR OJEDA 900.0
v05 JULIO VEGA 950.0

Sepide:

Mostrar el nombre y apellido del vendedor en 1 sola columna

SELECTCODI@, NOMBRE YAPELLIDO' =NOMBRES+ , , + A

SUELDO

FROM VENDEDOR

cARRERADEcotpurac¡óx e lnronmÁrtcl
AASE DE DAT Og - L ABORAT ORIO 69

La tnfotmactón resultante sería:

CODIGO NOMBRE Y APE,LLIDO SUELDO


v01 JUANDIAZ 1150.0
v02 IRMA SOTO 750.0
v03 CARLOS AREVALO 1950.0
v04 CE,SAROJEDA 900.0
v05 JULIOVEGA 950.0

Y si por ejemplo, NOMBRE contiene 'Antonio ' y APELLIDOS 'Rodríguez'

SELECTNOMBRE - APELLIDOS

FROM PERSONA

ResultadoObtenido sería:

ANTONIORODRIGUEZ

r. Operadoresde Comparación

Operador Uso

Menor que

Mayor que

Distinto de

Menor ó Igual que

>= Mayor ó Igual que

Igual que

BET\XE,EN Utilizado para especificar un intervalo de valores.

LIKE Utilizado en la compamción de un modelo

ln {Jtilizado para especificarregistrosde una basede datos

Éc DEcoupuracróN E ¡xronuÁrrcl
cARRERA
5.1. Ejemplosde operadores
de comparación

5.1.1. Comparandonúmeros
Mostrar todos los datos de los empleadosque tenganmenos de 30 años de
edad.

SELECT * FROM EMPLEADO

VTHERE EDAD < 30

Mosüar todos los datos de los empleados que tengan hasa 30 años de edad

como máximo.

SELECT X FROM EMPI.E.ADO

WHERE EDAD <= 30

5.1.2. Comparando CaraceresASCII

Mostrar todos los datos de los empleados donde la pdmera leta de su apellido
seadesde'A'hast¿'U

SEI-ECT X FROM EMPLEADO

WHERE I_EFI(APELLIDO,I) < .M '

Mosüar todos los datos de los empleados donde la primera letra de su apellido
no sea la 'Z'

SELECT * FROM EMPLEADO

ITHERE LEFr(APELLIDO,I) < >'Z'

En ambos casos,la consula funcionaria perfectamente debido que el cadaleta


representaun código ASCII, por ejemplo la letra A representael código 65, la B
el código 66,r^ c el 67 y así sucesivamentehasta llegar a la z que representa el
código 90. Entonces según el ejemplo que debe a todos los empleados
-ortrrr

caRREnADEcotpurActóil E txronnÁncl
BASE DE DAT OS. L ABORAT ORIO

donde la primeta letra de su apellido sea desde 'A' hasta ' L', lo que hace
realmente es mostrar los registros donde la primera cifra tengan un código
ASCII menor que el código ASCII de la leta.L

5.1,.3. Comparando Fechas


Mostrar todos los datos de los empleadosque hayan nacido en el año 1970.

SEIf,CT + FROM EMPLE.ADO

WHERE YEAR (FEC-NA9 = 1'970

Mostrar todos los datos de los empleados que hayannacido antes del mes de
iunio.

SEI-E,CT * FROM EMPLEADO

WHERE MONTH (FEC_NAq < 6

Mostrar todos los datos de Ios empleados que hayan ingresado aaabaiat antes
deI25/01./1.998

SELECT X FROM EMPLEADO

WHERE FEC_ING <', 25/01/1998',

:. E-\fSTS - NOT EXISTS

:e define para comprobar la existencia o ausenciadel valor devuelto pof un Subselect.Una


o
erpresión con EXIST devuelve VERDADERO si la Subselect nos devuelve al menos un

;alor.

tri
rB
rel
ú06

EE GTEC cARRERADEcorüpuractón e t¡ronmÁrrcl


6.1. Ejemplos de EXISTS

Seleccionar todalainformación de vuelos pam aquellos que tengan origen LIMA v c.


los que queden plazaslibres.

SEI.E,CTX
FROM VUELOS
WHERE ORIGEN ='LIMA'
AND EXISTS(SEIT,CT+
FROM RESERVAS
WHERE PLAZAS-UBRES > O
AND NUM_VUELO = VUELOS.NUM-VUELO)

Si es que existealgún producto enlatablaproducto con código = 3, entoncesdeberá

mostrar los datos de todos los productos existentes.

Código Descripción Precio


4
I Productol 100
2 Producto2 200
3 Producto3 300
^
a Producto4 400

SEIECT x FROMProducto
!7HERE EXISTS ( SEI-ECT * FROM Producto
$7HERE Código = 3)

Entoncesdevolverálz tzbla"Producto" enteral


Ya que EXISTS (SEI-ECTx FROM ProductoWHERE Código = 3) devuelve
"verdadero"paraczdaunade las filastesultantesdel SELECT + FROM Producto.

GARRERADE COTPUTACIÓN E IXTONUAT¡CI


BASE DE DAT OS. L ABORAT OR¡ O

Y por otra parte:

SEIECT * FROM Producto


$7HERE EXISTS I SEI-ECT x FROM Producto
\X'HERE Código = 9)

No devolverá datos, ya que EXISTS (SEI-ECT x FROM Producto SIHERE Código =

9) devuelve"falso"

Y si se uüzz EXISTS en un query correlacionado (más adelante veremos el detalle de

Q.r.ry. Correlacionados), este es evaluado en cada caso implicado en la correlación. Asi


por ejemplo pata buscat los productos que tiene atgunaorden asociadase puede usar:

SELECT Codpro,Descripción

FROMPtoducto

WHERE EXISTS ( SEI-ECT + trROM Orden

WaHEREOrden.CodPro= Producto.CodPro)

=:Ionces Devolverá los sizuientesdatos:

Codpro Descripción
1 Ptoductol

3 Producto3

-
-\NY y SOME

Su función es idéntica y puede usarse tanto una como otra. Comparan el resultado de la

subconsula con cada una de las filas de la consulta, devolviendo "verdadero" por cada fila
je la consultaque tienen un resulado en la subconsulta.

Eiemplo

Tenemos otra manera de buscar los productos que tienen alguna orden asociada:

rrlE GTEC cARRERADEcolttpurAcÉx e ¡xronuÁttcl


74

SF.TF.CT Codpro,Descdpción

FROM Producto

WHERE Codpro = ANY (SEI-ECTCodPro FROM Oden)

Entonces Devolverá los siguientes datos:

Codpro Desctipción
1 Productol
3 Producto3

Esto puede parecer rgual que el tesulado obtenido usando "IN" (SELECT Codpro,
Descdpción FROM Producto I7HERE Cod IN (SELECT CodPtod FROM Ord)). La
diferenciaes que UANYUpuede ser usado con otros operadoresdistintos de " = ", tdes
tt)tt, tt( tt, tt( ) tt,
como e tc.

'.f-,*

CaRRERADEcotpuTActóx E rxronu^tlcl
N3G DE OAT OS . L ABORAT OR¡ O

,-;. NSLATAS CONDICIONALE,S - SEGUNDA PARTE

: BET\{E,EN

P¿raindicar que deseamosrecuperar los registros según el intervalo de valores de un campo

=nplearemosel operador Between cuya sintaxises:

cAMpo tNoTl BETWEENVALOR1AND VALOR2


rI-ACONDICIÓNNOT ESOPCIONAL)

\
En este caso la consula devolvería los tegistros que contengan en "campo" un valor incluído
t
en el intervalo valor1., valor2 (ambos inclusive). Si anteponemos la condición Not devolverá
5
.rquellosvalores no incluídos en el intervalo.

SEI.E,CT + FROM PEDIDOS

\rHERE,CODPOSTALBETITEEN1OOAND 2OO

( Devuelve los pedidos realiz2d65en una provincia determinada)

O paralistataquellosqueganenmáso 30.000,pero menoso ig"rl que50.000,usa:

SEII,CT ID_EMPLEADO

FROM TABIA_ESTADISTICA_EMPLEADOS

AND 5OOOO
WHERE SAI.\RIO BETWEEN 3OOOO

Paralistar todos los que no eslán en esterango:

SELECT ID-EMPLEADO

FROM TABLA-ESTADISTICA-EMPLEADOS

WHERE SAIARIO NOT BETWEEN 3OOOO


AND 5OOOO:

E CIBERTEC cARRERADEcorpurAcróx e r¡ronuÁrrcl


2. IN

Este operadot der,'uelveaquellos registros cuyo campo indicado coincide con alguno de

una lista. Su sintaxises:

EXPRESIÓNTNOTIIN O/ALOR1,VALOR2,...)

Imaginemos que tenemos la siguiente tabla DETALLE_FACTURA con la siguiente


información.

NUM_FAC COD_PRO CAN_\EN PRE-VEN


FAOOl P007 6 45.0
FAOOl P011 250 2.5
FAOOl P013 t1 560.0
FAOO2 P004 8 68.0
FAOO3 P002 100 35.0
FAOO3 P 011 6 49.0
FAOO3 P 017 21 0.40000001
FAOO3 P 019 t2 0.40000001
FAOO4 P004 a
J 20.0
FAOO4 P009 50 2.0

Debemos mostrar solamenteel detalle de las factutas FA001 v FA002:

SELECT T FROM TB_DETALLE_FACTU

$THERENUM_FAC IN (FA001"'FA002)

El resultado obtenido sería el siguiente:

NUM_FAC COD_PRO

GARRERA
DEGoupuractóN E tnronuÁrlcl
BASE DE DAT OS. L ABORAT ORIO

FAOOl P011 250 2.5

FAOOl P013 1.1 560.0

FAOO2 P004 8 68.0

Podemos comprobar si el valor del dato no corresponde a ninguno de los valores


objetivos utilizando la forma NOT IN del test de pertenenciaal conjunto. La expresión
IN puede ser cualquier expresión SQL, pero genetalmente es tan sólo un nombre de
columna, como en los ejemplos anteriotes. Si la exptesión del test produce un valor
NULL, el test IN del'uelve NULL. Todos los elementos en la üsta deben tener el
mismo tipo de datos y ese tipo de datos deberá ser del mismo tipo de dato de la
expresión de test.
Observemos que el ejemplo anterior es completamente equivalente a:

SELECT T FROM TB DETALLE FACTURA

\XTIERE (I.{UM_FAC = 'F4001) OR (I\UM_FAC='FA002)

Si deseamosmostrar a todos los empleadosque no ganenni 1000, ni 2000 soles,nuestra

consult¿ senala siguiente:

SELECT * FROM EMPLEADOS

WHERE SUELDO NOT rN (1000,2000)

.\ND, OR, NOT

Observe que las condicionesde búsquedacon AND, OR y NOT pueden ser ellasmismas

condicionalesde búsquedacompuestas.

3.1,. Lapalabra clave OR se utiliza pat combinat de dos condicionesde búsquedacuando

una ala otra (o ambas)deban set ciertas:

Ejemplo 1:

Mostrar a los vendedoresque estánpor debajo de la cuota o susventas son inferiores a

4.000 soles.

CI SELE,CTNOMBRE. CUOTA. \ENTAS

a
CIBERTEG caRRERADEcoitpuracró¡ e rxronmÁrrcl
FROMREPVENTAS
'$THEREVENTAS < CUOTA
OR VENTAS < 4OOO

Ejemplo2:
Mostrar ¿ los vendedoresque mbajan en los distritosde SAN BORJA o SAN LUIS

Str,I,tr,CTNOMBRE, APELLIDO, TEIf,FONO


FROMVENDEDOR
WHERE DISTRITO = 'SAN BORJA'
OR DISTRITO = 'SAN LUIS'

3.2.I-,2 Palabnclave AND la usamos para combinar dos condiciones de búsqueda que
deban set ciertas simultáneamente.

Ejemplo 1:

Mostrar a los vendedores que están por debajo de la cuota y tienen ventas inferiores a

4,000 soles.

SEIT,CT NOMBRE, CUOTA, VENTAS


FROM REPVENTAS
WHERE VENTAS < CUOTA
AND VENTAS < 4OOO

Ejemplo2:

Mostrar a los vendedoresque nabajxr en los distritosde SAN BORJA o SAN LUIS r
¿demáspercibanun sueldomayor a 3,000soles

SEI-E,CT NOMBRE, APELLIDO, TELEFONO


FROMVENDEDOR

cARRERADEGorpuracrór e rilFoRrÁTrca GIBERTBC


IASE D E DAT OS. L ABORAT ORIO

WTIERE DISTRITO IN ( SAN BORJA LUIS )


AND SUELDO > 3OOO "'SAN

i . 3 . La pilabn ciave NOT nos sirve para seleccionar filas en donde la condición de
búsquedaseafalsa

Ejemplo 2:

Mostrar a los vendedoresque estánpor debajo de la cuota pero cuyascuotas no son

inferiores a 4.000 soles.

SELECT NOMBRE, CUOTA, VENTAS


FROM REPVENTAS

'WTIE,REVENTAS < CUOTA


AND NOT VENTAS < 4OOO

\fisceláneade AND, OR NOT

SELECT X FROM EMPLEADOS


WTIERE EDAD 25 AND EDAD < 50

SELECT X FROM EMPLEADOS


\xTrERE (EDAD 25 AND EDAD < 50)
OR SUELDO = 100

SELECT * FROM E,MPLEADOS


\XTIERE NOT ESTADO = ' SOLTERO '

SE,LECT* FROM EMPLEADOS


\xTrERE (SUELDO 100AND SUELDO < 500)
OR (DISTRITO= 'SAN BORJA'AND ESTADO ='CASADO)

CARRERADE coMPUTAc¡Ó¡T e INFoRMATIGA


4. DISTINCT

Omite los rdstros que contienen datos duplicados en los campos seleccionados.Pa:e

los valores de cada campo üsado en la instrucción SELECT se incluyan en la cc

deben ser únicos.

Por ejemplo, varios empleados üst¿dos en la tzbla Empleados pueden tener el

apellido.Si dos registroscontienen IÁpez en el campo Apellido,la siguienteinstucció:: !

del'uelve un único registto:

SELECT DISTINCT Apellido FROM Empleados

Con otras palabras el predicado DISTINCT devuelve aquellos registros cuyos cr

indicados en la cláusula SEI-E,CT posean un contenido difetente. El tesultado cle

consulta que utiliza DISTINCT no es actualizable y no refleja los cambios su

realizadospor otros usuarios.

Ejemplol: Si tenemos t¿blaDISTRITO con los siguientesdatos:

cARRERADEcomPurActó¡r e ¡xronmÁtlc¡
BASE DE DAT OS - L ABORAT ORIO

D07 BARRANCO v03

D08 CHORRILLOS v09

D09 SANBORJA v02

D10 LINCE v03

En est¿ tabla podemos deducir fácilmente cuáles son las zonas de tabajo o qué distritos

tienen asignadocada uno de los vendedores, se entiende que cada uno de los vendedores

podrá tener más de un (1) distrito. Si se sabeque en Ia tabla VENDEDORES tenemos 10

vendedores registrados, la pregunta sería: ¿Qué vendedores aún no tiene ningún distrito

asignadoparztabajar?

La consulta seríade la siguientemaner i

SELECTDISTINCT COD_VEN
FROM TB DISTRITO

[-os valores devueltos senan:

COD_\E,N

v01
v02

v03
v08
v09

v10

Segunlos vdores del'ueltos observamosque los vendedotesV04, V05, V06, V07 no existen

aún en la tabla distrito por lo tanto de los 10 vendedores existentes,estos 4 no tienen

distritos asignados.

E CIBERTEC GaRRERADE compurac¡óN E tNFoRMArtca


Ejemplo 2: Tenemos latablaDETALI-E_VENTA con la siguiente información.

Se deseasaber ¿Cuálesson los productos vendidos?

SELECT DISTINCT PRODUCTO


FROM DETALIf,_VENTA

El resultadoobtenido sería:

Borradot de Tinta

Caia de Diskettes

Carnrcho Tinta Color

PapelBond Oficio

PapelBulky

Sobre Manila A-4

Sobte Manila Oficio

caRRERADEcotpurAclór¡ e tNFoRtATtcA CIBERf,B


B A S E DE DAT OS. L ABORAT ORIO

LIKE

Seutiliza p^t^ compa¿rf una expresión de cadenacon un modelo en una expresiónSQL. Su

sintaxises:

EXPRESION LIKE MODELO

En donde expresión es una cadenamodelo o campo contra el que se compara expresión.Se

puede uüzar el operador LIKE para encontrar valores en los campos que coincidan con el
modelo especificado. Por modelo también se puede especificar un valor completo (Ana

\Iada), o se pueden utilizat caracteres comodín para encontrar un rango de valotes de Ia

sizuienteforma:

SEI-ECT * FROM EMPLE,ADO

WHERE NOMBRESIJKE' Ano,/o'

-\ continuación presentaremos los distintos caracteres comodín para posterionnente


comptobar las exptesionescon diferentesmodelos

Catáctet
comodín
,h Cualquier cadena de cero o WHERE TITULOS LlKE'o/ocompatef/o
más caractetes. buscatodos los tínrlos de libros que
contengan la palabta'computer' en cualquier
parte del tínrlo.

Cualquier carácterindiüdual STHERENOMBRE LIKE'-ean' busca


subrayado) todos los nombresde cuatroletrasque
finalicencon ean@ertt, Sean,etc).

tl Cualquiet carácterindividuat WHERE APELLIDO LIKE'[C-P]arsen'


de intervalo ([a-fl) o del buscaapellidosque terminen con arseny
conjunto ([abcdefl) comiencen con cualquier carácterindividual
especificado. enüe C y P, por ejemplo Carsen,Larsen,
Karsen, etc.
Cualquietcarácterindividual WHERE APELLIDO LIKE ' de[^l ]o/o'
que no seencuentreen el buscatodoslos apellidosquecomienzancon
intervalo ([^a-fl) o el 'de'y en los quela siguiente
letrano sea'l'.
conjunto([^abcdefl)
especificado.

I GTEC GARRERADE cotpuracló¡r e tNFoRMATtca


El operador Like se puede uultzat en una expresión palr^ comparaLrun valor de r:::

campo con urra expresión de cadena. Por ejemplo, si introduce LIKE C%oen un:

consulta SQL, la consulta der.-uelvetodos los valores de campo que comiencen por ;

letra C. En una consulta con parámetros,puede hacer que el usuario escribael mode,"-

que se va a ttiTtzat

El ejemplo siguiente der,-uelvelos nombres que comienz^n con la letra P seguido c;

cualquier letra enffe A y F y de tres caracterescualquiera:

SELE,CT* FROM EMPLEADO

STHERENOMBRES LIKE 'PlA-Fl _ _ _

Este ejemplo devuelvelos nombres cuyo contenido empiececon uria letra de la A a la D

seguidasde cualquier cadena.

SELECT * FROM E,MPLEADO

ITHERE NOMBRES LIKE'[A-D]%'

En la tabla siguiente se muestra cómo utilizar el opemdor Like para comprob.i:

expresionescon diferentesmodelos

GARRERA DE GOi,IPUTACIÓN E ¡XTONUATICI CIBERTEC


BASE DE DAT OS. L ABORAT ORIO 85

ACTT\TDADES

De la basede datos \IENTAS:

1. Mostrar el detalle de todas las facturas cuyo importe (precio venta t cantidad) de cada

producto esteentre 1,000y 10,000soles.

SELECT *, IMPORTE = PRE_VEN*CAN_VEN

FROM TB_DETALLE_FACTURA

WHERE PRE-VENXCAN_VEN BETWtsEN 1OOO


AND 1OOOO

2. Mostrarel detallede lasfacturasF4002.F4005.F4006

)
SELECT X FROM TB DETALI.E, FACTURA

WHERE NUM_FAC IN (FA002"'F4005"'F4006)

3. De las facturas seleccionadas en la pregunta 2, muestre solamente el código de los

productos. (sin repetirlos más de 1 vez)

SELECT DISTINCT COD PRO

FROM TB-DETALLE_FACTURA

STHERENUM_FAC IN (FA002"'FA005"'FA006)

ú.

"BF:11
.-
': ¡r','

.'" 4

Tf- -.

'rbr

GTERTEC cARRERADEcoupurAcró¡ e rxronuÁr¡cl


lf3G
De la basede datos PESCA: lConsultas Condicionales D

1. Mostrar crrálesfueton las faenas rcelizadzsen las zonas Norte v Sur.

2. Mostrar el detalle de pescade las faenasrealizadasen las zonas Norte y Sur.

3. Mostrar solamente el código de las especiesrecolectadasen las faenasrealizadasen L¿s


Este y Oeste.

4. Mostrar el nombrc de todas las especiesque cuesan entre 60 y 300 soles

De la basede datos VENTAS: (Consultas Condicionales II)

1. De tabla fzcnx4Ud. debe mostrar todas las facturas y el código del vendedor, de ,r

facturas que indiquen algun producto con precio de venta superiot a200.

2. Si existe algún vendedot que gane más de 1000 soles, entonces muestre los rir--r*

todos los vendedores.

3. Mosüar el código de todos los vendedores que hayart nacido en el 1er semestred¿

1,998.

4. Mostrar a todos los clientes que tengan un teléfono que comience corr en númr:

termine con el número 4.

CARRERA DE COTPUTACIÓil E IIIFORMATIGA CIBERTE


BASE D E DAT Og - L ABORAT ORIO a7

PanarMar

Debemos recorda¡ siempre lo siguiente:

Czda vez que hagamos rüra consula haciendo referencia a un valor numédco, la

comparación será escrita de la siguiente manera:

WHERE CAMPO (=, ),(, etQ VALOR

Cada vez que hagamos trna consula haciendo referencia a un valor no numédco, la

compatación será escrita de la siguiente maner¿:

t t
\íHERE CAMPO (=, ),(, etg VALOR

Lrdicando los apostrofes al inicio y al final del texto compaÍar.


^

ü Es posible hacer una comparación a númetos guardados en formato CHA&


\--\RCHA& (es decir, texto). Lo único que debemos tomar en cuena es que cada

número es represenado por valotes ASCII y en realidad es el valot de carácterASCII el

que prima pararcaltzar un ordenamiento. Por Ejemplo:

Campo X (número guardados en Campo Y (número guardados en formato

formato numérico) texto)

2 2
25 25
10 10
1 I
7 7

DEcotpurAc¡ó¡
GARRERA e txronuÁr¡cl
Si deseo reahzat un ordenamiento de menor a mayor. el resultaci'- :*¡

Campo X (número guardados en


formato numérico)

El código de los caracteresASCII para los números son los siguientc:

4. Una condición de búsquedapuede seleccionatfilas mediante comparacic':- I

mediante comparación de un valor con rango o un gupo de ;lr:msü,

correspondenciacon ufl patrón de cadenao por comProbación de valores\---;

5. Las condiciones de búsquedasimples pueden combinarse mediante AND. t

panformat condicionesde búsquedamás compleias.

DEGoitpurActór e txronuÁrlcl
GARRERA
BASE DE DAT OS . L ABORAT ORIO

FuncionesAgrupdas y
húsqueda&grufos

TEMA

o Muchas peticiones de información no tequieren el nivel de detalle propotcionado pot las


I consultasdescritasen las sesionesanteriores.Ahora veremos que SQL soport¿ peticiones
T
de datos sumarios mediante funciones de columna y mediante cláusulas Group By y

Having de la sentenciaSelect.

] B-IETIVOS ESPECIFICOS

r Obtener resultados originados por la selección de uno o varios gruPos, haciendo uso de las

Funcionesde columna.

,_rI\TENIDO

¡ GROUP BY, HAVING

r SUM,AVG, MIN, MAX

. STDEV, STDEVP, COUNT

ITEC cARRERADEGorpurAc¡óx e ItronuÁt¡c¡


1. GROUP BY y I{AVING

Combina los tegistros con valores idénticos, en la lista de campos especificados.:m


único registto. Pata cada rdstro se crea un valor sumario si se incluye una i
SQL agregada,como por ejemplo SUM o COUNT (como veremos después.
instrucción SELECT. Su sintaxis es:

SELECT CAMPOS
FROM TABI.\
ITHERE CRITERIO
GROUP BY CAMPOS DEL GRUPO

GROUP BY es opcional. I-os valores de resumen se omiten si no existe una fi.rncric


agregadaen la instrucción SELECT. Los valores null en los campos GROL P B'l['
agrupan y no se omiten. No obstante, los valores null no se evalúan en ninguru &
funciones SQL agregadas.

Se utiliza la cláusula !7HERE para excluir aquellas filas que no desea agrupr:: m
cláusula HA\1NG para fltrar los registros una vez agrupados.

A menos que contenga un dato Memo, un campo de la lista de campos GROL?


puede teferirse a cualquier campo de las tablas que aparecen en la cláusula
incluso si el campo no esta incluido en la instrucción SELECT, siempre y cuari
instrucción SELECT incluya al menos una función SQL agregada.

Todos los campos de la lista de campos de SELECT deben o bien


cláusula GROUP BY o como argumentosde una función SQL agregada.

SEI-ECTrD_FAMrLrA,SUM(STOCrl

FROMPRODUCTOS

GROUPBY ID_FAMILTA

Una vez que GROUP BY ha combinado los tegistros, HAWNG muestra


tegistro agupado por la cláusula GROUP BY que satisfagaias condiciones de la
HAVING.

GARRERADE GoTPUTAGIÓN E lxronuÁT¡ca


DE DATOS. L ABORAT ORIO 9l
¡¡ S E

¡l \\TNG es similar a WHERE, determina qué registros se seleccionan.Una vez que los
:-glsrros se han agrupado stilizando GROUP BY, HAVING determina cuálesde ellos se
','ln a mostfaf.

SELECT ID_FAI,trLIA, SUM(STOCI9

FROA,{PRODUCTOS

GROUP BY ID FAMILIA

FTAVTNGSUM(STOCIg 100

AND NOMBREPRODUCTOLIKE'BOS7o'

Eiemplo prácúco'. Se tiene la siguiente tabla DETALLE-VENTAS

\UNT_FAC COD-PRO CAN_VEN PRE \T,N IMPORTE,

F4001 P007 6 45.0 270.0

FAOOl P011 250 2.5 625.0

FAOOl P013 1,1 560.0 6160.0

FAO02 P004 8 68.0 544.0

FAOO3 P002 100 35.0 3500.0

FAOO3 P 011 6 49.0 294.0

FAOO3 P017 21 0.40000001 8.4000006

FAOO3 P019 T2 0.40000001 4.8000002

Se solicitamostfaf el númeto de factura y el importe acumuladopor cada fact.)ta:

.IMPORTE ACUMUIADO , = SUM(IMPORTE)


NUM_FAC,
SE,LE,CT

FROM DETALLE_\E,NTAS

GROUP BY NUA,I_FAC

CTERfEC caRRERA DE coMPUTAcló¡ e lNFoRMArlca


El resultado obtenido seda el siguiente:

IMPORTE ACUMUI-ADC

Haciendo uso del I{AVING a continuación queremos filtrat los datos ¡¿


obtenidos y mostrar solamente los que tengan un IMPORTE ACUMLTL\D"-'
de 1,000soles

La solución seríala siguiente:

.IMPORTE ACUMUIADO , = SUM(IX


SELECT NUM_FAC,

FROM DETALLE_VENTAS

GROUP BYNUM_FAC

HAVTNG SUM(IMPORTE)> 1000

El nuevo resulado obtenido seríael siguiente:

IMPORTE ACUMUL{DO

CARRERA DE COilIPUTACIÓX E INFORTATICA


BASE DE DAT OS - L ABORAT ORIO 93

2. SUM

Devuelve la suma dei conjunto de valores contenido en rüi campo especifico de una
consulta.Su sintaxises:

SELECT SUMTEXPR FROM TABLA

En donde EXPR representael nombre del campo que contiene los datos que desean
snmarseo una exptesión que rcñza un cálculo utilizando los datos de dichos campos.
Los operandos de expr pueden incluir el nombre de un campo de una tabla, una
constante o una función (a cual puede ser intrínseca o definida pot el usuario pero no
otras de las funciones agregadasde SQL).

Por ejemplo:

SEIf,CT SUM(PRECIOUNIDAD * CANTIDAD) AS TOTAL

FROM DE,TALI-E,PE,DIDO

3. AVG

Calcula la media aritrnética de un conjunto de valores CONTENIDO en un campo


especificadode una consulta.Su sintaxises la siguiente

SELECT AVGGXPR) FROMTABIA


5

n
En donde EXPR representa el campo que contiene los datos numéricos para los que
se deseacalcularla media o una expresión que reahzaun cálculo utilizando los datos de
dicho campo. La media calc,¿ladapor AVG es la media aritrnética (a suma de los
valores dividido por el número de valores). La función AVG no incluye ningun campo
Null en el cálculo.

sEr-ECTAVG(GASTOS)
ASPROMEDTO

FROMPEDIDOS

'WHEREYEAR(FECI{A_GASTO)= 20OZ

CNTEC cARRERA DE corpuracróx e TNFoRMATTcA


-
4. MIN, MAX

Devuelven el mínimo o el máximo de un conjunto de valotes CONTENIDO c. ¡m

campo especifico de una consulta. Su sintaxis es:

SELECT MIN@)(PR) FROMTABIA


SFJtr,CT MAX(E)(PR) FROMTABIA

En donde EXPR es el campo sobre el que se desea realDar el cálculo. E"Pt :

incluit el nombre de un campo de una tabla, una constante o una función (a cur:

ser intrínseca o definida por el usuario Pero no otras de las funciones agrepfu$

SQL).

Ejemplos:

SEIECT MIN(GASTOS) AS ELMIN

FROM PEDIDOS

WHERE PAIS = ?ERU'

SELECT MAX(GASTOS) AS ELMAX

FROM PEDIDOS

WHERE PAIS = 'ECUADOR'

5. STDEV,STDEVP

Devuelve estimaciones de la dewiación estándar para la población (el total de lm

registtos de la tabla) o una muestra de la población tepresentada (muestra aleatoria " $qr

sintaxises:

DEcotPuraclÓ¡
GaRRERA e l¡ronuÁncl CIBERÍE
BASE DE DATO S. LABO RATO RI O

SELECT STDEV (EXPR) FROM TABIA

SELECT STDEVP (E,XPR) F'ROMTABIA

En donde EXPR representa el nombre del campo que contiene los datos que desean
un cálculo utilizando los datos de dichos campos.
evaluarseo una expresión que tea1jz.a

Los operandos de expr pueden incluir el nombre de un campo de una tabla, una

constante o una función (a cual puede ser intrínseca o definida por el usuado pero no

otras de las funciones agregadasde SQL)

STDEVP evalúa una población, y STDEV evahia una muestra de la población. Si la

consulta contiene menos de dos tegisttos (o registro para StDevP), estas


"i"g'i"
fi.rnciones devuelven un valor Null (el cual indica que la desviación estándar no puede

calcularse).

SELECT STDEV(GASTOS)AS DESVIACION

FROM PEDIDOS

WHERE PAIS = 'PERU'

SE,I-ECTSTDEVP(GASTOS)AS DESVIACION

FROM PE,DIDOS

WHERE PAIS= 'PERU'

h
b

{GTEC cARRERADEcorpurAcróil E ¡NFoRMATtca


6. COUNT

Calculael número de registrosdevueltospor una consulta.Su sintaxisesia su-.',:q"rt

SELECT COLINT(E)CR) FROM TABIA

En donde EXPR contiene el nombte del campo que desea contar. I-os

expr pueden incluir el nombre de un campo de una tabla, una constante o u:- i

(a cual puede set intrínseca o definida por el usuario pero no otras de la-. j

agregadasde SQL). Puede contar cualquier tipo de datos incluso texto.

Aunque EXPR puede reelizar un cálculo sobre un campo, COUNT src:

cuenta el número de rcgisttos sin tener efl cuenta qué valores se almacq:-=

registros.La función COUNT no cuenta los registros que tienen campos nu- ;

que EXPR seael caráctercomodín asterisco(x). Si utiliza un asterisco,Counr

número total de registros,incluyendo aquellosque contienen campos null. COi-,tr

es considerablementemás rapida que COUNT(Campo). No se debe poner e.

entre dobles comillas (+).

SELECT COUNT(+) AS TOTAL


FROM PEDIDOS

Si E)GR identifica a multiples campos, la función COUNT cuenta un registro vü:


menos uno de los campos no es Null. Si todos los campos especificadosson \lll

se cuenta el registro.Hay que separarlos nombres de los campos con' * '

SE,I-E,CTCOUNT€ECHAENVÍO + TRANSPORTE) AS TC
FROM PEDIDOS

caRRERADEcotpurAc¡ót e ¡rronmÁr¡cl
BASE D E DAT OS - L ABORAT ORIO

\fisceláneade ejemplos, mezclandotodas las funciones antedormente explicadas:

Eiemplol:

?ta cada departamento muestre: el número de deparamento, el número de empleados en ese

iepartamento y el salario promedio.

SELECT NDEPTO, COUNT(*), AVG(SUELDO)

FROM EMPLEADO

GROUPBY NDEPTO

: cnplo 2:

Fi= cada proyecto muestre su número, nombre, y número de empleados que tabajan en éL

SELECT NUM_PRO, PNOMBRE, COUNT(*)

FROM PROYECTO

GROUP BY NUM_PRO, PNOMBRE

\¡¡-:;-s \.eces se desea recuperat los valores de estas funciones sol¿mente para grupos que

tms:lcen ciertas condiciones. Por ejemplo, supongamos que queremos modificar la consulta

imr: 'Ir para que solamente apafezcanlos proyectos con más de dos empleados. Pa1¿hacet

c*m- SQL Provee la cláusulaHAVING, la cual puede junto con la chusula GROUp
^p^tecer
flf: 1\\-ING provee una condición sobre el grupo de duplas asociadascon cada valor de los
.,r'¡tr¡"'í-r-:l,s
agrupados, y en el resultado aparecen solamente los grupos que satisfacen esta

mmmri'-,Dn.
Por ejemplo.

lF,t CARRERADE coMPUTAcIÓil E ¡rronmÁt¡cI


Ejemplo3:

Para cadaproyecto en que tabaian más de dos empleados, fecupefaf el número de :

nombre del proyecto, y el número de empleados que tabalan en e-

SELECT NUM_PRO, PNOMBRE, COUNT(*)

FROM PROYECTO

GROUP BY NUM_PRO, PNOMBRE

HAVTNG COLINT(*) > 2

Ejemplo4:

Para cada depatamento que tenga más de cinco empleados,recuPerar


departamentoy el número de empleadosquegananmásde $350.000.

StrTFCT A. DNOMBRE, COTINT(A.X)


FROM DEPARTAMENTO A, EMPLEADO B
WHERE A. DNUMERO = B. NDEPTO
AND B.SUELDO > 35O.OOO
AND B.NDEPTO IN
(SELECT NDEPTO
FROM EMPLEADO
GROUP BY NDEPTO
HA\TNG COUNT(*) > 5)

Para desarrollar este ejemplo hemos utilizado una subconsulta que setá tema de

siguientessesiones.

GARRERADE COTPUTACIÓN E IXTONMATIC¡


]ASE DE DAT OS. L ABORAT ORIO

\CTTWDADES

¡ De la basede datos PESCA

1. Mosttat cuántasfaenasharealiz.adocadabarco.

sEr-ECT COD_BA&COUNT(*)

FROMTB BARCO

GROUPBY COD_BAR

2. Mostrar solamente los barcos que han ¡selizado más de 2 faenas

sEr-ECT COD_BA& CO{jNT(x)

FROMTB_BARCO

GROUP BY COD_BAR

r{AVTNG COUNT(*) > 2

3. Mostrar la cantidad de total de pecesrecolectadospor cadaespecie

sEr-ECT COD_ESP,SUM(CAN_REC)

FROMTB_DETALI-E,-FAENA

GROUPBY COD ESP

-1. Mostrar cuálesson los precios máximos y mínimo de las especies

D
SELECT PRECIO_MINIMO = MIN8RE_ESP),

PRECIO_MÁXIMO = MAX(PRE_ESP)

FROM TB ESPECIE

r GARRERADE coMPuTAcIÓil E INFoRTATICA


De la base de datos VENTAS

1. Mostrar el importe total de cada factxa

2. Mostrar el número de las f¿cturas que tienen un importe toul mayor a 10,000 sol*.

3. Mostrar el nombre de los cüentes que se les facturó las facturas seleccionadasde t
2.

4. Mostrar la cantidad de distritos asignadosde cada vendedor.

Para rer¡oldar

Las columnas sumadas utiüzan funciones de columna SQL para conde:s,m:


columna de valotes en un único valor.

La funciones de columna pueden calcular el promedio, la suma, el valor


valor máximo de una columna, contaf el númeto de valores de datos de una
contar el número de filas de los resultados de la consulta.

o La consultas sumarias sin una cláusula Group By genera una única fila de rc,
sumarizando todas las fi,lasde una tabla o de un conjunto compuesto de tablas.

o Una consulta sumaria con una cláusula Group By genera múltiples fi.las de resr
cadauna acumulando en valor de la suma en fila de un grupo en paticular.

DEcoMpuracróN E r¡ronuÁr¡cl
GaRRERA
B A S E DE DAT OS. L ABORAT ORIO

Gonsulhs Mult*hblas

IL\IA

o \luchas consultasútiles solician datos procedentesde dos o más tablas en la base de datos.

En esta sesión veremos que SQL permite recuperat datos que responden a peticiones

mediante consult¿s multitabla que componen datos procedentes de dos o más t¿blas.

]E-IETIVOS ESPECÍFICOS

¡ de consultasde doso mástablas.


datosquerespondena peticionesprocedentes
Recuperar

,rI\TENIDO

. TOIN,LEFTJOIN, RIGHTJOIN

CITEC GARRERA DE COMPUTAC¡Ó¡ C INFORÍf,ATIGA


UTILIZANDO COMBINACIONES

Las condiciones de combinación se pueden especificar en las cláusulas FROM o

aunque se rccomienda que se especifiquen en la cláusula FROM. Las cláusulas V

I{AVING pueden contener también condiciones de búsqueda pan frlnar aún más

seleccionadaspor las condiciones de combinación.

Las combinaciones se pueden clasificar en:

1. COMBINACIONES INTERNAS (a operación de combinación típica, que usa

opemdotes de comparación como - o <>). En este tipo se incluyen las

equivalentesy las combinaciones naturales.

Las combinaciones intemas usan un operador de comparacrón pan hacer coincidir l¡s

de dos tablas según los valotes de l¿s columnas comunes de cada abla. Un ejemplr

recuperar todas las filas en las que el númeto de identificación de estudiante es el mi

las tablasstudentsy courses.

COMBINACIONES EXTERNAS. Puede ser una combinación extema izquierda

o comPleta.

Las combinaciones extemas se especifican en la cláusulaFROM con uno de los siguie-:'r''*

conjuntos de palabras clave:

2.1, LEFTJOIN o TFFT OUTERJOIN

El conjunto de resulados de una combinación extema izquierda incluye todas las ri'q

la tabla de la izquierda especificada en la cláusula LEFT OUTE& y no sólo aqueX:as


las que coincidan las columnas combinadas. Cuando una fila de la abla de la

no tiene filas coincidentes en la tabla de la derecha, la ñlq asociada del coniun¡n

resultados contiene valores NULL en todas las columnas de la lisa de selección

ptocedan de la tabla de la derecha.

GARRERA
DEcotpurac¡ó¡ ¡ r¡ronuÁncl
BASE DE DAT OS. L ABORAT ORIO

2.2 RIGHTJOIN o RIGHT OUTERJOIN

Una combinación extema derecha es el inverso de una combinación extema izquierda.

Se der,rrelventodas las filas de la tabla de la derecha. Cada vez que una fila de la tabla de
la derecha no tenga correspondencia en la tabla de la izquierda, se devuelven valores

NULL panlatabla de la izquierda.

2.3 trvLLJoIN o FULL OUTERJOIN.

Una combinación extema completa del'uelve todas las filas de las tablas de la izquierda y

la derecha. Cada vez que una fila no tenga coincidencia en la otra tabla, las columnas de

la lista de selección de la otra tabla contendrán valores NULL. Cuando hzya vna

coincidencia entre las tablas, la fila completa del conjunto de tesultados contendrá los

I
valoresde datos de las tablasbase.

: COMBINACIONESCRUZADAS
rl

Las combinaciones cruzadasdevuelven todas las filas de Iatablaizquietda y cadafila de la

tabla izquierda se combina con todas las filas de la tabla de la derecha. Las combinaciones

cnvadas se llaman también productos cartesianos.

Por ejemplo, A continuación semuestraun ejemplo de una combinacióncruzada

USE PUBS

SELECT AU_FNAME,, AU-LNAME, PUB-NAME

FROM AUTHORS CROSSTOIN PUBLISHERS


&
ú' ORDER BY AU_LNAME DESC

*,

& --:s tablas o vistas de la cláusula trROM se pueden especificar en cualquiet orden en las

F --,tmbinacionesintemas o extemas compleas; sin embargo, el orden de las tablas o vistas


=soecificadosí es importan¡s 5i uriliza una combinación extema izquierda o derecha.

iñTEC GARRERA DE coTPUTACIÓx C INFORTATIGA


1,. COMBINACIONES INTERNAS

1.1rNNER JOrN
Una combinación intema es aquélla en la que los valores de las columnas que :<

combinando se comparan mediante un opetador de comparación.

En el estándarSQL92,las combinacionesintemas se pueden especificaren las i

FROM o \X{HERE. Este es el único tipo de combinación que SQL92 admire

cláusula WHERE. Las combinaciones intemas especificadasen la cláusula V

conocen como combinaciones intemas al estiio antiguo.

Esa consulta de Transact-SQl es un ejemplo de una combinación intema:

USE PUBS

SELECT X

FROM AUTHORS A INNER IOIN PUBLISHERSP

ON A.CITY = P.CITY

ORDER BY A.AU LNAME DESC

Esta combinación intema se conoce como una combinación equivalente.

todas las columnas de ambas tablas y sólo devuelve las filas en las que haya un vaice

en la columna de la combinación.

Es equivalente a la siguiente consulta:

USE PUBS

SEI-E,CT*

FROM AUTHORS A, PUBLISHERSP

WHERE A.CITY = P.CITY

ORDER BY A.AU_LNAME DESC

Comprobarrdo los resultados en el anahzadorde consultas, observamos que la

CITY aparecedos veces. Puesto que no tiene sentido repetir la misma informacicm-

puede eliminar una de estas dos columnas idénticas si se cambia la lista de seleccióc-

cARRERADEGorpuracróx e ¡NFoRtATtcA
BASE DE DAT OS - L ABORAT ORIO t05

resultado se llama combinación natural. La consulta anterior de Transact-SQl se puede

volver a formular para que forme una combinaciánna¡traJ.. Por ejemplo:

USE PUBS

SELE,CTP.PUB_ID,P.PUB-NAME, P.STATE,A.*

FROM PUBLISHERSP INNER IOIN AUTHORS A

ON P.CITY = A.CITY

ORDER BY A.AU_LNAME ASC,A.AU_FNAME ASC

En el ejemplo anterior PUBLISHERS.CITY no apareceen los resultados.

1,.1,.1,Combinacionescon operadoresdistintos de igual

También se puede combinar valores de dos columnas que no son iguales. I-os

mismos operadores y predicados usados para las combinaciones intemas se

pueden utjüzarparalas combinacionesno igual (< >).

Este ejemplo de Transact-SQl es de una combinación mayor que (>) que busca

autores de NEü7 MOON que viven en esados cuyo nombre está en orden

alfabético después de Massachusetts, donde se encuentra NEW MOON

BOOKS.

USE PUBS

SEI-E,CTP.PUB_NAME, P.STATE,A.AU_LNAME, A.AU_FNAME, A.STATE

FROM PUBLISHERSP INNER TOIN AUTHORS A

ON A.STATE,> P.STATE

\X'HEREP.PUB-NAME = 'NE\ü7MOON BOOKS'

ORDER BYAU-LNANG ASC,AU-FNA¡fi ASC

GTEC cARRERA DE coupuractón e tNFoRilATtcA


El siguiente es el conjunto de resuiados:
AU_FNAME ::

NewMoon Books

1.1.2 Combinacionescon el operador no igual

La combinación no iguat (< >) se usa con poca frecuencia. Como :<r¿

combinaciones no igual sólo tienen sentido cuando se usar-t t r

combinación. Por ejemplo, la combinación no igual de Transac':->=r

combinación siguientes se usan pata buscar categoríasde dos o rn¿. :.i

(menos de 15 dólares)de distintos precios:

USE PUBS

SELECTDISTINCT T1.TYPE.TI.PRICE

FROM TITI-E,ST1 INNER IOIN TITI-E,ST2

ON TI.TYPE = T2.TYPE

AND TI.PRICE <> T2.PRICE

WHERE,T1.PRICE,< $15AND T2.PRICE< $15

NOTA: La exptesión NOT column-nalne = column-name es eqtu\-j

column name ( ) column name.

En el siguienteejemplo de Transact-SQl se usa una combinación no:¡i¡t

combina con una auto combinación pan buscar todas las filas c" lu
TITLEAUTHOR en la que dos o más filas tengan el mismo TITLE-3
distintosnúmerosde AU-ID (esdecir,libroscon másde un autor):

cARRERA DE cotPUTAcóN E ll¡ronmÁtlcl


¡ASE DE DAT OS - L ABORAT ORIO 1l J 7

USE PUBS

SELECTDISTINCTTI.AU ID. TI.TITLE ID

FROM TITLE,AUTHOR T1 INNE,R ]OIN TITLEAUTHOR T2

ON TI.TITLE_ID = T2.TITLE_ID

WTIERE T1.AU_ID <> T2.AU ID

ORDERBYTI.AU ID

" CON'ÍBINACIONES E,XTE,RNAS

L¿s combinaciones internas sólo der,rrelven filas cuando hay una fila de ambas tablas, como

mrrúmo, que coincide con la condición de la combinación. Las combinaciones intemas

elrminan las filas que no coinciden con alguna fila de Ia otra tabla. Sin embargo, las

combinacionesextemasdevuelventodas las filas de una de las tablaso üstas mencionadasen

la cláusula FROM, como mínimo, siempre que tales filas cumplan con alguna de las

condicionesde búsquedade \XfHERE o HA\{NG. Todas las filas se recuperaránde la tabla

izquierda a la que se haya hecho tefetencia con una combinación extema tzqtierda, y de ia

mbla derecha ala que se haya hecho referenciacon una combinación extema derecha.En una

combinación extema completa. se der,rrelventodas las filas de ambastablas.

SQL Server 2000 unli"a las siguientespalabrasclavede SQL-92 pata las combinaciones

extemasespecificadasen una cláusulaFROM:

¡ T.trFT OUTER IOIN o LEF I IOIN

. RIGHT OUTE,R TOIN o RIGHT TOIN

. FULL OUTER IOIN o FULL IOIN

L
SQL Server admite tanto la sintaxis de combinaciones extemas de SQL-92 como la sintaxis

heredadapara especificarlas combinaciones extemas que se basan en la udltzadón de los

operadores *= y =* en la cláusulaWHERE. Se recomienda uilizar a sintaxis de SQL-92

CIBERTEC caRRERADEGotpuractóN E txronr¡Ar¡cl


porque no está sujeta a las ambigüedades que se producen, en ocasic'::.:"

combinacionesextemashetedadasde Transact-SQl.

2.1 LEFI JOIN (lJtilizando combinacionesexterioresizquierdas)

Imagine una combinación de la tabla AUTHORS y de la tabla PUBLISHEi-'

columnas CITY. I-os resultados sólo muestran los autores que viven en ciudaci.. :

algún editor (en estecaso,Abraham Bennet y Cheryl Carson).

Para incluir todos los autores en el tesult¿do, con independencia de que ';::

encuentre o no en la misma ciudad, use una combinación extedor u--

continuación se muestra la consultay los resultadosde la combinación extema :-

Transact-SQL:

USE PUBS

SELECT A.AU_FNAME, A.AU_LNAME, P.PUB_NAME

FROM AUTHORS A LEFT TOIN PUBLISHERSP

ON A.CITY = P.CITY

ORDER BY P.PUB-NAME ASC,A.AU_LNAME ASC,A.AU_FN-I\E

El siguientees el conjunto de resultados:

Algodata Infosystems

Algodata Infosystems

LEF f JOIN incluye en el resulado todas las filas de la tabla authors, tanto si iun

coincidencia en la columna CITY de la tabla publishers como si no la hay. Obsen-e c'-u.

GARRERA DÉ COMPUTACIÓ¡ E INFORTAT¡CA


BASE DE DAT OS - L ABORAT ORIO l09

los resultados,no hay datos coincidentes con la mayot parte de los autores enumerados,

con lo que estasfilas contienen valores NULL en la columna puB NAME.

2.2 RIGHTJOIN (Jtilizando combinacionesexterioresderecha


Imagine una combinación de la tabla AUTHORS y de la tabla PUBLISHERS en sus

columnas CITY. Los tesultados sólo muestran los autores que viven en ciudades donde
haya algtn editor (en este caso, Abraham Bennet y Cheryl Carson). El operador de

combinación exterior detecha,RIGHT JOIN, indica que todas las filas de la segundatabla

se deben incluir en los resultados, con independencia si hav datos coincidentes en la

pdmera tabla.

Para incluir todos los editores en los resultados,sin tener en cuenta si hay un editor en la

ciudad, use una combinación extema derecha.A continuación se muestra la consulta de

Transact-SQl y los resultadosde la combinación externaderecha:

USE PUBS

SELE,CTA.AU_FNAME, A.AU_LNAME,, P.PUB_NAME,

FROM AUTHORS AS A RIGHT JOIN PUBLISHERSAS P

ON A.CITY = P.CITY

ORDER BY P.PUB_NAMEASC,A.AU_LNAME ASC,A.AU_FNAME,ASC

I+ El siguientees el conjunto de resultados:

AU_FNAME AU LNAME PUB_NAME


il
I+ Abtaham Bennet Algodata Infosystems
Cheryl Catson Algodata Infosystems
n NULL NULL Binnet & Hardlev
n
NULL NULL Five Lakes Publishinob
NULL NULL GGG&G
NULL NULL Lucetne Publishing
NULL NULL New Nfoon Books

n
ür

¡r ETERTEC GARRERADE coMPUTAc¡ó¡ e IrrronuÁrIcI


Una combinación extema se puede testringir aún más si se utiliza un predrcai,

comparar la combinación con una constante). En este ejemplo se muestra -i

combinación extema derecha, pero se eliminan todos los tín¡los de los que se h::

menos de 50 copias:

USE PUBS

SEI-ECTS.STOR_ID,S.QTY,T.TITLE

F'ROM SALESS RIGHT IOTN TITTES T

ON S.TITLE-ID = T.TITLE-ID

AND S.QTY > 50

ORDER BY S.STORID ASC

El siguiente es el conjunto de resultados:

Siücon Valley Gastronomic Treats

Straight Talk About Computen

The Busy Executive's Database Guide

The Gourmet Microwave

The Psychologyof Computer Cooking


You Can Combat Computer Stress!

2.3 FUI-LJOIN Qtiüzando combinaciones extemas completas)


Para retener la información que no coincida al incluir las filas no coinciden:r lnr

resultados de una combinación, utilice una combinación extema completa. SQ-

2000 proporciona el operador de combinación extema completa, FULLJOIN, c-:t

todas las filas de ambas tablas, con independencia de que la otr:atabla teng o n -!t

coincidente.

DEcorpurAc¡óx
GARRERA e lxronmÁrlcl
BASE D E DAT OS - L ABORAT ORIO

Imagine una combinación de la tabla AUTHORS y de la tabla pUBLISHERS en sus


columnas CITY. I¡s resultados sólo muestrari los autores que viven en ciudades donde
hay
algún editor (en este caso, Abraham Bennet y Cheryl CatsoQ. El operador de combinación

extema completa, FULLJOIN, indica que todas las filas de ambas ablas se van a inciuir en
los resultados, con independencia de que haya datos coincidentes en las t¿blas.

Para incluir todos los editores y todos los autotes en el resultado, sin tener en cuenta
si una
ciudad tiene un editot que se encuentra en la misma ciudad, o si un editor se encuentra
en la
misma ciudad, use una combinación extema completa. A continuación se muestra
Ia
consulta y los resultados de ia combinación extema completa de Transact-Sel:

USE PUBS

SEIECT A.AU_FNAME, A.AU_LNAME, P.PUB_NAME

FROM AUTHORS A FULLJOIN PUBLISHERSP

ON A.CITY = P.CITY

ORDER BY P.PUB_NAME ASC,A.AU-LNAME ASC,A.AU-FNAME ASC

El siguiente es el conjunto de resultados:

AU_FNAME AU_LNAME PUB-NAME


Dirk Stringer NULL
Johnson White NULL
Akiko Yokomoto NULL
Abtaham Bennet Algodata Infosystems
Cheryl Carson Algodata Infosystems
NULL NULL Binnet & Hardley
NULL NULL Five LakesPublishing

ÍTCRTEC CARRERA oE conPUI.AcIóN E l/NFoRnAT/,cA


De la basede datosVENTAS:

1. Mostrar el nombrc de los Vendedores que no hzrc¿Jtzado ninguna venta

2. De la abla Tb-F^6tr^ Ud. debetá mostrar los datos de todas las factwas
ademásel nombre y apellido de susvendedores.

3. Indicar el nombre del producto que hasa el momento no se registra en ninguna vemr"

4. Indicar el nombte, teléfono, dirección de cada cliente y el impone total de


compfas.

De los datos seleccionadosen la prcgunta 4, Ud. debetá mostrar solamente a los


tengan un impote total mayor de 10,000 soles.

Parar€codar

En una consulta multiabla las ablas que contienen los datos son designadasen h
From.

Cada frla de rcsulados es rura combinación de datos procedentes de una única fih
una de las ablas, y es la única fil¿ que extrae sus datos de esacombinación particular

Las consulas multit¿blas más habituales uüzan las relaciones padre/hijo ueadas
clavesprimadas y claves foráneas.

o Una abla puede componerse consigo misma; las autocomposiciones requieren d


alias.

cARnEnA DEGoTPUTAcIóx E INFoRf,A?rcA


IASE D E DATO A . LABO RATO RI O ll3

Sub Cotrsllltas anidadas y


Gorrelrcionadas y Greciorr
deVistas

TL\fA
o I-a canctetística de una subconsulta de SQL, es que permite uüzar los resultados de una

consulta como Parte de otra. Las subconsultas hacen más fáctl la escritua de la sentencia

Selecgya que permiten descomponer una consulta en partes. En esta sesión descdbiremos

las subconsulas.

. l¿s vistas permiten acomodar el aspecto de una base de datos de modo que diferentes

usuarios la vean desde diferentes perspectivas.

OB.TETTVOSESPECÍFICOS
t -\prender au'tirat los resulados de una consulta como parte de otra.

'r Describir como crear visas y aprendet a ailizarlas para simpüficar el procesamiento y

mejotar la seguddad de una base de datos.

üDNTENIDO

SFI trCT contenidoen otro SEIf,CT

CREATE VIEW

- \-istashorizontales.VistasVerticales

GAnRERA DE corlPUTAcIóil E INFoR&ATIGA


I. SUB CONSULTAS ANIDADAS

Una subconsulta es una consulta SELECT que devuelve un valor único v esri .:-.,:

unainstrucción SELECT.INSERT. UPDATE o DELETE. o dentro de otra sub.-

Una subconsultase puede uti\zat en cualquierparte en la que se permita una expr.r. ú

En esteejemplo se utiliza una subconsulta:

SELECT COD-VEN, NOM_VEN FROM TB_\T.NDEDOR

$TFIERECOD \E,N IN

( SELECT COD_\'EN

FROM TB_FACTURA

WHERE NUM_FAC = 'F4003 ')

Se llama también subconsulta a urra consult¿ o selección interna, mientras ._i Jüü

instrucción que contiene una subconsultatambién es conocida como consulta o se-¡:¡mr

extema.

Muchas de las instruccionesTransact-SQl que incluyen subconsultasse pueden :,-

también como combinaciones.Otras preguntasse pueden formular sólo con subc, :-"

En Transact-SQl, normalmente no hay diferenciasde rendimiento entre una i¡s:

que incluya una subconsulta y una versión equivalente que no lo hzga. Sin emb":¡

algunos casos en los que se debe comprobat la existencia de algo, una corn::

produce mejores resultados.De lo contrario, la consulta antdadadebe ser proces:ii

cadaresultadode la consulta extema con el fin de aseEwarla eliminación de los dur,

En t¿les casos,la unlización de combinaciones producfuíalos mejores resultados.F..¡r:

un ejemplo que muestra una subconsulta SELECT y una combinación SELEII-

devuelveel mismo coniunto de resultados:

GaRRERADE Goupuracróil E TNFoRMATIcA


BASE DE DAT OS. L ABORAT ORIO ll5

1, StrTFCT COD VE,N.NOM VEN

FROM TB_\-ENDEDOR

STHERECOD_VEN IN ( SE,LECT COD_VEN

FROM TB_FACTURA

WHERE NUM_FAC = 'F4003 ')

2, SEI-ECTA.COD VEN. A.NOM \'EN

FROM TB_VENDEDOR A, TB_FACTURA B

WHERE A.COD_VEN = B.COD_\{EN

AND B.NUM_FAC= 'F4003'

L na subconsultaanidada enla instrucción extema SELECT tiene los siguientescomponentes:

. Una consulta SEI-ECT normal, que incluye los componentes nofinales de la lista de
r
selección.
L.
Una cláusulanormal FROM que incluve urio o más nombres de tablas o vistas.
o
o Una cláusulaopcional WHERE.

3 Una cláusula opcional GROUP BY.


¡
Una cláusulaopcional I{AVING.
ú,

ü ; consulta SELECT de una subconsultase incluye siempte entre paréntesis.No puede incluir

p ::: cláusulaCOMPUTE y sólo puede incluir una cláusulaORDER BY cuando se especifica

=:bién una cláusulaTOP.

'-:,:
subconsultapuede anidarsedentro de la cláusulaWHERE o HAMNG de una instrucción

::i.rna SELECT,INSERT, UPDATE, o DELETE, o dentro de ora subconsulta.

CRTEC GARRERADE coMPuTAcIÓN E INFoRilATIcA


Se puede disponer de hasta 32 niveles de anidamiento, aunque el límite vada dependiend,-,j¡,

memoria disponible y de la complejidad del resto de las expresionesde la consulta.Las

indiüduales puede que no admitan anidamientos por encima de 32 niveles. Una subcc

puede en cualquier parte en la que se pueda usar una exptesión, si der,uelve u:: t
^parecer
individual.

Si una tabla aparecesólo en una subconsulta y no en la consula extema, las columnas x

tabla no se pueden incluir en el resultado (a lista de selección de la consulta extema).

Las instrucciones que incluyen una subconsulta normalmente tienen uno de estos formarc':':

WHERE exprcsióntNO! IN (subconsulta)

WHERE exptesión-de_comparacion
IANY I AIf] (subconsulta)

WHERE INOTI EXISTS (subconsulta)

En algunas instrucciones, la subconsulta se puede evaluar como si fuera una c

independiente. Conceptualmente,los tesultados de la subconsulta se sustituyen en Ia c:

extem2,

Hay tres tipos básicosde subconsultas:Son las que:

Operan en üstasincorporadas con IN, o en aquéllasque modificó un operador de

compatación mediante ANY o ALL.

Se introducen con un operador de comparación sin modificar y deben devolver un -;arürm

individual.

. Son pmebas de existenciaque seintroducen con EXISTS.

DEcoiltpurAclóx e ItronmÁr¡cl
GaRRERA
BASE DE DAT OS - L ABORAT ORIO 1 17

1,.1,. ANY I SOME


Se puede utjüzarel predicado ANY o SOME,los cualesson sinónimos, para recuperar

registros de la consulta prin.rpal, que satisfagan la comparzción con cualquier otro

registro recuperado en la subconsulta. El ejemplo siguiente devuelve todos los

productos cuyo ptecio unitario es mayor que el de cualquiet producto vendido con un

descuentoigual o mayor aJ,25por ciento.:

SEI-ECT* FROM PRODUCTOS

\XTIERE PRECIOUNIDAD ANY

(SELECT PRECIOUNIDAD FROM DETALLEPE,DIDO

SíHERE DESCUENTO = 0.25)

1.2.Ar_L
El predicado ALL se uti-liza para tecuperar únicamente aquellos registros de la consulta

pritr.rpal que satisfacen la companción con todos los registros tecupemdos en la


l!'
subconsulta. Si se cambia ANY pot AII en el ejemplo anterior, la consulta devolverá
b
únicamente aquellos pioductos cuyo precio unitario sea mayor que el de todos los

productos vendidos con un descuentoigual o m^yot aI 25 pot ciento. Esto es mucho


más restrictivo.

3. IN

El predicado IN se emplea para recuperar únicamente aquellos registtos de Ia consulta

ptittcrprt para los que algunos registros de la subconsulta contienen un valot igual. El

ejemplo siguiente del'uelve todos los productos vendidos con un descuento tg""l o

m yor aJ.25por ciento:

SELECT T FROM PRODUCTOS

ITHERE IDPRODUCTO IN

(SELECTIDPRODUCTO FROM DETALLEPEDIDO

\[T{ERE DESCUENTO = 0.25)

Ü.TEC CARRERADE coMPuTAc¡óx e INFORüATTCA


lnversamentesepuede u'liz.ar NOT IN para recupera¡únicamenteaque-::'r

Ia consula pdncipal para los que no hay ningun registro de la subconsr.¡.i=

un valor igual.

1.4. EXISTS

El predicado EXISTS (con la palabn reservada NOT opcioni ir


compatacionesde verdad/falso para determinar si la subconsult:
registro.

Sepuede ttiszar también aliasdel nombre delatabla en una subconsuh:m


tablas lisadas en la cláusula FROM fuem de la subconsulta. El s*=úr
devuelve los nombres de los empleados cuyo salado es igual o mar{: .u.re
medio de todos los empleadoscon el mismo título. A la tabla Empieadrr sc
el aliasT1.

SEI-ECT APELLIDO, NOMBRE, TITULO, SAIARIO

FROM EMPLEADOS T1

NTHERESAIARIO = (SELECT AVG(SAIARIO)

WHERE TI.TITULO = EMPLL{DCt I

El siguiente ejemplo obtiene una lista con el nombte, cargo y salario de roc:':

de ventas cuyo salarioes mayor que el de todos los jefesy directores.

SEIECT Apellidos, Nombre, Catgo,Salario

FROM Empleados

WHERE Cargo LIKE'Agente Yeno/o'

AND Salario > ALL ( SELECT Salario

FROM empleados

WfHERE(CargoLIKE'o/oJefeo,;

OR (CargoLIKE 'o/oDnectof/o)

GARRERADE coTPUTAcIÓN E INFoRTATIGA


BASE DE DAT OS - L ABORAT ORIO l l9

2, SUBCONSULTAS CORRE,I-{CIONADAS

Se pueden evaluar muchas consultas mediante la ejecución de la subconsula vna vez y Iz


sustitución del valor o valores tesultantes en la cláusula WHERE de la consulta extema. En
las consultas que incluyen una subconsulta correlacionada (conocida ambién como una
subconsulta repetida), la subconsulta depende de la consulta extema para sus valores. Esto
significa que la subconsulta se ejecuta varias veces, rrna vez por cada fila que pueda ser
seleccionadapot la consulta extema.
Esta consulta busca el nombre de todos los autores que ganen el cien por cien de los
derechos de autot compartidos (ROYALTYPER) de un libro.

SEI-E,CTAU-LNAME, AU-FNAME

FROMAUTHORS

WHERE lOOIN

(SEI.ECT ROYALTYPER

FROMTITLEAUTHOR

WHERE TITLEAUTHOR.AU-ID = AUTHORS.AU-ID)

Al contrario que la mayor parte de las subconsultas mostradas anteriormente, la subconsulta


de estainstrucción no sepuede resolver con independenciade la consultaprincipal. Necesita
un valor para AUTHORS.AU_ID, pero este valor es una vadable. Cambia a medida que
\{icrosoft SQL Serverexaminadistintasfilas de IatablaAUTHORS.

Una vista se puede considerar una tabla virtuat o urra consulta aJmzcenada.Los datos

accesiblesa través de una vista no están almacenadosen un objeto distinto de la base de

datos. I-o que está almacenado en la base de datos es una instrucción SELECT. El resultado

de la instrucción SELECT forma Ia tabla virtual que la visa devuelve. El usu¿rio puede

vihzar dicha tabla virtual haciendo referencia al nombre de la visa en instrucciones

Transact-SQl, de la misma forma en que se hace refetenciaa las tablas.Las üstas se utilizan

can alganade estasfunciones, o P^r^ todas:

. Restrineir el accesodel usuado a filas concteas de una tabla.

Por ejemplo, permitir que un empleado sólo vea las filas que guardan su trabajo en una

t¿bla de seguimiento de actividad laborai.

GTEC GaRRERADE coirpurac¡óx ¡ rNFoRMATlca


120

. Restringlr el accesodel usuario a columnas específicas.

Por ejemplo, permitir que los empleados que no tabajen en el departamento de

nóminas vean las columnas de nombre, oficina, teléfono y departamento de la tabla de

empleados, Pero no permitir que vean las columnas con los datos de salario u otra

información personal.

Combinat columnas de varias ablas de forma que parezcan una sola tabla.

Agregar información en lugar de presentar los detalles.

Por ejemplo, presentar la suma de una columna o el valor máximo o mínimo de una

columna.

Las vistas se crean definiendo la instrucción SELECT que recupera los datos presentados

por Ia vista. Las t¿blasde datos a las que hace teferenciala instrucción SELECT se conocen

como las ablas base panla vista. En este ejemplo, TITIL\aIES7 de la base de datos PUBS

es una vista que seleccionadatos de tres tablasbasepara presentaruna abla virtual de datos

frecuentementeuti Ii z2d6s;

CREATE \1ES7 TITLE\TEN7

AS

SE,I-ECTTITLE, AU_ORD, AU_LNAME, PRICE,,YTD SALES,PUB_ID

FROM AUTHORS AS A

JOIN TITLEAUTHORAS TA ON (A.AU_ID = TA.AU_ID)

JOIN TITIES AS T ON G.TITLE_ID = TA.TITLE_ID)

Unavez cteada,se puede hacer referenciaa TITLEVIEW en las instrucciones,de la misrn-:.


forma que se hace teferen cia a una tzbla:

SELECT X FROM TITLE\TEW

CARRERA DE COTPUTAC¡ÓTT C INFORMATICA G¡BERTEC


BASE D E DATO S - LABO RATO RI O

3.1. VENTAJASDE r-ASMSTAS:

A) Seguridad: Cada usua¡io puede acceder a la base de datos únicamente a través de un

pequeño conjunto de üstas que contienen los datos específicos que el usuario esta

autonzado a vet, testringiendo así el accesoal usuario a datos almacenados.


B) Simplicidad de consulta: Una visa puede extraer datos de varias tablas diferentes y

presentarlos como una ítica tabla, haciendo que las consulas multiablas se formulen

como consulas de una sol¿ tabla con respecto a al üsta.


c) Simpücidad estructurada: Las visas pueden dar a un usuario una üsión personalizada

de la estructua de la base de datos presentando esta como un conjunto de t¿blas

viftuales que tienen sentido para eseusuario.

D) Aislamiento frente al cambio: Una vez vista puede presentar una imagen consisrente

tnaltenda de la estructua de la base datos, incluso si las ablas fuente subyacentesse

dividen.

E) Integridad de datos: Si los datos se acceden y se introducen a través de una vista, el

DBI,fS puede comprobar automáticamente los datos para asegurarseque satisfacen

restricciones de integidad especificas.

3.2. DESVENTAJASDE IAS VISTAS

A) Rendimiento: Las visas crean la apaÁenctade una tabla pero el DBMS debe
traducir las consulas con fespecto z \a vista de consulas con respecto a las

tabl¿s fuente subyacentes.Si la visa se define mediante una consulta multitabla

compleja, entonces una consulta 5g¡cilla con respecto a la visa se convierte en

una composición compücada, ypuede tardar mucho tiempo encompletarse.

B) Restricciones de actualización: Cuando un usuado trata de actuzlizar filas de una


vista, el DBMS debe traducir la petición de una actthzacion sobre las filas de las

tablas fuente subyacentes.Esto es posible para visas sencillas, pero para vistas

más complejas no pueden ser actuahzadas;son sólo de lectura.

caRRERADEcotpurac¡óx ¡ ¡xronmÁr¡cl
3.3. CI-\SItrICACIÓN DE LAS VISTAS

5.2.1. Vistas Horizontales

5.2.2. VistasVerticales

5.2.3. Vistas con subconsultas

5.2.4. Vistas agrupadas

5.2.5. Vistas compuestas

3.3.1 VISTAS HORIZONTALES f


rt

Un uso común de las vistas es restringir el accesode un usuario a únicarncr

seleccionadasde una tabla. Por ejemplo, en la base de datos ejemplo. :'--m.

deseableque un director de ventas vea las filas de REPVENTAS corresp.r

a los vendedores de la REGION propia del directot.Para lograr esto:€ --

definir dos vistas,del modo siguiente l

CREATE,\1E,N7REP ESTE,AS

SE,LE,CT* FROM REP\ENTAS

\X,HEREOFICINA IN (11, 1,2,13)

CREATEVIEür REP OSTEAS

SELECT+ FROMREP\ENTAS

OFICINArN (21,22)
\xaHERE

Ahora se puede dat a cada director de ventas permiso para acceder . u

REP-ESTE o bien alavistzREP_OESTE, negándolesel permiso par.i :--


la otra vista y alapropia tabla ventas. Esto da efectivamenteal director ¡,.

una visión particular de la tabla REPVENTAS, que sólo muestra los veni;¡

la región adecuada.

CARRERADE GoMPUTAGIÓNE IxronuÁrIcI


BASE D E DAT OS - L ABORAT OR¡ O

Una üsta como REP_OESTE o REP_ESTE se denomina normalmente üsta

hodzonul. Una visa honzontal divide horizontalmente la t¿bla fuente pan creala

vista.

3.3.2 VISTAS\IERTTCALES

Otro uso habitual de las vistas es restringir el acceso de un usuario a sólo ciertas

columnas de una abla TB_VENDEDORES. Por ejemplo, en nuestra base de


datos.

CODIGO NOMBRE APELLIDO SUE,LDO ANO_ING TIP_VEN


v01 JUAN DIAZ 1150.0 1998 1
v02 IRMA SOTO 750.0 1997 2
v03 CARLOS AREVALO 1950.0 t992 2
v04 CESAR OJEDA 900.0 1999 1,
v05 JULIO VEGA 950.0 t997 1
v06 ANA ORTEGA 1650.0 1994 1,

Se deseacrear un vista que muestre el código y nombre de todos los vendedores

existentes,para que un departamentotenga acceso.A ver estainformación.

Entonces la vista se rcahzatáde la sizuientemanera.

CREATEVIE,Sr LISTA VENDEDORE,SAS

SEIECT CODIGO,NOMBRE,APELLIDO

FROMTB \IENDEDORES

Mostrará:

CODIGO NOMBRE APE,LLIDO


v01 JUAN DIAZ
Y02 IRMA SOTO
v03 CARLOS AREVALO
v04 CESAR OJEDA
v05 JULIO VEGA
v06 ANA ORTEGA

cARRERADEGompurAclón e l¡ronmÁrrcr
-TEG
ACTI\TDADES

o De la basede datos PESCA

1,. Mostrar el nombre de la especieque cuestamás caro y el nombre de la especr


cuestamenos cafo.

SE,IT,CTNOM-ESP, PRE_ESP

FROM TB_ESPECIE

IíHERE PRE_ESPrN (SELECT MAX(PRE_ESP)FROMTB_ESPECTE)

oR pRE_ESp rN (SEr_ECTMrN(pRE_ESp) FROM TB_ESPECTE)

2. Mostat en que zonas de mar sepesco la especieBALLENA

SELECT DISTINCT(ZON_MAD FROM TB-FAENA

WHE,RE NUM_FAE IN (

SEI-E,CTNUM FAE FROM TB DETALIE FAENA

WHERE COD E,SPIN

(SELECTCOD_ESPFROM TB_ESPECIE

WHERE NOM_ESP = 'BALLENA))

3. Mosüar en que faenaparticipó unos de los empleados,llamadoPEDRO

SELECT NUM-FAE FROM TB_FAENA

\rHERE, COD_BAR IN

(SELECT COD_BAR FROM TB_BARCO


x
WHERE COD_BARIN :n
(SELECT COD_BAR FROM TB_EMPLEADO d
$i l[,¡
WHERE NOM_EMP = 'PEDRO')) i
,f,t" ]M

iffi lillÚ

GARRERADE GomPUTAcIÓN E IT{FoRTIATIGA


BASE DE DATO A. LABO RATO RI O

4. Mostrar el nombre de todos los productos que vendió el vendedor


que generó más
ingresos.

SFI.trCT DES-PRO FROM TB_PRODUCTO

WHERE COD_PRO IN

(sEr_ECTCOD_PRO FROM TB_DETALLE_FACTURA

$7HERE NTIM_FAC IN

(SELECT NUM-FAC FROM TB_FACTURA

WHERE COD_VEN IN

(sEr-ECTCOD_VENFROMTB_FACTURA

WHERENUM_FACIN (

SFT.FCTTOP
1NUM_FAC

FROMTB_DETALLE_FACTURA

GROUPBYNUM_FAC

ORDERB]. SUM(PRE_VENTCAN_VENJ)
DESq))

h Ia basede datos VENTAS:

u- \[ostrar el nombre de todos los clientes que hayan comprado IApICERos.


n \fostrat los datos de todas las facturas cuyo importe total de cada facturasea
mayor
de 50,000 soles

\fostrar el nombre del vendedor que genero más ingresos.

4 \fostrar el nombre y dirección del cüente que generó menos ingresos.

\fostar el nombre y dfuección del cüente que generó menos ingresos.

cARRERADEcotpurAcÉil E NFoR¡tArrca
Para rceordar

Una subconsulta es una consula dentro de una consult¿. Las subconsultas aDarecen

de'una de Ia condiciones de búsqueda.

Cuando apareceuna subconsulta en la cláusulaWFIER.E, los resultados de la

utilnanpara seleccionarlas filas indiüdudes que contribuyen a los datos de los

[a consulta.

Cuando una subconsula aparece en la cláusuJaFIAVING,los resulados de la

ss urilizan para seleccionar los grupos de filas que contribuyen con datos a los re

Ia consulta.

Una subconsulta puede induir una tefetencia extema a r¡ria tabla en cualqtlere

consultas que la contienen, enlazandolas subconsula con la frla acl:ualde esaconsulu-

üTE

fmi

o\

Usor

oI
s(

caRRERADEGotpuraclón e ¡nronnÁrlcl
¡ASE DE DAT OS . L ABORAIORIO 127

Gqúinurciffi & crmdsl de


V¡shsyUsodel Erwin

TEMA

o ERwin es una heramiena de fácil unhzaciónpara el diseño de base de datos relacionales

que permite, a b vez que el diseño, la generación y el mantenimiento. En esta sesión

implemenaremos urra base de datos haciendo uso del ERwin.

ESPECÍFICOS
OBJETTVOS

o Continuación de Vistas

o Permitir al estudiante visualizar la estructura adecrzdz,los elementos clave y un diseño

optimizado de su base de datos haciendo uso de la herramiena Effiin.

CONTENIDO

o Continuaciónde Creaciónde Visas

o Vistassubconiuntosfrla/ columna,VisAs Agrupadas.Vist¿sCompuestas

o Uso del Erwin

o Beneficiosdel Erwin
o Generaciónde una BD automática

CIBERTEC DEcotPurAc¡ó¡
GaRRERA e lnronmÁr¡cl
CONTINUACION DE VISTAS... J[.;* i:

A) VISTAS CON SUBCONJUNTOSFILA / COLUMNA -:\


J&;-5;
Cuando se define una vista SQL no testringe a divisiones puramente horizon=u*

verticales de una tablas. De hecho, el lenguaje SQL no incluye la noción de o


horizontales y veticales. Estos conceptos ay"rdan a visuahzar como la üsta presm

información a parnr de la tabla fuente tanto por la dimensión hodzonal como r:r
3r=
vertical, como en esteejemplo:

Se tiene la tabla TB_VENDEDOR y se desea mostrar una vista obteniendo solame-,r*


T L¡ ¡

CÓDIGO, NOMBRE yAPET rrDO de todos los vendedoresde TIP-\{EN = 1


l:sr-l

egn
j:ff

Lr¡f-

:É:

I
I

I
I

La solución sería:

CREATE VIEür \E,R \'ENDEDORES AS

SE,LECTCODIGO, NOMBRE,,APELLIDO

FROM TB-VENDEDOR

WHERE, TIP-\{EN = 1

La tnformactón devuelta sería:

CODIGO NOMBRE APELLIDO


v01 JUAN DTAZ
v04 CESAR OJEDA
v05 JULIO \T,GA
v06 ANA ORTE,GA

DEcofitpurac¡óx r tllronuÁt¡cl
GARRERA CIBERTEC
BASE DE DAT OS - L ABORAT ORIO 1 29

Los datos visibles a ffavés de esta üsta son un subconjunto fila / columna de la tabla

TB_\ENDEDOR. Sólo las columnas explícitamentedesignadasen la list¿ de selecciónde

la üsta y las fila que satisfacenla condición de búsquedason visiblesa travésde la üsta.

B) VISTAS AGRUPADAS

La consulta especificadaen una definición de vista puede incluir una cláusulaGROUP BY.

Este tipo de vista se denomina vista agrupada,ya que los datos visibles a través de ella son

el resultado de una consulta agrupada.Las vista agrupadasefectuan la misma función que

las consultas agrupadas; agrupm filas relacionadas de datos y producen una fila de

resultadosde consulta pan cada grupo, sumarizando los datos de ese grupo. Una vista

agrupadareúne estos resultados de la consultas agrupadaen una vista virn¡al, permitiendo

efectuarconsultasadicionalessobre ella.

Aquí un ejemplo de vistasagrupadas.

Se tiene Ia siguientetabla VEN!ÉAS

MODELO ANO COLOR UNID \ENDIDAS


CHE,VY 1,990 RoJo
CHE,VY 1990 BI-ANCO 87
CHE\ry 1990 AZUL 62
CHE,\l' 1991 RoJo 54
CHE\ry 1991 BIANCO 95
CHE\Y 1,991 AZTJL 49
CHE\l¿ 1992 ROJO -) _t

CHEVY 1992 BI-ANCO 54


CHE,\ry t992 AZUL 71
FORD 1990 RoJO 64
FORD 1990 BIANCO 62
FORD 1990 AZUL 63
FORD 1991 RoJo 52
FORD 1991 BI-ANCO 9
FORD 1991 AZUL 55
FORD 1992 ROJO 27
FORD 1992 BIANCO 62
FORD 1.992 AZUL 39

t CIBERTEC GARRERADE cotpurActóx e lxronmÁtlcr


se pide crear una üsta que muestre cual fue el mínimo, el máximo, el promedio r c-

unidades vendidas de cada modelo de auto según el color que tenga.

CREATE VIEST VISTA_AGRUPADA_I AS

SELECT MODELO, COLOR,

'MÑIMO' = MIN (JNIDADES-VENDIDAS),

'MÁXIMO'= MAXOJNIDADE,S_VENDIDAS),

'PROMEDIO' =AVG (JNIDADES_VENDIDAS),

'TOTAL U.'=SUM(TJNIDADES_VENDIDAS)

FROM VENTAS

GROUP BYMODELO,COLOR

ORDER BY MODELO,COLOR

Los datos resultantesserían:

MODELO COLOR MINIMO MAXIMO PROMEDIO TOTi:


CHEVY AZUL 49 71 60 '*..Trl

CHEVY BIANCO 54 95 78 -lurr

CHEVY RoJo 5 54 30 4rl

FORD AZUL 39 63 52
FORD BIANCO 9 62 44
FORD ROJO 27 64 47

A diferencia de una vista horizont¿l o vertical, las filas en una üsa agrupada no tienen ---*

correspondenciaunza una con las filas de la tabla fuente.

GARRERADE coMPUTAcIÓN E INFoRMATIGA


BASE DE DAT OS. L ABORAT ORIO l3l

Una vist¿ agrupada no es únicamente un filtro de su t¿bla fuente que ocula cieras fiI". y

columnas. Es un sumario de las ablas fuente, y por lo tanto se requiere una cantidad de

procesamiento del DBMS para mantener la ilusión de una tabla virtual pata visas agrupadas.

Las visas agrupadas pueden ser utilizadas en consultas igual que para cualquier otra vista más

sencilla. Sin embargo una vist¿ agntpada no puede ser actuzl:nad4 esto se debe a que la vista

agnpzda contiene generalmente datos calculados, no hay mariera de trasladar una petición de

acuñzacsón a.un^ de l¿s fil¿s de la tabla fuente. Por lo tanto las vistas agrupadas
^cí)dización
funcionan como visas de sólo lectma.

Ahora sería más practico para nosotros mostrar un filtro en base a la vist¿ ctead4 para que nos

muestre los mismo datos, pero sólo del modelo que tengafl más de 150

L]NIDADES-VENDIDAS.

1,. SEIECT * FROM VISTA AGRUPADA 1

WHERE TOTAL-U > 150

SELECT MODELO, COLOR.

'MÑIMO' = MIN (LINIDADES_VENDIDAS),

'MAXIMO'= MAX(INIDADES_VENDIDAS),

'PROMEDIO' =AVG GINIDADES_VENDIDAS),

'TOTAL U.'= SUM(JNIDADES_VENDIDAS)

FROMVENTAS

GROUP BYMODELO,COLOR

HAVTNG SUM(TJNTDADES_VENDIDAS)> 1s0

ORDER BY MODELO.COLOR

[-oe resultados mosffados para ambos casosserían:

(CRTEC GARRERADE GoMPUTAGóN E IT{FoRTATIGA


MODE,LO COLOR MINIMO MAXIMO PROMEDIO TOTAL L

FORD AZUL 39 63 52

F'ORD BLANCO 9 62 44

FORD RoJo 27 64 47 'ta

Ustedesdeciden. ¿Cuálde las dos consultasprefieten hacer?

C) \IISTAS COMPUE,STAS

Una de las razones más frecuentes para uüzat vistas compuestas es simplificar ru

consultas multitabla. Especificando una consultas de dos o tres t¿blas en la definiciór .r

una vista. Se puede cner vn üsta compuesta que extrae datos de dos o tres t:--,a-

diferentes y presenta los resultados de la consula como única tabla virnral. Una -"-*

definida la vista, con frecuencia se puede utilzar como uria consulta simple de una . ,.r¡

tabla con respecto a la vista para peticiones que en caso contrario requieran '-,

composición de dos o tres tablas.

Por ejemplo, supongamos que JOSE PEREZ, el vicepresidente de ventas, efectu :,rr

frecuencia consultas sobre una tabla llamada VENTAS de la base de datos. Sin emb::¡.-

JOSÉ no quisiera trabajarcon número de clientes de empleado, efl vez de ello le gus-;:r
poder reahzaruna versión de la tabla \ENTAS que tenga nombres eflvez de número.

La información de la tabla ventases:

NUM FAC F'E,CFIA COD_CLI EST FAC

FAOO2 01/0s/1998 c019 a

FAOO3 02/06/1998 c003 2


FAOO4 06/06/1998 c016 2
FAOO5 06/06/1,998 c015 a
L

FAOO6 15/12/1 9 9 8 c009


FAOOT 23/01/1, 9 9 8 c019 1

La solución senareñzat una consulta en base a dos tablas fuente y luego creadasc,,muu

una vista:

CARRERA DE COMPUTACIÓN E IXTONMAT¡CI cracr:E


BASE DE DAT OS - L ABORAÍORIO

CREATEVIE\üTVISTA COMPUESTA 1 AS

SF ,F,CTNUM_FAC, FEC-FAC, RAZ_SOC_CTJ,EST-FAC

FROMVENTAS, CLIENTE

WHERE VENTAS.COD CLI = CLTENTE.COD CLI

El resultado obtenido: StrJFCT X FROMVISTA COMPUESTA 1

NUM-FAC FECFIA COD-CLI EST-FAC

FAOO2 01,/05/1998 Cotefo J

FAOO3 02/06/1,ee8 Serviemsa 2


FAOO4 06/06/1998 Cardeli 2
FAOO5 06/06/1,9e8 Meba 2
FAOO6 1,5/1,2/1ee8 Prominent 3
FAOOT 23/01/1,998 Corefo 1

I. MODEIADORDE BASEDE DATOS- ERWIN

ERwin es una herramiena de fácil utilización pan el diseño de base de datos telacionales

que permite, alzvez que el diseño,la generacióny el mantenimiento.

ERwin permite üsualizar la estructut4los elementos clavesy el diseño optimizado de la base

de datos, desde el modelo lógico en donde se rcflejan los requerimientos del negocio, hasta

el modelo fisico con las caracteristicasespecíficasde la base de datos elegida.

ERu/in no es sólo una herramiena de diseño de base de datos, sino que es una herramienta

de desa::rollo de RDBMS que permite generar automáticamerite tablas y miles de líneas de

código de procedimientos almacenados y triggers de todas RDBMS. Su funcionalidad de

"Complete Compare" permite el desarrollo interactivo manteniendo sincronizado el modelo


con la basede datos en todo momento.

C:ERTEG GARRERADE coTPUTAcIÓx ¡ IilFoRTATICAI


ERu/in est^nd^iz^y meiora de Ia productividad en la modelación y el diseño de BD

ERu¡in no es sólo una "herramienta de dibujo", tiene todo tipo de faciüdadesque :

mejorar la productividad durante el diseño de una base de datos y automatizar esi- :

de forma inteligente. Por eiemplo:

. Permite la creación de un diccionario de atributos teutilizables que asq'rm.

consistenciade nombres v definicionesen todos los modelos.

Las visAs de base de datos están integadas como componentes del modelo c-iei

que cambios lsalizados en las ablas base son refleiados automáticatnen:i :5t

definición de las vistas.

Migración automáicade las claves qte garannza ia integridad referencial.

Permite dividif los modelos en sub-modelos más manejables y enfocados c.

específicas.A su vez, permite disponer de multiples vistasde cadasub-modelo.

Los modelos de datos pueden sef ediados, visu¿lizados e impresos en :

üferentes.

CARRERA DE GOÍTPUTACIóX E INFORTATIGA GIBEI.-


135
3ASE DE DAT OS. L ABORAT ORIO

| .1. Nlodel0 De Enridad RelacirinDe La BascDe Datos Pesca2000

-._ *Y
'i . .
, . ', - j fl :¡

LI]D_PRD (F}!
cfrtr_EsP (Fkx

f¡U¡n_FAE(FK,l
rlOD_E:rP fFK)

1.2. Generaciónde llasc de Datos Automá¡ca

dc datos
ERurn manttene sincronizadosel modelo lógico v tísico de la basc

transfcrrmaautomáticamenteelementclslógicosa su implcmentaciónfísica'

perrilte
ERu-in estableceuna conexión en iínea entre la base de datos i' el diseño que
tablas,ristas,
las accionesde generaciónv reingeniería.Esta conexión permite Elencfaf
etc. ERrr''in
índices,reglasde integiclad referencial (clar.esprimarias, clavesextranieras),
intepgrdad
también incluye un coniunto cle plantillas dc tnggers optimizados de

referencial ), un macfo lenguaje que penr-utepersonalizar tnggers r- ptoccdimientos

almacenados.

: tr ñ I E9
C A R R E R A D E C OMP U TA C IÓN E IN FOR MÁ TIC A
-
ACTMIDADES

o De la basede datosVENTAS

1.. Cteatuna üsa que muestreel dealle de las facnras el importe toal de
producto,pero sólo de las facnras pendientes.(est_fac= 2)

CREATE VIEIüTFACTL]RAS PENDIENTES

AS

X,IMPORTE= CAN_VEN*PRE-VEN
Str,T,F,CT

FROM TB_DETALLE_FACTURA

WHERENUM FACIN

(StrJtrCT NUM-FAC FROM TB_FACTURA

WHERE EST_FAC = '2)

Crear una visa el nombre del vendedor y el nombre del distrito del que se

asignado cada vendedor.

CREATEVIE!ü DISTRITO VENDEDOR

AS

SELECTA.NOM_DIS,NOMBRE=B.APE_VEN+ ', ' +B.NOM_\ES

FROMTB-DISTRITO A, TB_VENDEDORB

\üíHEREA.CODVEN = B.COD VEN

caRRERADEGotpurAc¡ór¡ e lrtronrÁr¡cl
BAAE DE DA?O ! . LABO RATO RI O t8 7

De la basede datosPESCA:

1. Crear tma visa que muestre solamente el nombte de todos los barcos que salieron de faenas

en las zona SUR

2. Crear una visa que muestre el código, nombre y ptecio de los productos del tipo Q.

3. Crear una visa que muesüe solamente el nombre de las especiesque cuestan más de 100

soles.

4. Crear un visa que muestre l¿ cantidad de total de peces tseolect¿dos por cada especie

GAniEnA E GoT?UTAGIÓil E ¡ilFoinAT¡GA


Pam:€mrdar

Las visas permiten redefinir la estructura de una base de datos ptoporcionando ¡

usuario una vista petsonalizada de la estructura y los CONTENIDO de la base de datos

Una vista es una tabl¿ viftual definida mediante una consulta. La vista parece contener fr

columnas de datos, al igual que una :abla rea\ pero los datos visibles a través de la slqr

los resulados de la consulta.

Una vista puede ser un subconjunto simple fila/columna de una única abla, puede

result¿dos obtenidos de funciones de agrupamiento o puede extraer los datos de dos c,

ablas.

Una vista puede hacer teferencia como una tabIzrcaI en una sentencia SELECT, IL\-S

UPDATE, DELETE. Sin embargo,lasvista máscomplejasno puedenseractualizad¡r


vistasde sólo lectura.

GARRERADE coilPUTAGIÓN E ITFoRMATIGA


B A S E DE DAT OS . L ABORAT ORIO t39

Programrciffi Tnansrct - SQL


Instrucciones y eiernplos

TL\IA

e En esta sesión se concentran las extensionesde ptogramación de Ttansact-SQ! como el

control de flujo, los bucles, el tratamiento de errotes y las opciones especificasdel entomo.

Estas extensionespermiten escribit fácilmente las rutinas complejas de SQL.

{'fts]ETryOSESPECÍFICOS

. Cilizar Ttansact-SQl para usar el SQL estándar como lenguaje de programación y poder

escribirinstruccionesque puedan ejecutarsedentro del motor de basede datos.

ILT\TENIDO

. Definición de variables globales y I-ocales

. Herramientas para el control de Flujo

: Begin..End

: Goto, If else,Case

: Retum, WaitFor

: While, Breal<,Continue, Pring..

caRRERADEcorpurac¡ó¡ e ¡xronmÁrrcl
7. PROGRAMACIÓN TRANSACT _ SQL

Transact-SQl permite agrupar una serie de instrucciones como un lo:e. - i 4üüi

interactiva o desde un atchivo del sistema operativo. También se :-¡:ÉÍ

estfucturasde conrol de flujo ofrecidas por Transact-SQl para conectx i:

utiüzando estructuras de tipo de progmmación.

Transact-SQl proporciona palabras clave especialesllamadas lenguaie de : ':::r'rur

que permiten controlar el flujo de ejecución de las instrucciones. El leneL:-e s

flujo se puede utilzat en instrucciones sencillas, lotes, procedimiento: 1::l

disparadores.

Sin el lenguaje de control de flujo, las instrucciones SQL se llevan a

secuencial,conforme se producen. Las subconsultas correlacionadasson

parcial. El lenguaje de control de fluio permite que las instrucciones se

relacionenentre sí utiliz¡1de estructurasde tipo de progamación.

El lenguaje de control de flujo, como if...elsepaf^ la ejecución condicional i= :

while para la ejecución repetitiva, permite refrnar y contfolaf el funcion;::'anr


instrucciones SQL. El lenguaje de control de flujo de Transact-SQl transl :=r.! u

estándar en un lenguaje de programación de muy alto nivel.

1.1. Reglasasociadasa lotes

Existen reglas que controlan qué instrucciones SQL pueden combinarse = um

lote. Estas reglas de lotes incluyen Io siguiente:

. Algunos comandos de basede datos no pueden combinarsecon otras rn::

en un lote. Se trat,- de los siguientes: create procedure, cfeate fule, cre;:"

cfeate üigger, createview.


o I-os comandos que sí pueden combinarse con otras instrucciones SQL r m

incluyen: create database (saivo que no puede crear una base de datos r- :

acceder a los objetos de la base de datos nueva en un solo lote) create taola.

index.

CARRERA DE COTPUTACIóN E II{FORMATIGA


CI
BASE D E DATO S . LABO RATO RI O

Las teglas y valores ptedeterminados no pueden vincularce a columnas y utilizarse

durante el mismo lote. sp_bindrule y sp_bindefault no pueden estar en el mismo

lote que las instrucciones insert que ejecutan laregla o valor ptedeterminado.

Use debe ejecutarse en un lote anterior antes que las instrucciones que hacen

referenciaa los objetos de dicha basede datos.

No es posible fealiz'l1una opetación drop con un objeto y despuéshacer referencia

a éste o volver a cteaúo en el mismo lote.

Cualquier opción definida con urra instrucción set tendrá efecto aJ frnal del lote. Es

posible combinar instrucciones set y consultas en el mismo lote, pero las opciones

de set no se aplicarán a las consultas de dicho lote.

2. TISO DEL LENGUAIE DE CONTROL DE FLUTO

El lenguaje de conmol de flujo se puede utTlizarcon instrucciones interacdvas, en lotes y en

procedimientos almacenados. El conffol de flujo y las palabras clave relacionadas y sus

funciones son:

lontol de fluf o y palabras clave relacionadas


Pafabra clave unclon

IF Define una eiecución condicional.

...EIsE Define una eiecución altemativa cuando la condición if es falsa.

BEGIN lomienzo de un bloque de instrucciones.

...END inal de un bloque de instrucciones.

'üTFIILE Repitela ejecución de instrucciones mientras la condición es verdadera.

BREAK iale del final del siguiente bucle while más exterior.

...CONTINUE leinicio del bucle while.

DECIARE )eclara variables locales.

GOTO I-ABEL ¡Ia a un ró¡rlo (abel), una posición en un bloque de instrucciones.

RETURN iale de forma incondicional.

!íAITFOR )efine el retardo panla ejecución del comando.

tmprime un mensaje definido pot el usuario o una variable local en la


PRINT
tantalla del usuario.

tmprime un mensaje definido por el usuario o una variable local en la


RAISERROR
tantalla del usuario y define un indicador del sistema en la variable

GTEC CARRERADE GoTPUTAGIÓN E lxronuÁr¡cI


2.2. BEGIN...END

Las palabras clave BEGIN y END se utilizan para englob^f vn serie de L::.:

a fin de que Seantratadascomo una unidad Pof las estfuctufasde control Oe::,:

if...else.Una serie de instruccionesenglobadaspor b.gt y end se denomln¡ :-,,ru¡uü

instrucciones.

La sintaxisde begin...endes:

BEGIN
BLOQUE DE INSTRUCCIONES
END

veamosun ejemplo:

rF (SELECTAVGeRICE) FROM TITLES) < $1s


BE,GIN
UPDATE, TITIES
SET PRICE = PRICE x 2

SELECT TITTE, PRICE,


FROM TITI-ES
\rHERE PRICE > $28
END

Sin BEGIN ni END,la condición IF sólo se apücaríaalapimeninstrucción SQL. L

segundainstmcción se ejecutaríaindependientemente de la primera.

Los bloques b.go... end pueden anidarsedentro de otros bloques begin...end.

GARRERA DE COMPUTACIÓN E INFORMATICA CIBERÍEC lrsiTB


AASE DE DAT OS - L ABORA? ORIO

2.3. IW1HTT
tr,Y BREAK...CONTINUE

2.3.1.WHILE se utilizaparadefinir una condiciónp^r^ la ejecuciónrepetidade una


instrucción o un bloque de instrucciones. Las instrucciones se ejecutan

reiteradamente siempre que la condición especificadaseaverdadem.

La sintaxises:

\XTIILE BOOLEAN_E,XPRESSION
EXPRESIÓN _SQL

En este ejemplo, las instrucciones select y update se repiten siempre que el

precio ptomedio perrrrarrezcapordebajo de $30:

wHrLE (SELECT AVG€RrCE) FROM TTTLES)< $30


BE.GIN
SELECT TITLE_ID, PRTCE
FROM TITLES
STHEREPRICE > $20

UPDATETITIES
SET PRICE = PRICE x 2
END

2'3.2'BREAK y CONTINUE conftolan el frrncionamiento de las instruccionesdentro


de un bucle while. BREAK petmite salir del bucle while. Todas las instrucciones

que aParecendespués de la palabra clave end, que marca el final del bucle, se
ejecutan. CONTINUE hace que el bucle while se inicie de nuevo. omitiendo
cualquier instrucción despuésde continue menos dentro del bucle. BREAK
v
CONTINUE se activan frecuentemente mediante una prueba if.

-trEc cARRERA DE coilpurAcló¡ e ¡NFoRMArtca


La sint¿xisde break...continuees:

WHIIE BOOLEAN EXPRESION


BEGIN
E)GRESIÓN _SQL

I EXPRESTÓN
_Sqr1...
BREAK
I EXPRESTÓN
_Sqq...
CONTINUE
I E)GRESTÓN
_Sqq...
END

A continuación se muestra un ejemplo con while, breal<, continue e if qu.

inüerte el aumento producido en los ejemplos anteriores. Siempre que el preo

promedio permanezcz por encima de $20, todos los precios se reducen a ¿

mitad. Después se seleccionael precio máimo. Si es inferior a $40, se saleci

bucle while; en caso contrario, intenta rcahzar el bucie de nuevo. connn-.c

permite que la instrucción print se ejecute sólo cuando el promedio esú ¡:r

encima de $20. Después de que termina el bucle while, se imprime un mensa--r

una lista de los libros con el Drecio máximo.

lrHrLE (SELECTAVGeRTCE)FROMTTTLES)> $20


BEGIN
UPDATETITLES
S E TPRICE=PRICE/2
rF (sErf,cT MAX(pRrcE) FROMTTTLES)< $40
BREAK
EI-SE
rF (sEr-ECTAVGeRTCE)FROMTTTLES)< $20
CONTINUE
PRINT ''AVERAGEPRICESTILL O\IER $20''
E,ND

GARRERADE coMPuTAcIÓN E INFoRMATIGA ctBEL-.


BAAE DE DATO S . LABO RAT. O RI O 747

SELECT TTIT-E-ID, PRICE FROM TITLES


WHERE PRICE > $20

PRINT ''NOT TOO EXPENSTVE''

Si hay dos o más budes while anidados, la instrucción break sale al siguiente

bucle exterior. Pdmero se ejecuan todas las insüucciones que aparecen después

de la palabra clave end del bucle intemo y luego se reinicia el bude extemo.

2.4. DECIARE Y VARIABLESLOCALES

Una vadable es una entidad a la que se asigna un valor. Este valor puede cambiar

duante el lote o el procedimiento almacen¿do donde se utiliza la vatiable. SQL Server

tiene dos tipos de vatiables: locales y globales. Las variables locales están definidas por

el usuario, mientr¿s que las variables globales las suministra el sistema y están

prcdefinidas.

Las variables locales se declaran" nombran y escdben mediante ]u.púabra clave declare,

y teciben un valot inicial mediante una instrucción select. Dichas vadables deben

declamtse, tecibir un valor y utilizarse en su toalidad dentro del mismo lote o

procedimiento.

I-as v¿dables locales se utilizan frecuentemente en un lote o procedimiento almacenado

como contadotes de bucles while o bloques if...else. Cuando se usan en procedimientos

almacenados,las variables locales se declasn pafa su uso automático no interactivo por

parte del prccedimiento cu¿ndo éste se ejecuta.

I-os nombres de l¿s vati¿bles locales deben empez^t con el símbolo "@" y después

seguir las teglas para identificadores. A cadavariable local se le debe asignar un tipo de

datos definido pot el usuado o un tipo de datos suministmdo por el sistema distinto de

text, image o sysname.

CIBERTEG caRRERADEcorputac!óil E rNFoRilATrcA


Las variableslocalesse declarancon estasintaxis:

DECIARE @ VARIABLE_NAME DATAT\?E

t @ VARIABLE_NAME DATAT\?E 1...

Cuando se declara una variable, tiene el valor NULL. Los valores se as:-*.--

variableslocalescon una instrucción select.A continuación se muestrala sir:.',- ,

SELECT @ NOMBRE-DE-VARIABLE =
]j*,-: i:
{ EXPRESSTON | (SEr-ECT_STATEMENT) } [, @ \
{ EXPRESSTON | (SELECT_STATEMENT) }..1
IFROM Cr,\USE ] ISTHERE CTAUSE ] IGROUPBy CL:. _ ::
F{A\ING CT-A.USEI IORDER BY CTAUSE ] ICON{PUE

Las variableslocalesdeben declararsev utiliz2l5s en el mismo lote o orocei,::--.'-.-

La instrucción selectque asignaun valor alavanable local generalmente t.----:r'i,r ruü[Ill

solo valor. Una subconsultaque asignaun valor alavanable local debe der-,--'.: ; nrii*riiiruu

valor. A continuación se muestran algunosejemplos:

DE,CI-\RE @\ERYHIGH MONEY


SE,LE,CT@VERYHIGH = MAX(PRICE)
FROM TITLES
rF @VERYHTGH > $20
PRINT ''OUCH!''

DECTARE @ONE VARCHAR(18),@TWO VARCHAR(I8.


SELECT @ONE = "THIS IS ONE", @T\7O = "THIS IS T'i.
IF @ONE = "THIS IS ONE"

CARRERA DE COMPUTACIÓN E INFORMATICA


BASE DE DATO S . LABO RATO RI O

PRINT'YOU GOT ONE''


IF @TIüüO= "THIS IS TWO"
PRINT'YOU GOTT\yO''
FISE PRINT "NOPE"

DECI-\RE @TCOLINT INT, @PCOUNT INT


SEIf,CT @TCOLINT = (SFT.FCTCOLTNT(*)FROM TITI-ES),

@PCOLINT = (SFI FCT COUNT(+) FROM PUBLISHERS)

strr F.cT @TCOUNT,@PCOLTNT

Las instrucciones select que utilizan exptesiones que devuelven más de un valor asignan

alavanable el último valor devuelto.

Es más efrcaz en términos de uso de memoda y de tendimiento escribir:

SELECT@A= 7,@B = 2,@C= 3

que escribir:

SFTF.CT @A = 1
SFTFCT @B - 2
SFI trCT @C = 3

Una regla similar se aplica a las instrucciones declare. Es rnás eficaz escdbir

DECLARE@A n{T, @BCHARQ}),@CFLOAT

que escribir:

DECIARE @A n{T
DECr.\RE @B CI{AR(2O)
DECIARE @CFLOAT

caRRERADEGorpuraclóx e l¡ronuÁncl
La instrucción select que asignavalores a variables sólo tiene esaúnica m-:,, r-- m

utifiz2¡5s para devolver datos al usuario. La pnrnera instrucción selec r:

ejemplo asignael ptecio máximo zlavznablelocal @veryhigh; Ia sesu:.: r

selectes necesariapara mostrar el valor:

DECIARE @VERYHIGH MONEY


SEI-ECT @VERYHIGH = MAXERICE)
FROMTITIES
SELECT @VERYHIGH

Si la instrucción select que asigna valores a vna vaÁable der,'uelvemi. j= -¡r

asigna alavanable el ultimo valor der,-uelto.Esta consultaasigna a Ia r-'-':r,,c

valor devuelto Dor "selectadvancefrom titles":

DECIARE @MMONEY
SEIf,CT @M= ADVANCE FROMTITLE,S
SELECT @M

Observe que la instrucción de asignación indica el número de filas at-ec--:a:

por la instrucción select.

Si una instnrcción select que asigna valores a una vaiable no der-uelr-e:-:ll

instnrcción dejala variable intacta.

Las vadableslocalespueden uriliz2¡sscomo argumentospara PRI\T ,

Variables y valores nulos

A las variables locales se les asigna el valor NULL cuando se declaran, y se i.: :

asignar el valot nulo mediante una instrucción select. El significado especiai de \--

requiere que la comparación entre variables con valotes nulos y otros valores n'r:nl

a,ustea reglasespeciales.

CARRERA IIE COMPUTAGIÓN E II{FoRMÁTIGA


BASE DE DAT OS - L ABORAT ORIO l 5t

Este ejemplo der.'uelve todas las filas de la tabla tides donde advance tiene el valor

NULL:

DECIARE @M MONEY
SELECT TITLE,_ID, ADVANCE
FROM TITI-ES
WTIERE ADVANCE, = @M

2.5. DECI-ARE Y VARIABLES GLOBALES

Las variables globales son variables predefinidas suministradas por el sistema.Se distinguen

de las variables locales por tener dos símbolos "@" precediendo a sus nombres, por

ejemplo,@@ercor.

Estas son algunasvariablesglobalesdel servidor:

Variablesglobalesde SQL Server


Variable lontenido

Sontiene 0 si la conversión del juego de caracteresno estáen efecto.


@@char-convert
3ontiene 1 si la conversión del juego de cafacteresesú en efecto.

Sontiene el nombte del juego de caracteresdel cüente.Sedefine como

@@chent-csnarnc \IULL si el juego de caracteresdel cliente nunca fue k.j.cial:zado;en caso


:ontrario, contiene el nombte del ultimo juego de caracteresutiliz2d6.

Sontiene 0 si la ultima ttansacciónse ejecutó de forma correcta;en caso

:ontrario, contiene el ultimo número de error generadopor el sistema.La

variableglobal @@er'or se utiliza generalmentep^r^verificar el estadode


@@enor
Jfror, se haya ejecutado coffectamente o no, de la ultima instucción emitida.

Una instrucción como if @@enor != 0 seguidade return origina una salida

fof eflof.

Contiene el ultimo valor insertado en una columna IDENTITY mediante


una instrucción insert o selectnto. @@identity se define cadavez que se
@@identtq
inserta una fila en una tabla. Si una instrucción inserta multiples frJas,@@

identity refleja el valor IDENTITY de la ultima fila insert¿da. Si la abla

CIBERTEC GaRRERA
DEcoMpurAc¡ór e ¡xronmÁrrcl
fectadano contiene una columna IDENTITy, @@idenntt¡ se derc m fri

valor de @@idennty no seve afectadopor el fallo de una insr*::i:m

o selectinto, ni por la reversión de la transacción que la con:.::¡, ,ri

tity conserva el uitimo valor insertado en una columna IDE\TI:,

la instrucción que la hayainserado no se consigne.

Si un usuado declara una variable local que tiene el mismo nombre que una \-a::::,xt'

dicha variable se trata como una variable local.

2.6. GOTO

La palabta clave GOTO origina una bifurcación incondicional a un rótulo de::-,¡:

usuario. goto y los tónrlos pueden utilizarse en ptocedimientos almacenados .rilcri,,

nombre del rónrlo debe ajustarsea las teglaspara identificadorese ir seguidode .-

dos puntos 0 la primera vez que se introduce. No va seguido de un signo de ¡,:

cuando se utiliza con goto.

A continuación se muestra la sintaxis:

A continuación se muestra un ejemplo que utiliza GoTo y un rónrlo, un buc_.


una variable local como contador:

DECIARE @COUNT SMALLINT


SEILCT @COUNT = 1
RESTART:
PRINT I\ZES''
SELECT @COUNT = @COUNT + 1
WTIILE @COUNT <=4
GOTO RESTART

CARRERADE coiIPuTAc¡ÓI e IilFoRMATIcA


BASE DE DATO s . LABO RATO RI O

Como en este ejemplo, C,OTO generalmente se hace dependiente de un bucle while o una

prueba if, o alguna otra condiciór\ a fin de eüar un bucle infinito entre goto y el rótulo.

2.7. RETURN

Lapalabn clave RETURN salede un lote o procedimiento de forma incondicional y puede

usarse en cualquier momento de un lote o procedimiento. Cuando se utiliza en

procedimientos alm¿cenados,retutn puede un argumento opcional pam devolver


^cept^t
un esado d soüciante. Las instrucciones que aparecendespuésde retum no se ejecutan.

I¿ sinaxis es simplemente:

RETURNI EXPRESIONENTERA ]

A continuación se muestra un ejemplo de un procedimiento almacenado que utiliza retuÍn,

asícomo if...elsey begin...end:

CREATE PROCEDURE FINDRULES @NM VARCHAR(30) = NULL AS


IF @NM IS NULL
BEGIN
PRINT 'YOU MUST GTVE A USER NAME''
RETURN
END
tr,I
-qE
BEGIN
SFJF,CT SYSOBJECTS.NAME,SYSOBJECTS.ID,SYSOBJECTS.UID

FROM SYSOBJECTS,MASTER.SYSLOGINS
WHERE MASTER.SYSLOGINS.NAME = @NM
AND SYSOBJECTS.UID= MASTER.SYSLOGINS.SUID
AND SYSOBJECTS.TYPE- rrRrr
END

CIBERTEC cARRERADEcotpurAc¡óx e ¡xronmÁr¡cl


Si no se proporciona ningun nombre de usuario como parámetro cuandc
nc
findrules, la palabra clave RETURN hace que el procedimiento se detenga
des¡-¡:r
el usuario hayarecibido un mensajeen su pantalla.Si se propotciona un nomb:t
:,r
los nombres de las reglas propiedad del usuario se recuperan de las tabl¿s
::
correspondientes.

RETURN es similar alapdabraclave BREAKusada dentro de los bucles\\}ir*

2.8. PRINT

I-apalabta clave pring unliz2ll en el ejemplo anterior, muestra un mensaje


definido pc,:.
usuario o el contenido de una variable locai en Lapantalladel usuario. LavaÁablelocal
dc:r
declararsedenfto del mismo lote o procedimiento en el que se t..tjza. El mensaje
c r
puede tener hasta255 bytes de longitud.

La sintaxis es:

PRrNT { FORMATO STRTNG | @ VARTABTF LOCAL i

He aquí otro ejemplo:

IF EXISTS ( SEIECT POSTALCODE FROM AUTHORS


SíHERE POSTALCODE = ,94705\
PRINT''BERKEI-E,YAUTHOR''

:¡lr
.I

A continuación se indica cómo u 'tizar


PRINT para mostrar el contenido de una
local:
"-,if
-:

DECTARE @MSG Cr{AR(5O)


SELECT@MSG= '¿COMOESTA UD?, f-i.-r,

PRINT @MSG

GARRERA
DEcorpurAc¡óx e tNFoRuATtca
BASE D E DATO S - LABO RATO RI O

PRINT reconoce los marcadores de lugar de la cadenade caracteresque va a imprimirse.

Las cadenas de formato pueden contener hasta 20 marcadores de lugar únicos colocados

en cualquier orden. Estos marcadores se sustituyen por el contenido formateado de

cualquiet argumento qve después de FORMATO STRING cuando el texto del


^p^rezca
mensaje se envía al cliente.

La longitud máxima de la cadena de salida de FORMATO STRING más todos los

argumentosdespuésde la sustitución es de 512 bytes.

2.9. WAITFOR

I-,zpdabn clave WAITFOR especificauna hora determinada del día un intervalo de

tiempo o un evento en el que debe tener lugar la ejecución de un bloque de insffucciones,

un procedimiento almacenado o una transacción.

A continuación se muesffa la sinaxis:

STAITFOR{DEL\Y" TIME " ITIME" TrME " IERROREXITI

PROCESSEXITI MIRROREXIT}

La palabta clave DEIAY indica a SQL Servet que espere hasta que haya transcurrido el

tiempo especificado. TIME indica a SQL Servet que espere hasa la hota especifrcadz,

ptopotcionada en uno de los formatos acepables para datos datetime.

Sin embargo, no es posible especificar fechas, no se permite el componente de fecha del

valor datetime. El tiempo especificado con waitfor time o waidor delay puede incluir horas,
minutos y segundos,hast¿ un máximo de 24 horas. Emplee el formato "hh:mm:ss". Por

ejemplo, waitfor irme "76:23" indica a SQL Server que espere hasta las 4:23 pm. La
instucción waitfot delay "01:30" indica a SQL Server que espereuna hora y 30 minutos.

CIBERTEC cARRERADEcotpufactóx = ¡NFoRrÁrtca


ERROREXIT indica a SQL Server que espere hasta que un proceso termine de tbr:;

anormal. PROCESSEXIT espera hasta que un proceso termina por cualquiet t?z,r*

MIRROREXI'T espera hasa que falla una lectura o una escdtum de un dispos::-"-

duplicado.

SíAITFOR ERROREXIT se puede uüzar con un procedimiento que destruyael prtt.r:

terminado de forma anormal a fin de liberar los rccursos del sistema que de oüo r-1 rf,r

serían ocupados por un proceso infectado. Para averiguar cuaJ.es el ptoceso rnt-er¿::"

verifique latabla sysprocesses


con el procedimiento del sistemasp_who.

Este ejemplo indica a SQL Server que esperehastalas 2:20 p,m. Después, actuo)tzaL :Lnrur

chess con el siguiente movimiento y ejecuta un ptocedimiento almacenado L:::¡mu

que inserta un mensajeen una de las tablasdeJudy, informándole que ;.:''um,


sendmessage,

existeun nuevo movimiento enlatabla chess.He aquí el ejemplo:

BEGIN
'üíAITFOR TIME " 1.4:20"
INSERT CHESS(I\IEXT_MO\E)
VALUES(Q-KR5)
EXECUTE SENDMESSAGETUDY
END

Para enviar el mensaje a Judy despuésde 10 segundosen lugar de esperarh;'--

sustituya esta instrucción waitfor en el ejemplo anteriot:

NTAITFOR
DEIAY "0:00:
L0"

Una vez emitido el comando WAITFO& no puede uüzat su conexión

hasta que llegue la hora o tenga lugar el evento especificado.

GARRERADE GoilIPUTAcIÓN E INFORTATICA


BA9 E DE DATO S - LABO RATO RI O
157

2.10.¡*COMENTARIOS */

I-a notación del comentario se utiliza pata anexar comentarios a instucciones, lotes y

procedimientos almacenados.un comenado tiene el siguiente aspecto:

/* TEXTO DEL COMENTARIO */

Los comentarios no tienen una longitud máxmay pueden insertarce en cualquier lugar,

en una línea independiente o al final de una línea. Los comentarios con múltiples líneas

ambién son correctos, siempte que cada comenario comience con una barra invertida

y un asterisco, y finalice con un asterisco y una bana invertida. Todo lo que se

encuentra erltre rr/*rr y "*/u se trata como parte del comentario. Los comentarios se

pueden anidar.

Una convención estilística aüzaü frecuenteme rfie pafacomentarios de varias líneas es


comenzar la pnmeta línea con " /*" y las líneas posteriores con "**". El comentario

frnaltza con"* /" como siempre. A continuación se muestra el aspecto que tiene:

SEIECT X FROM TITLES


/* UN COMENTARIO INCLUIDO AQUÍ PUEDE EXPLICAR I-\S
X+Rtr,GT,AS
RELACIONADAS CON EL USO DE LIN ASTERISCO
X* COMO UNA ABREVIATURA EN I-,\ LISTA DE
SEIECCIÓN.X/
Iü?HEREPRICE > $5

A continuación se muestra un procedimiento que incluye un par de comentarios:

CIBERTEG GARRERADE GoTPUTAGIóil E ¡I'|FoRITIATIGA


158

/+ ESTE PROCEDIMIENTO BUSCAIAS REGI-ASPOR NOMBRE


*+ DE USUARIO*/

CREATE PROCEDURE FINDRULES2 @NM VARCHAR(3O)= NLLL

2.11.CASE

La funciónCASE esuna exptesiónespecialde Transact-SQlquepermrtecf,: r,i


un valor altemativo dependiendo del valor de una columna. Este cambio es

lo que no hay cambios permanentesen los datos. Por ejemplo, la funció: i_r-i['

mostrar Califomia en un conjunto de resultadosde una consulta de las til.'¡ ¡*

valor CA en la columna STATE.

La función CASE esrácompuestade:

. Lapalabraclave CASE.

o El nombre de columna que se va a transformar.

CláusulasIVHEN que especifican las expresiones que se van a buscar y cláusr.:-r.

THEN que especifican las expresiones que las van a rcemplazat

. Lapalabta clave END.

. Una cláusulaAS opcional que define un alias de la función CASE.

GARRERADE coTPUTAcIóx e INFoRTAT¡GA

-TE
BASE DE DATO 9. LABO RATO RI O

En este ejemplo se muestr4 en el conjunto de resulados de la consult4 el nombre

completo del esado en el que vive cada autor:

Str,IF-CT AU_FNAME, AU_LNAME,


CASE STATE
WHEN'CA' THEN'CALIFORNIA'

'üTHEN'KS'THEN'KANSAS'
WHEN TN' THEN TENNESSEE'
$TFIEN'OR'THEN'ORE,GON'
WHEN'MI' THEN'MICHIGAN'
WHEN'IN' THEN'INDIANA'
NTHEN'I\4D'THEN'MARYI-AND'
\üTHEN'UT TT{EN'UTAH'

END AS STATENAME
FROM PUBS.DBO. AUTHORS
ORDERBYAU_LNAME

caRRERADEcotpurAclór¡ = rr¡ronmÁttcl
V

Para rccordar

En esta sesión se han explicado l¿s extensiones de n que van más allÁ &
implemenaciones típicas de SQL y que hacen de Transact SeL un lengrnic
prcgramación especializado. Entre dichas extensiones se incluye el control de fluio,

condicionales, bucles, vadables, opemciones lógicas, binarias, etc. Estas extensionesperminm

escdbir sofisticadas rutinas ditectamente en Transact SQL y ejecuarlas directamente en d

motor de SQL Senret Sin ellas seríannecesadasmuchas más instucciones en la aplicacio,m

clientes,lo que reduciría el rendimiento.

o Pasemos a utilizat dichas extensiones en los Procedimientos Almacenados y Trigers.

MTE

Co

GARRERADE GoTPUTAGIÓT E INFoRTAT|CA


BASE DE DAT OS. L ABORAT ORIO

lntrodue¡on a los ProcedimienG


AlffiyTtiggprts

TEMA

o En esa sesión se explica la utilización de Transact-SQl, pan algo más que consulas

intemctivas. Cuando se envía una consulta al servidot, se está enviando un lote de comandos

a SQL Servet, pero es posible hacet basante más. Se mostará como podemos incluir

comandos en un módulo que pueda guardarse en el caché del servidor para volver a
utilizado más adelante@rocedimientos Almacenado$ y ambién aprenderemos a crear

módulos que se ejecutan automáticamente cuando se produce algún suceso (Itigers ó


disparadores)

OBJETTVOSESPECIFICOS

o Comprender el porquede la existenciade los procedimientosalmacenados


en el Servidor.

o Comprenderla imporancia de los Trigen

CONTENIDO

A) CREATEPROCEDURE

B) CREATETRIrcER (en: INSERT,UPDATE,DEIETE)

CIBERÍEC GaRRERA
DEGorpufac¡ó¡ e mronuÁncl
162

A) PROCEDIMIE,NTOS ALMACENADOS

1. ¿Qué es un procedimiento Almacenado?

I,os ptocedimientos almacenadosson grupos formados por instruccionesSQL v el -;1*-*,re

de control de fluio. Cuando se ejecutaun procedimiento, se preper:^un plan de e..---- c

para que la subsiguienteejecuciónseamuy rápida.I-os procedimientos almacenados:-:--,:r:

Incluir parámetros

Uamar a otros procedimientos

Devolver un valot de esado a un ptocedimiento de llamadao lote para indicar e- .-:.,, ,

el fracasodel mismo ylarazón de dicho fallo


a Devolver valores de parámetrosa un procedimiento de llamadao lote
a Eiecutarseen SQL Servetremotos

La posibiüdad de escribir procedimientos almacenadosmejora norablemente li :,'.rdlü;

efrcaciay flexibiüdad de SQL. Los procedimientos compilados mejoran la ejecuc-:- :r: Lllrü

instruccionesy lotes de SQL de forma drzmánca.Además, los procedimientos aln:.:-:i{:rLrur

pueden ejecutarse en offos SQL Server si el servidor del usuario y el ren:,':' i,.itur
configurados para permitir logins remotos. Escriba disparadoresen su SQL Sen e: - ,:-, ;uruu:

ejecuten procedimientos en un servidor remoto siempre que determinados er-er:-i : q:nili


las eliminaciones,actualizacioneso inserciones,tengan lugar anivel local.

Los procedimientos almacenadosse diferencian de las instnrccionesSQL ordinar,-., r Lrinrr


lotes de instrucciones SQL en que estan precompilados. Lapnmeravez que se .--r-rü umr

prccedimiento, el procesador de consultas de SQL Server lo annli"ay prepare .*:. :-r: illtfil

ejecución que se aJmacenade forma definitiva en una tabla del sistema.Posten, :.::::l: u
ptocedimiento se ejecutasegún el plan almacenado.Puesto que ya se ha realtzad, : --r.ir-rnrfir

parte del tabajo de ptocesamientode consultas,los procedimientos almacenadosi. :, : r lfr*rr,rr



caside forma instantánea.
:lf

a€
SQL Servet propotciona una gran variedad de procedimientos almacen:c . - ,r3n1¡ri

herramientas adecuadaspara el usuario. Estos procedimientos almacenados :: ]-,inu@n

ptocedimientos del sistema.

Los procedimientos almacenadosse crean con CREATE PROCEDURE. Para c'.-:irii. iüutr¡ri

procedimiento almacenado,ya sea un ptocedimiento del sistema o uno de¡::.:: :, r, ül

cARRERA
DEcompuracló¡ e ltronmÁt¡cl c-
DrE
BASE DE DAT OS . L ABORAT ORIO

usu¿rio, use el comando EXECUTE. También puede .uüzar el nombte del procedimiento

almacenado solo, siempre que sealzpimerapalabn de una instrucción o lote.

Ejemplos de cteación y uso de procedimientos almacenados

I-a sintaxis pan la creación de un procedimiento almacenado sencillo, sin funciones

especialescomo parámetros,es:

CREATE PROCEDURE NOMBRE-PROCEDIMIENTO


AS SQl_statements

I-os procedimientos almacenados son objetos de base de datos, y sus nombres deben

ajustamea las reglaspam identificadores.

Es posible incluit cualquier número y cualquiet tipo de instrucción SQL, salvo las

instrucciones CREATE. Un procedimiento puede ser tan sencillo como una sola instrucción

que enumere los nombtes de todos los usuarios de una base de datos:

CREATEPROCEDURENAMELIST

AS

SEIX,CTNAME FROMSYSUSERS

Para ejecutzr un procedimiento almacenado, empleelapalabn clave execute y el nombre del

procedimiento almacenado, o simplemente especifique el nombte del ptocedimiento,

siempre que se envíe a SQL Servet solo o sea la primera instn¡cción de un lote. Puede

ejecutar NAMELIST de cualquiera de las siguientes fomas:

CIBERTEC GARRERADE coTPUTAc¡Óx E ¡T.FORTATICA


16,4

EXECUTE NAMELIST

EXEC NAMELIST

Pan eiecutarun procedimiento almacenadoen un SQL Serverfemoto, debe prop, :-i r;r *ll

nombre del servidor. La sintaxis completa de una lTarnadade ptocedimiento remo: -


-:

EXEC NOMB SER\TD. |BASE_DATOSI.IPROPIETARIO ]. PROCEDTRE - trE

Los siguientesejemplos ejecutanel procedimiento NAMELIST en la basede d..:

el servidor GATEWAY:

EXE,CUTE GATE\TAY.PUBS2..NAMELIST
O.NAMELIST
GATESTAY.PUBS2.DB
EXEC GATE,NTAY...NAMELIST

El ultimo ejemplo sólo funciona si PUBS 2 esla basede datos predeterminad:.r: ':.r.lriimrü1h

El nombre de la basede datos es opcional sólo si el procedimiento almacenac >- ::: I

en la basede datos predetetminadadel usuario.El nombre del ptopietado es , :'--- ,-ra r{riurl I

el propietario de la base de datos (" DBO ") es el propietario del procei-::--:-:

usuario lo posee.Logicamente,es necesariotener permiso pata ejecutatel pr, ,c-:-:-:.orrum;


*[
i

FI
Un procedimiento puede incluit más de una instrucción. I

d
@)
I
I
I
I

GARRERADE coMPUTACIóx C INFORMATICA


BASE DE DATO S . LABO RATO RI O

CREATE PROCEDURE SHO'ürALL AS


SELECT COLINT(X)FROM SYSUSERS
SFTtrCT COI_rNT(+)FROM SYSOBJECTS
sEr-ECT COUNT(*) FROM SYSCOLUMNS

Cuando se ejecua el ptocedimiento, los resulados de cada comando se muestran en el

orden en que la instrucción apareceen el procedimiento.

showall

5
(1 rowaffected)

88
(1 row affecteQ

349

(1 rouzaffected,return status= 0)

Cuando el comando CREATE PROCEDURE se ejecua de forma coffecta, el nombre del

ptocedimiento se almacenaen SYSOBJECTS y su texto en SYSCOMMENTS.

Se puede mostrar el texto de un procedimiento con el procedimiento del sistema

SP HELPTEXT:

CARRERADE coTPUTAcIÓN E INFoRMATIGA


CREATE,PROCEDURE SHOSTALLAS
SELECT COr.rNT(+)FROM SYSUSERS
sEr-ECT COUNT(*) FROM SYSOBJECTS
SELECT COUNT(*) FROM SYSCOLUMNS

2. ProcedimientosAlmacenadosY Permisos

Los procedimientos almacenadospueden servir de mecanismos de seguddad..,'= :t* ru

usuario puede recibir el permiso pan ejecutat un procedimiento almacenado a'-:¡-r: mrrr

tenga permisos en las tablas o vistas tefetenciadasen el mismo ni permiso par: :'::{$ur

comandos específicos.

3. Parámetros

,,'Hr
Un parámetro es un argumento de un ptocedimiento almacenado.Es posible dec--,: rgmu-..
rrrásparámetros de forma opcional en una instrucción CREATE PROCEDURE. = -i¡-riliuruilrl

debe suminisüat ei valor de cada paúmetro indicado err una instrucción


'-¡-:-*-ffi
PROCEDURE al ejecutarseel procedimiento.

I-os nombres de los parámeros deben estat ptecedidos del símbolo "@" .r-ai:.:::* r llür

rcgIas pzra identificadores. Es necesario asignadesun tipo de datos del sisr.:*,,-: @rr

definido por el usuario, y una longitud si es necesariopzrz-el tipo de datos. Los :- i:rL:r*l ,üü

los parámetros son locales para el procedimiento que los crea; los mismos :- ;-rrrnslrrü

parámetros pueden utilizarse en otros procedimientos. Los nombres de paráme: r¡:mu rrl'

el símbolo "@", p,r.d.n tener una longitud máxima de 30 bytes.

DEcoupurAcrór¡ e ¡xronuÁrrcl
GARRERA
IAIE DE DATO A. LABO RATO RI O 1 a?

A continuaciónsemuesüaun procedimientoalmacenadoque resula útil en la basede datos


pubs2.Dado el apellidoy nombre de un autor, el procedimientomuestralos nombtesde los
libros escritospor la personaen cuestión,asícomo el editot de cadalibto.

CREATEPROCAU-INFO

@IaSTNAME VARCHAR(,IO),
@FTRSTNAMEVARCHAR(2O)

AS
FCT AU-LNAME, AU_FNAME,TTTLE,PUB_NAME
SF-T
TITLEAUTHOR
FROMAUTHORS,TITLES,PUBLISHERS,
AU_FNAME = @FIRSTNAME
Iü¡7HERE
AND AU-LNAME = @I,ASTNAME
AND AUTHORSAU_ID = TTTLEAUTHORAU_ID
AND TTTLES.TM.E-ID = TTTLEAUTHORTITLE_ID
AND TTTLES.PUB_ID= PUBLISHEPS.PUB_ID

Ahora ejecuteAU-INFO:

AU_INFO RINGE&ANNE

Au-I¡rame Au-FnameTide Pub*Name

Ringer Anne The GourmetMicrowaveBinnet & Ha¡dlev


Ringer Anne IsAngettheEnemy? NewAge Books

c iRGlA DGGorpttrAqó*I nrornlrrcr


3.1,. P zrámetrosPredeterminados

Se puede asignar un valot predeterminado al parámetro de la insrucción CR'---]T

PROCEDURE. Este valor, que puede set cualquier constante, Se tornz c irr i
argumento del procedimiento si el usuario no proporciona ninguno.

A continuación se muestra un ptocedimiento que muestra los nombres de :...'{ r,


autoresque han escrito r.mlibro publicado por el editor introducido como par.r:-.: j,

no se ptoporciona ningun nombre de editor, el procedimiento muestra il ,> j-ir rrlr

publicadospor Algodata Infosystems.

CRE,ATEPROC PUB-INFO

@PUBNAME VARCHAR(40)= "ALGODATA INFOSYSTE-\f-i'


AS
SELECT AU_LNAME, AU_FNAME,, PUB_NAME
F'ROMAUTHORS A, PUBLISHERSP, TITLES T, TITLE-\L Tr- , I tiy
$IHERE @PUBNAME = P.PUB_NAME
AND A.AU_ID = TA.AU_ID

AND T.TITLE_ID = TA.TITLE_ID


AND T.PUB_ID = P.PUB_ID

Tenga en cuenta que si el valor predeterminado es una cadena de cr,::-.r ürüüur


contiene espaciosen blanco o signos de puntuación incrustados,es necesr:---rr-"l,mrilülllttl

entre comillas simpleso dobles.

Cuando ejecuta PUB_INFO, puede proporcionar cualquiet nombre de ...::,: :rmr,

valor del parámetro. Si no suministra ningun patámefto, SQL Sen;: -:ilm¡, dlr
predeterminado,Algodata Infosystems.

Si se esperaun parámetro, pero no se suministra ninguno y no se propo:; -: :Eu@6


valor en la instrucción CREATE PROCEDURE, SQL Server muestra Lr:r=::rj;l4nr1f¡

ertor con los parámetrosque espefael procedimiento.

GARRERA DE GoMPUTAGIÓN E INFoRMÁTIGA


BASE D E DAT OS - L ABORAT ORIO r69

NULL como parámetro piedeterminado

El valor predeterminado puede ser el valot NULL. En este caso, si el usuario no

suminisffa ningun patámetro, SQL Server ejecuta el procedimiento almacenado sin


mostraf ningun mensaje de error.

La definición del procedimiento puede especificar una acción pata llevarse a cabo si el

usu¿rio no propotciona ningún parámetro verificando si el valor del parámetro es nulo.

A continu¿ción se muestra un ejemplo:

CREATE,PROC PUB-INFOI

@PUBNAME VARCHAR(4O)= NUII

AS

IF @PUBNAME IS NULL
PRINT ''UD DEBE INGRESAR UN PARÁME:TRO PUB NAME ''
EI-SE
SEI-E,CTAU_LNAME, AU_FNAME, PUB_NAME
FROM AUTHORS A, PUBLTSHERSP, TITI-E,ST, TITLEAUTHOR TA
WfHERE @PUBNAME = P.PUB_NAME
AND A.AU_ID = TA.AU_ID

AND T.TITLE_ID = TA.TITIE-ID


AND T.PUB ID = P.PUB ID

3.2. Cancteres Comodín en el patámeto predeterminado

EI valor predeterminado puede incluir los caracteres comodín (%, _, t ] y t ^ ) si el

ptocedimiento uüzz el parámetro con la palabra clave LIKE.

CIBERTEC CaRRERA DE cotpurActóN E txronuÁr¡c¡


Por eiemplo, VER puede mostrar información sobre PUBLISHERS si el usuario n-

proporciona ningun parámetro, como se muestra a continuación:

CREATE PROCEDURE \IER


o/oNo/o"
@NOMBRE VARCHAR A0)--"
AS
SELECT * FROM PUBLISHERS
WHERE PUB_NAME LIKE @NOMBRE

3.3. Uso De Más De Un Patámetro

A continuación se muestrav¡avariante del procedimiento almacenadoAU_I\-FCr ¡.c

tiene valorcs predeterminados con caracterescomodín para ambos parámetros:

CREATE PROC AU-INFO2

o/o",
@L\STNAME VARCHAR(3O)= "D
@FIRSTNAMEVARCHAR(18)= " 70"

AS
SELE,CTAU_LNAME, AU-FNAME, T]TTE, PUB_NAI,{E
FROM AUTHORS, TITI-8,S, PUBLISHERS,TITLEAUTHOR
WHERE AU_FNAME LIKE @FIRSTNAME
AND AU-LNAME LIKE @IASTNAME
AND AUTHORS.AU_ID = TITLEAUTHOR.AU_ID
AND TITLES.TITI-E,_ID = TITLEAUTHOR.TITLE_ID
AND TITLES.PUB ID = PUBLISHERS.PUB ID

Si au_info2 se ejecuta sin parámetros, se muestran todos los autores cur-c. rc&ffi

comienzan pof "Dtt:

DEcotpuraclór
GaRRERA e lxronuAt¡cl
BASE DE DATO S - LABO RATO RI O

Si hay valores ptedetetminados disponibles para parámetos, éstos pueden omitirse en

la ejecución, comenzando por el último parámeto. No puede saltarseun parámetro a

menos que NULL seasu valor predeterminado suministrado.

Como ejemplo de omisión del segundo parámetro cuando se han definido valores

ptedeterminados para dos parámetros, puede buscar los übros y editores de todos los

autores cuyo apellido es "Ringer", de la siguiente manera:

E)(EC AU INFO2 RINGER

4. Grupos De Procedimientos

El punto y coma 0 y.l número entero opcionales después del nombre del procedimiento

en las instrucciones CREATE PROCEDURE y EXECUTE pemriten agrupar los


ptocedimientos que tienen el mismo nombre para que puedan omitirse juntos mediante un

solo comando DROP PROCEDURE.

I-os procedimientos utilizados en la misma aplicación suelen €ruparse de este modo. Por

ejemplo, podría crear una setie de prccedimientos llamados orders;l, orders;2, etc.. I¿

sigurenteinstrucción omitiría el grupo completo:

DROP PROC ORDERS

Una vez agrupados los procedimientos mediante el anexo de un punto y coma


0 y *
número a sus nombres, no es posible omitidos de forma individual. Por ejemplo, no se

permite la siguiente instrucción:

DROP PROC ORDERS:2

c|BENTEG GARRERADE co[PuTAclÓil E IilFoRTATIGA


5. Anidación De Procedimientos Dentro De Procedimientos

I_a andaci1ntiene lugar cuando un procedimiento almacenado o un disparador llama a otro.

El nivel de anidación se incrementa cuando el ptocedimiento o disparadot llamado inicia l¡

ejecución y disminuye cuando el procedimiento o disparador llamado ñnahzala eiecución.

Si se supem el máximo de 16 niveles de anidación, el procedimiento no se eiecuri

correctamente. El nivel de anidación actual se almzcenaen la variable global @@nesdevel.

6. Estado De Retomo

Los procedimientos almacenados pueden devolvet un valor entefo llamado estado i¡


''
retomo. Este estado indica que el procedimiento se ha realizadocorrectamente,o indic:

raz6n del fallo. SQL Seryer tiene un conjunto definido de valores de retomo. Los usuan'-.
'.::
también pueden definir sus propios valores de retomo. A continuación se muestra

ejemplo de un lote que unltz.ael formato de la instrucción EXECUTE que der,'ueh-e:

estado:

DECI-\RE @STATUSINT
EXECUTE@STATUS= PUB INFO
SELECT@STATUS

El estado de ejecución del procedimiento PUB-INFO se almacenaen la vadable @ su::s.

Este ejemplo solamente imprime el valor con una instrucción SELECT; eiem:,-s

posterioresutilizan estevalor de retomo en cláusulascondicionales.

7. ParámetrosDe Retomo

cuando las instrucciones GREATE PROCEDURE y EXECUTE incluyen la op'c,,r


c'c
outpur con un nombre de parámetro, el procedimiento devuelve un valor al solicitante.
udliz:x
puede ser un lote SQL u orro procedimiento almacenado. El valor der,'ueltopuede

en instrucciones adicionales en el lote o el procedimiento de llamada. Cuando se :\ic


parámetos de tetomo en una instrucción EXECUTE que forma parte de un lote- .r'

tI CARRERADE coftrPuraclÓN E lNFoRIf,ATlca CIBEÍIE a

t
BASE DE DATO 9. LABO RATO RI O

valores de retomo se imprimen con rrrr encabezadoantes de que se ejecuten las instruccrones

subsiguientesdel lote.

Este ptocedimiento almacenado rcahzala multiplicación corl dos valores enteros. El tetcer

valor entero, @ resulg se define como un parámeto ouq)ut:

CKT,^*TEPROCEDURE MATHTUTOR @MUL_T1INT, @MULT2INT,

@RESUIT INT OUTPUT


AS
SFI.FCT@RESULT= @MULTlx @)v[tJIJf2

Pan utiltzar MATHTUTOR a fin de poner en ciftas un problema de multiplicación, debe

declarar la variable @result e incluida en la instrucción execute.La adición de la palabra clave

output a la instrucción execute muestfa el valor de los parámetros de retomo.

DECIARE @RESULTINT
EXECMATHTUTOR5,6,@RESULTOUTPUT

Si quisiera adivinar la tespuesta y eiecutar este ptocedimiento proporcionando tres valores

enteros, no vería los result¿dos de la multiplicación. La instrucción select del procedimiento

asignavalores, Pero no imPdme:

8. I-,aPalabnClave OutPut

Lapalabraclave output puede abreviarsecomo oug del mismo modo que execute puede

acoft¿fsecomo exec.

Un procedimiento almacenado puede devolver varios valores; cada uno debe definirse como

una variable output en el procedimiento almacenadoy en las instrucciones de llamada:

CtBERÍEG caRRERADEGotPuraclón = t¡ronnÁrlcl


Si especifica output mientras ejecuta un ptocedimiento y el parámetro :-

utilizando output en el procedimiento almacenado,apareceráun mensajede er:

error llamar a un procedimiento que incluya especificacionesde valor de retor:: :i.E

los valores de retomo con output. Sin embargo, no se obtendrán los valores j- :5ln

autor del procedimiento almacenadocontola la informaciín a la que pued.:- r;Srlmill

usuarios y éstos tienen control sobre sus variables.

9. ReglasAsociadasA ProcedimientosAlmacenados

Algunas reglas adicionalespam la creaaón de procedimientos almacenadossor::

Las instruccionescreateprocedure no pueden combinarsecon otras instr:c¡,'-e,

solo lote.
La definición create procedure propiamente dicha puede incluir cualqüer a:r::n

de instmcción SQL, con la excepción de use y las siguientesinstruccione: --:=.¡IE

CREATE VIENí
CREATE DEFAULT
CREATE RULE
CREATE TRIGGER
CREATE PROCEDURE

Sepueden crear otros objetos de basede datos dentro de un procedimien:

hacer referenciaa un objeto creado en el mismo procedimiento, siempre;:c

antesde hacet referenciaa é1.La instrucción createdel obieto debe ocup.i: ;

posición en el orden real de las instrucciones del procediniiento.

En un procedimiento almacenado,no es posible crear un objeto, omiti¡lc, . :Ériil@uün

cfeaf otro con el mismo nombre.


. SQL Server crea los obietos definidos en un procedimiento almacenado c-:¿a:¡i slr

procedimiento se ejecuta,no cuando se compila.

GaRRERADE COT|TPUTACIó¡e l¡rOnmarlcl


BASE DE DAT OS. L ABORAT ORIO
1 75

si ejecuta un procedimiento que llama aotro,


el procedimiento llamado puede acceder
a
los objetos creadospor el pdmer procedimiento.

Si oea una tzbla temporal dentro de un procedimiento,


ra tabrasóroexiste para ese
procedimiento y desapareceal salir de éste.
a El número máximo de parámetros de un procedimiento
almacenado es de 255.
a El número máximo de.variabres-locales
yglobales de un procedimiento sólo está
limiado por la memoria disponible.

10. Cambio De Nombre De I_osprocedimientos


Almacenados

Se puede cambiar el nombre de un procedimiento


almacenado mediante el procedimiento
del sistema sp_reriame, cuya sinaxis es la siguiente:

SP-RENAME NOMBRE_PROCEDIMIENTO,
NUEVO-NOMBRE,

Por ejemplo, para cambiat el nombre de showall


a countall:

rogicamente, el nombte nuevo debe ajustarse


a las reglas para identificadores. El usuado
sólo puede cambiar el nombte de los
procedimientos almacenados que sean
de su
ptopiedad' El ptopieario de la base de datos
puede cambia¡ el nombre del procedimiento
almacenado de cualquiet usuado. El procedimiento
almacenado deberá estar en la base de
datos actual.

CIBERTEC
caRRERADEcorpurAc¡oneiironm¡rrcr-
B) TRIGGERS O DISPARADORE,S

I-os disparadotespueden usarsepara imponet la integidad de referencia de los dar,,. .:.

toda la base de datos. Los disparadorestambién permiten reñzar cambios "en cascad-."-:-

tablasrelacionadas,imponet restriccionesde columna más complejasque las permindi.: :, i

las reglas,comp^f^n los resultadosde las modificaciones de datos y llevar a cabo una rrc: :.

resultante.

1. Definición de disparador

Un disparador es un tipo especialde procedimiento almacenadoque se ejecuta cuair \:


insertan, eliminan o acínhzan datos de una tabla especificada.Los disparadoresp,-.:.-

ayudata mantener la integidad de referenciade los datos conservandola consistenci:..--:.

los datos relacionadoslógicamente de distintas tablas.Integridad de referencia sigmtrc. *"-u.

los valores de las clavesprimarias y los valores correspondientesde las clavesextemas r::--Í

coincidir de forma exact2..

La pdnctpal ventajade los disparadoreses que son automáticos:funcionan cualqurer.l:,.-: a

origen de la modificación de los datos, una inttoducción de datos por parte de un em:-=d:

o una acción de una aplicación.Cada disparador es específicode una o más operaci,,:-:---!r:

modificación de datos, UPDATE, INSERT o DELETE. El disparador se elecuta'i:i :1:

por cadainstrucción SQL.

Un disparador se "dispara" sólo cuando la instrucción de modificación de datos ü---*

SQL Servetverifica la posible üolación de tipos de datos,reglaso restriccionesde ir:.,-::o:l,u

El dispatador y la instrucción que lo "dispara" se consideranuna sola transacciónq;- .'r rp,¡''ü{

revertirse desde dentro del disparador. Si se detecta un error gfave, se rerien. : ,:- ¡tür,

transacción.

Situacionesen las que los disparadoresson de mayor utilidad:

¡ Los disparadotes pueden teelizat cambios "en cascada" a lo largo de -', u:ruüm
(
relacionadasde la base de datos. Por ejemplo, un disparador de eliminac :. ¡c itlr,

columna title-td de la tabla tides puede originar una eliminación correspondie:::. -rcÍm,
filas coincidentesde otras tablas,usando tide-rd como clave úticaparalocalü- ,¡.. üijl5'
(:
de tideauthor, salesy roysched.

caRRERADEcompuractóN E trt¡onuÁrtcl
BASE DE DAT OS. L ABORAT ORIO 1 77

Los disparadores pueden no permitir, o "feveldr", los cambios que violen la integidad

de refetencia,cancelandola transacciónde modificación de datos intentada.Este tipo de

disparadot puede activarsesi intenta insertar una clave extema que no coincide con su

clave primaria con:espondiente.Por ejemplo, podría crear un disparador de inserción en

tideauthor que revirtiese cualquier inserción si el nuevo valor tideauthor.title id no

coincidiesecon alguno de los valoresde tides.title_id.

Los disparadorespueden imponer restriccionesde mucha mayor complejidad que las

definidas con las reglas.Al cont¡ario de lo que ocuffe con las reglas,los disparadores

pueden hacer referencia a columnas u objetos de base de datos. Por ejemplo, un

dispatador puede revertir actuñzaciones que intenten incrementar el precio de un libro

en más de un 1olodel anticipo.

I-os disparadorespueden llevar a cabo análisisde hipótesis sencillos.Por ejemplo, un

dispatadot puede compmar el estado de una tabla antesy despuésde una modificación

de datos y llevar z caboaccionesbasándoseen esacomparación.

En estaultima sesión se resurnela sintaxisde los disparadores,se expücacómo usados y se

proporcionan ejemplos. Es posible que quieran utihzar estos ejemplos como plantillas para

otros dispatadores.En la sección final de este sesión describiremos las reglas relacionadas

con el uso de disparadoresy se explican los procedimientos del sistemaque proporcionan

ay-rdacon los disparadores.

Nota: Salvo el dispatadot llamado DELTITLE, los disparadorestratados en este capítLrlono


estánincluidos en la basede datos pubs2 entegada con la copia de SQL Server.Paratrabaiar

con los ejemplos mostrados en este capínrlo, cree cada ejemplo de disparadorescribiendola

instrucción createtrigger. Cada disparador nuevo panla misma operación (insert, update o

delete) de una tabla o columna escribe sobre el disparador anterior sin avisar, y los

disparadoresantiguos se omiten de forma automática.

2. companción de disparadotes y testricciones de integndad

Como altemativa a los disparadores,es posible usar la testricción de integddad de teferencia

de Ia instrucción CREATE TABLE para imponer la integridad de referencia en las tablas de

la base de datos. Sin embatgo,las testriccionesde integridad de rcferencia se diferencian de

los disparadoresen que no pueden lfevat a cabo las siguientestare s:

. Efectuar cambios "en cascada"en las tablasrelacionadasde la basede datos

C¡BERTEC CaRRERADE coMpuractóN E tfitFoRMÁrtcA


Imponer restricciones complejas haciendo referencia a otras columnas u obietos cie r,¿:'¿

de datos.

\saltzar anáüsisde hipótesis.

Además, las restriccionesde integridad de teferenciano revierten la ftansacciónactual c.'-¡:

resulado de la imposición de la integridad de datos..Con los disparadores,latransacc-í- i/É

puede revertit o continuar según la forma en que se manipule la integridad de referenc*

Si la apücación requiere una de las tareas anteriores, deberá usat disparadores. De -

contrario, las restricciones de integridad de refetencia ofrecen un método más sencillo pr,

imponer la integidad de los datos.

Tenga presente que SQL Server verifica las restricciones de integridad de referencia a¡:-:

que los disparadores, por lo que una instrucción de modificación de datos que rioie *
restricción no dispara el disparador también.

3. Creación de disparadores

Un disparadores un objeto de basede datos. Cuando se crea un disparador,se especiñci o


tabla y los comandos de modificación de datos que deben "disparar", o acdr,:- s

disparador. Luego se indica Ia acctón o acciones que debe llevar a cabo el disparador.

A continuación se muestra un ejemplo sencillo. Este dispandor imptime ufl tnensaiÉ:*rmr

vez que alguien tr^t^ de insertar, eliminar o actlrahzardatos de la tabla tides:

CREATE TRIGGERT1
ON TITI-E,S
FOR INSERT, UPDATE, DELE,TE
AS
PRINT ''UD. ACABA DE MODIFICAR VALORES E,N LA TABIA TTT:.ffiiIY

GARRERA DE COMPUTACIóX E INFORMATIGA CITTJ


BASE DE DATO S. LABO RATO RI O

SINTAXIS DE CREATE TRIGGER

A continuaciónsemuestrala sinaxis completade createtriger:

CREATE TRIGGER I Propieado .] TRIGGER_NAME


oN I owNERJ TABLE_NAME
{FOR{INSERT,UPDATE,DEIETE}
AS SQL_EXPRESION

o bien,usandola cláusulaIF UPDATE:

CREATE TRIrcER I Propieario.] TRIGGER_NAME


ON I Propietario] TABLE_NAME
FOR {INSERT, UPDATE}
AS

I rF UPDATE ( COLUMN_NAME )
[{ANo I oR} upDArE ( COLUMN_NAME
)]..1
SQL_E)(PRESION

[F UPDATE ( COLUMN_NAME )
[{ANo I oR} UPDATE (COLUMN_NAME)]...
SQL_DGRESTON 1...

La cláusula CREATE crea el disparador y le asigna un nombre. El nombte del disparador

debe cumplir con las rcglas paraidentificadores.

La cláusula ON indica el nombre delatablaque activa el disparador. Esta tabla se denomina

en ocasiones t¿bla de disparadores.

I-os disparadores se crean en la base de datos actu4 aunque pueden hacet rcfercnaa
a
objetos de otras bases de datos. El nombre de propietario que cahfica el nombre de

disparador debe ser el mismo que el de la abla. Nadie, excepto el ptopieario de la tabla,

puede crear un dispamdor en una tabla. Si se indica el propieario de la tabla con el nombre

CIBERTEC GARRERA
DEGotpufacló¡ e l¡ronuÁr¡cl
de tabla en la cláusulaCREATE TRIGGER o la cláusulaON, también debe esfr,- : :;.i',;: mr

la ota cláusuia.

La cláusula FOR especifica los comandos de modificación de datos de ... riul


-: -
disparadoresque activan el disparador.En el ejemplo anterior, la efecuciónc¡ ,"":".1*

UPDATE o DELETE en tides hace que seimprima el mensaje.

Las instruccionesSQL indican las condicionesy accionesdel dispatador.Las ccrr----. '.: JllXlll

disparador especificancriterios adicionalesque determinan si el comando in.¡: - : :. i::g ir

update hará que se lleven a cabo las acciones del disparador. Las acciones i. - : i:lrll"itrlllllll¡lr'

multiples de una cláusulaIF deben agruparsecon BEGIN y END.

Una cláusulaIF UPDATE verifica si existe una inserción o actuallzaciónpara'-:.:. : -vrurur


en particular. En el caso de las acnÑzzciones, la cláusula if update da con-. :-.;*.:luur,llittttil

verdadero cuando el nombre de columna se incluye en la cláusula set de un.: .-::, :l )rr

update, arurquela acnl.li"agión no cambie el valor de la columna. IF UPDATE :- -- -:rlim,

con delete.Es posible especificarmás de una columna, y usar más de una cláus:-,. i ülüuw

en una instrucción createtrigger. Puesto que el nombre de tabla se especificacr. : -- rrr,.rrürii

on, no debe usar el nombre de tabla delantedel nombre de columna con if upd;:.

4. Instrucciones SQL no permitidas en los disparadores

Dado que los disparadoresse ejecutancomo parte de la transacción,no se:'r::.--::-

sizuientesinstruccionesen un disparador:

. Todos los comandos create,incluidos create database,create table, create -..i- - l-:rlulus

procedure,createdefault, createrule, createrigger v createview


. Todos los comandos drop
. Alter table y alter database
¡ Truncate table
o Grant y revoke
. Update statistics
. Reconfigure
. Load databasey load transaction
. Disk init, disk mirror, disk tefit, disk reinit, disk remirror, disk unmirror
. Selectinto

CARRERA DE GOMPUTACIÓX E INFORMAT¡CA cErn


BAtE DE DATO E. LAEO RATO RI O

5. Omisión de disparadores

Sepuedequitar un disparadoromitiéndolo u omitiendo lztabla de disparadoresa la que está


asociado.

La sintaxisde DROP TRIGGER es:

DROPTRIC,GERI PROPIETARIOJTRIGGER_NAME
TRTGGER_NAME 1...
[ IPROPTETARTOJ

Cuando se omite una abl4los disparadores asociados a ell¿ se omiten automáticamente. El

permiso &op triget esá asignado de fotma predeterminada al propieario de la abla de

dispatadores y no es transfetible.

6. Uso de disparadorespara mantener la integidad de referencia

Los disparadores se usan para mantener la integridad de rcfetencia, que garantiza que los

datos üales de la base de datos, como el identificadot único de unos datos determinados,

seanprecisos y puedan usarseconforme cambia la base de datos. La integridad teferencial se

coordina mediante el uso de clavespdmarias y extefrias.

La clave primaria es la columna o combinación de columnas que identifican de forma

exclusiva una fila. Su valot no puede ser NUT.T, y debe tener uri índice único. Una abla con

una clave pffinúrapuede combinarse con las cl¿vesextemas de otras ablas.

La tabla de clave pnmfu puede considemtse como la maestra en una relación maestro-

discípulo. En una base de datos puede haber numetosos gnrpos maestro-discípulo de este

tipo.

La. clave extema es una columna o combinación de columnas cuyos valores coinciden con la

clave primaria. No es necesario que la cl¿ve extema seaúnica. Con frecuencia esta clave tiene

una relación de muchas-a-una con respecto a la clave pttrnerrl.Los valores de las claves
extemas deben ser copias de los valores de las claves primarias, es decir, los valorcs de las

claves externas sólo pueden existir si ambién existen en las claves primarias. Una clave

CIBERTEC G RitRA DG G(ilPUrlCróü C ¡¡rOnnArrce


extema puede ser nula; si alguna parte de la clave extema compuesta es nula, la totaliC=: :.

laclave extema debe setnula. Las tablas con claves extemas se denominan con frec-=-;

tablas discípulas o dependientes de la tabla maestra.

7. Funcionamiento De Los Disparadores

Los disparadoresde integridad de teferencia mantienen los valores de las clavese\te::: .. ::

línea con los de las claves primarias. Cuando una modificación de datos afecn , -r-r

columna clave, los disparadorescomparan los nuevos valores de columna con ias - '- .,'
relacionadas usando ablas de trabaio temporales llamadas tablas de verific:c :, :,!:

disparadores.Cuando se escdben los disparadores,las comparacionesse basan en l : ;'. .

almacenadostemporalmenteen las tablasde verificación de disparadores.

7.1. Ejemplo de Dispatadot De Inserción

Cuando se inserta una nueva fila de clave extema, es conveniente asegurarse.. :'-r: .ir;,

clave extema coincide con una clave primaria. El disparador debe verificar :: :-::-ii::

combinaciones entre la frla o filas insertadas y las filas de la tabla de clar-e D::::,-r:-!

luego revertir las insercionesde clavesextemas que no coincidan con una de '. -. ""'t

de la abla de clave p1rmaria.Este ejemplo revierte todos los cambios provoc:c { :} r' ,rü

instrucción insert; en ejemplos posteriores se indica cómo rechazarde form" :;r:-:-rari;

algunasmodificacionesde datos.

El siguiente disparador compara los valores title_td de la tabla inserted c,r,:- - - -,,: uü

tabla tides. EI disparador supone que va a realzat una entrada pata la ciar-e='.
-u
que no va a introducir un valor nulo. Si la combinación fallz,la transacciónse :--ivt:

CREATE TRIGGER FORINSERTRIGi


ON SALESDETAIL
FOR INSERT
AS
rF (SELECTCOUNT(*)
FROM TITI.E,S,INSERTED
\X'HERE TITLES.TITLE,_ID = INSERTE,D.TITLE,_ID

@@RowcouNT

GARRERADE GofspurAc¡óx e tNFoRtATtca cül CI


BAAE DE DATO A . LABO RATO RI O

/* CANCETI,RLA INSERCION E IMPRIMRTIN MENSAJE.X/


BEGIN
ROLLBACKTRANSACTION
PRINT ''NO, A TITLE-ID DOES NOT EXIST IN TITLES"
END
/* EN CASO CONTRARIO, PERMITIRLO. X/
ETSE
PRINT ''ADDED! ALL TTTI.E ID'S E)CTSTIN TTTIE,S.U

En esteejemplo,@@ rowcount haceteferenciaal número de filas añadidasala tzblz


salesdeail.Tarnbiénes el númeto de filas añadidasala"ablainserted.La vedficaciónde
si todos los valotestide-id añadidosa salesdetailexistenen la abla tides selleva a cabo
combinando tides e inserted. Si el número de filas combinadas,que se determina
mediante la consula select count(x), es difercnte d, @@ rowcounq una o varias
insercionessonincorrecbsv toda la transacciónsecancela.

Estedisparadorimprime un mensajesi la inserciónsereviertey otro si seacepta.

7.2. Ejemplo de disparadorde eliminacón

Cuandoseeliminauna fil¿ de claveprimati4 ambién debeneliminarselas filas de dave


extefira corespondientesde las ablas dependientes.Esto mantienela integddad de
refercncia al ganrfnar la eliminación de las filas discípulascuando se quia la, frla
maestra.Si esto no se hicier4 podth acabarcon una basede datos que tuviem filas
discípulasimposiblesde recupetaro identificar. Se rcquiereun disparadorque lleve a
cabouna eliminacionen cascada.

A continuaciónse muestraun ejemplo.Cuando se ejecrrauna instnrcción DELETE


en TITLES, una o más filas salen de la abla titles y se añadena la eliminid¿ Un
dispamdot puede comprobat l¿s ablas dependientes (IITLEAUTHO\
SALESDETAIL y ROYSCHED) para ver si tienen filas con un valor title-id que
coincida con los valotes tide-id quitados de titles y almacenadosahora a la abla
deleted.Si el disparadorencuentraatgunafila de estetipo,la quia.

CIEERTEG GTnRHtr DE coHPuTAcIóN E IilFoRTATIcA


CREATE TRIGGER DELCASCADETRIG
ON TITLES
FORDEIETE
AS
DEI-ETE TITLEAUTHOR
FROM TITLEAUTHOR DELETED
\7HERE TITLEAUTHOR.TITIf,-ID = DELETED.TITLE_ID

/X QUITAR FII"{S DE TITIEAUTHOR QUE


T+COINCIDAN CON I"\S FIIAS ELIMINADAS
** GÍtutos¡.*7

DELETE SALESDETAIL
FROM SALESDETAIL, DELETE,D
WHERE SALESDETAIL.TITI.E_ID = DELE,TED.TITLE ID
/* QUITAR FILAS DE SALESDETAIL QUE
** COINCIDAN CON I,A.SF'ILAS ELIMINADAS
x*6rÍruros¡.+/

DELETE ROYSCHED
FROM ROYSCHED, DE,LETED
WHERE ROYSCHE,D.TITLE_ID = DELETED.TITLE_ID
/* QUITAR FIIAS DE ROYSCHED QUE
*X COINCIDAN CON IAS FIIAS ELIMINADAS
** GÍtutog.*7

7.3. Ejemplos de Disparador de Actualización

Dado que una clave pimana es el identificador único de su fila y de las filas esr.::-;r, nr

otras tablas, un intento de acuñzat una clave prmana debe realizarsecon


-::::nrir
cuidado. En este caso, desea pfoteger Ia integridad de referencia ter-i¡u:r¡ ilrir
actualizzgi6na no ser que se cumplan las condicionesespecificadas.

caRRERADEcoupurac¡óN E txron¡uÁncl c. EIr


BASE DE DATO S . LABO RATO RI O

Como nofina general es más adecuado prohibir cualquier cambio de edición de la clave

prJrnalJ.a,pot ejemplo, rwocando todos los petmisos per;e-esacolumna. Pero si desea

prohibir las zctualizaaones sólo en determinadas citcunsancias, use un disparadot.

Este dispatador eüa las artlaJizaaones de titles.tidejd durante el fin de semana. La


cláusula if update de stopupdatetrig petmite cenftarse en una columna concret4

tides.title-id. Las modificaciones de los datos de esacolumna hacen que el dispamdor se

active.I-os cambios de los datos de otras columnas no. Cuando este disparadot detecta

vrta acualización que viola sus condiciones, canceb' la zctuñzaoón e impdme un

mensaje.

Si desea probat este disparador, sustituya el día actual de la semana por sábado

('Saturday') o domingo ('Sunday').

CREATETRIC.GERSTOPUPDATETRIG
ON TTTI-ES
FORUPDATE
AS
/* SI SEINTENTA CAMBIARTTTLES.TM.E-ID
** FJ SÁBADOO DOMINGO, SECANCELAIA ACTUALIZACIÓN.

IF UPDATE CIITLE-ID)
AND DATENAME@\üT,GETDATEO)
IN ('SATURDAY" "SUNDAY)
BEGIN
ROLLBACKTRANSACTION
PRINT ''TTEDONiT ALLOW CFIANGESTO'
PRINT UPRIMARY KEYSON THE \üTEEKEND!''
END

GIBERTEC cAnntna DEGor?uflctótr E lilFonr^Ttca


BASE D E D AT OS. L ABORAT ORIO

8. Reglasa,socüda-.a los disparadotes

Apane de prevenir los efectos de una modificación de datos en múltiples filas, las

reversiones de los disparadores y la anidación de disparadores, existen otros factores que

deben tenerse en cuenra cuando se escriben disparadores.

9. Disparadores\- permisos

Un disparador se define en una t¿bla en particular. Sólo el propietario delatzbla tiene los

permisos create triger v drop triger sobre dicha tabla. Estos permisos no se pueden
transferir a otros pg teriss.

SQL Server acepta definiciones de disparadot que intentan llevar a cabo acciones para las

que el usuario no tiene permiso. La existencia de un disparador de ese tipo abora cualquier
intento futuro de modificar la tabla de disparadores, puesto que el disparador se ejecuta y

falla debido a que los permisos no son correctos. I-a tr:arsacción se cancelará.Seránecesario

rectificar la situación de los permisos u omitir el disparador.

Por ejemplo, José es el ptopietario de salesdetaily crea un disparador en ella. Se supone que

el disparador debe act.)ahz^rtides.total-sales cuando se actualice salesdeail.qty. Sin embargo,

Mary es la ptopietaria de tides y no ha concedido aJosé el permiso sobre tides. CuandoJosé

intenta zcí)ahz^t s2ls5dstail,SQL Server deteca el disparador y que José no tiene permisos

sobre titles, y reüerte la transacción de ac¡¿ahzación.José deberá obtener de Mary el permiso

de ac¡taltzaciónpan titles.total-sales u omitir el disparador de salesdet¿il.

10. Restriccionesde los disparadores

A continuación se describen algunaslimitaciones o restricciones impuestas a los disparadores

por SQL Server:

Una abla puede tenet un máximo de tes dispamdores: uno de ac¡taJizzción, uno de

inserción y uno de eliminación.

Cada disparador puede aplicarse a una sola tabla. Sin embatgg, un mismo disparador se

puede aphcara las ffes acciones del usuario: update, insert y delete.

CIBERTEC GARRERADE coTPuTAcIÓ[ E INFoRI|IATIGA


No se puede crear un disparador en una üsta ni en una abla temporaf aunque los

dispatadotes pueden hacer tefetencta alas vistas o tablas temporales.

Aunque la instrucción truncate table es, en realidad, como una instrucción delete sin la

cláusula whete pofque quita todas las fi.las,no puede "acdvar" un dispaador porque las

eliminaciones individu¿les de fila no se registran.


Los disparadores no se permiten en las ablas del sistema. Aunque no aparece ningun

mensaje de error si crea un disparador en una abla del sistema, el disparador no se

uüzará.

11. Disparadotesy rendimiento

En términos de rendimiento, la sobrecarga de disparador es generalmente muy baja. El

tiempo invertido en ejecuar un disparador se emplea pdncipalmente para hacer referencia a

otras tablas, que pueden estar en memoda o en el dispositivo de base de datos.

Las t¿blas de verificación de disparadores deleted e inserted siempte están en la memoria

zctva. La ubicación de otras t¿blas a las que hace referencia el dispamdot determina la

cantidad de tiempo necesariapanrcalizar la operación.

P¿ra mostrar el texto de la instrucción create dgg.r, ejecute el procedimiento del sistema

sp_helptext:

GARRERADE GoMPUTAGIÓNE IxronuÁuc¡ CC


GT
BAAE DE DATO S . LABO RATO RI O

189

PROCEDIMIENTOS ALMACENADOS

CREATETABLE ALUMNOS (

COD INT PRIMARYKEY,

NOMVARCHAR(30),

APE VARCHAR(3O),

FECING DATETIME

CREATETABI.E CURSOS

(CODINT PRIMARYKEY,

NOM VARCI{AR(40),

CREINT,

CIC'INT

crear un stored procedure que


permita ingresar los datos del
alurnno.

Nota:

a. Código autogenerado
b. Fecing automádca
c. Verificar si el nombre y apellido
existen

cARRERAoecomp@
t90

CREATEPROCINGRESARALUMNO

@NOM VARCFTAR(30),

@APEVARCHAR(3O)

AS

BEGIN

DECIARE @CODINT

trCT CoUNT(x)+ 1 FROMALUMNOS)


SET@COD=(SFT

F,CTXFROMALUMNOS
IF E)(ISTS(SFT

WHERE NOM LIKE @NOM + '%'

AND APE LIKE @|APE+',oh\

PRINT'DATOSYA INGRESADOS'

EI-SE

INSERTINTO ALUMNOSVALUES

(@coD, @Nolvt @APE,GETDATEo )

END

: INGRESAR-ALUMNO'PEPITO','PERAITA'
comprobando

StrIFCT XFROMALUMNOS

1.2. Ctear un Stoted Procedure que permia ingresar los datos del curso

Nota:

Código autogenerado
^.
b. Créditos por ciclo no deben ser mayores a 4O

c. Nombte del curso no tepetidos

cARRERADEcompurAclóx e trFoRtÁrrca
BASE DE DATO S LABO RATO RI O
-

r'os créditos del cuso vaúartde


1 a 5 créditos y ros ciclos vaúande
1 a 6 ciclos.

CREATEPROCINGRESAR_CURSO

@NOM VARCHAR(40),

@CREINT,

@CICINT
BEGIN

DECIARE @CODINT

SET@COD=(gF'.T
F.CTTSNULLO4AX(C9D)
+ 1,1)
FROMCURSOS)
IF EXISTS(SELECT
* FROMCURSOS

UTHERENOM LIKE
@NOU+'%)
BEGIN

PRINT DATOS YA INGRESADOS,

RETURN

END

rF (strTtrcT suM(CRE)+@cRE
FROMCURSOS
wHERE ele=@Cle >40

BEGIN

PRINT'SUPERONUMERODE
CREDITOSPORCICLO'
RETURN

END

TNSERTrNTO CURSOS
VALUES (@coD,@NOM,@cRE
,@crq,
END

I
cARRERIoecorp@

l
2. TRIGGERS o DISPARADORES

CREATE TABLE CLIENTES (

CLI-COD INT, /+código del cüente*/

CLI_DES CHAR(30), /xnombre del cliente*/

CLI-VEN MONEY /fuenas del cüente(entotal)x/


)

CREATE TABI-E VENTAS (

VEN-NUMINT, /*número delaventaf

CLI-COD INT, /*código de clientex/

VEN IMP MONEY /*importe delaventa/

2.1'. Crear un Ttiger que después de ingresar a un cliente muestre a todos los cüc:=r
existentes,ordenados en forma descendentesegún el toal de ventas del cüente.

CREATE TRIGGER T1 CLI

ON CLIENTES

FOR INSERT

AS

SEIECT * FROM CLIENTES ORDER BY CLI VEN DE-SC

INSERT INTO CLIENTES VALUES (1,'CLII" 0)

INSERT INTO CLIENTES VALUES Q''Cff,2"O)

INSERT INTO CLIENTES VALUES (3,'CL[3" 0)

GARRERADE coTPUTAcIóN E lrrronuÁrIcI


BASE DE DATO S . LABO NATO RI O t93

2.2. Cteat un Ttigget que al momento de ingesar las ventas de un cliente, actualice

automáticamente el total de ventas de dicho cliente que se encuentra en la tabla Clientes

CREATE TRIC,GER T2 CU

ON VENTAS

FOR INSERT

AS

UPDATE CLIENTES

SET CLI-VEN = CLT-VEN + INSERTED.VEN_IMP

FROM INSERTED

WHERE CLIENTES.CTJ COD = INSERTED.CLI COD

INSERT INTO VENTAS VALUES (7,3,1,20)

SELECT X FROM CLIENTES

cARRERADEGotpuracló¡ e l¡ronnÁrrcl
t9a

Pararecoldar

I¿s instnrcciones de Ttansact SQL pueden €rupa$e en procesos por lotes, perrnanecer en

la base de datos, eiecutane rcpetidamente en fotma de procedimientos almacenados y

activarse automáticamente como dispamdores (ttigeÍs). Es impotante entender las


difetencias entre esta ñrnciones y urnbién que sus acciones no son mutuamente exclusivas.

I-os procedimientos alm¿cenados y Trigers de Transact SQL pueden ser bastante

complejos, y pueden llryar a ser rura parte importante del código fuente de su aplicación

ffi\
' ,"' :l:t' i]A90l

GrntEnr !c comr'Tlc|Ó* ! |tfffiItlcr

También podría gustarte