You are on page 1of 26

1

Tema3: Realizacin de consultas en SQL


1. Introduccin
2. Tipos de datos
3. Consulta de datos.
3.1 Operadores.
3.2 Subconsultas.
3.3 Combinacin de tablas.
3. Combinacin de tablas !combinacin e"terna o Outer #oin$.
. %unciones
&. '(rupacin elementos
). *+IO+, I+T-RS-CT . /I+*S

1. Introduccin
SQL se utiliza para:
1) consultar datos
2) crear, actualizar y eliminar objetos de la BBDD
3) crear, actualizar y eliminar datos de los objetos
4) controlar el acceso a la BBDD y a los objetos
Sentencias DDL y DL
Create: crear un objeto de la BBDD !tablas, "istas, procedimientos)
0rop: eliminar un objeto de la BBDD
'lter: modi#icar un objeto de la BBDD
1rant: conceder pri"ile$ios sobre un objeto de la BBDD
Re2o3e: retirar pri"ile$ios sobre un objeto de la BBDD
Sentencias D%L
Insert: insertar #ilas de datos en una tabla
*pdate: actualizar #ilas de datos de una tabla
0elete: eliminar #ilas de datos de una tabla
Select: recuperar #ilas de datos de una tabla o "ista
2

2. Tipos de datos
&lmacenan cadenas de caracteres
C4'R almacena caracteres de lon$itud #ija entre 1 y 2'' () *+%& ,&- !1')
. Las columnas tienen lon$itud #ija
. Si se introduce una cadena de menor lon$itud /ue la de#inida, se rellenar0 con blancos a la
derec1a 1asta /ue /uede completa
. Si se introduce una cadena de mayor lon$itud /ue la #ijada, 2racle de"uel"e error
5'RC4'R2 almacena cadenas de caracteres de lon$itud "ariable 1asta 2333 () &4+LL5D2
6&-,&-2!13)
. Las columnas de este tipo tienen una lon$itud "ariable
. Si se introduce una cadena de menor lon$itud /ue la de#inida, se almacenar0 con esa
lon$itud y no se rellenar0 con nada 1asta completar
. Si se introduce una cadena de mayor lon$itud a la #ijada, 2racle de"uel"e error7
+*/6-R
&lmacenan datos num8ricos, tanto enteros como decimales, con o sin si$no
+7meros en punto 8i#o: 9:%B+- !4recision, +scala)
4recisi;n: n< total de d=$itos del dato /ue se de#ine !1 1asta 3>)
+scala: n< de d=$itos a la derec1a del punto decimal
+jemplo: 2?552 9:%B+- !@,2) () 1234'AB,>@
2tra notaci;n: 2?552 9:%B+- !') () 1234' !escala ( 3)
+7meros en punto 8lotante: +s un decimal con precisi;n 3> () S:%& 9:%B+-
LO+1
&lmacena cadenas de caracteres de lon$itud "ariable 1asta 2 $i$abytes de in#ormaci;n !teCtos muy
$randes)7 -estricciones:
S;lo se puede de#inir una columna L29D por tabla
9o pueden aparecer en restricciones de inte$ridad
9o sir"e para indeCar
9o se puede utilizar como ar$umento en #unciones ni de"ol"erlo como "alor7
3

9o se puede usar en cl0usulas E,+-+, D-2:4 BF, 2-D+- BF o D5S*59*, ni con operaciones
de :9529, 59*+-S+* y %59:S
0'T-
&lmacena in#ormaci;n de #ec1as y 1oras () Si$loG&HoG%esGD=aG,oraG%inutosGSe$undos
+jemplo: ?+,&I&L*& D&*+
R'9 . LO+1 R'9
&lmacenan datos binarios7 -&E es similar al tipo 6&-,&-2 pero almacenando cadenas de bytes !en
lu$ar de caracteres)7 L29D -&E almacena $r0#icos, sonidos, etc
+l tamaHo m0Cimo de -&E es de 2'' bytes y para L29D -&E de 2 $i$abytes7
Tipo RO9I0
ada #ila de una tabla tiene una direcci;n /ue identi#ica de #orma Jnica a la #ila7 4odemos consultar la
direcci;n pre$untando por la pseudocolumna -2E5D7 +sta columna utiliza la representaci;n binaria
de la localizaci;n #=sica de la #ila7 uando se solicita esa columna con"ierte la representaci;n binaria a
un dato 1eCadecimal representado como "arc1ar27 +ste dato se di"ide en tres campos:
blo/ue7#ila7#ic1ero, por ejemplo, 3333333?7333373332

3. Consulta de datos
+l #ormato de la sentencia S+L+* es el si$uiente:
S-L-CT K&LL L D5S*59*M KeCpreIcol1, eCpreIcol2, 777, eCpreIcoln L NM
%RO/ Ktabla1, tabla2, 777, tablanM
K94-R- condici;nM
KOR0-R 6: eCpreIcol KD+S L &SM K, eCpreIcol KD+S L &SM 777M;
0onde eCpreIcol puede ser una columna de una tabla, una constante, una eCpresi;n
aritm8tica, una #unci;n o "arias #unciones anidadas
SELECT * FROM DEPT; +l N da todas las columnas de la tabla y en el orden del 0-SC
SELECT DEPT_NO, APELLIDO, SALARIO, COMISION FROM EMPLE;
O +l S+L+* ser=a la 4royecci;n del 0l$ebra relacional !atributos a obser"ar en el resultado de
la consulta)
O +l ?-2% ser=a la operaci;n de 4roducto cartesiano con las tablas a eCaminar
O +l E,+-+ ser=a el predicado de la operaci;n Selecci;n7 ,abr0 /ue poner atributos de las
relaciones /ue aparecen en la cl0usula ?-2%
4

