Restringir y ordenar datos

Las capacidades esenciales de la instrucción SELECT son Selección, Proyección y Unión. La visualización de columnas específicas de una tabla se conoce como operación de proyecto. Ahora nos centraremos en mostrar filas específicas de salida. Esto se conoce como operación de selección. Se pueden seleccionar filas específicas agregando una cláusula WHERE a una consulta SELECT. De hecho, la cláusula WHERE aparece justo después de la cláusula FROM en la jerarquía de consultas SELECT. La secuencia debe mantenerse en todos los escenarios. Si se viola, Oracle plantea una excepción.

Sintaxis:

SELECT *|{[DISTINCT] column| expression [alias],..}
FROM table
[WHERE condition(s)]

En la sintaxis,

  • DONDE la cláusula es la palabra clave

  • [condición] contiene nombres de columna, expresiones, constantes, literales y un operador de comparación.

Suponga que su gerente está trabajando en el presupuesto trimestral de su organización. Como parte de esta actividad, es necesario producir una lista de los detalles esenciales de cada empleado, pero solo para los empleados a los que se les paga al menos $ 25,000 al año. La consulta SQL a continuación realiza esta tarea. Tenga en cuenta el uso de la cláusula WHERE que se muestra en negrita.

SELECT Employee_ID, Last_Name, First_Name, Salary
FROM employees
WHERE Salary >= 25000;  

EMPLOYEE_ID  LAST_NAME        FIRST_NAME       SALARY
----------   ---------------  ---------------  -----------
88303        Jones            Quincey          $30,550.00
88404        Barlow           William          $27,500.00
88505        Smith            Susan            $32,500.00

3 rows selected

Puntos a tener en cuenta:

  • Una cláusula SELECT solo puede contener una cláusula WHERE. Sin embargo, se pueden agregar varias condiciones de filtro a la cláusula WHERE utilizando el operador AND u OR.

  • Las columnas, literales o expresiones en una cláusula de predicado deben ser de tipos de datos similares o interconvertibles.

  • El alias de columna no se puede utilizar en la cláusula WHERE.

  • Los literales de caracteres deben encerrarse entre comillas simples y distinguen entre mayúsculas y minúsculas.

  • Los literales de fecha deben estar entre comillas simples y son sensibles al formato. El formato predeterminado esDD-MON-RR.

Operadores de comparación

Los operadores de comparación se utilizan en predicados para comparar un término u operando con otro término. SQL ofrece un conjunto completo de operadores de igualdad, desigualdad y diversos. Se pueden usar dependiendo de la lógica de condición de filtro y datos en la consulta SELECT. Cuando usa operadores de comparación en una cláusula WHERE, los argumentos (objetos o valores que está comparando) en ambos lados del operador deben ser un nombre de columna o un valor específico. Si se usa un valor específico, entonces el valor debe ser un valor numérico o una cadena literal. Si el valor es una cadena de caracteres o una fecha, debe ingresar el valor entre comillas simples ('').

Oracle tiene nueve operadores de comparación para usar en condiciones de igualdad o desigualdad.

Operator  Meaning
=         equal to 
<         less than
>         greater than
>=        greater than or equal to
<=        less than or equal to
!=        not equal to
<>        not equal to

Otros operadores de Oracle son BETWEEN..AND, IN, LIKE y IS NULL.

El operador BETWEEN

El operador BETWEEN se puede utilizar para comparar un valor de columna dentro de un rango definido. El rango especificado debe tener un límite superior e inferior donde ambos estén incluidos durante la comparación. Su uso es similar al operador de desigualdad compuesto (<= y> =). Se puede utilizar con valores numéricos, de caracteres y de tipo de fecha.

Por ejemplo, la condición WHERE SALARY BETWEEN 1500 AND 2500 en una consulta SELECT, se listarán aquellos empleados cuyo salario esté entre 1500 y 2500.

El operador IN

El operador IN se utiliza para probar un valor de columna en un conjunto de valores dado. Si la columna se puede equiparar a cualquiera de los valores del conjunto dado, la condición se valida. La condición definida mediante el operador IN también se conoce como condición de pertenencia.

Por ejemplo, la condición WHERE SALARY IN (1500, 3000, 2500) en una consulta SELECT restringirá las filas donde el salario es 1500, 3000 o 2500.

El operador LIKE

