Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Expresiones booleanas:Por lo tanto diremos que una expresión booleana sólo tiene dos
posibles resultados. Ejemplo: (4 > 3) = cierto, (3 = 12) = falso El resultado es de tipo
booleano no de tipo entero INT.
Operadores:
Algunos de los operadores que nos permiten construir expresiones booleanas son:
"A > B" devuelve cierto si A es estrictamente mayor que B, de lo contrario falso.
"A < B" devuelve cierto si A es estrictamente menor que B, de lo contrario devuelve f also.
"A = B" devuelve cierto si A es igual a B, de lo contrario devuelve falso.
"A >= B" devuelve cierto si A es mayor o igual a B, de lo contrario devuelve falso.
"A <= B" devuelve cierto si A es menor o igual a B, de lo contrario devuelve falso.
"A != B" devuelve cierto si A es distinto a B, de lo contrario devuelve falso.
Ejemplos:
select NOMBRE
from PERSONAS
where (RUBIA = 'S') and (ALTA = 'S')
select NOMBRE
from PERSONAS
where (RUBIA = 'S') and (ALTA = 'N') and (GAFAS='S')
OR: Con el operador OR basta que uno de los dos operandos sea cierto para que el resultado
sea cierto:
Ejemplos:
select *
from EMPLEADOS
where ID_EMPLEADO = 1 or ID_EMPLEADO = 2 or ID_EMPLEADO = 4
select *
from EMPLEADOS
where ID_EMPLEADO in (1,2,4)
NOT:
Ejemplos:
select NOMBRE
from PERSONAS
where (RUBIA = 'S') and not (ALTA = 'S') and (GAFAS='S')
Miremos cuando se niega toda la afirmación nos mostraria todos menos Carmen, por que se
nego toda la información, para eso colocamos toda la afirmacion entre parentesis y la
negamos.
select NOMBRE
from PERSONAS
where not ((RUBIA = 'S') and not(ALTA = 'S') and (GAFAS= 'S'))
Otra manera de utilizar el NOT es con el IN, buscariamos los que no incluyan en la
condicion booleana:
select *
from EMPLEADOS
where ID_EMPLEADO not in (1,2,4)
Uso del parentesis:
Los operadores AND y OR tienen la misma prioridad de modo que se evalúa la expresión
por orden de aparición:
No es lo mismo: "RUBIA and ALTA or GAFAS" = "(RUBIA and ALTA) or GAFAS" que,
"RUBIA and (ALTA or GAFAS)". En primer caso estamos diciendo: "que sea rubia y alta, o
bien lleve gafas", y en el segundo "que sea rubia y, sea alta o lleve gafas".
select NOMBRE
from PERSONAS
where RUBIA = 'S' and ALTA = 'S' or GAFAS= 'S'
select NOMBRE
from PERSONAS
where RUBIA = 'S' and (ALTA = 'S' or GAFAS= 'S')
Group By:
SELECT C55NRE,COUNT(*)
FROM SIIC55
WHERE C55NRE = 'PRECODE1' AND C55SIS =3
GROUP BY C55NRE
La palabra clave DISTINCT:
Permite eliminar elementos iguales, es decir distinque los elementos sin mostar ninguno
igual.
select SEXO
from EMPLEADOS
¿cuantos perros de cada sexo hay en total actualmente en el centro?
Pongamos otro ejemplo, pero esta vez planteémoslo al revés: ¿Qué devuelve la
siguiente consulta SQL?:
Construya una consulta que devuelva el salario medio, máximo y mínimo de los
empleados agrupado por sexo.
Construya una consulta que devuelva cuantos perros y cuantos gatos han pasado
por el centro y ya no están.
Con ayuda del filtro DISTINCT, construya una consulta que devuelva las
diferentes especies que hay actualmente en cada jaula o ubicación del centro.
Puede verse como un filtro en segunda instancia, una vez el motor a resuelto la consulta y
siempre ajeno a la tabla de datos.En realidad este recurso se usa casi exclusivamente para
establecer condiciones sobre las columnas de datos totalizados, puesto que los demás
valores, los que están en la tabla, los debemos filtrar en la clausula WHERE.
A fin de ser prácticos consideraremos la clausula HAVING como una cláusula WHERE
para los cálculos de totalización. De modo que lo que filtraremos aquí serán cosa del
estilo: que la suma sea inferior a..., que la media sea igual a..., que el máximo sea
superior a...., o como en el ejemplo: que el recuento de registros sea superior a dos. Siempre
sobre cálculos de totalización. Por lo tanto si no hay cláusula GROUP BY, tampoco
habrá cláusula HAVING.
Una vez el motor SQL a recorrido toda la tabla y ha finalizado el cálculo, de las filas
resultantes ocultará las que no satisfacen la cláusula HAVING, por lo que en primer lugar:
no se ahorra hacer el cálculo para las filas de resultados no mostradas, de lo contrario no
podría saber si cumplen o no la condición de la cláusula HAVING, y en segundo lugar, este
filtro se aplica en la fase final del proceso que ejecuta el motor SQL, y siempre sobre las
filas de resultados escrutando los datos totalizados (COUNT, SUM, MAX, ...), limitándose a
mostrar o no una fila de resultado en función de las condiciones establecidas en dicha
cláusula.
La siguiente consulta SQL cuenta los ejemplares de alta de la ubicaciones E02 y E03.
Pero esta otra consulta SQL cuenta los ejemplares de alta en todas las ubicación y
finalmente oculta los que la ubicación no es E02 o E03. Por lo que este el método no
es eficiente.
Y llegamos a la última cláusula de una consulta SQL: ORDER BY, que permite ordenar las
filas de resultado por una o más columnas. Esta cláusula no se presenta en última
instancia por casualidad, sino por que siempre irá al final de una consulta y el motor SQL
también será la última cosa que haga, a efectos lógicos, antes de devolver el resultado.
select NOMBRE,APELLIDOS,SALARIO
from EMPLEADOS
order by SALARIO
select NOMBRE,APELLIDOS,SALARIO
from EMPLEADOS
order by SALARIO desc
select *
from MASCOTAS
where ESPECIE = 'P'
order by ESTADO desc, NOMBRE asc
Otra forma de mostrar la columna a establecer la ordenación:
Lo que debe quedar claro es que la ordenación, a efectos lógicos, se realiza siempre al
final de todo, sobre las filas de resultado, al margen de la tabla, y siempre lo hará así por
muy extensa y compleja que sea una consulta. La ordenación es lo último de lo último que
realiza el motor SQL. Y como la ordenación se realiza sobre las filas de resultado, existen
otras formas de indicar que columnas van a establecer la ordenación. Podemos por ejemplo
hacer referencia a la columna por el orden que ocupa en la cláusula SELECT, por ejemplo:
En esta consulta estamos indicando que ordene por el tercer campo de la clausula SELECT:
Tambien para ordenar se puede indicar indistintamente el alias con el que se ha rebautizado
la columna, o el campo de tabla tenga o no tenga alias.
Obtenga una lista de las personas de la tabla PERSONAS, donde primero aparezcan
las rubias, después las altas, y finalmente las que llevan gafas. De manera que la
primera persona de la lista, si la hay, será rubia alta y sin gafas, y la última, si la hay,
no será rubia ni alta y llevará gafas.
select *
from PERSONAS
order by RUBIA desc, ALTA desc, GAFAS
Valor like:
Este operador se aplica a datos de tipo cadena y se usa para buscar registros, es capaz de
hallar coincidencias dentro de una cadena bajo un patrón dado, por ejemplo:
select *
from EMPLEADOS
where APELLIDOS like 'R%'
select *
from EMPLEADOS
where APELLIDOS like '%N'
select *
from EMPLEADOS
where APELLIDOS like '%AR%'
Valor Null:
Cuando se diseña una tabla en la base de datos, una de las propiedades que se establece para
los campos de la tabla es si pueden contener o no un valor nulo.
select *
from VEHICULOS
where ULTI_ITV is null
select *
from VEHICULOS
where ULTI_ITV is not null
select *
from VEHICULOS
where ULTI_ITV between '20080101' and '20081231'
select *
from VEHICULOS
where not (ULTI_ITV between '20080101' and '20081231')
select *
from VEHICULOS
where not (ULTI_ITV between '20080101' and '20081231') or ULTI_ITV is null
"En este caso esta arrojando la sumatoria de los valores que no son de tipo null, es
decir que no esten vacios"
RESUMEN
Sintaxis:
select CAMPO_S1, ... , CAMPO_SN
from TABLA_1, ... , TABLA_N
where CONDICIONES_WHERE
group by CAMPO_G1, ... , CAMPO_GN
having CONDICIONES_HAVING
order by CAMPO_O1, ... , CAMPO_ON
En la cláusula SELECT se establecen las lista de campos que mostrará el resultado de la consulta,
poniendo DISTINCT precediendo a la lista de campos se eliminan posibles registros duplicados que
el resultado pueda devolver. Así mismo podemos rebautizar las columnas de resultado asignando un
alias a cada campo.
En la cláusula FROM se establece la fuente de los datos, las tablas que intervienen en la consulta.
En la cláusula GROUP BY se establece los grupos de datos por los que se quiere obtener totales, no
tendría sentido usar esta cláusula si no se indican cálculos de totalización (SUM , MAX, AVG , ...)
en la cláusula SELECT.