%RO/ () especi#ica la tabla o lista de tablas de las /ue se recuperar0n los datos
Se puede asociar un nue"o nombre a las tablas mediante un PaliasQ
SELECT E.EMPLE_NO, E.APELLIDO FROM EMPLE E;
'LL<= recupera todas las #ilas aun/ue al$unas est8n repetidas7 +s la opci;n por de#ecto7
0ISTI+CT () recupera las #ilas /ue son distintas, eliminando las #ilas repetidas
Si ponemos SELECT OFICIO FROM EMPLE; nos Salen los trabajos repetidos
SELECT DISTINCT OFICIO FROM EMPLE; y nos Salen los distintos trabajos !' #ilas)
RQu8 trabajos se realizan en cada departamentoS %ostrar departamentos y los trabajos dentro de los
departamentos
SELECT DISTINCT DEPT_NO, OFICIO FROM EMPLE; () @ #ilas
R+n /u8 departamentos se realizan los distintos trabajosS
SELECT DISTINCT OFICIO, DEPT_NO FROM EMPLE; () @ #ilas
3.1 Operadores
Operadores aritm>ticos . alias de columna
Sir"en para #ormar eCpresiones con constantes y "alores de columnas
+ - * /
SELECT EMPLE_NO, APELLIDO, SALARIO, COMISION, SALARIO*12 ANUAL FROM EMPLE;
94-R- () obtiene las #ilas /ue cumplen la condici;n eCpresada, pudiendo 1acer dic1a condici;n todo
lo compleja /ue se re/uiera7
SELECT * FROM EMPLE WHERE SALARIO > 2000; A #ilas
4odemos utilizar como operadores ( ) T )( T( y U( ; T)
SELECT * FROM EMPLE
WHERE OFICIO = SALASMAN; 4oner el S&L&S%&9 !6&-,&-2) en mayJsculas7 4 #ilas
SELECT * FROM EMPLE WHERE OFICIO = SALASMAN; 13 #ilas
I+, +OT I+ !con#untos de 2alores$
4ara comprobar si una eCpresi;n pertenece o no a un conjunto de "alores
SELECT * FROM EMPLE WHERE DEPT_NO IN !"0,20#; () lista de "alores, no es un ran$o
SELECT * FROM EMPLE WHERE DEPT_NO NOT IN !"0,20#;
'

SELECT * FROM EMPLE WHERE OFICIO IN !EMPLEADO,DIRECTOR#; B #ilas
SELECT * FROM EMPLE WHERE OFICIO NOT IN !CLER$,MANA%ER#; B #ilas
6-T9--+ '+0 !con#untos de 2alores$
omprueba si un "alor est0 comprendido o no dentro de un ran$o de "alores desde un "alor inicial a
un "alor #inal7
-an$o de "alores incluyendo los mismos "alores
SELECT * FROM EMPLE WHERE SALARIO BETWEEN ""00 AND &'''; () 11 #ilas
SELECT * FROM EMPLE WHERE SALARIO NOT BETWEEN ""00 AND &'''; () 3 #ilas
'+0, OR
SELECT * FROM EMPLE WHERE DEPT_NO=(0 AND SALARIO>2000; 1 #ila !BL&V+)
SELECT * FROM EMPLE WHERE DEPT_NO=(0 OR SALARIO>2000; 11 #ilas
E,+-+ condici;n simple
&9D condici;n 2 Deben cumplirse las 3 condiciones para /ue
&9D condici;n 3 de"uel"a #ilas la consulta
E,+-+ condici;n simple
2- condici;n 2 +n cuanto se cumple al$una de las condiciones
2- condici;n 3 en la #ila, se presenta por pantalla
E,+-+ !condici;n 1 &9D condici;n 2) ,asta 4 ni"eles de anidamiento deber=a ser
2- el m0Cimo para no aumentar demasiado
!condici;n 3 &9D condici;n 4) la complejidad de la consulta
SELECT * FROM EMPLE WHERE SALARIO > 2000 AND !DEPT_NO="0 OR DEPT_NO=20#; () ' #ilas7
uidar los par8ntesis
LI?-
Sir"e para comparar cadenas de caracteres con comodines
@ sir"e para representar cual/uier cadena de 3 ; m0s caracteres
A representa un car0cter cual/uiera
4ara 1acer una consulta de nombres de empleados /ue empiecen por &
SELECT * FROM EMPLE WHERE APELLIDO LIKE A); () 2 #ilas
A

SELECT * FROM EMPLE WHERE APELLIDO NOT LIKE A); () 12 #ilas
+mpleados con nombre donde el Jltimo "alor de la cadena sea &
SELECT * FROM EMPLE WHERE APELLIDO LIKE )A; () 3 #ilas
+mpleados con trabajos /ue conten$an +S en cual/uier sitio de la cadena
SELECT * FROM EMPLE WHERE OFICIO LIKE )ES); () ' #ilas
+mpleados con trabajos /ue conten$an una & en 2W posici;n y no importe lo /ue 1aya a la derec1a
SELECT * FROM EMPLE WHERE OFICIO LIKE _A); () B #ilas
+mpleados con trabajo /ue conten$a & y 9 por ese orden
SELECT * FROM EMPLE WHERE OFICIO LIKE )A)N); () @ #ilas
+mpleados cuyo trabajo ten$a ' caracteres y la primera letra sea una
SELECT * FROM EMPLE WHERE OFICIO LIKE C____; () 4 #ilas
+5L
:na operaci;n aritm8tica con un 9:LL, dar0 como resultado 9:LL !'X9:LL ( 9:LL)
SELECT APELLIDO, SALARIO, COMISION, SALARIO+COMISION FROM EMPLE;
96L es una #unci;n /ue nos sir"e para sustituir en una consulta los nulos de una columna por lo /ue
/ueramos7 4or ejemplo,
96L !2%5S529, 3) () si la "ariable 2%5S529 tiene "alor nulo, le pone un 3
Seleccionar el nombre, el Salario, la comisi;n y el Salario bruto de todos los empleados !S&L&-52B-(
2?552 X 2%5S529)
SELECT APELLIDO, SALARIO, COMISION, SALARIO + NVL!COMISION,0# *SALARIO+R, FROM EMPLE;
Operador de concatenacin BB
9os ser"ir0 para concatenar la presentaci;n de los datos
SELECT APELLIDO -- OFICIO FROM EMPLE; () todo junto
SELECT APELLIDO -- -- OFICIO FROM EMPLE; () le metemos un espacio en blanco
SELECT APELLIDO -- -- OFICIO -- -- MI OFICIO. -- SALARIO FROM EMPLE;
OR0-R 6:
+speci#ica el criterio de clasi#icaci;n del resultado de la consulta7 'SC especi#ica ordenaci;n
ascendente /ue "iene por de#ecto !menor a mayor) y 0-SC, descendente !mayor a menor)
B

