You are on page 1of 20

28/3/2015

IniciacinalLenguajeSQL

IniciacinalLenguajeSQL
EllenguajeSQL
SQLesunaherramientaparaorganizar,gestionaryrecuperardatosalmacenadosenunabasededatosinformtica.
Elnombre"SQL"esunaabreviaturadeStructuredQueryLanguaje(Lenguajedeconsultasestructurado).Comosu
propionombreindica,SQLesunlenguajeinformticoquesepuedeutilizarparainteraccionarconunabasededatos
ymsconcretamenteconuntipoespecificollamadobasededatosrelacional.
SQLesalavezunlenguajefcildeaprenderyunaherramientacompletaparagestionardatos.Laspeticiones
sobrelosdatosseexpresanmediantesentencias,quedebenescribirsedeacuerdoconunasreglassintcticasy
semnticasdeestelenguaje.
Suaprendizajenosolosirveparaestaaplicacinsino,tambin,paratodaslasexistentesenelmercadoque
soportenestelenguajeyaqueesunlenguajeestndarporhabersevistoconsolidadoporelInstitutoAmericanode
Normas(ANSI)yporlaOrganizacindeEstndaresInternacional(ISO).
Lainformacinaquresumidadellenguajepuedeserampliadaconmultituddelibrosexistentesenelmercado,
todosconlassiglas"SQL".
ElSQLqueseutilizarenestaaplicacincumpleestrictamenteconlasespecificacionesdeMicrosoftOpen
DatabaseConnectivity(ODBC)yacontinuacinsepodrnverlascaractersticaspropiasparaelaccesoaficheros
enelformatoParadoxdeBorland.

Notacinempleadaenlosformatos
MAYSCULASLaspalabrasquefigurenenelformatoenmaysculasseescribirnenlasentenciaigualquese
escribenenelformato.
MinsculacursivaEstaspalabrasdebernsersustituidasenlasentenciapornombresopalabraselegidasporel
usuariodeacuerdoconlasdescripcionesquesedenencadacaso
Barravertical|Indicarlaeleccindeunadelasopcionesqueesteseparando.Ounauotranoambas.
Corchetes[]Encerrarnelementosopcionesdelasentenciaquepuedencogerseonodependiendodelusuario.
Llaves{}Encerrarnelementosobligatoriosdelasentenciaquesiempredeberndeserespecificados.