El operador LIKE se utiliza para la búsqueda de coincidencias de patrones y comodines en una consulta SELECT. Si se desconoce una parte del valor de la columna, se puede utilizar un comodín para sustituir la parte desconocida. Utiliza operadores comodín para construir la cadena de búsqueda, por lo que la búsqueda se conoce como búsqueda comodín. Estos dos operadores son percentil ('%') y subrayado ('_'). El subrayado ('_') sustituye a un solo carácter, mientras que el percentil ('%') sustituye a más de un carácter. También se pueden usar en combinación.

Por ejemplo, la siguiente consulta SELECT enumera los nombres de los empleados cuyo apellido comienza con 'SA'.

SELECT first_name
FROM employees
WHERE last_name LIKE 'SA%';

ES (NO) Condiciones NULAS

Cabe señalar que los valores NULL no se pueden probar mediante el operador de igualdad. Esto se debe a que los valores NULL son desconocidos y no están asignados, mientras que el operador de igualdad prueba un valor definido. El operador IS NULL sirve como operador de igualdad para comprobar los valores NULL de una columna.

Por ejemplo, la condición WHERE COMMISSION_PCT IS NULL en una consulta SELECT enumerará los empleados que no tienen porcentaje de comisión.

Operadores logicos

Se pueden agregar varias condiciones de filtro al predicado de la cláusula WHERE. Se puede combinar más de una condición mediante los operadores lógicos Y, O y NO.

  • Y: une dos o más condiciones y devuelve resultados solo cuando todas las condiciones son verdaderas.

  • OR: une dos o más condiciones y devuelve resultados cuando alguna de las condiciones es verdadera.

  • NOT: niega la expresión que le sigue.

El operador AND vincula dos o más condiciones en una cláusula WHERE y devuelve TRUE solo si todas las condiciones son verdaderas. Suponga que un gerente necesita una lista de empleadas. Además, la lista solo debe incluir empleados con apellidos que comiencen con la letra "E" o que vengan después en el alfabeto. Además, la tabla de resultados debe ordenarse por apellido del empleado. Hay que cumplir dos condiciones sencillas. La cláusula WHERE puede escribirse como: WHERE Gender = 'F' AND last_name> 'E'.

SELECT last_name "Last Name", first_name "First Name", Gender "Gender"
FROM employees
WHERE Gender = 'F' AND last_name > 'E'
ORDER BY last_name;

El operador OR vincula más de una condición en una cláusula WHERE y devuelve TRUE si cualquiera de las condiciones devuelve true. Suponga que los requisitos de su gerente organizacional cambian un poco. Se necesita otra lista de empleados, pero en esta lista los empleados deben: (1) ser mujeres o (2) tener un apellido que comience con la letra "T" o una letra que venga más adelante en el alfabeto. La tabla de resultados debe estar ordenada por apellido del empleado. En esta situación, se puede cumplir cualquiera de las dos condiciones para satisfacer la consulta. Las empleadas deben figurar junto con las empleadas que tengan un nombre que satisfaga la segunda condición.

El operador NOT se utiliza para negar una expresión o conición.

La Cláusula ORDER BY

Cuando muestra solo unas pocas filas de datos, puede que no sea necesario ordenar la salida; sin embargo, cuando muestra numerosas filas, los administradores pueden recibir ayuda en la toma de decisiones ordenando la información. La salida de una instrucción SELECT se puede ordenar mediante la cláusula opcional ORDER BY. Cuando utiliza la cláusula ORDER BY, el nombre de la columna en la que realiza el pedido también debe ser un nombre de columna que se especifica en la cláusula SELECT.

La siguiente consulta SQL utiliza una cláusula ORDER BY para ordenar la tabla de resultados por la columna last_name en orden ascendente. El orden ascendente es el orden de clasificación predeterminado.

SELECT last_name, first_name
FROM employees
WHERE last_name >= 'J'
ORDER BY last_name;

last_name        first_name
---------------  ---------------
Jones            Quincey
Klepper          Robert
Quattromani      Toni
Schultheis       Robert

La clasificación también puede basarse en valores numéricos y de fecha. La clasificación también se puede realizar en función de varias columnas.

