Sei sulla pagina 1di 39

Introducin al SQL

Este curso pretende ser una introduccin al SQL, y en particular a la versin que utiliza
el SGBD Oracle (7.! lla"ado SQL#$lus. %o se pretende realizar un estudio e&'austivo
de todas las opciones, co"andos y aspectos de al"acena"iento y ad"inistracin que se
pueden considerar en SQL. Slo se 'a pretendido introducir y e&plicar los co"andos
"(s utilizados con sus opciones "(s )tiles, de*ando los detalles "(s espec+,icos a los
"anuales de re,erencia.
Las razones que "e 'an "ovido a construirlo en -./L y ,acilitar su acceso "ediante
0e1 son las posi1ilidades de interaccin con el te&to y de "ayor di,usin. $or a'ora las
ta1las de e*e"plo son est(ticas y se encuentran en el te&to "is"o, pero "i intencin es
que se pueda interactuar con una 1ase de datos en tie"po real. 2Quiz(s "(s adelante3.
Si tienes cualquier su4erencia o encuentras una errata escondida d+"elo.
51ril de 6778.
Jess Vegas
Dpto. Informtica
Universidad de Valladolid
jvegas@infor.uva.es
ndice
1. .er"inolo4+a
2. .ipos de sentencias SQL
3. SQL#$lus
o 9one&in
o $osi1ilidades de Edicin
o :tilizacin de ;ic'eros
4. 9reacin
o .ipos de 9olu"nas
o <estricciones
o 9o"ando DESCRIBE
5. /odi,icacin
6. =nsercin, 5ctualizacin y Borrado
o =nsercin
o 5ctualizacin
o Borrado
7. Seleccin
o Seleccin de 9olu"nas
o 9l(usula FROM
o 9l(usula WHERE
o 9l(usula ORDER BY
o 9l(usula DISTINCT
o ;unciones
o 9l(usula GROUP BY
o E&presiones con Sentencias SELECT
o 9o"1inaciones
o Su1consultas
8. Eli"inacin
9. >istas
10.?u4ando con los %o"1res
o Sinni"os
o El 9o"ando RENAME
11.Lo /as SQL#$lus
o ;ic'eros de 9o"andos
o Generacin de =n,or"es
1 Terminologa
SQL
Structured Query anguage o Len4ua*e de 9onsultas Estructurado. Es el
len4ua*e que per"ite la co"unicacin con el Siste"a Gestor de Bases de Datos
(Oracle en nuestro caso!.
El SQL es un len4ua*e uni,icado
Lo utilizan todo tipo de usuarios, desde el ad"inistrador de la 1ase de datos,
DB5, 'asta el usuario ,inal.
El SQL es un len4ua*e no procedi"ental.
El usuario especi,ica Qu! quiere, no "#mo ni D#nde conse4uirlo.
El SQL es relacional"ente co"pleto.
$er"ite la realizacin de cualquier consulta de datos.
SQL@ DDL A D/L
Las sentencias del SQL se clasi,ican co"o parte del DDL o del D/L.
Len4ua*e de De,inicin de Datos, DDL
sentencias del SQL que per"iten de,inir los o1*etos de la Base de Datos
(create, revoke, grant, ater, etc.!. 9uando se de,inen dic'os o1*etos se
al"acenan en el diccionario de datos.
Len4ua*e de /anipulacin de Datos, D/L
sentencias del SQL que se utilizan para "ane*ar los datos de la 1ase de datos
(!eect, "n!ert, #$%ate, %eete, etc!.
co&&"tBro'ack
cada vez que se realiza al4una operacin en la 1ase de datos se realiza no so1re
la ta1la en s+, sino so1re una copia local de la "is"a. 5s+, si quere"os que los
resultados de la "odi,icacin se trasladen a la 1ase de datos y perduren en el
tie"po 'ay que con,ir"ar dic'a operacin con el co"ando co&&"t. .a"1iCn se
puede i"pedir que los )lti"os ca"1ios lle4uen a e,ectuarse con ro'ack,
aunque e&isten al4unas sentencias SQL que se Dautocon,ir"anD y no se pueden
volver atr(s.
Diccionario de la Base de Datos
Guarda la de,inicin de todos los o1*etos al"acenados en la 1ase de datosE sus
caracter+sticas, restricciones, privile4ios, relaciones entre ellos, etc.
2 Tipos de Sentencias
Las sentencias SQL pertenecen a dos cate4or+as principalesF Len4ua*e de De,inicin de
Datos, DDL y Len4ua*e de /anipulacin de Datos, D/L. Estos dos len4ua*es no son
len4ua*es en s+ "is"os, sino que es una ,or"a de clasi,icar las sentencias de len4ua*e
SQL en ,uncin de su co"etido. La di,erencia principal reside en que el DDL crea
o1*etos en la 1ase de datos y sus e,ectos se pueden ver en el diccionario de la 1ase de
datosE "ientras que el D/L es el que per"ite consultar, insertar, "odi,icar y eli"inar la
in,or"acin al"acenada en los o1*etos de la 1ase de datos.
9uando se e*ecutan las sentencias DDL de SQL, el SGBD con,ir"a la transaccin
actual antes y despuCs de cada una de las sentencias DDL. En ca"1io, las sentencias
D/L no llevan i"pl+cito el co&&"t y se pueden des'acer. E&iste pues un pro1le"a al
"ezclar sentencias D/L con DDL, ya que estas )lti"as pueden con,ir"ar las pri"eras
de "anera involuntaria e i"plicita, lo que en ocasiones puede ser un pro1le"a.
5 continuacin se presenta una ta1la con las sentencias SQL "(s co"unes, clasi,icadas
se4)n el len4ua*e al que pertenecen.
Sentencia
DDL
Objetivo
5lter
procedure
<eco"pilar un procedi"iento al"acenado.
5lter .a1le
5Gadir o rede,inir una colu"na, "odi,icar la asi4nacin de
al"acena"iento.
5nalyze
<eco4er estad+sticas de rendi"iento so1re los o1*etos de la BD
para utilizarlas en el opti"izador 1asado en costes.
9reate .a1le 9rear una ta1la.
9reate =nde& 9rear un +ndice.
Drop .a1le Eli"inar una ta1la.
Drop =nde& Eli"inar un +ndice.
Grant 9onceder privile4ios o papeles, roles, a un usuario o a otro rol.
.runcate Eli"inar todas las ,ilas de una ta1la.
<evoHe <etirar los privile4ios de un usuario o rol de la 1ase de datos.
Sentencia
DML
Objetivo
=nsert 5Gadir ,ilas de datos a una ta1la.
Delete Eli"inar ,ilas de datos de una ta1la.
:pdate /odi,icar los datos de una ta1la.
Select <ecuperar datos de una ta1la.
9o""it 9on,ir"ar co"o per"a"entes las "odi,icaciones realizadas.
<oll1acH
Des'acer todas las "odi,icaciones realizadas desde la )lti"a
con,ir"acin.
3 SQL*Plus
La 'erra"ienta que nos proporciona O<59LE para interactuar con la 1ase de datos se
lla"a SQL#$lus. B(sica"ente, es un intCrprete SQL con al4unas opciones de edicin y
,or"ateo de resultados.
5ntes de ver la "anera de conectarse a SQL#$lus, conviene tener claros al4unos
conceptosF
:suarioB9lave
$ara poder acceder a una 1ase de datos 4estionada por O<59LE de1e"os ser un
usuario autorizado de la "is"a y conocer la pala1ra clave, pass$ord, asociada al
usuario.
>aria1le de a"1iente ORACLE(SID
=ndica la 1ase de datos con la que va"os a tra1a*ar.
3.1 Conein
$ara entar en SQL#$lus se de1e e*ecutar el co"ando
$ sqpus usuaro/passwd
donde le indica"os al SGBD Oracle quiCn so"os y nuestra pala1ra clave.
Si la con,i4uracin del SGBD Oracle se corresponde a una con,i4uracin clienteI
servidor asentada so1re una red (SQL#%et vJ! de1ere"os indicar, ade"(s, el sevicio (o
1ase de datos! con el que quere"os contactar. Esto se 'ace colocando el s+"1olo ) antes
del no"1re del servicio co"o se indica a continuacinF
$ sqpus usuaro/passwd@servco
Otra circunstancia que 'ay que tener en cuenta a la 'ora de conectarnos a SQL#$lus es
el "odo esta1lecido por el DB5 para la autenti,icacin del usuario de la 1ase de datos.
La pri"era posi1ilidad es que recai4a so1re el SGBD Oracle la autenti,icacin de los
usuarios, por lo que tendre"os que darle nuestro no"1re de usuario y la pala1ra de
paso. $ero e&iste la posi1ilidad de que el SGBD Oracle de*e en "anos del Siste"a
Operativo esta responsa1ilidad. 5s+, no ser( necesario de"ostrarle al SGBD Oracle
quiCn so"os ya que el SO se 'a encar4ado previa"ente de co"pro1ar que todo es
correcto. En este se4undo caso, el co"ando de cone&in con SQL#$lus de1e o"itir el
no"1re de usuario y la pala1ra clave, pero "anteniendo el resto de esta "aneraF
$ sqpus /@servco
:na vez que 'e"os conse4uido entrar en SQL#$lus nos presenta el prompt y espera la
inserccin de sentencias SQL. .odas las sentencias de1en aca1ar con un DED. :na
sentencia puede continuar en varias l+neas, que SQL#$lus va nu"erando. Si quere"os
anular la sentencia actual pode"os 'acerlo colocando un D.D co"o )nico car(cter en una
l+nea. Si quere"os volver a e*ecutar la )lti"a sentencia se puede 'acer con el co"ando
DBD. Si quere"os e*ecutar las sentencias que al"acena un ,ic'ero .sql pode"os 'acerlo
anteponiendo el s+"1olo DKD al no"1re del ,ic'ero.
$ara cerrar la sesin vale con teclear De&itD.
3.2 Posi!ilidades de "dicin
SQL#$lus al"acena en un %uffer la )lti"a sentencia SQL introducida. El %uffer
"antiene slo una sentencia cada vez, y si se introduce una nueva sentencia se
so1reescri1e so1re la anterior.
La sentencia en el %uffer puede ser recuperada para e*ecutarla de nuevo con los
co"andosF
RUN que visualiza la sentencia en el %uffer antes de e*ecutarlaE
* que e*ecuta la sentencia sin visualizarla.
SQL#$lus ta"1iCn nos per"ite editar la sentencia SQL ala"acenada en el %uffer
"ediante un sencillo (y li"itado! editor en l+nea, cuyos co"andos se enu"eran a
continuacinF
Comando Abreviatura Descripcin
5$$E%D te&to 5 te&to 5Gade te&to al ,inal de la l+nea.
9-5%GEB,uenteBdestino 9B,uenteBdestino
9a"1ia el contenido D,uenteD por el
DdestinoD
9-5%GEBte&to 9Bte&to Quita Dte&toD de una l+nea.
9LE5< B:;;E< 9L B:;; Borra el %uffer
DEL DEL Borra una l+nea.
=%$:. = =nserta una o "(s l+neas.
=%$:. te&to = te&to =nserta una l+nea con Dte&toD.
L=S. L Lista las l+neas del %uffer
L=S. n L n n Lista la l+nea nICsi"a.
L=S. # L # Lista la l+nea actual.
L=S. L5S. L L5S. Lista la )lti"a l+nea.
L=S. " n L " n
Lista las l+neas desde la "ICsi"a a la nI
Csi"a.
5l contenido del %uffer ta"1iCn se puede acceder desde el editor del Siste"a Operativo.
5s+, el 1u,,er podr( ser "anipulado con las posi1ilidades del editor con el que este"os
acostu"1rados a tra1a*ar. 5l salir del editor se devuelve el control al SQL#$lus. $ara
conse4uir tra1a*ar con el editor del Siste"a Operativo 1asta con colocar la varia1le
DEFINE(EDITOR y lue4o lla"ar al editor.
SOL> dene_edtor=v
SOL> edt
3.3 #tili$acin de %ic&eros
SQL#$lus considera dos tipos de ,ic'erosF de spool y de co"andos.
:n fichero de spool al"acena los resultados de una consulta (o varias! en un ,ic'ero
con la e&tensin .lst (o lo "anda a la i"presora!.
Los co"andos asociados con los ,ic'eros spool son
SPOOL +"c,ero
/anda el resultado de las consultas al ,ic'ero.
SPOOL OUT
/anda el resultado de las consultas a la i"presora.
SPOOL OFF
9ierra el ,ic'ero de spool.
E-IT
5l salir de SQL#$lus se cierran los ,ic'eros de spool.
Los archivos de comandos al"acenan co"andos SQL y SQL#$lus para ser editado,
al"acenado yBo e*ecutadoE y tienen por de,ecto la e&tensin .sql F
$ara editarlo se puede utilizar el co"ando e%"t +"c,ero.
$ara e*ecutarlo se utilizar( el co"ando START +"c,ero o )+"c,ero
El SQL#$lus nos proporciona "(s posi1ilidades en relacin con los ,ic'eros de
co"andos, la co"unicacin con el usuario ,inal y la 4eneracin de in,or"es. $ero antes
de ver este tipo de cosas, es "e*or que si4a"os pro,undizando en el conoci"iento del
len4ua*e SQL. 5l ,inal del curso se puede se encuentra un cap+tulo con al4unas de las
cosillas que quedan por contar del SQL#$lus.
' Creacin
La pri"era ,ase de cualquier 1ase de datos co"ienza sie"pre con sentencias DDL, ya
que antes de poder al"acenar in,or"acin de1e"os de,inir los o1*etos 1(sicos donde
a4rupar la in,or"acin. Los o1*etos 1(sicos con que tra1a*a SQL son las ta1las. :na
ta1la es un con*unto de celdas a4rupadas en ,ilas y colu"nas donde se al"acenan
ele"entos de in,or"acin.
5ntes de llevar a ca1o la creacin de una ta1la conviene plani,icarF
no"1re de la ta1la,
no"1re de cada colu"na,
tipo y ta"aGo de los datos al"acenados en cada colu"na,
in,or"acin adicional, restricciones, etc.
-ay que tener en cuenta ta"1iCn ciertas restricciones en la ,or"acin de los no"1res de
las ta1lasF lon4itud "(&i"a de L caracteres, no puede 'a1er no"1res de ta1la
duplicados, de1en co"enzar con un car(cter al,a1Ctico, per"itir caracteres
al,anu"Cricos y el 4uin 1a*o DMD, y Oracle no distin4ue entre "ay)sculas y "in)sculas.
La sinta&is del co"ando que per"ite crear un ta1la es la si4uienteF
CREATE TABLE |esquema.|taba ({coumna tpoCoumna |NOT
NULL|,}
+
,
{CONSTRAINT nombreRestrccn
{UNIOUE (|coumn,|
+
)|
DEFAULT expreson|
CHECK (condcon)|
PRIMARY KEY (|coumn,|
+
)|
FOREIGN KEY (coumn) REFERENCES
taba(coumna)},}
*
)
Del e&a"en de la sinta&is de la sentencia Create Ta'e se pueden concluir que
necesita"os conocer los distintos tipos de colu"na y las distintas restricciones que se
pueden i"poner al contenido de las colu"nas. >aya"os por partes.
'.1 Tipos de Columnas
E&isten varios tipos de datos en SQL. De esta "anera, cada colu"na puede al1er4ar una
in,or"acin de naturaleza distinta. Los tipos de datos "(s co"unes y sus caracter+sticas
se resu"en en la si4uiente ta1la.
Tipo de Dato Descripcin
.ARCHAR/0ta&a1o2
5l"acena datos de tipo car(cter al,anu"Crico de lon4itud
varia1le, con un ta"aGo "(&i"o de J.LLL.
CHAR0ta&a1o2
5l"acena datos de tipo car(cter al,anu"Crico de lon4itud ,i*a,
con un ta"aGo "(&i"o de JNN.
LONG
5l"acena datos de tipo car(cter al,anu"Crico de lon4itud
varia1le con un ta"aGo "(&i"o de 'asta J G1.
NUMBER0%"g3%ec2
5l"acena datos nu"Cricos de %"g d+4itos, de los cuales %ec
son deci"ales. El ta"aGo "(&i"o es de 8 d+4itos.
DATE
5l"acena ,ec'as desde el 6IEneIO76J 59 'asta el 6IDicI
O76J D9.
RAW0ta&a1o2
5l"acena datos de lon4itud varia1le, con un ta"aGo "(&i"o
de JNN 1ytes.
LONG RAW
5l"acena datos de lon4itud varia1le, con un ta"aGo "(&i"o
de J G1.
'.2 (estricciones
Las restricciones de los datos se i"ponen para ase4urarnos que los datos cu"plen con
una serie de condiciones prede,inidas para cada ta1la. Estas restricciones ayudan a
conse4uir la inte4ridad de re,erenciaF todas las re,erencias dentro de una BD son v(lidas
y todas las restricciones se 'an cu"plido.
Las restricciones se van a de,inir aco"paGadas por un no"1re, lo que per"itir(
activarlas o desactivarlas se4)n sea el casoE o ta"1iCn "ezcladas en la de,iniciones de
las colu"nas de la ta1la. 5 continuacin va"os a descri1ir cada una de las restricciones
"encionadas.
NOT NULL
Esta1lece la o1li4atoriedad de que esta colu"na ten4a un valor no nulo. Se de1e
especi,icar *unto a la colu"na a la que a,ecta. Los valores nulos no ocupan
espacio, y son distintos a L y al espacio en 1lanco. -ay que tener cuidado con los
valores nulos en las operaciones, ya que 4 5 NULL es i4ual a NULL.
UNI6UE
Evita valores repetidos en una colu"na, ad"itiendo valores nulos. Oracle crea
un +ndice auto"(tica"ente cuando se 'a1ilita esta restriccin y lo 1orra al
des'a1ilitarse.
DEFAULT
Esta1lece un valor por de,ecto para esa colu"na, si no se le asi4na nin4uno.
CHEC7
9o"prue1a que se cu"pla una condicin deter"inada al rellenar esa colu"na.
Esta condicin slo de1e estar construida con colu"nas de esta "is"a ta1la.
PRIMARY 7EY
Esta1lece el con*unto de colu"nas que ,or"an la clave pri"aria de esa ta1la. Se
co"porta co"o )nica y o1li4atoria sin necesidad de e&plicitarlo. Slo puede
e&istir una clave pri"aria por ta1la. $uede ser re,erenciada co"o clave a*ena por
otras ta1las. 9rea un +ndice auto"(tica"ente cuando se 'a1ilita o se crea esta
restriccin. En Oracle, los +ndices son construidos so1re (r1oles B
A
.
FOREIGN 7EY
Esta1lece que el contenido de esta colu"na ser( uno de los valores contenidos
en una colu"na de otra ta1la "aestra. Esta colu"na "arcada co"o clave a*ena
puede ser %:LL. %o 'ay l+"ite en el n)"ero de claves a*enas. La clave a*ena
puede ser otra colu"na de la "is"a ta1la. Se puede ,orzar que cuando una ,ila
de la ta1la "aestra sea 1orrada, todas las ,ilas de la ta1la detalle cuya clave a*ena
coincida con la clave 1orrada se 1orren ta"1iCn. Esto se consi4ue aGadiendo la
coletilla ON DELETE CASCADE en la de,inicin de la clave a*ena.
Se4uida"ente se presenta un e*e"plo en el que se crean dos ta1las, una de
departa"entos y otra de e"pleadosF
REM
REM taba departamento con un cdgo de departamento, un
nombre y una
REM ocazacn.
REM
create tabe dep (
cod_dep number(3),
nombre varchar2(15) not nu,
oc varchar2(10),
constrant dep_pk prmary key (cod_dep),
constrant dep_oc check
(oc n ('Vaadod', 'Boeco', 'Cgaes'))
);
REM
REM taba empeado con un cdgo de empeado, un nombre,
un oco, un
REM |efe, una fecha de ata en a empresa, un saaro
mensua, una
REM comsn y e cdgo de departamento donde traba|a.
REM
create tabe emp (
cod_emp number(3),
nombre varchar2(10) not nu,
oco varchar2(11),
|efe number(3),
fecha_ata date,
saaro number(10),
comson number(10),
cod_dep number(3),
constrant emp_pk prmary key (cod_emp),
constrant emp_fk foregn key (cod_dep) references
dep(cod_dep)
on deete cascade,
constrant emp_ck check (saaro > 0)
);
'.3 Comando Describe
Oracle nos proporciona un co"ando que resulta "uy )til cuando quere"os conocer la
estructura de una ta1la, las colu"nas que la ,or"an y su tipo y restricciones. Este
co"ando to"a una "ayor i"portancia se4)n nos ale*e"os del "o"ento de creacin de
una ta1la.
La sint(sis es la si4uiente
DESCRIBE taba
P un e*e"plo de su utilizacin se puede ver al descri1ir la de,inicin de las dos ta1las
creadas antes. 9o"o no es una sentencia SQL no necesita el DED al ,inal. .a"1iCn se
puede a1reviar co"o DESC.
SOL> descrbe dep
Name Nu? Type
------------------------------- -------- ----
COD_DEP NOT NULL NUMBER(3)
NOMBRE NOT NULL VARCHAR2(15)
LOC VARCHAR2(10)
SOL> desc emp
Name Nu? Type
------------------------------- -------- ----
COD_EMP NOT NULL NUMBER(4)
NOMBRE NOT NULL VARCHAR2(10)
OFICIO VARCHAR2(10)
|EFE NUMBER(4)
FECHA_ALTA DATE
SALARIO NUMBER(10)
COMISION NUMBER(10)
COD_DEP NUMBER(3)
) *odi+icacin
DespuCs de crear una ta1la, a veces nos encontra"os con que se necesita aGadir una
colu"na adicional o "odi,icar la de,inicin de una colu"na e&istente. Esta operacin se
puede realizar con el co"ando ALTER TABLE.
ALTER TABLE taba {ADD | MODIFY} ({coumna tpoCoumna
|NOT NULL|,}
+
);
-ay que tener en cuenta varios puntosF
%o es posi1le dis"inuir el ta"aGo de un colu"na.
En las "odi,icaciones, los tipos anterior y nuevo de1en ser co"pati1les, o la
ta1la de1e estar vac+a.
La opcin ADD 888 NOT NULL slo ser( posi1le si la ta1la est( vac+a.
La opcin MODIFY 888 NOT NULL slo podr( realizarse cuando la ta1la no
conten4a nin4una ,ila con valor nulo en la colu"na en cuestin.
$or e*e"plo la sentencia si4uiente aGade la ,ec'a de naci"iento a la ta1la de e"pleados.
SOL> ater tabe emp add (fecha_nac date not nu);
.a"1iCn se puede querer "odi,icar una ta1la aGadiendo o eli"inando restricciones. En
este caso el co"ando a utilizar ser(
ALTER TABLE taba {ADD | DROP} CONSTRAINT restrccn;
, Insercin- .ctuali$acin / 0orrado
:na vez que tene"os de,inida la estructura de una ta1la se pueden insertan los datos,
"odi,icarlos o 1orrarlos de la ta1la.
Esta tarea entra dentro de las operaciones que se realizan con el len4ua*e D/L. Este
len4ua*e per"ite "anipular los o1*etos de la 1ase de datos, insertando, "odi,icando yBo
1orrando el contenido de las ta1las. -ay que recordar que estas sentencias no son
Dautocon,ir"adasD y requieren de la sentencia COMMIT para que sus e,ectos perduren en el
tie"po, o de la sentencia ROLLBAC7 para des'acer los ca"1ios e,ectuados.
5 continuacin va"os a estudiar tres de las sentencias D/L "(s co"unes.
,.1 Insercin
El co"ando que per"ite insertar ,ilas en las ta1las es el si4uiente.
INSERT INTO taba |({coumna,}
*
)| VALUES ({expresn,}
+
);
Slo especi,icare"os las colu"nas donde insertar y su orden cuando no inserte"os
datos en todas ellas o no lo 'a4a"os en el "is"o orden en que de,ini"os la ta1la. La
asociacin colu"naIvalor es posicional. Los valores de1en cu"plir con los tipos de
datos de,inidos. Los valores de tipo caracter y ,ec'a de1en ir encerrados entre co"illas
si"ples, (DD!.
5 continuacin se puede ver la insercin de ,ilas en las ta1las de e*e"plo.
REM nsertar as en a taba dep
nsert nto dep vaues (100,'Admnstracon','Vaadod');
nsert nto dep vaues (200,'I+D','Boeco');
nsert nto dep vaues (300,'Produccon','Cgaes');
REM nsertar as en a taba emp
nsert nto emp vaues
(101,'Cano','Presdente',nu,'3-FEB-96',450000,nu,100);
nsert nto emp vaues
(102,'Ronca','Drector',101,'3-FEB-96',350000,nu,100);
nsert nto emp vaues
(103,'Rueda','Secretaro',102,'17-MAR-
96',175000,nu,100);
nsert nto emp vaues
(104,'Martn','Contabe',102,'17-MAR-
96',235000,nu,100);
nsert nto emp vaues
(105,'Sanz','Comerca',101,'17-MAR-96',150000,10,100);
nsert nto emp vaues
(106,'Lopez','Comerca',101,'21-MAR-96',150000,15,100);
nsert nto emp vaues
(201,'Perez','Drector',101,'4-|UN-96',350000,nu,200);
nsert nto emp vaues
(202,'Sastre','Anasta',201,'8-|UN-96',300000,nu,200);
nsert nto emp vaues
(203,'Garca','Programador',202,'8-|UN-
96',225000,nu,200);
nsert nto emp vaues
(204,'Mateo','Programador',202,'8-|UN-
96',200000,nu,200);
nsert nto emp vaues
(301,'Yuste','Drector',101,'3-OCT-96',350000,nu,300);
nsert nto emp vaues
(302,'Reco','Anasta',301,'4-FEB-97',300000,nu,300);
nsert nto emp vaues
(303,'Garca','Programador',302,'4-FEB-
97',210000,nu,300);
nsert nto emp vaues
(304,'Santana','Programador',302,'4-FEB-
97',200000,nu,300);
,.2 .ctuali$acin
Otra de las operaciones "(s co"unes es la "odi,icacin de la in,or"acin al"acenada
en las ta1las. $ara ello se utiliza el co"ando UPDATE cuya sinta&is se "uestra a
continuacin.
UPDATE taba SET {coumna = expresn,}
+
|WHERE
condcn|;
Se especi,icar( en la cl(usula SET las colu"nas que se actualizar(n y con quC valores.
La cl(usula 0-E<E indica las ,ilas con las que se va a tra1a*ar. Si se o"ite la
actualizacin a,ectar( a todas las ,ilas de la ta1la.
,.3 0orrado
9on insertar y "odi,icar, la otra operacin que co"pleta el trio es la de 1orrado de ,ilas.
La sinta&is es la que si4ueF
DELETE FROM taba |WHERE condcn|;
Borrar( todas las ,ilas que cu"plan la condicin especi,icada en la cl(usula WHERE. Si
esta cl(usula no se ,i*a, se 1orrar(n todas las ,ilas de la ta1la. 5qu+ ca1e decir que
aunque con DELETE 1orre"os todas las ,ilas de una ta1la, no 1orra"os la de,inicin de
la ta1la del diccionario y pode"os insertar datos posterior"ente en la ta1la. Esta es una
di,erencia con la sentencia DROP TABLE, que produce la eli"inacin tanto del contenido
de la ta1la co"o de la de,inicin de la "is"a.
1 Seleccin
La recuperacin de los datos en el len4ua*e SQL se realiza "ediante la sentencia
SELECT, seleccionar. Esta sentencia per"ite indicar al SGBD la in,or"acin que se
quiere recuperar. Esta es la sentencia SQL, con di,erencia, "(s 'a1itual. La sentencia
SELECT consta de cuatro partes 1(sicasF
La cl(usula SELECT se4uida de la descripcin de lo que se desea ver, los
no"1res de las colu"nas a seleccionar. Esta parte es o1li4atoria.
La cl(usula FROM se4uida de la especi,icacin de las ta1las de las que se 'an de
o1tener los datos. Esta parte es o1li4atoria.
La cl(usula WHERE se4uida por un criterio de seleccin, una condicin. Esta parte
es opcional.
La cl(usula ORDER BY se4uida por el criterio de ordenacin. Esta parte es
opcional.
:na pri"era apro&i"acin a la sinta&is de la sentencia SELECT puede "ostrarnos la
si4uiente e&presinF
SELECT {* | {coumna,}
+
}
FROM {taba,}
+
|WHERE condcn|
|ORDER BY {expresnCoumna |ASC | DESC|,}
+
|;
9o"o una pri"era utilizacin de la sentencia SELECT pode"os utilizarla para ver todas
las ta1las que tene"os en la 1ase de datos.
SOL> seect tabe_name from user_tabes;
TABLE_NAME
------------------------------
DEP
EMP
:n 1reve an(lisis de la sentencia anterior nos per"ite o1servar que 'e"os consultado
so1re la colu"na lla"ada ta'e(na&e al"acenada en la ta1la #!er(ta'e!, que es la
ta1la que 4uarda la in,or"acin so1re todas las ta1las de cada usuario.
1.1 Seleccin de Columnas
Las colu"nas a seleccionar se enu"eran sin "(s en la cl(usula SELECT. Si se desea
seleccionar todas las colu"nas de una ta1la se puede 'acer enu"erando a todas las
colu"nas o colocando un asterisco, 5, en su lu4ar.
9uando se consulta una 1ase de datos, los no"1res de las colu"nas se usan co"o
ca1eceras de presentacin. Si Cste resulta de"asiado lar4o, corto o cr+ptico, puede
ca"1iarse con la "is"a sentencia SQL de consulta, creando un alias de columna.
SOL> seect nombre "Departamento", oc "Est en" from dep;

Departamento Esta en
--------------- ----------
Admnstracon Vaadod
I+D Boeco
Produccon Cgaes
1.2 Cl2usula FROM
La cl(usula FROM de,ine las ta1las de las que se van a seleccionar las colu"nas.
Se puede aGadir al no"1re de las ta1las el usuario propietario de las "is"as de la ,or"a
#!#ar"o8ta'a. De esta "anera pode"os distin4uir entre las ta1las de un usuario y
otro. Oracle sie"pre considera co"o pre,i*o el no"1re del propietario de las ta1las,
aunque no se lo indique"os. De esta ,or"a dos o "(s usuarios pueden tener ta1las que
se lla"en i4ual sin que sur*an con,lictos. Si quisiCra"os acceder a las ,ilas de la ta1la
%e$ del usuario 9$ere:, (ade"as de tener privile4ios de lectura so1re esa ta1la!
de1er+a"os escri1ir la si4uiente sentencia SQLF
SOL> seect * from |perez.dep;
.a"1iCn se puede asociar un alias a las ta1las para a1reviar los no"1res de las ta1las.
:n e*e"plo se puede ver en la sentencia SQL si4uienteF
SOL> seect d.nombre from dep d;
1.3 Cl2usula WHERE
-asta a'ora 'e"os visto co"o puede utilizarse la sentencia SELECT para recuperar todas
las colu"nas o un su1con*unto de ellas de una ta1la. $ero este e,ecto a,ecta a todas las
,ilas de la ta1la, a "enos que especi,ique"os al4o "(s en la cl(usula WHERE. Es aqu+
donde de1e"os proponer la condicin que 'an de cu"plir todas las ,ilas para salir en el
resultado de la consulta. La co"ple*idad del criterio de 1)squeda es pr(ctica"ente
ili"itada, y en Cl se pueden con*u4ar operadores de diversos tipos con ,unciones de
colu"nas, co"poniendo e&presiones "(s o "enos co"ple*as.
Operadores de Comparacin
Operador Operacin Ejemplo
@ =4ualdad
!eect 5 +ro& e&$ ;,ere
co%(%e$ < 4==>
Q@, RS, T@ Desi4ualdad
!eect 5 +ro& e&$ ;,ere
co%(%e$ ?< 4==>
R /enor que
!eect 5 +ro& e&$ ;,ere
co%(%e$ @ /==>
S /ayor que
!eect 5 +ro& e&$ ;,ere
co%(%e$ A /==>
R@ /enor o i4ual que
!eect 5 +ro& e&$ ;,ere
co%(%e$ @< /==>
S@ /ayor o i4ual que
!eect 5 +ro& e&$ ;,ere
co%(%e$ A< /==>
in
=4ual a cualquiera de los "ie"1ros entre
parCntesis
!eect 5 +ro& e&$ ;,ere
co%(%e$ "n 04==3 B==2>
not in
Distinto a cualquiera de los "ie"1ros
entre parCntesis
!eect 5 +ro& e&$ ;,ere
co%(%e$ not "n 0/==2>
1etUeen 9ontenido en el ran4o
!eect 5 +ro& e&$ ;,ere
co%(e&$ 'et;een 4== an%
4CC>
not
1etUeen
;uera del ran4o
!eect 5 +ro& e&$ ;,ere
co%(e&$ not 'et;een 4==
an% 4CC>
liHe DMa1c
VD
9ontiene la cadena Da1cD a partir del
se4undo car(cter y lue4o cualquier
cadena de caracteres
!eect 5 +ro& e&$ ;,ere
no&'re "ke DMaED>
Operadores de Aritmticos
Operador Operacin Ejemplo
A Su"a
!eect no&'re3 !aar"oFco&"!"on +ro& e&$ ;,ere
o+"c"o<D.ENDEDORD>
I <esta
!eect no&'re +ro& e&$ ;,ere !G!%ateH+ec,a(ata
A BIJ>
# $roducto
!eect no&'re3 !aar"o54/ +ro& e&$>
B Divisin
!eect no&'re3 !aar"o*B4 +ro& e&$>
Operadores de Cadenas de Caracteres
Operador Operacin Ejemplo
WW 9oncatenacin
!eect no&'reKKo+"c"o +ro& e&$>
1.' Cl2usula ORDER BY
Se utiliza para especi,icar el criterio de ordenacin de la respuesta a la consulta. $or
de,ecto la ordenacin es ascendente, aunque se puede especi,icar un orden descendente.
La ordenacin se puede esta1lecer so1re el contenido de colu"nas o so1re e&presiones
con colu"nas. 5 continuacin se puede ver un e*e"plo de uso de la cl(usula ORDER BY
en la que quiere o1tener un listado de los e"pleados ordenado de "anera descendente
por su salario y en caso de i4ualdad de salario, ordenado ascendente"ente por su
no"1re.
SOL> seect nombre, saaro from emp order by saaro desc,
nombre;
NOMBRE SALARIO
---------- ----------
Cano 450000
Perez 350000
Ronca 350000
Yuste 350000
Reco 300000
Sastre 300000
Martn 235000
Garca 225000
Garca 210000
Mateo 200000
Santana 200000
Rueda 175000
Lopez 150000
Sanz 150000

14 rows seected.
1.) Cl2usula DISTINCT
9uando se realiza una consulta so1re una ta1la en la que se e&trae in,or"acin de varias
colu"nas, puede ocurrir que, si no inclui"os laBs colu"naBs que ,or"an la clave
principal, o1ten4a"os ,ilas repetidas en la respuesta.
Si este co"porta"iento no nos resulta satis,actorio pode"os utilizar la cl(usula
DISTINCT para eli"inar las ,ilas duplicadas o1tenidas co"o respuesta a una consulta.
$ode"os ver co"o ,unciona en el si4uiente e*e"plo, en el que pre4unta"os por los
distintos o,icios de nuestros e"pleados.
SOL> seect oco from emp;
Sin utilizar la cl(usula DISTINCT o1tendre"os la si4uiente respuesta
OFICIO
-----------
Presdente
Drector
Secretaro
Contabe
Comerca
Comerca
Drector
Anasta
Programador
Programador
Drector
Anasta
Programador
Programador

14 rows seected.
$ero si inclui"os la cl(usula DISTINCT la respuesta var+a para adecuarse "(s a nuestras
espectativas.
SOL> seect dstnct oco from emp;

OFICIO
-----------
Anasta
Comerca
Contabe
Drector
Presdente
Programador
Secretaro

7 rows seected.
1., %unciones
E&isten en SQL "uc'as ,unciones que pueden co"ple"entar el "ane*o de los datos en
las consultas. Se utilizan dentro de las e&presiones y actuan con los valores de las
colu"nas, varia1les o constantes.
Se pueden incluir en las cl(sulas SELECT, WHERE y ORDER BY.
$ueden anidarse ,unciones dentro de ,unciones. P e&iste una 4ran variedad de ,unciones
para cada tipo de datosF
arit"Cticas,
de cadenas de caracteres,
de "ane*o de ,ec'as,
de conversin,
otras,
de 4rupo.
Funciones Aritmticas
Funcin Cometido Ejemplo Resultado
5BS(n! 9alcula el valor a1soluto de n.
!eect a'!0H4J2
+ro& %#a>
6N
9E=L(n!
9alcula el valor entero
in"ediata"ente superior o
i4ual a n.
!eect ce"04J8L2
+ro& %#a>
6X
;LOO<(n!
9alcula el valor entero
in"ediata"ante in,erior o i4ual
a n.
!eect +oor04J8L2
+ro& %#a>
6N
/OD(",n!
9alcula el resto resultante de
dividir m entre n.
!eect &o%0443M2
+ro& %#a>

$O0E<(",n!
9alcula la potencia nIesi"a de
m.
!eect $o;er0B3/2
+ro& %#a>
7
<O:%D(",n!
9alcula el redondeo de m a n
deci"ales. Si nRL el redondeo
se e,ectua a por la izquierda del
punto deci"al.
!eect
ro#n%04/B8MJI342
+ro& %#a>
6J.N
SQ<.(n! 9alcula la ra+z cuadrada de n.
!eect !Nrt0M2 +ro&
%#a>
J
.<:%9(",n!
9alcula m truncado a n
deci"ales (n puede ser
ne4ativo!.
!eect
tr#nc04/B8MJI342
+ro& %#a>
6J.O
S=G%(n!
9alcula el si4no de n,
devolviendo I6 si nRL, L si n@L
y 6 si nSL.
!eect !"gn0H4/2
+ro& %#a>
I6
Funciones de Cadenas de Caracteres
Funcin Cometido Ejemplo Resultado
9-<(n!
Devuelve el
car(cter
cuyo valor
codi,icado
es n.
!eect c,r0IJ2 +ro&
%#a>
5
5S9==(cad!
Devuelve el
valor ascii
de cad.
!eect a!c""0DAD2 +ro&
%#a>
XN
9O%95.(cad6,cadJ!
Devuelve
cad&
concatenada
con cad'.
Esta ,uncin
es
esquivalente
al operador
WW.
!eect
concat0concat0no&'re3D
e! D23o+"c"o2 +ro& e&$>
9ano es
$residente, etc.
LO0E<(cad!
Devuelve la
cadena cad
con todas
sus letras
convertidas
a
"in)sculas.
!eect
o;er0DM"nU!C#A!D2 +ro&
%#a>
"inusculas
:$$E<(cad!
Devuelve la
cadena cad
con todas
sus letras
convertidas
a
"ay)sculas.
!eect
#$$er0D&aY#SC#A!D2 +ro&
%#a>
/5P:S9:L5S
=%=.95$(cad!
Devuelve
cad con el
pri"er
caracter en
"ay)sculas.
!eect "n"tca$0D"!a'eD2
+ro& %#a>
=sa1el
L$5D(cad6,n,cadJ!
Devuelve
cad& con
lon4itud n, y
a*ustada a la
derec'a,
rellenando
por la
izquierda
con cad'.
!eect $a%0DPD3J3D5D2
+ro& %#a>
####$
<$5D(cad6,n,cadJ!
Devuelve
cad& con
lon4itud n, y
a*ustada a la
izquierda,
rellenando
por la
derec'a con
cad'.
!eect r$a%0DPD3J3D5D2
+ro& %#a>
$####
<E$L59E(cad,ant,nue!
Devuelve
cad en la
que cada
ocurrencia
de la cadena
ant 'a sido
sustituida
por la
cadena nue.
!eect
re$ace0D%"goD3D"D3D"eD2
+ro& %#a>
die4o
S:BS.<(cad,",n!
Devuelve la
sudcadena
de cad
co"puesta
por n
caracteres a
partir de la
posicion m.
!eect
!#'!tr0DABCDEFGD3B3/2
+ro& %#a>
9D
LE%G.-(cad!
Devuelve la
lon4itud de
cad.
!eect engt,0Dca%enaD2
+ro& %#a>
X
Funciones de Manejo de Fechas
Funcin Cometido Ejemplo Resultado
SPSD5.E
Devuelve la
,ec'a y 'ora
actuales.
!eect !G!%ate +ro& %#a>
6OI/5<I77
5DDM/O%.-S(d,n!
Devuelve la
,ec'a d
incre"entada
en n "eses.
!eect
a%%(&ont,!0!G!%ate3M2 +ro&
%#a>
6OI?:LI77
L5S.MD5P(d!
Devuelve la
,ec'a del
)lti"o d+a del
"es de d.
!eect a!t(%aG0!G!%ate2
+ro& %#a>
6I/5<I77
/O%.-SMBE.0EE%(d6,
dJ!
Devuelve la
di,erencia en
"eses entre
las ,ec'as d&
y d'.
!eect
&ont,!('et;een0!G!%ate3D=4H
OANHCLD2 +ro& %#a>
J.OOL7OJO
%EY.MD5P(d,cad!
Devuelve la
,ec'a del
pri"er d+a de
la se"ana
cad despuCs
de la ,ec'a d.
!eect nePt(%aG0!G!%ate3
D!#n%aGD2 +ro& %#a>
6XI/5<I77
Funciones de Conversin de Tipos
Funcin Cometido Ejemplo Resultado
.OM%:/BE<(cad,,"to!
9onvierte la cadena
cad a un n)"ero,
opcional"ente de
acuerdo con el
,or"ato fmto.
!eect
to(n#&'er0D4/BMJD2
+ro& %#a>
6JOON
.OM9-5<(d, ,"to!
9onvierte la ,ec'a
d a una cadena de
caracteres,
opcional"ente de
acuerdo con el
,or"ato fmto.
!eect
to(c,ar0!G!%ate2
+ro& %#a>
D6OI/5<I
77D
.OMD5.E(cad,,"to!
9onvierte la cadena
cad de tipo
varc'arJ a ,ec'a,
opcional"ente de
acuerdo con el
,or"ato fmto.
!eect to(%ate0D4H
OANHCLD2 +ro& %#a>
L6I?5%I77
9on las ,ec'as pueden utilizarse varios ,or"atos. Estos ,or"atos per"iten "odi,icar la
presentacin de una ,ec'a. En la si4uiente ta1la se presentan al4unos ,or"atos de ,ec'a
y el resultado que 4eneran.
Mscaras de Formato Numricas
Formato Cometido Ejemplo Resultado
cc scc >alor del si4lo.
!eect to(c,ar0!G!%ate3DccD2
+ro& %#a>
JL
y,yyy
sy,yyy
5Go con co"a, con o
sin si4no.
!eect
to(c,ar0!G!%ate3DG3GGGD2 +ro&
%#a>
6,777
yyyy yyy
yy y
5Go sin si4no con
cuatro, tres, dos o un
d+4itos.
!eect
to(c,ar0!G!%ate3DGGGGD2 +ro&
%#a>
6777
q .ri"estre.
!eect to(c,ar0!G!%ate3DND2
+ro& %#a>
6
UU U
%)"ero de la se"ana
del aGo o del "es.
!eect to(c,ar0!G!%ate3D;;D2
+ro& %#a>
66
"" %)"ero del "es.
!eect to(c,ar0!G!%ate3D&&D2
+ro& %#a>
L
ddd dd d
%)"ero del d+a del
aGo, del "es o de la
se"ana.
!eect to(c,ar0!G!%ate3D%%%D2
+ro& %#a>
L7
'' ''6J
''JO
La 'ora en ,or"ato
6J'. o JO'.
!eect to(c,ar0!G!%ate3D,,D2
+ro& %#a>
6J
"i
Los "inutos de la
'ora.
!eect to(c,ar0!G!%ate3D&"D2
+ro& %#a>
6N
ss sssss
Los se4undos dentro
del "inuto, o desde
las L 'oras.
!eect
to(c,ar0!G!%ate3D!!!!!D2 +ro&
%#a>
OO6N7
Mscaras de Formato de Caracteres
Formato Cometido Ejemplo Resultado
syear
year
5Go en =n4lCs
!eect
to(c,ar0!G!%ate3D!Gear2 +ro&
%#a>
nineteen
ninetyIseven
"ont' o
"on
%o"1re del "es o su
a1reviatura de tres
letras.
!eect
to(c,ar0!G!%ate3D&ont,D2
+ro& %#a>
"arc'
day dy
%o"1re del d+a de la
se"ana o su
a1reviatura de tres
letras.
!eect
to(c,ar0!G!%ate3D%aGD2 +ro&
%#a>
,riday
a.".
p.".
El espacio del d+a.
!eect
to(c,ar0!G!%ate3Da8&8D2 +ro&
%#a>
p.".
1.c. a.d.
=ndicador del aGo
respecto al del
naci"iento de 9risto.
!eect
to(c,ar0!G!%ate3D'8c8D2 +ro&
%#a>
a.d.
Otras Funciones
Funcin Cometido Ejemplo Resultado
DE9ODE(var, val6,
cod6, valJ, codJ, ...,
de,ecto!
9onvierte el
valor de var, de
acuerdo con la
codi,icacin.
!eect %eco%e0o+"c"o3
DPre!"%enteD3 DPD3
DD"rectorD3 DDD3 D-D2 +ro&
e&$>
$, D, Y, ...
G<E5.ES.(e&p6,
e&pJ, ...!
Devuelve el
"ayor valor de
una lista.
sin e*e"plo.
sin
e*e"plo.
LE5S.(cad,,"to!
Devuelve el
"enor valor de
una lista.
sin e*e"plo.
sin
e*e"plo.
%>L(val, e&p!
Devuelve la
e&presin e&p si
val es %:LL, y
val si en otro
caso.
!eect
!aar"oFnv0co&"!"on3=2
+ro& e&$>
ONLLLL,
NLLLL, ...
1.1 Cl2usula GROUP BY
SQL nos per"ite a4rupar las ,ilas resultado de una consulta en con*untos y aplicar
,unciones so1re esos con*untos de ,ilas.
La sinta&is es la si4uienteF
SELECT {* | {coumna,}
+
}
FROM {taba,}
+
WHERE condcn
GROUP BY {coumna ,}
+
HAVING condcn
ORDER BY {expresnCoumna |ASC | DESC|,}
+
;
En la cl(usula GROUP BY se colocan las colu"nas por las que va"os a a4rupar. P en la
cl(usula HA.ING se especi,ica la condicin que 'an de cu"plir los 4rupos para pasar al
resultado.
La evaluacin de las di,erentes cl(usulas en tie"po de e*ecucin se e,ect)a en el
si4uiente ordenF
WHERE ,iltra las ,ilas
GROUP BY crea una ta1la de 4rupo nueva
HA.ING ,iltra los 4rupos
ORDER BY clasi,ica la salida
:n e*e"plo de utilizacin de la seleccin de 4rupos puede ser seleccionar los e"pleados
a4rupados por su o,icio. :n pri"er intento de consulta es el si4uienteF
SOL> seect nombre, oco from emp group by oco;

seect nombre, oco from emp
*
ERROR at ne 1:
ORA-00979: not a GROUP BY expresson
Se presenta un error de1ido a que cuando se utiliza GROUP BY, las colu"nas i"plicadas
en el SELECT y que no aparezcan en la cl(usula GROUP BY de1en tener una ,uncin de
a4rupa"iento. En otras pala1ras, la colu"na no&'re de1e tener una ,uncin de
a4rupa"iento que actue so1re ella ("a&, "in, su", count, av4!. Si no puede ser as+,
de1er( llevar dic'a colu"na a la cl(usula GROUP BY.
De nuevo, el e*e"plo quedar( as+F
SOL> seect count(nombre), oco from emp group by oco;

COUNT(NOMBRE) OFICIO
------------- -----------
2 Anasta
2 Comerca
1 Contabe
3 Drector
1 Presdente
4 Programador
1 Secretaro

7 rows seected.
Las ,unciones de a4rupa"iento que se pueden utilizar son las si4uientes.
Funciones de Agrupamiento
Funcin Cometido Ejemplo
9O:%.(col!
9uenta el n)"ero de ,ilas
a4rupadas.
!eect co#nt0no&'re23o+"c"o
+ro& e&$ gro#$ 'G o+"c"o>
5>G(col!
9alcula el valor "edio de
todos los valores de la
colu"na col.
!eect avg0!aar"o23o+"c"o
+ro& e&$ gro#$ 'G o+"c"o>
/5Y(col!
9alcula el valor "(&i"o de
todos los valores de la
colu"na col.
!eect &aP0!aar"o23o+"c"o
+ro& e&$ gro#$ 'G o+"c"o>
/=%(col!
9alcula el valor "+ni"o de
todos los valores de la
colu"na col.
!eect &"n0!aar"o23o+"c"o
+ro& e&$ gro#$ 'G o+"c"o>
S:/(col!
9alcula la su"a de los
valores de la colu"na col.
!eect !#&0!aar"o23 o+"c"o
+ro& e&$ gro#$ 'G o+"c"o>
S.DDE>(col!
9alcula la desviacin t+pica
de los valores de la colu"na
col sin tener en cuenta los
valores nulos.
!eect !t%%ev0!aar"o23
o+"c"o +ro& e&$ gro#$ 'G
o+"c"o>
>5<=5%9E(col!
9alcula la varianza de los
valores de la colu"na col sin
tener en cuenta los valores
nulos.
!eect var"ance0!aar"o23
o+"c"o +ro& e&$ gro#$ 'G
o+"c"o>
-ay que tener en cuenta que los valores nulos no participan en el c(lculo de las
,unciones de con*untos. Estas ,unciones se pueden utilizar con las cl(usulas DISTINCT y
ALL. .a"1iCn se pueden utilizar aunque no realice"os a4rupacin al4una en la consulta,
considerando a toda la ta1la co"o un 4rupo.
SOL> seect count(*) from emp;

COUNT(*)
----------
14
1.3 "presiones con Sentencias Select
El resultado de cada consulta es un con*unto de ,ilas. P con con*untos se pueden realizar
tres operaciones t+picasF la unin, la interseccin y la di,erencia.
:nin, UNION
9o"1ina todas las ,ilas del pri"er con*unto con todas las ,ilas del se4undo.
9ualquier ,ila duplicada se reducir( a una sla.
=nterseccin, INTERSECT
E&a"inar( las ,ilas de los con*untos de entrada y devolver( aquellas que
aparezcan en a"1os. .odas las ,ilas duplicadas ser(n eli"inadas antes de la
4eneracin del con*unto resultante.
Di,erencia, MINUS
Devuelve aquellas ,ilas que est(n en el pri"er con*unto pero no en el se4undo.
Las ,ilas duplicadas del pri"er con*unto se reducir(n a una ,ila )nica antes de
e"pezar la co"paracin con el se4undo con*unto.
Reglas para el Manejo de los Operadores de Conjuntos
$ueden ser encadenados en cualquier co"1inacin, siendo evaluados de
izquierda a derec'a.
%o e&iste *erarqu+a de precedencia en el uso de estos operadores, pero puede ser
,orzada "ediante parCntesis.
$ueden ser e"pleados con con*untos de di,erentes ta1las sie"pre que se
apliquen las si4uientes re4lasF
o Las colu"nas son relacionadas en orden, de izquierda a derec'a.
o Los no"1res de las colu"nas son irrelevantes.
o Los tipos de datos de1en coincidir.
9o"o e*e"plo pode"os consultar so1re todos los no"1res de e"pleado que tra1a*an
para los departa"entos 6LL o LL. Esto se consi4ue restando a todos los no"1res de
e"pleados, aquellos que est(n en el departa"ento JLL.
SOL> seect nombre from emp
2 mnus
3 seect nombre from emp where cod_dep=200;
NOMBRE
----------
Cano
Lopez
Martn
Reco
Ronca
Rueda
Santana
Sanz
Yuste

9 rows seected.
1.4 Com!inaciones
-asta a'ora 'e"os construido consultas con una )nica ta1la, pero esto no de1e ser
sie"pre as+.
De 'ec'o, slo se alcanza la verdadera potencia del SQL cuando co"1ina"os el
contenido de "(s de una ta1la.
Supon4a"os que quere"os conse4uir una lista con los e"pleados y los departa"entos
para los que tra1a*an. Esta in,or"acin est( repartida en las dos ta1las que tene"os, e&$
y %e$. 5s+, podr+a"os intentar una consulta que seleccionara el ca"po no&'re de la
ta1la e&$ y el no&'re del departa"ento. P aqu+ sur4e el pri"er pro1le"a, 2c"o
distin4ui"os entre dos colu"nas que lla"(ndose i4ual, pertenecen a ta1las distintas3
$ara eso se utiliza co"o pre,i*o o el no"1re de la ta1la (%e$8no&'re! o un alias de
ta1la, un no"1re que se asocia a cada ta1la y se coloca co"o pre,i*o a la colu"na
(%8no&'re!.
<ealice"os la consulta ...
SOL> seect e.nombre, d.nombre from emp e, dep d;

NOMBRE NOMBRE
---------- ---------------
Cano Admnstracon
Ronca Admnstracon
Rueda Admnstracon
Martn Admnstracon
Sanz Admnstracon
Lopez Admnstracon
Perez Admnstracon
Sastre Admnstracon
Garca Admnstracon
Mateo Admnstracon
Yuste Admnstracon
Reco Admnstracon
Garca Admnstracon
Santana Admnstracon
Cano I+D
Ronca I+D
Rueda I+D
...
42 rows seected.
El resultado puede sorprender un poco. Lo que o1tene"os es el producto cartesiano de
todos los e"pleados por todos los departa"entos. SQL 'a co4ido cada ,ila de la ta1la
e&$ y le 'a asociado todos los co%(%e$ de la ta1la %e$.
$ara conse4uir lo que quere"os tene"os que ,orzar que se asocie a un e"pleado con el
no"1re del departa"ento para el que tra1a*a. P esto se puede 'acer si aGadi"os la
condicin de que el co%(%e$ ten4a el "is"o valor en la ,ila de la ta1la e&$ que en la
,ila esco4ida de la ta1la %e$F
SOL> seect e.nombre, d.nombre from emp e, dep d
2> where e.cod_dep = d.cod_dep;

NOMBRE NOMBRE
---------- ---------------
Cano Admnstracon
Ronca Admnstracon
Rueda Admnstracon
Martn Admnstracon
Sanz Admnstracon
Lopez Admnstracon
Perez I+D
Sastre I+D
Garca I+D
Mateo I+D
Yuste Produccon
Reco Produccon
Garca Produccon
Santana Produccon

14 rows seected.
De la "is"a "anera se pueden co"1inar "(s de dos ta1las. Lo i"portante es e"pare*ar
los ca"pos que 'an de tener valores i4uales.
Reglas de Com!inacin
$ueden co"1inarse tantas ta1las co"o se desee.
El criterio de co"1inacin puede estar ,or"ado por "(s de una pare*a de
colu"nas.
En la cl(usula SELECT pueden citarse colu"nas de a"1as ta1las, condicionen o
no la co"1inacin.
Si 'ay colu"nas con el "is"o no"1re en las distintas ta1las, de1en identi,icarse
especi,icando la ta1la de procedencia o utilizando un alias de ta1la.
E&iste un tipo especial de co"1inacin lla"ada Com!inacin "#terna. Supon4a que
se crea un nuevo departa"ento, ("n!ert "nto %e$ va#e!
0M==3DD"!tr"'#c"onD3D.aa%o"%D2>! pero todav+a no 'e"os asi4nado personal al
"is"o. Si realiza"os la consulta anterior, el nuevo departa"ento no aparecer( en la
respuesta. $ero esto se puede evitar si seGala"os en la cl(usula WHERE la posi1ilidad de
que en la ta1la de e"pleados no e&ista al4uno de los cdi4os de departa"ento que si
e&ista en la ta1la de departa"entos. Esto se 'ace colocando un 0F2 de la si4uiente
"aneraF
SOL> seect e.nombre, d.nombre
2 from emp e, dep d
3 where e.cod_dep(+)=d.cod_dep;

NOMBRE NOMBRE
---------- ---------------
Cano Admnstracon
Ronca Admnstracon
Rueda Admnstracon
Martn Admnstracon
Sanz Admnstracon
Lopez Admnstracon
Perez I+D
Sastre I+D
Garca I+D
Mateo I+D
Yuste Produccon
Reco Produccon
Garca Produccon
Santana Produccon
Dstrbucon

15 rows seected.
1.15 Su!consultas
5 veces se 'an de utilizar en una consulta los resultados de otra consulta, lla"ada
su1consulta.
:n e*e"plo de esto ocurre cuando quere"os conocer los no"1res de los e"pleados
cuyo salario est( por enci"a de la "ediaF
SOL> seect nombre from emp
2 where saaro > (seect avg(saaro) from emp);

NOMBRE
----------
Cano
Ronca
Perez
Sastre
Yuste
Reco

6 rows seected.
La consulta "(s interna calcula el salario "edio, y la consulta "(s e&terna lo utiliza
para seleccionar los no"1res que 4anan "(s que la "edia.
El valor de co"paracin puede ser un valor si"ple, co"o en el e*e"plo anterior, o un
con*unto de valores. -ay que tener en cuenta este detalle ya que el tipo de operador a
utilizar var+a. En el pri"er caso se puede utilizar un operador de co"paracin de
car(cter arit"Ctico (R, S, etc.!. P en el se4undo uno de tipo l4ico (IN!.
Las su1consultas pueden devolver "(s de una colu"na, y se 'a1r(n de co"parar de
"anera consecuenteF
Las colu"nas de la clausula WHERE de la consulta principal de1en est(r
a4rupadas por parentesis.
Las colu"nas encerradas entre parCntesis de1en coincidir en n)"ero y tipo de
datos con los datos que devuelve la su1consulta.
El nivel de anida"iento de su1consultas es ili"itado.
Se puede utilizar una su1consulta para insertar valores en una ta1la en el "o"ento de la
creacin de la "is"a con la cl(usula AS. Si quisiera"os crear una ta1la con los datos de
los e"pleados del departa"ento JLL lo podr+a"os 'acer de la si4uiente "aneraF
SOL> create tabe dep200 (nombre, oco)
2 as seect nombre,oco from emp
3 where cod_dep=200;
Tabe created.
%o es necesario especi,icar tipos ni ta"aGos de las colu"nas, ya que vienen
deter"inados por los tipos y ta"aGos de las colu"nas recuperadas en la su1consulta.
3 "liminacin
9uando una ta1la ya no es )til y no va"os a volver a necesitarla de1e ser 1orrada. Esta
operacin se puede realizar con el co"ando DROP TABLE.
DROP TABLE taba |CASCADE CONSTRAINTS|;
Se 1orra la ta1la de la 1ase de datos, 1orrando toda la in,or"acin contenida en la ta1la,
es decir, todas las ,ilas. .a"1iCn se 1orrar( toda la in,or"acin que so1re la ta1la
e&istiera en el diccionario.
$uede que si al4una colu"na de esta ta1la a 1orrar sirva co"o clave a*ena de al4una
ta1la detalle, i"pida la eli"inacin de la ta1la, ya que e&iste una restriccin que
requiere de la e&istencia de la ta1la "aestra. Esto se puede are4lar colocando la coletilla
CASCADE CONSTRAINTS. Esto produce que las restricciones de la ta1la detalle se 1orren
antes de 1orrar la ta1la "aestra.
La si4uiente sentencia produce la eli"inacin de la ta1la de departa"entos.
SOL> drop tabe dep cascade constrants;

Tabe dropped.
4 6istas
:na vista es co"o una ventana a travCs de la cual se puede consultar o ca"1iar
in,or"acin de la ta1la a la que est( asociada.
Las vistas tienen la "is"a estructura que una ta1laF ,ilas y colu"nas. La )nica
di,erencia es que slo se al"acena de ellas la de,inicin, no los datos. Los datos que se
recuperan "ediante una consulta a una vista se presentar(n i4ual que los de una ta1la.
De 'ec'o, si no se sa1e que se est( tra1a*ando con una vista, nada 'ace suponer que es
as+. 5l i4ual que sucede con una ta1la, se pueden insertar, actualizar, 1orrar y
seleccionar datos en una vista. 5unque sie"pre es posi1le seleccionar datos de una
vista, en al4unas condiciones e&isten restricciones para realizar el resto de las
operaciones so1re vistas.
$%or &u utili'ar vistas(
Las vistas pueden proporcionar un nivel adicional de se4uridad. $or e*e"plo, en
la ta1la de e"pleados, cada responsa1le de departa"ento slo tendr( acceso a la
in,or"acin de sus e"pleados. La si4uiente sentencia produce la creacin de la
vista de los e"pleados del departa"ento de ad"inistracin (co%(%e$<4==!.

SOL> create vew ampAdmn as


2 seect * from ep where cod_dep=100;
Vew created.
Las vistas per"iten ocultar la co"ple*idad de los datos. :na BD se co"pone de
"uc'as ta1las. La in,or"acin de dos o "(s ta1las puede recperarse utilizando
una co"1inacin de dos o "(s ta1las, y estas co"1inaciones pueden lle4ar a ser
"uy con,usas. 9reando una vista co"o resultado de la co"1inacin se puede
ocultar la co"ple*idad al usuario.
Las vistas ayudan a "antener unos no"1res razona1les.
Creacin de una )ista
CREATE VIEW vsta |({coumna ,}
+
| AS consuta ;
La vista se crea con las colu"nas que devuelve una consulta. Si no nos i"porta que las
colu"nas de la vista 'ereden los no"1res de las colu"nas recuperadas en la consulta no
tene"os que especi,icarlos.
*orrado de una )ista
DROP VIEW vsta ;
4.1 7peraciones so!re 6istas
Consultas
La consultas so1re las vistas se tratan de i4ual "odo que so1re las ta1las.
Actuali'aciones
La in,or"acin puede ser actualizada en las vistas directa"ente o a travCs de las ta1las
so1re las que se de,inen.
Esisten al4unas restriccionesF
Borrado de ,ilas de una ta1la a travCs de una vista
La vista se de1e crear con ,ilas de una sola ta1laE sin utilizar las cl(usulas GROUP
BY y DISTINCTE y sin utilizar ,unciones de 4rupo o re,erencias a
pseudocolu"nas (<O0%:/!.
5ctualizacin de ,ilas a travCs de una vista
La vista 'a de estar de,inida se4)n las restricciones anteriores y ade"(s nin4una
de las colu"nas a actualizar de1e 'a1er sido de,inida co"o una e&presin.
=nsercin de ,ilas en una ta1la a travCs de una vista
.odas las restricciones y ade"(s todas las colu"nas o1li4atorias de la ta1la
asociada de1en estar presentes en la vista.
4.2 6istas de m2s de una Ta!la
Se pueden de,inir vistas so1re "(s de una ta1la. $or e*e"plo, so1re la co"1inacin de
dos ta1las.
$ode"os querer ver todos los datos de los e"pleados del departa"ento 5d"inistracin.
SOL> create vew depAdmn (cod_emp, nombre_emp,
nombre_dep, dr)
2 as seect e.cod_emp, e.nombre, d.nombre, d.oc
3 from emp e, dep d
4 where e.cod_dep=d.cod_dep and
d.nombre='Admnstracon';
SOL> seect * from depAdmn;

COD_EMP NOMBRE_EMP NOMBRE_DEP DIR
---------- ---------- --------------- ----------
101 Cano Admnstracon Vaadod
102 Ronca Admnstracon Vaadod
103 Rueda Admnstracon Vaadod
104 Martn Admnstracon Vaadod
105 Sanz Admnstracon Vaadod
106 Lopez Admnstracon Vaadod

6 rows seected.
15 8ugando con los 9om!res
5 continuacin dos co"andos que per"iten *u4ar con los no"1res de los o1*etos en
SQLF SINONYM y RENAME.
15.1 Sinnimos
SQL per"ite crear un sinni"o para una ta1la o vista. Esto supone que pueden
utilizarse dos no"1res di,erentes para un "is"o o1*eto.
Creacin de un +innimo
CREATE SYNONYM snonmo FOR |usuaro.|{taba | vsta} ;
*orrado de un +innimo
DROP SYNONYM snonmo ;
:na pri"era utilidad de los sinni"os es la posi1ilidad de independizar las aplicaciones
de los no"1res ,+sicos de las ta1las que "ane*an. 5si, las aplicaciones 'ar(n re,erencia a
un sinni"o de ta1la, que en cada caso puede estar asociado a una ta1la distinta.
Otra utilidad es la posi1ilidad de que un usuario acceda a las ta1las de otro usuario
co"o si ,ueran suyas, sie"pre que ten4a per"iso para 'acerlo, si al de,inir el sinni"o
incluye el no"1re del usuario en la deno"inacin de la ta1la. 5s+ si el usuario5 tiene
per"iso para leer el contenido de la ta1la e&$ del usuarioB, entonces desde la e*ecucin
de la sentencia CREATE SYNONYM $ant"a FOR #!#ar"oB8e&$ ver( la ta1la
#!#ar"oB8e&$ co"o $ant"a.
15.2 Comando RENAME
El co"ando RENAME se utiliza para "odi,icar el no"1re de una ta1la, vista o sinni"o.
La sint(sis es la si4uiente
RENAME {taba | vsta | snonmo} to nuevoNombre ;
Esta sentencia ca"1iar( el no"1re anti4uo por el nuevo, y a partir de este "o"ento
cualquier acceso al o1*eto por el no"1re anti4uo ser( respondido con un "ensa*e de
error.
9onviene resaltar la di,erencia entre el co"ando SYNONYM y el co"ando RENAME.
/ientras que el pri"ero "antiene el no"1re ori4inal para acceder al o1*eto, el se4undo
eli"ina ese pri"er no"1re sustituyendolo por el nuevo.
11 Lo *2s SQL*Plus
En este apartado va"os a pro,undizar un poco en las otras posi1ilidades que nos 1rinda
SQL#$lus en losF
,ic'eros de co"andos, y
4eneracin de in,or"es,
11.1 %ic&eros de Comandos
5unque ya vi"os una introduccin a los ,ic'eros de co"andos en anterior"ente, va"os
a'ora a pro,undizar un poco en las posi1ilidades que nos o,rece SQL#$lus.
En un ,ic'ero de co"andos se pueden incluirF
l+neas de co"entarios,
l+neas de e*ecucin,
l+neas de co"andos SQL, y
l+neas de co"andos SQL#$lus.
,-neas de Comentarios
Se pueden introducir co"entarios en una arc'ivo de co"andos de tres "anerasF
:tilizando del co"ando REM del SQL#$lus.
:tilizando los deli"itadores de co"entario de SQL *5 y 5*.
:tilizando los s+"1olos de co"entario $LBSQL Z((Z.
,-neas de "jecucin
9onstan de una )nica 1arra inclinada, Z*Z, y se introducen a continuacin de cada
sentencia SQL indicando su e*ecucin.
Sustituyen al punto y co"a, Z>Z al ,inal de las sentencias SQL.
,-neas de Comandos +.,
Se puede introducir cualquiera de los co"andos SQL enu"erados en este curso, y se
e*ecutar(n de "anera secuencial.
Se per"ite el anida"iento de los ,ic'eros de co"andos.
,-neas de Comandos +.,/%lus
SQL#$lus aporta una serie de posi1ilidades al len4ua*e SQL que le acerca un poco "as
a lo que entende"os co"o un len4ua*e de pro4ra"acin.
Se pueden de,inir constantes y varia1les, capturar datos del teclado, introducir
par("etros en la lla"ada de un arc'ivo de co"andos, y al4una cosa "(s.
)aria!les de 0suario
Se pueden de,inir >aria1les de usuario con el co"ando DEFINE
DEFINE Varabe = vaor
$ara 1orrar una varia1le se utiliza el co"ando UNDEFINE
UNDEFINE varabe
9o"o e*e"plo se puede de,inir la varia1le OFICIO
SOL> dene oco=anasta
)aria!les de +ustitucin
Las varia1les de sustitucin son un no"1re de varia1le de usuario con el s+"1olo Q
delante. 9uando SQL#$lus detecta una varia1le de sustitucin en un co"ando, e*ecuta
el co"ando to"ando el valor de la varia1le.
Esto se puede ver en el e*e"plo, donde pre4unta"os por los e"pleados que son
analistasF
SOL> dene oco=Anasta
SOL> dene taba=emp
SOL> seect nombre, oco from &taba where oco='&oco';
od 1: seect nombre, oco from &taba where
oco='&oco'
new 1: seect nombre, oco from emp where
oco='Anasta'

NOMBRE OFICIO
---------- -----------
Sastre Anasta
Reco Anasta
Captura de 1atos desde el Terminal
En "uc'as ocasiones es necesario reco4er datos desde un ter"inal, que lue4o ser(n
utilizados en el arc'ivo de co"andos. $ara realizarlo se pueden utilizar dos "ediosF las
varia1les de sustitucin o los par("etros en la l+nea de co"andos.
9uando SQL#$lus reconoce una varia1le de sustitucin sin valor asi4nado se lo pide al
usuarioF
SOL> seect * from dep where nombre='&nombredep';
Enter vaue for nombredep: I+D
od 1: seect * from dep where nombre='&nombredep'
new 1: seect * from dep where nombre='I+D'

COD_DEP NOMBRE LOC
---------- --------------- ----------
200 I+D Boeco
Si se desea que SQL#$lus pre4unte por el valor de la varia1le al usuario slo la pri"era
vez que se encuentra con ella, se colocar( ZQQZ delante de la varia1le de usuario.
.a"1iCn se pueden utilizar 'asta nueve par("etros en la l+nea de co"andos cuando se
lla"a a la e*ecucin de un arc'ivo de co"andos.
En el arc'ivo de co"andos nos re,erire"os a los par("etros con las varia1les Q4,
Q/, ... ,QC que se corresponden posicional"ente con ellos.
Desde el arc'ivo de co"andos se puede 'acer re,erencia a los par("etros cualquier
n)"ero de veces y en cualquier orden.
Comandos de Comunicacin con el 0suario
Los si4uientes co"andos proporcionan un "edio de co"unicacin con el usuarioF
$<O/$.F presenta un "ensa*e en la pantalla.
599E$.F Solicita un valor y lo al"acena en la varia1le de usuario que se
especi,+que.
$5:SEF O1li4a al usuario a pulsar (eturn despuC de leer un "ensa*e.
$ara ver c"o ,uncionan sirve el si4uiente e*e"ploF
prompt Buscar os datos de un empeado.
pause Puse Return.
accept nombremp prompt 'Empeado? '
seect * from emp where nombre='&nombremp';
Otros Comandos
Los si4uientes co"andos ta"1iCn se pueden incluir en un arc'ivo de co"andosF
9O%%E9.F para conectarse co"o otro usuario.
-EL$F para o1tener ayuda en l+nea.
EY=.F para de*ar SQL#$Lus y salir al Siste"a Operativo.
DES9<=BE DES9F para o1tener in,or"acin so1re la estructura de una ta1la.
-OS. o QF para e*ecutar un co"ando del Siste"a Operativo.
11.2 :eneracin de In+ormes
9on SQL#$lus pode"os dar ,or"a a los resultados de las consultas para producir un
in,or"e. $odre"osF
9a"1iar las ca1eceras de las colu"nas.
Dar ,or"a a las colu"nas de tipo n#&'er, varc,ar/, %ate y ong.
9opiar y listar atri1utos de presentacin de las colu"nas.
Supri"ir valores duplicados e introducir espacios para "e*orar la presentacin.
<ealizar y "ostrar c(lculos (totales, "edias, "+ni"os, "(&i"os, etc.!.
De,inir las di"ensiones de las p(4inas.
:1icar t+tulos en la ca1ecera y pie de las p(4inas.
=ntroducir la ,ec'a o el n)"ero de p(4ina en los t+tulos.
$ero de todo esto slo va"os a ver el "odo de realizar las operaciones "(s co"unes y
sencillas.
B(sica"ente, el ,or"ato con el que se van a presentar los resultados de las cosultas
dependen de unos par("etros y de unos co"andos.
%armetros
SE. L=%ES=[EF pone el n)"ero "(&i"o de caracteres por l+nea. $or de,ecto
vale 8L y el "(&i"o es 777.
SE. $5GES=[EF pone el n)"ero de ,ilas de la salida antes de e"pezar una
nueva p(4ina. $or de,ecto es JN. =ncluye el t+tulo y las l+neas de pausa.
SE. -E5D=%G \O% W O;;]F 5ctivaBdesactiva la utilizacin de enca1ezados de
colu"nas. $or de,ecto est( activado.
SE. %:LL te&toF =ndica la cadena de caracteres que 'ay que colocar en
sustitucin de los valores %:LL. $or de,ecto es ZZ.
SE. E9-O \O% W O;;]F 5ctivaBdesactiva la visualizacin de los co"andos que
SQL#$lus e*ecuta se4)n van siendo tratados. $or de,ecto est( desactivada.
SE. ;EEDB59^ \ n W O% W O;;]F /uestra el n)"ero de re4istros recuperados
en cada consulta cuando se recuperan n o "(s re4istros. O% se pueden
considerar co"o n@6, y O;; co"o n@L.
SE. >E<=;P \O% W O;;]F 9ontrola la salida de con,ir"acin para los valores
de las varia1les de sustitucin. $or de,ecto est( activado.
Comandos
..=.LEF ,or"acin del enca1ezado de p(4ina.
B.=.LEF ,or"acin del pie de p(4ina.
9OL:/%F ,or"atear cada colu"na.
B<E5^F puntos de ruptura en los listados.
9O/$:.EF realizar c(lculos con las colu"nas.

Potrebbero piacerti anche