Sentenciasdeseleccinoconsultas
LasconsultassonelcorazndellenguajeSQL.LasentenciaSELECT,queseutilizaparaexpresarconsultasen
SQL,eslamspotenteycomplejadelassentenciasSQL.
LasentenciaSELECTrecuperadatosdeunabasededatosylosdevuelveenformaderesultadosdelaconsulta.
Constadeseisclusulas:lasdosprimeras(SELECTyFROM)obligatoriasylasotrascuatroopcionales.
LaformadelasentenciaSELECTsoportadaporParadoxes:
SELECT[DISTINCT]{*|expresin_columna,...}FROMnombretabla[alias_tabla]...[WHEREexpresin1
operadorexpresion2][GROUPBY{expresin_columna,...}][HAVING{condicin}][UNION[ALL](SELECT
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

1/20

28/3/2015

IniciacinalLenguajeSQL

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

ClusulaSELECT
LaclusulaSELECTlistalosdatosarecuperarporlasentenciaSELECT.Loselementosodatosaseleccionar
puedensercolumnasdelabasededatosocolumnasacalcularporSQLcuandoefectalaconsultaotambinel
asterisco(*)pararecuperartodosloscamposdeunficherootabla.
expresin_columnapuedeserunsimplenombredecampo(porejemploMATRICULA).Expresionesmscomplejas
puedenincluiroperacionesmatemticasodemanipulacindecaracteres(porejemploAPELLIDOS+,+
NOMBRE).Masadelantesevernestasexpresionesdeformamsamplia.
Lasexpresionesdecolumnasdebenirseparadasporcomassiexistenmsdeuna(porejemploAPELLIDOS,
NOMBRE,DNI,DOMICILIO).
Losnombresdecampospuedenirprecedidosporelnombredelatablaosualias.Porejemplo
ALUMNOS.MATRICULAoA.MATRICULAdondeAeselaliasparalatablaoficheroALUMNOS.
EloperadorDISTINCT,siseincluye,debeprecederlaprimeraexpresindecolumna.Esteoperadoreliminalas
filasoregistrosduplicadosdelresultadodelaconsulta.Porejemplolasentencia:
SELECTDISTINCTPROVINCIAFROMALUMNOS
mostrarlasdistintasprovinciasdelasqueprocedenlosalumnosdelCentro.

Funcionesdeagrupamiento
LasfuncionesdeagrupamientopuedensertambinpartedeunaclusulaSELECT.Devuelvenunnicovalordeun
conjuntoderegistros.Puedenusarseconunnombredecampo(porejemplo,AVG(NUMERO_DE_HERMANOS)o
encombinacinconunaexpresindecolumnamscompleja(porejemplo,AVG(NUMERO_DE_HERMANOS*
1.07)).LaexpresindecolumnapuedeirprecedidaporeloperadorDISTINCT.EloperadorDISTINCTeliminarlos
valoresrepetidosdeunaexpresindeagrupamiento.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)devolver
elnmeroderegistrosconvaloresnonulosenesecampo.COUNT(PAIS)nosdirelnmerodealumnosqueenel
campopastienealgunainformacinynoestablanco.UnejemploespecialesCOUNT(*),quenosdevuelveel
nmeroderegistrosincluyendoaquellosregistrosconvaloresnulos.
MAXDevuelveelvalormsaltodeloscontenidosenunaexpresindecolumna.Porejemplo,MAX(MATRICULA)
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

2/20

28/3/2015

IniciacinalLenguajeSQL

devolverelndematrculamaselevadoqueexisteenelficherodealumnos.
MINDevuelveelvalormsbajodeloscontenidosenunaexpresindecolumna.Porejemplo,SELECT
MIN(FECHA_NACIMIENTO)FROMALUMNOSnosdevolverlafechadenacimientodelalumnomasviejodel
centro.

ClusulaFROM
LaclusulaFROMlistalastablasoficherosquecontienenlosdatosarecuperarporlaconsulta.Elformatodeesta
clusulaes:
FROMnombretabla[alias_tabla]...
nombretablapuedeserunaomasnombresdetablaeneldirectoriodetrabajosiseomiteeste,oenundirectorio
distintosiseespecifica.
alias_tablaesunnombrequeseusaparareferirsealatablaenelrestodelasentenciaSELECTparaabreviarel
nombreoriginalyhacerlomsmanejable,enelcasodeexistirmsdeunatablaenlaconsultay,tambinpara
poderrealizarconsultasuniendovariasveceslamismatabla.Porejemplo,

SELECTA.NOMBRE,A.APELLIDOSFROMMATRICULM,ALUMNOSAWHEREM.MATRICULA=
A.MATRICULAANDM.GRUPO=1AANDANNO=1995
esmuchomsprcticoysencilloque:
SELECTALUMNOS.NOMBRE,ALUMNOS.APELLIDOSFROMMATRICUL,ALUMNOSWHERE
MATRICUL.MATRICULA=ALUMNO.MATRICULAANDMATRICUL.GRUPO=1AANDANNO=1995
Lasdossentenciassonidnticasynosdevolveranlosnombresyapellidosdelalumnadomatriculadoenelao
1995yquefiguranenelgrupo1A.Elnombredetablasjuntoalnombredecampoesobligatoriocuandoexistan
camposconnombreidnticoenlastablasqueformenpartedelasentencia.AsenelejemploanteriorNOMBREy
APELLIDOSnolonecesitaran(aunqueestepuesto)peroMATRICULAsilonecesitaporqueenlasdostablas
existeuncampoconesenombre.
Sinosepudierautilizaralias,nosepodraunirunatablaconsigomismaylasiguienteconsultanosepodrallevara
cabo:
SELECTA.NOMBRE,A.APELLIDOS,H.NOMBREFROMALUMNOSA,ALUMNOSHWHEREA.PADRE
=H.PADRE
quenosdevolverelnombredeaquellosalumnos/asquetienenelmismopadre,esdecir,sonhermanos.

ClusulaWHERE
LaclusulaWHEREdiceaSQLqueincluyasolociertasfilasoregistrosdedatosenlosresultadosdelaconsulta,
esdecir,quetienenquecumplirlosregistrosquesedeseanver.LaclusulaWHEREcontienecondicionesenla
forma:
WHEREexpresin1operadorexpresion2
expresin1yexpresion2puedensernombresdecampos,valoresconstantesoexpresiones.

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

3/20

28/3/2015

IniciacinalLenguajeSQL

operadoresunoperadorrelacionalqueunedosexpresiones.Mstardesevernlosdistintosoperadoresquese
puedeutilizar.
Porejemplo,lasiguientesentencianosmuestraelndealumnosquehannacidoconposterioridada1985.
SELECTCOUNT(*)FROMALUMNOSWHEREYEAR(FECHA_NACIMIENTO)>1985

ClusulaGROUPBY
LaclusulaGROUPBYespecificaunaconsultasumaria.Envezdeproducirunfiladeresultadosporcadafilade
datosdelabasededatos,unaconsultasumariaagrupatodaslasfilassimilaresyluegoproduceunafilasumariade
resultadosparacadagrupo.
SeguidodelaclusulaGROUPBYseespecificanlosnombresdeunoomscamposcuyosresultadossedesean
agrupados.Tienelaforma:
GROUPBYexpresin_columna
expresin_columnadebecoincidirconlaexpresindecolumnautilizadaenlaclusulaSELECT.Puedeserunoo
msnombresdecampodeunatabla,separadosporcomaounaomsexpresionesseparadasporcomas.El
siguienteejemplonosdicecuantosalumnosestnmatriculadosencadagrupoenelao1995:
SELECTGRUPO,COUNT(*)FROMMATRICULWHEREANNO=1995GROUPBYGRUPO
Estasentencianosdevolverunafilaporcadagrupodealumnos.Cadaunadeellascontendrelgrupoyelnde
alumnosenl.

ClusulaHAVING
LaclusulaHAVINGdiceaSQLqueincluyasolociertosgruposproducidosporlaclusulaGROUPBYenlos
resultadosdelaconsulta.AligualquelaclusulaWHERE,utilizaunacondicindebsquedaparaespecificarlos
gruposdeseados.Enotraspalabras,especificalacondicinquedebendecumplirlosgrupos.Sloesvlidasi
previamentesehaespecificadolaclusulaGROUPBY.LaclusulaHAVINGtienelaforma:
HAVINGexpresin1operadorexpresin2
expresin1yexpresin2puedensernombresdecampos,valoresconstantesoexpresionesyestasnodeben
coincidirconunaexpresindecolumnaenlaclusulaSELECT.
operadoresunoperadorrelacionalqueunelasdosexpresiones.Mstardesevernlosdistintosoperadoresquese
puedeutilizar.
Lasentenciasiguientenosmostrarelnmerodealumnosencadagrupode1995cuyonumerodeintegrantes
superalos30:
SELECTGRUPO,COUNT(*)FROMMATRICULWHEREANNO=1995GROUPBYGRUPOHAVING
COUNT(*)>30

OperadorUNION
EloperadorUNIONcombinaelresultadodedossentenciasSELECTenunnicoresultado.Esteresultadose
componedetodoslosregistrosdevueltosenambassentencias.Pordefecto,losregistrosrepetidosseomiten.Para
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

4/20

28/3/2015

IniciacinalLenguajeSQL

noquitarlosseemplearlapalabraALL.Tienelaforma:
SELECTsentenciaUNION[ALL]SELECTsentencia
CuandoseutiliceeloperadorUNION,lalistadeseleccinparacadasentenciaSELECTdebetenerelmismo
nmerodeexpresionesdecolumnasconelmismotipodedatosyenelmismoorden.Porejemplo,
SELECTAPELLIDOS,NOMBREFROMALUMNOSUNIONSELECTAPELLIDOS,NOMBREFROM
PROFESORUNIONSELECTAPELLIDOS,NOMBREFROMPERSONAL
Esteejemplotieneelmismondecolumnasycadacolumnaenordenconelmismotipodedatos.Nosdevolver
unalistanicadealumnos,profesoresypersonalnodocente.

ClusulaORDERBY
LaclusulaORDERBYordenalosresultadosdelaconsultaenbasealosdatosdeunaomscolumnas.Sise
omite,losresultadossaldrnordenadosporelprimercampoqueseaclaveenelndicequesehayautilizado.
Portanto,indicacomodebenclasificarselosregistrosqueseseleccionen.Tienelaforma:
ORDERBY{expresin_orden[DESC|ASC],...]
expresin_ordenpuedeserelnombredeuncampo,expresinoelnmerodeposicinqueocupalaexpresinde
columnaenlaclusulaSELECT.PordefectoseordenanASCendentemente(demenoramayor).Sisedesearde
mayoramenorseemplearDESC(DESCendente).Porejemplo,paramostrarlosalumnosordenadosdemayor
edadamenor,seutilizara:
SELECTNOMBRE,APELLIDOSFROMALUMNOSORDERBYFECHA_NACIMIENTODESC
Paraobtenerunlistadodealumnosporsulugardenacimientoordenadoporprovinciasydentrodecadaprovincia
ordenadosporlocalidadesseutilizara:
SELECTNOMBRE++APELLIDOS,LOCALIDAD_NACIMIENTO,PROVINCIA_NACIMIENTOFROM
ALUMNOSORDERBYPROVINCIA,LOCALIDAD
olomismodeotraforma
SELECTNOMBRE++APELLIDOS,LOCALIDAD_NACIMIENTO,PROVINCIA_NACIMIENTOFROM
ALUMNOSORDERBY3,2

EnlacedevariasTablasoficheros
Losejemplosvistohastaelmomentosoloextraendatosdeunanicatablaypocascosaspodramoshacersino
pudiramosinterrelacionarvariosficherosparaobtenerlasconsultasquedeseramos.
LaBasedeDatosdeIES2000esunaBasedeDatosRelacionaly,sellamadeestaforma,porlasdistintas
relacionesqueexistenentrelosdistintosficherosotablasquemaneja.
Enenlaceorelacindedostablaspararealizarunaconsulta,seconoceconeltrminodeJOIN.Paraexpresar
estetrminovamosautilizarunejemploqueseutilizamuyamenudoentodaslasconsultasdeGEIWIN:
DeseamosunlistadoalfabticoconlosNombresyApellidosdetodoslosalumnosqueestnmatriculados,de
formaOficial,actualmenteenelcentro.
ElficherodeALUMNOScontienetodoslosdatosgeneralesdelalumnado,entreellosNombreyApellidos,yel
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

5/20

28/3/2015

IniciacinalLenguajeSQL

ficheroMATRICULlosdistintosdatosdelasdiferentesmatrculasdecadaunodeellos,entreelloselaoytipode
lamatrcula.
Paraextraerlosdatosdeseadosdeberemosdebuscaruncampoquecontengainformacincomnenlosdos
ficheros,esdecir,aquelporelqueestnrelacionadosambos.Estecampoeselndeexpedientedelalumno,que
dalacasualidadquetieneelmismonombreenlosdosficheros:MATRICULAyserestecampoelquenossirva
paraefectuarelJOIN:
SELECTAPELLIDOS,NOMBREFROMMATRICUL,ALUMNOSWHEREMATRICUL.MATRICULA=
ALUMNOS.MATRICULAANDANNO=1996ANDTIPO=OORDERBYAPELLIDOS,NOMBRE
ElJoinseindicaenlaclusulaWHEREcomootracondicinms,enestecaso,elndeexpedienteenlosdos
ficherodebeexistiry,sinoesas,elalumno/anoaparecerenlarelacin,aunquefigureenunodeellos.

AliasdelasTablas
Losaliassonuninstrumentoparaabreviarlosnombresdelastablasoficherosypoderreferirseaellosentodala
sentencia.Enelejemploanteriorpodramosemplearaliasdelasiguienteforma:
SELECTAPELLIDOS,NOMBREFROMMATRICULM,ALUMNOSAWHEREM.MATRICULA=
A.MATRICULAANDANNO=1996ANDTIPO=OORDERBYAPELLIDOS,NOMBRE
Loscamposquetienennombrenicoenlassentenciasnonecesitanirprecedidosporelnombredelatablaosu
alias.EnelejemploANNOyTIPOsoloexistenenelficheroMATRICULyporesaraznnoseleshaprecedidopor
MATRICULosualiasM.

OrdendelastablasenlaclusulaFROM
EspecialmencinmereceelordendeenumeracindelastablasenlaclusulaFROM.ElGestordeSQL,cuando
existeunJOINentredostablas,recorrelatablaquefiguraenprimerlugar,yporcadaregistroqueencuentraque
satisfaceelrestoderestricciones,compruebasiexistecorrespondenciaenlaotratabla.
Pongamosunejemploprctico:SitenemosenelficherodeALUMNOS5000registrosyenelficheroMATRICUL
15000,deloscualessolo1000sondelao1996ydeltipooficial,elGestorrealiza1000lecturasdelfichero
MATRICULy1000msdeALUMNOS.Silosenumerramosalrevs,serealizaran5000lecturasdeALUMNOSy
5000msdeMATRICUL.

Enlacedetablassinequivalenciaporladerecha(JoinRightOuter)
Porlogeneralefectuaremosenlacesdetablasconelsignodeigualdad(JoinEqual),peroexistirnconsultasenlas
quedesearemosquenosdevuelvalosregistrosnulosdelatablaquenotengacorrespondenciaenlaotra.Por
ejemplo,sideseamosunarelacindetodaslasmateriasconelnombredeldepartamentoquelasimparte
tendramosqueescribirlasentencia:
SELECTM.NOMBRE,D.NOMBREFROMMATERIASM,DEPARTADWHEREM.DEPARTAMENTO=
D.CLAVE
Deestaformasolonosapareceranenlarelacinlasmateriasquetienenasignadodepartamentoquelasimparta.
Siquisiramosqueaparecierantodasylasquenotengandepartamentoasignadoqueaparecieraelnombredeste
vaco,cambiaramoselsigno=por*=
SELECTM.NOMBRE,D.NOMBREFROMMATERIASM,DEPARTADWHEREM.DEPARTAMENTO
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

6/20

28/3/2015

IniciacinalLenguajeSQL

*=D.CLAVE

Enlacedemsdedostablas
ElGestordeSQLpuedeunirmuchastablasenunanicasentencia,paraellodebemosefectuarelJoinentretodas
ellasydelaformamsptimaposibleparaqueeltiempoderespuestaseamnimo.
SELECTA.APELLIDOS+''+A.NOMBRE,S.ABREVIATURA1FROMMATRICULM,NOTASN,
ALUMNOSA,MATERIASSWHEREM.MATRICULA=A.MATRICULAANDM.ANNO=@ACTUAL
ANDM.GRUPO='@Grupo'ANDM.MATRICULA=N.MATRICULAANDN.MATERIA=S.MATERIA
ANDN.ANNO=M.ANNOANDN.EVALUACION='F'
LasentenciapermitirextraerelnombreyapellidosdecadaunodelosalumnosdelGrupoqueindiquemos
cuandonosseasolicitadojuntoconcadaunadelasmateriasquecursanenelaoactual.

Enlasentenciasehanunido4ficherootablas:Matriculas,Notas,AlumnosyMaterias,pueselnombreyapellidos
delalumnoestnenelficheroAlumnosylaabreviaturadelasmateriasestnenelficheroMateriaselfichero
Matriculasesnecesarioparasaberquealumnostienenmatrculaenelcursoactualysondelgrupoelegido,yel
ficheroNotascontienecadaunadelasmateriasquecursaelalumnado,siempreconlaevaluacinFinal.

Tabulacinderesultados
ElGestordeSQLsiempregeneraunasalidaplana,esdecir,unaseriedefilasconunaseriedecolumnas.Pero
existirnlistadosquesernmuchomslegiblessilainformacinserepresentacomounatabladedatos.Enel
ejemploanteriorelresultadotendrunregistroporcadamateriaquecurseelalumno,ysunombrefigurarrepetido
encadaunodeellosconunamateriadiferente.
Paramostrarlosresultadoscomounaespeciedeactillaenlaqueserefleje,porcadaregistro,elnombredelalumno
ytodaslasmateriasacursar,procederemosdelasiguienteforma:
Unavezquetenemoselresultadodelaconsultaenpantallapresionaremoselbotn<Tabular>
Elegiremos,enestecaso,elTipo2presionandoendichobotnylaaplicacinharelresto.

SELECTanidadas
PuedenexistirconsultasalaBasedeDatosquerequieranunarestriccinqueseaelresultadodeotraconsulta.
Porejemplo:Deseamossabercuantasmateriasposeeelltimocursodeunosdeterminadosestudios.Mediante
COUNT(Materia)puedosabercuantasperolacondicindelltimocursosolosepuedesaberdespusdeejecutar
unasentenciaconMAX(Curso)delficheroPLANES
Cuandoestoseproducepodemosactuardedosformas:
Laprimeraefectuandolaconsultaquegeneralarestriccinyposteriormente,realizarlasentenciaconelresultado
delarestriccincalculada:
SELECTMAX(CURSO)FROMPLANESWHEREESTUDIO='@Estudio
Si,porejemplo,elvalormximonosdevuelve3,entoncesrealizaramoslasentenciadefinitivacon:
SELECTCOUNT(MATERIA)FROMPLANESWHEREESTUDIO='@Estudio'ANDCURSO=3
Lasegundaformaesmscomplejaperomuchomsprctica.Lasentenciaquegeneralarestriccincomplejase
anidadentrodelaprincipalencerrndolaentreparntesis:
SELECTCOUNT(MATERIA)FROMPLANESWHEREESTUDIO='@Estudio'ANDCURSO=
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

7/20

28/3/2015

IniciacinalLenguajeSQL

(SELECTMAX(CURSO)FROMPLANESWHEREESTUDIO='@Estudio')
LassentenciasSELECTanidadasseutilizanconmuchafrecuenciaalahoradeActualizaroBorrarregistrosdeuna
tablaquerequierancondicionesorestriccionesenlasqueestnimplicadasotrastablasdistintasdelaquesevaa
actualizaroborrar.

ExpresionesSQL
LasexpresionesseutilizanenlasclusulasWHERE,HAVINGyORDERBYdelassentenciasSELECT.
Lasexpresionesnospermitenutilizaroperacionesmatemticascomotambincadenasdecaracteresyoperadores
demanipulacindefechasparaconstruirconsultascomplejas.
Loselementosquecomponeslasexpresionesson:
Nombresdecampos
Operadoresnumricos
Operadoresdefechas
Operadoreslgicos
Constantes
Operadoresdecaracteres
Operadoresderelacin
Funciones

Nombresdecampos
Lasexpresionesmscomunessonlosnombresdecampos.Sepuedencombinarconotroselementosdelas
expresiones

Constantes
Lasconstantessonvaloresquenocambian.Porejemplo,enlaexpresinFECHA_NACIMIENTO+30,elvalor30
esunaconstanteyFECHANACIMIENTOesunnombredecampo.
Lasconstantesdecaracteressedebenencerrarconunacomillasimple()ounadoble(").Paraqueunacomilla
simpleodobleaparezcaenunaconstanteseponedoble.(Porejemplo,silaconstantedeseadaesODonneldeber
figurarcomoODonnel.
Lasconstantesdefechasdebernestarencerradasentrellaves({}),porejemplo,{01/30/89}representalafecha30
deEnerode1989.ElformatodelasfechasesMM/DD/YYoMM/DD/YYYY(MM=mes,DD=dayYY=Ao).

OperadoresNumricos
Pararealizaroperacionesnumricassepuedeutilizarlosoperadores:
operadorsignificado
+Suma
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

8/20

28/3/2015

IniciacinalLenguajeSQL

Resta
*Multiplicacin
/Divisin
**o^Exponenciacin

Operadoresdecaracteres
Lasexpresionesdecaracterespuedenincluirlossiguientesoperadores:
operadorsignificado
+Concatenacinmanteniendoespaciosenblanco
Concatenacinmoviendolosblancosalfinal
Siporejemplo,NOMBREcontieneAntonioyAPELLIDOSRodrguez
ejemplo
Valorresultado
NOMBRE+APELLIDOSAntonioRodrguez
NOMBREAPELLIDOSAntonioRodrguez

Operadoresdefechas
Lasexpresionesdecaracterespuedenincluirlossiguientesoperadores:
operadorsignificado
+Aadeunnmerodedasaunafechaparaproducirunanuevafecha.
Elnmerodedasentredosfechasolarestadeunnmerodedasdesdeunafechaparaproducirunanueva
fecha.
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
=Iguala
<>Distintode
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

9/20

28/3/2015

IniciacinalLenguajeSQL

>Mayorque
>=Mayoroigualque
<Menorque
<=Menoroigualque
LikeCoincidenciaconunpatrn
NotLikeNocoincidenciaconunpatrn
IsNullIgualanulo(vaco)
IsNotNullNoesnulo(noestvaco)
BetweenRangodevaloresentreunacotainferioryotrasuperior
InPertenenciaaunconjuntodevaloresosermiembrodeunasubconsulta
ExistCiertosiunasubconsultadevuelvecomomnimounregistro
AnyComparaunvalorconcadavalordevueltoporunasubconsultaretornandociertosiunocualquieradeellos
cumplelacondicin.Anydebeirprecedidode=,<>,<,>,>=o>=.=AnyesequivalenteaIn.
AllComparaunvalorconcadavalordevueltoporunasubconsultaretornandociertositodoselloscumplenla
condicin.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.
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

10/20

28/3/2015

IniciacinalLenguajeSQL

SEXO=VORPAISISNOTNULL
Bastaconqueunadelasdosseaciertaparaquelosealacondicintotal.
EloperadorlgicoNOTestilparaponeralcontrariounacondicin.Porejemplo:
NOT(ANNO=1995ANDCURSO=2)

Prioridaddelosoperadores
Enexpresionesconmasdeunacondicinelordenenelqueseevalanesmuyimportante.Lasiguientetabla
muestraelordenenelquesonevaluadoslosoperadores.Losoperadoresquefiguranenlaprimeralneaseevala
losprimeros,luegolosdelasegundayassucesivamente.Losoperadoresquefigurenenlamismalnease
evalandeizquierdaaderechasegnaparezcanenlaexpresin.
prioridadoperador
1unario,+unario
2**o^
3*,/
4+,
5=,<>,<,>,>=,>=,Like,NotLike,IsNull,IsNotNull,Between,In,Exists,Any,All
6NOT
7AND
8OR
Elsiguienteejemplomuestralaimportanciadelaprioridaddelosoperadores:
WHERESEXO=VORFECHA_NACIMIENTO>{3/30/1970}ANDMATRICULA>4000
YaqueelANDseevalaprimero,estaconsultanosdevuelveaquellosalumnosconndematriculamayorque
4000yquehayannacidoconposterioridadal30demarzode1970,comotambinaquellosqueseanVarones.
Paraforzaraquelaclusulaseevaleenordendistinto,porejemplo,quemuestreaquellosalumnosquesean
Varonesoquehayannacidodespusdeesafechayqueademsdeunadelasdoscondicionesanteriores,sun
dematrculaseamayorque4000,sernecesariousarparntesisparaencerrarlascondicionesquedeban
evaluarseprimero,esdecir:
WHERE(SEXO=VORFECHA_NACIMIENTO>{3/30/1970})ANDMATRICULA>4000

Funciones
Lasfuncionespermitenrealizarconlosdatosoperacionesadicionalesalasyavistas,pudiendoparticiparcomo
operadoresenlasexpresiones.
Unafuncinrepresentaunvalornicoqueseobtieneaplicandounasdeterminadasoperacionesaotrosvalores
dados,quesellamanargumentos.Seespecificacomounapalabrapredefinidaseguidadelosargumentosentre
parntesisyseparadosporcomas.
EllenguajeSQLdisponedeunconjuntodefuncionesquepuedenusarseenlasconsultasyqueaparecenaqu
agrupadasporeltipodevaloresquedevuelven.

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

11/20

28/3/2015

IniciacinalLenguajeSQL

FuncinDescripcin
CHRConvierteunCdigoASCIIenunacadenadecarcter
CHR(67)devuelvelaletraC.
RTRIMoTRIMQuitalosblancosqueexistanporladerechaenunacadena
RTRIM(ABC)devuelveABC.
LTRIMQuitalosblancosporlaizquierdaquetengaunacadena
LTRIM(ABC)devuelveABC.
UPPERConviertecadaletradeunacadenaamayscula
UPPER(cadena)devuelveCADENA.
LOWERConvierteaminsculacadaletradeunacadena
LOWER(CADENA)devuelvecadena.
LEFTDevuelvelosnprimeroscaracteresporlaizquierda
LEFT(Cadena,3)devuelveCad.
RIGHTDevuelvelosnltimoscaracteresdeunacadena
RIGTH(Cadena,4)devuelvedena.
SUBSTRDevuelveunasubcadenadeunacadena.Losparmetrossonlacadena,laposicindelprimercarctera
extraeryelnmerodecaracteresaextraer.
SUBSTR(Cadenadeletras,4,6)devuelveenade.
SUBSTR(Cadena,5)devuelvena.
SPACEGeneraunacadenadeespaciosenblanco.
SPACE(5)devuelve.
DTOCConvierteunafechaaunacadenadecaracteres.Unsegundoparmetroopcionaldeterminaelformatodel
resultado:
0(pordefecto)devuelveMM/DD/YY.
1devuelveDD/MM/YY.
2devuelveYY/MM/DD.
10devuelveMM/DD/YYYY.
11devuelveDD/MM/YYYY.
12devuelveYYYY/MM/DD.
Puedeexistiruntercerparmetroopcionalparadeterminarelcarcterquesequiereutilizarcomoseparador.Sino
seespecificasetomael(/).
DTOC({01/30/89})devuelve01/30/89
DTOC({01/30/89},0)devuelve01/30/89
DTOC({01/30/89},1)devuelve30/01/89
DTOC({01/30/89,11,)devuelve01301989
DTPOSConvierteunafechaenunacadenadecaracteresusandoelformatoYYYYMMDD.
DTPOS({01/23/90})devuelve19900123.
IIFDevuelveunodedosposiblesvalores.Losparmetrossontres:elprimeroesunaexpresinlgica,elsegundo
elvaloradevolversilaexpresinescierta,yelltimo,elvaloradevolversiesfalsa.
IIF(SEXO=V,Masculino,Femenino)devolveralapalabraMasculinosielcamposexocontienelaVecaso
contrariodevolveralapalabraFemenino.
STRConvierteunnumeroenunacadena.Losparmetrossonelnmero,eltotaldeposicionesadevolver
(incluyendoelpuntodecimal)yotroopcionalparaindicarelnmerodedgitosaladerechadepuntodecimal.
STR(12.34567,4)devuelve12
STR(12.34567,4,1)devuelve12.3
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

12/20

28/3/2015

IniciacinalLenguajeSQL

STR(12.34567,6,3)devuelve12.346
STRVALConvierteunvalordecualquiertipoaunacadenadecaracteres
STRVAL(Cadena)devuelveCadena
STRVAL({12/25/53})devuelve12/25/53
STRVAL(5*3)devuelve15
STRVAL(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)devuelve123
ROUND(123.456,2)devuelve123.46
ROUND(123.456,2)devuelve100
NUMVALConvierteunacadenadecaracteresaunnmero.SilacadenaVALnoesunnmerosedevuelveelvalor
0.
NUMVAL(123)devuelve123
NUMVAL(12A)devuelve0

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

13/20

28/3/2015

IniciacinalLenguajeSQL

DATEDevuelvelafechadehoy.
Sihoyes25/12/89,DATE()devuelve{12/25/89}
DATEVALConvierteunacadenadecaracteresaunafecha.
DATEVAL(01/30/89)devuelve{01/30/89}
CTODConvierteunacadenadecaracteresaunafecha.Sepuedeutilizarunsegundoparmetroparaespecificarel
formatodelafechadevuelta: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()FECHA<=5
Estasentencianosdirelnmerototaldehorasausenciasdelosalumnosenlosltimos5das.
SELECTNOMBRE+''+APELLIDOS,YEAR(TODAY())YEAR(FECHA_NACIMIENTO)FROMALUMNOS
Mostraracadaalumnoconsuedadenaos(Cumplidosoquecumplir)
Paratenerencuentaelmesydaactualesycalcularlaedadsera:
SELECTNOMBRE+''+APELLIDOS,IIF(MONTH(FECHA_NACIMIENTO)>MONTH(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.Sielusuariolohicieraesbajo
supropiaresponsabilidad.Noobstantesedalaposibilidaddecrearsesuspropiastablasy,porsupuesto,borrarlas.
LasentenciaparacrearunatablaesCREATEyparadestruirlaDROP.

Creacindeunatabla
Lasentenciaparacrearunatablatienelaforma:
CREATETABLEnombre_fichero(definicin_columna,...)
nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasolo
elnombredelficherosecreaeneldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).
definicin_columnaestacompuestoporelnombredelacolumnaocampo,seguidadeltipodedatodedicha
columna.
LosnombresdecolumnanodebentenerespaciosenblancoylostiposdedatosdisponiblesparaParadoxson:
ALPHANUMERICSusvalorespuedentenerletras,nmerosocaracteresdepuntuacin.Seprecisaunparmetro
paralalongitudmximaquesequierealmacenaryestanopuedesobrepasarlos255caracteres.Porejemplo
ALPHANUMERIC(12).TambinsepuedeutilizarlapalabraCHARenlugardeALPHANUMERIC.
BLOBSusvalorescontienenunaclasededatosbinariosdelongitudindefinidaquesesuelenutilizarparaimgenes.
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

14/20

28/3/2015

IniciacinalLenguajeSQL

CURRENCYSusvalorescontienensolonmerosempleadosencantidadesmonetarias.Empleanelmismoformato
queeltipoNUMBER.
DATESeempleaparaalmacenarfechas.
MEMOSeempleaparatextodelongitudindefinidacuandoeltipoALPHANUMERICsequedacorto.
NUMBERSeempleaparacantidadesnumricasengeneral.Puedenalmacenardecimalesysigno.Internamentese
almacenancomodecimalesdecomaflotantededobleprecisin.
SHORTSolopuedecontenernmerosenterosentrelosvalores32767y32767.
Nota:BLOByMEMOnosepuedenutilizarenlaclusulaWHEREytampocopuedenformarpartedeunaclave.
Ejemplodecreacindeunatabladelibros:
CREATETABLED:\LIBROS(TITULOCHAR(200),PAGINASSHORT,PRECIOCURRENCY,
FECHA_COMPRADATE,PORTADABLOB,RESUMENMEMO)

Destruccindeunatabla
Elformatoparadestruiroborraruntablaes
DROPTABLEnombrefichero
nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasolo
elnombredelficheroseutilizaeldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).
Lasentenciaparaborrarlatablaantescreadaes
DROPTABLED:\LIBROS

SentenciaINSERT
LasentenciadeINSERTseutilizaparaaadirregistrosalastablasdelabasededatos.Elformatodelasentencia
es:
INSERTINTOnombre_fichero[(nombre_columna,...)]VALUES(expr,...)
nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasolo
elnombredelficheroseutilizaeldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).
nombre_columnaesunalistaopcionaldenombresdecampoenlosqueseinsertarnvaloresenelmismonmeroy
ordenqueseespecificarnenlaclusulaVALUES.Sinoseespecificalalistadecampos,losvaloresdeexprenla
clusulaVALUESdebensertantoscomocampostengalatablayenelmismoordenquesedefinieronalcrearla
tabla.
expresunalistadeexpresionesovaloresconstantes,separadosporcomas,paradarvaloralosdistintoscampos
delregistroqueseaadiralatabla.Lascadenasdecaracteresdebernestarencerradasentrecomillaso"ylas
fechasentrellaves{}.
EjemploparaaadirunregistroalatablacreadaenelejemplodeCREATE:
INSERTINTOD:\LIBROS(TITULO,PAGINAS,FECHA)VALUES(GestinEscolarIntegrada,234,
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

15/20

28/3/2015

IniciacinalLenguajeSQL

{12/27/95})
CadasentenciaINSERTaadeunnicoregistroalatabla.Enelejemplosolosehanespecificado3camposcon
susrespectivosvalores,elrestodecamposquedarananulo.UnvalornuloNULLnosignificablancosocerossino
simplementequeelcamponuncahatenidounvalor.
SepuedeninsertarregistrosenunficherodelaBasedeDatos,procedentesdeunficherodetexto,mediantela
sentenciapropiadeIES2000quetienelaforma:
INSERTINTOnombre_fichero[(nombre_columna,...)]FROMfichero_ascii
Paraentenderelfuncionamientodeestasentencia,simplemente,seindicarqueporcadalneadelficherodetexto
elprogramalaconvertirenunasentenciaIINSERTylaejecutar.Porlotanto,enelficherodetexto,laslneas
debernserdelamismaformaqueseexplicenexpr,conladiferencia,dequelasfechasnoirnentrellaves,ya
queeselprogramaelqueseencargadeponerlas.
Medianteestaltimasentencia,podremosimportardatosdecualquieraplicacin,siempreycuandosehayan
convertido,previamente,aASCII.TambinpodremosaadirregistrosdeunficherodelaBasedeDatosaotrooal
mismoconlautilidaddeexportarelresultadodeunaconsultaSQLy,posteriormenteimportarlosconlasentencia
vistaanteriormente.

SentenciaUPDATE
LasentenciaUPDATEseutilizaparacambiarelcontenidodelosregistrosdeunatabladelabasededatos.Su
formatoes:
UPDATEnombre_ficheroSETnombre_columna=expr,...[WHERE{condicin}]
nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasolo
elnombredelficheroseutilizaeldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).
nombre_columnaeselnombredecolumnaocampocuyovalorsedeseacambiar.Enunamismasentencia
UPDATEpuedenactualizarsevarioscamposdecadaregistrodelatabla.
expreselnuevovalorquesedeseaasignaralcampoqueleprecede.Laexpresinpuedeserunvalorconstanteo
unasubconsulta.Lascadenasdecaracteresdebernestarencerradasentrecomillaso"ylasfechasentrellaves
{}.Lassubconsultasentreparntesis.
LaclusulaWHEREsigueelmismoformatoquelavistaenlasentenciaSELECTydeterminaqueregistrosse
modificarn.
Porejemplo,subirelpreciodecompradelatabladelibrosun10%deaquellosquetenganmsde250pginas,
sera:
UPDATED:\LIBROSSETPRECIO=PRECIO*1.1WHEREPAGINAS>250
Otroejemplo,parafijarlafechadematrculadetodosaquellosalumnosquelatienenvacaalafechadehoy,se
pondra:
UPDATEMATRICULSETFECHA_MATRICULA=TODAY()WHEREFECHA_MATRICULAISNULL
Ejemploutilizandounasubconsulta:
UPDATED:\LIBROSSETPRECIO=(SELECTAVG(PRECIO)FROMD:\LIBROSWHEREPRECIOIS
NOTNULL)WHEREPRECIOISNULL

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

16/20

28/3/2015

IniciacinalLenguajeSQL

Conestaltimasentenciasehapuestoprecioatodosloslibrosquenolotenan.Esepreciohasidoelresultante
decalcularlamedaentreloslibrosquesilotenan.

SentenciaDELETE
LasentenciaDELETEseutilizaparaborrarregistrosdeunatabladelabasededatos.Elformatodelasentencia
es:
DELETEFROMnombre_fichero[WHERE{condicin}]
nombre_ficheropuedesernicamenteelnombredelficherooelnombrecompletoconsucamino.Siseutilizasolo
elnombredelficheroseutilizaeldirectoriodondeseencuentranlosficherosdelaaplicacin(C:\geiwin\datos).
LaclusulaWHEREsigueelmismoformatoquelavistaenlasentenciaSELECTydeterminaqueregistrosse
borrarn.
CadasentenciaDELETEborralosregistrosquecumplenlacondicinimpuestaotodossinoseindicaclusula
WHERE.
DELETEFROMD:\LIBROSWHEREMOD(TODAYFECHA,365)>20
Conelejemploanteriorseborrarantodoslosregistrosdelatablalibroscuyaantigedad,desdelafechade
adquisicin,fueramayorde20aos.
Paraborrarlasnotasdeevaluacionesque,noseanlaFinal,delosalumnosdeaosanterioresseutilizarala
sentencia:
DELETEFROMNOTASWHEREANNO<1995ANDEVALUACION<>F

Ficherosdendices
Unndiceesunaherramientautilizadaporelsistemaparaoptimizarelaccesoalosdatosdelosficherosotablas
delabasededatos.LosndicesenParadoxsealmacenanenficherosdistintosdedondelohacenlosdatosy
puedenserdedosclaseprimariosynoprimarios.

ndiceprimario
UnndiceprimarioenunatablaParadoxestcompuestodeunoomscamposconsecutivosdelatabla,
comenzandoconelprimeroyestosformanlaclaveprimaria.Unatablasolopuedetenerunndiceprimario.
Laclaveprimariadeunatablaidentificaacadaregistroenlatabla,portanto,dosregistroscualesquieranopueden
tenerlosmismosvaloresenloscamposqueformanlaclaveprimaria.Siaunatablasinndiceprimarioselecrea
todosaquellosregistrosquetuvieranvaloresidnticosenlaclaveprimariadeborraran,aexcepcindelprimeroque
semantendra.
Losndicesprimariossemantienenautomticamenteesdecir,sisemodifica,aadeoborraunregistroenlatabla,
elndiceprimarioseactualizaautomticamenteparareflejarelcambio.
Unndiceprimarioesunnicoficheroconelmismonombrequelatablaenlaqueestabasadoperoconla
extensin.PX

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

17/20

28/3/2015

IniciacinalLenguajeSQL

Alcontrariodeloqueocurreconlosndicesprimarios,unndicenoprimarionoidentificadeformanicaacada
registrodeunatablaesdecir,dosomsregistrospuedencompartirlosmismosvaloresenloscamposqueforman
laclavenoprimaria.UnatablaParadoxpuedetenermsdeunndicenoprimario,ypuedenestarbasadosen
distintoscamposyenelordendeseado.
Existendosclasedendicesnoprimarios:mantenidosynomantenidos.Ladiferenciaentreunosyotrosestribaen
quelosprimerosseactualizanautomticamentecuandolatablacambia,mientrasquelossegundossimplemente
quedanmarcadoscomodesactualizadosyseactualizanlaprximavezquesonusados.
Parapoderdisponerdendicesnoprimariosenunatabla,esprecisotenercreadoanteselndiceprimario.
Losndicesnoprimariosqueconstandeunnicocampoclaveyquehacendistincinentremaysculasminsculas
compartenlosmismosnombresdeficherosquelastablasalasquepertenecenperoselesasignalasextensiones
.X01hastaXFFdependiendodelndecampoenelqueestnbasados.Losndicesconunnicocampoenlaclave
peroquenohacendistincinentremaysculasyminsculasolosquetienenmsdeuncampoenlaclaveposeen
elmismonombrequesutablaperoconlasextensionesqueempiezanen.XG0conincrementosenhexadecimal
hastaelndendicesqueposealatabla.

Sentenciasparacrearodestruirndices
Lastablasdelaaplicacindisponendesuspropiosndicesquenodebensermodificadosnidestruidas.Siel
usuariolohicieraesbajosupropiaresponsabilidad.Noobstantesedalaposibilidaddecrearselosndicesparasus
propiastablasoaadirotrosalasdelaaplicacin.Comotambinborrarlospropios.
LasentenciaparacrearunndiceesCREATEINDEXyparadestruirloDROPINDEX.

Sentenciacrearndiceprimario
Lasintaxisparacrearunndiceprimarioeslasiguiente:
CREATEINDEXPRIMARYONnombre_fichero(nombre_columna[,nombre_columna...])
nombre_ficheroeselnombredelatablaenlacualsebasaelndice.
nombre_columnaeslalistadecamposquecomponenlaclaveprimariadelndice.Debeenumerarunooms
camposconsecutivosdelatabla,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
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

18/20

28/3/2015

IniciacinalLenguajeSQL

incluye,sihaydistincin.
nombre_ficheroeselnombredelatablaenlaquesebasaelndice.
nombre_columnaeselnombredelcampoocamposqueformanlaclavenoprimariadelndice,puedeestaren
cualquierorden.
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.Puedeconsistirsolamentedeunnombrede
ficheroodeuncaminocompleto.
nombre_indiceeselnombrequeselediocuandofuecreado.

Transacciones
Unatransaccinesunaseriedecambiosenlabasededatosquedebensertratadascomounasola.Enotras
palabras,queserealicentodosoquenosehaganinguno,puesdelocontrariosepodranproducirinconsistencias
enlabasededatos.
Cuandonosetieneactivadaunatransaccinelgestordebasededatosejecutainmediatamentecadasentencia
INSERT,UPDATEoDELETEqueseleencomiende,sinposibilidaddedeshacerloscambioencasodeocurrir
cualquierpercance.Cuandoseactivaunatransaccinloscambiosquesevanrealizandoquedanenunestadode
provisionalidadhastaqueserealizaunCOMMIT,elcualhardefinitivosloscambiosohastarealizarun
ROLLBACKquedeshartodosloscambiosproducidosdesdequeseinicilatransaccin.
ElinterpreteSQL,quesevermsadelante,permiterealizartransacciones.Conelbotn<Transaccin>lainiciar,
conelbotn<Realizar>producirunCOMMITyconelbotn<Deshacer>producirunROLLBACK.

MejorasenelrendimientodelinterpreteSQL
EllenguajeSQLesnoprocedimental,esdecir,enlassentenciasseindicaquequeremosconseguirynocomolo
http://www.pablin.com.ar/computer/cursos/varios/sql1.htm

19/20

28/3/2015

IniciacinalLenguajeSQL

tienequehacerelinterpreteparaconseguirlo.Estoespurateora,puesenlapracticaatodoslosgestoresdeSQL
hayqueespecificarsuspropiostruquitosparaoptimizarelrendimiento.
Portanto,muchasvecesnobastaconespecificarunasentenciaSQLcorrecta,sinoqueadems,hayqueindicarle
comotienequehacerlosiqueremosqueeltiempoderespuestaseaelmnimo.Enesteapartadoveremoscomo
mejorareltiempoderespuestadenuestrointerpreteanteunasdeterminadassituaciones:
SeprocurarelegirenlaclusulaWHEREaquelloscamposqueformenpartedelaclavedelficheroporel
cualinterrogamos.Ademsseespecificarnenelmismoordenenelqueestndefinidosenlaclave.Por
ejemplo,siinterrogamosalficheroMATRICULlasentenciawheredeberllevarenprimerlugarMATRICULA
=valor,despuspuedellevarANNO=valor,yassucesivamentesiguiendoelordenenelqueestdefinida
laclave.(VerelapartadodeestructuradelaBasedeDatosparaobservarelficheroMATRICUL).
Sielficherocontieneotrasclaves,ademsdelaprimaria,sepuedeutilizarelmismocriterio.Porejemplo,
comoMATRICULcontienedosclavessecundarias,conlaprimerapodemosinterrogardeformaoptima
indicandoenlaclusulawhereANNO=valorANDGRUPO=valorAND....,yconlasegundaclaveANNO
=valorandESTUDIOS=valorAND....Porlotantosienlaclusulawherealaccederaesteficherono
indicamosqueMATRICULAcontengaundeterminadovaloroqueANNOnotengaotro,noseconseguirun
accesorpidopueselgestornopodrutilizarningnndiceytendrquehacerseunrecorridosecuencialpor
todoelfichero.
Cuandoserealicenenlacesdetablas,elhacerloyenelordenadecuadoutilizandondices,ayudarmuchoa
optimizarelrendimiento,puesdelocontrariopuedeconsumirmuchotiempo.

Porejemplo,dadalasentencia:
SELECTAPELLIDOSFROMALUMNOS,MATRICULWHEREALUMNOS.MATRICULA=
MATRICUL.MATRICULAANDMATRICULA.ANNO=1995ANDMATRICUL.TIPO=O
EnestasentenciasehanenlazadolatablaALUMNOSyMATRICULasutilizandoelcampoclaveMATRICULAde
ambastablas.PeroelinterpreteserecorrercadaunodelosregistrosdelficheroALUMNOSycomprobarpara
cadaunodeellossiposeeMATRICULaOficialenelao1995.
Lomslgicoserahacerloalcontrario,esdecir,paracadaMATRICULaOficialdelao1995seaccedealfichero
ALUMNOSconelcampoMATRICULAyseconsiguesusapellidos.Deestaformanosahorramoseltenerque
recorrernostodoelficherodeALUMNOS.Quizpiensequenostenemosquerecorrertodoelficherode
MATRICULasyquehemoscomplicadoelproblema,perolociertoesquecomoimponemosrestriccionescon
camposclaveelaccesoesnicamentealosregistrosquecumplanlacondicinimpuesta.
Portanto,lasentenciaanteriordeberaser:
SELECTAPELLIDOSFROMMATRICUL,ALUMNOSWHEREALUMNOS.MATRICULA=
MATRICUL.MATRICULAANDMATRICULA.ANNO=1995ANDMATRICUL.TIPO=O
LonicoquehacambiadoeselordendeenumeracindelosficherosenlaclusulaFrom.Tengasiempreen
cuentaqueelrecorridoseefectuarsiempreempezandoporelficheroqueenumeremosenprimerlugar,luegoporel
segundoyassucesivamente.

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

20/20

You might also like