De forma predeterminada, la cláusula ORDER BY ordenará las filas de salida en la tabla de resultados en orden ascendente. Podemos usar la palabra clave DESC (abreviatura de descendente) para habilitar la ordenación descendente. El valor predeterminado alternativo es ASC, que ordena en orden ascendente, pero la palabra clave ASC rara vez se usa ya que es el predeterminado. Cuando se utiliza la palabra clave opcional ASC o DESC, debe seguir el nombre de la columna en la que está ordenando en la cláusula WHERE.

Positional Sorting - La posición numérica de la columna en la lista de columnas seleccionada se puede dar en la cláusula ORDER BY, en lugar del nombre de la columna. Se utiliza principalmente en consultas UNION (discutidas más adelante). La Consulta ordena el resultado establecido por salario, ya que aparece en segundo lugar en la lista de columnas.

SELECT  first_name, salary
FROM employees
ORDER BY 2;

Variables de sustitución

Cuando una consulta SQL tiene que ejecutarse más de una vez para los diferentes conjuntos de entradas, se pueden usar variables de sustitución. Las variables de sustitución se pueden utilizar para solicitar entradas del usuario antes de la ejecución de la consulta. Se utilizan ampliamente en la generación de informes basados ​​en consultas que toman el rango de datos de los usuarios como entrada para el filtrado condicional y la visualización de datos. Las variables de sustitución tienen el prefijo de un símbolo de ampersand (&) para almacenar valores temporalmente. Por ejemplo,

SELECT EMPLOYEE_ID, LAST_NAME, SALARY
FROM employees
WHERE LAST_NAME = &last_name
OR EMPLOYEE_ID = &EMPNO;

Cuando se ejecuta la consulta SELECT anterior, Oracle identifica el '&' como variable de sustitución. Solicita al usuario que ingrese un valor para 'apellido' y 'EMPNO' como se muestra a continuación.

Enter value for last_name:
Enter value for empno:

Una vez que el usuario proporciona entradas para ambas variables, los valores se sustituyen, la consulta se verifica y ejecuta.

Puntos a tener en cuenta:

  • Si la variable está destinada a sustituir un carácter o un valor de fecha, el literal debe estar entre comillas simples. Una técnica útil es encerrar la variable de sustitución y comercial entre comillas simples cuando se trata de valores de caracteres y fechas.

  • Tanto SQL Developer como SQL * Plus admiten las variables de sustitución y los comandos DEFINE / UNDEFINE. Aunque SQL Developer o SQL * Plus no admiten comprobaciones de validación (excepto para el tipo de datos) en la entrada del usuario.

  • Puede utilizar las variables de sustitución no solo en la cláusula WHERE de una instrucción SQL, sino también como sustitución de nombres de columnas, expresiones o texto.

Uso de la variable de sustitución de doble amperio

Cuando se usa la misma variable de sustitución en más de un lugar, entonces, para evitar volver a ingresar los mismos datos, usamos sustitución doble y comercial. En tales casos, el valor de la variable de sustitución, una vez ingresado, sería sustituido en todos los instantes de uso.

SELECT first_name, HIRE_DATE, SEPARATION_DATE
FROM employees
WHERE HIRE_DATE LIKE '%&DT%' AND SEPARATION_DATE '%&&DT%'

Tenga en cuenta que el mismo valor de & DT se sustituye dos veces en la consulta anterior. Entonces, su valor una vez dado por el usuario será sustituido en dos lugares.

Los comandos DEFINE y VERIFY

El establecimiento de la definición de variables en una sesión se establece mediante la función DEFINE de SQL * Plus. Las variables se pueden definir en la sesión, para evitar paradas durante la ejecución de la consulta. Oracle lee la misma variable siempre que se encuentra en una consulta SQL. Está en estado ON por defecto. Con la ayuda de la cláusula DEFINE, se puede declarar una variable en la línea de comando antes de la ejecución de la consulta comoDEFINE variable=value;.

El comando Verify verifica la sustitución anterior que se muestra como declaración VIEJA y NUEVA. Está APAGADO por defecto y se puede configurar en ENCENDIDO usando el comando SET.

SQL> SET DEFINE ON
SQL> SET VERIFY ON
SQL> DEFINE NAME = MARTIN'
SQL> SELECT first_name, SALARY 
FROM employees
WHERE first_name = '&NAME';
OLD   1: select first_name, sal from employee where first_name = '&first_name'
new   1: select first_name, sal from employee where first_name = 'MARTIN'

first_name     SALARY
-------        -------
MARTIN         5000