Selección de Datos de la Tabla

Nota: Para realizar los tutoriales y ejemplos en este documento, debe estar conectado a Oracle Database como usuario HR desde SQL Developer. Para obtener instrucciones, consulte "Conexión a Oracle Database como Usuario HR desde SQL Developer".

Acerca de Consultas

Una consulta o sentencia SQL SELECT, selecciona datos de una o más tablas o vistas.

La forma de consulta más sencilla tiene la siguiente sintaxis:

SELECT select_list FROM source_list

El valor select_list especifica las columnas de las que se seleccionarán los datos y el valor source_list especifica las tablas o vistas que tienen esas columnas.

Una consulta anidada en otra sentencia SQL se denomina subconsulta.

En el entorno de SQL*Plus, puede introducir una consulta (o cualquier otra sentencia SQL) después de la petición de datos SQL>.

En el entorno de SQL Developer, puede introducir una consulta (o cualquier otra sentencia SQL) en la hoja de trabajo.

Nota: Cuando se muestra el resultado de una consulta, los registros pueden estar en cualquier orden, a menos que especifique su orden con la cláusula ORDER BY. Para obtener más información, consulte "Ordenación de Datos Seleccionados".

Consulte además:

Ejecución de Consultas en SQL Developer

En esta sección se explica cómo ejecutar consultas en SQL Developer mediante la hoja de trabajo.

Nota: La hoja de trabajo no se limita a las consultas; puede utilizarla para ejecutar cualquier sentencia SQL.

Pasos para ejecutar consultas en SQL Developer:

  1. Si el marco derecho de SQL Developer muestra el panel hr_conn:

    1. Si el subpanel Hoja de trabajo no se muestra, seleccione el separador Hoja de trabajo.

    2. Vaya al paso 4,

  2. Seleccione el icono Hoja de Trabajo SQL.

  3. Si aparece la ventana Seleccionar Conexión:

    1. Si el campo Conexión no tiene el valor hr_conn, seleccione ese valor del menú.

    2. Seleccione Aceptar.

    Se muestra un panel con un separador etiquetado como hr_conn y dos subpanos, Hoja de trabajo y Creador de consultas. En la hoja de trabajo, puede introducir una sentencia SQL.

  4. En la hoja de trabajo, escriba una consulta (una sentencia SELECT).
  5. Haga clic en el icono Ejecutar Sentencia.

    Se ejecutará la consulta. En Worksheet, aparece el panel Query Result, que muestra el resultado de la consulta.

  6. En el separador hr_conn, haga clic en el icono Borrar.

    La consulta desaparece y puede introducir otra sentencia SQL en la hoja de trabajo. Cuando se ejecuta otra sentencia SQL, el resultado aparece en el panel Resultado de la Consulta, sustituyendo el resultado de la sentencia SQL ejecutada anteriormente.

Consulte también: Guía del usuario de Oracle SQL Developer para obtener información sobre el uso de la hoja de trabajo en SQL Developer

Tutorial: Selección de Todas las Columnas de una Tabla

Este tutorial muestra cómo seleccionar todas las columnas de la tabla EMPLOYEES.

Pasos para Seleccionar Todas las Columnas de la Tabla EMPLOYEES:

  1. Si se muestra un panel con el separador hr_conn, selecciónelo. De lo contrario, haga clic en el icono Hoja de Trabajo de SQL, como en "Ejecución de Consultas en SQL Developer".

  2. En la hoja de trabajo, introduzca la siguiente consulta:

    SELECT * FROM EMPLOYEES;

  3. Haga clic en el icono Ejecutar sentencia.

    Se ejecutará la consulta. En Worksheet, aparece el panel Query Result, que muestra todas las columnas de la tabla EMPLOYEES.

Precaución: tenga mucho cuidado con el uso de SELECT * en tablas con columnas que almacenan datos confidenciales, como contraseñas o información de tarjetas de crédito.

Consulte también: "Tutorial: Visualización de Datos y Propiedades de Tabla EMPLOYEES con SQL Developer" para obtener información sobre otra forma de ver los datos de la tabla con SQL Developer

Tutorial: Selección de Columnas Específicas de una Tabla

Este tutorial muestra cómo seleccionar solamente las columnas FIRST_NAME, LAST_NAME y DEPARTMENT_ID de la tabla EMPLOYEES.

Pasos para seleccionar solamente FIRST_NAME, LAST_NAME y DEPARTMENT_ID:

  1. Si se muestra un panel con el separador hr_conn, selecciónelo. De lo contrario, haga clic en el icono SQL Worksheet, como en "Running Queries in SQL Developer".

  2. Si el panel Hoja de Trabajo contiene una consulta, desactive la consulta seleccionando el icono Borrar.

  3. En la hoja de trabajo, introduzca la siguiente consulta:

    SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID FROM EMPLOYEES;

  4. Haga clic en el icono Ejecutar sentencia.

    Se ejecutará la consulta. En la hoja de trabajo, se muestra el panel Resultado de consulta, que muestra los resultados de la consulta, que son similares al texto siguiente.