S-L-CT OOOOO
%RO/ Ktabla1, tabla2, 777, tablanM
K94-R- condici;nM
KOR0-R 6: eCpreIcol KD+S L &SM K, eCpreIcol KD+S L &SM 777M;
SELECT * FROM EMPLE ORDER +/ DEPT_NO;
+s posible anidar los criterios7 +l situado m0s a la iz/uierda ser0 el principal
SELECT * FROM EMPLE ORDER +/ DEPT_NO, FECHA_ALT DESC, APELLIDO;
3.2.C Subconsultas
Son sentencias S+L+* dentro de otra sentencia S+L+*7
La subconsulta es a/uella sentencia S+L+* /ue #orma parte de una cl0usula E,+-+ de una sentencia S+L+*
anterior7
S-L-CT ....
%RO/ ....
94-R- columna operadorAcomparati2o !S-L-CT ....
%RO/ ...
94-R- ...$;
La subconsulta se ejecutar0 primero y, posteriormente, el "alor eCtra=do es PintroducidoQ en la consulta
principal7
De la tabla +%4L+, obtener el &4+LL5D2 de los empleados con el mismo 2?552 /ue Y&L29S2Z:
1) &"eri$uamos el 2?552 de Y&L29S2Z:
SELECT OFICIO FROM EMPLE WHERE APELLIDO = ALONSO; () +%4L+&D2
2) 6isualizamos el &4+LL5D2 de los empleados con el mismo 2?552 /ue Y&L29S2Z:
SELECT APELLIDO FROM EMPLE WHERE OFICIO = EMPLEADO;
+s posible resumir estas dos consultas con una subconsulta:
SELECT APELLIDO FROM EMPLE WHERE OFICIO = (SELECT OFICIO FROM EMPLE WHERE APELLIDO = 'FORD';

>

Subconsultas Due (eneran 2alores simples
Son subconsultas /ue de"uel"en una #ila o un "alor simple, como en el caso anterior /ue ten=amos un "alor
simple !&9&L5S*&)7
+l si$no ( es un "alor de comprobaci;n simple /ue no se puede usar con listas7 Si la subconsulta obtiene m0s de
una #ila, se produce un mensaje de error7
2btener los nombres de los empleados cuyo trabajo coincida con al$Jn trabajo del departamento 23:
SELECT APELLIDO FROM EMPLE WHERE OFICIO =
(SELECT OFICIO FROM EMPLE WHERE DEPT!NO=2";
+rror de 2racle: la subconsulta de una sola #ila de"uel"e m0s de una #ila
+n el departamento 23 1ay "arios o#icios:
SELECT OFICIO FROM EMPLE WHERE DEPT!NO=2";
Subconsultas Due (eneran listas de 2alores
Son subconsultas /ue de"uel"en m0s de una #ila o m0s de un "alor7
uando una subconsulta de"uel"a m0s de un "alor, usaremos el operador I+ en la cl0usula E,+-+7
La soluci;n al ejemplo anterior ser=a
SELECT APELLIDO FROM EMPLE WHERE OFICIO IN
(SELECT OFICIO FROM EMPLE WHERE DEPT!NO=2";
onsultar los datos de los empleados /ue trabajen en Y%&D-5DZ o YB&-+L29&Z7 La localidad de los
departamentos se obtiene de la tabla D+4*:
1) Localizar los nJmeros de departamento /ue est8n en Dallas o 1ica$o
SELECT DEPT!NO FROM DEPARTWHERE LOC IN (MADRID'# BARCELONA';
2) Seleccionar los datos de los empleados /ue est8n en esos departamentos
SELECT * FROM EMPLE WHERE DEPT!NO IN (2"# $";
3) -eunir las dos sentencias utilizando una subconsulta
S-L-CT E %RO/ -/FL- 94-R- 0-FTA+O I+ !S-L-CT 0-FTA+O %RO/ 0-F'RT 94-R- LOC I+ !G/'0RI0G,
G6'RC-LO+'G$$;
onsultar los nombres y o#icios de todos los empleados del departamento 23 cuyo trabajo sea id8ntico al de
cual/uiera de los empleados del departamento YS&L&SZ:
SELECT APELLIDO# OFICIO FROM EMPLE WHERE DEPT!NO = 2" AND OFICIO IN
(SELECT OFICIO FROM EMPLE WHERE DEPT!NO =
@

(SELECT DEPT!NO FROM DEPART WHERE DNOMBRE = 'SALAS';
+l D+4*I92 de S&L&S ser0 el 33
2btener el nombre de los empleados con el mismo o#icio y Salario /ue D5L7 *enemos la "ariante de /ue la
subconsulta nos de"uel"a m0s de una columna:
SELECT APELLIDO# SALARIOFROM EMPLE WHERE (OFICIO# SALARIO =
(SELECT OFICIO# SALARIOFROM EMPLE WHERE APELLIDO = '%IL' =&
Si se detallan 2arios campos en la clHusula 94-R-, se deben encerrar entre par>ntesis . Ian de coincidir en
n7mero . tipo de datos con los de la sentencia S-L-CT de la consulta interior. Cada columna de la clHusula
94-R- se re8erirH a la correspondiente columna de la subconsulta.
S-L-CT &4+LL5D2, S&L&-52?-2% +%4L+ E,+-+ 2?552 (
!S-L-CT 2?552 ?-2% +%4L+ E,+-+ &4+LL5D2 ( [S&9,+\[)
&9D S&L&-52( !S-L-CT S&L&-52 ?-2% +%4L+ E,+-+ &4+LL5D2 ( [S&9,+\[ )] () 2tra #orma

Subconsulta Sincronizada
4resentar los empleados cuyo Salario es menor a la media de los Salarios de su departamento
S+L+* N ?-2% +%4L+ E,+-+ S&L&-52T 7777 () Rc;mo 1acemos este c0lculoS
1) %edia de los Salarios de cada departamento:
SELECT AV% (SALARIO FROM EMPLE WHERE DEPT!NO = 1";
SELECT AV% (SALARIO FROM EMPLE WHERE DEPT!NO = 2";
SELECT AV% (SALARIO FROM EMPLE WHERE DEPT!NO = $";
2) Datos de empleados de cada departamento con S&L&-52do in#erior a la media de los de su departamento
SELECT * FROM EMPLE WHERE DEPT!NO = 1" AND SALARIO' 2(1)*))+;
SELECT * FROM EMPLE WHERE DEPT!NO = 2" AND SALARIO' 21+,;
SELECT * FROM EMPLE WHERE DEPT!NO = $" AND SALARIO' 1,))*));
4ero nosotros lo /ueremos todo con una sola consulta () Subselect Sincronizada
S-L-CT E %RO/ -/FL- -1
94-R- -1.S'L'RIOJ !S-L-CT '51 !-2.S'L'RIO$ %RO/ -/FL- -2
94-R- -2.0-FTA+O < -1.0-FTA+O$;
La media de Salarios calculada en cada subselect por cada empleado ser0 la del departamento de la tabla +1 !la
del empleado en concreto)
13

3..C Combinacin de tablas
,asta a1ora, en las consultas /ue 1emos realizado s;lo se 1a utilizado una tabla, indicada a la derec1a de la
palabra ?-2%7 4ero 1ay "eces /ue una consulta necesita columnas de "arias tablas, las cuales se eCpresar0n a
la derec1a del ?-2%:
S-L-CT columnas de las tablas del P#romQ
%RO/ tabla1, tabla2, 777
94-R- tabla17columna ( tabla27columna]
uando combinamos "arias tablas 1ay /ue tener en cuenta unas re$las:
1) +s posible unir tantas tablas como deseemos
2) +n la cl0usula S+L+* se pueden citar columnas de todas las tablas
3) Si 1ay columnas con el mismo nombre, en las distintas tablas de la cl0usula ?-2% se deben
identi#icar especi#icando 9ombre*abla79ombreolumna !usaremos alias)
4) Si el nombre de una columna eCiste s;lo en una tabla, no ser0 necesario especi#icarla como
9ombre*abla79ombreolumna7 Sin embar$o, 1acerlo mejorar=a la le$ibilidad de la sentencia S+L+* ()
lo 1aremos as= pre#erentemente
') +l criterio /ue se si$a para combinar las tablas 1a de especi#icarse en la cl0usula E,+-+7 Si se omite
esta cl0usula, el resultado ser0 un 4-2D:*2 &-*+S5&92 /ue emparejar0 todas las #ilas de una tabla
con cada #ila de la otra
2btener el nombre, trabajo, nJmero de empleado, nombre de departamento y localidad de las tablas
+%4L+ y D+4*7
SELECT E*APELLIDO# E*OFICIO# E*EMPLE!NO# D*DNOMBRE# D*LOC
FROM EMPLE E# DEPARTD
WHERE E*DEPT!NO = D* DEPT!NO;
Si no ponemos la cl0usula E,+-+, el resultado ser0 el producto cartesiano:
SELECT E*APELLIDO# E*OFICIO# E*EMPLE!NO# D*DNOMBRE# D*LOC FROM EMPLE E# DEPART D;
-ealizar una consulta para obtener el nombre del alumno, su asi$natura y su nota:
SELECT ALUMNOS*APENOM# ASI%NATURAS*NOMBRE# NOTAS*NOTA
FROM ALUMNOS# ASI%NATURAS# NOTAS
WHERE ALUMNOS*DNI = NOTAS*DNI AND NOTAS*COD = ASI%NATURAS*COD;
2btener los nombres de los alumnos matriculados en Y?2LZ:
SELECT APENOM FROM ALUMNOS# ASI%NATURAS# NOTAS
11

WHERE ALUMNOS*DNI = NOTAS*DNI AND NOTAS*COD = ASI%NATURAS*COD AND NOMBRE = FOL-;

Combinacin de tablas !combinacin e"terna o Outer #oin$
,ay una "ariedad /ue se llama O*T-R KOI+ /ue nos permite seleccionar al$unas #ilas de una tabla aun/ue
8stas no ten$an correspondencia con las #ilas de la otra tabla con la /ue se combina:
S-L-CT tabla17colum1, tabla17colum2, tabla27colum1, tabla27colum2
%RO/ tabla1, tabla2
94-R- tabla17colum1 ( tabla27 colum1 !L$]
Selecciona todas las #ilas de la tabla *&BL&1, aun/ue no ten$an correspondencia con las #ilas de la tabla
*&BL&2 y se denota con el s=mbolo !L$ detr0s de la columna de la tabla *&BL&2 en la cl0usula E,+-+7 +l resto
de columnas de la tabla *&BL&2 se rellena con 9:LL7 +l si$no !X) se escribir0 del lado del P3Q ocurrencias
asociadas !donde pueda #altar esa cla"e ()
SELECT * FROM PARALEER; SELECT * FROM LEIDOS;
2DIL5B-2 92%B-+IL5B-2 2DIL5B-2 ?+,&
133 ien aHos de soledad 333 23G32G@@
233 Los mitos $rie$os 233 11G34G@@
333 +l camino
4&-&L++- contiene los libros /ue tenemos para leer y L+5D2S los libros /ue ya 1emos le=do, con su #ec1a de
terminaci;n
6isualizar la in#ormaci;n de ambas tablas !c;di$o libro, nombre y #ec1a #inalizaci;n de lectura)
SELECT P*COD!LIBRO# P*NOMBRE!LIBRO# L*FECHA FROM PARALEER P# LEIDOS L
WHERE P*COD!LIBRO = L*COD!LIBRO; () s;lo 2 #ilas con datos de los libros ya le=dos, pero no aparecen
los datos del libro /ue no se 1a le=do !133) por/ue no tiene su correspondencia en la tabla L+5D2S
SELECT P*COD!LIBRO# P*NOMBRE!LIBRO# L*FECHA FROM PARALEER P# LEIDOS L
WHERE P*COD!LIBRO = L*COD!LIBRO (.;


12

. %unciones SQL
%unciones: 'ritm>ticas
Las #unciones /ue trabajan con datos de tipo num8rico 9:%B+- y tenemos de tres tipos:
1) 6alores simples 2) Drupos de "alores 3) ?unciones de listas
1$ %unciones aritm>ticas de 2alores simples
:n "alor simple es: un nJmero !B121,23), una "ariable o una columna de una tabla
4ara probar al$unas de estas #unciones usaremos la tabla D:&L, /ue es una tabla creada para probar #unciones
o para 1acer c0lculos r0pidos7 +s una tabla de trabajo de 2racle7
'6S !n$ () de"uel"e el "alor absoluto de PnQ !siempre ser0 un nJmero positi"o)
. 2btener el "alor absoluto de O23: SELECT ABS(/2" ABSOLUTO FROM DUAL;
. 2btener el "alor absoluto del !2?552&-52 ^ A333) para todas las #ilas de +%4L+L+:
SELECT APELLIDO# OFICIO # ABS (OFICIO /)""" FROM EMPLE;
C-IL !n$ () obtiene el "alor entero inmediatamente superior o i$ual a PnQ7
. 4ara nJmeros positi"os, el "alor superior de un nJmero decimal es el si$uiente entero, y el "alor superior de
un nJmero entero es 8l mismo:
SELECT CEIL (2"*+# CEIL (2"*2# CEIL (1) FROM DUAL; () 21 21 1A
4ara nJmeros ne$ati"os el resultado es:
SELECT CEIL (/2"*+# CEIL (/2"*2# CEIL (/1) FROM DUAL; () O23 O23 O1A
%LOOR !n$ () es lo opuesto a +5L: de"uel"e el "alor entero inmediatamente in#erior o i$ual a PnQ7
. 4ara nJmeros positi"os, el "alor in#erior de un nJmero decimal es el entero anterior, y el "alor in#erior de un
nJmero entero es 8l mismo
SELECT FLOOR (2"*+# FLOOR (2"*2# FLOOR (1) FROM DUAL; () 23 23 1A
. 4ara nJmeros ne$ati"os el resultado es:
SELECT FLOOR (/2"*+# FLOOR (/2"*2# FLOOR (/1) FROM DUAL; () O21 O21 O1A
/O0 !m,n$ () de"uel"e el resto resultante de di"idir PmQ entre PnQ, pudiendo ser ambos nJmeros reales
SELECT MOD (11#0# MOD (11#"# MOD (1"#1,# MOD (/1"#$# MOD (1"#/$# MOD (1"*0#0*, FROM
DUAL; () 3 11 13 O1 1 1,4
+5L!2alor, e"p$: Se utiliza para sustituir un "alor nulo por otro "alor7 Si P"alorQ es 9ull es sustituido por la
eCpresi;n] si no lo es la #unci;n de"uel"e P"alorQ7

13

FO9-R !m, e"ponente$ () calcula la potencia de un nJmero: PmQ ele"ado al eCponente
SELECT POWER ($#0# POWER ($#/0# POWER (/$#0# POWER (0*,#2*0# POWER (0*,#2 FROM DUAL; ()
>1 ,31234'A> >1 3A,@'>134 23,2'
RO*+0 !numero M,mN$ () redondea los nJmeros con la cantidad indicada de d=$itos de precisi;n7 De"uel"e el
"alor PnumeroQ redondeado a PmQ decimales7 Si se omite PmQ, de"uel"e PnumeroQ con 3 decimales y
redondeado7 & partir de ' Ptira para arribaQ7
SELECT ROUND (1*,)$0#1# ROUND (1*,)$0# ROUND (1*22$0# ROUND (1*22$0#2# ROUND (1*2)+)#$
FROM DUAL; () 1,A 2 1 1,22 1,2A>
SQRT !n$ () de"uel"e la ra=z cuadrada de PnQ7 +l "alor de PnQ no puede ser ne$ati"o7
SELECT S1RT (2,# S1RT (2,*) FROM DUAL; () ' ',3'@A443
SELECT S1RT (/2, FROM DUAL; () dar0 un error
TR*+C !numero M,mN$ () trunca los nJmeros para /ue ten$an una cierta cantidad de d=$itos de precisi;n7
De"uel"e PnumeroQ truncado a PmQ decimales7 Si se omite PmQ de"uel"e PnumeroQ con 3 decimales
SELECT TRUNC (1*,)$0#1# TRUNC (1*1)20#2# TRUNC (1*))2 FROM DUAL] () 1,' 1,1A 1
SI1+!5'LOR$ () 5ndica el si$no del "alor7 Si "alor es ne$ati"o de"uel"e O1 y sino de"uel"e 17
2$ %unciones de (rupos de 2alores
,ay una serie de #unciones estad=sticas /ue actJan sobre un $rupo de #ilas para obtener un "alor7 Los "alores
nulos son i$norados por las #unciones de $rupos de "alores, y los c0lculos se realizan sin contar con ellos7
'51 !n$ () calcula el "alor medio de PnQ i$norando los "alores nulos7
0lculo del 2?552 medio de los empleados del departamento 13 de la tabla +%4L+L+
SELECT AV% (OFICIOARIO FROM EMPLE WHERE DEPT!NO=1";
alcular la comisi;n media de los empleados /ue tienen comisi;n:
SELECT AV% (COMISION FROM EMPLE; onsidera el cero pero no los 9:LL
CO*+T !E B e"presion$ () cuenta el nJmero de "eces /ue PeCpresi;nQ e"alJa al$Jn dato con "alor no nulo7 La
opci;n PNQ cuenta todas las #ilas seleccionadas
0lculo del nJmero de #ilas de la tabla +%4L+:
SELECT COUNT (* FROM EMPLE; () 14
0lculo del nJmero de #ilas de la tabla +%4L+ donde 2%5S529 no es nula:
SELECT COUNT (COMISION FROM EMPLE; () 4
ontar los distintos trabajos /ue 1ay !sin "erlos) !selecci;n de #ilas cuyos "alores en la columna no est8n
duplicados)
SELECT COUNT (DISTINCT OFICIO CANTIDAD FROM EMPLE; () '
14

alcular el nJmero de o#icios di#erentes /ue 1ay en total en los departamentos 13 y 23:
SELECT COUNT (DISTINCT OFICIOS FROM EMPLE WHERE DEPT!NO IN (1"#2"; () 4
/'O !e"presion$ () calcula el m0Cimo "alor de PeCpresi;nQ
0lculo del m0Cimo 2?552 de la tabla +%4L+:
SELECT MA3 (OFICIOARIO FROM EMPLE;
2btener el nombre m0Cimo !al#ab8ticamente) de la tabla +%4L+
SELECT MA3 (APELLIDO FROM EMPLE;
/I+ !e"presion$ () calcula el m=nimo "alor de PeCpresi;nQ
2btener el 2?552 m=nimo de la tabla +%4L+:
SELECT MIN (OFICIO FROM EMPLELE;
S*/ !e"presion$ () obtiene la suma de "alores de PeCpresi;nQ
2btener la suma de todos los 2?552s de la tabla +%4L+:
SELECT SUM (OFICIO FROM EMPLE; () 2@32'
4odemos reunir "arias de estas #unciones en una sola consulta:
SELECT COUNT (*# AV% (OFICIO# MA3 (OFICIO FROM EMPLE;
3$ %unciones de listas
*rabajan sobre un $rupo de columnas dentro de una misma #ila7 omparan los "alores de cada una de las
columnas en el interior de una #ila para obtener el mayor o el menor "alor de la lista
1R-'T-ST !2alor1, 2alor2 ...$ () obtiene el mayor "alor de la lista
SELECT %REATEST (1# 2# +# , FROM DUAL; () B
SELECT %REATEST ( ($.1# (12.( FROM DUAL; 4rimero resuel"e los par8ntesis internos y despu8s
eli$e el mayor () 21
L-'ST !2alor1, 2alor2 ...$ () obtiene el menor "alor de la lista
SELECT LEAST (1# 2# +# , FROM DUAL; () 1
SELECT LEAST ( ($.1# (12.( FROM DUAL; () 4

%unciones: Cadenas de caracteres
+stas #unciones trabajan con datos de tipo ,&- o 6&-,&-2, es decir, datos
al#anum8ricos !letras, nJmeros y caracteres especiales)
1'

C4R!n$ () De"uel"e el car0cter cuyo "alor binario es e/ui"alente a PnQ7
CO+C'T!cad1,cad2$ () oncatenaci;n de cadenas7 De"uel"e Pcadena1Q concatenada
con Pcadena2Q7 +sta #unci;n es e/ui"alente al operador LL7
LO9-R !cad$ () De"uel"e la cadena PcadQ con todas sus letras con"ertidas a
minJsculas7
*FF-R !cad$ () De"uel"e la cadena PcadQ con todas sus letras con"ertidas a
mayJsculas7
I+ITC'F !cad$ () on"ierte la primera letra de cada palabra de PcadQ a mayJscula y el
resto a minJscula7
LF'0 !cad1, n M,cad 2N$ () aHade caracteres a la iz/uierda de Pcad1Q 1asta /ue alcance
una cierta lon$itud7 De"uel"e Pcad1Q con lon$itud PnQ y ajustado a la derec1a7 Pad2Q
es la cadena con la /ue se rellena por la iz/uierda, la cual ser0 car0cter blanco si se
suprime7
SELECT LPAD !010, 2, 0*0# 3E456"3, LPAD !010, 7, 0*.0# 3E45623, LPAD !010, 2, 0*.0#
3E456(3, LPAD !0HOLA0, "0, 0.0# 3E456&3 FROM D8AL;
+jem1 +jem2 +jem3 +jem4
NNNN_ N7N7N_ N7N7_ 777777,2L&
4oner los nombres de la tabla +%4L+ ajustados a la derec1a y lon$itud total de 13
caracteres
SELECT LPAD !APELLIDO, "0# *NOM+RE, FROM EMPLE; () cuidado por/ue recorta si
ponemos PnQ menor /ue el nJmero de caracteres de la columna
RF'0 !cad1, n M,cad 2N$ () aHade caracteres a la derec1a de Pcad1Q 1asta /ue alcance
una cierta lon$itud7 De"uel"e Pcad1Q con lon$itud PnQ y ajustado a la iz/uierda7 Pad2Q
es la cadena con la /ue se rellena por la derec1a, la cual ser0 car0cter blanco si se
suprime7
SELECT RPAD !010, 2, 0*0# 3E4569:;3 FROM D8AL; => 1****
4ara cada #ila de +%4L+, obtener el nombre de los empleados /ue ten$an una lon$itud
de 11 caracteres y rellenar por la derec1a con asteriscos
SELECT RPAD !APELLIDO, "", 0*0# 3E<EMPLO3 FROM EMPLE;
1A

LTRI/ !cad$ () Si la cadena tiene blancos a la iz/uierda, la #unci;n de"uel"e la cadena
sin esos blancos, y si no tiene blancos la deja como est07
SELECT LTRIM ! =;:># -- LTRIM ! >?@;A# FROM D8AL; => =;:>>?@;A
RTRI/ !cad$ () Si la cadena tiene blancos a la derec1a, la #unci;n de"uel"e la cadena
sin esos blancos, y si no tiene blancos la deja como est0
SELECT RTRIM !=;:> # -- RTRIM !>?@;A# FROM D8AL; => =;:>>?@;A
S*6STR !cad, inicio, M,nN$ () eCtrae una parte de una cadena7 De"uel"e PcadQ /ue
abarca desde la posici;n indicada en PinicioQ 1asta tantos caracteres como indi/ue el
nJmero PnQ7 Si se omite PnQ, de"uel"e la cadena desde la posici;n especi#icada por
PinicioQ7
SELECT S8+STR !0A+CDEF%0,(,2# FROM D8AL; => CD
2btener la cadena a partir de la posici;n cuarta:
SELECT S8+STR !0A+CDEF%0,&# FROM D8AL; => DEF%
6isualizar el nombre y su primera letra de la tabla +%4L+
SELECT APELLIDO, S8+STR !APELLIDO, ", "# FROM EMPLE;
L-+1T4 !cad$ () de"uel"e el nJmero de caracteres de PcadQ
alcular el nJmero de caracteres de las columnas &4+LL5D2 y 2?552 de la tabla
+%4L+:
SELECT APELLIDO, LEN%TH !APELLIDO#, OFICIO, LEN%TH !OFICIO# FROM EMPLE;
Otras 8unciones de cadenas
Replace !cad, cadenaAb7sDuedaMcadenaAsustitucinN$. Sustituye un car0cter o "arios
caracteres de una cadena con 3 o m0s caracteres7 De"uel"e PcadQ con cada ocurrencia
de cadenaIbJs/ueda sustituida por cadenaIsustituci;n7
Translate !cad1,cad2,cad3$. on"ierte caracteres de una cadena en caracteres
di#erentes de acuerdo con un plan de sustituci;n /ue marca el usuario7 De"uel"e
Pcad1Q con los caracteres encontrados en Pcad2Q y sustituidos por los caracteres de
Pcad3Q7 ual/uier car0cter /ue no est8 en la cadena cad2 permanece como estaba7
'SCII!cad$. De"uel"e el "alor &S55 de la primera letra de la cadena PcadQ7
1B

I+STR!cad1,cad2M,comienzoM,mNN$. Busca un conjunto de caracteres en una cadena7
De"uel"e la posici;n PmO8simaQ ocurrencia de cad2 en cad1 empezando la bJs/ueda
en la posici;n PcomienzoQ7 4or omisi;n empieza buscando en la posici;n 17
%unciones: /ane#o de 8ecIas
2racle almacena datos de tipo #ec1a !D&*+) y posee una utilidad para #ormatear las
#ec1as de cual/uier manera /ue se pueda concebir7 +l tipo D&*+ se almacena en un
#ormato especial /ue incluye: mesGd=aGaHoG1oraGminutosGse$undos7
S:S0'T- () de"uel"e la #ec1a del sistema
SELECT S/SDATE FROM D8AL; => B;C6>D; DD/MM///
'00A/O+T4S !8ecIa, n$ () de"uel"e la P#ec1aQ incrementada en PnQ meses
2btener el nombre, la #ec1a de in$reso y la #ec1a de in$reso incrementada en 1 mes:
SELECT APELLIDO, FECHA_ALT, ADD!MONTHS !FECHA_ALT, "# FROM EMPLE;
4ara restar meses, podemos poner nJmeros ne$ati"os
SELECT APELLIDO, FECHA_ALT, ADD_MONTHS !FECHA_ALT, -"2# FROM EMPLE;
L'STA0': !8ecIa$ () de"uel"e la #ec1a del Jltimo d=a del mes /ue contiene P#ec1aQ
SELECT LAST_DA/ !02"/"/200'0#, LAST_DA/ !"0/2/200'0# FROM D8AL; => ("/"/0' 2E/2/0'
/O+T4SA6-T9--+ !8ecIa1, 8ecIa2$ () de"uel"e la di#erencia en meses entre las
#ec1as P#ec1a1Q y P#ec1a2Q7 4uede ser un nJmero decimal
2btener el nombre, la #ec1a de in$reso y la anti$`edad en meses de los empleados:
SELECT APELLIDO, FECHA_ALT, MONTHS_+ETWEEN !S/SDATE, FECHA_ALT# *ANTI%8EDAD,
FROM EMPLE;
2btener el nombre, la #ec1a de in$reso y la anti$`edad en aHos de los empleados:
SELECT APELLIDO, FECHA_ALT, FLOOR !MONTHS_+ETWEEN !S/SDATE, FECHA_ALT#/"2 #
*ANTI%8EDAD, FROM EMPLE; () para redondear los aHos 1acia abajo
La #unci;n #loor de"uel"e el "alor entero inmediatamente in#erior o i$ual al /ue est0
entre par8ntesis7
+-OTA0': !8ecIa,cad$ () De"uel"e la #ec1a del primer d=a de la semana indicado por
PcadQ despues de la #ec1a indicada por P#ec1aQ7
1>

%unciones: Con2ersin
*rans#orman los objetos de un tipo de dato en otro7
TOAC4'R !8ecIa, P8ormatoQ$ () con"ierte una P#ec1aQ !tipo D&*+) a tipo P6&-,&-2Q
en el Y#ormatoZ especi#icado con una determinada m0scara F 4:+D+ 59L:5- L5*+-&L+S
+9+--&D2S +9*-+ 2%5LL& D2BL+S7
SELECT TO_CHAR !S/SDATE, DD/MM///// HH2& MI SS# *FECHA, FROM D8AL;
%0scaras m0s utilizadas:
::::: aHo FF: Jltimos dos d=$itos del aHo
//: nJmero de mes DD: nJmero de d=a del mes
4412: 1ora 1O12 ,,24: 1ora 1O24
/I: minutos SS: se$undos
/O+T4: nombre del mes !2*:B-+), montI !octubre), /ontI !2ctubre)
0':: nombre del d=a de la semana !L:9+S)
SELECT TO_CHAR !S/SDATE, 06;FD= ?>G0# 3FECHA3 FROM D8AL;
& partir de la tabla +%4L+, obtener el nombre y la #ec1a de in$reso #ormateada de
manera /ue aparezca el nJmero de d=a de mes, el nombre del mes con todas sus letras
y el aHo:
SELECT APELLIDO, TO_CHAR !FECHA_ALT, 0DD MONTH ////0# 3N8EHA FECHA3 FROM
EMPLE; () probar con %ont1 y con mont1
2btener la #ec1a de 1oy con el si$uiente #ormato:
,oy es nombreIdia, dia mes de nombreImes de aHo
SELECT TO_CHAR !S/SDATE, 03H;G 5A 3 ?>G 3,3 DD 3 ?5 3 6;FD= 3 ?5 3 ////0# 3FECHA3 FROM
D8AL;
TOA0'T- !cad, P8ormatoQ$ () con"ierte PcadQ, de tipo 6&-,&-2 o ,&-, a un "alor de
tipo D&*+7 +l #ormato de #ec1a ele$ido es Y#ormatoZ7
on"ertir una cadena a tipo D&*+:
SELECT TO!DATE ('"1"12""(' FROM DUAL; =& "14"14"(
1@

4ara poner otro #ormato de representaci;n a las #ec1as usar:
ALTER SESSION SET NLS!DATE!FORMAT='DD4MM45555;
2btener el nombre del mes a partir de la cadena Y31312334Z:
SELECT TO_CHAR !TO_DATE !0"0"200&, DDMM////#, M;FD=# *MES, FROM D8AL; =>
EF5C;
2btener el nombre del d=a, el nombre del mes, el d=a y el aHo a partir de la cadena
Y1212233@Z:
SELECT TO_CHAR !TO_DATE !0"2"2200',0DDMM////0#, 0D>G DD M;FD= ////0# 3FECHA3 FROM
D8AL
TOAC4'R !numero, P8ormatoQ$ <= con"ierte un nJmero a tipo "arc1ar2 en el #ormato
especi#icado7
?ormatos m0s utilizados:
@ () por un car0cter o si es cero por nada7
3 () muestra un cero si el "alor es cero
D () car0cter de lo miles
D () car0cter decimal
L () S=mbolo de la moneda local
, () pone coma en la posici;n especi#icada
7 () pone punto en la posici;n especi#icada
Select toIc1ar!1,Z@@@Z), toIc1ar!O1,Z@@@Z), toIc1ar!31,Z@@@Z), toIc1ar!3,Z@@@Z),
toIc1ar!123,ZL@@@Z) #rom dual] () 1, O1, 1 ,
Select toIc1ar!1234'7AB, Y@@@D@@@D@@@Z) #rom dual] () 12,34'7 AB
TOA+*/6-R!cadena M, 8ormatoN$ <=
*S-R De"uel"e el nombre del usuario actual7
*I0 De"uel"e el identi#icador del usuario actual7
*S-R, *I0 : S:S0'T- realmente son pseudocolumnas7
SELECT 8SER FROM D8AL; () S&9,+\
SHOW 8SER () :S+- es PS&9,+\Q

23

%OR/'TO 0- %-C4'
4or de#ecto el #ormato para la #ec1a "iene de#inido por el par0metro +LSAT-RRITOR: ( S4&59 ] este
par0metro se inicializa al arrancar 2racle y especi#ica:
+l idioma para el #ormato de la #ec1a7
Los separadores de miles7
+l car0cter decimal7
+l s=mbolo de la moneda7

4odemos cambiar el "alor por omisi;n inicializando al$unos par0metros:
+LSA0'T-AL'+1*'1-: cambia el idioma de la #ec1a7
+LSA+*/-RICAC4'R'CT-RS: ambia el car0cter de miles y decimales7
+LSAC*RR-+C:: ambia el s=mbolo de la moneda local7
+LSA0'T-A%OR/'T: ambia el #ormato de la #ec1a7
+j: &L*+- S+SS529 S+* 9LSI9:%+-5I,&-&*+-S ( Y,7Z
ar0cter decimal la coma y separador de miles, el punto7


21

&.C '(rupacin de elementos: 1RO*F 6: . 4'5I+1
S-L-CT CCCC
%RO/ CCCC <= 8iltro a ni2el de 8ila
1RO*F 6: columna1, columna2, columna 3, CCCCCC
4'5I+1 condicin <= 8iltro a ni2el de (rupo
OR0-R 6: CCCC
Los datos seleccionados en la sentencia S+L+* /ue lle"a el D-2:4 BF deben ser: 678 9:7;<87<=# 678 >679?@7
A= BC6D: (SUM# COUNT# AV%# MIN# MA3# 678 9:E6F78 =GDC=;8A8 =7 =E %ROUP B5*
C 1RO*F 6: sir"e para calcular propiedades de uno o m0s conjuntos de #ilas !$rupos)7 5$ual /ue
eCiste la condici;n de bJs/ueda E,+-+ para #ilas indi"iduales, tambi8n 1ay una condici;n de
bJs/ueda para $rupos de #ilas:
C 4'5I+1 () se emplea para controlar cu0l de los conjuntos de #ilas se "isualiza y no puede eCistir
sin un D-2:4 BF7
6isualizar el nJmero de empleados /ue 1ay en cada departamento !a$rupar las #ilas de la tabla +%4L+ por
departamento y contarlas)
SELECT DEPT!NO# COUNT (* FROM EMPLE %ROUP B5 DEPT!NO; () 13O3 23O' 33OA
2:9* es una #unci;n de $rupo y da in#ormaci;n sobre un $rupo de #ilas, no sobre #ilas indi"iduales de
la tabla, por lo /ue la cl0usula D-2:4 BF D+4*I92 obli$a a 2:9* a contar las #ilas /ue se 1an a$rupado por
cada departamento7
4ara "isualizar s;lo los departamentos con m0s de 4 empleados
SELECT DEPT!NO# COUNT (* FROM EMPLE %ROUP B5 DEPT!NO HAVIN% COUNT (* &0; () 23O' 33OA
Si adem0s, /ueremos ordenar la S&L&-52ida descendentemente por nJmero de +mpleados:
SELECT DEPT!NO# COUNT (* FROM EMPLE %ROUP B5 DEPT!NO HAVIN% COUNT (* &0 ORDER B5
COUNT (* DESC;
4odemos especi#icar en 2-D+- BF #unciones de $rupo, columnas de D-2:4 BF o su combinaci;n7
uando se usa D-2:4 BF, todas las columnas de la S+L+* distintas a #unciones de a$re$aci;n deben aparecer
en la cl0usula D-2:4 BF7 Sin embar$o, pueden aparecer columnas en el D-2:4 BF y no estar en la S+L+*7
Qu8 trabajos se realizan en cada departamento y cu0ntos +mpleados lo realizan !en cada departamento
tambi8n)
SELECT DEPT!NO# OFICIO# COUNT (* FROM EMPLE
%ROUP B5 DEPT!NO# OFICIO;
La e"aluaci;n de las cl0usulas en tiempo de ejecuci;n se e#ectJa en el si$uiente orden:
E,+-+ () D-2:4 BF () ,&659D () 2-D+- BF () S+L+*
22

Selecciona #ilas () a$rupa las #ilas () #iltra los $rupos () ordena los $rupos () proyecta los atributos pedidos
2btener la suma de Salarios, el m0Cimo y el Salario m=nimo por cada departamento:
SELECT DEPT!NO# SUM(SALARIO HSUMA SALARIOSH# MA3(SALARIO HMA3IMO SALARIOARIOH#
MIN(SALARIO HMINIMO SALARIOARIOH FROM EMPLE %ROUP B5 DEPT!NO;
9ombres y nJmero de departamentos /ue ten$an m0s de 4 personas trabajando:
SELECT DEPT!NO# DNOMBRE
FROM DEPARTT
WHERE DEPT!NO IN (SELECT DEPT!NO FROM EMPLE %ROUP B5 DEPT!NO HAVIN% COUNT (* & 0;
Buscar el nJmero m0Cimo de +mpleados /ue 1ay en al$Jn departamento:
S+L+* %&_ !2:9*!N)) P%aCimoQ ?-2% +%4L+
D-2:4 BF D+4*I92]
6isualizar el nJmero de departamento, el nombre de departamento y el nJmero de +mpleados del
departamento con m0s +mpleados:
SELECT E*DEPT!NO# D*DNOMBRE# COUNT (* FROM EMPLE E# DEPT D
WHERE E*DEPT!NO = D*DEPT!NO
%ROUP B5 E*DEPT!NO# D*DNOMBRE
HAVIN% COUNT (* = (SELECT MA3(COUNT(* FROM EMPLE %ROUP B5 DEPT!NO;
Si solamente /ueremos n< de departamento y nombre !no el nJmero de +mpleados):
SELECT DEPT!NO# DNOMBRE FROM DEPT
WHERE DEPT!NO IN (SELECT DEPT!NO FROM EMPLE
%ROUP B5 DEPT!NO
HAVIN% COUNT (* = (SELECT MA3(COUNT(* FROM EMPLE %ROUP B5 DEPT!NO;


23

).C Operadores de con#untos: *+IO+, I+T-RS-CT . /I+*S
*+IO+ () combina los resultados de dos consultas7 Las #ilas duplicadas /ue aparecen se reducen a una #ila
Jnica !elimina repetidos)7 aste es su #ormato
S+L+* 2L1, 2L2, 777 ?-2% *&BL& 1 E,+-+ condici;n
*+IO+
S+L+* 2L1, 2L2, 777 ?-2% *&BL&2 E,+-+ condici;n]
6isualizar los nombres de los alumnos actuales y de los #uturos alumnos
SELECT NOMBRE FROM ALUM UNION SELECT NOMBRE FROM NUEVOS; () @ #ilas
*+IO+ 'LL () combina los resultados de dos consultas7 ual/uier duplicaci;n de #ilas /ue se d8 en el resultado
#inal aparecer0 en la consulta !no elimina repetidos):
SELECT NOMBRE FROM ALUM UNION ALL SELECT NOMBRE FROM NUEVOS; () 12 #ilas por/ue no
elimina los repetidos
I+T-RS-CT () de"uel"e las #ilas /ue son i$uales en ambas consultas, eliminando cual/uier #ila duplicada /ue
pudiera sur$ir7 +l #ormato es
S+L+* 2L1, 2L2, 777 ?-2% *&BL& 1 E,+-+ condici;n
I+T-RS-CT
S+L+* 2L1, 2L2, 777 ?-2% *&BL&2 E,+-+ condici;n]
2btener los nombres de alumnos /ue est0n actualmente en el centro y /ue estu"ieron en el centro 1ace ya un
tiempo7
SELECT NOMBRE FROM ALUM INTERSECT SELECT NOMBRE FROM ANTI%UOS; () 2 #ilas
SELECT NOMBRE FROM ALUM WHERE NOMBRE IN (SELECT NOMBRE FROM
ANTI%UOS; () ser=a otra #orma de 1acer la misma consulta
/I+*S () de"uel"e a/uellas #ilas /ue est0n en la primera S+L+* y no est0n en la se$unda7 Las #ilas duplicadas
se eliminan7
S+L+* 2L1, 2L2, 777 ?-2% *&BL&1 E,+-+ condici;n
2btener los nombres y la localidad de alumnos /ue est0n actualmente en el centro y /ue nunca
estu"ieron anteriormente en 8l7
SELECT NOMBRE# LOCALIDAD FROM ALUM MINUS SELECT NOMBRE# LOCALIDAD FROM ANTI%UOS;
La anterior consulta se puede 1acer tambi8n con 92* 59
SELECT NOMBRE# LOCALIDAD FROM ALUM
WHERE NOMBRE NOT IN (SELECT NOMBRE FROM ANTI%UOS;
24

Seleccionar los nombres de la tabla &L:% /ue est8n en 9:+62S y no est8n en &9*5D:2S
SELECT NOMBRE FROM ALUM WHERE NOMBRE IN
(SELECT NOMBRE FROM NUEVOS
MINUS
SELECT NOMBRE FROM ANTI%UOS; () 2 #ilas
4odemos 1acer la consulta sin usar %59:S !usando &9D)
SELECT NOMBRE FROM ALUM WHERE NOMBRE IN
(SELECT NOMBRE FROM NUEVOS AND
NOMBRE NOT IN (SELECT NOMBRE FROM ANTI%UOS;
S+L+* 2L1, 2L2, 777 ?-2% *&BL&2 E,+-+ condici;n]
2btener los nombres y la localidad de alumnos /ue est0n actualmente en el centro y /ue nunca estu"ieron
anteriormente en 8l7
SELECT NOMBRE# LOCALIDAD FROM ALUM MINUS SELECT NOMBRE# LOCALIDAD FROM ANTI%UOS;
Re(las para la utilizacin
1) Las columnas de las dos consultas se relacionan en orden, de iz/uierda a derec1a
2) Los nombres de columna de la primera sentencia S+L+* no tienen por /u8 ser los mismos /ue los nombres
de la se$unda
3) Las S+L+* necesitan tener el mismo nJmero de columnas
4) Los tipos de datos deben coincidir, aun/ue la lon$itud no tiene /ue ser la misma
SELECT NOMBRE# EDAD FROM ALUM
MINUS
SELECT APELLIDO# SALARIO FROM EMPLE; () no /uitar0 nin$una #ila de la tabla &L:%
Si intercambiamos el orden de las columnas aparecer0 error NOMBRE# EDAD SALARIO# APELLIDO
Si el nJmero de columnas es di#erente en las S+L+* tambi8n tendremos error:
SELECT NOMBRE# EDAD FROM ALUM MINUS SELECT APELLIDO FROM EMPLE;
Los operadores se pueden encadenar, e"alu0ndose los conjuntos de iz/uierda a derec1a7 4ara #orzar la
precedencia se pueden utilizar par8ntesis:
(SELECT NOMBRE FROM ALUM UNION SELECT NOMBRE FROM ANTI%UOS MINUS SELECT NOMBRE
FROM NUEVOS; () A #ilas
SELECT NOMBRE FROM ALUM UNION (SELECT NOMBRE FROM ANTI%UOS MINUS SELECT NOMBRE
FROM NUEVOS; () @
2'

Formatos de Fecha
La funcin TO_CHAR(<fecha>,<formato>) traduce una fecha/hora (o parte de ella) a una cadena de
caracteres, y TO_DATE(<fecha>,<formato>) transforma una cadena de caracteres a una fecha, hora o
combinacin fecha/hora.
Por ejemplo, TO_DATE('02/08/2002', 'DD/MM/YYYY') dara la fecha 2 de agosto de 2002. Si
suponemos que un atributo FECHA almacena esa misma fecha a las 3 de la tarde, TO_CHAR(FECHA,
'DD-MON-YYYY HH:MI AM') devolvera el string 02-AGO-2002 03:00 PM. El formato es una cadena de
caracteres en la que se indica el formato siguiendo las claves que se muestran en la Tabla. Esta tabla no
incluye absolutamente todos los formatos, pero s un buen nmero de ellos, que deberan ser ms que
suficientes para un uso normal.
Formatos de fecha en Oracle

Siglos y aos
CC
Siglo
SCC
Siglo. Si es AC (Antes de Cristo), lleva un signo
YYYY Ao, formato de 4 dgitos
SYYY
Ao, formato de 4 dgitos. Si es AC lleva un signo
YY
Ao, formato de 2 dgitos
YEAR
Ao, escrito en letras y en ingls (por ejemplo, 'TWO THOUSAND TWO')
SYEAR
dem, pero si es AC lleva el signo
BC
Antes o Despus de Cristo (AC o DC) para usar con los anteriores, por ejemplo YYYY
BC
Meses
Q Trimestre: Ene-Mar=1, Abr-Jun=2, Jul-Sep=3, Oct-Dic=4
MM
Nmero de mes (1-12)
RM
Nmero de mes en nmeros romanos (I-XII)
MONTH
Nombre del mes completo rellenado con espacios hasta 10 espacios (SEPTIEMBRE)
FMMONTH
Nombre del mes completo, sin espacios adicionales
MON
Tres primeras letras del mes: ENE, FEB,...
Semanas
WW Semana del ao (1-52)
W Semana del mes (1-5)


2A


Das
DDD
Da del ao (1-366)
DD
Da del mes (1-31)
D
Da de la semana (1-7)
DAY
Nombre del da de la semana rellenado a 9 espacios (MIRCOLES)
FMDAY
Nombre del da de la semana, sin espacios
DY
Tres primeras letras del nombre del da de la semana
DDTH
Da (ordinal): 7TH
DDSPTH
Da ordinal en palabra, en ingls: SEVENTH
horas
HH
Hora del da (1-12)
HH12
Hora del da (1-12)
HH24
Hora del da (1-24)
SPHH
Hora del da, en palabra, ingls: SEVEN
AM
am o pm, para usar con HH, como 'HH:MI am'
PM am o pm
A.M. a.m. o p.m.
P.M. a.m. o p.m.
Minutos y segundos
MI Minutos (0-59)
SS Segundos (0-59)
SSSS Segundos despus de medianoche (0-86399)

You might also like