Colegio De Educacin Profesional Tcnica Bachiller Del Estado
CONALEP PLANTEL 068
Programacin con sistemas gestores de bases de
datos
Lic. Lucia Gonzales Vsquez
Estalin Hediberto Tovar Rodrguez
P.T.B. en Informtica
Grupo: 5104
Tuxtla chico, Chiapas a 26 de agosto del 2016.
A) ELABORACIN DE CONSULTAS MEDIANTE LENGUAJE SQL.
Seleccin
La recuperacin de los datos en el lenguaje SQL se realiza mediante la
sentencia SELECT, seleccionar. Esta sentencia permite indicar al SGBD la
informacin que se quiere recuperar. Esta es la sentencia SQL, con diferencia,
ms habitual. La sentencia SELECT consta de cuatro partes bsicas:
La clusula SELECT seguida de la descripcin de lo que se desea ver, los
nombres de las columnas a seleccionar. Esta parte es obligatoria.
La clusula FROM seguida de la especificacin de las tablas de las que se
han de obtener los datos. Esta parte es obligatoria.
La clusula WHERE seguida por un criterio de seleccin, una condicin.
Esta parte es opcional.
La clusula ORDER BY seguida por el criterio de ordenacin. Esta parte es
opcional.
Una primera aproximacin a la sintaxis de la sentencia SELECT puede mostrarnos
la siguiente expresin:
SELECT {* | {columna,}+}
FROM {tabla,}+
[WHERE condicin]
[ORDER BY {expresinColumna [ASC | DESC],}+];
Como una primera utilizacin de la sentencia SELECT podemos utilizarla para ver
todas las tablas que tenemos en la base de datos.
SQL> select table_name from user_tables;
TABLE_NAME
-----------------------------DEP
EMP
Un breve anlisis de la sentencia anterior nos permite observar que hemos
consultado sobre la columna llamada table_name almacenada en la
tablauser_tables, que es la tabla que guarda la informacin sobre todas las tablas
de cada usuario.
Tipos de Columnas
Existen varios tipos de datos en SQL. De esta manera, cada columna puede
albergar una informacin de naturaleza distinta. Los tipos de datos ms comunes y
sus caractersticas se resumen en la siguiente tabla.
Tipo de Dato
Descripcin
VARCHAR2(tamao)
Almacena datos de tipo carcter alfanumrico de longitud variable,
con un tamao mximo de 2.000.
CHAR(tamao)
Almacena datos de tipo carcter alfanumrico de longitud fija, con un
tamao mximo de 255.
LONG
Almacena datos de tipo carcter alfanumrico de longitud variable
con un tamao mximo de hasta 2 Gb.
NUMBER(dig,dec)
Almacena datos numricos de dig dgitos, de los cuales dec son
decimales. El tamao mximo es de 38 dgitos.
DATE
Almacena fechas desde el 1-Ene-4712 AC hasta el 31-Dic-4712 DC.
RAW(tamao)
Almacena datos de longitud variable, con un tamao mximo de 255
bytes.
LONG RAW
Almacena datos de longitud variable, con un tamao mximo de 2
Gb.
Seleccin de Columnas
Las columnas a seleccionar se enumeran sin ms en la clusula SELECT. Si se
desea seleccionar todas las columnas de una tabla se puede hacer enumerando a
todas las columnas o colocando un asterisco, *, en su lugar.
Cuando se consulta una base de datos, los nombres de las columnas se usan
como cabeceras de presentacin. Si ste resulta demasiado largo, corto o crptico,
puede cambiarse con la misma sentencia SQL de consulta, creando un alias de
columna.
SQL> select nombre "Departamento", loc "Est en" from dep;
Departamento
---------------
Esta en
----------
Administracion
I+D
Produccion
Valladolid
Boecillo
Cigales
Clusula FROM
La clusula FROM define las tablas de las que se van a seleccionar las columnas.
Se puede aadir al nombre de las tablas el usuario propietario de las mismas de la
forma usuario.tabla. De esta manera podemos distinguir entre las tablas de un
usuario y otro. Oracle siempre considera como prefijo el nombre del propietario de
las tablas, aunque no se lo indiquemos. De esta forma dos o ms usuarios pueden
tener tablas que se llamen igual sin que surjan conflictos. Si quisiramos acceder
a las filas de la tabla dep del usuario jperez, (ademas de tener privilegios de
lectura sobre esa tabla) deberamos escribir la siguiente sentencia SQL:
SQL> select * from jperez.dep;
Tambin se puede asociar un alias a las tablas para abreviar los nombres de las
tablas. Un ejemplo se puede ver en la sentencia SQL siguiente:
SQL> select d.nombre from dep d;
Clusula WHERE
Hasta ahora hemos visto como puede utilizarse la sentencia SELECT para
recuperar todas las columnas o un subconjunto de ellas de una tabla. Pero este
efecto afecta a todas las filas de la tabla, a menos que especifiquemos algo ms
en la clusula WHERE. Es aqu donde debemos proponer la condicin que han de
cumplir todas las filas para salir en el resultado de la consulta. La complejidad del
criterio de bsqueda es prcticamente ilimitada, y en l se pueden conjugar
operadores de diversos tipos con funciones de columnas, componiendo
expresiones ms o menos complejas.
Operadores de Comparacin
Operador
Operacin
Ejemplo
Igualdad
select * from emp where cod_dep = 100;
!=, <>, ^=
Desigualdad
select * from emp where cod_dep != 100;
<
Menor que
select * from emp where cod_dep < 200;
>
Mayor que
select * from emp where cod_dep > 200;
<=
Menor o igual que
select * from emp where cod_dep <= 200;
>=
Mayor o igual que
select * from emp where cod_dep >= 200;
in
Igual a cualquiera de los miembros entre
parntesis
select * from emp where cod_dep in (100, 300);
not in
Distinto a cualquiera de los miembros
entre parntesis
select * from emp where cod_dep not in (200);
between
Contenido en el rango
select * from emp where cod_emp between 100
and 199;
not between
Fuera del rango
select * from emp where cod_emp not between
100 and 199;
like '_abc%'
Contiene la cadena 'abc' a partir del
segundo carcter y luego cualquier cadena select * from emp where nombre like 'Ma%';
de caracteres
Operadores de Aritmticos
Operador Operacin Ejemplo
+
Suma
select nombre, salario+comision from emp where
oficio='VENDEDOR';
Resta
select nombre from emp where sysdate-fecha_alta > 365;
Producto
select nombre, salario*12 from emp;
Divisin
select nombre, salario/31 from emp;
Operadores de Cadenas de Caracteres
Operador
Operacin
Ejemplo
||
Concatenacin
select nombre||oficio from emp;
Clusula ORDER BY
Se utiliza para especificar el criterio de ordenacin de la respuesta a la consulta.
Por defecto la ordenacin es ascendente, aunque se puede especificar un orden
descendente. La ordenacin se puede establecer sobre el contenido de columnas
o sobre expresiones con columnas. A continuacin se puede ver un ejemplo de
uso de la clusula ORDER BY en la que quiere obtener un listado de los
empleados ordenado de manera descendente por su salario y en caso de igualdad
de salario, ordenado ascendentemente por su nombre.
SQL> select nombre, salario from emp order by salario desc, nombre;
NOMBRE
SALARIO
---------- ---------Cano
450000
Perez
350000
Roncal
Yuste
Recio
Sastre
Martin
Garcia
Garcia
Mateo
Santana
Rueda
Lopez
Sanz
350000
350000
300000
300000
235000
225000
210000
200000
200000
175000
150000
150000
14 rows selected.
Clusula DISTINCT
Cuando se realiza una consulta sobre una tabla en la que se extrae informacin de
varias columnas, puede ocurrir que, si no incluimos la/s columna/s que forman la
clave principal, obtengamos filas repetidas en la respuesta.Si este comportamiento
no nos resulta satisfactorio podemos utilizar la clusula DISTINCT para eliminar
las filas duplicadas obtenidas como respuesta a una consulta.Podemos ver como
funciona en el siguiente ejemplo, en el que preguntamos por los distintos oficios de
nuestros empleados.
SQL> select oficio from emp;
Sin utilizar la clusula DISTINCT obtendremos la siguiente respuesta
OFICIO
----------Presidente
Director
Secretario
Contable
Comercial
Comercial
Director
Analista
Programador
Programador
Director
Analista
Programador
Programador
14 rows selected.
Pero si incluimos la clusula DISTINCT la respuesta vara para adecuarse ms a
nuestras espectativas.
SQL> select distinct oficio from emp;
OFICIO
----------Analista
Comercial
Contable
Director
Presidente
Programador
Secretario
7 rows selected.
Clusula GROUP BY
SQL nos permite agrupar las filas resultado de una consulta en conjuntos y aplicar
funciones sobre esos conjuntos de filas.
La sintaxis es la siguiente:
SELECT {* | {columna,}+}
FROM {tabla,}+
WHERE condicin
GROUP BY {columna ,}+
HAVING condicin
ORDER BY {expresinColumna [ASC | DESC],}+;
En la clusula GROUP BY se colocan las columnas por las que vamos a agrupar.
Y en la clusula HAVING se especifica la condicin que han de cumplir los grupos
para pasar al resultado.
La evaluacin de las diferentes clusulas en tiempo de ejecucin se efecta en el
siguiente orden:
WHERE filtra las filas
GROUP BY crea una tabla de grupo nueva
HAVING filtra los grupos
ORDER BY clasifica la salida
Un ejemplo de utilizacin de la seleccin de grupos puede ser seleccionar los
empleados agrupados por su oficio. Un primer intento de consulta es el siguiente:
SQL> select nombre, oficio from emp group by oficio;
select nombre, oficio from emp
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression
Se presenta un error debido a que cuando se utiliza GROUP BY, las columnas
implicadas en el SELECT y que no aparezcan en la clusula GROUP BY deben
tener una funcin de agrupamiento. En otras palabras, la columna nombre debe
tener una funcin de agrupamiento que actue sobre ella (max, min, sum, count,
avg). Si no puede ser as, deber llevar dicha columna a la clusula GROUP BY.
De nuevo, el ejemplo quedar as:
SQL> select count(nombre), oficio from emp group by oficio;
COUNT(NOMBRE) OFICIO
------------- ----------2 Analista
2 Comercial
1 Contable
3 Director
1 Presidente
4 Programador
1 Secretario
7 rows selected.
Las funciones de agrupamiento que se pueden utilizar son las siguientes.
Funciones de Agrupamiento
Funcin
Cometido
Ejemplo
COUNT(col)
Cuenta el nmero de filas select count(nombre),oficio
agrupadas.
emp group by oficio;
AVG(col)
Calcula el valor medio de
select avg(salario),oficio from emp
todos los valores de la
group by oficio;
columna col.
MAX(col)
Calcula el valor mximo de
select max(salario),oficio from emp
todos los valores de la
group by oficio;
columna col.
from
MIN(col)
Calcula el valor mnimo de
select min(salario),oficio from emp
todos los valores de la
group by oficio;
columna col.
SUM(col)
Calcula la suma de los valores select sum(salario),
de la columna col.
emp group by oficio;
STDDEV(col)
Calcula la desviacin tpica de
los
valores
de
la select stddev(salario), oficio from
columna col sin
tener
en emp group by oficio;
cuenta los valores nulos.
VARIANCE(col)
Calcula la varianza de los
valores de la columna col sin select variance(salario), oficio from
tener en cuenta los valores emp group by oficio;
nulos.
oficio
from
Hay que tener en cuenta que los valores nulos no participan en el clculo de las
funciones de conjuntos. Estas funciones se pueden utilizar con las
clusulas DISTINCT y ALL. Tambin se pueden utilizar aunque no realicemos
agrupacin alguna en la consulta, considerando a toda la tabla como un grupo.
SQL> select count(*) from emp;
COUNT(*)
---------14
Operaciones matemticas
Desde SQL podemos realizar operaciones a partir de los datos antes de
mostrarlos. Por ejemplo, podemos mostrar cual era la edad de una persona hace
un ao, con
SELECT edad-1 FROM personas;
Los operadores matemticos que podemos emplear son los habituales en
cualquier lenguaje de programacin, ligeramente ampliados: + (suma), - (resta y
negacin), * (multiplicacin), / (divisin) . La divisin calcula el resultado con
decimales; si queremos trabajar con nmeros enteros, tambin tenemos los
operadores DIV (divisin entera) y MOD (resto de la divisin):
SELECT 5/2, 5 div 2, 5 mod 2;
Dara como resultado
+--------+---------+---------+
| 5/2 | 5 div 2 | 5 mod 2 |
+--------+---------+---------+
| 2.5000 |
2|
1|
+--------+---------+---------+
Para que resulte ms legible, se puede aadir un "alias" a cada "nuevo campo"
que se genera al plantear las operaciones matemticas:
SELECT 5/2 divReal, 5 div 2 divEnt, 5 mod 2 resto;
+---------+--------+-------+
| divReal | divEnt | resto |
+---------+--------+-------+
| 2.5000 |
2| 1|
+---------+--------+-------+
Tambin podramos utilizar incluso operaciones a nivel de bits, como las del
lenguaje C (>> para desplazar los bits varias posiciones a la derecha, << para
desplazar a la izquierda, | para una suma lgica bit a bit, & para un producto lgico
bit a bit y ^ para una operacin XOR):
SELECT 25 >> 1, 25 << 1, 25 | 10, 25 & 10, 25 ^ 10;
que dara
+---------+---------+---------+---------+---------+
| 25 >> 1 | 25 << 1 | 25 | 10 | 25 & 10 | 25 ^ 10 |
+---------+---------+---------+---------+---------+
|
12 |
50 |
27 |
8|
19 |
+---------+---------+---------+---------+---------+
6.2 Funciones de agregacin
Tambin podemos aplicar ciertas funciones matemticas a todo un conjunto de
datos de una tabla. Por ejemplo, podemos saber cual es la edad ms baja de
entre las personas que tenemos en nuestra base de datos, haramos:
SELECT min(edad) FROM personas;
Las funciones de agregacin ms habituales son:
min = mnimo valor
max = mximo valor
sum = suma de los valores
avg = media de los valores
count = cantidad de valores
La forma ms habitual de usar "count" es pidiendo con "count(*)" que se nos
muestren todos los datos que cumplen una condicin. Por ejemplo, podramos
saber cuantas personas tienen una direccin que comience por la letra "s", as:
SELECT count(*) FROM personas WHERE direccion LIKE 's%';
OPERACIONES DE LOGICA EN SQL
Los operadores lgicos comprueban la veracidad de alguna condicin. stos,
como los operadores de comparacin, devuelven el tipo de datos Boolean con el
valor TRUE, FALSE o UNKNOWN.
operador
Significado
ALL
TRUE si el conjunto completo de comparaciones es TRUE.
AND
TRUE si ambas expresiones booleanas son TRUE.
ANY
TRUE si cualquier miembro del conjunto de comparaciones es
TRUE.
BETWEE
N
TRUE si el operando est dentro de un intervalo.
EXISTS
TRUE si una subconsulta contiene cualquiera de las filas.
IN
TRUE si el operando es igual a uno de la lista de expresiones.
LIKE
TRUE si el operando coincide con un patrn.
NOT
Invierte el valor de cualquier otro operador booleano.
OR
TRUE si cualquiera de las dos expresiones booleanas es TRUE.
SOME
TRUE si alguna de las comparaciones de un conjunto es TRUE.
OPERADORES DE COMPARACION EN SQL.
Los
operadores
de
comparacin
se
definen
para
los
tipos
siguientes: Byte, Int32, Int16, Int64, Double, Single, Decimal, String,DateTime,
Date, Time y DateTimeOffset. La promocin de tipos implcita se produce para
los operandos antes de que se aplique el operador de comparacin. Los
operadores de comparacin siempre dan como resultados valores booleanos.
Cuando al menos uno de los operandos es null, el resultado es null.
La igualdad y desigualdad se definen para cualquier tipo de objeto que tenga
identidad, como el tipo Boolean. Los objetos no primitivos con identidad se
consideran iguales si comparten la misma identidad.
En la siguiente tabla se presentan los operadores de comparacin de Entity SQL.
Operador
Descripcin
= (Igual a) (Entity
SQL)
Compara la igualdad de dos expresiones.
> (Mayor que)
(Entity SQL)
Compara dos expresiones para determinar si la expresin
de la izquierda tiene un valor mayor que el de la expresin
de la derecha.
>= (Mayor o igual
que) (Entity SQL)
Compara dos expresiones para determinar si la expresin
de la izquierda tiene un valor igual o mayor que el de la
expresin de la derecha.
IS [NOT] NULL
(Entity SQL)
Determina si una expresin de consulta es nula.
< (Menor que)
Compara dos expresiones para determinar si la expresin
(Entity SQL)
de la izquierda tiene un valor menor que el de la expresin
de la derecha.
<= (Menor o igual
que) (Entity SQL)
Compara dos expresiones para determinar si la expresin
de la izquierda tiene un valor igual o menor que el de la
derecha.
[NOT] BETWEEN
(Entity SQL)
Determina si el resultado de una expresin es un valor
incluido en un intervalo especificado.
= (No es igual a)
(Entity SQL)
Compara dos expresiones para determinar si la expresin
de la izquierda no es igual que la expresin de la derecha.
<> (No es igual a)
(Entity SQL)
Compara dos expresiones para determinar si la expresin
de la izquierda no es igual que la expresin de la derecha.
[NOT] LIKE (Entity
SQL)
Determina si una cadena de caracteres especfica
coincide con un patrn especificado.
Ms sobre comparaciones de cadenas
Las cadenas se comparan carcter por carcter (excepto en el caso de
bsquedas por palabras claves, ver a continuacin).
Cuando se comparan cadenas, no se tienen en cuenta las maysculas y
minsculas; por lo tanto, "a"="A" devuelve TRUE. Para saber si los caracteres
estn en maysculas o minsculas, compare sus cdigos de caracteres. Por
ejemplo, la siguiente expresin devuelve FALSE:
Character code("A") = Character code("a") ` porque 65 no es igual a 97
Cuando se comparan cadenas, los caracteres diacrticos se comparan utilizando
la tabla de comparacin de caracteres del sistema de su ordenador. Por ejemplo,
las siguientes expresiones devuelven TRUE:
"n" = ""
"n" = ""
"A"=""
` etc.
A diferencia de otras comparaciones de cadena, las bsquedas por palabras
claves buscan "palabras" en "textos": las palabras se evalan global e
individualmente. El operador % siempre devuelve False si la bsqueda concierne
varias palabras o slo parte de una palabra (por ejemplo, una silaba). Las
"palabras" son cadenas de caracteres rodeadas por "separadores," que son los
espacios y los caracteres de puntuacin. Los nmeros pueden buscarse porque
son evaluados como cadenas; sin embargo, los separadores decimales ( . , ) y
otros smbolos (moneda, temperatura, etc.) se ignorarn.
"Alpha Bravo Charlie" % "Bravo" ` DevuelveTrue
"Alpha Bravo Charlie" % "vo" ` DevuelveFalse
"Alpha Bravo Charlie" % "Alpha Bravo" ` Devuelve False
"Alpha,Bravo,Charlie" % "Alpha" ` DevuelveTrue
"Software y ordenadores" % "comput@" ` DevuelveTrue
El carcter arroba (@) puede utilizarse en toda comparacin de cadenas en
reemplazo de uno o varios caracteres. Por ejemplo, la siguiente expresin es
TRUE:
"abcdefghij" = "abc@"
El carcter arroba debe utilizarse en el segundo operando (la cadena a la derecha
del operador) para igualar todo nmero de caracteres. La siguiente expresin es
FALSE, porque la arroba @ se considera como un solo carcter en el primer
operando:
"abc@" = "abcdefghij"
La arroba significa "uno o ms caracteres o nada". Las siguientes expresiones son
TRUE:
"abcdefghij" = "abcdefghij@"
"abcdefghij" = "@abcdefghij"
"abcdefghij" = "abcd@efghij"
"abcdefghij" = "@abcdefghij@"
"abcdefghij" = "@abcde@fghij@"
Por otra parte, en cualquier caso, una comparacin de cadenas con dos arrobas
consecutivas siempre devolver FALSE. La siguiente expresin es FALSE:
"abcdefghij" = "abc@@fg"
Cuando el operador de comparacin es o contiene un smbolo < o >, slo soporta
la comparacin con un solo carcter comodn al final del operando:
"abcd" <= "abc@" `Comparacin vlida
"abcd" <= "abc@ef" `Comparacin no vlida
Consejo
Si quiere ejecutar comparaciones o bsquedas utilizando @ como un carcter (y
no como un comodn), tiene dos opciones:
Utilice la instruccin Character code (At sign).
Imagine, por ejemplo, que quiere saber si una cadena termina con el carcter @.
la siguiente expresin (si $ vs Valor no est vaca) siempre es TRUE:
($vsValor[[Length($vsValor)]]="@")
La siguiente expresin se evaluar correctamente:
(Character code($vsValor[[Length($vsValor)]])#64)
Utilice la opcin "Considerar @ como un carcter en bsquedas y ordenaciones",
accesible utilizando la caja de dilogo de Preferencias.
Esta opcin le permite definir cmo se interpreta el carcter @ cuando se incluye
en una cadena de caracteres. Como tal, puede influir en cmo los operadores de
comparacin se utilizan en Query u Order By. Para mayor informacin, consulte el
Manual de Diseo.