Introducción
Uso del operador LIKE para buscar similitudes en los valores de una columna
Como buscar valores nulos (NULL) y no nulos (NOT NULL) en una tabla.
Una consulta contesta una o mas preguntas sobre la data que reside en una base de datos.
Para que el DBMS pueda interpretar una pregunta, es necesario utilizar un lenguaje
estructurado como SQL (en el caso de este tutor usamos SQL*Plus de Oracle).
Debemos conocer la naturaleza de la data; el nombre de las tablas y columnas que
se encuentran almacenadas en la Base de Datos. Esto es necesario para poder solicitar
datos específicos sobre la data que reside en la B.D.
Nota
Fíjese en el orden que aparecen las columnas en la salida. Es el mismo orden en que se
nombraron las columnas en las instrucciones entradas despues del SELECT.
Capitulo 3: Consultas Para Una Tabla 4
Condiciónes Simples:
(Operadores Comparativos)
Luego de usar el SELECT y el FROM para definir las columnas dentro de una
tabla, puede usar la clausula WHERE para condicionar la consulta y la selección de data.
Esto tambien se conoce como restringir la salida a cierta condición específica. En la
Figura 3.2 podemos ver un ejemplo de como la claúsula WHERE restringe la salida a
unos datos específicos. Solo se verán en la salida los datos que estan relacionados al
Departamento numero 108 (Deptno = '108').
Nota
Fíjese en la condición que se propone despues del WHERE y el nombre de la columna
donde desea que se inicie la consulta. El valor que selecciona debe estar entre comillas
sencillas para que SQL*Plus pueda interpretar que usted quiere recuperar exclusivamente
las filas donde se encuentre ese número en la columna de Deptno de la tabla. (el número
108 en la columna de Deptno). Luego la consulta mostrará las columnas de esas filas que
usted especificó despues del SELECT.
En caso que deseemos recuperar un campo que sea texto, debe estar escrito
idénticamente como aparece en la columna y entre comillas sencillas:
El operador comparativo
restringe la salida al
cumplirse la condición
Capitulo 3: Consultas Para Una Tabla 5
Operador Descripción
Comparativo
= “Es igual a”
< “Es menor que”
> “Es mayor que”
<= “Es menor o igual a”
>= “Es mayor o igual a”
<> “no es igual a”
!= “no es igual a”
Condiciones Compuestas
Las condiciones compuestas conectan dos ó más condiciones simples utilizando
los operadores lógicos AND, OR y NOT. La siguiente tabla describe los operadores
lógicos:
Operador Descripción
AND Todas las condiciones simples deben ser
ciertas para cumplir con esta condición
compuesta.
OR Cuando las condiciones simples estan
conectadas por un operador OR, la
condición es cierta si se cumple alguna de
las condiciones simples
NOT Cuando la condición simple es precedida
de la condicón not se invierte la veracidad
de la condición original
En esta figuraFigura
podemos notarOperador
3.6 Uso que soloLógico
una filaAND
de la tabla de Employee cumple
con la condición AND. En este caso hay solo un empleado que gana sobre $30,000 en el
Departamento 108. Encerrar las condiciones entre parentesis facilita la comprensión de la
condición.
El ejemplo que utiliza el Operador NOT muestra como podemos selccionar data
dentro de una tabla que no cumple con una condición expuesta (Figura 3.7). En este caso
se seleccionaron todos los records dentro de la tabla Employee que no tienen un salario
menor que $38,000. Por esta razón se listaron todos los empleados que tienen un salario
mayor ó igual que $38,000, que sería lo contrario de la condición simple expuesta entre
paréntesis.
Operador BETWEEN
Nota
El operador BETWEEN incluye los valores que estan especificados en la condición. Por
esta razón el ejemplo incluye todos los salarios desde $30,000 hasta $40,000.
Para poder mostrar un ejemplo de los operadores es necesario añadir dos columnas a la
tabla de Workon; una es RATE, que muestra el salario por hora del empleado en cada
proyecto y la otra columna es PROJ_SHARES que muestra la aportación del empleado
para obtener acciones de cada proyecto. Esto se le descuenta a cada empleado al calcular
las horas trabajadas por projecto. (Este descuento es por proyecto y es una cantidad fija).
Utilizamos ALTER TABLE para alterar la estructura de las tablas. Esta clausula se verá
detalladamente en el capítulo que trata con la actualización de la data en el Capítulo 5.
Como se ve en el ejemplo, la clausula tiene que ir seguida del comando de ADD que se
utiliza para especificar el nombre de la columna que se le va a añadir a la tabla. Luego de
especificar el nombre de la columna, se establece el tipo de data que va a contener. En
este caso las dos columnas son numericas. Al designar el largo del campo especificamos
'NUMBER(3,2)'. Esto significa que de los tres espacios que reservamos para el campo
númerico, dos son decimales. Aprenderemos a modificar el tipo de data.. Esto debe
hacerse antes de entrar la data. Tendremos que usar el ALTER TABLE con MODIFY en
lugar de ADD para ampliar el campo a cinco espacios, que incluyen tres espacios a la
izquierda del punto y dos espacios a la derecha del punto decimal (5,2).
Los siguientes dos ejemplos muestran como podemos añadir las dos columnas y luego
modificar la estructura de ellas para acomodarlas a las necesidades o los requerimientos
del contenido de las tablas.
Capitulo 3: Consultas Para Una Tabla 12
Se especifica el tipo
de data y el tamaño
luego de nombrar la
columna con ADD
Ahora podemos añadir data a las columnas para poder usar los operadores
aritméticos entre columnas. Para añadir datos a las columnas creadas usamos los
comandos de UPDATE y SET para insertar valores iniciales. Iniciamos las columnas a un
valor inicial para facilitar el ejercicio. La columna de RATE se iniciará a $11.00 la hora y
el de PROJ_SHARES se mantendrá en $10.00 que es la aportación fija para comprar
acciones del projecto.
Se añaden valores
iniciales a la
columna
Se de RATE.
le añaden
valores iniciales a
la columna de
RATE
Se añaden valores
iniciales a la
columna de
PROJ_SHARES
update workon
set rate = '6.00'
where essn = '123-45-6789';
update workon
set rate = '8.00'
where essn = '222-33-6666';
update workon
set rate = '10.00'
where essn = '321-52-0156';
update workon
set rate = '12.00'
where essn = '333-44-5555';
Capitulo 3: Consultas Para Una Tabla 15
update workon
set rate = '9.00'
where essn = '453-45-3453';
update workon
set rate = '7.00'
where essn = '666-88-4444';
Ya se han hecho los arreglos dentro de las columnas creadas, adjudicándole a cada
columna y fila el valor que le corresponde. Hemos modificado una tabla , creando dos
columnas y llenando sus valores sin alterar los valores de las demas columnas!!
Se modifican los
valores iniciales de
la columna de RATE
usando el Seguro
Social del empleado
como la condición
impuesta para
cambiar los valores
Figura 3.15 Uso UPDATE, SET, WHERE para cambiar valores en una columna
Figura 3.16 Tabla de Workon con valores en columnas creadas con ALTER TABLE
Usaremos las columnas de RATE y HOURS para calcular el sueldo bruto del
empleado con seguro social número 123-45-6789. El resultado de las columnas se
mostrará en una columna que llamaremos SUELDO_BRUTO. Esta columna no existe en
la tabla de WORKON, solo es creada con el propósito de guardar un resultado temporero
que responde a la consulta.
Nota:
El nombre nuevo de la columna se especifica en el SELECT luego de mencionar la
columna o las columnas entre parentesis, dejando uno o más espacios entre medio, sin
coma. En este caso las columnas a multiplicarse van a estar entre parentesis para poder
adjudicarle un nombre nuevo, de lo contrario no eran necesario los parentesis para
calculos aritméticos al menos que sean estrictamente necesarios en la fórmula algebraica.
Capitulo 3: Consultas Para Una Tabla 17
SQL*Plus hace el
computo entre columnas
y luego pone el
resultado en la columna
que nombró
Figura 3.18 Uso del Operador Aritmético de RESTA entre columnas computadas
Operador LIKE
El operador LIKE es usado cuando queremos que las condiciones que se cumplan
incluyan ciertos valores que tienen alguna similitud. Usamos ‘wildcards’ o simbolos
representativos de ‘cualquier valor’ o ‘valores locos’ para representar una colección de
carácteres que no conocemos. Solo debemos especificar los caracteres que queremos
combinar junto con el simbolo de porciento “%”. Pueden usarse en cualquier posición. La
posición determina las filas que el “quierie” va a listar. Si se usa antes o despues de los
caracteres que conocemos, devuelve todos los datos que incluyan esos caracteres
específicos en el lugar especificado.
Cualquier serie de
caracteres despues del
signo de porciento (%)
devolverá todos los
valores que terminen
con estos caracteres sin
importar el largo del
texto
Nota
El valor que se especifica entre comillas sencillas despues del LIKE debe ser escrito en la
misma forma en que aparece en la tabla, ya sea mayúscula o minúscula. En este caso el
nombre de las ciudades esta todo en mayúscula. Por esta razón debemos especificar la
parte que conocemos del valor (los caracteres) en mayúscula.
El subrayado determina
que solo ese caracter
puede tener cualquier
valor en la salida.
Operador IN
Una clausula que utiliza IN provee una forma concisa de frasear ciertas
condiciones . En vez de usar un operador lógico OR para extraer ciertas condiciones
específicas de una tabla, puede usar IN para simplificar y acortar la sintaxis utilizada.
Uso de OR requiere
que la instrucción sea
más larga
Funciones
SQL*Plus utiliza funciones para calcular promedios aritméticos, contar lineas,
sumar valores y encontrar valores mínimos y máximos en una serie de valores o datos de
una tabla.
Función Descripción
AVG Calcula el promedio aritmético de una serie
de datos en una columna
COUNT Cuenta el número de filas
MAX Determina el valor máximo dentro de una
serie de datos en una columna
MIN Determina un valor mínimo dentro de una
serie de datos en una columna
SUM Calcula el total de los valores en una
columna
Función de COUNT
La función de COUNT se utiliza para contar el número de filas que resulta de una
condición especificada en la consulta.
Función de SUM
La función de SUM trabaja solo con columnas de tipo númerico. SUM, seguido del
nombre de una columna entre parentesis, totaliza los valores de toda la columna que se
especifica. Puede usarse en conjunto con count para saber cuántas filas devuelven el total
de la columna que hemos solicitado.
Note que en la Figura 3.28 se suma la cantidad de salarios de todos los empleados
de la tabla de Employees. En la Figura 3.29 se utiliza la función de COUNT para
determinar el número de empleados que tiene la tabla de EMPLOYEE ademas de la suma
de todos los salarios.
Capitulo 3: Consultas Para Una Tabla 26
Las funciones de MIN y MAX se usan para reconocer los valores minimos y
máximos dentro de una serie de datos de una columna en una tabla.
Valores mínimos y
máximos dentro de la
columna de SALARY
Función de AVG.
Nota:
Cuando usted utiliza cualquiera de las funciones excepto COUNT, los valores nulos no
cuentan para computos.
El promedio aritmético de
todos los salarios mayores
de $45,000 es listado en la
salida.
El primer ejemplo utiliza solo el operador de distinct para detallar los diferentes
titulos o puestos que existen en la compañía (tabla EMPLOYEE). El segundo ejemplo
muestra como el COUNT utilizado con el DISTINICT puede contar el número de puestos
diferentes que existen.
Capitulo 3: Consultas Para Una Tabla 29
Sub-Consultas ("Sub-Queries")
Las sub-consultas se utilizan cuando es necesario más de una consulta para
contestar la pregunta y obtener el resultado deseado. La llamada sub-consulta (sub-
querie) se evalua antes de evaluar el primer SELECT de la consulta. Debe residir en la
parte interior de la consulta principal.
Se pueden unir dos o mas queries en una consulta. Se conoce como anidar
consultas (nested queries) dentro de la consulta principal o exterior. Se utilizan parentesis
para enmarcar las consultas anidadas. La primera consulta (el primer SELECT) no
requiere parentesis.
La sub-consulta determina el
promedio de todos los salarios.
La sub-consulta devuelve los salarios de los dos empleados que cumplen con las
condiciones expuestas en la consulta. Sus salarios estan entre el promedio de todos los
salarios y menos de $55000 que habiamos impuesto como limite.
Capitulo 3: Consultas Para Una Tabla 32
Nota:
Fue necesario utilizar el operador AND ya que SQL no accepta en su sintaxis la
comparación SALARY > AVG(SALARY). La consulta para buscar el promedio (AVG)
debe ser aparte ya que devuelve un solo valor y no es una expresión de grupo. Por tal
motivo creamos la sub-consulta para obtener un valor que se puede comparar y poder
utilizarlo con el operador lógico AND.
Note que no hay empleados que tengan un salario que sea idéntico al promedio de
todos los salarios. Por esta razon la consulta devuelve un mensaje de que no encontró
filas al correr las instrucciones (no rows selected).
Cuando agrupamos filas o records, los calculos que se indican en el SELECT son
efectivos para todos los grupos que se especifican usando el GROUP BY. Es importante
mencionar en el SELECT solo las columnas que puedan ser incluidas al agrupar la data.
Si se incluye una columna que no es posible agrupar segun la condición expuesta,
SQL*Plus le dará un error y no procesará la consulta.
Capitulo 3: Consultas Para Una Tabla 34
Uso de GROUP BY
La utilidad del GROUP BY es agrupar la data por una columna específica, incluyendo
todos los records que pertenecen a un mismo grupo dentro de una fila específica.
Para agrupar es muy importante entender la lógica que envuelve resumir data por
filas específicas. Para poder resumir data por alguna columna es necesario utilizar la
función de SUM. De la misma forma, podemos incuir columnas calculadas para luego
agruparlas por grupos de filas.
Note que solo dos empleados trabajaron más de 40 horas. La condicion creada por
el comando de HAVING hizo que la consulta cumpliera con unas restricciones impuestas
a los grupos creados con GROUP BY.
Para contar el número de filas que componen los grupos especificados con
GROUP BY usamos la función de COUNT. La consulta nos devolverá el número de
projectos en que trabajó cada empleado ya que cada empleado tiene una cantidad de
horas trabajadas por proyecto.
Capitulo 3: Consultas Para Una Tabla 36
Solo tenemos que agrupar las horas trabajadas por empleado (seguro social) como
en el ejemplo anterior, y contar esas filas con COUNT.
Figura 3.40 Uso de COUNT, GROUP BY y HAVING CON OPERADOR " >= "
Note que solo los empleados que hayan trabajado en más de 2 proyectos se listan
en la salida. Recuerde que cada horario pertenece a un proyecto diferente para cada
empleado, por esto no es necesario especificar el número de proyecto en la consulta. Solo
queremos saber cuantas instancias de horas trabajadas ha realizado cada empleado dentro
de la tabla de WORKON.
Por el contrario, si lo que deseamos seleccionar son los valores que no son nulos
utilizamos la clausula WHERE <nombre de la columna> IS NOT NULL.
Podemos utilizar la tabla de Employee que tiene un valor nulo para mostrar el uso
de IS NULL .
Capitulo 3: Consultas Para Una Tabla 38
Repaso Capítulo 3
En el Capítulo 3 usted aprendió a utilizar clausulas y operadores necesarios para crear
consultas para una tabla. Algunos ya se habían discutido en el capítulo 2. El siguiente
listado le servirá para repasar las clausulas y los operadores que se presentaron en este
capítulo.
Ejercicios de Repaso:
Consultas para una sola tabla.
1- Prepare una consulta que determine el seguro social y número de proyecto de los
empleados que trabajan en los proyectos 105 y 140.
2- Liste el nombre y numero de seguro social de los empleados cuyo salario este
entre $30,000 y $50,000.
9- Haga el mismo ejercicio ocho pero determine solo el gasto del departamento 105
y 140 en la salida.
10- Haga una consulta que determine el número de proyectos que existen en la tabla
de WORKON. Solo debe especificar la columna de PROJNO y el número de
proyectos donde hubo empleados trabajando. (Haga uso de COUNT y
DISTINCT)