Está en la página 1de 50

SQL con Oracle Database

Objetivo

Este curso le ofrece una introducción a la tecnología de base de


datos Oracle Database 12c. Usted aprenderá los conceptos de bases
de datos relacionales y el potente lenguaje de programación SQL.
Descubra conocimientos de SQL esenciales que permiten a los
desarrolladores escribir consultas en una o varias tablas, manipular
los datos en tablas y crear objetos de base de datos.
Temas del curso

1. Introducción
2. Recuperación de datos mediante la instrucción SQL Select.
3. Restricción y ordenación de datos.
4. Uso de las funciones de una sola fila para personaliza salida.
5. Uso de las funciones de conversión y expresiones condicionales.
6. Informes agregados de datos mediante funciones de grupo.
7. Visualización de datos de varias tablas.
8. Subconsultas para resolver consultas.
9. Uso de operadores SET.
10. Administración de tablas utilizando sentencias DML.
11. Introducción a Data Definition Language
1. Introducción a bases de datos relacionales
Una base de datos es una recopilación organizada de información o datos estructurados, que
normalmente se almacena de forma electrónica en un sistema informático. Normalmente, una
base de datos está controlada por un sistema de gestión de bases de datos (DBMS). En
conjunto, los datos y el DBMS, junto con las aplicaciones asociadas a ellos, reciben el
nombre de sistema de bases de datos, abreviado normalmente a simplemente base de datos.

Tipos de Base de Datos

Bases de datos relacionales


Bases de datos orientadas a objetos
Bases de datos distribuidas
Almacenes de datos
Bases de datos NoSQL
Bases de datos OLTP
Base de datos multimodelo
Bases de datos de documentos/JSON
Sistema de Gestión de Base de Datos

Los Motores de Bases de Datos, son programas específicos, dedicados a servir de


intermediarios entre las bases de datos y las aplicaciones que las utilizan como función
principal, cada uno de estos cumple una tarea especifica, que van desde crear la Base de
Datos hasta administrar el uso y acceso a esta.

SQL es el lenguaje para acceder a las bases de datos

DDL: Es un lenguaje para describir los datos y sus


relaciones en una base de datos
DML: Las sentencias DML se utilizan para controlar
la información contenida en la base de datos.

Algunos de los mas conocidos motores de base de datos son:

Oracle, MySQL, Microsoft SQL Server ,PostgreSQL, MongoDB, IBM DB2.


Elementos Principales de una base de datos

Tablas: Las tablas son estructuras, formadas por campos y registros (Columnas y Filas),
que van a permitir almacenar de forma organizada la información.

Campos: El campo es el nombre de la columna. Es un dato único y se le


otorga un único tipo de datos.
Registros: Los registros son cada una de las tablas. Aquí se almacenan o cargan
los datos que guardamos. Algunos de estos datos pueden ser nulos.

Índices: Un índice es una estructura de datos definida sobre una columna de tabla (o


varias) y que permite localizar de forma rápida las filas de la tabla en base a su contenido
en la columna indexada

Relaciones: Una relación es una conexión entre dos o más entidades en una base de
datos.
Elementos Principales de una base de datos

Campos
Tabla

Registro

Base de Datos
2. Lenguaje SQL

El SQL(Standar Query Language) es un lenguaje que utilizan casi todas las 


bases de datos relacionales para consultar, manipular y definir los datos, además de para
proporcionar control de acceso. El SQL se desarrolló por primera vez en IBM en la década de 1970
con Oracle como uno de los principales contribuyentes, lo que dio lugar a la implementación del
estándar ANSI SQL, aunque cada motor puede tener instrucciones propias.

El lenguaje SQL se divide en tres subconjuntos de instrucciones, según la funcionalidad de éstas:


• DML (Data Manipulation Language – Lenguaje de Manipulación de Datos): se encarga de la
manipulación de los datos. Es lo que usamos de manera más habitual para consultar, generar o
actualizar información.
• DDL (Data Definition Language – Lenguaje de Definición de Datos): se encarga de la
manipulación de los objetos de la base de datos, por ejemplo, crear tablas u otros objetos.
• DCL (Data Control Language – Lenguaje de Control de Datos): se encarga de controlar el
acceso a los objetos y a los datos, para que los datos sean consistentes y sólo puedan ser
accedidos por quien esté autorizado a ello.
DML Lenguaje de Manipulación de Datos