FIRST_NAME           LAST_NAME                 DEPARTMENT_ID

-------------------- ------------------------- -------------
Donald               OConnell                             50
Douglas              Grant                                50
Jennifer             Whalen                               10
Michael              Hartstein                            20
Pat                  Fay                                  20
Susan                Mavris                               40
Hermann              Baer                                 70
Shelley              Higgins                             110
William              Gietz                               110
Steven               King                                 90
Neena                Kochhar                              90

FIRST_NAME           LAST_NAME                 DEPARTMENT_ID

-------------------- ------------------------- -------------
Lex                  De Haan                              90
...
Kevin                Feeney                               50

107 rows selected.

Visualización de Columnas Seleccionadas en Nuevas Cabeceras

En los resultados de consulta mostrados, las cabeceras de columna predeterminadas son nombres de columna. Para mostrar una columna debajo de una nueva cabecera, especifique la nueva cabecera (alias) inmediatamente después del nombre de columna. El alias cambia el nombre de la columna para la duración de la consulta, pero no cambia su nombre en la base de datos.

La consulta del Ejemplo 2-5 selecciona la misma columna que la consulta en "Tutorial: Selección de Columnas Específicas de una Tabla", pero también especifica los alias para éstas. Debido a que los alias no están entre comillas dobles, se muestran en mayúsculas.

Si especifica los alias de columna entre comillas dobles, se conservan las mayúsculas y minúsculas, y los alias pueden incluir espacios, como en el Ejemplo 2-6.

Consulte también: Referencia de lenguaje SQL de Oracle Database para obtener más información sobre la sentencia SELECT, incluido el alias de columna (c_alias)

Ejemplo 2-5 Visualización de Columnas Seleccionadas en Nuevas Cabeceras

SELECT FIRST_NAME First, LAST_NAME last, DEPARTMENT_ID DepT
FROM EMPLOYEES;

El resultado es similar al siguiente texto:

FIRST                LAST                            DEPT
-------------------- ------------------------- ----------
Donald               OConnell                          50
Douglas              Grant                             50
Jennifer             Whalen                            10
Michael              Hartstein                         20
Pat                  Fay                               20
Susan                Mavris                            40
Hermann              Baer                              70
Shelley              Higgins                          110
William              Gietz                            110
Steven               King                              90
Neena                Kochhar                           90

FIRST                LAST                            DEPT
-------------------- ------------------------- ----------
Lex                  De Haan                           90
...
Kevin                Feeney                            50

107 rows selected.

Ejemplo 2-6 Conservación de Mayúsculas/Minúsculas e Inclusión del Espacio en Alias de Columna

SELECT FIRST_NAME "Given Name", LAST_NAME "Family Name"
FROM EMPLOYEES;

El resultado es similar al siguiente texto:

Given Name           Family Name
-------------------- -------------------------
Donald               OConnell
Douglas              Grant
Jennifer             Whalen
Michael              Hartstein
Pat                  Fay
Susan                Mavris
Hermann              Baer
Shelley              Higgins
William              Gietz
Steven               King
Neena                Kochhar

Given Name           Family Name
-------------------- -------------------------
Lex                  De Haan
...
Kevin                Feeney

107 rows selected.

Selección de Datos que Cumplen las Condiciones Especificadas

Para seleccionar sólo los datos que coinciden con una condición especificada, incluya la cláusula WHERE en la sentencia SELECT.

La condición de la cláusula WHERE puede ser cualquier condición SQL (para obtener información sobre las condiciones SQL, consulte Referencia de lenguaje SQL de Oracle Database).

La consulta del ejemplo 2-7 selecciona datos solo para los empleados del departamento 90.

Para seleccionar datos solo para los empleados de los departamentos 100, 110 y 120, utilice la siguiente cláusula WHERE:

WHERE DEPARTMENT_ID IN (100, 110, 120);

La consulta del Ejemplo 2-8 selecciona datos solo para los empleados cuyos apellidos empiecen por "Ma".

Para seleccionar datos solo para los empleados cuyos apellidos incluyen "ma", utilice la siguiente cláusula WHERE:

WHERE LAST_NAME LIKE '%ma%';

La consulta del Ejemplo 2-9 se prueba para dos condiciones, si el salario es de al menos 11000 como mínimo y si el porcentaje de comisión no es nulo.

Consulte además:

Ejemplo 2-7 Selección de Datos de un Departamento

SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90;

El resultado es similar al siguiente texto:

FIRST_NAME           LAST_NAME                 DEPARTMENT_ID
-------------------- ------------------------- -------------
Steven               King                                 90
Neena                Kochhar                              90
Lex                  De Haan                              90

3 rows selected.

Ejemplo 2-8 Selección de Datos para Apellidos que Empiezan por la misma Subcadena

SELECT FIRST_NAME, LAST_NAME
FROM EMPLOYEES
WHERE LAST_NAME LIKE 'Ma%';

El resultado es similar al siguiente texto:

