Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
ttiüzar las característicasy beneficios del SQL Server. Nos mostrará paso a paso,
El curso contatá con veinte sesiones,a taz6n de una pot semana. En las clases se
Reddeconüenldos
DML
trnguaje deD¿tos
deManipulación
caRRERADEootpurAcrón e rrFoRtATtcA
BASE DE DATO S ' LABO RATO RI O
El l€nguqfeSOLSener-
Orbrrhdoalm@
TEMA $
ESPECÍFICOS
OBJETTVOS
CONTENIDO
DEGolpuraclón e nronuÁncl
cARRERA
lo
1.. DEFINICIÓN
arquitectura Cliente / Servidor (R.DBMS) que usa Transact-SQL para mandar peticiones
- Relalionel Daleb€ee
Cliente
que coffan en computadoras tipo Servidor y tareas que corran en computadoras tipo
Cüente:
variedadde ambientes.
DEcompurActór e ltlronmÁt¡cl
cARRERA GIBERTEG
BASE DE DAT OS - L ABORAT OR¡ O
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
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
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
relacionesentre ellos.
utilizarlos.
autorizados.
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.
5. ALGUNAS \E,NTATAS
añadida.
la repücacióndistribuída de fusión del SQL Server 7.0, el soporte Wingx permite que las
empfesaentefa.
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
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
Fara remrdar
caRRERADEcompurac¡ó¡ e rxronmÁrlcl
BASE D E DAT OS . L ABORAT ORIO
TEMA
Anahzador de Consultas, de manera general. Esa sesión nos será de gan utilidad para el
componentes del SQL Server paratener una visión general de las siguientes sesiones.
OBJETIVOSESPECÍFICOS
CONTE,NIDO
funciones de basede datos. Si estosobjetos van a compartirse entre varios cubos,los objetos
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.
fijas del servidor sysadmin y dbcreator, aunque se puede otorgar permisos a otros
usuaflos.
identificadores.
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.
Estos archivos contienen todos los datos que no caben en el archivo de datos principal.
Algunas basesde datos pueden ser muy grandes y necesitarvarios archivos de datos
Estos archivos contienen la información de registro que se uiüza para recuperar labase
de datos, aunque puede habet más de uno. El tamaño mínimo para un archivo de
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.
basede datos.
Después de crear una base de datos, se recomienda cteat una copia de seguridadde la base
de datos master.
CORPORATTVO)
'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 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#é*
crean utilizando el nombre de base de datos que ha especificado como prefijo, por
son los mismos que los tamaños predeterminados especificadospan \a base de datos
L Pan cambiar los valores predeterminados del nuevo archivo de base de datos
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
3.4. Pata especificar el límite de tamaño del archivo, haga clic en una de estas
opciones:
3.4.2. Para especificarel t¿maño máximo que se debe permitir que alcanceei
especifiqueun valor.
Nota: El tamaño máximo de una base de datos está determinado por la cantidad de
A1
Crearunabase de datos indiüdual.
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.
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.
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
5.1. Comandos
índices.
o I-os DML que permiten generar consultas para ordenat, filtrat y extraer
Comandos DI T
Desctipción
Comando
CRE^*TE, j¡l;rado paÍz cre f rluevastablas,camPose índices
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
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.
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.
Función Desctipción
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'
datos podemos haceda de dos manefas, una es usando el administador corporativo y d' ona
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.
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.
Los atributos de los datos de una tabla (como tamaño, color, cantidad, fecha, etc.
Nombre de columna:
b. Tipo de datos
1.2.1 RelaciónUno-a-Varios:
.
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).
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.
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.
entidad relación:
Recomendaciones:
uni
1. Implementamos las tablas,las llavesprimarias,la llaves fotáneasy la relacionesen
forma directa.
REFE,RE,NCES)
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 (
desdischat(15))
CreateTable Cliente (
descüchar(25),
ruccli char(1O),
telcli char(8),
dircli chat(2O),
fecfac datetime,
despro varcharQ}),
prepro floatQ))
Use ventas
CreateTable Distrito (
desdischar(l5)
CreateTable Cüente (
descli chat(25),
ruccli char(10),
telcli char(8),
dircü char(20),
coddis chat(S))
fecfac datetime,
codcli char(S))
CreateTable Producto (
despro varchatQ}),
prepro floatQ))
CreateTable DetalleFactura(
canpro int)
AlterTable fac¡xa
caRRERADEcotpuraclót e ¡¡rronuÁr¡cl
BASE D E DAT OS. L ABORAT ORIO
L\TPRESA "2OOA4IL[A.S"
::'i sus constantes visitas y entrevistas con la Ing. Inés Tang, supervisota del área de
Pioducción, ella ha manifestadolo siguiente:
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.
Finalmente necesitamos una Base de Datos que nos permita dmacenar la información descrita
anteriormenteasícomo satisfacernecesidadesDuntualescomo:
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.
E,MPRE,SA"2OOMIL[-{S"
ú_
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
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^
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
@{TENIDO
. Inmoduccióna lasconsulas
Las consultas de selección se utilizan para indicar al motor de datos que der.uc-.r
modificable.
2.1. SEI-E,CT
I-a cláusula SELECT lista los datos a recuperar por la sentencia SELECT. l-os
calcular por SQL cuando efectua la consula o también el asterisco (*) p"." recuperr
Las exptesiones de columnas deben ir sepatadaspor comas si existen más de una (por
Los nombres de campos pueden ir ptecedidos por el nombre de la tabla o su alias. Por
; l":
* : : ! - -r FROM üsta las tablas o ficheros que contienen los datos a recuperarpor la
'-: -a. El tbrmato de esa cláusulaes:
;Qué es un ALIAS?
CIBERTEC CaRRERA
DEGoupuracló¡ e t¡ronmÁtlcl
40
Las dos sentenciasson idénticas y nos devolverían los nombres y apellidos del
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
\[T{ERE Expresión1operadorExpresion2
expresiones.
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
].4. ORDERBY
La cláusula ORDER BY ordena los resultados de la consulta en base a los datos de una
Por tanto, indica como deben clasificane los registros que se seleccionen. Tiene la
forma:
IDESC I ASq,...]
ORDERBY {Expresión-orden
FROM ALUMNOS
PROVIN CIA-NACIMIE,NTO
FROM ALUMNOS
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
El ptedicado se incluye entre la cláusulay el pdmet nombre del campo a recuperar, los
posiblespredicadosson:
GaRRERA
DEcompuracróx E tNFoRmATtca CIBERTEC
BASE DE DAT OS - L ABORAT ORIO
3.1,.Ar_r,
3.2.TOP
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
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
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
.\CTIWDADES
Segunla basedatosPESCA:
J
I
,1. Mostrar la descripciónde todos los batcos, pero ordenadosalfabéticamenteen forma
descendentesegún el nombre del barco
ls
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
febrero.
J. Mostrar lzrcIadón de todos los empleados que tengan estado civil casado
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
o La cláusula Order by especifica que los resultados de la consula deben ser otdenados c
Grreión y Mantenimiento de
lndices
TEMA
estructura que proporciona un acceso rápido a las filas de una tabla en base a valores de un
índices.
ESPECÍFICOS
OBJE,TTVOS
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.
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:
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.
En donde:
DISALLOW
Prohíbe valores nulos en el índice
NULL
IGNORE Excluye del índice los valores nulos incluídos en los camPos que lo
NULL
Eiemplos
I Crear un índice llamado Milndice en la tabla empleados con los campos Prefijo yTeléfono.
I
Crear un índice enlatablaEmpleados utiliz6de el campo ID, obligando que el campo ID
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
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
>
de
IEG ITDG
cARRERA DE compurac¡óx e tNFoRMAT¡cA
32
krarccordar
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
La sentenciade INSERT se utiliza panañaür tegistros a las ablas de la base de dato.- Hll
datos.
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
Cada sentencia INSERT añade un único registro a la tabla. En el ejemplo sólo se han
Un valor nulo NULL no significa blancos o ceros sino simplemente que el campo
f i¡ !
bserrar Multiples Registros
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
SEI-ECT código,empresa,dirección,teléfono,tipo-cli
FROM CIIENTE
ur
WHEREtiP-cli = 1
b.
Como podemos observar es posible combinar nuestro comando INSERT con nuestra-s
2. UPDATE,
La sentencia UPDATE se utiliza para carnbiar el contenido de los registros de una tabla
IWHERE { condición }]
nuevos datos.
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
La cláusula WHERE sigue el mismo formato que la vista en la sentencia SELECT r'
UPDATE LIBROS
SET PRE,CIO= PRECIO
\X'HERE PAGINAS > 250
Otro ejemplo,par^ frjarIz fecha de matrícula (en la tabla matrícula) de todos aquellos
UPDATEMATRICUI-A
SETFECFIA-MATRICULA= TODAYO
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
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
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¿
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
elimina los registros equivocados podrá recuperados desde las copias de seguridad.
El formato de la sentenciaes:
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-¿
Oto ejemplo: Pan borrar las notas de evaluacionesque, no sean la Final, de los
DELETE FROMNOTAS
I
\CTÑ'IDADES
e
CREATE COPIA_\IENDEDOR (
NOM_\EN VARCHAR(5O)NULL,
APE_\EN VARCHAR(5O)NULL,
tr
FEC_ING DATETIME NUT J ,
qra
UPDATE COPIA_VENDEDOR
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
Fara recordar
La sentencia INSEM de una fila añade una fila de datos z vna tabIa. Los valores para la
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
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
oB_lETrvos ESPECT
FICOS
comparación.
CONTE,NIDO
o AND )r(,=,()..
o IF EXISTS
a BE,T\X'EEN,IN,
AND, O& NOT
a DISTINCT.LIKE,
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
2. Operadotes Logicos
Operador Uso
Los operadoreslógicos soportadospor SQL son: AND, OR, XOR, Eqv, Imp, Is y Not.
operación variz en función del operador lógico. I-,a tabla adjunta muestra los diferentes
posiblesresultados:
<expresiónl> Operador
;" -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
nte: :rs:::ros cdterios. Cuando existendos o más condicionesdeberánestat unidaspot AND o OR.
Basta con que urra de las dos seaciera para que lo seala condición total.
OR Sueldo= 100:
i OperadoresNuméricos
Operador Significado
-r Suma
Resta
* Multiplicación
División
x*ó ^ Exponenciacion
-1.1.Ejemplos de operadoresnuméricos
Sepide:
Mostrar los datosde un producto, ademásel IGV y el Importe de cadaproducto.
SELE,CTCODIGO, DESCRIPCION,PR.E,CIO,
FROM PRODUCTO
E CaRRERA
DEcompuracróx e ¡x¡onuÁr¡cl
4. Operadores de caracteres
Las expresionesde caracteres
puedenincruirros siguientesoperadores:
Sepide:
SUELDO
FROM VENDEDOR
cARRERADEcotpurac¡óx e lnronmÁrtcl
AASE DE DAT Og - L ABORAT ORIO 69
SELECTNOMBRE - APELLIDOS
FROM PERSONA
ResultadoObtenido sería:
ANTONIORODRIGUEZ
r. Operadoresde Comparación
Operador Uso
Menor que
Mayor que
Distinto de
Igual que
É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.
Mosüar todos los datos de los empleados que tengan hasa 30 años de edad
como máximo.
Mostrar todos los datos de los empleados donde la pdmera leta de su apellido
seadesde'A'hast¿'U
Mosüar todos los datos de los empleados donde la primera letra de su apellido
no sea la 'Z'
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
Mostrar todos los datos de los empleados que hayannacido antes del mes de
iunio.
Mostrar todos los datos de Ios empleados que hayan ingresado aaabaiat antes
deI25/01./1.998
;alor.
tri
rB
rel
ú06
SEI.E,CTX
FROM VUELOS
WHERE ORIGEN ='LIMA'
AND EXISTS(SEIT,CT+
FROM RESERVAS
WHERE PLAZAS-UBRES > O
AND NUM_VUELO = VUELOS.NUM-VUELO)
SEIECT x FROMProducto
!7HERE EXISTS ( SEI-ECT * FROM Producto
$7HERE Código = 3)
9) devuelve"falso"
SELECT Codpro,Descripción
FROMPtoducto
WaHEREOrden.CodPro= Producto.CodPro)
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:
SF.TF.CT Codpro,Descdpción
FROM Producto
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
: BET\{E,EN
\
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.
\rHERE,CODPOSTALBETITEEN1OOAND 2OO
SEII,CT ID_EMPLEADO
FROM TABIA_ESTADISTICA_EMPLEADOS
AND 5OOOO
WHERE SAI.\RIO BETWEEN 3OOOO
SELECT ID-EMPLEADO
FROM TABLA-ESTADISTICA-EMPLEADOS
Este operadot der,'uelveaquellos registros cuyo campo indicado coincide con alguno de
EXPRESIÓNTNOTIIN O/ALOR1,VALOR2,...)
$THERENUM_FAC IN (FA001"'FA002)
NUM_FAC COD_PRO
GARRERA
DEGoupuractóN E tnronuÁrlcl
BASE DE DAT OS. L ABORAT ORIO
Observe que las condicionesde búsquedacon AND, OR y NOT pueden ser ellasmismas
condicionalesde búsquedacompuestas.
Ejemplo 1:
4.000 soles.
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
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.
Ejemplo2:
Mostrar a los vendedoresque nabajxr en los distritosde SAN BORJA o SAN LUIS r
¿demáspercibanun sueldomayor a 3,000soles
i . 3 . La pilabn ciave NOT nos sirve para seleccionar filas en donde la condición de
búsquedaseafalsa
Ejemplo 2:
Omite los rdstros que contienen datos duplicados en los campos seleccionados.Pa:e
cARRERADEcomPurActó¡r e ¡xronmÁtlc¡
BASE DE DAT OS - L ABORAT ORIO
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
vendedores registrados, la pregunta sería: ¿Qué vendedores aún no tiene ningún distrito
asignadoparztabajar?
SELECTDISTINCT COD_VEN
FROM TB DISTRITO
COD_\E,N
v01
v02
v03
v08
v09
v10
Segunlos vdores del'ueltos observamosque los vendedotesV04, V05, V06, V07 no existen
distritos asignados.
El resultadoobtenido sería:
Borradot de Tinta
Caia de Diskettes
PapelBond Oficio
PapelBulky
LIKE
sintaxises:
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
sizuienteforma:
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.
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
expresionescon diferentesmodelos
ACTT\TDADES
1. Mostrar el detalle de todas las facturas cuyo importe (precio venta t cantidad) de cada
FROM TB_DETALLE_FACTURA
)
SELECT X FROM TB DETALI.E, FACTURA
FROM TB-DETALLE_FACTURA
STHERENUM_FAC IN (FA002"'FA005"'FA006)
ú.
"BF:11
.-
': ¡r','
.'" 4
Tf- -.
'rbr
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*
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:
PanarMar
Czda vez que hagamos rüra consula haciendo referencia a un valor numédco, la
Cada vez que hagamos trna consula haciendo referencia a un valor no numédco, la
t t
\íHERE CAMPO (=, ),(, etg VALOR
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'- :*¡
DEGoitpurActór e txronuÁrlcl
GARRERA
BASE DE DAT OS . L ABORAT ORIO
FuncionesAgrupdas y
húsqueda&grufos
TEMA
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
SELECT CAMPOS
FROM TABI.\
ITHERE CRITERIO
GROUP BY CAMPOS DEL GRUPO
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.
SEI-ECTrD_FAMrLrA,SUM(STOCrl
FROMPRODUCTOS
GROUPBY ID_FAMILTA
¡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.
FROA,{PRODUCTOS
GROUP BY ID FAMILIA
FTAVTNGSUM(STOCIg 100
AND NOMBREPRODUCTOLIKE'BOS7o'
FROM DETALLE_\E,NTAS
GROUP BY NUA,I_FAC
IMPORTE ACUMUI-ADC
FROM DETALLE_VENTAS
GROUP BYNUM_FAC
IMPORTE ACUMUL{DO
2. SUM
Devuelve la suma dei conjunto de valores contenido en rüi campo especifico de una
consulta.Su sintaxises:
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:
FROM DE,TALI-E,PE,DIDO
3. AVG
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
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:
FROM PEDIDOS
FROM PEDIDOS
5. STDEV,STDEVP
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
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
calcularse).
FROM PEDIDOS
SE,I-ECTSTDEVP(GASTOS)AS DESVIACION
FROM PE,DIDOS
h
b
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
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- ;
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
Eiemplol:
FROM EMPLEADO
GROUPBY NDEPTO
: cnplo 2:
Fi= cada proyecto muestre su número, nombre, y número de empleados que tabajan en éL
FROM PROYECTO
\¡¡-:;-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.
FROM PROYECTO
Ejemplo4:
Para desarrollar este ejemplo hemos utilizado una subconsulta que setá tema de
siguientessesiones.
\CTTWDADES
1. Mosttat cuántasfaenasharealiz.adocadabarco.
sEr-ECT COD_BA&COUNT(*)
FROMTB BARCO
GROUPBY COD_BAR
FROMTB_BARCO
GROUP BY COD_BAR
sEr-ECT COD_ESP,SUM(CAN_REC)
FROMTB_DETALI-E,-FAENA
D
SELECT PRECIO_MINIMO = MIN8RE_ESP),
PRECIO_MÁXIMO = MAX(PRE_ESP)
FROM TB ESPECIE
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.
Para rer¡oldar
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
,rI\TENIDO
. TOIN,LEFTJOIN, RIGHTJOIN
I{AVING pueden contener también condiciones de búsqueda pan frlnar aún más
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
o comPleta.
El conjunto de resulados de una combinación extema izquierda incluye todas las ri'q
GARRERA
DEcotpurac¡ó¡ ¡ r¡ronuÁncl
BASE DE DAT OS. L ABORAT ORIO
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
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
tabla izquierda se combina con todas las filas de la tabla de la derecha. Las combinaciones
USE PUBS
*,
& --:s tablas o vistas de la cláusula trROM se pueden especificar en cualquiet orden en las
1.1rNNER JOrN
Una combinación intema es aquélla en la que los valores de las columnas que :<
USE PUBS
SELECT X
ON A.CITY = P.CITY
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.
USE PUBS
SEI-E,CT*
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
USE PUBS
SELE,CTP.PUB_ID,P.PUB-NAME, P.STATE,A.*
ON P.CITY = A.CITY
También se puede combinar valores de dos columnas que no son iguales. I-os
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
BOOKS.
USE PUBS
ON A.STATE,> P.STATE
NewMoon Books
La combinación no iguat (< >) se usa con poca frecuencia. Como :<r¿
USE PUBS
SELECTDISTINCT T1.TYPE.TI.PRICE
ON TI.TYPE = T2.TYPE
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):
USE PUBS
ON TI.TITLE_ID = T2.TITLE_ID
ORDERBYTI.AU ID
L¿s combinaciones internas sólo der,rrelven filas cuando hay una fila de ambas tablas, como
elrminan las filas que no coinciden con alguna fila de Ia otra tabla. Sin embargo, las
la cláusula FROM, como mínimo, siempre que tales filas cumplan con alguna de las
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
SQL Server 2000 unli"a las siguientespalabrasclavede SQL-92 pata las combinaciones
L
SQL Server admite tanto la sintaxis de combinaciones extemas de SQL-92 como la sintaxis
combinacionesextemashetedadasde Transact-SQl.
columnas CITY. I-os resultados sólo muestran los autores que viven en ciudaci.. :
Para incluir todos los autores en el tesult¿do, con independencia de que ';::
Transact-SQL:
USE PUBS
ON A.CITY = P.CITY
Algodata Infosystems
Algodata Infosystems
LEF f JOIN incluye en el resulado todas las filas de la tabla authors, tanto si iun
los resultados,no hay datos coincidentes con la mayot parte de los autores enumerados,
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
pdmera tabla.
Para incluir todos los editores en los resultados,sin tener en cuenta si hay un editor en la
USE PUBS
ON A.CITY = P.CITY
n
ür
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
ON S.TITLE-ID = T.TITLE-ID
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
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
ON A.CITY = P.CITY
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"
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.
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
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
üDNTENIDO
CREATE VIEW
- \-istashorizontales.VistasVerticales
Una subconsulta es una consulta SELECT que devuelve un valor único v esri .:-.,:
$TFIERECOD \E,N IN
( SELECT COD_\'EN
FROM TB_FACTURA
Se llama también subconsulta a urra consult¿ o selección interna, mientras ._i Jüü
extema.
también como combinaciones.Otras preguntasse pueden formular sólo con subc, :-"
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::
FROM TB_\-ENDEDOR
FROM TB_FACTURA
. 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.
ü ; consulta SELECT de una subconsultase incluye siempte entre paréntesis.No puede incluir
'-:,:
subconsultapuede anidarsedentro de la cláusulaWHERE o HAMNG de una instrucción
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.
Las instrucciones que incluyen una subconsulta normalmente tienen uno de estos formarc':':
WHERE exptesión-de_comparacion
IANY I AIf] (subconsulta)
extem2,
individual.
DEcoiltpurAclóx e ItronmÁr¡cl
GaRRERA
BASE DE DAT OS - L ABORAT ORIO 1 17
productos cuyo ptecio unitario es mayor que el de cualquiet producto vendido con un
1.2.Ar_L
El predicado ALL se uti-liza para tecuperar únicamente aquellos registros de la consulta
3. IN
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
ITHERE IDPRODUCTO IN
un valor igual.
1.4. EXISTS
FROM EMPLEADOS T1
El siguiente ejemplo obtiene una lista con el nombte, cargo y salario de roc:':
FROM Empleados
FROM empleados
WfHERE(CargoLIKE'o/oJefeo,;
OR (CargoLIKE 'o/oDnectof/o)
2, SUBCONSULTAS CORRE,I-{CIONADAS
SEI-E,CTAU-LNAME, AU-FNAME
FROMAUTHORS
WHERE lOOIN
(SEI.ECT ROYALTYPER
FROMTITLEAUTHOR
Una vista se puede considerar una tabla virtuat o urra consulta aJmzcenada.Los datos
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
Transact-SQl, de la misma forma en que se hace refetenciaa las tablas.Las üstas se utilizan
Por ejemplo, permitir que un empleado sólo vea las filas que guardan su trabajo en una
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.
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;
AS
FROM AUTHORS AS A
pequeño conjunto de üstas que contienen los datos específicos que el usuario esta
presentarlos como una ítica tabla, haciendo que las consulas multiablas se formulen
D) Aislamiento frente al cambio: Una vez vista puede presentar una imagen consisrente
dividen.
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
tablas fuente subyacentes.Esto es posible para visas sencillas, pero para vistas
caRRERADEcotpurac¡óx ¡ ¡xronmÁr¡cl
3.3. CI-\SItrICACIÓN DE LAS VISTAS
5.2.2. VistasVerticales
CREATE,\1E,N7REP ESTE,AS
SELECT+ FROMREP\ENTAS
OFICINArN (21,22)
\xaHERE
una visión particular de la tabla REPVENTAS, que sólo muestra los veni;¡
la región adecuada.
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
SEIECT CODIGO,NOMBRE,APELLIDO
FROMTB \IENDEDORES
Mostrará:
cARRERADEGompurAclón e l¡ronmÁrrcr
-TEG
ACTI\TDADES
SE,IT,CTNOM-ESP, PRE_ESP
FROM TB_ESPECIE
WHE,RE NUM_FAE IN (
(SELECTCOD_ESPFROM TB_ESPECIE
\rHERE, COD_BAR IN
iffi lillÚ
WHERE COD_PRO IN
$7HERE NTIM_FAC IN
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))
cARRERADEcotpurAcÉil E NFoR¡tArrca
Para rceordar
Una subconsulta es una consula dentro de una consult¿. Las subconsultas aDarecen
[a consulta.
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
üTE
fmi
o\
Usor
oI
s(
caRRERADEGotpuraclón e ¡nronnÁrlcl
¡ASE DE DAT OS . L ABORAIORIO 127
TEMA
ESPECÍFICOS
OBJETTVOS
o Continuación de Vistas
CONTENIDO
o Beneficiosdel Erwin
o Generaciónde una BD automática
CIBERTEC DEcotPurAc¡ó¡
GaRRERA e lnronmÁr¡cl
CONTINUACION DE VISTAS... J[.;* i:
información a parnr de la tabla fuente tanto por la dimensión hodzonal como r:r
3r=
vertical, como en esteejemplo:
egn
j:ff
Lr¡f-
:É:
I
I
I
I
La solución sería:
SE,LECTCODIGO, NOMBRE,,APELLIDO
FROM TB-VENDEDOR
WHERE, TIP-\{EN = 1
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
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
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
efectuarconsultasadicionalessobre ella.
'MÁXIMO'= MAXOJNIDADE,S_VENDIDAS),
'TOTAL U.'=SUM(TJNIDADES_VENDIDAS)
FROM VENTAS
GROUP BYMODELO,COLOR
ORDER BY MODELO,COLOR
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 ---*
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.
'MAXIMO'= MAX(INIDADES_VENDIDAS),
FROMVENTAS
GROUP BYMODELO,COLOR
ORDER BY MODELO.COLOR
FORD AZUL 39 63 52
F'ORD BLANCO 9 62 44
C) \IISTAS COMPUE,STAS
Una de las razones más frecuentes para uüzat vistas compuestas es simplificar ru
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 '-,
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 solución senareñzat una consulta en base a dos tablas fuente y luego creadasc,,muu
una vista:
CREATEVIE\üTVISTA COMPUESTA 1 AS
FROMVENTAS, CLIENTE
ERwin es una herramiena de fácil utilización pan el diseño de base de datos telacionales
de datos, desde el modelo lógico en donde se rcflejan los requerimientos del negocio, hasta
ERu/in no es sólo una herramiena de diseño de base de datos, sino que es una herramienta
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
üferentes.
-._ *Y
'i . .
, . ', - j fl :¡
LI]D_PRD (F}!
cfrtr_EsP (Fkx
f¡U¡n_FAE(FK,l
rlOD_E:rP fFK)
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
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)
AS
X,IMPORTE= CAN_VEN*PRE-VEN
Str,T,F,CT
FROM TB_DETALLE_FACTURA
WHERENUM FACIN
Crear una visa el nombre del vendedor y el nombre del distrito del que se
AS
FROMTB-DISTRITO A, TB_VENDEDORB
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
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
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
Una vista puede ser un subconjunto simple fila/columna de una única abla, puede
ablas.
Una vista puede hacer teferencia como una tabIzrcaI en una sentencia SELECT, IL\-S
TL\IA
control de flujo, los bucles, el tratamiento de errotes y las opciones especificasdel entomo.
{'fts]ETryOSESPECÍFICOS
. Cilizar Ttansact-SQl para usar el SQL estándar como lenguaje de programación y poder
ILT\TENIDO
: Begin..End
: Goto, If else,Case
: Retum, WaitFor
caRRERADEcorpurac¡ó¡ e ¡xronmÁrrcl
7. PROGRAMACIÓN TRANSACT _ SQL
disparadores.
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.
lote que las instrucciones insert que ejecutan laregla o valor ptedeterminado.
Use debe ejecutarse en un lote anterior antes que las instrucciones que hacen
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
funciones son:
BREAK iale del final del siguiente bucle while más exterior.
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::,:
instrucciones.
La sintaxisde begin...endes:
BEGIN
BLOQUE DE INSTRUCCIONES
END
veamosun ejemplo:
2.3. IW1HTT
tr,Y BREAK...CONTINUE
La sintaxises:
\XTIILE BOOLEAN_E,XPRESSION
EXPRESIÓN _SQL
UPDATETITIES
SET PRICE = PRICE x 2
END
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.
I EXPRESTÓN
_Sqr1...
BREAK
I EXPRESTÓN
_Sqq...
CONTINUE
I E)GRESTÓN
_Sqq...
END
permite que la instrucción print se ejecute sólo cuando el promedio esú ¡:r
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.
Una vadable es una entidad a la que se asigna un valor. Este valor puede cambiar
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
procedimiento.
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
Cuando se declara una variable, tiene el valor NULL. Los valores se as:-*.--
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
solo valor. Una subconsultaque asignaun valor alavanable local debe der-,--'.: ; nrii*riiiruu
Las instrucciones select que utilizan exptesiones que devuelven más de un valor asignan
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
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
DECIARE @MMONEY
SEIf,CT @M= ADVANCE FROMTITLE,S
SELECT @M
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.
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
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.
fof eflof.
CIBERTEC GaRRERA
DEcoMpurAc¡ór e ¡xronmÁrrcl
fectadano contiene una columna IDENTITy, @@idenntt¡ se derc m fri
Si un usuado declara una variable local que tiene el mismo nombre que una \-a::::,xt'
2.6. GOTO
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
I¿ sinaxis es simplemente:
RETURNI EXPRESIONENTERA ]
FROM SYSOBJECTS,MASTER.SYSLOGINS
WHERE MASTER.SYSLOGINS.NAME = @NM
AND SYSOBJECTS.UID= MASTER.SYSLOGINS.SUID
AND SYSOBJECTS.TYPE- rrRrr
END
2.8. PRINT
La sintaxis es:
:¡lr
.I
PRINT @MSG
GARRERA
DEcorpurAc¡óx e tNFoRuATtca
BASE D E DATO S - LABO RATO RI O
Las cadenas de formato pueden contener hasta 20 marcadores de lugar únicos colocados
2.9. WAITFOR
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,
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.
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.
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¿::"
Este ejemplo indica a SQL Server que esperehastalas 2:20 p,m. Después, actuo)tzaL :Lnrur
BEGIN
'üíAITFOR TIME " 1.4:20"
INSERT CHESS(I\IEXT_MO\E)
VALUES(Q-KR5)
EXECUTE SENDMESSAGETUDY
END
NTAITFOR
DEIAY "0:00:
L0"
2.10.¡*COMENTARIOS */
I-a notación del comentario se utiliza pata anexar comentarios a instucciones, lotes y
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
encuentra erltre rr/*rr y "*/u se trata como parte del comentario. Los comentarios se
pueden anidar.
frnaltza con"* /" como siempre. A continuación se muestra el aspecto que tiene:
2.11.CASE
lo que no hay cambios permanentesen los datos. Por ejemplo, la funció: i_r-i['
. Lapalabraclave CASE.
-TE
BASE DE DATO 9. LABO RATO RI O
'ü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,
MTE
Co
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
OBJETTVOSESPECIFICOS
CONTENIDO
A) CREATEPROCEDURE
CIBERÍEC GaRRERA
DEGorpufac¡ó¡ e mronuÁncl
162
A) PROCEDIMIE,NTOS ALMACENADOS
Incluir parámetros
efrcaciay flexibiüdad de SQL. Los procedimientos compilados mejoran la ejecuc-:- :r: Lllrü
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:
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
a€
SQL Servet propotciona una gran variedad de procedimientos almacen:c . - ,r3n1¡ri
Los procedimientos almacenadosse crean con CREATE PROCEDURE. Para c'.-:irii. iüutr¡ri
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
especialescomo parámetros,es:
I-os procedimientos almacenados son objetos de base de datos, y sus nombres deben
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
siempre que se envíe a SQL Servet solo o sea la primera instn¡cción de un lote. Puede
EXECUTE NAMELIST
EXEC NAMELIST
Pan eiecutarun procedimiento almacenadoen un SQL Serverfemoto, debe prop, :-i r;r *ll
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
en la basede datos predetetminadadel usuario.El nombre del ptopietado es , :'--- ,-ra r{riurl I
FI
Un procedimiento puede incluit más de una instrucción. I
d
@)
I
I
I
I
showall
5
(1 rowaffected)
88
(1 row affecteQ
349
(1 rouzaffected,return status= 0)
SP HELPTEXT:
2. ProcedimientosAlmacenadosY Permisos
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
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'
DEcoupurAcrór¡ e ¡xronuÁrrcl
GARRERA
IAIE DE DATO A. LABO RATO RI O 1 a?
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
PROCEDURE. Este valor, que puede set cualquier constante, Se tornz c irr i
argumento del procedimiento si el usuario no proporciona ninguno.
CRE,ATEPROC PUB-INFO
valor del parámetro. Si no suministra ningun patámefto, SQL Sen;: -:ilm¡, dlr
predeterminado,Algodata Infosystems.
La definición del procedimiento puede especificar una acción pata llevarse a cabo si el
CREATE,PROC PUB-INFOI
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
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
DEcotpuraclór
GaRRERA e lxronuAt¡cl
BASE DE DATO S - LABO RATO RI O
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
4. Grupos De Procedimientos
El punto y coma 0 y.l número entero opcionales después del nombre del procedimiento
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¿
6. Estado De Retomo
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
estado:
DECI-\RE @STATUSINT
EXECUTE@STATUS= PUB INFO
SELECT@STATUS
Este ejemplo solamente imprime el valor con una instrucción SELECT; eiem:,-s
7. ParámetrosDe Retomo
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
DECIARE @RESULTINT
EXECMATHTUTOR5,6,@RESULTOUTPUT
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
los valores de retomo con output. Sin embargo, no se obtendrán los valores j- :5ln
9. ReglasAsociadasA ProcedimientosAlmacenados
solo lote.
La definición create procedure propiamente dicha puede incluir cualqüer a:r::n
CREATE VIENí
CREATE DEFAULT
CREATE RULE
CREATE TRIGGER
CREATE PROCEDURE
SP-RENAME NOMBRE_PROCEDIMIENTO,
NUEVO-NOMBRE,
CIBERTEC
caRRERADEcorpurAc¡oneiironm¡rrcr-
B) TRIGGERS O DISPARADORE,S
toda la base de datos. Los disparadorestambién permiten reñzar cambios "en cascad-."-:-
las reglas,comp^f^n los resultadosde las modificaciones de datos y llevar a cabo una rrc: :.
resultante.
1. Definición de disparador
los valores de las clavesprimarias y los valores correspondientesde las clavesextemas r::--Í
origen de la modificación de los datos, una inttoducción de datos por parte de un em:-=d:
revertirse desde dentro del disparador. Si se detecta un error gfave, se rerien. : ,:- ¡tür,
transacción.
¡ 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
disparadot puede activarsesi intenta insertar una clave extema que no coincide con su
definidas con las reglas.Al cont¡ario de lo que ocuffe con las reglas,los disparadores
dispatadot puede compmar el estado de una tabla antesy despuésde una modificación
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 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
de datos.
contrario, las restricciones de integridad de refetencia ofrecen un método más sencillo pr,
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
disparador. Luego se indica Ia acctón o acciones que debe llevar a cabo el disparador.
CREATE TRIGGERT1
ON TITI-E,S
FOR INSERT, UPDATE, DELE,TE
AS
PRINT ''UD. ACABA DE MODIFICAR VALORES E,N LA TABIA TTT:.ffiiIY
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...
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.
Las instruccionesSQL indican las condicionesy accionesdel dispatador.Las ccrr----. '.: JllXlll
update hará que se lleven a cabo las acciones del disparador. Las acciones i. - : i:lrll"itrlllllll¡lr'
verdadero cuando el nombre de columna se incluye en la cláusula set de un.: .-::, :l )rr
con delete.Es posible especificarmás de una columna, y usar más de una cláus:-,. i ülüuw
on, no debe usar el nombre de tabla delantedel nombre de columna con if upd;:.
sizuientesinstruccionesen un disparador:
. Todos los comandos create,incluidos create database,create table, create -..i- - l-:rlulus
5. Omisión de disparadores
DROPTRIC,GERI PROPIETARIOJTRIGGER_NAME
TRTGGER_NAME 1...
[ IPROPTETARTOJ
dispatadores y no es transfetible.
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,
exclusiva una fila. Su valot no puede ser NUT.T, y debe tener uri índice único. Una abla con
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
laclave extema debe setnula. Las tablas con claves extemas se denominan con frec-=-;
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 :, :,!:
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ü
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:
@@RowcouNT
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
Dado que una clave pimana es el identificador único de su fila y de las filas esr.::-;r, nr
Como nofina general es más adecuado prohibir cualquier cambio de edición de la clave
active.I-os cambios de los datos de otras columnas no. Cuando este disparadot detecta
mensaje.
Si desea probat este disparador, sustituya el día actual de la semana por sábado
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
Apane de prevenir los efectos de una modificación de datos en múltiples filas, las
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
Por ejemplo, José es el ptopietario de salesdetaily crea un disparador en ella. Se supone que
intenta zcí)ahz^t s2ls5dstail,SQL Server deteca el disparador y que José no tiene permisos
Una abla puede tenet un máximo de tes dispamdores: uno de ac¡taJizzción, uno de
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.
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
uüzará.
zctva. La ubicación de otras t¿blas a las que hace referencia el dispamdot determina la
P¿ra mostrar el texto de la instrucción create dgg.r, ejecute el procedimiento del sistema
sp_helptext:
189
PROCEDIMIENTOS ALMACENADOS
CREATETABLE ALUMNOS (
NOMVARCHAR(30),
APE VARCHAR(3O),
FECING DATETIME
CREATETABI.E CURSOS
(CODINT PRIMARYKEY,
NOM VARCI{AR(40),
CREINT,
CIC'INT
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
F,CTXFROMALUMNOS
IF E)(ISTS(SFT
PRINT'DATOSYA INGRESADOS'
EI-SE
INSERTINTO ALUMNOSVALUES
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
cARRERADEcompurAclóx e trFoRtÁrrca
BASE DE DATO S LABO RATO RI O
-
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
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
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.
ON CLIENTES
FOR INSERT
AS
2.2. Cteat un Ttigget que al momento de ingesar las ventas de un cliente, actualice
CREATE TRIC,GER T2 CU
ON VENTAS
FOR INSERT
AS
UPDATE CLIENTES
FROM INSERTED
cARRERADEGotpuracló¡ e l¡ronnÁrrcl
t9a
Pararecoldar
I¿s instnrcciones de Ttansact SQL pueden €rupa$e en procesos por lotes, perrnanecer en
complejos, y pueden llryar a ser rura parte importante del código fuente de su aplicación
ffi\
' ,"' :l:t' i]A90l