El DML es una de las partes fundamentales del lenguaje SQL. Lo forman las instrucciones
capaces de consultar y modificar (añadir, cambiar o eliminar) los datos de las tablas.
Al conjunto de instrucciones DML que se ejecutan consecutivamente, se le llama transacción. Lo
interesante de las transacciones es que podemos anularlas, ya que forman una unidad lógica de
trabajo que hasta que no se acepten, sus resultados no serán definitivos.
En todas las instrucciones DML, el único dato devuelto por el sistema es el número de filas que se
han modificado al ejecutar la instrucción.

Las principales instrucciones del lenguaje de manipulación de datos son:

SELECT: Obtener registros (filas) de una tabla de acuerdo con ciertos criterios 
INSERT : Añadir Datos a una Tabla
DELETE: Borrar Datos de Una tabla
UPDATE : Actualizar datos de una tabla
Clausula SELECT
• Obtener datos de ciertas columnas de una tabla (proyección)
• Obtener registros (filas) de una tabla de acuerdo con ciertos criterios (selección)
• Mezclar datos de tablas diferentes (asociación, join)
• Realizar cálculos sobre los datos
• Agrupar datos

SELECT [ DISTINCT | ALL ] SelectItem [ , SelectItem ]*


FROM clause
[ WHERE clause ]
[ GROUP BY clause ]
[ HAVING clause ]
[ ORDER BY clause ]
Clausula SELECT
SINTAXIS BÁSICA
SELECT * | {[DISTINCT] columna | expresión [[AS]
alias], ...}FROM tabla [alias_tabla];
Donde:
• *. El asterisco significa que se seleccionan todas las columnas
• DISTINCT. Hace que no se muestren los valores duplicados.
• columna. Es el nombre de una columna de la tabla que se desea mostrar
• expresión. Una expresión válida SQL
• alias. Es un nombre que se le da a la cabecera de la columna en el resultado de
esta instrucción. No es imprescindible usar la palabra AS.
• Alias_tabla. Es un nombre que se le da a la tabla,
Clausula SELECT, uso del ALIAS
- Sirve para dar un nombre a una columna. Por ejemplo:

select first_name PRIMER_NOMBRE


from HR.EMPLOYEES;

- No es un nombrado permanente, solo se utiliza durante la ejecución de la


sentencia SELECT
- Pueden incluir espacios, caracteres especiales y minúsculas, para esto es
obligatorio encerrarlo entre comillas simples “”

select first_name "primer nombre"


from HR.EMPLOYEES;

- No se pueden repetir ALIAS en una misma sentencia SELECT , aunque la


consulta retorna resultados, el alias no podrá ser utilizado

select first_name PRIMER_NOMBRE, last_name PRIMER_NOMBRE


from HR.EMPLOYEES;
Clausula SELECT, uso del *
- Sirve para seleccionar todas las columnas de una tabla

- Solo se puede usar después de la palabra SELECT, no se puede usar


acompañado de una expresión

select * , SALARY * ( 1 + COMMISSION_PCT )


from HR.EMPLOYEES;

- Excepto si el * va acompañado del Alias de la Tabla

select A.*, SALARY * ( 1 + COMMISSION_PCT )


from HR.EMPLOYEES A;
Clausula SELECT, cálculos aritméticos
- Los operadores + (suma), - (resta), * (multiplicación) y / (división), se pueden utilizar para
hacer cálculos en las consultas. Cuando son utilizados como expresión, no modifican los
datos originales sino que como resultado de la vista generada por SELECT, aparece un
nueva columna. Ejemplo:

select A.*, SALARY * ( 1 + COMMISSION_PCT )


from HR.EMPLOYEES A;

- La nueva columna puede ser renombrada con un alias. Ejemplo:

select A.*, SALARY * ( 1 + COMMISSION_PCT ) SALARIO_TOTAL


from HR.EMPLOYEES A;

- La precedencia de los operadores es la misma que para los lenguajes de programación


- Cuando la expresión aritmética aplica sobre valores NULL, el resultado es NULL
select A.EMPLOYEE_ID, SALARY, COMMISSION_PCT,
SALARY * ( 1 + COMMISSION_PCT ) SALARIO_TOTAL
from HR.EMPLOYEES A;
Clausula SELECT, concatenación de textos
- El operador de concatenación de texto permite unir dos textos, en Oracle el operador usado
es ||
select FIRST_NAME, LAST_NAME , FIRST_NAME || ' ' || LAST_NAME NOMBRE
from HR.EMPLOYEES A;

