Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual SQL
Manual SQL
Lenguaje SQL
Lenguaje SQL
Pgina 1/43
ndice
1 2 Introduccin 1.1 Caractersticas y Beneficios de SQL El Lenguaje SQL 2.1 D L !Data ani"ulation Language# 2.2 DDL !Data Definition Language# 2.$ DCL !Data Control Language# 2.% Ele&entos de SQL 2.' ()jetos de un Es*ue&a 2.+ ,eglas "ara -o&)rar ()jetos 2.. ,eglas "ara ,eferenciar ()jetos 2./ 0lias de -o&)re de 1a)la 2.2 0lias de Colu&nas 2.13 1i"os de Datos El Lenguaje de ani"ulacin de Datos $.1 La Sentencia SELEC1 $.2 ("eradores. 4unciones y Condiciones $.$ Co&)inaciones de 1a)la 56(I-S7 $.% Su)consultas o Su)selects $.' La Sentencia I-SE,1 $.+ La Sentencia 89D01E $.. La Sentencia DELE1E El Lenguaje de Definicin de Datos %.1 Sentencias DDL %.2 C,E01E 10BLE %.$ C,E01E I-DE: %.% C,E01E S;-(-; %.' C,E01E <IE= %.+ 0L1E, 10BLE %.. D,(9 10BLE %./ D,(9 I-DE: %.2 D,(9 S;-(-; %.13 ,E-0 E %.11 1,8-C01E El Lenguaje de Control de Datos '.1 9ri>ilegios y ,oles '.2 C,E01E ,(LE '.$ ?,0-1 '.% ,E<(@E
'
Lenguaje SQL
Pgina 2/43
Introduccin
El lenguaje SQL consiste en un grupo de comandos ue todos los programas ! usuarios pueden utili"ar para acceder a los datos dentro de una #ase de datos$ %ormalmente& se accede a los datos a tra'(s de aplicaciones o )erramientas sin tener ue utili"ar directamente SQL& pero las aplicaciones estn reali"adas con dic)o lenguaje$ El modelo de #ase de datos relacional *ue originalmente desarrollado por E$ +$ ,odd )acia los a-os ./$ El lenguaje SQL *ue desarrollado por 0B1 en un prototipo de #ase de datos relacional llamada S2S3E1 R a mediados de los ./$ El lenguaje SQL original 4SEQ5EL26 se de*ini7 en %o'iem#re de 18.9 por la re'ista de 0B1 llamada 0B1 :ournal o* R;D$ En 18.8 <racle ,orporaci7n introduce la primera implementaci7n comercial disponi#le de este lenguaje$ SQL tam#i(n )a sido implementado como lenguaje para los sistemas de #ase de datos de 0B1 DB2 ! SQL/DS$ SQL est implementado ! aceptado estndar de la industria como lenguaje de acceso a #ases de datos$ ,umple los estndares =%S0/0S</+0PS 4=merican %ational Standard 0nstitute& 0nternational Standars <rgani"ation& +ederal 0n*ormation Processing Standard respecti'amente6$
Lenguaje SQL
Pgina 3/43
SQL es un lenguaje uni*icado para todo tipo de tareas ! categorCas inclu!endo> ,onsulta& actuali"aci7n& inserci7n ! #orrado de *ilas en una ta#la$ ,reaci7n modi*icaci7n reempla"amiento ! #orrado de o#jetos$ ,ontrol de acceso a la #ase de datos ! a sus o#jetos$ Daranti"ar integridad ! consistencia de los datos$
El Lenguaje SQL
%ormalmente una #ase de datos relacional almacena in*ormaci7n en estructuras #sicas denominadas ta#las$ 5na ta#la es una estructura so#re la ue se almacena in*ormaci7n ue interesa a nuestro sistema$ 5na ta#la est compuesta por columnas ! *ilas$ 5na columna es la representaci7n de un atri#uto& propiedad o caracterCstica de una ta#la$ 5na *ila es una ocurrencia en la ta#la$ Se pueden esta#lecer reglas a las ue ueremos ue se ajusten nuestros datos& o u( tipos de datos se almacenen$ Se pueden esta#lecer tam#i(n relaciones entre las ta#las de nuestras aplicaciones$ La implementaci7n de estas reglas se detallar en los pr7Aimos capCtulos$ El lenguaje s l se su#di'ide a su 'e" en tres tipos de lenguaje dependiendo del tipo de operaci7n ue deseemos reali"ar so#re la #ase de datos$ Estos tipos son> D1L 4Data 1anipulation Language6 DDL 4Data De*inition Language6 D,L 4Data ,ontrol Language6
Lenguaje SQL
Pgina 4/43
Elementos de SQL
=ntes de comen"ar a tra#ajar con s l se de#e estar *amiliari"ado con los siguientes conceptos> <#jetos de un Es uema Reglas para %om#rar <#jetos Reglas para Re*erenciar <#jetos 3ipos de Datos ()jetos de un Es*ue&a 5n es uema es un conjunto de o#jetos o estructuras de datos propiedad de un usuario$ ,ada usuario tiene su propio es uema& ue coincide con el nom#re del usuario ue crea el o#jeto$ Los o#jetos se crean& ! se puede modi*icar su estructura& con el lenguaje DDL$ Los o#jetos son de los siguientes tipos> 3a#las 4Estructura Bsica6 Endices Secuencias Fistas Sin7nimos =grupaciones Procedimientos ! +unciones almacenados Pa uetes
Lenguaje SQL
Pgina G/43
Disparadores 4triggers6 almacenados en #ase de datos Replicas ! Replicas l7gicas Enlaces de #ases de datos
EAisten otros o#jetos ue se crean ! manipulan a tra'(s de s l& ! ue se almacenan en la #ase de datos& pero no son creados dentro del es uema de un usuario& ni son propiedad de nadie$ Estos o#jetos son> Per*iles Roles Segmentos de Roll#acH 3a#lespaces =lgunos o#jetos estn di'ididos a su 'e" en partes mas pe ue-as& como por ejemplo> 5na columna es una parte de una ta#la o 'ista$ 5na restricci7n de integridad es parte de una ta#la$ Procedimientos ! *unciones son parte de un pa uete$ ,eglas "ara -o&)rar ()jetos Las reglas de nomenclatura de o#jetos son> El nom#re de un o#jeto de#e tener una longitud entre 1 4mCnimo6 ! 3/ caracteres 4mAimo6$ EAcepto> 1$ El nom#re de una #ase de datos est limitado a I caracteres$ 2$ El nom#re de un enlace de #ase de datos esta limitado a 12I caracteres$ El nom#re de un o#jeto no puede estar entre par(ntesis& ni entrecomillado& etc$ Los nom#res de o#jetos pueden escri#irse en ma!Jsculas o minJsculas$ El nom#re del o#jeto de#e comen"ar con un carcter reconoci#le por el conjunto de caracteres de la #ase de datos& ! ue no sea un num(rico$ El nom#re de un o#jeto solo contiene caracteres al*anum(ricos& ! se permite adems el carcter underscore 4KLM6$ 3am#i(n admite& pero se desaconseja por uso interno& los caracteres d7lar 4KNM6 ! almo)adilla 4KOM6$ EAiste una lista de pala#ras reser'adas ue no pueden utili"arse para nom#rar o#jetos$ Se puede nom#rar un o#jeto con un nom#re alternati'o o sin7nimo& ! a una columna con un nom#re alternati'o temporal& denominado alias$
Lenguaje SQL
Pgina 9/43
,eglas "ara ,eferenciar ()jetos La sintaAis general para re*erenciar un o#jeto es la siguiente>
[esquema.]nombre_objeto[.parte_objeto]
donde>
esquema
nombre_objeto parte_objeto
0ndica el es uema propietario del o#jeto$ Por ejemplo de#emos indicar el usuario ue creo dic)o o#jeto cuando ueremos consultarlo ! no tenemos sin7nimos asociados$ 0ndica el nom#re del o#jeto ue ueremos re*erenciar$ 0ndica una parte determinada del o#jeto$ Por ejemplo para indicar una columna de una ta#la en una sentencia select$ Es o#ligatorio indicar el nom#re de ta#la al ue pertenece una columna cuando estamos reali"ando una consulta a dos ta#las ue tienen columnas ue se denominan igual$
0lias de -o&)re de 1a)la Se utili"a para renom#rar temporalmente una ta#la dentro de una sentencia select& por ra"ones de clari*icaci7n ! desarrollo$ %o es lo mismo un alias de ta#la ue un sin7nimo en el sentido de <racle& !a ue este Jltimo es un nom#re alternati'o ue se crea para una ta#las& 'ista& etc$ ! ue permanece )asta ue se elimina$ 5n alias de ta#la solo eAiste durante la ejecuci7n de la sentencia select en la ue se utili"a$ La sintaAis es>
from nombre_objeto alias
donde>
nombre_objeto alias
0ndica el o#jeto 4ta#la& 'ista& sin7nimo6 al ue estamos re*erenciando 0ndica el nom#re por el ue se 'a a reconocer en la sentencia select a dic)o o#jeto$
0lias de Colu&nas En el resultado de una consulta aparecen en las ca#eceras de las columnas el nom#re ue dic)a columna tenga en la ta#la$ Si deseamos cam#iarlo para modi*icar la 'isuali"aci7n del resultado& podemos utili"ar alias de columna$ 3am#i(n se pueden utili"ar para re*erenciar dic)as columnas desde comandos s lplus$ ,uando el alias de una columna est compuesto por mas de una pala#ra& ! eAisten espacios en #lanco& o algJn carcter especial en medio& de#e acotarse el literal con do#les comillas$ 1i"os de Datos ,ada literal o 'alor de columna ue se manipula esta englo#ado en un tipo de dato$ ,ada tipo de dato contiene una serie de caracterCsticas asociadas& por ejemplo un limite en la longitud del 'alor ue pueden tener$
Lenguaje SQL
Pgina ./43
,uando se crea una ta#la se especi*ica a ue tipo de datos asociamos cada columna$ Luego& dependiendo del tipo de dato podremos insertar ciertos 'alores o esta#lecer ciertas comparaciones$ Los tipos de datos son> ,7digo 3ipo Dato VARCHAR !tama"o# 1 Descripci7n ,adena de caracteres de longitud 'aria#le$ La mAima longitud se indica en tama-o$ El tama-o mAimo es 2/// caracteres en la 'ersi7n . ! 2GG en la 'ersi7n 9$ %Jmero de tama-o n dCgitos 4)asta 3I6 de los cuales d dCgitos son dedicados a la parte decimal$ ,adena de caracteres de longitud 'aria#le$ 3ama-o )asta 2 Diga #!tes$ +ec)a$ Dato #inario de longitud 'aria#le$ 3ama-o mAimo de 2GG #!tes$ ,adena #inaria de longitud 'aria#le de )asta 2 Diga #!tes$ Pseudocolumna en notaci7n )eAadecimal ue indica la posici7n *Csica de una *ila en la #ase de datos$ ,adena al*anum(rica de longitud *ija$ 3ama-o mAimo 2GG #!tes$ Si no se indica precisi7n ocupa un carcter$
2 I 13 23 24 98 89
Los c7digos de los tipos de datos son los utili"ados internamente por <racle en el diccionario$
El Lenguaje de
select insert update delete
ani"ulacin de Datos
La Sentencia SELECT
3odas las consultas se reali"an con una sola sentencia> select Las consultas se reali"an por asociaci7n de 'alores& ! no por la situaci7n *Csica donde se encuentren los datos$ Se puede recuperar toda la in*ormaci7n o tam#i(n su#conjuntos de *ilas o de columnas$ La representaci7n de los datos se puede ordenar$
Lenguaje SQL
Pgina I/43
La sintaAis es>
Para tra#ajar con SQL utili"aremos la )erramienta <racle denominada s lPplus& desde donde ejecutaremos las sentencias deseadas$ S lPplus contiene sus propios comandos de edici7n& *ormateo de columnas ! clculos& ! rupturas de control #asndose en los resultados$ Qa! ue distinguir entre comandos s lPplus ! sentencias s l$ La )erramienta s lPplus esta comentada en su correspondiente manual$ Despu(s de la clusula select indicamos la lista de columnas ue deseamos seleccionar$ Se pueden seleccionar todas las columnas de una ta#la& indicando cada una de ellas& separadas por comas& o indicando el sCm#olo asterisco 4KPM6 ue uiere decir todas las columnas$
Lenguaje SQL
Pgina 8/43
,on la clusula from indicamos el nom#re de la ta#la& o ta#las& de las ue deseamos eAtraer o contrastar in*ormaci7n$ En la clusula from de#en aparecer los nom#res de las ta#las a las ue pertenecen las columnas mencionadas en cual uiera de las otras clusulas$ Si )a! mas de una ta#la se separan mediante comas 4K&M6$ La clusula from de#e aparecer despu(s de la enumeraci7n de columnas de la clusula select$ Recordar ue cuando la ta#la no es de nuestra propiedad se de#e anteponer al nom#re de la ta#la el nom#re del es uema propietario$ ,uando se me"clan dos ta#las o mas en una consulta es con'eniente anteponer el nom#re de la ta#la al de la columna cada 'e" ue la columna es re*erenciada$ 3am#i(n se puede asignar un alias temporal al nom#re de ta#la ! utili"ar este como pre*ijo de la columna$ La clusula 12ere se utili"a para *iltrar in*ormaci7n so#re las *ilas ue deseamos recuperar$ Solo se mostrarn a uellas ue cumplan la condici7n impuesta$ La clusula 12ere puede utili"arse tam#i(n en otras sentencias de manipulaci7n& como por ejemplo update ! delete$ El criterio de #Js ueda puede ser tan complejo como se desee$ Las comparaciones esta#lecidas en la clusula 12ere dependen de los tipos de datos so#re los ue esta#le"co dic)as comparaciones$ Para cada tipo de datos se utili"an operadores de comparaci7n& ! en algunos casos *unciones de con'ersi7n para igualar tipos de datos distintos$ La clusula order b3 determina el orden en el ue se mostrar el resultado de la consulta$ =dmite la ordenaci7n por mas de una columna$ 3am#i(n se admite ue la columna especi*icada en la clusula order b3 sea una eApresi7n o )a!a sido modi*icada por una *unci7n$ Se admite la ordenaci7n por posici7n$ El conjunto de caracteres de ordenaci7n se #asa en el parmetro de arran ue de la #ase de datos denominado %LSLS<R3& ue est implCcito a su 'e" en otro denominado %LSLL=%D 4de %ational Language Support ue es la utilidad ue le indica al ser'idor el lenguaje en el ue de#e tra#ajar6$ %o se ordenar igual si tenemos el soporte al lenguaje americano ue al espa-ol 4utili"aci7n de e-es& por ejemplo6$ La ordenaci7n por de*ecto es ascendente& pero se puede indicar si se desea& para cada uno de los campos el tipo de ordenaci7n 4asc para ordenaci7n ascendente ! desc para ordenaci7n descendente6$ Para utili"ar el m(todo de posici7n se indica en la clusula order b3 el nJmero de posici7n ue ocupa la columna o eApresi7n por la ue ueremos ordenar en la clusula select$ Por ejemplo>
select nombre) apellido4) apellido ) edad from curso order b3 )5)6)47
)arCa ue el resultado saliese ordenado por apellido1& apellido2& edad ! nom#re$ La utili"aci7n del m(todo de posici7n en la clusula order b3 se lle'a a ca#o cuando la cantidad de columnas por las ue se desea ordenar es mu! grande& aun ue se puede usar en cual uier situaci7n& pero es menos clari*icadora en sentencias select pe ue-as$
Lenguaje SQL
Pgina 1//43
("eradores arit&Aticos = continuaci7n 'eamos una lista de los operadores aritm(ticos> <perador Prop7sito Ejemplo select salario8comision 8& 9 Suma ! resta$
:& ;
<salario anual=
<perador
>>
cadenas
("eradores condicionales o de co&"aracin Los operadores de comparaci7n se utili"an en los predicados condicionales& para comparar una eApresi7n con otra$ El resultado puede ser 'erdadero 43R5E6& *also 4+=LSE6$ Los operadores de comparaci7n son> <perador Prop7sito Ejemplo @ ,ompro#ador de select : from departamento igualdad$
B@) CD D C D@
12ere ndepartamento @ 4A7 select : from departamento 12ere ndepartamento B@ 4A7 select : from empleados 12ere salario D 4EAA7 select : from empleados 12ere salario C 4EAA7 select : from empleados
Lenguaje SQL
Pgina 11/43
Programador/a de Sistemas de Bases de Datos Relacionales 12ere salario D@ 5AAA7 select : from empleados 12ere salario C@ AAA7 select : from departamento 12ere ndepartamento in !4A)5A)EA#7 select : from departamento 12ere ndepartamento not in !4A) A)EA#7 select : from empleados 12ere salario bet1een AAA and 5AAA7 select : from empleados 12ere salario not bet1een 5AAA7 select : from empleados 12ere comision is null7
C@ 0$ $+. 0$
1enor o igual ue$ 0gual a uno de los 'alores de la lista$ El 'alor no se encuentra en la lista$ El 'alor es ma!or o igual ue n ! menor o igual ue m$ El 'alor no esta dentro del rango delimitado por n ! m$ ,omprue#a si )a! ausencia de contenido 4'alor6 en una columna$ Es el Jnico operador ue puede compro#arlo$ ,omprue#a si )a! contenido 4'alor6 en una columna$ ,omprue#a cadenas de caracteres con un patr7n de #Js ueda$ ,omprue#a cadenas de caracteres ue no coincidan con un patr7n de #Js ueda$
AAA and
select : from empleados 12ere comision is not null7 select : from empleados 12ere apellido4 like ?&AR.0HI select : from empleados 12ere apellido4 not like ?&AR.0HI
$+. *0G(
("erador liBe Feamos a continuaci7n con mas detalle el operador like$ El operador like #usca cadenas de caracteres ue contengan la porci7n de cadena indicada& mientras ue el operador igual 4K@M6 #uscarCa cadenas de caracteres id(nticas a la proporcionada$ Para reali"ar #Js uedas con like se utili"an los caracteres comodines KHM ! K_M$ El sCm#olo KHM indica cual uier cadena de caracteres de longitud 'aria#le$ En el ejemplo anterior #uscarCa todos los empleados cu!o primer apellido comen"ase con la cadena K1=R30M& sin importar la continuaci7n 4K1=R30%M& K1=R30%ESM& etc$6$ El sCm#olo K_M 4underscore6 indica cual uier carcter en la posici7n donde se encuentre& pero uno solo$
Lenguaje SQL
Pgina 12/43
("eradores lgicos Los operadores l7gicos se utili"an para com#inar los resultados de dos condiciones de comparaci7n ! producir un Jnico resultado$ Los operadores l7gicos son> <perador
$+.
A$-
Prop7sito De'uel'e 3R5E si la condici7n e'aluada es *alsa& de otra manera de'uel'e +=LSE$ De'uel'e 3R5E si las dos condiciones se cumplen$ De'uel'e 3R5E si alguna de las condiciones se cumple
Ejemplo
select : from empleados 12ere not !apellido4@I&AR.0$I# select from 12ere and select from 12ere or : empleados puesto@IA$A*0F.AI ndepartamento@4A : empleados puesto@IA$A*0F.AI ndepartamento@4A
+R
Dentro de los operadores l7gicos eAisten los operadores de conjuntos$ Los operadores de conjuntos son a uellos ue 'isuali"an los resultados de dos consultas en un Jnico resultado$ Los operadores de conjuntos son> <perador
%$0+$ %$0+$ A** 0$.(RF(C. &0$%F
TQue de'uel'eU Suma de todas las *ilas distintas seleccionadas por am#as consultas$ Suma todas las *ilas seleccionadas por am#as consultas inclu!endo duplicados$ De'uel'e todas las *ilas comunes de am#as consultas eliminando duplicados$ De'uel'e todas las *ilas seleccionadas por la primera consulta ue no sean recuperadas por la segunda consulta$
4unciones 5na *unci7n es similar a un operador puesto ue manipula datos ! de'uel'e un resultado$ Di*iere de los operadores& puesto ue admite argumentos$ Si se llama a una *unci7n con un argumento en el ue el tipo de dato es distinto al ue espera la *unci7n& se con'ierte automticamente ! de *orma implCcita al tipo ue la *unci7n espera$
Lenguaje SQL
Pgina 13/43
EAisten dos tipos gen(ricos de *unciones> +unciones de *ila simple $ +unciones de grupo$ Estos dos tipos di*ieren en el nJmero de *ilas so#re las ue actJan$ 5na *unci7n de *ila simple de'uel'e un resultado Jnico para cada *ila so#re la ue actJa& mientras ue una *unci7n de grupo de'uel'e un resultado Jnico para un conjunto de *ilas$ Las *unciones de *ila simple pueden aparecer en las listas de la clusula select$ Las *unciones de grupo pueden aparecer adems de en la clusula select en una clusula llamada group b3 J 2aving& ue sir'e para crear rupturas so#re resultados ! 'isuali"ar s7lo la parte ue nos interesa$ La distri#uci7n entre tipos de *unci7n ser la siguiente> +unciones de *ila simple$ 1$ +unciones num(ricas$ 2$ +unciones de caracteres$ 3$ +unciones de *ec)as$ 4$ +unciones de con'ersi7n$ G$ <tras *unciones$ +unciones de grupo$ 4unciones de fila si&"le Las *unciones siguientes son *unciones agrupadas segJn el tipo de dato esperan como argumento ! el tipo de dato ue de'uel'e$ 4unciones nu&Aricas Son a uellas 'alores num(ricos> +unci7n a#s ceil cos cos) eAp *loor ln log mod SintaAis
abs!n# ceil!n# cos!n# cos2!n# eKp!n# floor!n# ln!n# log!m) n#
ue
ue aceptan como entrada argumentos num(ricos ! de'uel'en Prop7sito De'ol'er el 'alor a#soluto de n$ De'uel'e el entero inmediatamente superior o igual a n$ De'uel'e el coseno de n 4n est en radianes6$ De'uel'e el coseno )iper#7lico de n$ De'uel'e el nJmero e ele'ado a n$ De'uel'e el entero inmediatamente in*erior o igual a n$ De'uel'e el logaritmo neperiano de n 4nV/6$ De'uel'e el logaritmo en #ase m de n$ La #ase m de#e ser un nJmero positi'o distinto de / o 1$ n tam#i(n de#e ser un 'alor positi'o$ De'uel'e el resto resultante de di'idir m entre n$
mod!m) n#
Lenguaje SQL
Pgina 14/43
+unci7n poBer
SintaAis
po1er!m) n#
round!n[)m]#
Prop7sito De'uel'e m ele'ado a la potencia n$ La #ase m ! el eAponente n pueden ser cual uier tipo de nJmero& pero si m es negati'o& n de#e ser un entero$ De'uel'e n redondeado a m dCgitos$ Si se omite m el 'alor por de*ecto es cero$ m puede ser negati'o$ Si nCA retorna W1& si n@A de'uel'e / ! si nDA retorna 1$ De'uel'e el seno de n$ De'uel'e el seno )iper#7lico de n$ De'uel'e la raC" cuadrada de n$ El 'alor de n no puede ser negati'o$ De'uel'e la tangente de n$ De'uel'e la tangente )iper#7lica de n$ De'uel'e n truncado a m decimales$ Si se omite m el 'alor por de*ecto es cero$
4unciones de caracteres +unciones de manejo de caracteres ue de'uel'en caracteres$ +unciones de *ila simple ue aceptan como argumento de entrada un carcter ! de'uel'en 'alores tipo carcter$ +unci7n c)r concat initcap loBer lpad SintaAis
c2r!n#
ltrim
replace
Prop7sito De'uel'e el carcter cu!o nJmero ascii correspondiente es n$ concat!char1) char2# De'uel'e char1 concatenado con char2$ Es e ui'alente al operador KXXM$ initcap!char# De'uel'e la cadena con la primera letra de cada pala#ra en ma!Jsculas& ! el resto en minJsculas$ lo1er!char# De'uel'e la cadena con todas las letras en minJsculas$ lpad!char1)n[)char2]# De'uel'e char1 rellenado a la i" uierda& )asta completar la longitud indicada en n& con el carcter indicado en char2$ Si char2 se omite rellena con #lancos$ ltrim!char[)muestra]# Borra los caracteres a la i" uierda de char& )asta encontrar el primer carcter ue no este en muestra$ Por de*ecto el 'alor de muestra es el carcter #lanco$ replace!char) Para la cadena elegida& char& reempla"a car_bus[) car_rep]# car_bus por car_rep$
Lenguaje SQL
Pgina 1G/43
+unci7n rpad
SintaAis
rtrim
Prop7sito De'uel'e char1 rellenado a la derec)a )asta la longitud indicada en n con la cadena indicada en char2$ Si char2 se omite rellena con #lancos$ rtrim!char[)muestra]# Borra los caracteres a la derec)a de char )asta encontrar el primer carcter ue no este en muestra$ Por de*ecto muestra es un #lanco$ substr!char) m[) n]# De'uel'e una parte de char empe"ando en la posici7n indicada en m& ! tomando el nJmero de caracteres indicado en n$ translate!char) De'uel'e char con todas las caracteres ue muestra1) muestra2# aparecen en muestra1 sustituidos por el correspondiente en muestra2$ upper!char# De'uel'e la cadena char con todos los caracteres en ma!Jsculas$
rpad!char1)n[)char2]#
4unciones de &anejo de caracteres *ue de>uel>en nC&eros. +unciones de *ila simple ue aceptan como argumento de entrada un carcter ! de'uel'en 'alores num(ricos$ +unci7n ascii SintaAis
ascii!char#
instr
instr!char1)char2 [)n[)m]]#
lengt)
lengt2!char#
Prop7sito De'uel'e la representaci7n num(rica en el juego de caracteres ue se utili"a en la #ase de datos de la cadena char$ Si se utili"a ascii& en ascii& ! si se utili"a e#cdic de'ol'er el 'alor e#cdic$ Busca en char1 la cadena indicada en char2& empe"ando a partir del carcter cu!a posici7n es n& ! nos de'ol'er la posici7n de la mWsima aparici7n$ Por de*ecto m ! n 'alen 1$ De'uel'e la longitud de char en caracteres& inclu!endo los #lancos$
Lenguaje SQL
Pgina 19/43
4unciones de fecDas 3odas las *unciones ue operan con 'alores de tipo date de'uel'en 'alores de tipo *ec)a& a eAcepci7n de &+$.HF_'(./(($ & ue de'uel'e un nJmero$ +unci7n addLmont)s lastLda! SintaAis
add_mont2s!f) n# last_da3!f#
mont)sL#etBeen mont2s_bet1een!f1)
f2#
neAtLda!
neKt_da3!f) char#
Prop7sito De'uel'e la *ec)a f mas n meses$ De'uel'e la *ec)a del Jltimo dCa del mes ue contenga la *ec)a f$ Se puede utili"ar para determinar cuantos dCas uedan del mes$ De'uel'e el nJmero de meses transcurridos entre f1 ! f2$ De'uel'e la *ec)a del primer dCa de la semana indicado en char& a partir de la *ec)a indicada en f$
4unciones de con>ersin Sir'en para con'ertir un tipo de dato en otro$ +unci7n c)artoroBid con'ert SintaAis Prop7sito ,on'ierte una 'aria#le char de tipo de dato c)ar o 'arc)ar2 a tipo roBid$ Para ello c2ar de#e respetar la representaci7n roBid$ convert!char)des ,on'ierte char de un juego de caracteres [)fuen]# fuen a un juego de caracteres des$ Si se omite el juego de caracteres *uente& toma por de*ecto el de la #ase de datos$ 2eKtora1!char# ,on'ierte una cadena char ue contiene un 'alor en )eAadecimal a *ormato raB$ ra1to2eK!raw# ,on'ierte el 'alor raw a su e ui'alente )eAadecimal$ ro1idtoc2ar!rowid# ,on'ierte un tipo de datos roBid contenido en la 'aria#le rowid a tipo de datos 'arc)ar2$ De la con'ersi7n resulta siempre una cadena de 1I caracteres de longitud$ to_c2ar!f[)formato]# ,on'ierte una *ec)a f de tipo date& o un nJmero f de tipo num#er& en un 'arc)ar2& utili"ando la mscara indicada en formato$ to_date!char ,on'ierte una cadena char de tipo c)ar o [) formato]# 'arc)ar2 en un 'alor tipo date$ El formato es la mscara de la *ec)a$ Si se omite toma el *ormato por de*ecto$
c2artoro1id!char#
toLc)ar toLdate
Lenguaje SQL
Pgina 1./43
+unci7n toLnum#er
SintaAis
to_number!char [) formato]#
Prop7sito ,on'ierte char& de tipo de dato c)ar o 'arc)ar2& a un tipo num#er$ to_number utili"a la mascara especi*icada en formato para conocer como ser la entrada de datos$
Escaras de for&atos. !ormatos num"ricos De#en proporcionarse las mascaras de con'ersi7n& en *ormato num(rico& adecuadas cuando> En una *unci7n to_c2ar se cam#ia un tipo de dato num#er a un tipo de dato 'arc)ar2$ En una *unci7n to_number se cam#ia un tipo de dato 'arc)ar2 o c)ar a num#er$ Los *ormatos num(ricos estn compuestos de uno o mas elementos de *ormatos$ Dic)os elementos son> Elemento
L
Ejemplo
LLLLLLL
ALLLLL M LLLLLA
N ' &0
FLLLLL
OR , C
Descripci7n El nJmero de nue'es especi*ica la cantidad de dCgitos ue se 'isuali"an$ Se 'isuali"an #lancos para los ceros a la i" uierda$ Fisuali"a los ceros a la i" uierda en esa posici7n como ceros en 'e" de como #lancos& o 'isuali"a el 'alor /& en lugar de #lancos$ =ntepone como pre*ijo el sCm#olo N$ De'uel'e los ceros como #lancos a menos ue se indi ue cero en la mscara de *ormato$ Fisuali"a el signo menos despu(s de los 'alores negati'os$ Para los 'alores positi'os muestra un espacio en #lanco$ 1uestra un mas 4K8M6 para los 'alores positi'os ! un menos 4K9M6 para los negati'os en la posici7n indicada$ 1uestra los 'alores negati'os entre los signos KCM ! KDM$ 1uestra el carcter decimal en la posici7n indicada$ Separa la parte entera ! *raccionaria de un nJmero$ 1uestra el separador de grupo en la posici7n indicada$ 1uestra el sCm#olo 0S< de la moneda en la posici7n indicada$
Lenguaje SQL
Pgina 1I/43
Elemento
* ) !coma# . !punto# (((( R$
Ejemplo
*LLLL L)LLL LLL.L L.LLL(((( R$
Descripci7n 1uestra el sCm#olo de la moneda local en la posici7n indicada$ 1uestra una coma en la posici7n indicada$ 1uestra un punto en la posici7n indicada& separando la parte entera de la decimal$ 1uestra el 'alor en notaci7n cientC*ica$ De'uel'e en ma!Jsculas o minJsculas 4rn6 el 'alor del nJmero en notaci7n romana$ El nJmero de#e ser un entero entre 1 ! 3888$
pueden estar en la Jltima posici7n de un *ormato num(rico$ El estar en la primera o Jltima posici7n$
Los caracteres ue de'uel'en los *ormatos -& ,& C& * son especi*icados por los siguientes parmetros de iniciali"aci7n de la #ase de datos$
, C *
,arcter Decimal Separador Drupo SCm#olo 1oneda 0S< SCm#olo 1oneda !ormatos tipo fec#a
Elemento
FCC M CC PPPP M FPPPP 0PPP PPP M PP M P 0PP M 0P M 0 P)PPP FP(AR M P(AR RR 'C o A'.C. o A.-. Q && R& mont2 mon
Signi*icado 0ndica el siglo$ Si se indica F& en las *ec)as de antes de ,risto aparece el pre*ijo K9M$ Fisuali"a los cuatro dCgitos del a-o$ F antepone el pre*ijo K9M para las *ec)as anteriores a ,risto$ Los cuatro dCgitos del a-o en *ormato 0S< estndar$ Los Jltimos 3& 2& o 1 dCgito/s del a-o$ Los Jltimos 3& 2& o 1 dCgito/s del a-o en *ormato 0S< estndar$ El a-o con una coma 4K)M6 en la posici7n indicada$ El nJmero del a-o en letras$ F antepone el pre*ijo K9M para las *ec)as anteriores a ,risto$ Los Jltimos dos dCgitos del a-o$ Se utili"a para a-os de otros siglos$ 0ndicador antes/despu(s de ,risto$ 0ndicador antes/despu(s de ,risto separado por puntos$ 3rimestre del a-o 4EneroW1ar"o Y 16$ %Jmero de mes 4Enero Y 16$ %Jmero de mes en notaci7n romana 4:ulioYF006$ %om#re del mes alineado con #lancos )asta nue'e caracteres de longitud$ %om#re del mes a#re'iado a tres letras$
Lenguaje SQL
Pgina 18/43
Elemento
11 0/ 1 ddd dd d da3 d3 j am M pm a.m. M p.m. 22 M 224 22 6 mi ss sssss
Signi*icado %Jmero de la semana del a-o$ %Jmero de la semana del a-o en 0S< estndar$ %Jmero de semana dentro del mes$ %Jmero de dCa del a-o 41 a 3996$ %Jmero de dCa del mes 41 a 316$ %Jmero de dCa de la semana 41 a .6$ %om#re del dCa de la semana )asta nue'e caracteres$ %om#re del dCa de la semana a#re'iado$ +ec)a en juliano$ Los nJmeros especi*icados de#en ser enteros$ 0ndicador del meridiano$ 0ndicador del meridiano separado por puntos$ Qora del dCa 41 a 126$ Qora del dCa 4/ a 236$ 1inutos 4/ a G86$ Segundos 4/ a G86$ Segundos transcurridos desde medianoc)e 4/ a I93886
Las mascaras de *ormato 3ear ! s3ear de'uel'en el nom#re del a-o siempre en ingl(s$ Las especi*icaciones de algunos *ormatos 4mont2& mon& da3& d3& bc/ad& b.c$/a.d.& am/pm& a.m./p.m.6 dependen del lenguaje utili"ado en la #ase de datos indicados en los parmetros de iniciali"aci7n> %LSLD=3ELL=%D5=DE %LSL3ERR03<R2 %LSLL=%D5=DE (tras funciones = uC listaremos las *unciones de *ila simple ue no se englo#an en ninguna categorCa anterior$ +unci7n dump SintaAis
dump!expr [) formato]#
Prop7sito De'uel'e un 'arc)ar2 conteniendo el c7digo del tipo de dato al ue corresponde expr& la longitud en #!tes ! la representaci7n interna del dato$ El argumento formato indica la notaci7n en la ue se 'isuali"a el resultado$ Rormato puede tener los siguientes 'alores> S De'uel'e el resultado en notaci7n octal$ 4A De'uel'e el resultado en notaci7n decimal$ 4T De'uel'e el resultado en notaci7n )eAadecimal$ 4U De'uel'e el resultado en *ormato carcter$
Lenguaje SQL
Pgina 2//43
SintaAis
'si"e decode
Prop7sito De'uel'e el ma!or 'alor de una lista de eApresiones$ ,ompara carcter a carcter$ El tipo de datos siempre es 'arc)ar2$ least!expr De'uel'e el menor 'alor de una lista de [) expr2]...# eApresiones$ ,ompara carcter a carcter$ El tipo de dato es siempre 'arc)ar2$ nvl!expr1) expr2# 0ndica el 'alor ue )a de tener expr1 cuando en su contenido apare"can nulos$ El tipo de dato ue retorna expr2 es siempre el mismo ue tenga expr1$ vsiVe!expr# De'uel'e el nJmero de #!tes ue ocupa la representaci7n interna de expr$ decode!expr) val1) Dentro de una expr e'alJa los 'alores de la lista& cod1) ...) valn) val1 $$$ valn& ! los cam#ia por el c7digo codn[) default]# correspondiente& cod1 $$$ codn$ Si no se cumple ninguno podemos asignarle uno por de*ecto indicado en la eApresi7n default$
greatest!expr [) expr2]...#
<aria)les de entorno EAiste un grupo de 'aria#les& ue aun ue no *orman parte de la sintaAis propia de s l en <racle& *orman parte del entorno de tra#ajo& ! son *recuentemente utili"adas$ ,ontienen normalmente datos acerca de la sesi7n actual$ Faria#le uid user useren' SintaAis
uid user userenv!opcin#
s!sdate
s3sdate
Prop7sito De'uel'e un entero ue es el identi*icador Jnico de el usuario conectado$ De'uel'e un 'arc)ar2 ue contiene el nom#re del usuario conectado en la #ase de datos local$ De'uel'e in*ormaci7n en un tipo de datos 'arc)ar2 acerca de la sesi7n actual$ El argumento opcin puede tener los 'alores> *A$,%A,(& de'uel'e el lenguaje ! el territorio utili"ado durante la sesi7nZ F(FF0+$& de'uel'e un identi*icati'o de la sesi7nZ .(R&0$A*& ue de'uel'e el identi*icador del terminal utili"ado$ ,ontiene la *ec)a del sistema$
Lenguaje SQL
Pgina 21/43
4unciones de gru"o Las *unciones de grupo de'uel'en un resultado #asado en un grupo de *ilas& mejor ue so#re una *ila solamente$ =lgunas *unciones de grupo aceptan las siguientes opciones$
distinct
all
Esta opci7n pro'oca ue la *unci7n de grupo considere solamente los distintos 'alores de la eApresi7n$ 3am#i(n puede utili"arse sin *unciones de grupo$ Esta opci7n pro'oca ue la *unci7n de grupo considere todos los 'alores recuperados& inclu!endo duplicados$ Es la opci7n por de*ecto$
3odas las *unciones de grupo& eAcepto count!:# ignoran los 'alores nulos$ Feamos a continuaci7n las principales *unciones de grupo$ +unci7n a'g count maA min stdde' sum 'ariance SintaAis Prop7sito De'uel'e la media de n$ De'uel'e el nJmero de *ilas en la consulta$ maK![distinct>all] expr# De'uel'e el 'alor mAimo de expr$ min![distinct>all] expr# De'uel'e el 'alor mCnimo de expr$ stddev![distinct>all] n# De'uel'e la des'iaci7n estndar de n$ sum![distinct>all] n# De'uel'e la suma de los 'alores de n$ variance![distinct>all] n# De'uel'e la 'arian"a de n$
avg![distinct>all] n# count!W:>[distinct>all] exprX#
La clEusula grou" )y Se puede utili"ar la clusula group b3 para agrupar las *ilas seleccionadas ! de'ol'er una sola *ila resumiendo la in*ormaci7n solicitada$ La selecci7n de los conjuntos de *ilas se reali"an para calcular propiedades de los conjuntos& #asndose en los 'alores de las eApresiones especi*icados en la clusula group b3$ Si la sentencia select contiene la clusula group b3& la lista de la select solo puede contener los siguientes tipos de eApresiones> constantes *unciones de grupo eApresiones id(nticas a las ue estarn en la clusula group b3$ eApresiones implCcitas en las eApresiones mencionadas en la select ue e'alJen el mismo 'alor para todas las *ilas de un grupo$
Lenguaje SQL
Pgina 22/43
Las eApresiones de la clusula group b3 pueden contener cual uier columna de una ta#la o 'ista mencionada en la clausula from& sin importar ue estas columnas est(n o no en la lista de la select$ Se puede utili"ar la clusula 2aving para restringir el nJmero de grupos de *ilas de*inidas en la clusula group b3 ue se 'isuali"arn$ El procesamiento de la sentencia es el siguiente> 1$ Si la sentencia contiene la clusula 12ere& primero se *iltran todas las *ilas ue no satis*agan la condici7n 12ere$ 2$ Se reali"an los clculos especi*icados ! se *orman los conjuntos de *ilas especi*icados en group b3$ 3$ Solo se muestran los su#conjuntos recuperados ue satis*acen la clusula 2aving$
Lenguaje SQL
Pgina 23/43
Se pueden seleccionar todas las columnas de am#as ta#las$ %o es necesario ue las columnas mencionadas en el criterio de com#inaci7n sean seleccionadas$ (uter 6oins El outer join o com#inaci7n eAterna ampli*ica el resultado de una com#inaci7n simple 4join normal6$ 5n outer join recupera 3<D=S las *ilas de la com#inaci7n eAterna ! tam#i(n a uellas ue no encuentren su correspondiente *ila pareja de una ta#la a otra$ La sintaAis es>
select col4) col ) ...) coln from tabla4) tabla ) ... 12ere tabla4.col4 @ tabla .col4 !8#
El sCm#olo 4R6 de#e situarse en el predicado de com#inaci7n al lado de la columna o columnas pertenecientes a la ta#la en la ue puede ue )a!a ausencia de 'alor$
Las su#consultas pueden utili"arse para 'arios prop7sitos> Para de*inir el conjunto de *ilas ue se desea insertar en la ta#la destino en una sentencia insert o create table$ Para de*inir el conjunto de *ilas ue se desea seleccionar en una sentencia create vie1$ Para de*inir uno o mas 'alores a asignar en las *ilas eAistentes en una sentencia update ... set$ Proporcionar 'alores para condiciones en las clusulas 12ere ! 2aving de las sentencias select& update ! delete$ %o )a! limite en el ni'el de anidaciones de consultas$
Lenguaje SQL
Pgina 24/43
La Sentencia &'SE)T
El prop7sito de la sentencia insert es a-adir *ilas a una ta#la o 'ista$ ,omo re uisitos para a-adir *ilas en una ta#la& la ta#la de#e ser propiedad del usuario ue intenta reali"ar la inserci7n o #ien tener pri'ilegio de insert so#re ella$ La sintaAis es>
esquema
VA*%(F subconsulta
%om#re del propietario de la ta#la o 'ista donde se desea reali"ar la inserci7n$ Si se omite se presupone ue la ta#la es propiedad del usuario ue reali"a la inserci7n$ %om#re de ta#la o 'ista donde se reali"a la inserci7n$ ,olumna/s so#re la/s ue se desea reali"ar la inserci7n$ Si se omiten los nom#res ! el orden de las columnas& se espera ue se inserten 'alores para todas las columnas de la ta#la o 'ista ! el orden en ue *ue creada$ Especi*ica un 'alor para la *ila ue se desea insertar$ Especi*ica ue la inserci7n est #asada en una sentencia F(*(C.$ En la sentencia F(*(C. de#en recuperarse el mismo nJmero de columnas ! en el mismo orden ue se especi*ic7 en la sentencia 0$F(R.$
La Sentencia *+D,TE
El prop7sito de la sentencia update es cam#iar los 'alores eAistentes en una ta#la o 'ista$ ,omo re uisitos para actuali"ar *ilas de una ta#la& la ta#la de#e ser propiedad del usuario ue intenta reali"ar la actuali"aci7n& o #ien tener pri'ilegio de 5PD=3E so#re ella$
Lenguaje SQL
Pgina 2G/43
La sintaAis es>
esquema
subconsulta /H(R(
%om#re del propietario de la ta#la o 'ista donde se desea reali"ar la inserci7n$ Si se omite se presupone ue la ta#la es propiedad del usuario ue reali"a la actuali"aci7n$ %om#re de ta#la o 'ista donde se reali"a la actuali"aci7n$ ,olumna/s so#re la/s ue se desea reali"ar la actuali"aci7n$ Si se omiten el nom#re ! el orden de alguna columna de la ta#la/'ista& esta permanecer inaltera#le$ Especi*ica ue la sentencia F(*(C. de'ol'er los 'alores nue'os ue se asignarn a la columna correspondiente$ Precede e indica la condici7n ue de#en cumplir las *ilas ue se desea actuali"ar$ Si se omite se actuali"an todas$
La Sentencia DELETE
El prop7sito de esta sentencia es #orrar *ilas de una ta#la o 'ista$ 1s adelante )a#laremos de las sentencias -R+O ! .R%$CA.($ ,omo re uisitos para #orrar *ilas de una ta#la& la ta#la de#e ser propiedad del usuario ue intenta reali"ar el #orrado o #ien tener pri'ilegio de DELE3E so#re ella$ La sintaAis es>
esquema
%om#re del propietario de la ta#la o 'ista donde se desea reali"ar la inserci7n$ Si se omite se presupone ue la ta#la es propiedad del usuario ue reali"a el #orrado de las *ilas$
Lenguaje SQL
Pgina 29/43
%om#re de ta#la o 'ista donde se reali"a el #orrado de las *ilas$ Sir'e para indicar la condici7n ue de#en cumplir las *ilas ue se desean #orrar$ Si se omite se #orran todas$ Esta clusula admite su#consultas$
Sentencias DDL
Las sentencias de lenguaje de de*inici7n de datos mas importantes son> CR(A.( La sentencia CR(A.( permite al usuario ue la ejecuta crear un o#jeto 4ta#la& 'ista& sin7nimo procedimiento& pa uete& disparador& usuario& rol& per*il& etc$6$ 4P6 A*.(R La sentencia A*.(R permite al usuario ue la ejecuta modi*icar la estructura de un o#jeto pre'iamente creado$ -R+O La sentencia -R+O permite al usuario ue la ejecuta eliminar un o#jeto 4no s7lo las *ilas6 de la #ase de datos$ R($A&( Permite al usuario ue la ejecuta modi*icar el nom#re de un o#jeto$ .R%$CA.( Permite al usuario ue la ejecuta #orrar todas las *ilas de una ta#la o Cndice$ 3iene ciertas di*erencias con -(*(.( o -R+O ue 'eremos pr7Aimamente$ Feamos a continuaci7n con mas detalle algunas de ellas aplicadas a los o#jetos #sicos$ 4P6 Nota Importante: Pre'iamente se )a indicado ue estos comandos pueden a*ectar a numerosos o#jetos$ En este manual nos centraremos en la de*inici7n de ta#las& Cndices& 'istas ! sin7nimos$
Lenguaje SQL
Pgina 2./43
Integridad de datos =ntes de de*inir una ta#la de#emos tener en cuenta ciertos aspectos acerca de la in*ormaci7n a almacenar& ue nos e'ita tener ue programar de *orma redundante ciertas compro#aciones$
Lenguaje SQL
Pgina 2I/43
La declaraci7n de restricciones de integridad nos a!uda a de*inir ciertas caracterCsticas de la ta#la$ Por ejemplo& si una columna puede estar 'acCa o no& si puede contener 'alores duplicados& si esta relacionada con alguna columna de otra ta#la& etc$ La integridad de datos es& por lo tanto& asegurarse ue los datos en las ta#las se ajustan a una serie de regla prede*inidas$ Las condiciones se cumplen en todas las transacciones& ! desde todas las )erramientas ! programas$ Se de*inen una sola 'e" ! no necesitan mantenimiento especial$ ,onceptos de integridad ue se pueden de*inir> reglas negocio integridad de entidades integridad re*erencial ,eglas de negocio EspecC*icas de cada rea de negocio$ Por ejemplo& solo cuando se 'enden die" productos o mas )a! derec)o a descuentos$ Integridad de entidades Reglas a las ue de#en ajustarse las columnas de mis ta#las$ Pueden de*inirse las siguientes> Orimar3 Ge3. 0denti*icador Jnico de una *ila en una ta#la$ Solo puede )a#er una por ta#la& pero puede estar compuesto por mas de una columna$ Se utili"a de *orma )a#itual para ser re*erenciada desde otra ta#las$ =l de*inir una columna como cla'e primaria& de *orma implCcita se crea un Cndice asociado ! la columna uedar de*inida como Jnica ! o#ligatoria$ Por ejemplo el c7digo de un producto es su identi*icati'o en la ta#la de los productos& ! adems le a!uda a relacionarse con la ta#la ue contiene los precios de los productos& o con la de almac(n ue contiene la cantidad de un producto ue nos ueda en stocH$
Lenguaje SQL
Pgina 28/43
$ot null.
%nique.
C2eck.
La columna a la ue se apli ue esta restricci7n de#e contener 'alores$ Por ejemplo la columna nJmero de identi*icaci7n *iscal de la ta#la *acturas$ %o puede )a#er mas de dos *ilas con el mismo 'alor en a uella/s columna/s ue tengan dic)a restricci7n$ Puede ser simple o estar compuesta por 'arias columnas$ = di*erencia de la cla'e primaria& no es o#ligatoria& ! adems puede )a#er mas de una por ta#la$ Si se uiere tra#ajar #ajo normati'a =%S0/0S< la columna ue lle'e esta restricci7n de#er tener adicionalmente la restricci7n not null$ Por ejemplo una restricci7n de unicidad so#re el c7digo de una pelCcula ! el nJmero de copia en la ta#la prestamos de 'ideos$ Restricci7n ue reali"a un *iltro so#re las *ilas ue no cumplan la condici7n impuesta$ Es similar a la clusula B)ere& pero se implementa en la de*inici7n del o#jeto$ %o puede incluir su#consultas ni 'aria#les o pseudocolumnas 4 user& s3sdate& etc$6$ Por ejemplo compro#ar ue el precio de un producto es ma!or ue cero$
Integridad referencial Es la ue determina las relaciones eAistentes entre los o#jetos$ Por ejemplo eAiste una relaci7n entre las ta#las ca#ecera de *acturas ! lCneas de *actura$ Orimar3 Ge3 0denti*icador Jnico de una *ila en una ta#la$ Qemos 'isto anteriormente ue este concepto pertenece a la integridad de entidades$ Roreign Ge3 ,olumna normalmente asociada a una cla'e primaria o Jnica de otra ta#la& o de la misma ta#la 4denominado autore*erencia6$ Puede )a#er tantas como se desee por ta#la$ Su 'alor puede ser nulo o el 'alor de la cla'e re*erenciada$ Daranti"a consistencia de relaciones entre los datos$ Por ejemplo toda lCnea de *actura de#e pertenecer a una ca#ecera de *actura$ Esta#leciendo estas relaciones entre cla'es ajenas 4*oreign He!6 ! primarias 4primar! He!6 logramos> E'itar #orrados& inserciones o actuali"aciones no deseados$ Por ejemplo no se puede #orrar una *actura 4ca#ecera de *actura6 ue tenga lCneas de *actura$ %o se puede dar de alta una lCnea de *actura sin su correspondiente ca#ecera$ %o se puede actuali"ar el identi*icati'o de una lCnea de *actura$ Propagar modi*icaciones$ Lo contrario a lo anterior$ Se pueden de*inir acciones de #orrado en cascada$ Por ejemplo si se #orra una ca#ecera de *actura ue se #orren las correspondientes lCneas$
Lenguaje SQL
Pgina 3//43
EAiste una *acilidad adicional& la especi*icaci7n -(RA%*.& ue no es una restricci7n en si& pero ue proporciona la posi#ilidad de indicar un 'alor por de*ecto a columnas ue no se mencionan en un insert$ =dmite pseudocolumnas como user& uid o s3sdate$ Por ejemplo& la *ec)a de emisi7n de una *actura es una columna tipo date& ! si no se le indica un 'alor eAplCcitamente& tendr el de la *ec)a del sistema 4s3sdate6$ La sentencia create table se utili"a para esta#lecer todas las relaciones ! reglas anteriormente citadas$ Es la llamada sintaAis declarati'a$ -o&)res de las restricciones Es un nom#re Jnico& de*inido #ien por el propietario del o#jeto o por el sistema$ Si lo de*ine el propietario del o#jeto& en el momento de de*inir la restricci7n de#e ir precedido de la pala#ra constraint$ Si no se asigna en el momento de la creaci7n el sistema generar uno por de*ecto& Por ejemplo& en el caso de la restricci7n not null& es mu! comun& por )erencia de anteriores 'ersiones de <racle& reali"ar la declaraci7n de la restricci7n sin indicar la pala#ra constraint ni darle un nom#re& por lo en el diccionario de la #ase de datos se almacenara como& por poner un caso& s3s_cAA4E si es la decimo uinta declaraci7n ue reali"amos sin asignar ningJn nom#re de restricci7n$ Sera s3s_cAA4T para la siguiente& ! asi con todas$
FPF_CAAAn$
Es importante utili"ar una metodologCa adecuada en la asignaci7n de nom#res a las restricciones& puesto ue no admite duplicados& es decir& un nom#re de restricci7n no puede aparecer dos 'eces dentro del mismo usuario o es uema$ Por ejemplo una sintaAis adecuada para dic)os nom#res es>
CodigoRestriccion_$ombre.abla_$ombreColumna
Donde el c7digo de restricci7n es> OG Primar! [e! RG +oreign [e! $$ %ot %ull %G 5ni ue [e! CG ,)ecH El nom#re de la restricci7n aparecer en los mensajes de error& en la documentaci7n& al acti'arla ! desacti'arla temporalmente o para #orrarla$ La in*ormaci7n acerca de las restricciones de*inidas por el usuario& ! so#re ue columnas estn de*inidas& se encuentran en las siguientes ta#las del diccionario de datos>
user_constraints user_cons_columns
Lenguaje SQL
Pgina 31/43
Co&o definir una restriccin Qa! dos *ormas de de*inir restricciones> =sociadas a columna o asociadas a ta#la$ La sintaAis para la de*inici7n de una restricci7n a ni'el de columna es>
De*inir una restricci7n asociada a columna signi*ica ue la restricci7n 'a a continuaci7n del nom#re de la columna& del tipo de dato ! la precisi7n$ En este caso& no es o#ligatorio darles un nom#re con la pala#ra cla'e constraint& pero se generar uno por de*ecto& como )emos indicado anteriormente$ La sintaAis para la de*inici7n de restricciones a ni'el de ta#la es>
Lenguaje SQL
Pgina 32/43
De*inir una restricci7n asociada a ta#la signi*ica ue la restricci7n 'a antes o despu(s de empe"ar a de*inir las columnas$ En este caso es o#ligatorio preceder la restricci7n con la pala#ra cla'e constraint& para ue el gestor distinga entre lo ue es la de*inici7n de la columna o la declaraci7n de la restricci7n$ =l de*inir una restricci7n asociada a ta#la )a! ue indicar a ue columna de la ta#la se aplica la restricci7n& puesto ue no est a continuaci7n de la de*inici7n$ En ciertos casos& como cuando una cla'e primaria est compuesta de 'arias columnas& o cuando una restricci7n se a-ade a posteriori& es o#ligatorio de*inirlas asociadas a ta#la$ La clausula references nos permite especi*icar en una constraint de tipo foreign ke3 el nom#re de la ta#la a la ue ueremos re*erenciar& asi como la columna de la ue depende nuestra foreign ke3$ Dic)a columna de#e estar declarada como primar! He! en la ta#la a la ue re*erenciamos$ Para las clausulas primar3 ke3 ! unique es posi#le especi*icar las clausulas de almacenamiento del indice ue se crea asociado a la cla'e& indicar el ta#lespace donde se almacenara& ! otras clausulas adicionales de como distri#uir el espacio de almacenamiento$
La sentencia C)E,TE &'DELos Cndices se utili"an para acceder mas rpidamente en lectura a un dato$ Para ue una columna se indeAe de#e cumplir ciertos re uisitos> Ser consultada con *recuencia$ %o su*rir alteraciones de operadores o *unciones cuando se consulta$ ,ontener un 'olumen importante de in*ormaci7n$ 3ener muc)os 'alores di*erentes$ Los Cndices pueden ser simples o compuestos de 'arias columnas$ Los Cndices pueden ser Jnicos o no$ Si un Cndice se de*ine como Jnico& signi*ica ue no puede contener 'alores repetido$ Recordar ue las restricciones unique ! primar3 ke3 lle'an implCcita la creaci7n del Cndice& ! en am#os casos es Jnico$
Lenguaje SQL
Pgina 33/43
Lenguaje SQL
Pgina 34/43
Recrea la 'ista si !a eAiste$ Esto permite cam#iar la de*inici7n de la 'ista sin tener ue #orrarla ! 'ol'er a crearla$ force ,rea la 'ista incluso si )a! pro#lemas de acceso por insu*icientes pri'ilegios a los o#jetos de la su#consulta en ue se #asa la creaci7n de la 'ista$ noforce Es la opci7n por de*ecto ! no crea la 'ista si se producen errores en la de*inici7n$ 1it2 c2eck option Si la 'ista permite inserciones& compro#ar la condici7n B)ere impuesta& no solo en el momento de componer la 'ista& sino tam#i(n a la )ora de reali"ar inserciones so#re ella$
or replace
So#re una 'ista no eAisten restricciones en consulta& pero si en actuali"aci7n inserci7n ! #orrado$ Si se cumplen las condiciones impuestas la actuali"aci7n& inserci7n o #orrado se lle'a a ca#o so#re la ta#la #ase so#re la ue se de*ini7 la 'ista$ Para ue una 'ista sea actuali"a#le 4permita update6 ninguna de las columnas ue *orman la 'ista puede estar modi*icada por una eApresi7n$ Por ejemplo substr!campo)4)n#$
Lenguaje SQL
Pgina 3G/43
Para ue la 'ista permita inserciones 4permita insert into6 la 'ista en su de*inici7n de#e contener todas las columnas o#ligatorias de la ta#la ue la *orma$ Para ue la 'ista permita #orrado de *ilas 4permita delete6 la 'ista de#e estar creada so#re una sola ta#la 4no admite joins6$ %o puede incorporar clusulas distinct ni group b3$ %o puede ser de*inida con *unciones de grupo ni pseudocolumnas 4 user& s3sdate& ro1id& sum!campo#6$
Lenguaje SQL
Pgina 39/43
0Fadir restricciones Se pueden a-adir restricciones de integridad re*erencial a posteriori$ En el momento ue se a-ade& se #lo uea toda la ta#la ! se produce la compro#aci7n de la restricci7n ue se desea incorporar$ Si alguna *ila no la cumple& la restricci7n no se a-ade$ La sintaAis para a-adir restricciones una 'e" creada la ta#la es similar a la de las restricciones asociada a ta#la$ Esto signi*ica ue se de#e indicar tras el comando alter table la pala#ra cla'e constraint& seguida del nom#re del constraint& ! luego el tipo de restricci7n a aplicar ! por Jltimo so#re ue columna de la ta#la se desea aplicar dic)a restricci7n$ Desacti>ar restricciones El desacti'ar una restricci7n permite ue dic)a restricci7n no se comprue#e temporalmente$ %o es igual ue #orrar la restricci7n$ Es la *orma de incrementar la 'elocidad en cargas de datos masi'as$ La )erramienta de carga masi'a de <racle 4loader6 des)a#ilita automticamente& con su m(todo directo D0RE,3 P=3Q& las restricciones$ ,uando se intenta desacti'ar una cla'e primaria 4primar3 ke36 o cla'e Jnica 4unique ke36& ue pueden ser re*erenciadas& )a! ue desacti'ar en primer lugar las cla'es ajenas 4foreign ke36 ue le re*erencian o utili"ar la clusula disable cascade$ =l desacti'ar una cla'e primaria o Jnica tam#i(n se destru!en los Cndices asociados$ 0cti>ar restricciones =cti'a la compro#aci7n de la restricci7n$ En el momento de la creaci7n de una restricci7n se acti'a& a no ser ue se indi ue la clusula disable$ ,uando se acti'a posteriormente> Blo uea la ta#la completa& )asta ue se termine la compro#aci7n$ ,omprue#a una a una las *ilas$ Si alguna de las *ilas no cumple la restricci7n& no podr llegar a acti'arse$ =l )a#ilitar una cla'e primaria o Jnica se 'uel'en a construir los Cndices asociados$
Lenguaje SQL
Pgina 3./43
EGce"ciones a la acti>acin de restricciones ,uando se intenta acti'ar una restricci7n ! no se puede& por cada *ila ue no cumpla la restricci7n se puede guardar en una ta#la& creada pre'iamente& la siguiente in*ormaci7n> roBid nom#re de restricci7n ue no se cumple nom#re de la ta#la en la ue se encuentra la restricci7n usuario propietario de la ta#la La ta#la& denominada exceptions& se )a creado pre'iamente en s lplus utili"ando un *ic)ero ue se encuentra en la instalaci7n ! se denomina utleAcpt$s l& ! cu!o contenido es el siguiente& de *orma ue lo podemos crear nosotros mismos>
create table eKceptions ! ro1_id ro1id) constraints varc2ar !5A#) o1ner varc2ar !5A#) table_name varc2ar !5A## ;
La ta#la so#re la cual se )an de*inido las restricciones ! no pueden acti'arse& puede actuali"arse a partir de los resultados almacenados en la ta#la eAceptions$ Borrar restricciones =sC como podemos desacti'ar ! acti'ar las restricciones& podemos eliminarlas 4con la clausula drop6 de*initi'amente de la ta#la$
Lenguaje SQL
Pgina 3I/43
La sentencia D)O+ &'DESe puede eliminar un Cndice de una ta#la utili"ando la sentencia drop indeK$ ,on ella eliminamos solo el Cndice& ! no los datos de la ta#la ue estn indeAados$ La sintaAis es>
= partir del momento de eliminaci7n del Cndice& las columnas a*ectadas !a no estn indeAadas$ ,on la sentencia drop indeK es indi*erente ue el Cndice sea Jnico o no$ La in*ormaci7n acerca de los Cndices esta almacenada en el diccionario de la #ase de datos$ Las ta#las ue contienen dic)a in*ormaci7n son>
user_indeKes user_ind_columns
Para #orrar un Cndice se de#e ser propietario de la ta#la en la ue estn asociados los Cndices& o tener el pri'ilegio DR<P =%2 0%DE\$
,on la utili"aci7n de esta sentencia no se #orra el o#jeto& sino solamente el alias permanente del o#jeto$ La in*ormaci7n re*erente a sin7nimos se encuentra en las siguientes ta#las>
user_s3non3ms all_s3non3ms
Para #orrar un sin7nimo #asta con ser el propietario& es decir& )a#er creado dic)o sin7nimo$ En el caso de ue el sin7nimo ue se desea #orrar sea pu#lico& es necesario tener el pri'ilegio DR<P P5BL0, S2%<%21$
Lenguaje SQL
Pgina 38/43
La sentencia )E',ME
La sentencia rename cam#ia el nom#re de un o#jeto 4ta#la& procedimiento& 'ista& etc$6 por otro de *orma permanente$ La sintaAis es>
user_objects
La sentencia T)*'C,TE
La sentencia truncate #orra *ilas de una ta#la o Cndice& sin eliminar la estructura del o#jeto$ Es similar a delete& pero no )a! posi#ilidad de des)acer la transacci7n 4rollback6& ni de )acer un #orrado restricti'o 4clusula 12ere6$ La sintaAis es>
Para truncar un o#jeto se de#e ser propietario del mismo& o tener el pri'ilegio DELE3E =%2 3=BLE$ La opci7n drop storage li#era el espacio ue el o#jeto )a tomado a la #ase de datos$ La opci7n reuse storage mantiene reser'ado el espacio pre'iamente ad uirido para dic)o o#jeto$ =l truncar una ta#la se truncan de *orma implCcita los Cndices de dic)a ta#la$
Lenguaje SQL
Pgina 4//43
Es el nom#re ue le ueremos dar al conjunto de pri'ilegios$ ,uando un usuario acti'a la utili"aci7n de un role no es necesario 'alidar dic)a acti'aci7n$ indica ue se de#e 'alidar la acti'aci7n& #ien mediante una cla'e 4b3 password6& #ien por la cla'e de coneAi7n eAterna 4eKternall36$
Lenguaje SQL
Pgina 41/43
La sentencia 1),'T
Esta sentencia nos permite asignar pri'ilegios a roles o a usuarios& ! tam#i(n roles a usuarios$ Feamos a continuaci7n la sintaAis para cada uno de estos dos casos$ =signaci7n de pri'ilegios a roles ! usuarios$ La sintaAis es>
donde>
s3stem_priv role 1it2 admin option
,ual uier pri'ilegio de sistema$ ,onjunto de pri'ilegios$ Permite ue el receptor de los pri'ilegios pueda asignarlos a otros usuarios$
donde>
object_priv column 1it2 grant option
0ndica cual uier pri'ilegio de o#jetos$ 0ndica las columnas so#re las ue ueremos dar pri'ilegios$ 0ndica ue el usuario ue reci#e el permiso puede darlo a otros usuarios$
Lenguaje SQL
Pgina 42/43
La sentencia )E/O2E
Esta sentencia permite uitar pri'ilegios o roles a usuarios ! roles& de *orma ue !a no dispongan o puedan )acer uso de dic)os pri'ilegios$ La sintaAis para pri'ilegios de sistema ! roles es>
donde> 0ndica el o#jeto so#re el ue ueremos uitar pri'ilegios$ from Es la clusula ue nos indica a uien ueremos uitar dic)os pri'ilegios$ cascade constraints Especi*ica ue los pri'ilegios ue )a!a utili"ado el usuario o role para re*erenciar nuestro o#jeto tam#i(n sean re'ocados 4por ejemplo cuando se acti'a una *oreign He! so#re una ta#la de otro usuario6$
object
Lenguaje SQL
Pgina 43/43