FIRST_NAME           LAST_NAME
-------------------- -------------------------
Jason                Mallin
Steven               Markle
James                Marlow
Mattea               Marvins
Randall              Matos
Susan                Mavris

6 rows selected.

Ejemplo 2-9 Selección de Datos que Cumplen Dos Condiciones

SELECT FIRST_NAME, LAST_NAME, SALARY, COMMISSION_PCT "%"
FROM EMPLOYEES
WHERE (SALARY >= 11000) AND (COMMISSION_PCT IS NOT NULL);

El resultado es similar al siguiente texto:

FIRST_NAME           LAST_NAME                     SALARY          %
-------------------- ------------------------- ---------- ----------
John                 Russell                        14000         .4
Karen                Partners                       13500         .3
Alberto              Errazuriz                      12000         .3
Gerald               Cambrault                      11000         .3
Lisa                 Ozer                           11500        .25
Ellen                Abel                           11000         .3

6 rows selected.

Ordenación de Datos Seleccionados

Cuando se muestra el resultado de la consulta, los registros pueden estar en cualquier orden, a menos que especifique su orden con la cláusula ORDER BY.

Los resultados de la consulta del Ejemplo 2-10 se ordenan por LAST_NAME, en orden ascendente (valor por defecto).

Como alternativa, en SQL Developer, puede omitir la cláusula ORDER BY y hacer doble clic en el nombre de la columna que desea ordenar.

No es necesario incluir el criterio de ordenación en la lista de selección, como muestra el Ejemplo 2-11.

Consulte también: Referencia de lenguaje SQL de Oracle Database para obtener más información sobre la sentencia SELECT, incluida la cláusula ORDER BY

Ejemplo 2-10 Ordenación de Datos Seleccionados por LAST_NAME

SELECT FIRST_NAME, LAST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY LAST_NAME;

Resultado:

FIRST_NAME           LAST_NAME                 HIRE_DATE
-------------------- ------------------------- ---------
Ellen                Abel                      11-MAY-04
Sundar               Ande                      24-MAR-08
Mozhe                Atkinson                  30-OCT-05
David                Austin                    25-JUN-05
Hermann              Baer                      07-JUN-02
Shelli               Baida                     24-DEC-05
Amit                 Banda                     21-APR-08
Elizabeth            Bates                     24-MAR-07
...
FIRST_NAME           LAST_NAME                 HIRE_DATE
-------------------- ------------------------- ---------
Jose Manuel          Urman                     07-MAR-06
Peter                Vargas                    09-JUL-06
Clara                Vishney                   11-NOV-05
Shanta               Vollman                   10-OCT-05
Alana                Walsh                     24-APR-06
Matthew              Weiss                     18-JUL-04
Jennifer             Whalen                    17-SEP-03
Eleni                Zlotkey                   29-JAN-08

107 rows selected

Ejemplo 2-11 Ordenación de Datos Seleccionados por Columna No Seleccionada

SELECT FIRST_NAME, HIRE_DATE
FROM EMPLOYEES
ORDER BY LAST_NAME;

Resultado:

FIRST_NAME           HIRE_DATE
-------------------- ---------
Ellen                11-MAY-04
Sundar               24-MAR-08
Mozhe                30-OCT-05
David                25-JUN-05
Hermann              07-JUN-02
Shelli               24-DEC-05
Amit                 21-APR-08
Elizabeth            24-MAR-07
...
FIRST_NAME           HIRE_DATE
-------------------- ---------
Jose Manuel          07-MAR-06
Peter                09-JUL-06
Clara                11-NOV-05
Shanta               10-OCT-05
Alana                24-APR-06
Matthew              18-JUL-04
Jennifer             17-SEP-03
Eleni                29-JAN-08

107 rows selected.

Selección de Datos de Varias Tablas

Para seleccionar datos de varias tablas, utilice una consulta denominada unión. Las tablas de una unión deben compartir al menos un nombre de columna.

Suponga que desea seleccionar el FIRST_NAME, LAST_NAME y DEPARTMENT_NAME de cada empleado. FIRST_NAME y LAST_NAME están en la tabla EMPLOYEES y DEPARTMENT_NAME está en la tabla DEPARTMENTS. Ambas tablas contienen DEPARTMENT_ID. Puede utilizar la consulta en el Example 2-12.

Los cualificadores de nombre de tabla son opcionales para los nombres de columna que aparecen solamente en una tabla de una unión, pero se necesitan para los nombres de columna que aparecen en ambas tablas. La siguiente consulta es equivalente a la consulta del Example 2-12:

SELECT FIRST_NAME "First",
LAST_NAME "Last",
DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
ORDER BY DEPARTMENT_NAME, LAST_NAME;

Para hacer más legibles las consultas que utilizan nombres a columnas cualificadas, utilice alias de tabla, como se muestra en el siguiente ejemplo:

SELECT FIRST_NAME "First",
LAST_NAME "Last",
DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES e, DEPARTMENTS d
WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY d.DEPARTMENT_NAME, e.LAST_NAME;