- Puede ser usados las veces necesarias, como cadenas se deseen concatenar
- Convierte implícitamente fecha y números a texto

select 'Nombre Completo: ‘


|| FIRST_NAME
|| ' ‘
|| LAST_NAME
|| ' >>> Salario : ‘
|| SALARY
|| ' >>> Fecha Contrato : ‘
|| HIRE_DATE
from HR.EMPLOYEES A;
Clausula WHERE
- Esta cláusula permite colocar una condición para restringir los resultados devueltos por la
sentencia SELECT, devuelve los registros que han de cumplir todos las condiciones, los que
no la cumplan no aparecerán en el resultado. Ejemplo:

Devuelve todos los registros de la tabla


select *
from HR.EMPLOYEES

Devuelve solo el registro que cumple la condición

select *
from HR.EMPLOYEES
where EMPLOYEE_ID = 100
Clausula WHERE, Operadores de Comparación
- Los operadores de condición que pueden ser usados, son los siguientes:

Operador Significado
> Mayor que
< Menor que
>= Mayor o igual que
<= Menor o igual que
= Igual
<> Distinto
!= Distinto

- Se pueden utilizar para comparar números, textos y fechas, sin embargo, se debe tener en
cuenta que los elementos a comparar deben tener el mismo tipo de datos
select * select *
from HR.EMPLOYEES from HR.EMPLOYEES
where SALARY > 100 where SALARY > FIRST_NAME
Clausula WHERE, Operadores Lógicos
- Los operadores lógicos comprueban la veracidad de una condición, devuelven Verdadero,
Falso o Nulo:

Operador Significado

AND Devuelve verdadero si las expresiones a su izquierda y derecha son ambas verdaderas

OR Devuelve verdadero si cualquiera de las dos expresiones a izquierda y derecha del OR, son verdaderas

NOT Invierte la lógica de la expresión que está a su derecha. Si era verdadera, mediante NOT pasa a ser falso.

- Se pueden utilizar para comparar números, textos y fechas, sin embargo, se debe tener en
cuenta que los elementos a comparar deben tener el mismo tipo de datos
select * select * select *
from HR.EMPLOYEES from HR.EMPLOYEES from HR.EMPLOYEES
where SALARY > 1000 where SALARY > 1000 where not ( SALARY > 1000
and SALARY < 20000; or SALARY < 20000; and SALARY < 20000 )
Clausula WHERE, Operadores BETWEEN
- El operador BETWEEN permite obtener datos en un rango de valores, aplica sobre
números, fechas y texto

select *
from HR.EMPLOYEES
where SALARY between 10000 and 20000;

select *
from HR.EMPLOYEES
where EMAIL between 'A' and 'D’;

select *
from HR.EMPLOYEES
where HIRE_DATE between to_date( '20000101', 'YYYYMMDD' )
and to_date( '20011231', 'YYYYMMDD' )

- Se debe tener en cuenta que los elementos a comparar deben tener el mismo tipo de datos
Clausula WHERE, Operadores IN
- El operador IN permite obtener valores contenidos en una lista de valores

select *
from HR.EMPLOYEES
where MANAGER_ID in (100, 101);

- La lista de valores también puede ser el resultado de otra consulta

select *
from HR.EMPLOYEES
where MANAGER_ID in (select EMPLOYEE_ID
from HR.EMPLOYEES
where EMPLOYEE_ID in (100, 101));

- Se debe tener en cuenta que los elementos a comparar deben tener el mismo tipo de datos
Clausula WHERE, Operadores LIKE
- El operador LIKE se usa para obtener registros a partir de filtros que cumplan
coincidencias exactas o similares. Usa caracteres especiales para indicar si uno o varios
caracteres pueden variar en la comparación.
Símbolo Significado
% Una serie cualquiera de caracteres

_ Un carácter cualquiera

Ejemplos:

select *
from HR.EMPLOYEES
where FIRST_NAME like '%ex%’;

select *
from HR.EMPLOYEES
where FIRST_NAME like '_ex%'
Clausula WHERE, Operadores IS NULL
- El operador ISNULL se usa para filtras columnas con valor nulo, o vacío. Es de aclarar que
en NULL representa valores vacíos, o campos sin valor asignado. Contrario a lo primero
que se nos podría ocurrir, las columnas vacías no se filtran a través de el valor ‘’

Ejemplos:

