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:
-
Referencia de lenguaje SQL de Oracle Database para obtener más información sobre consultas y subconsultas
-
Referencia de lenguaje SQL de Oracle Database para más información sobre la sentencia SELECT
-
Referencia y guía del usuario de SQL*Plus para obtener más información sobre la interfaz de línea de comandos de SQL*Plus
-
Oracle SQL Developer User's Guide para obtener información sobre el uso de la hoja de trabajo en SQL Developer.
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:
-
Si el marco derecho de SQL Developer muestra el panel hr_conn:
-
Si el subpanel Hoja de trabajo no se muestra, seleccione el separador Hoja de trabajo.
-
Vaya al paso 4,
-
-
Seleccione el icono Hoja de Trabajo SQL.
-
Si aparece la ventana Seleccionar Conexión:
-
Si el campo Conexión no tiene el valor
hr_conn, seleccione ese valor del menú. -
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.
-
-
En la hoja de trabajo, escriba una consulta (una sentencia SELECT).
-
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.
-
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:
-
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".
-
En la hoja de trabajo, introduzca la siguiente consulta:
SELECT * FROM EMPLOYEES; -
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:
-
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".
-
Si el panel Hoja de Trabajo contiene una consulta, desactive la consulta seleccionando el icono Borrar.
-
En la hoja de trabajo, introduzca la siguiente consulta:
SELECT FIRST_NAME, LAST_NAME, DEPARTMENT_ID FROM EMPLOYEES; -
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:
-
Referencia de lenguaje SQL de Oracle Database para obtener más información sobre la sentencia SELECT, incluida la cláusula WHERE
-
Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las condiciones SQL
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:
-
Referencia de lenguaje SQL de Oracle Database para obtener más información sobre los operadores SQL
-
Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las funciones SQL
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:
-
Year
-
Month
-
Date
-
Hour
-
Minute
-
Second
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:
-
Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las funciones de conversión SQL
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:
-
Oracle Database SQL Language Reference para más información sobre la función NVL
-
Oracle Database SQL Language Reference para más información sobre la función NVL2
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:
-
Referencia de lenguaje SQL de Oracle Database para obtener más información sobre las expresiones CASE
-
Referencia de lenguaje PL/SQL de Oracle Database para obtener más información sobre las expresiones CASE
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:
-
Consulte Oracle Database SQL Language Reference para obtener información sobre la función DECODE.
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.