Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Apuntes Basicos SQL PDF
Apuntes Basicos SQL PDF
.
1ada base de datos tiene unos tipos de0inidosN en nuest%o casoN %esu9iendo 2consu&ta% &a
docu9entacin pa%a 9s in0o%9acin3 tene9os &os siguientes tipos:
*ULL
$*(EAER pa%a gua%da% nE9e%os ente%os.
REAL pa%a nE9e%os %ea&es.
(EO( pa%a gua%da% tePto
4L54 pa%a gua%da% datos bina%ios
Pa%a 9s in0o%9acin sob%e SQLite ve%sin # se puede consu&ta% &a docu9entacin sob%e tipos
de datos en 2Qttp:LL]]].s)&ite.o%gLdatat,pe#.Qt9&3.
-anos a &a ob%a
Ca9os a @uga% un poco con &os co9andos pa%a entende%&os. Bo Qe %ea&izado &os e@e9p&os en
&a conso&a de SQLite )ue puedes desca%ga%te en 2Qttp:LL]]].s)&ite.o%gL3. En p%incipio no
debie%as tene% pegas pa%a usa% cua&)uie% ot%a base de datosN ,o Qe uti&izado esta po%)ue es &a
)ue esto, usando en 9i p%o,ecto actua&.
*otas espec/0icas de SQLite
En &a conso&a de SQLite si tec&eas .Qe&p obtend%s a,uda sob%e &os co9andos *5 SQL de &a
base de datos )ue nos pe%9iten inte%actua% con esta base de datos conc%eta. >/@ate en )ue
todos estos co9andos van p%ecedidos po% un punto , no te%9inan en punto , co9a.
1o9andos )ue nos %esu&ta%n Eti&es son:
. .tab&es Este nos 9uest%a )ue tab&as tene9os de0inidas en &a base de datos abie%ta en
este 9o9ento.
!. .bac=up ^no9b%e a%cQivo_ *os pe%9ite gua%da% en disco &a base de datos con &a )ue
esta9os t%aba@ando.
#. .%esto%e ^no9b%e a%cQivo_ *os pe%9ite ca%ga% en 9e9o%ia una base de datos
p%evia9ente gua%dada en disco.
8. .du9p ^no9b%e tab&a_ *os 9uest%a &a de0inicin en &engua@e SQL de &a tab&a )ue &e
indica9os.
Esto no es cie%to pa%a todas &as bases de datosN actua&9ente es posib&e no indica% )ue tipo de datos 9ete9os
, &a base de datos po% si 9is9a dete%9ina% )ue tipo es cada dato a 9edida )ue se &os 9ete. AEn as/ es buena
costu9b%e especi0ica%&os , segui% &a de0inicin inicia& )ue Qace9os.
Pgina de !8
Revisin: 8
1%eando una tab&a 21REA(E3
Ca9os a c%ea% una tab&a de e@e9p&o:
1REA(E (A4LE 1ontactos 2*o9b%e (EO(NApe&&idos (EO(NEdad $*(EAER3R
Esta sentencia nos c%ea una tab&a con t%es co&u9nas. *o9b%eNApe&&idos , Edad donde i%e9os
9etiendo datos.
Si aQo%a tec&ea9os .tab&es ve%e9os )ue se Qa c%eado una nueva tab&a &&a9ada 1ontactos.
$nse%tando datos en una tab&a 2$*SER(3
-eta9os unos contactos en &a tab&a:
$*SER( $*(5 1ontactos CALUES 2SUnaiSNSEstebanezSN#!3R
$*SER( $*(5 1ontactos CALUES 2S?onSNSMa%agozaSN#.3R
$*SER( $*(5 1ontactos CALUES 2S?onSNS>e%nandezSN!83R
$*SER( $*(5 1ontactos CALUES 2SUnaiSNS4i&baoSN#!3R
$*SER( $*(5 1ontactos CALUES 2S4asi&ioSNSRa9osSNT.3R
$*SER( $*(5 1ontactos CALUES 2SAnd%esSNSAgui%%eSN#3R
Actua&izando datos de un %egist%o 2UP+A(E3
1a9bia9os a 4asi&io po% A%antza:
UP+A(E 1ontactos SE( *o9b%e`SA%antzaS 67ERE *o9b%e`S4asi&ioSR
4o%%ando %egist%os2+ELE(E3
4o%%a9os a And%es:
+ELE(E >R5- 1ontactos 67ERE *o9b%e`SAnd%esSR
Recupe%ando datos de una tab&a 2SELE1(3
Pa%a %ecupe%a% datos de una tab&a uti&iza%e9os e& co9ando SELE1(:
E& 0o%9ato gene%a& de esta sentencia es:
SELE1( ^co&u9nas sepa%adas po% co9as_ >R5- ^tab&a_R
E@e9p&os:
SELE1( W >R5- 1ontactosR Recupe%a todas &as co&u9nas de &a tab&a
SELE1( *o9b%e >R5- 1ontactosR Recupe%a todos &os no9b%es de &a tab&a
SELE1( *o9b%eNEdad >R5- 1ontactosR Recupe%a todos &os no9b%es , edades de &a tab&a
Pgina ! de !8
Revisin: 8
4o%%ando una tab&a 2+R5P3
Suponga9os )ue tene9os una tab&a &&a9ada USUAR$5S , )ue%e9os e&i9ina%&aN uti&iza%e9os
&a sentencia +R5P , antes co9p%oba%e9os )ue ePista 2$> EO$S(S3:
+R5P (A4LE $> EO$S(S USUAR$5SR
1onsu&tas con p%edicado
Se &&a9a p%edicado a &o )ue va ent%e e& SELE1( , e& p%i9e% no9b%e de co&u9na )ue va9os a
%ecupe%a%. Si%ven pa%a 9odi0ica% e& co9po%ta9iento de &as consu&tas.
E@e9p&o:
SELE1( +$S($*1( *o9b%e >R5- 1ontactosR
*os devo&ve% todos &os no9b%e de &a tab&a contactos pe%o o9iti% &as 0i&as cu,os ca9pos
se&eccionados coincidan tota&9ente.
En este ot%o caso so&o nos o9iti% &as 0i&as en &as )ue coincidan &os dos ca9pos.
SELE1( +$S($*1( *o9b%eNEdad >R5- 1ontactosR
P%edicados co9unes son:
+$S($*1( 59iti% &as 0i&as cu,os ca9pos se&eccionados coincidan tota&9ente
ALL +evue&ve todos &os ca9pos de &a tab&a
(5P +evue&ve un dete%9inado nE9e%o de %egist%os de &a tab&a. En SQLite se sopo%ta
co9o L$-$(.
SELE1( W >R5- 1ontactos L$-$( !R
+$S($*1(R56 59ite &as 0i&as dup&icadas basndose en &a tota&idad de& %egist%o , no
so&o en &os ca9pos se&eccionados. Esto no &o sopo%ta SQLite.
1&usu&as
Son condiciones de 9odi0icacin pa%a de0ini% &os datos )ue desea9os se&ecciona% o
9anipu&a%. Ba &as Qe9os uti&izado sin da%nos cuentaN >R5- es una de e&&as.
E0ectiva9ente >R5- Uespeci0icaV de )ue tab&a )ue%e9os obtene% &os datosN es po% tanto una
c&usu&a.
1&usu&as co9unes son
>R5- Especi0ica &a tab&a de &a )ue coge9os &os %egist%os
67ERE $ndica condiciones )ue deben cu9p&i% &os %egist%os se&eccionados
AR5UP 4B Sepa%a &os %egist%os se&eccionados en g%upos espec/0icos.
Pgina # de !8
Revisin: 8
7AC$*A $ndica &a condicin )ue debe cu9p&i% cada g%upo.
5R+ER 4B 5%dena &os %egist%os segEn &o )ue &e indi)ue9os.
E@e9p&os:
Los 9a,o%es de #. aFos: SELE1( W >R5- 1ontactos 67ERE Edad _ #.R
Los )ue se &&a9an Unai: SELE1( W >R5- 1ontactos 67ERE *o9b%e`SUnaiSR
5pe%ado%es pa%a &a c&usu&a 67ERE
La c&usu&a 67ERE ad9ite co9binaciones pa%a especi0ica% 9e@o% &o )ue )uie%es se&ecciona%:
5pe%ado% Signi0icado
^_ +istinto
^ -eno%
_ -a,o%
^` -eno% o igua&
_` -a,o% o igua&
4E(6EE* $ndica un %ango 2nu9%icoN tePtoN0ecQaN...3
L$:E 4usca un pat%n
$* $ndica un va&o% conc%eto
` $gua&
A*+ B &gico
5R 5 &gico
*5( *egacin &gica
E@e9p&os:
(odos &os )ue se &&a9en ?on , tengan #. aFos o 9s.
SELE1( W >R5- 1ontactos 67ERE *o9b%e`S?onS A*+ Edad _` #.R
E& A*+ , e& 5R se pueden co9bina% usando pa%ntesis pa%a ag%upa% &as condiciones:
SELE1( W >R5- 1ontactos 67ERE 2*o9b%e`S?onS 5R *o9b%e`SUnaiS3 A*+ 2Edad _` #.3R
*os da todos &os no9b%e o%denados ascendente:
SELE1( W >R5- 1ontactos 5R+ER 4B *o9b%eR
Esto es e)uiva&ente a:
SELE1( W >R5- 1ontactos 5R+ER 4B *o9b%e AS1R
*os da todos &os no9b%e o%denados descendente:
Pgina 8 de !8
Revisin: 8
SELE1( W >R5- 1ontactos 5R+ER 4B *o9b%e +ES1R
(odos &os )ue tengan un no9b%e ent%e UA%antzaV , U?onV:
SELE1( W >%o9 1ontactos 67ERE *o9b%e 4E(6EE* SA%antzaS A*+ S?onSR
(odos &os )ue tengan #. o #! aFos:
SELE1( W >%o9 1ontactos 67ERE Edad $* 2#.N#!3R
(odos cu,o no9b%e acabe en UnV: 2E& a indica cua&)uie% nE9e%o de ca%acte%es antes o
despusN en este caso antes3.
SELE1( W >%o9 1ontactos 67ERE *o9b%e L$:E banbR
(odos &os )ue *5 acaben en UnV:
SELE1( W >%o9 1ontactos 67ERE *o9b%e *5( L$:E banbR
1o9odines pa%a e& L$:E
1o9od/n +esc%ipcin
a Sustituto pa%a ce%o o 9s ca%acte%es.
c Sustituto pa%a ePacta9ente un ca%cte%
X&ista ca%acte%esY 1ua&)uie% ca%cte% de &a &ista
Xd&ista ca%acte%esY
o bien
Xe&ista ca%acte%esY
1ua&)uie% ca%cte% )ue no est en &a &ista
E& AR5UP 4B e& 7AC$*A &os ve%e9os en un apa%tado espec/0ico puesto )ue %e)uie%en a&go
9s de conoci9ientos.
A&ias
Si%ven pa%a asigna% un no9b%e a&te%nativo a a&guna tab&a o co&u9na.
Es Eti& cuando tene9os no9b%e 9u, &a%gos de co&u9na o tab&a , )ue%e9os %e0e%i%nos a e&&os
de 0o%9a 9s c9oda:
E@e9p&o:
SELE1( Ape&&idos AS A >R5- 1ontactos 67ERE A L$:E SaaaSR
7e9os se&eccionado todos &os ape&&idosN &es Qe9os asignado un a&ias UAV , Qe9os QecQo una
se&eccin de todos &os )ue tienen una UaV.
Sin a&ias Qubiese )uedado:
SELE1( Ape&&idos >R5- 1ontactos 67ERE Ape&&idos L$:E SaaaSR
En este caso puede no pa%ece% 9u, i9p%esionante puesto )ue ocupa p%ctica9ente &o
9is9oN pe%o en consu&tas 9s co9p&e@as , con va%ios ca9pos puede aQo%%a%nos bastante
espacio.
Pgina ; de !8
Revisin: 8
Pgina T de !8
Revisin: 8
5pe%ando con va%ias tab&as
7asta aQo%a Qe9os visto senci&&as ope%aciones sob%e una so&a tab&aN pe%o este no es e& caso
9s co9En. 7abitua&9ente tend%e9os va%ias tab&as sob%e &as )ue ope%a% pa%a obtene% &os
datos )ue necesita9os.
Pa%a pode% %e&aciona% ent%e si va%ias tab&as tend%e9os )ue Qace% )ue tengan a&go en co9En.
1onceptos de c&aves 2P%i9a%, =e,3
Esos datos en co9En ent%e va%ias tab&as son &as c&aves. 1uando una co&u9na tiene va&o%es
)ue son Enicos pa%a cada %egist%oN de 0o%9a )ue se pueda distingui% dos %egist%os )ue de ot%a
0o%9a se%/an igua&esN se dice )ue esa co&u9na es &a c&ave p%i9a%ia.
Una p%i9a%, =e, no tiene po%)ue esta% 0o%9ada po% una so&a co&u9naN pod%/a esta%
co9puesta po% 9s de una.
Pa%a e&&o debe9os especi0ica% a& c%ea% &a tab&a cua& es nuest%a p%i9a%, =e,.
En ot%as bases de datos es posib&e aFadi% una co&u9na )ue sea p%i9a%, =e, una vez c%eada &a
base de datos. En nuest%o casoN con SQLiteN no pode9os Qace% eso. +ebe9os po% tanto c%ea%
&a tab&a de nuevo desde ce%o.
4o%%a9os &a tab&a )ue ,a ten/a9os:
+R5P (A4LE 1ontactosR
1%ea9os &a nueva tab&a con una c&ave p%i9a%ia , )ue no puede %epeti%se2ccid3 :
1REA(E (A4LE 1ontactos 2 ccid $*(EAER *5( *ULL PR$-ARB :EB AS1Nno9b%e
(EO(Nape&&idos (EO(Nedad $*(EAER 3R
$nse%ta9os &os va&o%es de antes:
$*SER( $*(5 1ontactos 2no9b%eNape&&idosNedad3 CALUES 2SUnaiSNSEstebanezSN#!3R
$*SER( $*(5 1ontactos 2no9b%eNape&&idosNedad3 CALUES 2S?onSNSMa%agozaSN#.3R
$*SER( $*(5 1ontactos 2no9b%eNape&&idosNedad3 CALUES 2S?onSNS>e%nandezSN!83R
$*SER( $*(5 1ontactos 2no9b%eNape&&idosNedad3 CALUES 2SUnaiSNS4i&baoSN#!3R
$*SER( $*(5 1ontactos 2no9b%eNape&&idosNedad3 CALUES 2S4asi&ioSNSRa9osSNT.3R
$*SER( $*(5 1ontactos 2no9b%eNape&&idosNedad3 CALUES 2SAnd%esSNSAgui%%eSN#3R
Si os dais cuentaNno Qe9os indicado e& va&o% de& ca9po c&ave p%i9a%iaN e& so&o se auto
inc%e9enta pues as/ se &o Qe9os indicado.
Pgina < de !8
Revisin: 8
Una tab&a con va%ias p%i9a%, =e,s
Pode9os de0ini% )ue una tab&a tenga va%ios ca9pos co9o p%i9a%, =e,N ve9os&o con un
e@e9p&o:
Suponga9os )ue )ue%e9os de0ini% t%es tab&asN una de usua%ios de un se%vicio de te&e0on/aN
ot%a )ue asocia a cada usua%io con uno o va%ios 9vi&es , ot%a )ue asocia datos de tie9po
%ea& obtenidos de& 9vi&. Esta E&ti9a esta% asociada tanto con cada usua%io co9o con cada
9vi&N ade9s pa%a un 9o9ento20ecQa , Qo%a3 dados tend%e9os un con@unto de datos
conc%eto pa%a cada usua%io , 9vi&.
Las sentencias SQL de c%eacin de &as tab&as )ueda%/an ta& , co9o sigue:
1REA(E (A4LE USUAR$5S 2 $+ (EO( *5( *ULL PR$-ARB :EB 3R
1REA(E (A4LE (ELE>5*5S 2 $P (EO(N *U-ER5 (EO( *5( *ULL PR$-ARB :EBN 4A(ER$A
$*(EAERN $+ (EO( *5( *ULLN>5RE$A* :EB 2$+3 RE>ERE*1ES USUAR$5S 2$+33R
1REA(E (A4LE +A(5Sc(R 2 $+ (EO( *5( *ULLN*U-ER5 (EO( *5( *ULLN ($-ES(A-P (EO(
*5( *ULLN L5*A$(U+ REALNLA($(U+ REALNPRE1$S$5*c75R $*(EAERNAL($(U+
>L5A(NPRE1$S$5*cAL( $*(EAERNCEL51$+A+ $*(EAERNRU-45 $*(EAERN>5RE$A* :EB 2$+3
RE>ERE*1ES USUAR$5S 2$+3N>5RE$A* :EB 2*U-ER53 RE>ERE*1ES
(ELE>5*5S2*U-ER53NPR$-ARB :EB 2$+N*U-ER5N($-ES(A-P3 3R
Pgina 8 de !8
Revisin: 8
1onceptos de c&aves 2>o%eign =e,3
Se t%ata de una c&ave )ue no es p%i9a%ia en esta tab&a pe%o )ue si &o es en ot%a tab&a a &a )ue
se Qace %e0e%encia. Lo ac&a%o con un e@e9p&o:
ccid 2p%i9a%,c=e,3 *o9b%e Ape&&idos Edad
Unai Estbanez #!
! ?on Ma%agoza #.
ocid2p%i9a%,c=e,3 5%den de co9p%a ccid20o%eign =e,3
5RD !
! 5RD! !
# 5RD#
En este caso tene9os dos tab&asN una con contactos , ot%a con %denes de co9p%a. Se supone
)ue cada o%den de co9p%a )ue tene9os &a Qa %ea&izado uno de nuest%os contactos. 1o9o
debe9os sabe% a )uien pe%tenece cada o%den aFadi9os una co&u9na )ue es una c&ave
ePt%an@e%a 20o%eign =e,3 pa%a pode% c%uza% &os datos.
1%ee9os una nueva tab&a con &as o%denes donde &e indica9os &os dos tipos de c&aves:
1REA(E (A4LE 5%denes 2ocid $*(EAER *5( *ULL PR$-ARB :EB AS1No%den (EO(Nccid
$*(EAERN >5RE$A* :EB 2ccid3 RE>ERE*1ES 1ontactos 2ccid3 3R
$nse%ta9os nuest%a p%i9e%a o%den de co9p%aN )ue po% e& 9o9ento no est asociada a nadie:
$*SER( $*(5 5%denes 2o%den3 CALUES 2S5RDS3R
AQo%a &e asigna9os esa o%den a UUnai EstbanezV:
UP+A(E 5%denes SE( ccid`R
?oins
?oin es e& co9ando )ue uti&iza%e9os pa%a obtene% datos de va%ias tab&as %e&acionadas ent%e s/.
Los tipos de @oin son:
?5$* 2$**ER ?5$*3 +evue&ve &os %egist%os )ue tienen a& 9enos una coincidencia en &as
dos tab&as
LE>( ?5$* +evue&ve &os %egist%os de &a tab&a iz)uie%da inc&uso si no Qa, coincidencia con
&a tab&a de%ecQa
R$A7( ?5$* +evue&ve &os %egist%os de &a tab&a de%ecQa inc&uso si no Qa, coincidencia
con &a tab&a iz)uie%da. *o sopo%tada en SQLite.
>ULL ?5$* +evue&ve &os %egist%os )ue tienen coincidencia en una de &as tab&as. *o
sopo%tada en SQLite.
Pgina ' de !8
Revisin: 8
E@e9p&os:
4usca9os e& no9b%e de &as pe%sonas )ue tienen una o%den de co9p%a asociada:
SELE1( 1ontactos.no9b%eN 5%denes.5%den >R5- 1ontactos $**ER ?5$* 5%denes 5*
1ontactos.ccid ` 5%denes.ccidR
Esto nos devue&ve UUnaiV , su o%den de co9p%a U5RDV.
Esta ot%a sentencia SQL nos devo&ve% todos &os datos de &a tab&a de &a iz)uie%da:
SELE1( 1ontactos.no9b%eN 5%denes.5%den >R5- 1ontactos LE>( ?5$* 5%denes 5*
1ontactos.ccid ` 5%denes.ccidR
Esto nos devue&ve todos &os no9b%es pe%o so&o UUnaiV tend% una o%denN e& %esto tend% vac/o
ese ca9po.
Uniones 2U*$5* , U*$5* ALL3
Los ope%ado%es U*$5* , U*$5* ALL si%ve pa%a co9bina% &os datos de dos consu&tas.
Po% e@e9p&oN &os )ue tienen !8 , &os )ue tienen #! aFos:
SELE1( *o9b%eNApe&&idosNEdad >R5- 1ontactos 6Qe%e Edad ` !8
U*$5* ALL
SELE1( *o9b%eNApe&&idosNEdad >R5- 1ontactos 6Qe%e Edad ` #!R
E& U*$5* ALL pe%9ite dup&icados , e& U*$5* no.
Pgina !. de !8
Revisin: 8
>unciones
Si%ven pa%a Qace% c&cu&os sob%e g%upos de datos
!
. 7a, dos tipos de 0unciones:
. >unciones esca&a%es +evue&ven un va&o% Enico %esu&tante de p%ocesa% un dato.
U1ASE En SQLite es uppe%
L1ASE En SQLite es &o]e%
-$+
LE*
R5U*+
*56
>5R-A(
!. >unciones ag%egadas +evue&ven un va&o% Enico %esu&tante de p%ocesa% una co&u9na.
ACA
15U*(
>$RS(
LAS(
-AO
-$*
SU-
E@e9p&os de 0unciones ag%egadas:
1uenta &as co&u9nas Uno9b%eV de &a tab&a contactos.
SELE1( 15U*(2no9b%e3 >R5- 1ontactosR
La 9edia de &os p%ecios de &as o%denes:
SELE1( ACA2p%ecio3 >R5- 5%denesR
E@e9p&os de 0unciones esca&a%es:
Saca &os no9b%es en 9a,Escu&as:
SELE1( uppe%2no9b%e3 >R5- 1ontactosR
! Los no9b%es de 0unciones pueden ca9bia% con cada base de datos. 1onsu&tad e& 9anua& co%%espondiente.
Pgina ! de !8
Revisin: 8
AR5UP 4B
La sentencia AR5UP 4B si%ve pa%a ag%upa% %esu&tados en con@untos , de esta 0o%9a ap&ica%
ope%aciones sob%e esos con@untos. Se usan en con@uncin con &as 0unciones ag%egadas.
AntesN va9os a aFadi% una co&u9na a &a tab&a de %denesN se t%ata de& p%ecio de cada o%den:
AL(ER (A4LE 5%denes A++ p%ecio REALR
B aQo%a aFadi9os un p%ecio:
UP+A(E o%denes SE( p%ecio`! 67ERE ocid`R
Ca9os a aFadi% a&gunas o%denes 9as pa%a Qace% p%uebas con e& g%oup b,:
$*SER( $*(5 5%denes 2o%denNccidNp%ecio3 CALUES 2S5RD!SNN!;3R
$*SER( $*(5 5%denes 2o%denNccidNp%ecio3 CALUES 2S5RD#SN!N#.T3R
A continuacin va9os a obtene% todas &as o%denes de co9p%a , va9os a ag%upa%&as po%
no9b%e pa%a ade9s su9a% &os p%ecios )ue co%%esponden a cada no9b%e:
SELE1( no9b%eNape&&idosNSU-25%denes.p%ecio3 >R5- 1ontactos $**ER ?5$* 5%
denes 5* 1ontactos.ccid ` 5%denes.ccid AR5UP 4B no9b%eR
Esto pode9os Qace%&o po%)ue se Qa %ea&izado una ag%upacin po% no9b%e. Si no Qace9os &a
ag%upacin e& %esu&tado es tota&9ente distinto ,a )ue su9a todos &os p%ecios de &a co&u9na
p%ecios )ue sa&e t%as &a se&eccin.
7AC$*A
E& Qaving tiene su sentido po%)ue no es posib&e usa% 0unciones ag%egadas en e& 67ERE.
Po% e@e9p&o:
Ca9os a se&ecciona% de &a tab&a 1ontactos todos a)ue&&os )ue tengan e& 9is9o no9b%eN &os
ag%upa9os , su9a9os su edad:
SELE1( no9b%eNSU-2edad3 >R5- 1ontactos AR5UP 4B no9b%e 7AC$*A 15U*(2edad3 _ R
Pgina !! de !8
Revisin: 8
"ndices
Reco%de9os nuest%a tab&a de 1ontactosN en esta tab&a e@ecuta% &a sentencia:
SELE1( W >R5- 1ontactos 67ERE no9b%e`VUnaiVR
Esto supone %eco%%e% &a tab&aN 0i&a po% 0i&aN Qasta da% con cada ent%ada cu,o no9b%e es Unai.
EstoN si &a tab&a es g%andeN puede Qace% ine0iciente &a consu&ta.
Los /ndices son usados pa%a ace&e%a% &as consu&tas 0%ecuentes en una 4ase de +atos. Un /ndice
a,uda a &a 4ase de +atos a identi0ica% , obtene% 0i&as 9ucQo 9s %pido.
Los /ndices &o )ue Qacen es c%ea% una est%uctu%a de datosN en e& caso de s)&ite un bt%eeN )ue
pe%9ite busca% e& va&o% )ue &e pedi9os de 0o%9a 9u, %pida con tan so&o unos pocos accesos
a &a est%uctu%a de datos.
Pe%o atencinNun uso inco%%ecto de estos pod%/a causa% )ue e& siste9a se sob%eca%gueN po% &o
)ue Qa, )ue tene% 9ucQo cuidado a& ap&ica%&os.
Pode9os c%ea% un /ndice con &a siguiente sentencia:
1REA(E $*+EO indicecno9b%e 5* 1ontactos 2no9b%e3R
Esto Qace )ue se c%ee e& /ndice. En p%incipio ,a no debe9os Qace% nada 9sN cuando &a tab&a
es 9odi0icadaN ,a sea po% una inse%cinN 9odi0icacin o e&i9inacinN e& /ndice es actua&izado
auto9tica9ente
(ec&eando en &a conso&a de s)&ite:
.indices 1ontactos
Se nos 9uest%a Uindicecno9b%eV )ue indica )ue ,a se Qa c%eado e& /ndice en &a tab&a.
Pa%a bo%%a% un /ndice:
+R5P $*+EO indicecno9b%eR
Es posib&e c%ea% /ndices po% va%ios ca9pos sepa%ando estos po% co9as dent%o de &os
pa%ntesis:
1REA(E $*+EO indicecno9b%e 5* 1ontactos 2no9b%eNape&&idos3R
1onst%aints D Rest%icciones
Se &&a9a as/ a& %est%ingi% &os va&o%es )ue puede to9a% una dete%9inada co&u9na de &a tab&a.
Estas %est%icciones &as pode9os aFadi% a& c%ea% una tab&a con 1REA(Ec(A4LE o bin a&
9odi0ica%&a 9ediante AL(ERc(A4LE.
Rest%icciones t/picas pueden se% po% e@e9p&o )ue una co&u9na no pueda se% *ULLN )ue no
to9e un va&o% dete%9inado o )ue no tenga una &ongitud 9a,o% )ue una dada.
Ent%e estas %est%icciones t/picas tene9os:
Pgina !# de !8
Revisin: 8
*5( *ULL 2Pa%a )ue no se pe%9ita un va&o% *ULL3
PR$-ARB :EB 2 fa&guien no sabe a estas a&tu%as pa%a )ue si%ve estog3
U*$QUE 2Pa%a ob&iga% a )ue no se %epitan va&o%es en esa co&u9na3
17E1: 2 Pa%a ve%i0ica% una condicin dada3
E@e9p&os:
1REA(E (A4LE RSU 2$+cRSU (EO( U*$QUE PR$-ARB :EBN
+esc% (EO(N
RSUct,pe (EO(N
1o9sPa%a9s (EO(N
Road (EO(N
P: $*(EAERN
+i% (EO( cQec= 2&engtQ2+i%3 ^` !3N
P5ScO REALN
P5ScB REALN
P5ScM REALN
R(c(i9esta9p (EO(N
R(cStatus (EO(N
A&go%itQ9scpatQ (EO( cQec=2&engtQ2A&go%itQ9scpatQ3 ^` !T.33R
(ene9os en esta tab&a cuat%o %est%iccionesN una PR$-ARBc:EB , U*$QUE , dos 17E1:s.
1o9o se puede ve% e& 9ecanis9o es senci&&oN se &e indica )ue esos ca9pos no pueden tene%
9s de una &ongitud dada , ,a esta.
A& intenta% int%oduci% datos )ue no cu9p&en &as condiciones se p%oduce un e%%o% co9o este
USQL e%%o%: const%aint 0ai&edV en e& caso de intenta% 9ete% un tePto 9s g%ande de& debido o
co9o este USQL e%%o%: co&u9n $+cRSU is not uni)ueV en e& caso de )ue%e% 9ete% una
co&u9na con va&o%es dup&icados.
Pgina !8 de !8
Revisin: 8
(%igge%s
Un t%igge% 2Ugati&&oV3 consiste en e@ecuta% una secuencia de sentencias cuando ocu%%e un
evento dado.
La idea de esto es da% de a&ta un t%igge% pa%a )ue se e@ecute cuando ocu%%a un evento )ue
indi)ue9os nosot%os , de esta 0o%9a se %ea&icen ope%aciones en &a base de datos de 0o%9a
auto9tica.
Se pueden e@ecuta% cuando se p%oduzcan un +ELE(E un $*SER( o un UP+A(E de una tab&a
conc%eta o bien cuando se p%oduzca un UP+A(E de una o 9s co&u9nas de una tab&a.
(ene9os ta9bin &a posibi&idad de e@ecuta% e& t%igge% cada vez )ue se actua&izaNinse%ta o bo%%a
una 0i&a 9ediante una sentencia )ue i9p&i)ue &anza% e& t%igge%.
5t%a opcin de Ucon0igu%acin de& t%igge%V )ue tene9os disponib&e es &a de indica% si
)ue%e9os )ue e& t%igge% se p%oduzca antes o despus de &a accin )ue esta9os indicando.
1uando se e@ecute e& t%igge% puede )ue en ese 9o9ento )ue%a9os Qace% %e0e%encia a &os
nuevos datos o a &os antiguos 2&os )ue van a se% %ee9p&azadosN e&i9inados o &os )ue se van a
inse%ta% nuevos3N pa%a e&&o pod%e9os usa% %e0e%encias de& tipo U*E6.no9b%ecco&u9naV o
U5L+.no9b%ecco&u9naV.
Los casos )ue tene9os son:
1uando Qace9os una $*SER( &as %e0e%encias *E6 son v&idas
1uando Qace9os un UP+A(E &as %e0e%encias *E6 , 5L+ son v&idas
1uando Qace9os un +ELE(E &as %e0e%encias 5L+ son v&idas.
Suponga9os )ue c%ea9os una tab&a pa%a a&9acena% &as o%denes de co9p%as sospecQosas de
se% e%%neas po%)ue tienen un p%ecio 9u, ca%o:
1REA(E (A4LE SospecQosas 2ocid $*(EAER *5( *ULL PR$-ARB :EBN
>5RE$A* :EB 2ocid3 RE>ERE*1ES 5%denes2ocid3 3R
AQo%a c%ea%e9os un t%igge% pa%a )ue en cada inse%cin se co9p%uebe si e& p%ecio es de 9s
de ... eu%os , en ese caso 9ete9os &a o%den en &a &ista de sospecQosas:
1REA(E (R$AAER cQec=csospecQosas A>(ER $*SER( 5* 5%denes 67E* 2*E6.p%eci
o _` ...3
4EA$*
$*SER( $*(5 SSospecQosasS CALUES2*E6.ocid3R
E*+R
+e esta 0o%9a a& inse%ta% una o%den de 9s de ... eu%os:
$*SER( $*(5 S5%denesS CALUES28NS5RD8SNN!..3R
Ce%e9os )ue se Qa c%eado una ent%ada en &a tab&a USospecQosasV pa%a esta o%den de
Pgina !; de !8
Revisin: 8
co9p%a.
Pa%a e&i9ina% un t%igge% se puede uti&iza% &a sentencia +R5P (R$AAER ^no9b%e t%igge%_ o
bien se bo%%a% @unto con &a tab&a cuando esta se e&i9ine.
La sintaPis pa%a un t%igge% es:
1REA(E X(E-P Z (E-P5RARBY (R$AAER X $> *5( EO$S(S Y X ^no9b%e de &a base de datos_. Y
^no9b%e de& t%igge%_ X 4E>5RE Z A>(ER Z $*S(EA+ 5> Y [ +ELE(E Z $*SER( Z UP+A(E X5>
^no9b%ecco&u9na_N...una o 9sY\ 5* ^no9b%e tab&a_ X >5R EA17 R56 Y X 67E*
^ePp%esin_ Y 4EA$* ^sentencias 0ina&izadas conR_E*+R
Es posib&e cance&a% &a )ue%, en cu%so si dent%o de& t%igge% usa9os una sentencia RA$SE.
RA$SE 2 $A*5RE Z [ [R5LL4A1: Z A45R( Z >A$L\ N ^9ensa@e e%%o%_\ 3R
Aconse@o ecQa% un vistazo a& 9anua& de cada base de datos pa%a ve%i0ica% e& co9po%ta9iento
de cada una de estas opciones.
Pgina !T de !8
Revisin: 8
1onsu&tas a&go 9s co9p&e@as
Poco a pocoN a& i% pe&endonos con &a base de datos i%e9os teniendo necesidad de Qace%
consu&tas 9s co9p&e@asN %eco@o a)u/ a&gunas de &as )ue 9e Qan su%gido a 9/ po% si os
pueden se% de uti&idad:
Anidando consu&tas
En 9i caso Qe tenido )ue anida% consu&tas pa%a a&i9enta% a una consu&ta con &a sa&ida de ot%a.
Suponga9os )ue tene9os una tab&a con un Qist%ico de va%iab&es ana&gicasN &a tab&a pod%/a
se% co9o esta:
(i9eSta9p
2P:3
5]ne%(,pe
2P:N>:3
5]ne%1ode
2P:N>:3
+cAna&ogCa%
2>:3
Ca&ue A&9
1uando se
actua&iz e& va&o%
7ace %e0e%encia a
&a de0incin de &a
va%iab&e en ot%a
tab&a
7ace %e0e%encia a
&a de0incin de &a
va%iab&e en ot%a
tab&a
7ace %e0e%encia a
&a
de0incin de &a
va%iab&e en ot%a
tab&a
Ca&o% de &a
va%iab&e
$ndica si se Qa
p%oducido
a&a%9a o no
debido a& va&o%
de &a va%iab&e
AQo%a necestia9os &os va&o%es 9s antiguos de& Qist%ico:
SELE1( W >R5- Ana&og7isto%ica& 67ERE $+cAna&ogCa%`V(e9pe%atu%aV A*+
5]ne%(,pe`V-E(V A*+ 5]ne%1ode` A*+ (i9eSta9p ` 2 a)u/ Qa, )ue anida% 3R
Lo )ue debiea%9os anida% se%/a:
SELE1( -$*2(i9eSta9p3 >R5- Ana&og7isto%ica& 67ERE $+cAna&ogCa%`V(e9pe%atu%aV A*+
5]ne%(,pe`V-E(V A*+ 5]ne%1ode`
+e esta 0o%9a &a consu&ta )ueda%/a as/:
SELE1( W >R5- Ana&og7isto%ica& 67ERE $+cAna&ogCa%`V(e9pe%atu%aV A*+
5]ne%(,pe`V-E(V A*+ 5]ne%1ode` A*+ (i9eSta9p ` 2 LE1( -$*2(i9eSta9p3 >R5-
Ana&og7isto%ica& 67ERE $+cAna&ogCa%`V(e9pe%atu%aV A*+ 5]ne%(,pe`V-E(V A*+
5]ne%1ode`3R
Pgina !< de !8
Revisin: 8
Li9ita% e& nE9e%o de e&e9entos en &a consu&ta
AtencinN &a sintaPis de este apa%tado es ePc&usiva de SQLiteN en ot%as bases de datos se
%ea&iza% de ot%a 0o%9a.
Se t%ata de &i9ita% e& nE9e%o de e&e9entos )ue )ue%e9os obtene%N nos inte%esa po% e@e9p&o
coge% &os . 9s %ecientes.
SELE1( W >R5- Ana&og7isto%ica& 6Qe%e $+cAna&ogCa%`V(e9pe%atu%aV A*+
5]ne%(,pe`V-E(V A*+ 5]ne%1ode` 5R+ER 4B (i9eSta9p L$-$( .R
(a9bin pod%/a inte%esa%nos escoge% . va&o%es a pa%ti% de un o00set dado:
SELE1( W >R5- Ana&og7isto%ica& 6Qe%e $+cAna&ogCa%`V(e9pe%atu%aV A*+
5]ne%(,pe`V-E(V A*+ 5]ne%1ode` 5R+ER 4B (i9eSta9p L$-$( . 5>>SE( !R
Pgina !8 de !8