Aunque cree los alias en la cláusula FROM, puede utilizarlos anteriormente en la consulta, como se muestra en el siguiente ejemplo:

SELECT e.FIRST_NAME "First",
e.LAST_NAME "Last",
d.DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES e, DEPARTMENTS d
WHERE e.DEPARTMENT_ID = d.DEPARTMENT_ID
ORDER BY d.DEPARTMENT_NAME, e.LAST_NAME;

Consulte también: Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las uniones

Ejemplo 2-12 Selección de Datos de Dos Tablas (Unión de Dos Tablas)

SELECT EMPLOYEES.FIRST_NAME "First",
EMPLOYEES.LAST_NAME "Last",
DEPARTMENTS.DEPARTMENT_NAME "Dept. Name"
FROM EMPLOYEES, DEPARTMENTS
WHERE EMPLOYEES.DEPARTMENT_ID = DEPARTMENTS.DEPARTMENT_ID
ORDER BY DEPARTMENTS.DEPARTMENT_NAME, EMPLOYEES.LAST_NAME;

Resultado:

First                Last                      Dept. Name
-------------------- ------------------------- ------------------------------
William              Gietz                     Accounting
Shelley              Higgins                   Accounting
Jennifer             Whalen                    Administration
Lex                  De Haan                   Executive
Steven               King                      Executive
Neena                Kochhar                   Executive
John                 Chen                      Finance
...
Jose Manuel          Urman                     Finance
Susan                Mavris                    Human Resources
David                Austin                    IT
...
Valli                Pataballa                 IT
Pat                  Fay                       Marketing
Michael              Hartstein                 Marketing
Hermann              Baer                      Public Relations
Shelli               Baida                     Purchasing
...
Sigal                Tobias                    Purchasing
Ellen                Abel                      Sales
...
Eleni                Zlotkey                   Sales
Mozhe                Atkinson                  Shipping
...
Matthew              Weiss                     Shipping

106 rows selected.

Uso de Operadores y Funciones en Consultas

El elemento select_list de una consulta puede incluir expresiones SQL, que pueden incluir operadores SQL y funciones SQL. Estos operadores y funciones pueden tener datos de tabla como operandos y argumentos. Las expresiones SQL se evalúan y sus valores aparecen en los resultados de la consulta.

Consulte además:

Uso de Operadores Aritméticos en Consultas

