Union de registros pero no como un JOIN, sino como la sumatoria de conjuntos y no
la sumatoria de columnas como lo es en un JOIN.
En la UNION las columnas son las mismas, lo que yo paso es a tener mas registros
--Consultas SET --UNION - MINUS - INTERSECT
-- obtenemos todos los empleados.
SELECT * FROM employees;
-- obtenemos para el empleado de ID 101 su puesto actual.
SELECT * FROM employees WHERE employee_id=101;
-- se obtiene la historia de los empleados desde cuando a cuando estubo en cada
puesto. SELECT * FROM job_history
-- se obtiene la historia del empleado de ID 101 desde cuando a cuando estubo en
cada puesto. SELECT * FROM job_history WHERE employee_id=101;
-- para obtener la historia completa de todos los empleados, se necesitara juntar
las dos tablas(la de employees y job_history) y asi de este modo se podra saber todos los puestos que ocupo el empleado, ya que en la tabla de employees tengo los puestos actuales de los empleados mientras que en la tabla de job_history se tiene los puestos anteriores por los que paso el empleado (por ejemplo si se desea saber del empleado de ID 101 todos los puesto que obtuvo) -- Al anexar registros de dos tablas diferentes con el operador UNION, la cantidad de columnas para cada una de las dos tablas debe ser la misma(no se puede anexar un registro que tiene 5 columnas con otro que tiene 15 columnas), es por ello que en la consultas se deben especificar las columnas(La misma cantidad de columnas). -- Al ejecutar la sentencia completa se obtendra los registros de la tabla employees con los registros de la tabla jo_history. -- Los tipos de datos debe concidir tanto para las columnas de la consulta de arriba con las columnas de la consulta de abajo. -- Es posible identificar de que grupo vino cada consulta por ejemplo, una es del actual y la otra es de historico o en otros podria especificar que es de factura y la otra consulta es de una boleta. -- Solo se tomara en cuenta la primera consulta para darle un alias a la columna, ademas de la cantidad de columnas, los tipos de datos y a apartir de hacia abajo las proximas consultas que se definan deberan contener las mismas cantidad de columnas, tipos de datos. -- Los registros repetidos los deja una sola vez en el conjunto de salida. SELECT 'Actual' Grupo, employee_id emp_id, hire_date, SYSDATE, job_id, department_id FROM employees -- obtenemos para el empleado de ID 101 su puesto actual. WHERE employee_id=101 UNION -- El operador UNION unira los registros de la consulta de arriba "SELECT * FROM employees WHERE employee_id=101" con los registros de la consulta de abajo "SELECT * FROM job_history WHERE employee_id=101;" SELECT 'Historico', employee_id, start_date, end_date, job_id, department_id FROM job_history -- se obtiene la historia del empleado de ID 101 desde cuando a cuando estubo en cada puesto. WHERE employee_id=101;
-- Al expresar el operador UNION de forma sola no devuelve repetidos, esto quiere
decir que solo junta los SELECT y aquellos registros que tengan los mismos valores en todas las columnas se excluiran. SELECT employee_id FROM employees -- obtenemos para el empleado de ID 101 su puesto actual. WHERE employee_id=101 UNION -- El operador UNION unira los registros de la consulta de arriba "SELECT * FROM employees WHERE employee_id=101" con los registros de la consulta de abajo "SELECT * FROM job_history WHERE employee_id=101;" SELECT employee_id FROM job_history -- se obtiene la historia del empleado de ID 101 desde cuando a cuando estubo en cada puesto. WHERE employee_id=101;
-- Al expresar el operador UNION ALL se evita excluir los valores repetidos(nos
trae todos aquellos registros e incluso aquellos que se repitan) SELECT employee_id FROM employees -- obtenemos para el empleado de ID 101 su puesto actual. WHERE employee_id=101 UNION ALL-- El operador UNION unira los registros de la consulta de arriba "SELECT * FROM employees WHERE employee_id=101" con los registros de la consulta de abajo "SELECT * FROM job_history WHERE employee_id=101;" SELECT employee_id FROM job_history -- se obtiene la historia del empleado de ID 101 desde cuando a cuando estubo en cada puesto. WHERE employee_id=101;
-- El MINUS es la resta del segundo conjunto al primer conjunto. Es sacar del
primer conjunto todo lo que esta en el segundo conjunto.