select *
from HR.EMPLOYEES
where COMMISSION_PCT = ‘’

select *
from HR.EMPLOYEES
where COMMISSION_PCT is null
Clausula WHERE, Precedencia de Operadores
- En ocasiones, para obtener los resultados esperados por una consulta, es necesario utilizar
una gran cantidad de operadores, el motor de base de datos resolverá la cláusula WHERE
de acuerdo a la siguiente tabla de prioridad de operadores.

Orden de precedencia Operador

1 *(Multiplicar) /(dividir)
2 + (Suma) - (Resta)
3 || (Concatenación)
4 Comparaciones (>, <, !=, ...)
5 IS NULL, IS NOT NULL, LIKE, IN, NOT IN
6 NOT, NOT BETWEEN
7 NOT
8 AND
9 OR

- Sin embargo, la prioridad podría ser alterada por medio del uso de parentesis. Por otra
parte, esta es una práctica recomendada, debido a que facilita el entendimiento de la
cláusula
Clausula WHERE, Precedencia de Operadores
Ejemplos:

select *
from HR.EMPLOYEES
where COMMISSION_PCT is null
and HIRE_DATE > to_date( '20050101', 'YYYYMMDD’ )
or SALARY > 10000;

select *
from HR.EMPLOYEES
where ( COMMISSION_PCT is null
and HIRE_DATE > to_date( '20050101', 'YYYYMMDD' ))
or SALARY < 10000
Clausula ORDER BY
- En esa cláusula se coloca una lista de campos por los que queremos ordenar los
resultados. Se ordena primero por el primer campo de la lista, si hay coincidencias por el
segundo, si ahí también las hay por el tercero, y así sucesivamente.
- Se puede colocar las palabras ASC O DESC (por defecto se toma ASC). Esas palabras
permiten ordenar en ascendente (de la A a la Z, de los números pequeños a los grandes) o
en descendente (de la Z a la a, de los números grandes a los pequeños) respectivamente.
Por defecto, si no se indica nada, la ordenación es ascendente.

Sintaxis:
SELECT {* | [DISTINCT] {columna | expresión} [[AS] alias], ... }
FROM tabla
[WHERE condición]
[ORDER BY expresión1 [,expresión2,…][{ASC|DESC}]];
Clausula ORDER BY, ASC y DESC
- Se puede usar el nombre de las columnas para ordenar:
select *
from HR.EMPLOYEES
order by SALARY DESC;
- También se puede usar el alias de las columnas para ordenar
select SALARY as SALARIO
from HR.EMPLOYEES
order by SALARIO DESC
- También se puede usar el numero de las columnas para ordenar
select A.EMPLOYEE_ID, SALARY, COMMISSION_PCT,
SALARY * ( 1 + COMMISSION_PCT ) SALARIO_TOTAL
from HR.EMPLOYEES A
order by 1 ASC
- También se puede usar el numero, los nombres y los alias de las columnas para ordenar
select A.EMPLOYEE_ID, SALARY, COMMISSION_PCT,
SALARY * ( 1 + COMMISSION_PCT ) SALARIO_TOTAL
from HR.EMPLOYEES A
order by 1 ASC , SALARIO_TOTAL desc
Clausula ORDER BY, Valores Nulos
- Al igual que la clausula WHERE, los valores nulos no cumplen las clausulas de ordenación
- Por defecto los resultados nulos siempre van al final
- Se puede indicar si se desean mostrar los valores nulos al inicio o al final, con las claúsulas
NULLS FIRST
NULLS LAST

Ejemplos:
select A.EMPLOYEE_ID, SALARY, COMMISSION_PCT,
SALARY * ( 1 + COMMISSION_PCT ) SALARIO_TOTAL
from HR.EMPLOYEES A
order by COMMISSION_PCT NULLS FIRST

select A.EMPLOYEE_ID, SALARY, COMMISSION_PCT,


SALARY * ( 1 + COMMISSION_PCT ) SALARIO_TOTAL
from HR.EMPLOYEES A
order by COMMISSION_PCT NULLS LAST
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
- Las bases de datos relaciones almacenan datos en muchas tablas, es posible que para
obtener los datos requeridos, sea necesario buscar los datos en varias estructuras, por lo
cual es posible hacer consultas uniendo diferentes tablas
Ejemplo:
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
(Producto Cartesiano)
- Las bases de datos relaciones almacenan datos en muchas tablas, es posible que para
obtener los datos requeridos, sea necesario buscar los datos en varias estructuras, por lo
cual es posible hacer consultas uniendo diferentes tablas

Ejemplo:

select EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
DEPARTMENT_NAME
from HR.EMPLOYEES EMP, HR.DEPARTMENTS
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
(Asociaciones Simples Sintaxis 1992)
- La consulta anterior puede NO traer los resultados esperados
- La forma correcta es asociar los empelados a los departamentos
Ejemplo:

select EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
DEPARTMENT_NAME
from HR.EMPLOYEES EMP, HR.DEPARTMENTS DEP
where EMP.DEPARTMENT_ID = DEP.DEPARTMENT_ID
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
(Unión de mas de 2 tablas)
- Se pueden unir mas de dos tablas, teniendo las siguientes consideraciones
- Deberemos añadir las tablas que contienen los datos que necesitemos
- Además deberemos añadir las tablas necesarias para asociar correctamente a las tablas
anteriores

Ejemplo:
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
(Unión de mas de 2 tablas)

select EMPLOYEES.EMPLOYEE_ID,
EMPLOYEES.FIRST_NAME,
EMPLOYEES.LAST_NAME,
JOBS.JOB_TITLE,
DEPARTMENTS.DEPARTMENT_NAME
from HR.EMPLOYEES, HR.DEPARTMENTS, HR.JOBS
where ( ( DEPARTMENTS.DEPARTMENT_ID = EMPLOYEES.DEPARTMENT_ID )
and ( JOBS.JOB_ID = EMPLOYEES.JOB_ID ) )
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
(Asociaciones Simples Sintaxis 1999)
- Esta nueva sintaxis busca mejorar la comprensión de los SQL
- Permite separar las condiciones de filtro de las condiciones de unión entre tablas
- La forma correcta es asociar los empelados a los departamentos
Sintaxis:

SELECT tabla1.columna1, tabl1.columna2,...tabla2.columna1, tabla2.columna2,...


FROM tabla1
[CROSS JOIN tabla2]|
[NATURAL JOIN tabla2]|
[[LEFT|RIGHT|FULL OUTER] JOIN tabla2
USING(columna)]|[[LEFT|RIGHT|FULL OUTER] JOIN tabla2
ON (tabla1.columa=tabla2.columna)]
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
(Tipos de JOINS)
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
CROSS JOIN
- Devuelve un producto cruzado o cartesiano de varias tablas

Ejemplo:

select EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
DEPARTMENT_NAME
from HR.EMPLOYEES EMP
cross join
HR.DEPARTMENTS;
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
NATURAL JOIN
- Devuelve los registros haciendo JOIN por medio de las columnas que tengan el mismo
nombre:

Ejemplo:

select EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
DEPARTMENT_NAME
from HR.EMPLOYEES EMP
natural join
HR.DEPARTMENTS;
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
JOIN USING
- Devuelve los resultados, cruzando las tablas por medio de la columna indicada en el
USING, la cual debe existir en ambas tablas

Ejemplo:

select EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
DEPARTMENT_NAME
from HR.EMPLOYEES EMP
join
HR.DEPARTMENTS
using (DEPARTMENT_ID);
OBTENCIÓN DE RESULTADOS DE VARIAS TABLAS
JOIN ON
- Devuelve los resultados, cruzando las tablas por medio de las columnas indicadas en el ON

Ejemplo:

select EMPLOYEE_ID,
FIRST_NAME,
LAST_NAME,
DEPARTMENT_NAME
from HR.EMPLOYEES EMP
join
HR.DEPARTMENTS DEP
on ( EMP.DEPARTMENT_ID = DEP.DEPARTMENT_ID )
FUNCIONES DE AGREGACIÓN

Las funciones de cálculos de totales para datos agrupados son las siguientes:

Función Significado

Cuenta los elementos de un grupo. Se suele indicar un asterisco


(COUNT(*))en lugar de una expresión, ya que la cuenta no varía por
indicar una expresión concreta; el resultado siempre es el número de
COUNT(expresion) elementos del grupo.
Hay que tener en cuenta que esta función ignora los valores nulos a la
hora de contar, por lo que la expresión COUNT(telefono) cuenta la
cantidad de teléfonos que hay (ignorando los nulos).

SUM(expresión) Suma los valores de la expresión

AVG(expresión) Calcula la media aritmética sobre la expresión indicada

MIN(expresión) Mínimo valor que toma la expresión indicada

MAX(expresión) Máximo valor que toma la expresión indicada

STDDEV(expresión) Calcula la desviación estándar


VARIANCE(expresión) Calcula la varianza
Uso del GROUP BY

- Persona agrupar valores, de acuerdo a grupos de columnas


- Permite aplicar funciones de agregación sobre columnas numéricas (SUM, MAX, MIN,
STDEV, AVG, y otras) y no numéricas( no aplica sobre funciones como SUM, STDEV y
AVG)
Sintaxis:
SELECT listaDeExpresiones
FROM listaDeTablas
[JOIN
tablasRelacionadasYCondicionesDeRelac
ión]
[WHERE condiciones]
[GROUP BY grupos]
[HAVING condicionesDeGrupo]
[ORDER BY listaDeExpresiones];
SUBCONSULTAS

• El uso de subconsultas es una técnica que permite utilizar el resultado de una tabla
SELECT en otra consulta SELECT.

• Permite solucionar consultas complejas mediante el uso de resultados previos conseguidos


a través de otra consulta.

• El SELECT que se coloca en el interior de otro SELECT se conoce con el término


de SUBSELECT. Ese SUBSELECT se puede colocar dentro de las
cláusulas WHERE, HAVING, FROM o JOIN.
SUBCONSULTAS simples

• Las subconsultas simples son aquellas que devuelven una única fila. Si además devuelven
una única columna, se las llama subconsultas escalares, ya que devuelven un único valor.

Sintaxis
SELECT listaExpresiones
FROM tabla
WHERE expresión OPERADOR
(SELECT listaExpresiones
FROM tabla);

El operador puede ser >,<,>=,<=,!=, = o IN.


select *
from HR.EMPLOYEES
where DEPARTMENT_ID in (select DEPARTMENT_ID
from HR.DEPARTMENTS
where DEPARTMENT_NAME = 'Marketing');
SUBCONSULTAS DE MULTIPLES FILAS

• En ocasiones se requiere que una consulta dependa de una subconsulta que devuelve
varios resultados. Por Ejemplo:

select *
from HR.EMPLOYEES
where DEPARTMENT_ID in (select DEPARTMENT_ID
from HR.DEPARTMENTS
where DEPARTMENT_NAME like ‘A%');
SUBCONSULTAS CORRELACIONADAS

• En las subconsultas a veces se puede desear poder utilizar datos procedentes de la


consulta principal. Eso es posible utilizando el alias de la tabla que queremos usar de la
consulta principal. Por ejemplo:

select *
from HR.EMPLOYEES E
where exists (select 1
from HR.DEPARTMENTS D
where E.DEPARTMENT_ID) = D.DEPARTMENT_ID);
SUBCONSULTAS en las clausulas FROM o JOIN

• El resultado de una operación de tipo SELECT es una vista (aunque sea temporal, ya que
no se almacena de forma permanente). Y las vistas pueden ser utilizadas dentro de otras
vistas (al igual que las tablas).

• Ejemplo:

select D.DEPARTMENT_ID, DEPARTMENT_NAME


from HR.DEPARTMENTS D,
( select DEPARTMENT_ID, count( EMPLOYEE_ID ) CANTIDAD_EMPLEADOS
from HR.EMPLOYEES
group by DEPARTMENT_ID
having count( EMPLOYEE_ID ) > 10 ) CANT
where D.DEPARTMENT_ID =cant.DEPARTMENT_ID
SUBCONSULTAS ESCALARES

• Las subconsultas escalares, al igual que las simples son aquellas que devuelven una única
fila, pero además devuelven una única columna.

• Estas subconsultas son muy útiles porque se pueden utilizar en muchas partes del lenguaje
SELECT. Concretamente:

En cualquier cláusula de la instrucción SELECT (excepto GROUP BY y CONNECT BY)


En las funciones CASE y DECODE
En cualquier cláusula WHERE de una instrucción DML
En la cláusula SET de la instrucción UPDATE (como ya se ha comentado anteriormente)
SUBCONSULTAS ESCALARES

• Ejemplo

Sintaxis

select DEPARTMENT_ID,
DEPARTMENT_NAME,
( select sum( SALARY )
from HR.EMPLOYEES E
where E.DEPARTMENT_ID = D.DEPARTMENT_ID )
from HR.DEPARTMENTS D
Hablemos
E-mail: sandra.lopez@bmind.com
Tel (57) 3176689110

Síguenos en redes

También podría gustarte