Los operadores aritméticos básicos (+ (adición), - (resta), \* (multiplicación) y / (división) funcionan en valores de columna.

La consulta del ejemplo 2-13 muestra LAST_NAME, SALARY (pago mensual), y el pago anual de cada empleado en el departamento 90, en orden descendente de SALARY.

Ejemplo 2-13 Uso de una Expresión Aritmética en una Consulta

SELECT LAST_NAME,
SALARY "Monthly Pay",
SALARY * 12 "Annual Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 90
ORDER BY SALARY DESC;

Resultado:

LAST_NAME                 Monthly Pay Annual Pay
------------------------- ----------- ----------
King                            24000     288000
De Haan                         17000     204000
Kochhar                         17000     204000

Uso de Funciones Numéricas en Consultas

Las funciones numéricas aceptan valores numéricos de entrada y devuelven valores numéricos. Cada función numérica devuelve un único valor para cada fila que se evalúe.

Las funciones numéricas que soporta SQL se muestran y describen en Referencia de lenguaje SQL de Oracle Database.

La consulta del ejemplo 2-14 utiliza la función numérica ROUND para mostrar el pago diario de cada empleado del departamento 100, redondeado a la centésima más cercana.

La consulta del Ejemplo 2-15 utiliza la función numérica TRUNC para mostrar el pago diario de cada empleado del departamento 100, truncado al dólar más cercano.

Consulte también: Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las funciones numéricas SQL

Ejemplo 2-14 Datos numéricos de redondeo

SELECT LAST_NAME,
ROUND (((SALARY * 12)/365), 2) "Daily Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                  Daily Pay
------------------------- ----------
Chen                          269.59
Faviet                        295.89
Greenberg                     394.52
Popp                          226.85
Sciarra                       253.15
Urman                         256.44

6 rows selected.

Ejemplo 2-15 Truncamiento de datos numéricos

SELECT LAST_NAME,
TRUNC ((SALARY * 12)/365) "Daily Pay"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                  Daily Pay
------------------------- ----------
Chen                             269
Faviet                           295
Greenberg                        394
Popp                             226
Sciarra                          253
Urman                            256

6 rows selected.

Uso del Operador de Concatenación en Consultas

El operador de concatenación (||) combina dos cadenas en una, mediante la adición de la segunda cadena a la primera. Por ejemplo, 'a'||'b'='ab'. Este operador se puede utilizar para combinar información de dos columnas o expresiones en la misma columna de un resultado de consulta.

La consulta del ejemplo 2-16 concatena el nombre, un espacio y el apellido de cada empleado seleccionado.

Consulte también: Oracle Database SQL Language Reference para ver más información sobre el operador de concatenación.

Ejemplo 2-16 Concatenación de Datos de Caracteres

SELECT FIRST_NAME || ' ' || LAST_NAME "Name"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

Resultado:

Name
----------------------------------------------
John Chen
Daniel Faviet
Nancy Greenberg
Luis Popp
Ismael Sciarra
Jose Manuel Urman

6 rows selected.

Uso de Funciones de Carácter en Consultas

Las funciones de carácter aceptan la entrada de caracteres. La mayoría devuelven valores de caracteres pero algunas devuelven caracteres numéricos. Cada función de carácter devuelve un único valor para cada fila que se evalúe.

Las funciones de caracteres que soporta SQL se muestran y describen en Referencia de lenguaje SQL de Oracle Database.

Las funciones UPPER, INITCAP y LOWER muestran sus argumentos de carácter en mayúsculas, mayúscula inicial y minúsculas, respectivamente.

La consulta del Ejemplo 2-17 muestra LAST_NAME en mayúsculas, FIRST_NAME con el primer carácter en mayúscula y los demás en minúscula, y EMAIL en minúsculas.

Consulte también: Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las funciones de caracteres SQL

Ejemplo 2-17 Cambio de Mayúsculas/Minúsculas de Datos de Carácter

SELECT UPPER(LAST_NAME) "Last",
INITCAP(FIRST_NAME) "First",
LOWER(EMAIL) "E-Mail"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY EMAIL;

Resultado:

Last                      First                E-Mail
------------------------- -------------------- -------------------------
FAVIET                    Daniel               dfaviet
SCIARRA                   Ismael               isciarra
CHEN                      John                 jchen
URMAN                     Jose Manuel          jmurman
POPP                      Luis                 lpopp
GREENBERG                 Nancy                ngreenbe

6 rows selected.

Uso de Funciones de Fecha y Hora en Consultas

Las funciones de fecha y hora funcionan en valores de fecha, registro de hora e intervalo. Cada función de fecha y hora devuelve un único valor para cada fila que se evalúe.

Las funciones de fecha y hora que soporta SQL se muestran y describen en Referencia de lenguaje SQL de Oracle Database.

Para cada valor de fecha y registro de hora, Oracle Database almacena la siguiente información:

Para cada valor de registro de hora, Oracle Database también almacena la parte fraccional del segundo, cuya precisión puede especificar. Para almacenar también la zona horaria, utilice el tipo de dato TIMESTAMP WITH TIME ZONE o TIMESTAMP WITH LOCAL TIME ZONE.

Para obtener más información sobre el tipo de dato DATE, consulte Referencia de lenguaje SQL de Oracle Database.

Para obtener más información sobre el tipo de dato TIMESTAMP, consulte Referencia de lenguaje SQL de Oracle Database.

Para obtener información sobre los demás tipos de dato de registro de hora y los tipos de dato de intervalo, consulte Referencia de lenguaje SQL de Oracle Database.

La consulta del Ejemplo 2-18 utiliza las funciones EXTRACT y SYSDATE para mostrar los años en los que cada empleado del departamento 100 ha estado contratado. La función SYSDATE devuelve la fecha actual del reloj del sistema como valor DATE. Para obtener más información sobre la función SYSDATE, consulte Referencia de lenguaje SQL de Oracle Database. Para obtener información sobre la función EXTRACT, consulte Referencia de lenguaje SQL de Oracle Database.

La consulta del Ejemplo 2-19 utiliza la función SYSTIMESTAMP para mostrar la fecha y hora actuales del sistema. La función SYSTIMESTAMP devuelve un valor TIMESTAMP. Para obtener información sobre la función SYSTIMESTAMP, consulte Referencia de lenguaje SQL de Oracle Database.

La tabla en la cláusula FROM de la consulta, DUAL, es una tabla de una fila que crea automáticamente Oracle Database con el diccionario de datos. Seleccione de DUAL cuándo desea calcular una expresión constante con la sentencia SELECT. Debido a que DUAL tiene solamente una fila, la constante se devuelve solamente una vez. Para obtener más información sobre la selección en DUAL, consulte Referencia de lenguaje SQL de Oracle Database.

Consulte también: Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las funciones de fecha y hora de SQL

Ejemplo 2-18 Visualización del Número de Años entre Fechas

SELECT LAST_NAME,
(EXTRACT(YEAR FROM SYSDATE) - EXTRACT(YEAR FROM HIRE_DATE)) "Years Employed"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY "Years Employed";

Resultado:

LAST_NAME                 Years Employed
------------------------- --------------
Popp                                   5
Urman                                  6
Chen                                   7
Sciarra                                7
Greenberg                             10
Faviet                                10

6 rows selected.

Ejemplo 2-19 Visualización de Fecha y Hora del Sistema

SELECT EXTRACT(HOUR FROM SYSTIMESTAMP) || ':' ||
EXTRACT(MINUTE FROM SYSTIMESTAMP) || ':' ||
ROUND(EXTRACT(SECOND FROM SYSTIMESTAMP), 0) || ', ' ||
EXTRACT(MONTH FROM SYSTIMESTAMP) || '/' ||
EXTRACT(DAY FROM SYSTIMESTAMP) || '/' ||
EXTRACT(YEAR FROM SYSTIMESTAMP) "System Time and Date"
FROM DUAL;

Los resultados dependen del Valor actual de SYSTIMESTAMP, pero tienen el siguiente formato:

System Time and Date
-------------------------------------------------------------------
18:17:53, 12/27/2012

Uso de Funciones de Conversión en Consultas

Las funciones de conversión convierten una clase de dato en otra.

Las funciones de conversión que soporta SQL se muestran y describen en Referencia de lenguaje SQL de Oracle Database.

La consulta del siguiente ejemplo 2-20 utiliza la función TO_CHAR para convertir los valores de HIRE_DATE (que son del tipo DATE) en valores de caracteres con el formato FMMonth DD YYYY. FM elimina los campos en blanco iniciales y finales del nombre del mes. FMMonth DD YYYY es un ejemplo de un modelo de formato de fecha y hora. Para obtener información sobre los modelos de formato de fecha y hora, consulte Referencia de lenguaje SQL de Oracle Database.

La consulta del Ejemplo 2-21 utiliza la función TO_NUMBER para convertir los valores de POSTAL_CODE (que son del tipo VARCHAR2) en valores de tipo NUMBER, que se utiliza en cálculos.

Consulte además:

Ejemplo 2-20 Conversión de Fechas en Caracteres Utilizando una Plantilla de Formato

SELECT LAST_NAME,
HIRE_DATE,
TO_CHAR(HIRE_DATE, 'FMMonth DD YYYY') "Date Started"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                 HIRE_DATE Date Started
------------------------- --------- -----------------
Chen                      28-SEP-05 September 28 2005
Faviet                    16-AUG-02 August 16 2002
Greenberg                 17-AUG-02 August 17 2002
Popp                      07-DEC-07 December 7 2007
Sciarra                   30-SEP-05 September 30 2005
Urman                     07-MAR-06 March 7 2006

6 rows selected.

Ejemplo 2-21 Conversión de caracteres en números

SELECT CITY,
POSTAL_CODE "Old Code",
TO_NUMBER(POSTAL_CODE) + 1 "New Code"
FROM LOCATIONS
WHERE COUNTRY_ID = 'US'
ORDER BY POSTAL_CODE;

Resultado:

CITY                           Old Code       New Code
------------------------------ ------------ ----------
Southlake                      26192             26193
South Brunswick                50090             50091
Seattle                        98199             98200
South San Francisco            99236             99237

4 rows selected.

Uso de Funciones de Agregación en Consultas

Una función de agregación toma un grupo de filas y devuelve una única fila de resultados. El grupo de filas puede ser una tabla o una vista entera.

Las funciones de agregación que soporta SQL se muestran y describen en Referencia de lenguaje SQL de Oracle Database.

Las funciones de agregación son especialmente potentes cuando se utilizan con la cláusula GROUP BY, que agrupa los resultados de consulta en Una o más columnas, con un resultado para cada grupo.

La consulta del Ejemplo 2-22 utiliza la función COUNT y la cláusula GROUP BY para mostrar cuántas personas informan a cada mánager. El carácter comodín * representa un registro entero. El ejemplo 2-22 muestra que uno de los empleados no informa a un gestor. La siguiente consulta selecciona el nombre, el apellido y el cargo de ese empleado:

COLUMN FIRST_NAME FORMAT A10;
COLUMN LAST_NAME FORMAT A10;
COLUMN JOB_TITLE FORMAT A10;

SELECT e.FIRST_NAME,
e.LAST_NAME,
j.JOB_TITLE
FROM EMPLOYEES e, JOBS j
WHERE e.JOB_ID = j.JOB_ID
AND MANAGER_ID IS NULL;

Resultado:

FIRST_NAME LAST_NAME  JOB_TITLE
---------- ---------- ----------
Steven     King       President

Para que la consulta devuelva solamente las filas en las cuales los valores agregados cumplen las condiciones especificadas, utilice una función de agregación en la cláusula HAVING de la consulta.

La consulta del ejemplo 2-23 muestra cuánto gasta cada departamento anualmente en salarios, pero solo para los departamentos para los que ese importe supera los 1.000.000 dólares.

La consulta del Ejemplo 2-24 utiliza varias funciones de agregación para mostrar estadísticas de los salarios de cada JOB_ID.

Consulte también: Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las funciones de agregación SQL

Ejemplo 2-22 Recuento del Número de Filas en Cada Grupo

SELECT MANAGER_ID "Manager",
COUNT(*) "Number of Reports"
FROM EMPLOYEES
GROUP BY MANAGER_ID
ORDER BY MANAGER_ID;

Resultado:

Manager Number of Reports
---------- -----------------
       100                14
       101                 5
       102                 1
       103                 4
       108                 5
       114                 5
       120                 8
       121                 8
       122                 8
       123                 8
       124                 8
       145                 6
       146                 6
       147                 6
       148                 6
       149                 6
       201                 1
       205                 1
                           1

19 rows selected.

Ejemplo 2-23 Limitación de Funciones de Agregación a Filas que Cumplen una Condición

SELECT DEPARTMENT_ID "Department",
SUM(SALARY*12) "All Salaries"
FROM EMPLOYEES
HAVING SUM(SALARY * 12) >= 1000000
GROUP BY DEPARTMENT_ID;

Resultado:

Department All Salaries
---------- ------------
        50      1876800
        80      3654000

Ejemplo 2-24 Uso de Funciones de Agregación para Obtener Información Estadística

SELECT JOB_ID,
COUNT(*) "#",
MIN(SALARY) "Minimum",
ROUND(AVG(SALARY), 0) "Average",
MEDIAN(SALARY) "Median",
MAX(SALARY) "Maximum",
ROUND(STDDEV(SALARY)) "Std Dev"
FROM EMPLOYEES
GROUP BY JOB_ID
ORDER BY JOB_ID;

Resultado:

JOB_ID              #    Minimum    Average     Median    Maximum    Std Dev
---------- ---------- ---------- ---------- ---------- ---------- ----------
AC_ACCOUNT          1       8300       8300       8300       8300          0
AC_MGR              1      12008      12008      12008      12008          0
AD_ASST             1       4400       4400       4400       4400          0
AD_PRES             1      24000      24000      24000      24000          0
AD_VP               2      17000      17000      17000      17000          0
FI_ACCOUNT          5       6900       7920       7800       9000        766
FI_MGR              1      12008      12008      12008      12008          0
HR_REP              1       6500       6500       6500       6500          0
IT_PROG             5       4200       5760       4800       9000       1926
MK_MAN              1      13000      13000      13000      13000          0
MK_REP              1       6000       6000       6000       6000          0
PR_REP              1      10000      10000      10000      10000          0
PU_CLERK            5       2500       2780       2800       3100        239
PU_MAN              1      11000      11000      11000      11000          0
SA_MAN              5      10500      12200      12000      14000       1525
SA_REP             30       6100       8350       8200      11500       1524
SH_CLERK           20       2500       3215       3100       4200        548
ST_CLERK           20       2100       2785       2700       3600        453
ST_MAN              5       5800       7280       7900       8200       1066

19 rows selected.

Uso de Funciones Relacionadas con NULL en Consultas

Las funciones relacionadas con NULL facilitan el manejo de los valores NULL.

Las funciones relacionadas con NULL que soporta SQL se muestran y describen en Referencia de lenguaje SQL de Oracle Database.

La consulta del Ejemplo 2-25 devuelve el apellido y su comisión de los empleados cuyos apellidos empiezan por 'B'. Si un empleado no recibe ninguna comisión (es decir, si COMMISSION_PCT es NULL), la función NVL sustituye "Not Applicable" por NULL.

La consulta del Ejemplo 2-26 devuelve el apellido, el salario y el ingreso de los empleados cuyos apellidos empiezan por 'B', utilizando la función NVL2: si COMMISSION_PCT no es NULL, los ingresos corresponden al más la comisión; si COMMISSION_PCT es NULL, los ingresos correspondan solamente al salario.

Consulte además:

Ejemplo 2-25 Sustitución de una Cadena por un Valor Nulo

SELECT LAST_NAME,
NVL(TO_CHAR(COMMISSION_PCT), 'Not Applicable') "COMMISSION"
FROM EMPLOYEES
WHERE LAST_NAME LIKE 'B%'
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                 COMMISSION
------------------------- ----------------------------------------
Baer                      Not Applicable
Baida                     Not Applicable
Banda                     .1
Bates                     .15
Bell                      Not Applicable
Bernstein                 .25
Bissot                    Not Applicable
Bloom                     .2
Bull                      Not Applicable

9 rows selected.

Ejemplo 2-26 Especificación de Diferentes Expresiones para Valores Nulos y No Nulos

SELECT LAST_NAME, SALARY,
NVL2(COMMISSION_PCT, SALARY + (SALARY * COMMISSION_PCT), SALARY) INCOME
FROM EMPLOYEES WHERE LAST_NAME LIKE 'B%'
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                     SALARY     INCOME
------------------------- ---------- ----------
Baer                           10000      10000
Baida                           2900       2900
Banda                           6200       6820
Bates                           7300       8395
Bell                            4000       4000
Bernstein                       9500      11875
Bissot                          3300       3300
Bloom                          10000      12000
Bull                            4100       4100

9 rows selected.

Uso de Expresiones CASE en Consultas

Una expresión CASE permite utilizar la lógica IF … THEN … ELSE en las sentencias SQL sin llamar a subprogramas. Hay dos tipos de expresiones CASE, simples y buscadas.

La consulta del Ejemplo 2-27 utiliza una expresión CASE simple para mostrar el nombre del país para cada código de país.

La consulta del ejemplo 2-28 utiliza una expresión CASE buscada para mostrar los aumentos de salario propuestos (15 %, 10 %, 5 % o 0 %), en función de los rangos de fechas asociados a la duración del servicio.

Consulte además:

Ejemplo 2-27 Uso de una Expresión CASE Simple en una Consulta

SELECT UNIQUE COUNTRY_ID ID,
       CASE COUNTRY_ID
         WHEN 'AU' THEN 'Australia'
         WHEN 'BR' THEN 'Brazil'
         WHEN 'CA' THEN 'Canada'
         WHEN 'CH' THEN 'Switzerland'
         WHEN 'CN' THEN 'China'
         WHEN 'DE' THEN 'Germany'
         WHEN 'IN' THEN 'India'
         WHEN 'IT' THEN 'Italy'
         WHEN 'JP' THEN 'Japan'
         WHEN 'MX' THEN 'Mexico'
         WHEN 'NL' THEN 'Netherlands'
         WHEN 'SG' THEN 'Singapore'
         WHEN 'UK' THEN 'United Kingdom'
         WHEN 'US' THEN 'United States'
       ELSE 'Unknown'
       END COUNTRY
FROM LOCATIONS
ORDER BY COUNTRY_ID;

Resultado:

ID COUNTRY
-- --------------
AU Australia
BR Brazil
CA Canada
CH Switzerland
CN China
DE Germany
IN India
IT Italy
JP Japan
MX Mexico
NL Netherlands
SG Singapore
UK United Kingdom
US United States

14 rows selected.

Ejemplo 2-28 Uso de una Expresión CASE Buscada en una Consulta

SELECT LAST_NAME "Name",
HIRE_DATE "Started",
SALARY "Salary",
CASE
  WHEN HIRE_DATE < TO_DATE('01-Jan-03', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.15, 0)
  WHEN HIRE_DATE >= TO_DATE('01-Jan-03', 'dd-mon-yy') AND
       HIRE_DATE < TO_DATE('01-Jan-06', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.10, 0)
  WHEN HIRE_DATE >= TO_DATE('01-Jan-06', 'dd-mon-yy') AND
       HIRE_DATE < TO_DATE('01-Jan-07', 'dd-mon-yy')
    THEN TRUNC(SALARY*1.05, 0)
  ELSE SALARY
END "Proposed Salary"
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 100
ORDER BY HIRE_DATE;

Resultado:

Name                      Started       Salary Proposed Salary
------------------------- --------- ---------- ---------------
Faviet                    16-AUG-02       9000           10350
Greenberg                 17-AUG-02      12008           13809
Chen                      28-SEP-05       8200            9020
Sciarra                   30-SEP-05       7700            8470
Urman                     07-MAR-06       7800            8190
Popp                      07-DEC-07       6900            6900

6 rows selected.

Uso de la Función DECODE en Consultas

La función DECODE compara una expresión con varios valores de búsqueda. Siempre que el valor de la expresión coincida con un valor de búsqueda, DECODE devuelve el resultado asociado a ese valor de búsqueda. Si DECODE no encuentra ninguna coincidencia, devuelve el valor por defecto (si se ha especificado) o NULL (si no se ha especificado ningún valor por defecto).

La consulta del ejemplo 2-29 utiliza la función DECODE para mostrar el aumento de salario propuesto para tres trabajos diferentes. La expresión es JOB_ID; los valores de búsqueda son 'PU_CLERK', 'SH_CLERK' y 'ST_CLERK'; y el valor por defecto es SALARY.

Nota: Los argumentos de la función DECODE pueden ser cualquiera de los tipos numéricos o de caracteres SQL. Oracle convierte automáticamente la expresión y cada valor de búsqueda en el tipo de datos del primer valor de búsqueda antes de comparar. Oracle convierte automáticamente el valor devuelto al mismo tipo de dato que el primer resultado. Si el primer resultado tiene el tipo de dato CHAR o si el primer resultado es NULL, Oracle convierte el valor devuelto al tipo de dato VARCHAR2.

Consulte además:

Ejemplo 2-29 Uso de la Función DECODE en una Consulta

SELECT LAST_NAME, JOB_ID, SALARY,
DECODE(JOB_ID,
'PU_CLERK', SALARY * 1.10,
'SH_CLERK', SALARY * 1.15,
'ST_CLERK', SALARY * 1.20,
SALARY) "Proposed Salary"
FROM EMPLOYEES
WHERE JOB_ID LIKE '%_CLERK'
AND LAST_NAME < 'E'
ORDER BY LAST_NAME;

Resultado:

LAST_NAME                 JOB_ID         SALARY Proposed Salary
------------------------- ---------- ---------- ---------------
Atkinson                  ST_CLERK         2800            3360
Baida                     PU_CLERK         2900            3190
Bell                      SH_CLERK         4000            4600
Bissot                    ST_CLERK         3300            3960
Bull                      SH_CLERK         4100            4715
Cabrio                    SH_CLERK         3000            3450
Chung                     SH_CLERK         3800            4370
Colmenares                PU_CLERK         2500            2750
Davies                    ST_CLERK         3100            3720
Dellinger                 SH_CLERK         3400            3910
Dilly                     SH_CLERK         3600            4140

11 rows selected.