introduccion_lenguajesql

20
Iniciación al Lenguaje SQL El lenguaje SQL SQL es una herramienta para organizar, gestionar y recuperar datos almacenados en una base de datos informática. El nombre "SQL" es una abreviatura de Structured Query Languaje (Lenguaje de consultas estructurado). Como su propio nombre indica, SQL es un lenguaje informático que se puede utilizar para interaccionar con una base de datos y más concretamente con un tipo especifico llamado base de datos relacional. SQL es a la vez un lenguaje fácil de aprender y una herramienta completa para gestionar datos. Las peticiones sobre los datos se expresan mediante sentencias, que deben escribirse de acuerdo con unas reglas sintácticas y semánticas de este lenguaje. Su aprendizaje no solo sirve para esta aplicación sino , también, para todas las existentes en el mercado que soporten este lenguaje ya que es un lenguaje estándar por haberse visto consolidado por el Instituto Americano de Normas (ANSI) y por la Organización de Estándares Internacional (ISO). La información aquí resumida del lenguaje puede ser ampliada con multitud de libros existentes en el mercado, todos con las siglas "SQL". El SQL que se utilizará en esta aplicación cumple estrictamente con las especificaciones de Microsoft ® Open Database Connectivity (ODBC) y a continuación se podrán ver las características propias para el acceso a ficheros en el formato Paradox ® de Borland. Notación empleada en los formatos MAYÚSCULAS Las palabras que figuren en el formato en mayúsculas se escribirán en la sentencia igual que se escriben en el formato. Minúscula cursiva Estas palabras deberán ser sustituidas en la sentencia por nombres o palabras elegidas por el usuario de acuerdo con las descripciones que se den en cada caso Barra vertical | Indicará la elección de una de las opciones que este separando. O una u otra no ambas. Corchetes [] Encerrarán elementos opciones de la sentencia que pueden cogerse o no dependiendo del usuario. Llaves {} Encerrarán elementos obligatorios de la sentencia que siempre deberán de ser especificados. Sentencias de selección o consultas Las consultas son el corazón del lenguaje SQL. La sentencia SELECT, que se utiliza para expresar consultas en SQL, es la más potente y compleja de las sentencias SQL. La sentencia SELECT recupera datos de una base de datos y los devuelve en forma de resultados de la consulta. Consta de seis cláusulas: las dos primeras (SELECT y FROM) obligatorias y las otras cuatro opcionales. La forma de la sentencia SELECT soportada por Paradox ® es: SELECT [DISTINCT] {* | expresión_columna, ...} FROM nombretabla [ alias_tabla] ... [WHERE expresión1 operador expresion2] [GROUP BY {expresión_columna, ...} ] [HAVING {condición} ] [UNION [ALL] (SELECT

Upload: irma-fernandez

Post on 09-Sep-2015

216 views

Category:

Documents


2 download

DESCRIPTION

SIG

TRANSCRIPT

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 1/20

    IniciacinalLenguajeSQL

    EllenguajeSQL

    SQLesunaherramientaparaorganizar,gestionaryrecuperardatosalmacenadosenunabasededatosinformtica.Elnombre"SQL"esunaabreviaturadeStructuredQueryLanguaje(Lenguajedeconsultasestructurado).Comosupropionombreindica,SQLesunlenguajeinformticoquesepuedeutilizarparainteraccionarconunabasededatosymsconcretamenteconuntipoespecificollamadobasededatosrelacional.

    SQLesalavezunlenguajefcildeaprenderyunaherramientacompletaparagestionardatos.Laspeticionessobrelosdatosseexpresanmediantesentencias,quedebenescribirsedeacuerdoconunasreglassintcticasysemnticasdeestelenguaje.

    Suaprendizajenosolosirveparaestaaplicacinsino,tambin,paratodaslasexistentesenelmercadoquesoportenestelenguajeyaqueesunlenguajeestndarporhabersevistoconsolidadoporelInstitutoAmericanodeNormas(ANSI)yporlaOrganizacindeEstndaresInternacional(ISO).

    Lainformacinaquresumidadellenguajepuedeserampliadaconmultituddelibrosexistentesenelmercado,todosconlassiglas"SQL".

    ElSQLqueseutilizarenestaaplicacincumpleestrictamenteconlasespecificacionesdeMicrosoftOpenDatabaseConnectivity(ODBC)yacontinuacinsepodrnverlascaractersticaspropiasparaelaccesoaficherosenelformatoParadoxdeBorland.

    Notacinempleadaenlosformatos

    MAYSCULASLaspalabrasquefigurenenelformatoenmaysculasseescribirnenlasentenciaigualqueseescribenenelformato.

    MinsculacursivaEstaspalabrasdebernsersustituidasenlasentenciapornombresopalabraselegidasporelusuariodeacuerdoconlasdescripcionesquesedenencadacaso

    Barravertical|Indicarlaeleccindeunadelasopcionesqueesteseparando.Ounauotranoambas.

    Corchetes[]Encerrarnelementosopcionesdelasentenciaquepuedencogerseonodependiendodelusuario.

    Llaves{}Encerrarnelementosobligatoriosdelasentenciaquesiempredeberndeserespecificados.

    Sentenciasdeseleccinoconsultas

    LasconsultassonelcorazndellenguajeSQL.LasentenciaSELECT,queseutilizaparaexpresarconsultasenSQL,eslamspotenteycomplejadelassentenciasSQL.

    LasentenciaSELECTrecuperadatosdeunabasededatosylosdevuelveenformaderesultadosdelaconsulta.Constadeseisclusulas:lasdosprimeras(SELECTyFROM)obligatoriasylasotrascuatroopcionales.

    LaformadelasentenciaSELECTsoportadaporParadoxes:

    SELECT[DISTINCT]{*|expresin_columna,...}FROMnombretabla[alias_tabla]...[WHEREexpresin1operadorexpresion2][GROUPBY{expresin_columna,...}][HAVING{condicin}][UNION[ALL](SELECT

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 2/20

    ...)][ORDERBY{expresin_orden[DESC|ASC],...]

    ClusulaSELECT

    LaclusulaSELECTlistalosdatosarecuperarporlasentenciaSELECT.LoselementosodatosaseleccionarpuedensercolumnasdelabasededatosocolumnasacalcularporSQLcuandoefectalaconsultaotambinelasterisco(*)pararecuperartodosloscamposdeunficherootabla.

    expresin_columnapuedeserunsimplenombredecampo(porejemploMATRICULA).Expresionesmscomplejaspuedenincluiroperacionesmatemticasodemanipulacindecaracteres(porejemploAPELLIDOS+,+NOMBRE).Masadelantesevernestasexpresionesdeformamsamplia.

    Lasexpresionesdecolumnasdebenirseparadasporcomassiexistenmsdeuna(porejemploAPELLIDOS,NOMBRE,DNI,DOMICILIO).

    Losnombresdecampospuedenirprecedidosporelnombredelatablaosualias.PorejemploALUMNOS.MATRICULAoA.MATRICULAdondeAeselaliasparalatablaoficheroALUMNOS.

    EloperadorDISTINCT,siseincluye,debeprecederlaprimeraexpresindecolumna.Esteoperadoreliminalasfilasoregistrosduplicadosdelresultadodelaconsulta.Porejemplolasentencia:

    SELECTDISTINCTPROVINCIAFROMALUMNOS

    mostrarlasdistintasprovinciasdelasqueprocedenlosalumnosdelCentro.

    Funcionesdeagrupamiento

    LasfuncionesdeagrupamientopuedensertambinpartedeunaclusulaSELECT.Devuelvenunnicovalordeunconjuntoderegistros.Puedenusarseconunnombredecampo(porejemplo,AVG(NUMERO_DE_HERMANOS)oencombinacinconunaexpresindecolumnamscompleja(porejemplo,AVG(NUMERO_DE_HERMANOS*1.07)).LaexpresindecolumnapuedeirprecedidaporeloperadorDISTINCT.EloperadorDISTINCTeliminarlosvaloresrepetidosdeunaexpresindeagrupamiento.Porejemplo,

    SELECTCOUNT(DISTINCTLOCALIDAD)FROMALUMNOS

    Enesteejemplo,sloaparecernelndelasdistintaslocalidadesdonderesidenlosalumnos.

    Lasfuncionesdeagrupamientopermitidasson:

    SUMDevuelvelasumatotaldelosvaloresdeunaexpresindecolumnaocamponumrica.Porejemplo,SUM(NUMERO_DE_HERMANOS)devolvereltotaldehermanosdelosalumnosdelCentro.

    AVGDevuelvelamediadelosvaloresdeunaexpresindecolumna.Porejemplo,

    AVG(NUMERO_DE_HERMANOS)

    devolverlamediadehermanosqueposeeelalumnadodelcentro.

    COUNTDevuelveelnmerodevaloresenunaexpresindecolumna.Porejemplo,COUNT(MATRICULA)devolverelnmeroderegistrosconvaloresnonulosenesecampo.COUNT(PAIS)nosdirelnmerodealumnosqueenelcampopastienealgunainformacinynoestablanco.UnejemploespecialesCOUNT(*),quenosdevuelveelnmeroderegistrosincluyendoaquellosregistrosconvaloresnulos.

    MAXDevuelveelvalormsaltodeloscontenidosenunaexpresindecolumna.Porejemplo,MAX(MATRICULA)

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 3/20

    devolverelndematrculamaselevadoqueexisteenelficherodealumnos.

    MINDevuelveelvalormsbajodeloscontenidosenunaexpresindecolumna.Porejemplo,SELECTMIN(FECHA_NACIMIENTO)FROMALUMNOSnosdevolverlafechadenacimientodelalumnomasviejodelcentro.

    ClusulaFROM

    LaclusulaFROMlistalastablasoficherosquecontienenlosdatosarecuperarporlaconsulta.Elformatodeestaclusulaes:

    FROMnombretabla[alias_tabla]...

    nombretablapuedeserunaomasnombresdetablaeneldirectoriodetrabajosiseomiteeste,oenundirectoriodistintosiseespecifica.

    alias_tablaesunnombrequeseusaparareferirsealatablaenelrestodelasentenciaSELECTparaabreviarelnombreoriginalyhacerlomsmanejable,enelcasodeexistirmsdeunatablaenlaconsultay,tambinparapoderrealizarconsultasuniendovariasveceslamismatabla.Porejemplo,

    SELECTA.NOMBRE,A.APELLIDOSFROMMATRICULM,ALUMNOSAWHEREM.MATRICULA=A.MATRICULAANDM.GRUPO=1AANDANNO=1995

    esmuchomsprcticoysencilloque:

    SELECTALUMNOS.NOMBRE,ALUMNOS.APELLIDOSFROMMATRICUL,ALUMNOSWHEREMATRICUL.MATRICULA=ALUMNO.MATRICULAANDMATRICUL.GRUPO=1AANDANNO=1995

    Lasdossentenciassonidnticasynosdevolveranlosnombresyapellidosdelalumnadomatriculadoenelao1995yquefiguranenelgrupo1A.Elnombredetablasjuntoalnombredecampoesobligatoriocuandoexistancamposconnombreidnticoenlastablasqueformenpartedelasentencia.AsenelejemploanteriorNOMBREyAPELLIDOSnolonecesitaran(aunqueestepuesto)peroMATRICULAsilonecesitaporqueenlasdostablasexisteuncampoconesenombre.

    Sinosepudierautilizaralias,nosepodraunirunatablaconsigomismaylasiguienteconsultanosepodrallevaracabo:

    SELECTA.NOMBRE,A.APELLIDOS,H.NOMBREFROMALUMNOSA,ALUMNOSHWHEREA.PADRE=H.PADRE

    quenosdevolverelnombredeaquellosalumnos/asquetienenelmismopadre,esdecir,sonhermanos.

    ClusulaWHERE

    LaclusulaWHEREdiceaSQLqueincluyasolociertasfilasoregistrosdedatosenlosresultadosdelaconsulta,esdecir,quetienenquecumplirlosregistrosquesedeseanver.LaclusulaWHEREcontienecondicionesenlaforma:

    WHEREexpresin1operadorexpresion2

    expresin1yexpresion2puedensernombresdecampos,valoresconstantesoexpresiones.

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 4/20

    operadoresunoperadorrelacionalqueunedosexpresiones.Mstardesevernlosdistintosoperadoresquesepuedeutilizar.

    Porejemplo,lasiguientesentencianosmuestraelndealumnosquehannacidoconposterioridada1985.

    SELECTCOUNT(*)FROMALUMNOSWHEREYEAR(FECHA_NACIMIENTO)>1985

    ClusulaGROUPBY

    LaclusulaGROUPBYespecificaunaconsultasumaria.Envezdeproducirunfiladeresultadosporcadafiladedatosdelabasededatos,unaconsultasumariaagrupatodaslasfilassimilaresyluegoproduceunafilasumariaderesultadosparacadagrupo.

    SeguidodelaclusulaGROUPBYseespecificanlosnombresdeunoomscamposcuyosresultadossedeseanagrupados.Tienelaforma:

    GROUPBYexpresin_columna

    expresin_columnadebecoincidirconlaexpresindecolumnautilizadaenlaclusulaSELECT.Puedeserunoomsnombresdecampodeunatabla,separadosporcomaounaomsexpresionesseparadasporcomas.Elsiguienteejemplonosdicecuantosalumnosestnmatriculadosencadagrupoenelao1995:

    SELECTGRUPO,COUNT(*)FROMMATRICULWHEREANNO=1995GROUPBYGRUPO

    Estasentencianosdevolverunafilaporcadagrupodealumnos.Cadaunadeellascontendrelgrupoyelndealumnosenl.

    ClusulaHAVING

    LaclusulaHAVINGdiceaSQLqueincluyasolociertosgruposproducidosporlaclusulaGROUPBYenlosresultadosdelaconsulta.AligualquelaclusulaWHERE,utilizaunacondicindebsquedaparaespecificarlosgruposdeseados.Enotraspalabras,especificalacondicinquedebendecumplirlosgrupos.SloesvlidasipreviamentesehaespecificadolaclusulaGROUPBY.LaclusulaHAVINGtienelaforma:

    HAVINGexpresin1operadorexpresin2

    expresin1yexpresin2puedensernombresdecampos,valoresconstantesoexpresionesyestasnodebencoincidirconunaexpresindecolumnaenlaclusulaSELECT.

    operadoresunoperadorrelacionalqueunelasdosexpresiones.Mstardesevernlosdistintosoperadoresquesepuedeutilizar.

    Lasentenciasiguientenosmostrarelnmerodealumnosencadagrupode1995cuyonumerodeintegrantessuperalos30:

    SELECTGRUPO,COUNT(*)FROMMATRICULWHEREANNO=1995GROUPBYGRUPOHAVINGCOUNT(*)>30

    OperadorUNION

    EloperadorUNIONcombinaelresultadodedossentenciasSELECTenunnicoresultado.Esteresultadosecomponedetodoslosregistrosdevueltosenambassentencias.Pordefecto,losregistrosrepetidosseomiten.Para

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 5/20

    noquitarlosseemplearlapalabraALL.Tienelaforma:

    SELECTsentenciaUNION[ALL]SELECTsentencia

    CuandoseutiliceeloperadorUNION,lalistadeseleccinparacadasentenciaSELECTdebetenerelmismonmerodeexpresionesdecolumnasconelmismotipodedatosyenelmismoorden.Porejemplo,

    SELECTAPELLIDOS,NOMBREFROMALUMNOSUNIONSELECTAPELLIDOS,NOMBREFROMPROFESORUNIONSELECTAPELLIDOS,NOMBREFROMPERSONAL

    Esteejemplotieneelmismondecolumnasycadacolumnaenordenconelmismotipodedatos.Nosdevolverunalistanicadealumnos,profesoresypersonalnodocente.

    ClusulaORDERBY

    LaclusulaORDERBYordenalosresultadosdelaconsultaenbasealosdatosdeunaomscolumnas.Siseomite,losresultadossaldrnordenadosporelprimercampoqueseaclaveenelndicequesehayautilizado.

    Portanto,indicacomodebenclasificarselosregistrosqueseseleccionen.Tienelaforma:

    ORDERBY{expresin_orden[DESC|ASC],...]

    expresin_ordenpuedeserelnombredeuncampo,expresinoelnmerodeposicinqueocupalaexpresindecolumnaenlaclusulaSELECT.PordefectoseordenanASCendentemente(demenoramayor).SisedeseardemayoramenorseemplearDESC(DESCendente).Porejemplo,paramostrarlosalumnosordenadosdemayoredadamenor,seutilizara:

    SELECTNOMBRE,APELLIDOSFROMALUMNOSORDERBYFECHA_NACIMIENTODESC

    Paraobtenerunlistadodealumnosporsulugardenacimientoordenadoporprovinciasydentrodecadaprovinciaordenadosporlocalidadesseutilizara:

    SELECTNOMBRE++APELLIDOS,LOCALIDAD_NACIMIENTO,PROVINCIA_NACIMIENTOFROMALUMNOSORDERBYPROVINCIA,LOCALIDAD

    olomismodeotraforma

    SELECTNOMBRE++APELLIDOS,LOCALIDAD_NACIMIENTO,PROVINCIA_NACIMIENTOFROMALUMNOSORDERBY3,2

    EnlacedevariasTablasoficheros

    Losejemplosvistohastaelmomentosoloextraendatosdeunanicatablaypocascosaspodramoshacersinopudiramosinterrelacionarvariosficherosparaobtenerlasconsultasquedeseramos.

    LaBasedeDatosdeIES2000esunaBasedeDatosRelacionaly,sellamadeestaforma,porlasdistintasrelacionesqueexistenentrelosdistintosficherosotablasquemaneja.

    Enenlaceorelacindedostablaspararealizarunaconsulta,seconoceconeltrminodeJOIN.ParaexpresarestetrminovamosautilizarunejemploqueseutilizamuyamenudoentodaslasconsultasdeGEIWIN:DeseamosunlistadoalfabticoconlosNombresyApellidosdetodoslosalumnosqueestnmatriculados,deformaOficial,actualmenteenelcentro.

    ElficherodeALUMNOScontienetodoslosdatosgeneralesdelalumnado,entreellosNombreyApellidos,yel

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 6/20

    ficheroMATRICULlosdistintosdatosdelasdiferentesmatrculasdecadaunodeellos,entreelloselaoytipodelamatrcula.

    Paraextraerlosdatosdeseadosdeberemosdebuscaruncampoquecontengainformacincomnenlosdosficheros,esdecir,aquelporelqueestnrelacionadosambos.Estecampoeselndeexpedientedelalumno,quedalacasualidadquetieneelmismonombreenlosdosficheros:MATRICULAyserestecampoelquenossirvaparaefectuarelJOIN:

    SELECTAPELLIDOS,NOMBREFROMMATRICUL,ALUMNOSWHEREMATRICUL.MATRICULA=ALUMNOS.MATRICULAANDANNO=1996ANDTIPO=OORDERBYAPELLIDOS,NOMBRE

    ElJoinseindicaenlaclusulaWHEREcomootracondicinms,enestecaso,elndeexpedienteenlosdosficherodebeexistiry,sinoesas,elalumno/anoaparecerenlarelacin,aunquefigureenunodeellos.

    AliasdelasTablas

    Losaliassonuninstrumentoparaabreviarlosnombresdelastablasoficherosypoderreferirseaellosentodalasentencia.Enelejemploanteriorpodramosemplearaliasdelasiguienteforma:

    SELECTAPELLIDOS,NOMBREFROMMATRICULM,ALUMNOSAWHEREM.MATRICULA=A.MATRICULAANDANNO=1996ANDTIPO=OORDERBYAPELLIDOS,NOMBRE

    Loscamposquetienennombrenicoenlassentenciasnonecesitanirprecedidosporelnombredelatablaosualias.EnelejemploANNOyTIPOsoloexistenenelficheroMATRICULyporesaraznnoseleshaprecedidoporMATRICULosualiasM.

    OrdendelastablasenlaclusulaFROM

    EspecialmencinmereceelordendeenumeracindelastablasenlaclusulaFROM.ElGestordeSQL,cuandoexisteunJOINentredostablas,recorrelatablaquefiguraenprimerlugar,yporcadaregistroqueencuentraquesatisfaceelrestoderestricciones,compruebasiexistecorrespondenciaenlaotratabla.

    Pongamosunejemploprctico:SitenemosenelficherodeALUMNOS5000registrosyenelficheroMATRICUL15000,deloscualessolo1000sondelao1996ydeltipooficial,elGestorrealiza1000lecturasdelficheroMATRICULy1000msdeALUMNOS.Silosenumerramosalrevs,serealizaran5000lecturasdeALUMNOSy5000msdeMATRICUL.

    Enlacedetablassinequivalenciaporladerecha(JoinRightOuter)

    Porlogeneralefectuaremosenlacesdetablasconelsignodeigualdad(JoinEqual),peroexistirnconsultasenlasquedesearemosquenosdevuelvalosregistrosnulosdelatablaquenotengacorrespondenciaenlaotra.Porejemplo,sideseamosunarelacindetodaslasmateriasconelnombredeldepartamentoquelasimpartetendramosqueescribirlasentencia:

    SELECTM.NOMBRE,D.NOMBREFROMMATERIASM,DEPARTADWHEREM.DEPARTAMENTO=D.CLAVE

    Deestaformasolonosapareceranenlarelacinlasmateriasquetienenasignadodepartamentoquelasimparta.Siquisiramosqueaparecierantodasylasquenotengandepartamentoasignadoqueaparecieraelnombredestevaco,cambiaramoselsigno=por*=

    SELECTM.NOMBRE,D.NOMBREFROMMATERIASM,DEPARTADWHEREM.DEPARTAMENTO

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 7/20

    *=D.CLAVE

    Enlacedemsdedostablas

    ElGestordeSQLpuedeunirmuchastablasenunanicasentencia,paraellodebemosefectuarelJoinentretodasellasydelaformamsptimaposibleparaqueeltiempoderespuestaseamnimo.

    SELECTA.APELLIDOS+''+A.NOMBRE,S.ABREVIATURA1FROMMATRICULM,NOTASN,ALUMNOSA,[email protected]='@Grupo'ANDM.MATRICULA=N.MATRICULAANDN.MATERIA=S.MATERIAANDN.ANNO=M.ANNOANDN.EVALUACION='F'

    LasentenciapermitirextraerelnombreyapellidosdecadaunodelosalumnosdelGrupoqueindiquemoscuandonosseasolicitadojuntoconcadaunadelasmateriasquecursanenelaoactual.

    Enlasentenciasehanunido4ficherootablas:Matriculas,Notas,AlumnosyMaterias,pueselnombreyapellidosdelalumnoestnenelficheroAlumnosylaabreviaturadelasmateriasestnenelficheroMateriaselficheroMatriculasesnecesarioparasaberquealumnostienenmatrculaenelcursoactualysondelgrupoelegido,yelficheroNotascontienecadaunadelasmateriasquecursaelalumnado,siempreconlaevaluacinFinal.

    Tabulacinderesultados

    ElGestordeSQLsiempregeneraunasalidaplana,esdecir,unaseriedefilasconunaseriedecolumnas.Peroexistirnlistadosquesernmuchomslegiblessilainformacinserepresentacomounatabladedatos.Enelejemploanteriorelresultadotendrunregistroporcadamateriaquecurseelalumno,ysunombrefigurarrepetidoencadaunodeellosconunamateriadiferente.

    Paramostrarlosresultadoscomounaespeciedeactillaenlaqueserefleje,porcadaregistro,elnombredelalumnoytodaslasmateriasacursar,procederemosdelasiguienteforma:

    UnavezquetenemoselresultadodelaconsultaenpantallapresionaremoselbotnElegiremos,enestecaso,elTipo2presionandoendichobotnylaaplicacinharelresto.

    SELECTanidadas

    PuedenexistirconsultasalaBasedeDatosquerequieranunarestriccinqueseaelresultadodeotraconsulta.

    Porejemplo:Deseamossabercuantasmateriasposeeelltimocursodeunosdeterminadosestudios.MedianteCOUNT(Materia)puedosabercuantasperolacondicindelltimocursosolosepuedesaberdespusdeejecutarunasentenciaconMAX(Curso)delficheroPLANES

    Cuandoestoseproducepodemosactuardedosformas:

    Laprimeraefectuandolaconsultaquegeneralarestriccinyposteriormente,realizarlasentenciaconelresultadodelarestriccincalculada:

    SELECTMAX(CURSO)FROMPLANESWHEREESTUDIO='@Estudio

    Si,porejemplo,elvalormximonosdevuelve3,entoncesrealizaramoslasentenciadefinitivacon:

    SELECTCOUNT(MATERIA)FROMPLANESWHEREESTUDIO='@Estudio'ANDCURSO=3

    Lasegundaformaesmscomplejaperomuchomsprctica.Lasentenciaquegeneralarestriccincomplejaseanidadentrodelaprincipalencerrndolaentreparntesis:

    SELECTCOUNT(MATERIA)FROMPLANESWHEREESTUDIO='@Estudio'ANDCURSO=

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 8/20

    (SELECTMAX(CURSO)FROMPLANESWHEREESTUDIO='@Estudio')

    LassentenciasSELECTanidadasseutilizanconmuchafrecuenciaalahoradeActualizaroBorrarregistrosdeunatablaquerequierancondicionesorestriccionesenlasqueestnimplicadasotrastablasdistintasdelaquesevaaactualizaroborrar.

    ExpresionesSQL

    LasexpresionesseutilizanenlasclusulasWHERE,HAVINGyORDERBYdelassentenciasSELECT.

    Lasexpresionesnospermitenutilizaroperacionesmatemticascomotambincadenasdecaracteresyoperadoresdemanipulacindefechasparaconstruirconsultascomplejas.

    Loselementosquecomponeslasexpresionesson:

    NombresdecamposOperadoresnumricosOperadoresdefechasOperadoreslgicosConstantesOperadoresdecaracteresOperadoresderelacinFunciones

    Nombresdecampos

    Lasexpresionesmscomunessonlosnombresdecampos.Sepuedencombinarconotroselementosdelasexpresiones

    Constantes

    Lasconstantessonvaloresquenocambian.Porejemplo,enlaexpresinFECHA_NACIMIENTO+30,elvalor30esunaconstanteyFECHANACIMIENTOesunnombredecampo.

    Lasconstantesdecaracteressedebenencerrarconunacomillasimple()ounadoble(").Paraqueunacomillasimpleodobleaparezcaenunaconstanteseponedoble.(Porejemplo,silaconstantedeseadaesODonneldeberfigurarcomoODonnel.

    Lasconstantesdefechasdebernestarencerradasentrellaves({}),porejemplo,{01/30/89}representalafecha30deEnerode1989.ElformatodelasfechasesMM/DD/YYoMM/DD/YYYY(MM=mes,DD=dayYY=Ao).

    OperadoresNumricos

    Pararealizaroperacionesnumricassepuedeutilizarlosoperadores:

    operadorsignificado

    +Suma

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 9/20

    Resta*Multiplicacin/Divisin**o^Exponenciacin

    Operadoresdecaracteres

    Lasexpresionesdecaracterespuedenincluirlossiguientesoperadores:

    operadorsignificado

    +ConcatenacinmanteniendoespaciosenblancoConcatenacinmoviendolosblancosalfinal

    Siporejemplo,NOMBREcontieneAntonioyAPELLIDOSRodrguez

    ejemplo

    Valorresultado

    NOMBRE+APELLIDOSAntonioRodrguez

    NOMBREAPELLIDOSAntonioRodrguez

    Operadoresdefechas

    Lasexpresionesdecaracterespuedenincluirlossiguientesoperadores:

    operadorsignificado

    +Aadeunnmerodedasaunafechaparaproducirunanuevafecha.

    Elnmerodedasentredosfechasolarestadeunnmerodedasdesdeunafechaparaproducirunanuevafecha.

    EjemploValordevuelto

    {01/30/90}+5{02/04/90}(recuerdeMM/DD/YY)

    {01/30/90}{01/01/90}29

    {01/30/90}10{01/20/90}

    Operadoresderelacin

    Losoperadoresderelacinquepuedenseparardosexpresionespuedensercualquieradelossiguientes:

    OperadorSignificado

    =IgualaDistintode

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 10/20

    >Mayorque>=Mayoroigualque=.=AnyesequivalenteaIn.AllComparaunvalorconcadavalordevueltoporunasubconsultaretornandociertositodoselloscumplenlacondicin.Alldebeirprecedidode=,,,>=o>=.

    Ejemplosqueutilizanoperadoresderelacin:

    evaluacion=F

    Fecha_matricula>={10/01/95}

    ApellidosLIKERodri%

    GrupoISNULL

    AnnoBETWEEN1985AND1995

    WHEREM.ESTUDIOS=ANY(SELECTESTUDIOFROMESTUDIOSWHERENIVEL=1)

    WHERENOTA>ALL(SELECTNOTAFROMCALIFICAWHEREVALOR1>4)

    COMPARACIONDECADENASDECARACTERES:

    [NOT]LIKE

    Likepermiteutilizarlossiguientescaracteresespecialesenlascadenasdecomparacin:

    %comodnparaseleccionarcualquiercadenade0omscaracteres

    _comodnparaseleccionarcualquiercarcter

    Lasmaysculasyminsculassonsignificativas.

    Ejemplo:LIKE'MART%'cualquiercadenaqueempiececonMART...

    OperadoresLgicos

    Dosomscondicionespuedensercombinadasparaformarexpresionesmscomplejascondistintoscriterios.CuandoexistendosomscondicionesdebernestarunidasporANDoOR.Porejemplo,

    ANNO=1995ANDCURSO=2

    debendecumplirselasdoscondicionesparaqueseaciertalacondicintotal.

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 11/20

    SEXO=VORPAISISNOTNULL

    Bastaconqueunadelasdosseaciertaparaquelosealacondicintotal.

    EloperadorlgicoNOTestilparaponeralcontrariounacondicin.Porejemplo:

    NOT(ANNO=1995ANDCURSO=2)

    Prioridaddelosoperadores

    Enexpresionesconmasdeunacondicinelordenenelqueseevalanesmuyimportante.Lasiguientetablamuestraelordenenelquesonevaluadoslosoperadores.Losoperadoresquefiguranenlaprimeralneaseevalalosprimeros,luegolosdelasegundayassucesivamente.Losoperadoresquefigurenenlamismalneaseevalandeizquierdaaderechasegnaparezcanenlaexpresin.

    prioridadoperador

    1unario,+unario2**o^3*,/4+,5=,,,>=,>=,Like,NotLike,IsNull,IsNotNull,Between,In,Exists,Any,All6NOT7AND8OR

    Elsiguienteejemplomuestralaimportanciadelaprioridaddelosoperadores:

    WHERESEXO=VORFECHA_NACIMIENTO>{3/30/1970}ANDMATRICULA>4000

    YaqueelANDseevalaprimero,estaconsultanosdevuelveaquellosalumnosconndematriculamayorque4000yquehayannacidoconposterioridadal30demarzode1970,comotambinaquellosqueseanVarones.

    Paraforzaraquelaclusulaseevaleenordendistinto,porejemplo,quemuestreaquellosalumnosqueseanVaronesoquehayannacidodespusdeesafechayqueademsdeunadelasdoscondicionesanteriores,sundematrculaseamayorque4000,sernecesariousarparntesisparaencerrarlascondicionesquedebanevaluarseprimero,esdecir:

    WHERE(SEXO=VORFECHA_NACIMIENTO>{3/30/1970})ANDMATRICULA>4000

    Funciones

    Lasfuncionespermitenrealizarconlosdatosoperacionesadicionalesalasyavistas,pudiendoparticiparcomooperadoresenlasexpresiones.

    Unafuncinrepresentaunvalornicoqueseobtieneaplicandounasdeterminadasoperacionesaotrosvaloresdados,quesellamanargumentos.Seespecificacomounapalabrapredefinidaseguidadelosargumentosentreparntesisyseparadosporcomas.

    EllenguajeSQLdisponedeunconjuntodefuncionesquepuedenusarseenlasconsultasyqueaparecenaquagrupadasporeltipodevaloresquedevuelven.

    Funcionesquedevuelvenunacadenadecaracteres:

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 12/20

    FuncinDescripcin

    CHRConvierteunCdigoASCIIenunacadenadecarcterCHR(67)devuelvelaletraC.

    RTRIMoTRIMQuitalosblancosqueexistanporladerechaenunacadenaRTRIM(ABC)devuelveABC.

    LTRIMQuitalosblancosporlaizquierdaquetengaunacadenaLTRIM(ABC)devuelveABC.

    UPPERConviertecadaletradeunacadenaamaysculaUPPER(cadena)devuelveCADENA.

    LOWERConvierteaminsculacadaletradeunacadenaLOWER(CADENA)devuelvecadena.

    LEFTDevuelvelosnprimeroscaracteresporlaizquierdaLEFT(Cadena,3)devuelveCad.

    RIGHTDevuelvelosnltimoscaracteresdeunacadenaRIGTH(Cadena,4)devuelvedena.

    SUBSTRDevuelveunasubcadenadeunacadena.Losparmetrossonlacadena,laposicindelprimercarcteraextraeryelnmerodecaracteresaextraer.SUBSTR(Cadenadeletras,4,6)devuelveenade.SUBSTR(Cadena,5)devuelvena.

    SPACEGeneraunacadenadeespaciosenblanco.SPACE(5)devuelve.

    DTOCConvierteunafechaaunacadenadecaracteres.Unsegundoparmetroopcionaldeterminaelformatodelresultado:

    0(pordefecto)devuelveMM/DD/YY.1devuelveDD/MM/YY.2devuelveYY/MM/DD.10devuelveMM/DD/YYYY.11devuelveDD/MM/YYYY.12devuelveYYYY/MM/DD.

    Puedeexistiruntercerparmetroopcionalparadeterminarelcarcterquesequiereutilizarcomoseparador.Sinoseespecificasetomael(/).DTOC({01/30/89})devuelve01/30/89DTOC({01/30/89},0)devuelve01/30/89DTOC({01/30/89},1)devuelve30/01/89DTOC({01/30/89,11,)devuelve01301989

    DTPOSConvierteunafechaenunacadenadecaracteresusandoelformatoYYYYMMDD.DTPOS({01/23/90})devuelve19900123.

    IIFDevuelveunodedosposiblesvalores.Losparmetrossontres:elprimeroesunaexpresinlgica,elsegundoelvaloradevolversilaexpresinescierta,yelltimo,elvaloradevolversiesfalsa.IIF(SEXO=V,Masculino,Femenino)devolveralapalabraMasculinosielcamposexocontienelaVecasocontrariodevolveralapalabraFemenino.

    STRConvierteunnumeroenunacadena.Losparmetrossonelnmero,eltotaldeposicionesadevolver(incluyendoelpuntodecimal)yotroopcionalparaindicarelnmerodedgitosaladerechadepuntodecimal.STR(12.34567,4)devuelve12STR(12.34567,4,1)devuelve12.3

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 13/20

    STR(12.34567,6,3)devuelve12.346

    STRVALConvierteunvalordecualquiertipoaunacadenadecaracteresSTRVAL(Cadena)devuelveCadenaSTRVAL({12/25/53})devuelve12/25/53STRVAL(5*3)devuelve15STRVAL(4=5)devuelveFalse

    TIMEDevuelvelahoradeldacomounacadena.Alas9:49PM,TIME()devuelve21:49:00

    Funcionesquedevuelvennmeros

    FuncinDescripcin

    MODDividedosnmerosydevuelveelrestodeladivisin.MOD(10,3)devuelve1.

    LENDevuelvelalongituddeunacadena.LEN(Cadena)devuelve6

    MONTHDevuelveelmesencifrasdeunfecha.MONTH({01/30/89})devuelve1

    DAYDevuelveeldadeunafecha.DAY({01/30/89})devuelve30

    YEARDevuelveelao,contodassuscifras,deunafecha.YEAR({01/30/89})devuelve1989.

    MAXDevuelveelmayordedosnmeros.MAX(66,89)devuelve89.

    MINDevuelveelmenordedosnmeros.MIN(66,89)devuelve66.

    POWElevaunnmeroaunapotencia.POW(2,3)devuelve8

    INTDevuelvelaparteenteradeunnmero.INT(6.4321)devuelve6

    ROUNDRedondeaunnmero.ROUND(123.456,0)devuelve123ROUND(123.456,2)devuelve123.46ROUND(123.456,2)devuelve100

    NUMVALConvierteunacadenadecaracteresaunnmero.SilacadenaVALnoesunnmerosedevuelveelvalor0.NUMVAL(123)devuelve123NUMVAL(12A)devuelve0

    Funcionesquedevuelvenfechas:

    FuncinDescripcin

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 14/20

    DATEDevuelvelafechadehoy.Sihoyes25/12/89,DATE()devuelve{12/25/89}

    DATEVALConvierteunacadenadecaracteresaunafecha.DATEVAL(01/30/89)devuelve{01/30/89}

    CTODConvierteunacadenadecaracteresaunafecha.Sepuedeutilizarunsegundoparmetroparaespecificarelformatodelafechadevuelta:0(pordefectodevuelveMM/DD/YY,1devuelveDD/MM/YYy2devuelveYY/MM/DD.CTOD(01/30/89)devuelve{01/30/89}CTOD(01/30/89,1)devuelve{30/01/89}

    Ejemplosdefuncionesdefecha:

    SELECTSUM(AUSENCIAS)FROMFALTASALWHERETODAY()FECHAMONTH(TODAY()),YEAR(TODAY())YEAR(FECHA_NACIMIENTO)1,IIF(MONTH(TODAY())=MONTH(FECHA_NACIMIENTO)ANDDAY(FECHA_NACIMIENTO)>DAY(TODAY()),YEAR(TODAY())YEAR(FECHA_NACIMIENTO)1,YEAR(TODAY())YEAR(FECHA_NACIMIENTO)))FROMALUMNOS

    Sentenciasparacrearodestruirtablas

    Laaplicacindisponedesuspropiastablasquenodebensercreadasnidestruidas.Sielusuariolohicieraesbajosupropiaresponsabilidad.Noobstantesedalaposibilidaddecrearsesuspropiastablasy,porsupuesto,borrarlas.

    LasentenciaparacrearunatablaesCREATEyparadestruirlaDROP.

    Creacindeunatabla

    Lasentenciaparacrearunatablatienelaforma:

    CREATETABLEnombre_fichero(definicin_columna,...)

    nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasoloelnombredelficherosecreaeneldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).

    definicin_columnaestacompuestoporelnombredelacolumnaocampo,seguidadeltipodedatodedichacolumna.

    LosnombresdecolumnanodebentenerespaciosenblancoylostiposdedatosdisponiblesparaParadoxson:

    ALPHANUMERICSusvalorespuedentenerletras,nmerosocaracteresdepuntuacin.Seprecisaunparmetroparalalongitudmximaquesequierealmacenaryestanopuedesobrepasarlos255caracteres.PorejemploALPHANUMERIC(12).TambinsepuedeutilizarlapalabraCHARenlugardeALPHANUMERIC.

    BLOBSusvalorescontienenunaclasededatosbinariosdelongitudindefinidaquesesuelenutilizarparaimgenes.

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 15/20

    CURRENCYSusvalorescontienensolonmerosempleadosencantidadesmonetarias.EmpleanelmismoformatoqueeltipoNUMBER.

    DATESeempleaparaalmacenarfechas.

    MEMOSeempleaparatextodelongitudindefinidacuandoeltipoALPHANUMERICsequedacorto.

    NUMBERSeempleaparacantidadesnumricasengeneral.Puedenalmacenardecimalesysigno.Internamentesealmacenancomodecimalesdecomaflotantededobleprecisin.

    SHORTSolopuedecontenernmerosenterosentrelosvalores32767y32767.

    Nota:BLOByMEMOnosepuedenutilizarenlaclusulaWHEREytampocopuedenformarpartedeunaclave.

    Ejemplodecreacindeunatabladelibros:

    CREATETABLED:\LIBROS(TITULOCHAR(200),PAGINASSHORT,PRECIOCURRENCY,FECHA_COMPRADATE,PORTADABLOB,RESUMENMEMO)

    Destruccindeunatabla

    Elformatoparadestruiroborraruntablaes

    DROPTABLEnombrefichero

    nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasoloelnombredelficheroseutilizaeldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).

    Lasentenciaparaborrarlatablaantescreadaes

    DROPTABLED:\LIBROS

    SentenciaINSERT

    LasentenciadeINSERTseutilizaparaaadirregistrosalastablasdelabasededatos.Elformatodelasentenciaes:

    INSERTINTOnombre_fichero[(nombre_columna,...)]VALUES(expr,...)

    nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasoloelnombredelficheroseutilizaeldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).

    nombre_columnaesunalistaopcionaldenombresdecampoenlosqueseinsertarnvaloresenelmismonmeroyordenqueseespecificarnenlaclusulaVALUES.Sinoseespecificalalistadecampos,losvaloresdeexprenlaclusulaVALUESdebensertantoscomocampostengalatablayenelmismoordenquesedefinieronalcrearlatabla.

    expresunalistadeexpresionesovaloresconstantes,separadosporcomas,paradarvaloralosdistintoscamposdelregistroqueseaadiralatabla.Lascadenasdecaracteresdebernestarencerradasentrecomillaso"ylasfechasentrellaves{}.

    EjemploparaaadirunregistroalatablacreadaenelejemplodeCREATE:

    INSERTINTOD:\LIBROS(TITULO,PAGINAS,FECHA)VALUES(GestinEscolarIntegrada,234,

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 16/20

    {12/27/95})

    CadasentenciaINSERTaadeunnicoregistroalatabla.Enelejemplosolosehanespecificado3camposconsusrespectivosvalores,elrestodecamposquedarananulo.UnvalornuloNULLnosignificablancosocerossinosimplementequeelcamponuncahatenidounvalor.

    SepuedeninsertarregistrosenunficherodelaBasedeDatos,procedentesdeunficherodetexto,mediantelasentenciapropiadeIES2000quetienelaforma:

    INSERTINTOnombre_fichero[(nombre_columna,...)]FROMfichero_ascii

    Paraentenderelfuncionamientodeestasentencia,simplemente,seindicarqueporcadalneadelficherodetextoelprogramalaconvertirenunasentenciaIINSERTylaejecutar.Porlotanto,enelficherodetexto,laslneasdebernserdelamismaformaqueseexplicenexpr,conladiferencia,dequelasfechasnoirnentrellaves,yaqueeselprogramaelqueseencargadeponerlas.

    Medianteestaltimasentencia,podremosimportardatosdecualquieraplicacin,siempreycuandosehayanconvertido,previamente,aASCII.TambinpodremosaadirregistrosdeunficherodelaBasedeDatosaotrooalmismoconlautilidaddeexportarelresultadodeunaconsultaSQLy,posteriormenteimportarlosconlasentenciavistaanteriormente.

    SentenciaUPDATE

    LasentenciaUPDATEseutilizaparacambiarelcontenidodelosregistrosdeunatabladelabasededatos.Suformatoes:

    UPDATEnombre_ficheroSETnombre_columna=expr,...[WHERE{condicin}]

    nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasoloelnombredelficheroseutilizaeldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).

    nombre_columnaeselnombredecolumnaocampocuyovalorsedeseacambiar.EnunamismasentenciaUPDATEpuedenactualizarsevarioscamposdecadaregistrodelatabla.

    expreselnuevovalorquesedeseaasignaralcampoqueleprecede.Laexpresinpuedeserunvalorconstanteounasubconsulta.Lascadenasdecaracteresdebernestarencerradasentrecomillaso"ylasfechasentrellaves{}.Lassubconsultasentreparntesis.

    LaclusulaWHEREsigueelmismoformatoquelavistaenlasentenciaSELECTydeterminaqueregistrossemodificarn.

    Porejemplo,subirelpreciodecompradelatabladelibrosun10%deaquellosquetenganmsde250pginas,sera:

    UPDATED:\LIBROSSETPRECIO=PRECIO*1.1WHEREPAGINAS>250

    Otroejemplo,parafijarlafechadematrculadetodosaquellosalumnosquelatienenvacaalafechadehoy,sepondra:

    UPDATEMATRICULSETFECHA_MATRICULA=TODAY()WHEREFECHA_MATRICULAISNULL

    Ejemploutilizandounasubconsulta:

    UPDATED:\LIBROSSETPRECIO=(SELECTAVG(PRECIO)FROMD:\LIBROSWHEREPRECIOISNOTNULL)WHEREPRECIOISNULL

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 17/20

    Conestaltimasentenciasehapuestoprecioatodosloslibrosquenolotenan.Esepreciohasidoelresultantedecalcularlamedaentreloslibrosquesilotenan.

    SentenciaDELETE

    LasentenciaDELETEseutilizaparaborrarregistrosdeunatabladelabasededatos.Elformatodelasentenciaes:

    DELETEFROMnombre_fichero[WHERE{condicin}]

    nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasoloelnombredelficheroseutilizaeldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).

    LaclusulaWHEREsigueelmismoformatoquelavistaenlasentenciaSELECTydeterminaqueregistrosseborrarn.

    CadasentenciaDELETEborralosregistrosquecumplenlacondicinimpuestaotodossinoseindicaclusulaWHERE.

    DELETEFROMD:\LIBROSWHEREMOD(TODAYFECHA,365)>20

    Conelejemploanteriorseborrarantodoslosregistrosdelatablalibroscuyaantigedad,desdelafechadeadquisicin,fueramayorde20aos.

    Paraborrarlasnotasdeevaluacionesque,noseanlaFinal,delosalumnosdeaosanterioresseutilizaralasentencia:

    DELETEFROMNOTASWHEREANNO

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 18/20

    Alcontrariodeloqueocurreconlosndicesprimarios,unndicenoprimarionoidentificadeformanicaacadaregistrodeunatablaesdecir,dosomsregistrospuedencompartirlosmismosvaloresenloscamposqueformanlaclavenoprimaria.UnatablaParadoxpuedetenermsdeunndicenoprimario,ypuedenestarbasadosendistintoscamposyenelordendeseado.

    Existendosclasedendicesnoprimarios:mantenidosynomantenidos.Ladiferenciaentreunosyotrosestribaenquelosprimerosseactualizanautomticamentecuandolatablacambia,mientrasquelossegundossimplementequedanmarcadoscomodesactualizadosyseactualizanlaprximavezquesonusados.

    Parapoderdisponerdendicesnoprimariosenunatabla,esprecisotenercreadoanteselndiceprimario.

    Losndicesnoprimariosqueconstandeunnicocampoclaveyquehacendistincinentremaysculasminsculascompartenlosmismosnombresdeficherosquelastablasalasquepertenecenperoselesasignalasextensiones.X01hastaXFFdependiendodelndecampoenelqueestnbasados.Losndicesconunnicocampoenlaclaveperoquenohacendistincinentremaysculasyminsculasolosquetienenmsdeuncampoenlaclaveposeenelmismonombrequesutablaperoconlasextensionesqueempiezanen.XG0conincrementosenhexadecimalhastaelndendicesqueposealatabla.

    Sentenciasparacrearodestruirndices

    Lastablasdelaaplicacindisponendesuspropiosndicesquenodebensermodificadosnidestruidas.Sielusuariolohicieraesbajosupropiaresponsabilidad.Noobstantesedalaposibilidaddecrearselosndicesparasuspropiastablasoaadirotrosalasdelaaplicacin.Comotambinborrarlospropios.

    LasentenciaparacrearunndiceesCREATEINDEXyparadestruirloDROPINDEX.

    Sentenciacrearndiceprimario

    Lasintaxisparacrearunndiceprimarioeslasiguiente:

    CREATEINDEXPRIMARYONnombre_fichero(nombre_columna[,nombre_columna...])

    nombre_ficheroeselnombredelatablaenlacualsebasaelndice.

    nombre_columnaeslalistadecamposquecomponenlaclaveprimariadelndice.Debeenumerarunoomscamposconsecutivosdelatabla,comenzandoporelprimero.

    Porejemplo,

    CREATEINDEXPRIMARYOND:\LIBROS(TITULO,PAGINAS)

    Sentenciacrearndicenoprimario

    Lasintaxisparacrearunndicenoprimarioes:

    CREATEINDEXnombreindice[/NON_MAINTAINED][/CASE_INSENSITIVE]ONnombre_fichero(nombre_columna[,nombre_columna...])

    nombreindicesirveparaidentificaracadandicenoprimarioporunnombrequecreaelusuario.

    LaopcinNONMAINTENEDhacequeelndiceseanomantenido.Pordefecto,sinoseincluye,secreamantenido.

    LaopcinCASEINSENSITIVEhacequeelndicenodistingaentremaysculasyminsculas.Pordefecto,sinose

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 19/20

    incluye,sihaydistincin.

    nombre_ficheroeselnombredelatablaenlaquesebasaelndice.

    nombre_columnaeselnombredelcampoocamposqueformanlaclavenoprimariadelndice,puedeestarencualquierorden.

    Porejemplo,

    CREATEINDEXPOR_FECHASOND:\LIBROS(FECHA)

    Sentenciadeborradodendice

    Lasintaxisparaladestruccindeunndiceprimarioes:

    DROPINDEXnombre_camino.PRIMARY

    Porejemplo:

    DROPINDEXD:\LIBROS.PRIMARY

    Lasintaxisparaborrarunndicenoprimarioes

    DROPINDEXnombre_camino.nombre_indice

    Porejemplo:

    DROPINDEXD:\LIBROS.POR_FECHAS

    nombre_caminoeselnombredelatablacuyondicesequiereborrar.Puedeconsistirsolamentedeunnombredeficheroodeuncaminocompleto.

    nombre_indiceeselnombrequeselediocuandofuecreado.

    Transacciones

    Unatransaccinesunaseriedecambiosenlabasededatosquedebensertratadascomounasola.Enotraspalabras,queserealicentodosoquenosehaganinguno,puesdelocontrariosepodranproducirinconsistenciasenlabasededatos.

    CuandonosetieneactivadaunatransaccinelgestordebasededatosejecutainmediatamentecadasentenciaINSERT,UPDATEoDELETEqueseleencomiende,sinposibilidaddedeshacerloscambioencasodeocurrircualquierpercance.CuandoseactivaunatransaccinloscambiosquesevanrealizandoquedanenunestadodeprovisionalidadhastaqueserealizaunCOMMIT,elcualhardefinitivosloscambiosohastarealizarunROLLBACKquedeshartodosloscambiosproducidosdesdequeseinicilatransaccin.

    ElinterpreteSQL,quesevermsadelante,permiterealizartransacciones.Conelbotnlainiciar,conelbotnproducirunCOMMITyconelbotnproducirunROLLBACK.

    MejorasenelrendimientodelinterpreteSQL

    EllenguajeSQLesnoprocedimental,esdecir,enlassentenciasseindicaquequeremosconseguirynocomolo

  • 28/3/2015 IniciacinalLenguajeSQL

    http://www.pablin.com.ar/computer/cursos/varios/sql1.htm 20/20

    tienequehacerelinterpreteparaconseguirlo.Estoespurateora,puesenlapracticaatodoslosgestoresdeSQLhayqueespecificarsuspropiostruquitosparaoptimizarelrendimiento.

    Portanto,muchasvecesnobastaconespecificarunasentenciaSQLcorrecta,sinoqueadems,hayqueindicarlecomotienequehacerlosiqueremosqueeltiempoderespuestaseaelmnimo.Enesteapartadoveremoscomomejorareltiempoderespuestadenuestrointerpreteanteunasdeterminadassituaciones:

    SeprocurarelegirenlaclusulaWHEREaquelloscamposqueformenpartedelaclavedelficheroporelcualinterrogamos.Ademsseespecificarnenelmismoordenenelqueestndefinidosenlaclave.Porejemplo,siinterrogamosalficheroMATRICULlasentenciawheredeberllevarenprimerlugarMATRICULA=valor,despuspuedellevarANNO=valor,yassucesivamentesiguiendoelordenenelqueestdefinidalaclave.(VerelapartadodeestructuradelaBasedeDatosparaobservarelficheroMATRICUL).

    Sielficherocontieneotrasclaves,ademsdelaprimaria,sepuedeutilizarelmismocriterio.Porejemplo,comoMATRICULcontienedosclavessecundarias,conlaprimerapodemosinterrogardeformaoptimaindicandoenlaclusulawhereANNO=valorANDGRUPO=valorAND....,yconlasegundaclaveANNO=valorandESTUDIOS=valorAND....PorlotantosienlaclusulawherealaccederaesteficheronoindicamosqueMATRICULAcontengaundeterminadovaloroqueANNOnotengaotro,noseconseguirunaccesorpidopueselgestornopodrutilizarningnndiceytendrquehacerseunrecorridosecuencialportodoelfichero.

    Cuandoserealicenenlacesdetablas,elhacerloyenelordenadecuadoutilizandondices,ayudarmuchoaoptimizarelrendimiento,puesdelocontrariopuedeconsumirmuchotiempo.

    Porejemplo,dadalasentencia:

    SELECTAPELLIDOSFROMALUMNOS,MATRICULWHEREALUMNOS.MATRICULA=MATRICUL.MATRICULAANDMATRICULA.ANNO=1995ANDMATRICUL.TIPO=O

    EnestasentenciasehanenlazadolatablaALUMNOSyMATRICULasutilizandoelcampoclaveMATRICULAdeambastablas.PeroelinterpreteserecorrercadaunodelosregistrosdelficheroALUMNOSycomprobarparacadaunodeellossiposeeMATRICULaOficialenelao1995.

    Lomslgicoserahacerloalcontrario,esdecir,paracadaMATRICULaOficialdelao1995seaccedealficheroALUMNOSconelcampoMATRICULAyseconsiguesusapellidos.DeestaformanosahorramoseltenerquerecorrernostodoelficherodeALUMNOS.QuizpiensequenostenemosquerecorrertodoelficherodeMATRICULasyquehemoscomplicadoelproblema,perolociertoesquecomoimponemosrestriccionesconcamposclaveelaccesoesnicamentealosregistrosquecumplanlacondicinimpuesta.

    Portanto,lasentenciaanteriordeberaser:

    SELECTAPELLIDOSFROMMATRICUL,ALUMNOSWHEREALUMNOS.MATRICULA=MATRICUL.MATRICULAANDMATRICULA.ANNO=1995ANDMATRICUL.TIPO=O

    LonicoquehacambiadoeselordendeenumeracindelosficherosenlaclusulaFrom.Tengasiempreencuentaqueelrecorridoseefectuarsiempreempezandoporelficheroqueenumeremosenprimerlugar,luegoporelsegundoyassucesivamente.