14.- Transact SQL Avanzado

download 14.- Transact SQL Avanzado

of 34

Transcript of 14.- Transact SQL Avanzado

  • 8/17/2019 14.- Transact SQL Avanzado

    1/34

     TRANSACT SQL

     T-SQL

  • 8/17/2019 14.- Transact SQL Avanzado

    2/34

     TRANSACT-SQL• SQL (Structured Query Language) es un

    lenguaje estructurado de interrogación y

    administración de BD

    • !Cómo "unciona SQL#

    $eticiónSQL

    Datos

    Base deDatos

    Sistema%estor de

    BD

  • 8/17/2019 14.- Transact SQL Avanzado

    3/34

     TRANSACT-SQL

    •  TRANSACT-SQL (T-SQL) es el lenguajede BD &ue usa 'S SQL Serer **+

     T-SQL incluye las siguientes categor,asDQL (Data Query Language) .tili/adas 0arao1tener datos de BD 2jem0lo S2L2CTDDL (Data De3nition Language) .tili/adas 0ara

    crear4 alterar o 1orrar o1jetos de BD 2jem0loCR2AT24 ALT2R y DR5$D'L (Data 'odi3cation Language) .tili/adas enla interrogación y mani0ulación de datos en

    es&uemas ya e6istentes 2jem0lo 7NS2RT4.$DAT2 8 D2L2T2

  • 8/17/2019 14.- Transact SQL Avanzado

    4/34

     TRANSACT-SQL

    •  T-SQL incluye las siguientes categor,as – TCL (Transaction Control Language) .tili/adas

    0ara con3rmar o restaurar transacciones deBD 2jem0lo C5''7T4 R5LLBAC9 

     – DCL (Data Control Language) .tili/adas en elcontrol de acceso a datos en la BD 2jem0lo%RANT y R2:592

     – CCL (Cursor Control Language) .tili/adas

    0ara o0erar so1re 3las indiiduales de unata1la resultado &ue consta de arios registros2jem0lo D2CLAR2 C.RS5R4 ;2TC< 7NT5 y.$DAT2 =

  • 8/17/2019 14.- Transact SQL Avanzado

    5/34

    DQL (Data Query Language)

    Sentencia SELECT no puede escribirse sin lacláusula FROM. La sentencia SELECT recupera

    flas de una o más tablas y su sintaxis mássimple esSELECT  seleccionar los cam0os &ue deseamosrecu0erar de la 1ase de datos4 se0arados 0or comasSi se es0eci3ca el s,m1olo >4 se o1tendr?n todos los

    cam0os de la ta1laITO  crea una nuea ta1la en el gru0o de arc@ios0redeterminado e inserta las 3las resultantes de laconsulta en ella

    FROM tabla origen!"ERE condición de origen#RO$% &' e60resión de agru0amiento"()I#  condición de 1s&uedaOR*ER &' ordenado 0or ASC ascendente D2SCdescendente

    Si if d

  • 8/17/2019 14.- Transact SQL Avanzado

    6/34

      Si,nifcado

    SELECT$ala1ra clae &ue indica &ue la sentencia de

    SQL &ue &ueremos ejecutar es de selección

    (LL

    7ndica &ue &ueremos seleccionar todos los

    alores2s el alor 0or de"ecto y no suele

    es0eci3carse casi nunca

    *ISTICT  7ndica &ue &ueremos seleccionar sólo losalores distintos

    FROM

    7ndica la ta1la (o ta1las) desde la &ue

    &ueremos recu0erar los datos 2n el caso de

    &ue e6ista m?s de una ta1la se denomina a la

    consulta Fconsulta com1inadaF o FjoinF 2n las

    consultas com1inadas es necesario a0licar unacondición de com1inación a traGs de una

    cl?usula !"ERE

    !"ERE

    2s0eci3ca una condición &ue de1e cum0lirse

    0ara &ue los datos sean deueltos 0or la

    consulta Admite los o0eradores

    lógicos (* y OR

    #RO$% &' 

    2s0eci3ca la agru0ación &ue se da a los datos

    Se usa siem0re en com1inación con "unciones

    agregadas

    2s0eci3ca una condición &ue de1e cum0lirse

    0ara los datos2s0eci3ca una condición &ue

    de1e cum0lirse 0ara &ue los datos seandeueltos 0or la consulta Su "uncionamiento

  • 8/17/2019 14.- Transact SQL Avanzado

    7/34

    He aquí algunos ejemplos de mandatos SQL en la estructura SELECT...FROM...:

     Seleccona los campos !nom"re! # !apelldos! de la ta"la !clentes!.

    SELECT nombre,apellidos FROM clentes$

     SELECT clentes.nom"re% producto FROM clentes% productos;

      Selecciona el campo 'nombre' de la tabla 'clientes', y el campo 'producto' de la tabla

    productos

    !ay "ue tener en cuenta "ue si dos tablas poseen el mismo nombre de campo #un 'nombre'

    de cliente y un 'nombre' de productos, $ay "ue especi%icar tambi&n la tabla a la cualpertenece dic$o campo, ya, "ue de lo contrario, seleccionara ambos nombres(

     SELECT peddos.& FROM peddos$ o SELECT & FROM peddos;

    Selecciona todos los campos de la tabla 'pedidos'

     Select !'om"re : ! ( space)*+% nom"re FROM clentes

    El resultado es )ombre* +ere

     

    http://www.monografias.com/trabajos11/sercli/sercli.shtmlhttp://www.monografias.com/trabajos12/elproduc/elproduc.shtmlhttp://www.monografias.com/trabajos12/elproduc/elproduc.shtmlhttp://www.monografias.com/trabajos11/sercli/sercli.shtmlhttp://www.monografias.com/trabajos11/sercli/sercli.shtmlhttp://www.monografias.com/trabajos12/elproduc/elproduc.shtmlhttp://www.monografias.com/trabajos12/elproduc/elproduc.shtmlhttp://www.monografias.com/trabajos11/sercli/sercli.shtml

  • 8/17/2019 14.- Transact SQL Avanzado

    8/34

    Clasula WhereLa cla-sula .!ERE es opcional, y permite seleccionar "u& re/istros aparecer0n en la

    consulta #si no se especi%ica aparecer0n todos los re/istros( +ara indicar este con1unto

    de re/istros se $ace uso de criterios o condiciones, "ue no es m0s "ue una comparaci2n

     del contenido de un campo con un determinado 3alor  #este 3alor puede ser constante #3alor predeterminado(, el contenido de un campo, una 3ariable, un control, etc(

    He aquí algunos ejemplos que lustran el uso de esta cl,usula: SELECT & FROM clentes -HERE nom"re!/LFRE0O!$

    Selecciona todos los campos de la tabla 'clientes', pero los re/istros de todos a"uellos

    clientes "ue se llamen '4LFRE5O' SELECT & FROM a"onados -HERE pro1nca/rca! OR pro1nca2/nto3agasta4 

    OR pro1ncaSerena!$

    Selecciona todos los campos de la tabla 'abonados', pero los re/istros de todos los

    abonados de las pro3incias de 64rica7', 4nto%a/asta' o 6Serena' SELECT & FROM a"onados -HERE edad567 /'0 edad89$

    Selecciona todos los abonados con edades comprendidas entre los 89 y los : a

  • 8/17/2019 14.- Transact SQL Avanzado

    9/34

     SELECT & FROM daro -HERE 3ec>?

      SELECT & FROM daro -HERE 3ec?A6?@>=$

    Selecciona los apuntes de 'diario' realiados en =ulio de 8>>?

     SELECT & FROM clentes -HERE nom"re LDE 2/L!$

    Selecciona los clientes cuyo nombre comience con los caracteres '4L'

     SELECT & FROM clentes -HERE apelldos LDE !E!$

    Selecciona los clientes cuyos apellidos terminen con los caracteres 'EA'

     SELECT & FROM clentes -HERE apelldos LDE !/MO!

    Selecciona los clientes cuyos apellidos conten/an, en cual"uier posici2n, los caracteres

    'A4MO'

     SELECT & FROM clentes -HERE cudad )2Santago!% 2Rancagua!%

    2C

  • 8/17/2019 14.- Transact SQL Avanzado

    10/34

    Cl0usula Order By

    La cl0usula OR5ER B suele escribirse al %inal de un mandato en

    SDL 5ic$a cl0usula establece un criterio de ordenaci2n de los datos

    de la consulta, por los campos "ue se especi%ican en dic$a cl0usula

    La potencia de ordenaci2n de dic$a cl0usula radica en laespeci%icaci2n de los campos por los "ue se ordena, ya "ue el

    pro/ramador puede indicar cu0l ser0 el primer criterio de ordenaci2n,

    el se/undo, etc, as como el tipo de ordenaci2n por ese criterio*

    ascendiente o descendiente

    #( OR5ER B campo8 4SC@5ESC,campoG 4SC@5ESC

    La palabra reser3ada 4SC es opcional e indica "ue el orden del

    campo ser0 de tipo ascendiente #HI> @4IA(, mientras "ue, si se

    especi%ica la palabra reser3ada 5ESC, se indica "ue el orden del

    campo es descendiente #>IH AI4( Si no se especi%ica nin/una deestas palabras reser3adas, la cl0usula OR5ER B toma, por de%ecto,

    el tipo ascendiente 4SC

    H í l j l

  • 8/17/2019 14.- Transact SQL Avanzado

    11/34

    He aquí algunos ejemplos:

     SELECT nom"re% apelldos% telG3ono FROM clentes OR0ER ; apelldos% nom"re $

    Crea una a/enda tele%2nica de 'clientes' ordenada por 'apellidos' y 'nombre'

     SELECT & FROM peddos OR0ER ; 3ec

  • 8/17/2019 14.- Transact SQL Avanzado

    12/34

    ElmnacIn 0n,mca 0e Regstros

     KDui&n no $a sentido la necesidad de eliminar de un /olpe un /rupo

     de re/istros en com-n , en lu/ar de $acerlo uno por uno Esta

    operaci2n puede ser muc$o m0s $abitual de lo "ue parece en un

    principio y, por ello, el len/ua1e SDL nos permitir0 eliminar re/istrosDue cumplan las condiciones o criterios "ue nosotros le indi"uemos

    a tra3&s de la sentencia 5ELETE, cuya sintais es la si/uiente*

    0ELETE FROM ta"las -HERE crteros

    5onde el par0metro 'tablas' indica el nombre de las tablas de las

    cuales se desea eliminar los re/istros, y, el par0metro 'criterios',representa las comparaciones o criterios "ue deben cumplir los

     re/istros a eliminar, respetando a a"uellos re/istros "ue no los

    cumplan Si por e1emplo I "uisi&ramos eliminar todos los pedidos

    realiados por el cliente cuyo c2di/o sea : en el da de $oy,utiliaramos la si/uiente sentencia*0ELETE FROM peddos -HERE Jcodgo clenteK9 /'0 3ec

  • 8/17/2019 14.- Transact SQL Avanzado

    13/34

    /rtmGtca Con SqlKDui&n no $a ec$ado en %alta el saber el total de in/resos o de

    /astos de esta %ec$a a esta otra

    KDui&n no $a deseado saber la media de 3entas de los comerciales

    en este mes NTran"uilos* el len/ua1e SDL nos permitir0 resol3erestas y otras cuestiones de %orma muy sencilla, ya "ue posee una

    serie de %unciones de car0cter  aritm&tico*

    Sumas O Totales

    +ara sumar las cantidades num&ticas contenidas en un determinado

    campo, $emos de utiliar la %unci2n SPM, cuya sintais es la

    si/uiente* SPM#epresi2n(

    5onde 'epresi2n' puede representar un campo o una operaci2n con

    al/-n campo

    La %unci2n SPM retorna el resultado de la suma de la epresi2nindicada en todos los re/istros "ue son a%ectados por la consulta

    Qeamos al/unos e1emplos*

    SELECT SM)undades+ FROM peddos$

    http://www.monografias.com/trabajos7/cofi/cofi.shtmlhttp://www.monografias.com/trabajos10/rega/rega.shtmlhttp://www.monografias.com/trabajos12/evintven/evintven.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos34/el-caracter/el-caracter.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos34/el-caracter/el-caracter.shtmlhttp://www.monografias.com/trabajos7/mafu/mafu.shtmlhttp://www.monografias.com/trabajos12/evintven/evintven.shtmlhttp://www.monografias.com/trabajos10/rega/rega.shtmlhttp://www.monografias.com/trabajos7/cofi/cofi.shtml

  • 8/17/2019 14.- Transact SQL Avanzado

    14/34

    SELECT SM)undades+ FROM peddos$

    Retorna el total de unidades pedidas #la suma de todos los 3alores almacenados en el campo

    'unidades' de la tabla 'pedidos'(

     SELECT SM)ngresosNgastos+ /S saldo FROM daro$

    Retorna el saldo %inal de una tabla llamada 'diario'

     SELECT SM)undades+ /S total FROM peddos -HERE 3ec

  • 8/17/2019 14.- Transact SQL Avanzado

    15/34

    Palores Mínmos M,mos

    Tambi&n es posible conocer el 3alor mnimo o m0imo de un campo, mediante las %unciones

     M) y M4, cuyas sintais son las si/uientes*

    M')epresIn+

    M/)epresIn+

    He aquí algunos ejemplos:

     SELECT M')undades+ /S mnmo FROM peddos$

    Retorna el pedido m0s pe"ue

  • 8/17/2019 14.- Transact SQL Avanzado

    16/34

    Contar RegstrosOtra operaci2n muy com-n es realiar un recuento de re/istros 4un"ue a primera 3ista

    pueda parecer poco pr0ctico, la realidad es bien distinta KD "ui&n no le /ustara conocer

    cu0ntos pedidos se $an realiado $oy KO comprobar cu0ntos pa/os se $an realiado por

    una determinada cantidad KO saber cu0ntos clientes cumplen $oy a= /'0 =B?A?@>=$

    Retorna el total, la media, el m0imo y el mnimo de unidades pedidas, y el n-mero de

    pedidos realiados, durante el primer semestre de 8>>?

    OmsIn 0e Regstros 0uplcados

    http://www.monografias.com/trabajos/eltelefono/eltelefono.shtmlhttp://www.monografias.com/trabajos/eltelefono/eltelefono.shtml

  • 8/17/2019 14.- Transact SQL Avanzado

    17/34

    OmsIn 0e Regstros 0uplcados

    En una consulta podra ser -til omitir re/istros "ue est&n duplicados +or e1emplo,

    en nuestros pedidos $ay duplicaci2n, puesto "ue un cliente realia 3arios pedidos

    en el mismo da Dui0 necesitemos una $istoria para conocer los das y los

    clientes "ue realiaron al/-n pedido, pero no necesitaremos toda la lista, si no "ue

     nos di/a, -nicamente, mediante una lnea, "u& cliente reali2 al/-n pedido y en"u& da +ara ello, utiliaremos el predicado 5ST)CT, cuya sintais es la

    si/uiente*

    SELECT 0ST'CT lsta4campos ...

    El predicado 5ST)CT omite a"uellos re/istros duplicados en los campos

    especi%icados En el problema epuesto, utiliaremos la si/uiente sentencia*

    SELECT 0ST'CT Jcodgo clenteK%3ec

  • 8/17/2019 14.- Transact SQL Avanzado

    18/34

    rupo 0e Regstros

     4 3eces, puede ser necesario mostrar un resumen de los datos "ue

    tenemos, especi%icando el total I por e1emplo I, de los in/resos y de

    los /astos de cada da, en lu/ar de 3isualiar todos los in/resos y

    /astos realiados al detalle +ara lle3ar a cabo esta tarea $emos detener en cuenta, en primer lu/ar, ba1o "u& campo se 3an a a/rupar

    los datos #en lo epuesto, sera el campo %ec$a(, y, a continuaci2n,

    realiar la consulta mediante la cl0usula ROP+ B, cuya sintais es

    la si/uiente*

    SELECT ... FROM ... J-HERE ...K RO ; lsta4camposB0sicamente, la cl0usula RO ; a/rupa o combina re/istros con

    id&ntico 3alor en los campos especi%icados, en un -nico re/istro Esto

    si/ni%ica "ue en un s2lo re/istro se mostrar0 la in%ormaci2n com-n a

    muc$os re/istros, como si di1&semos, al terminar las cuentas* U$oy se$a in/resado tanto y se $a /astado tanto, con lo "ue $ay un bene%icio

    de tantoU, sin necesidad de especi%icar cada mo3imiento #cada

    in/reso, cada cobro, cada pa/o, cada %actura, cada trans%erencia

    bancaria, etc(

     Imaginemos que queremos hacer un resumen de nuestros pedidos, y queremos saber cu0ntos

    http://www.monografias.com/trabajos7/regi/regi.shtmlhttp://www.monografias.com/trabajos7/sisinf/sisinf.shtmlhttp://www.monografias.com/trabajos5/cuentas/cuentas.shtmlhttp://www.monografias.com/trabajos15/kinesiologia-biomecanica/kinesiologia-biomecanica.shtmlhttp://www.monografias.com/trabajos14/documenmercant/documenmercant.shtmlhttp://www.monografias.com/trabajos14/documenmercant/documenmercant.shtmlhttp://www.monografias.com/trabajos15/kinesiologia-biomecanica/kinesiologia-biomecanica.shtmlhttp://www.monografias.com/trabajos5/cuentas/cuentas.shtmlhttp://www.monografias.com/trabajos7/sisinf/sisinf.shtmlhttp://www.monografias.com/trabajos7/regi/regi.shtml

  • 8/17/2019 14.- Transact SQL Avanzado

    19/34

    pedidos y unidades han realizado cada uno de nuestros clientes. Para ello, se escribira una sentenciacomo &sta:SELECT codigo_cliente, count(codigo_cliente) AS num_pedidos, SUM(unidades) AS cantidadFROM pedidos GROU !" codigo_cliente#

      Para saber cuántos pedidos se realizaron cada día, escribiríamos esta línea:

    SELECT $ec%a, count($ec%a) AS num_pedidos FROM pedidos GROU !" $ec%a#

      +ara conocer cu0ntas unidades se pidieron cada da, tipearamos esta sentencia*SELECT 3ec>?

     +ara conocer una estadtica de pedidos diaria, utiliaremos la si/uiente sentencia*

    SELECT 3ec

  • 8/17/2019 14.- Transact SQL Avanzado

    20/34

    Las consultas realizadas hasta ahora requeran de una dosis de habilidad paraconseguir crear un conunto de datos que tu!iese in"ormaci2n combinada de dostablas. Pero, podemos combinar datos de una manera mucho m0s sencilla y e"icaz:mediante las operaciones #$I%, las cuales permiten combinar datos de dos tablas.

    La operaci2n #$I% m0s com-n es I%%&' #$I%, cuya sinta(is es:ta&la **ER +O* ta&la O*ta&la-campo_comUn.ta&la-campo_comUn)onde tabla* y tabla+ representan el nombre de las tablas a combinar. mbas tablashan de tener un campo com-n o igual para poder realizar correctamente lacombinaci2n de los datos+ero 3eamos un e1emplo para entenderlo me1or*

    SELECT & FROM peddos ''ER VO' clentes O' peddos.codgo4clente

    clentes.codgo4clente;

    El resultado ser0 un con1unto de re/istros con los datos de las dos tablas Este

    con1unto poseer0 el nombre de todos los campos de la tabla pedidos y de todos los

    campos de la tabla clientes En cada re/istro aparecer0n los datos relacionados, esdecir, "ue en un pedido aparecer0n los datos del mismo y los datos personales del

    cliente "ue reali2 el pedido

    La operaci2n ))ER =O) combina los datos de las dos tablas siempre "ue $aya

    3alores coincidentes en los campos comunes o enlaados

    &(isten tambi&n otras dos "ormas de combinar: L&- #$I% y 'I/0 #$I% mbas

  • 8/17/2019 14.- Transact SQL Avanzado

    21/34

    &(isten tambi&n otras dos "ormas de combinar: L&- #$I% y 'I/0 #$I%. mbastienen la misma sinta(is que I%%&' #$I%, pero estas operaciones incluyen todos los registros de una tabla y aquellos registros de la otra en que los campos comunes sean iguales. &n la operaci2n L&- #$I%, incluye todos los registros de la primeratabla 1par0metro tabla*2 y aquellos registros de la segunda tabla 1par0metro tabla+2en que los campos comunes sean iguales. &n la operaci2n 'I/0 #$I% ocurre locontrario: incluye todos los registros de la segunda tabla y aquellos registros de laprimera tabla en que los campos comunes sean iguales.

     unque la di"erencia entre las tres operaciones parezca ine(istente, en realidad s e(iste. La operaci2n I%%&' #$I% realiza una combinaci2n con todos aquellos

    registros de las dos tablas en que el campo com-n de ambas tenga el mismo !alor, mientras que las operaciones L&- #$I% y 'I/0 #$I% realizan la combinaci2nde todos los registros de la tabla que combinan 1ya sea la primera para L&- #$I% o la segunda para 'I/0 #$I%2, aunque en la otra tabla, en el campo com-n no hayacoincidencia. La prueba se !e r0pidamente si se introduce un c2digo de cliente en elcampo campo3cliente de la tabla pedidos que no e(ista:SELECT & FROM peddos ''ER VO' clentes O' peddos.codgo4clente clentes.codgo4clente$

     

    &l registro que contiene el pedido del cliente que no e(iste no aparece,

  • 8/17/2019 14.- Transact SQL Avanzado

    22/34

    &l registro que contiene el pedido del cliente que no e(iste no aparece,puesto que no hay coincidencia. 4i escribimos:SELECT / FROM pedidos LEFT +O* clientes O*pedidos-codigo_cliente .clientes-codigo_cliente#

    $bser!aremos que aparecen todos los registros de la tabla pedidos,incluido aquel donde indicamos que el pedido "ue solicitado por elcliente ine(istente, pero en los campos relacionados 1campos de latabla clientes2 no habr0 ning-n dato relacionado o combinado. 4iahora escribimos lo siguiente:

    SELECT / FROM pedidos LEFT +O* clientes O*pedidos-codigo_cliente .clientes-codigo_cliente# obtendremos el mismo resultado que con la operaci2n I%%&' #$I%,puesto que se !isualizan todos aquellos registros que e(isten en

    clientes y aquellos que coincidan con el campo cla!e en la tablapedidos. Como el c2digo ine(istente no e(iste en la tabla clientes, esteregistro no aparece. Para comprobar el e"ecto a-n meor, modi"icar elc2digo ine(istente en el registro de la tabla pedidos por uno que s e(ista. ras ello, !ol!er a introducir las sentencias 45L para

    comprobar la di"erencia.

    Lo más normal es utilizar la operaci6n I%%&' #$I% para omitir aquellos registros

  • 8/17/2019 14.- Transact SQL Avanzado

    23/34

    Lo más normal es utilizar la operaci6n I%%&' #$I% para omitir aquellos registrosno coincidentes, aunque las operaciones L&- #$I% y 'I/0 #$I% nos puedenser!ir para descubrir entradas err6neas en c6digos. 0eamos algunos e1emplos m,s2 

    SELECT $ec%a, codigo_p3oducto, unidades, apellidos, nom&3e FROMpedidos **ER +O* clientes O* pedidos-codigo_cliente .clientes-codigo_cliente 45ERE $ec%a67898:;7#Combina pedidos y clientes, !isualizando aquellos pedidos realizados antes del 7 de&nero de *889 por los campos "echa, codigo3producto, unidades, apellidos ynombre.

    SELECT $ec%a, unidades, p3oductos-/ FROM pedidos **ER +O*p3oductos O* pedidos-codigo_p3oducto . p3oductos-codigo_p3oducto#Combina pedidos y productos, !isualizando los pedidos por los campos "echa yunidades, y por todos los campos de la tabla productos.SELECT $ec%a, unidades, p3oductos-/ FROM pedidos **ER +O*p3oductos O* pedidos-codigo_p3oducto . p3oductos-codigo_p3oducto

    OR'ER !" $ec%a, p3oducto#&l resultado ser0 el mismo que con el anterior eemplo, sal!o que la presentaci2n delos registros se realizar0 ordenada por la "echa y el nombre del producto.

    5ML #5ata Modi%ication Lan/ua/e(

  • 8/17/2019 14.- Transact SQL Avanzado

    24/34

    5ML #5ata Modi%ication Lan/ua/e('SERT

    Pna sentencia INSERT  de SDL a/re/a uno o m0s re/istros a una #y s2lo una( tabla en una

    base de datos relacional

    Forma ",sca 'SERT 'TO ''tabla'' #''columna8'', ''columnaG, ''( P/LES #''3alor8'', ''3alorG,''(

    Las cantidades de columnas y 3alores deben ser i/uales Si una columna no se especi%ica, le

    ser0 asi/nado el 3alor por omisi2n Los 3alores especi%icados #o implcitos( por la

    sentencia )SERT deber0n satis%acer todas las restricciones aplicables Si ocurre un error de

    sintais o si al/una de las restricciones es 3iolada, no se a/re/a la %ila y se de3uel3e un error

    Ejemplo

     'SERT 'TO agenda4tele3onca )nom"re% numero+ P/LES )!Ro"erto VeldreW!%977B7+$

    nsercones en mUltples 3las

    Pna caracterstica de SDL #desde SDLI>G( es el uso de constructores de filas para insertar

    m-ltiples %ilas a la 3e, con una sola sentencia SDL*

    'SERT 'TO ''tabla'' #''columna8'', ''columnaG, ''(

    P/LES #''3alor8a'', ''3alor8b,''(, #''3alueGa'', ''3alueGb,''(,Esta caracterstica es soportada por 5BG, +ost/reSDL #desde la 3ersi2n 9G(, MySDL, y !G

    E1emplo #asumiendo "ue 'nombre' y 'n-mero' son las -nicas columnas en la tabla

    'a/endaJtele%onica'(*

    'SERT 'TO agenda4tele3onca P/LES )!Ro"erto Fern,ndeW!% !977B7!+% )!/lejandro

    Sosa!% !9B!+$

    ISERT ITO :2ND2D5R (C5D:2N4

  • 8/17/2019 14.- Transact SQL Avanzado

    25/34

    ISERT ITO :2ND2D5R (C5D:2N4N5':2N)

    )(L$ES (H4 I$ABL5 'AR'5LI)J

    ISERT ITO B2B7DAS (C5DB2B4 N5'B2B4$R2B2B4 C5D2N:4 CANB2B4 ST5C94

    C5DTB2))(L$ES (K4 IB7L 8 $A$I4 M**4 M4 4 K**4M)J

    0/TE

    P t i UPDATE d SDL tili d di%i l l d 1 t d

  • 8/17/2019 14.- Transact SQL Avanzado

    26/34

    Pna sentencia UPDATE  de SDL es utiliada para modi%icar los 3alores de un con1unto de

    re/istros eistentes en una tabla

    El len/ua1e SDL nos permite solucionar este problema en cuesti2n de pocos se/undos, ya

    "ue posee una sentencia llamada Ppdate, "ue se ocupa de los c0lculos y reemplaos Su

    sintais es la si/uiente*

    0/TE lsta4ta"las SET camponue1o41alor J%camponue1o41alorK J-HERE...K

     0/TE ;E;0/S

      SET RE;E; 6

      -HERE CO0;E; 6

     0/TE ;E;0/S  SET RE;E; @

      -HERE 'OM;E; !F/'T/2 ma/inemos por un momento "ue el precio de los productos $a subido un 8HV, y "ue

    tenemos "ue actualiar nuestra tabla de productos con el nue3o importe

    0/TE productos SET p1cp1c&6.6

    La sentencia P+54TE es muy 3ers0til y potente, por lo "ue podemos realiar reemplaoscondicionantes, ya "ue permite la cl0usula .!ERE 5e ello se deduce "ue I por e1emplo I, si

    se desea ba1ar un 8HV el importe del se/uro a a"uellos ase/urados "ue cumplan m0s de

    dos a

  • 8/17/2019 14.- Transact SQL Avanzado

    27/34

    KDui&n no $a sentido la necesidad de eliminar de un /olpe un /rupo de re/istros en com-n,

    en lu/ar de $acerlo uno por uno Esta operaci2n puede ser muc$o m0s $abitual de lo "ue

    parece en un principio y, por ello, el len/ua1e SDL nos permitir0 eliminar re/istros "ue

    cumplan las condiciones o criterios "ue nosotros le indi"uemos a tra3&s de la sentencia

    5ELETE, cuya sintais es la si/uiente*

    'ELETE FROM ta&las 45ERE c3ite3iosPna sentencia DELETE  de SDL borra uno o m0s re/istros eistentes en una tabla 0ELETE

      FROM QE)5E5OR

      -HERE CO5QE) W :

    55L #5ata 5e%inition Lan/ua/e(

  • 8/17/2019 14.- Transact SQL Avanzado

    28/34

    # / / (

    Create Ta"le: Crea una tabla

    CRE4TE T4BLE nombre Tabla 

    #nombreJcampo8 TipoJdeJ3ariable  #tama

  • 8/17/2019 14.- Transact SQL Avanzado

    29/34

    CRE4TE T4BLE nombre Tabla

     4S

      SELECT #Sentencia SDL(;E1emplo

    CRE4TE T4BLE CopiaJClientes

     4S

      SELECT [ FROM Clientes .!ERE Modi% W 8;

    Esto, lo "ue realia, es una Select y el resultado de la misma se inserta como una

    tabla nue3a 

    /lter Ta"le* Esta instrucci2n 55L se suele utiliar para cambiar caractersticas de

  • 8/17/2019 14.- Transact SQL Avanzado

    30/34

    las tablas, como pueden ser insertar campos, modi%icar campos, a

  • 8/17/2019 14.- Transact SQL Avanzado

    31/34

    necesario "ue en la tabla re%erenciada est& de%inida la +rimary Xey, por"ue la relaci2n se crea entre la

    +rimary Xey de la tabla re%erenciada y las columnas "ue indicamos en la cl0usula Forei/n Xey

       4LTER T4BLE )ombre Tabla

       455 CO)STR4)T )ombreJRestricci2n

      FORE) XE #)ombre de Campo8, )ombre de Campo G, etc(  REFERE)CES Tabla Re%erenciada;

    E1emplo

       4LTER T4BLE Cliente

       455 CO)STR4)T %YJCodi/oJCliente

      FORE) XE #ClJCliente(

      REFERE)CES )ominas;

    /Xadr Campo 'ue1o a Ta"la* Sir3e para a

  • 8/17/2019 14.- Transact SQL Avanzado

    32/34

     4LTER T4BLE )ombre Tabla

      MO5F )ombreJCampo )ue3asJCondiciones

    )o se pueden borrar ni modi%icar nombres de columnas ya eistentes S2lo se pueden modi%icar las

    3ariables de tipo car0cter a otras 3ariables de tipo car0cter si toda la columna est0 compuesta de )PLL,

    pero s est0 permitido aumentar el tama

  • 8/17/2019 14.- Transact SQL Avanzado

    33/34

     4LTER T4BLE )ombre Tabla

       455 CO)STR4)T CXJ)ombreTablaJ)ombreCampo

      C!ECX #Condici2n(;

    E1emplo*

     4LTER T4BLE Curso

       455 CO)STR4)T CXJCursoJ+reCurso

      C!ECX # +recurso \ H (;

    /lter Constrant * En muc$os casos debemos /arantiar "ue los 3alores de una columna o con1unto

    de columnas de una tabla acepten s2lo 3alores -nicos

     4LTER CO)STR4)T )ombre Tabla

       455 CO)STR4)T )ombre Restricci2n

      P)DPE #)ombre Campo 8, )ombre Campo G, etc(;

    E1emplo

     4LTER T4BLE 4lumno

       455 CO)STR4)T PJ4lumnoJ)om4lumno

      P)DPE #)om4lumno(;

    0rop: Este comando se utilia para eliminar ob1etos de nuestra base de datos Se sueleutiliar la palabra 5rop, a continuaci2n el nombre del ob1eto "ue se desea eliminar #por

  • 8/17/2019 14.- Transact SQL Avanzado

    34/34

    p p, 1 " #p

    e1emplo, Table( y por -ltimo, el nombre de dic$o ob1eto #Clientes( Qeamos al/unos e1emplos*

    5RO+ )ombreJOb1eto )ombreJElemento C4SC45E CO)STR4)TS;

    Si se borra una tabla, se borran, a su 3e, los ndices a ella asociados, 3istas, 3istas creadasa partir de dic$as 3istas, etc

    Si se borra una tabla a la "ue otras $acen re%erencia en cla3es eternas $abr0 "ue incluir la

    cl0usula C4SC45E CO)STR4)T

    E1emplos*

    5RO+ T4BLE Clientes

    5RO+ QE. n%ormeJClientesJ3]

    5RO+ )5E pYJCodi/oJCliente