introduccion_lenguajesql
DESCRIPTION
SIGTRANSCRIPT
-
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.