
https://www.mywebstudies.com/test/oracle-sql/principales-entornos-trabajo/35-7
SQL Developer, es una aplicación que se utiliza para acceder a bases de datos, pero ella misma no proporciona ninguna. Por lo que es necesario instalar una base de datos para poder realizar las pruebas y para ello podemos instalar ORACLE DATABASE 11G, la cual proporciona una para la enseñanza.
Tanto Oracle Database 11G como SQL Developer son aplicaciones gratuitas, que pueden ser descargadas desde la página oficial de ORACLE.
Una vez que ya tenemos una base de datos, podemos usar SQL Developer para conectarnos a ella y para ello solo tenemos que descomprimir el fichero de instalación y ejecutarlo.
Tanto SQL Developer como Oracle Database 11G son aplicaciones gratuitas, que pueden ser descargadas desde la página oficial de ORACLE.
La primera vez que entremos en el SQL Developer, se tendra que crear una conexión a la base de datos y para ello tenemos que ejecutar el icono del “MAS”.
Que mostrará una ventana donde se tiene que introducir los datos de la conexión:
Campo nombre: Hay que introducir el nombre que tendrá la conexión.
Apartado de informacion de usuario: Hay que indicar con que usuario se va a realizar la conexión:
o Campo usuario: Introducir el usuario que va a realizar la conexión.
o Campo contraseña: Introducir la contraseña que uso al instalar el Oracle Databa 11g.
Apartado conexión: Es donde hay que introducir los datos referentes a la base de datos a la que se quiere conectar:
Campo Nombre del host: Se tiene que introducir el nombre del host (localhost).
Campo puerto: Se tiene que introducir el número del puerto (1521).
Campo SID: Se tiene que introducir el SID del servidor (ORCL).
Para probar que los datos son correctos se puede usar al botón de “PROBAR”.
Para crear la nueva conexión se puede usar el botón de “CONECTAR”.
La cláusula Where es opcional, que se utiliza para realizar un filtrado sobre los datos de una tabla.
Cuando se ejecuta una sentencia Select sin la cláusula WHERE, se recupera todos los registros de la tabla pero si se ejecuta la misma sentencia Select con la cláusula WHERE, solo se recupera los registros que cumplan la condición de la clausula WHERE.
Ejemplo para recuperar todos los registros de la tabla COUNTRIES.
SELECT * FROM HR.COUNTRIES.
Ejemplo para recuperar de la tabla COUNTRIES, el registro perteneciente al país Argentina:
SELECT * FROM HR.COUNTRIES WHERE COUNTRY_ID = 'AR';
Ejemplo para recuperar de la tabla COUNTRIES, las columnas identificador y nombre del país, para el país Argentina:
SELECT COUNTRY_ID, COUNTRY_NAME HR.COUNTRIES WHERE COUNTRY_ID = 'AR';
Ejemplo para recuperar de la tabla COUNTRIES, todos los países de la región 1.
SELECT * FROM HR.COUNTRIES WHERE REGION_ID = 1;
Operadores Aritméticos:
Ejemplo para sumar el sueldo actual más la paga extra.
SELECT SUELDO + PAGA FROM EMPLEADOS;
Operador de Concatenación:
Ejemplo para concatenar el nombre y el apellido.
SELECT NOMBRE || ' ' || APELLIDOS FROM EMPLEADOS;
Operadores de Comparación:
Ejemplo para recuperar todos los empleados con un sueldo mayor a 3000 euros.
SELECT * FROM EMPLEADOS WHERE SUELDO > 3000;
Operadores Lógicos:
Ejemplo para recuperar todos los empleados con un sueldo mayor a 3000 euros y que vivan en Madrid.
SELECT * FROM EMPLEADOS WHERE SUELDO > 3000 AND CIUDAD = 'MADRID';
Operadores especiales:
Ejemplo para recuperar todos los empleados cuyo nombre empiece por "A".
SELECT * FROM EMPLEADOS WHERE NOMBRE LIKE 'A%';
Cuando se realiza una consulta a una tabla para recuperar los registros, también se recuperan los registros que tengan valores nulos.
Para realizar una consulta sin recuperar los valores nulos de una columna, hay que usar una condición indicando que no se quieren recuperar.
SELECT * FROM nom_tabla WHERE campo IS NOT NULL.
Ejemplo: 4 + 2 * 3.
Solución sin prioridad: 4 + 2 * 3 = 6 * 3 = 18.
Solución con prioridad: 4 + 2 * 3 = 4 + 6 = 10.
En el caso de querer cambiar el orden de prioridad, se usan los signos de paréntesis, cuando se encuentra un paréntesis, las operaciones que existen dentro son las primeras que se tienen que ejecutar.
Ejemplo: (4 + 2) * 3.
Solución sin prioridad: (4 + 2) * 3 = (4) + 6 = 10.
Solución con prioridad: (4 + 2) * 3 = (6) * 3 = 18.
Si se desea ordenar la tabla COUNTRY por los nombres de las ciudades y de forma descendente, hay que incluir la cláusula ORDER BY seguido del campo COUNTRY_NAME y de la opción DESC.
SELECT * FROM HR.COUNTRIES ORDER BY COUNTRY_NAME DESC.
Si se quisiera realizar la ordenación de forma ascendente, se usará la opción ASC.
SELECT * FROM HR.COUNTRIES ORDER BY COUNTRY_NAME ASC.
En el caso de no indicar el tipo de ordenación de la cláusula ORDER BY, por defecto se ordena de forma ascendente.
SELECT * FROM HR.COUNTRIES ORDER BY COUNTRY_NAME.
Si se desea ordenar la tabla COUNTRY por la región y el nombre de las ciudades, hay que incluir la cláusula ORDER BY seguido de los campos REGION_ID y COUNTRY_NAME, los campos tienen que ir separados por una coma.
SELECT * FROM HR.COUNTRIES ORDER BY REGION_ID, COUNTRY_NAME DESC.
Si se quisiera realizar la ordenación de los campos región de forma ascendente y el campo nombre de forma descendente, solo hay que indicar el tipo de ordenación después de cada campo.
SELECT * FROM HR.COUNTRIES ORDER BY REGION_ID ASC, COUNTRY_NAME DESC.
Si ejecutamos la sentencia:
SELECT nombre FROM empleados, se recupera todos los registros de la tabla, incluidos los registros que se repitan.
Si ejecutamos la sentencia:
SELECT DISTINCT nombre FROM empleados, se recupera los nombre de la tabla empleados, sin que se repitan los nombres.
Si se ejecuta la sentencia:
SELECT DISTINCT nombre, apellidos FROM empleados, se recupera los nombres y apellidos de la tabla empleados pudiendose repetir los nombres, o los apellidos, pero no un nombre con los mismos apellidos.
MAX: Devuelve el valor máximo de un conjunto de valores contenidos en un campo especifico de una tabla.
Ejemplo: SELECT MAX(TALLA) FROM PERSONAS;
MIN: Devuelve el valor mínimo de un conjunto de valores contenidos en un campo especifico de una tabla.
Ejemplo: SELECT MIN(EDAD) FROM PERSONAS;
COUNT: Devuelve el número de filas de la consulta, es decir, el número de registros que cumplen una determinada condición.
Ejemplo: SELECT COUNT(ID_PER) FROM PERSONAS;
AVG: Devuelve el valor medio de una columna de tipo numérico.
Ejemplo: SELECT AVG(PESO) FROM PERSONAS;
SUM: Devuelve la suma total de los valores de una columna de tipo numérico, solo se puede ejecutar en columnas numéricas.
Ejemplo: SELECT SUM(PESO) FROM PERSONAS;
La siguiente sentencia nos devuelve la media del sueldo de la tabla ignorando los valores nulos:
SELECT AVG(SUELDO) MEDIA FROM SUELDO;
Si ejecutamos la misma sentencia anterior pero usando la función NVL, el valor NULL se sustituirá por un 0, por lo que esta sentencia dividirá la suma de los sueldos entre todos los registros de la tabla, incluido los que contengan valores nulos:
SELECT AVG(NVL(SUELDO, 0)) MEDIA FROM SUELDO;
Cuando una consulta usa una cláusula group by, las sentecias usadas no se aplican a toda la tabla como si fuera un grupo, si no que la tabla se divide en grupos, estos grupos son indicados por los campos utilizados en la cláusula group by.
Esta consulta divide la tabla en grupos, y habrá tantos grupos como valores diferentes tengan el campo "DEPARTMENT_ID". Posteriormente sumará los valores del campo "SALARY", pero no a nivel de tabla, sino a nivel de grupo, por lo que devolverá tantos registros como valores diferentes existan en el campo "DEPARTMENT_ID".
SELECT SUM(SALARY), DEPARTMENT_ID FROM EMPLOYEES
GROUP BY DEPARTMENT_ID;
La cláusula group by se puede aplicar a más de un campo, esta consulta creará una primera agrupación por cada valor diferente en el campo "JOB_ID" y déspues cada una de estas agrupaciones volverá a agruparlas, por cada valor diferente del campo "DEPARTMENT_ID".
SELECT JOB_ID, DEPARTMENT_ID, SUM(SALARY) FROM EMPLOYEES
GROUP BY JOB_ID, DEPARTMENT_ID;
La siguiente sentencia agrupa los registros por el campo CIUDAD y cuenta los colegios que tiene cada Ciudad, posteriormente con la cláusula HAVING hace que solo se muestre las ciudades que tengan mas de 2 colegios.
SELECT CIUDAD , COUNT(COLEGIO)
FROM COLEGIOS
GROUP BY CIUDAD
HAVING COUNT(COLEGIO) > 2;
PDF de ejercicios para realizar en este tema.
Ejemplo de alias para la columna.
Select nombre_del_trabajador as nombre from tabla_de_trabajo.
Ejemplo de alias para la tabla.
Select nombre_del_trabajador from tabla_de_trabajo t.
Ejemplo de alias en sentencia anidada.
Select nom from (select nombre_del_trabajador as nom from tabla_de_trabajo).
La siguiente select cuenta los registros devueltos por una subconsulta:
SELECT COUNT (*) FROM (SELECT * FROM PROFESORES ).
La siguiente select muestra el campo ASIGNATURA y el nombre del profesor que devuelve la subconsulta:
SELECT ASIGNATURA, ( SELECT NOMBRE FROM ASIGNATURAS WHERE ID_PROFESOR= AIG.ID_PROFESOR ) PROFESOR FROM ASIGNATURAS ASIG.
La siguiente select devuelve las asignaturas cuya ID, esté entre las ID devueltas por la subconsulta, y como esta subconsulta busca al profesor "PEDRO", devolverá su "ID", la cual usará la consulta padre para buscar todas sus asignaturas:
SELECT * FROM ASIGNATURAS WHERE ID_PROFESOR IN (SELECT ID_PROFESOR FROM PROFESORES WHERE ID_PROFESOR = PEDR
Ejemplo de subconsulta mono-registro o de operadores aritméticos de comparación:
Ejemplo: SELECT job_title FROM jobs WHERE min_salary > (SELECT max_salary FROM jobs WHERE job_title = 'Programmer’).
Ejemplo de subconsulta multi-registro o de operadores lógicos:
Ejemplo: SELECT department_name FROM departments WHERE department_id IN (SELECT department_id FROM employees WHERE hire_date < '01/01/05').
Ejemplo de subconsulta correlacionadas:
Ejemplo: SELECT department_id, first_name, salary FROM employees em WHERE salary = (SELECT max(salary) FROM employees e WHERE em.department_id = e.department_id ).
Ejemplo operador IN:
La subconsulta interna devuelve las ids de los profesores que imparten clases del segundo año. Y la consulta muestra los nombres de los profesores que tienen una id igual a cualquiera de las ids, que devuelve la subconsulta.
SELECT NOMBRE FROM PROFESORES WHERE ID_PROFESOR IN ( SELECT ID_PROFESOR FROM ASIGNATURAS WHERE ANNO=2).
Ejemplo operador = ANY:
Esta consulta devolverá los mismos datos que la anterior, ya que los dos operadores tienen la misma funciones.
SELECT NOMBRE FROM PROFESORES WHERE ID_PROFESOR = ANY ( SELECT ID_PROFESOR FROM ASIGNATURAS WHERE ANNO=2).
Ejemplo operador > ANY:
La subconsulta de vuelve las horas de todas las asignaturas del primer año. Y la consulta padre muestra todas las asignaturas del segundo año, si dicha asignatura tienes más horas que cualquier hora devuelta por la subconsulta.
SELECT ASIGNATURA FROM ASIGNATURAS WHERE ANNO = 2 AND CANTHORAS > ANY (SELECT CANTHORAS FROM ASIGNATURAS WHERE ANNO = 1).
Ejemplo operador < ANY:
La subconsulta devuelve las horas de todas las asignaturas del primer año, y la consulta padre muestra las asignaturas del segundo año cuyas horas sean menor a cualquier hora devuelta por la subconsulta.
SELECT ASIGNATURA FROM ASIGNATURAS WHERE ANNO = 2 AND CANTHORAS < ANY (SELECT CANTHORAS FROM ASIGNATURAS WHERE ANNO = 1).
Ejemplo operador > ALL:
La subconsulta devuelve las horas de las asignaturas del segundo año y la consulta muestra las asignaturas del primer año cuyas horas sea mayor a todas las horas devueltas por la subconsulta.
SELECT ASIGNATURA FROM ASIGNATURAS WHERE ANNO = 1 AND CANTHORAS > ALL ( SELECT CANTHORAS FROM ASIGNATURAS WHERE ANNO = 2).
Ejemplo operador < ALL:
La subconsulta devuelve las horas de todas las asignaturas del segundo año y la consulta muestra las asignaturas del primer año cuyas horas sean menos a todas las horas que devuelve la subconsulta.
SELECT ASIGNATURA FROM ASIGNATURAS WHERE ANNO = 1 AND CANTHORAS < ALL ( SELECT CANTHORAS FROM ASIGNATURAS WHERE ANNO = 2).
Ejemplo operador EXISTS:
La consulta mostrará los nombres de todos los profesores, ya que se cumple la consulta interna donde al menos un profesor da clase a una asignatura del segundo año.
SELECT NOMBRE FROM PROFESORES WHERE EXISTS ( SELECT * FROM ASIGNATURAS WHERE ANNO = 2).
Ejemplo operador EXISTS con subconsulta correlacional:
La consulta mostrará los nombres de los profesores que dan clase a segundo año. Ya que al usar el operador exists en una consulta correlacional, el operador exists actúa como el operador in. Hay que fijarse que en la subconsulta las ids de los profesores de las dos tablas se han relacionado, para crear una consulta correlacional.
SELECT NOMBRE FROM PROFESORES P WHERE EXISTS ( SELECT * FROM ASIGNATURAS A WHERE ANNO = 2 AND P.ID_PROFESOR = A.ID_PROFESOR).
La consulta usando el operador IN, obtendría el mismo resultado, ya que el operador exists en consultas correlaciónales actúa como el operador IN.
SELECT NOMBRE FROM PROFESORES WHERE ID_PROFESOR IN ( SELECT ID_PROFESOR FROM ASIGNATURAS WHERE ANNO = 2).
Ejemplos operador NOT EXISTS:
La consulta, no mostrará ningún resultado, ya que la consulta interna devuelve al menos una fila, pues si existen asignaturas de segundo año; por lo tanto, la condición not exists devuelve false.
SELECT NOMBRE FROM PROFESORES WHERE NOT EXISTS ( SELECT * FROM ASIGNATURAS WHERE ANNO = 2).
Si ejecutamos la siguiente consulta se mostrarán los nombres de todos los profesores pues se cumple la subconsulta al no existir asignaturas del 4º año.
SELECT NOMBRE FROM PROFESORES WHERE NOT EXISTS ( SELECT * FROM ASIGNATURAS WHERE ANNO = 4).
La sentencia JOIN se utiliza para unir dos tablas relacionadas entre sí.
Por un una o varias columnas.
Obtener los datos de dichas tablas en una misma sentencia SELECT.
La recuperación de datos en las bases de datos relacionales, se clasifican en:
Selección:
Recupera un grupo de registros de una tabla indicando que condiciones tienen que cumplir los registros recuperados.
Este tipo de recuperación de datos es la que se conoce como una consulta.
Ejemplo: SELECT * FROM hr.employees WHERE first_name = 'david';
Proyección:
Recupera unos campos concretos de una consulta hija:
Ejemplo: SELECT * FROM hr.employees WHERE department_id = ( SELECT departments.department_id FROM hr.departments WHERE department_name = 'it') ;
Join:
Recupera un grupo de datos de varias tablas.
Las cuales tienen una relación entre ellas, utilizando la cláusula JOIN.
Para indicar por cual columna o columnas se va a realizar la unión se utiliza:
La cláusula «ON».
La cláusula «USING», se usa cuando la columna en las dos tablas tienen el mismo nombre.
Existen 3 tipos de JOIN:
INNER JOIN (JOIN):
Se emplea para obtener información de dos tablas y combinar dicha información en una salida.
Solo muestra los registros cuyos campos relacionados hagan matching.
Ejemplo: SELECT first_name nombre, department_name departamento FROM hr.employees e JOIN hr.departments d on e.department_id = d.department_id;
Ejemplo: SELECT first_name nombre, department_name departamento FROM hr.employees e JOIN hr.departments d USING(department_id);
LEFT JOIN:
Encuentra registros de la primera tabla que se corresponden con registros de la segunda.
Si no encuentra coincidencias, devuelve los resultados de la segunda seteados a null.
Ejemplo: SELECT first_name nombre, department_name departamento FROM hr.employees e LEFT JOIN hr.departments d on e.department_id = d.department_id;
Ejemplo: SELECT first_name nombre, department_name departamento FROM hr.employees e LEFT JOIN hr.departments d USING(department_id);
Es importante el orden de las tablas, ya que la tabla de la izquierda es la que se usa para localizar registros en la tabla de la derecha.
RIGHT JOIN:
Trabaja igual que LEFT JOIN solo que la tabla derecha es la que localiza los registros en la tabla izquierda.
Ejemplo: SELECT first_name nombre, department_name departamento from hr.employees e right join hr.departments d on e.department_id = d.department_id;
Ejemplo: SELECT first_name nombre, department_name departamento from hr.employees e right join hr.departments d USING(department_id);
Al igual que en LEFT JOIN es importante el orden de las tablas.
Existen 3 tipos de JOIN:
INNER JOIN (JOIN):
Se emplea para obtener información de dos tablas y combinar dicha información en una salida.
Solo muestra los registros cuyos campos relacionados hagan matching.
Ejemplo: SELECT first_name nombre, department_name departamento FROM hr.employees e JOIN hr.departments d on e.department_id = d.department_id;
LEFT JOIN:
Encuentra registros de la primera tabla que se corresponden con registros de la segunda.
Si no encuentra coincidencias, devuelve los resultados de la segunda seteados a null.
Ejemplo: SELECT first_name nombre, department_name departamento FROM hr.employees e LEFT JOIN hr.departments d on e.department_id = d.department_id;
Es importante el orden de las tablas, ya que la tabla de la izquierda es la que se usa para localizar registros en la tabla de la derecha.
RIGHT JOIN:
Trabaja igual que LEFT JOIN solo que la tabla derecha es la que localiza los registros en la tabla izquierda.
Ejemplo: SELECT first_name nombre, department_name departamento from hr.employees e right join hr.departments d on e.department_id = d.department_id;
Al igual que en LEFT JOIN es importante el orden de las tablas.
Toma las columnas de igual nombre entre dos tablas y las utiliza para realizar un join.
No cruza los registros que tengan un valor nulo.
Se usa cuando las dos tablas tienen la columna de unión con el mismo nombre.
No hay que indicar el nombre de las columnas de unión.
No permite el uso de las sentencias ON y USING.
Puede ser:
Una combinación interna.
Una combinación externa derecha.
Una combinación externa izquierda.
Combinación interna:
Encuentra registros de la primera tabla que se corresponden con registros de la segunda.
Los registros que no hagan matching no se muestran.
Ejemplo: Select country_name, region_name From hr.countries Natural Join hr.regions;
Combinación externa izquierda:
Encuentra registros de la primera tabla que se corresponden con registros de la segunda.
Si no encuentra coincidencias, devuelve los resultados de la segunda tabla seteados a null.
Ejemplo: Select country_name, region_name From hr.countries natural Left Join hr.regions;
Combinación externa derecha:
Trabaja igual que left join solo que la tabla derecha es la que localiza los registros en la tabla izquierda
Ejemplo: Select country_name, region_name From hr.countries Natural Right Join hr.regions;
Toma las columnas de igual nombre entre dos tablas y las utiliza para realizar un join.
No cruza los registros que tengan un valor nulo.
Se usa cuando las dos tablas tienen la columna de unión con el mismo nombre.
No hay que indicar el nombre de las columnas de unión.
No permite el uso de las sentencias ON y USING.
Puede ser:
Una combinación interna.
Una combinación externa derecha.
Una combinación externa izquierda.
Combinación interna:
Encuentra registros de la primera tabla que se corresponden con registros de la segunda.
Los registros que no hagan matching no se muestran.
Ejemplo: Select country_name, region_name From hr.countries Natural Join hr.regions;
Combinación externa izquierda:
Encuentra registros de la primera tabla que se corresponden con registros de la segunda.
Si no encuentra coincidencias, devuelve los resultados de la segunda tabla seteados a null.
Ejemplo: Select country_name, region_name From hr.countries natural Left Join hr.regions;
Combinación externa derecha:
Trabaja igual que left join solo que la tabla derecha es la que localiza los registros en la tabla izquierda
Ejemplo: Select country_name, region_name From hr.countries Natural Right Join hr.regions;
https://www.mywebstudies.com/test/oracle-sql/join-externo/35-75
Hay tablas que, al intentarlas relacionar entre ellas por una columna, sus registros no se emparejan.
Por ejemplo, cuando se quiere emparejar dos tablas, cuyas columnas tienen valores nulos.
No sirve un Natural Join, ya que excluye los valores nulos.
Hay que usar los Join externos, que si permite recuperar valores nulos.
Las combinaciones externas se realizan solamente entre 2 tablas.
Hay tres tipos de combinaciones externas:
Left outer join: left join.
Right outer join: right join.
Full outer join: full join.
LEFT JOIN:
Encuentra registros de la primera tabla que se corresponden con registros de la segunda.
Si no encuentra coincidencias, devuelve los resultados de la segunda seteados a null.
Ejemplo: select first_name nombre, department_name departamento from hr.employees e left join hr.departments d on e.department_id = d.department_id;
La diferencia con el Natural Left Join es que aquí podemos especificar el campo de unión.
Es importante el orden de las tablas, ya que la tabla de la izquierda es la que se usa para localizar registros en la tabla de la derecha.
Puede tener cláusula "WHERE" que restrinja el resultado de la consulta.
Ejemplo: Select first_name nombre, department_name departamento From employees e Left Join departments d on e.department_id = d.department_id Where d.department_id is not null;
Ejemplo: Select first_name nombre, department_name departamento From employees e Left Join departments d on e.department_id = d.department_id Where d.department_id is null;
RIGHT JOIN:
Trabaja igual que Left Join solo que la tabla derecha es la que localiza los registros en la tabla izquierda.
Ejemplo: Select first_name nombre, department_name departamento From hr.employees e Right Join hr.departments d on e.department_id = d.department_id;
La diferencia con el Natural Right Join es que aquí podemos especificar el campo de unión.
Al igual que en Left Join es importante el orden de las tablas.
Puede tener clausula WHERE:
Ejemplo: select first_name nombre, department_name departamento from employees e right join departments d on e.department_id = d.department_id where e.department_id is not null;
Ejemplo: select first_name nombre, department_name departamento from employees e right join departments d on e.department_id = d.department_id where e.department_id is null;
FULL OUTER JOIN O FULL JOIN:
Es una combinación externa completa.
Muestra todos los registros de ambas tablas.
Ejemplo: select first_name nombre, department_name departamento from employees e full join departments d on e.department_id = d.department_id;
https://www.mywebstudies.com/test/oracle-sql/clausulas-using-on/35-78
Cuando se realiza un join, se usa la cláusula on para indicar el nombre de las columnas que van a formar la unión de las dos tablas.
Ejemplo: select first_name, department_name from hr.employees e join hr.departments d on e.manager_id = d.maneger_id;
Cuando las columnas de unión tienen el mismo nombre en ambas tablas se puede usar la cláusula using.
Ejemplo: select first_name, department_name from hr.employees join hr.departments using(manager_id);
La cláusula Using se puede usar en todos los tipos de Join menos en el natural join.
La cláusula On se puede usar en todos los tipos de Join menos en el natural join.
La diferencia con el Using es que aquí los campos de unión pueden tener nombres diferentes en cada tabla.
Ejemplo: Select first_name, department_name From hr.employees e Join hr.departments d On e.manager_id = d.manager_id;
Ejemplo: Select first_name, department_name From hr.employees e Join hr.departments d On e.department_id = d.manager_id;
Uso del modificador “(+)”,se puede modificar el uso del On para obtener el mismo resultado que un Left Join o Right Join.
Indicando que se consideran los valores nulos de una tabla u otra.
Ejemplo On modificado para obtener Left Join: Select first_name nombre, department_name departamento From hr.employees e Join hr.departments d On e.department_id = d.department_id(+);
Ejemplo On modificado para obtener Right Join: Select first_name nombre, department_name departamento From hr.employees e join hr.departments d On e.department_id(+) = d.department_id;
https://www.mywebstudies.com/test/oracle-sql/join-cruzado/35-81
También se conoce con el nombre de join cartesiano.
Muestran todas las combinaciones de todos los registros de las tablas.
Si una tabla tiene 3 registros y otra tabla tiene 10 registros, se recuperarán 30 registros.
No se incluye un campo de unión.
Ejemplo: SELECT country_name, region_name FROM countries Cross Join regions
Con las consultas podemos obtener los datos de una tabla.
Con las subconsultas podemos obtener los datos de una tabla para devolverlos a una consulta para su tratamiento.
Con los JOIN podemos obtener campos de varias tablas.
Con las consultas compuestas, podemos unir los datos devueltos por una consulta a otras consultas.
Se puede unir más de dos consultas.
Operadores:
Se pueden usar varios tipos de operadores.
Según el tipo de operador se obtendrá un resultado diferente.
Los operadores pueden ser:
UNION.
UNION All.
INTERSECT.
MINUS.
El orden de prioridad de estos operadores es de:
de arriba hacia abajo.
de izquierda a derecha.
Características de los campos de las consultas:
Que tengan el mismo número de columnas.
Tienen que tener tipos de datos compatibles.
No es obligatorio que cada consulta se aplique a tablas diferentes.
No es obligatorio que las columnas tengan el mismo nombre.
UNION:
Obtiene todos los registros de las tablas a unir sin producir duplicados.
Si un registro es igual en ambas tablas, en los datos devueltos solo estará este registro una única vez.
Ejemplo: SELECT manager_id FROM hr.employees WHERE department_id=20 UNION SELECT manager_id FROM hr.employees Where department_id=30;
Los encabezados del resultado de una unión son los que se especifican en el primer "SELECT".
Si queremos que se incluyan todos los registros, aún duplicados, debemos emplear "UNION ALL".
UNION ALL:
Obtiene todos los registros de las tablas a unir produciendo duplicados.
Si un registro es igual en ambas tablas, en los datos devueltos aparecera este registro 2 veces.
Ejemplo: SELECT manager_id FROM hr.employees WHERE department_id=20 UNION ALL SELECT manager_id FROM hr.employees WHERE department_id=30;
Los encabezados del resultado de una unión son los que se especifican en el primer "SELECT".
INTERSECT:
Devuelve la intersección de las consultas involucradas.
Los registros que todas las consultas tienen en común.
Ejemplo: SELECT manager_id FROM hr.employees WHERE department_id=20 INTERSECT SELECT manager_id FROM hr.employees WHERE department_id=30;
MINUS (diferencia):
Devuelve los registros de la primera consulta que no se encuentran en segunda consulta.
Aquellos registros que no coinciden.
Es importante el orden de las consultas.
Ejemplo: SELECT manager_id FROM employees WHERE department_id=20 MINUS SELECT manager_id FROM employees WHERE department_id=30;
UNION:
Obtiene todos los registros de las tablas a unir sin producir duplicados.
Si un registro es igual en ambas tablas, en los datos devueltos solo estará este registro una única vez.
Ejemplo: SELECT manager_id FROM hr.employees WHERE department_id=20 UNION SELECT manager_id FROM hr.employees Where department_id=30;
Los encabezados del resultado de una unión son los que se especifican en el primer "SELECT".
Si queremos que se incluyan todos los registros, aún duplicados, debemos emplear "UNION ALL".
UNION ALL:
Obtiene todos los registros de las tablas a unir produciendo duplicados.
Si un registro es igual en ambas tablas, en los datos devueltos aparecera este registro 2 veces.
Ejemplo: SELECT manager_id FROM hr.employees WHERE department_id=20 UNION ALL SELECT manager_id FROM hr.employees WHERE department_id=30;
Los encabezados del resultado de una unión son los que se especifican en el primer "SELECT".
INTERSECT:
Devuelve la intersección de las consultas involucradas.
Los registros que todas las consultas tienen en común.
Ejemplo: SELECT manager_id FROM hr.employees WHERE department_id=20 INTERSECT SELECT manager_id FROM hr.employees WHERE department_id=30;
MINUS (diferencia):
Devuelve los registros de la primera consulta que no se encuentran en segunda consulta.
Aquellos registros que no coinciden.
Es importante el orden de las consultas.
Ejemplo: SELECT manager_id FROM employees WHERE department_id=20 MINUS SELECT manager_id FROM employees WHERE department_id=30;
Cuando se realiza una unión de consultas, las columnas se ordenan de forma automática en ascendente desde izquierda a derecha, excepto con UNION ALL.
No se puede usar la cláusula Order By dentro de cada consulta, ya que se volverán a ordenar una vez realizada la unión.
Ejemplo: SELECT manager_id FROM employees WHERE department_id=20 ORDER BY manager_id
MINUS
SELECT manager_id FROM employees WHERE department_id=30 ORDER BY manager_id;
Se genera un error, ya que no se puede aplicar order by a nivel de consulta.
Pero si está permitido usarla para aplicarla al resultado final.
Ejemplo: SELECT manager_id FROM employees WHERE department_id=20
MINUS
SELECT manager_id FROM employees WHERE department_id=30
ORDER BY manager_id;
En esta consulta la cláusula Order By no se aplica a la segunda consulta, se está aplicando al resultad de la unión de ambas consultas.
Cuando se realiza una unión de consultas, las columnas se ordenan de forma automática en ascendente desde izquierda a derecha, excepto con UNION ALL.
No se puede usar la cláusula Order By dentro de cada consulta, ya que se volverán a ordenar una vez realizada la unión.
Ejemplo: SELECT manager_id FROM employees WHERE department_id=20 ORDER BY manager_id
MINUS
SELECT manager_id FROM employees WHERE department_id=30 ORDER BY manager_id;
Se genera un error, ya que no se puede aplicar order by a nivel de consulta.
Pero si está permitido usarla para aplicarla al resultado final.
Ejemplo: SELECT manager_id FROM employees WHERE department_id=20
MINUS
SELECT manager_id FROM employees WHERE department_id=30
ORDER BY manager_id;
En esta consulta la cláusula Order By no se aplica a la segunda consulta, se está aplicando al resultad de la unión de ambas consultas.
Funciones de caracteres o alfanumérico:
CHR(n): función que acepta un código ASCII y retorna el carácter correspondiente.
CONCAT(n1, n2): función que concatena dos o más cadenas en una sola.
SUBSTR(s, m, n): función para extraer una subcadena de una cadena.
INSTR(n): función que devuelve la ubicación de una subcadena en una cadena.
LENGTH(n): función que devuelve número de caracteres de una cadena. Si es de tipo char, la longitud incluye los blancos del final.
LPAD(s, n): función que rellena la cadena por la izquierda hasta la longitud n con el carácter definido, por defecto es blanco.
RPAD(s, n): función que rellena la cadena por la derecha hasta la longitud n con el carácter definido, por defecto es blanco.
GGNLS_LOWER(n, nlsparam): igual que LOWE pero tiene en cuenta el idioma especificado mediante el parámetro nlsparam.
INITCAP(n): función que pasa a mayúscula la primera letra de cada palabra.
NLS_INITCAP(n, nlsparam): igual que INITCAP pero tiene en cuenta el idioma especificado mediante el parámetro nlsparam.
REPLACE(n1,n2,n3): función que retorna n1 con cada ocurrencia de n2 remplazada por n3.
REGEXP_REPLACE(n1, n2): función que busca un patrón en una columna de caracteres y sustituye cada incidencia de ese patrón por el patrón que se especifique.
REGEXP_SUBST(n1,n2,n3): función que devuelve los caracteres extraídos de una cadena al buscar un patrón de expresión regular.
REGEXP_INSTR: función que busca en una cadena una incidencia especificada de un patrón de expresión regular.
TRANSLATE(expr, desde, hasta): función que retorna expr con todas las ocurrencias de cada carácter de desde trasladados a su correspondiente carácter en hasta
Funciones numéricas:
ABS(n): función que retorna el valor absoluto del parámetro.
SIGN(n): función que retorna 1 si n es positivo, -1 si negativo y 0 si es 0.
SIN(n): función que retorna seno de n.
COS(n): función que retorna coseno de n.
TAN(n): función que retorna tangente de n.
ACOS(n): función que retorna arco seno de n.
ASIN(n): función que retorna arco seno de n.
ATAN(n): función que retorna arco tangente de n.
ATAN2(n,m): función que retorna atn(n/m).
SINH(n): función que retorna seno hiperbólico de n.
COSH(n): función que retorna coseno hiperbólico de n.
TANH(n): función que retorna tangente hiperbólico de n.
BITAND(n1,n2): función que retorna un entero, resultado de aplicar la operación and a nivel binario a los dos argumentos, ambos deben ser enteros no negativos. Se suele utilizar en combinación con DECODE().
CEIL(n): función que retorna el entero mayor del parámetro.
FLOOR(n): función que retorna menor del parámetro.
ROUND(m [,n]): función que retorna m, redondeado a n decimales. Si m se omite es 0.
TRUNC(n [,m]): función que trunca un número a m decimales. Si m se omite es 0.
EXP(n): función que retorna e elevado a la n potencia.
POWER(m, n): función que retorna mn.
LOG(m,n): función que retorna logaritmo en base m de n.
LN (n): función que retorna logaritmo natural o neperiano de n.
MOD(m,n): función que retorna resto de m al dividirlo por n, retorna m si n es 0.
REMAINDER(m,n): función que retorna resto de m al dividirlo por n, es similar a MOD pero usando round en vez de floor.
SQRT(n): función que retorna raíz cuadrada de n.
Funciones de fecha:
CURRENT_DATE: Función que retorna la fecha actual de la zona horaria de la sesión. El valor de retorno es una fecha del calendario gregoriano.
CURRENT_TIMESTAMP: Función que retorna la fecha y la hora actuales de la zona horaria de la sesión como valor del tipo de datos timestamp with time zone. Timestamp with time zone es una variante de timestamp que incluye el desplazamiento de zona horaria en su valor.
NEW_TIME(fecha, zonahoraria1, zonahoraria2): Función que retorna el valor de la fecha trasladándolo de la zonahoraria1 a la zonahoraria2.
LAST_DAY(d): Función que retorna el último día de mes de la fecha pasada.
NEXT_DAY(fecha,char): Función que retorna la fecha del primer día de la semana indicado mediante char posterior a “fecha”. Char debe contener un día de la semana en el lenguaje de la sesión en la que nos encontremos.
MONTHS_BETWEEN(d1, d2): Función que retorna en meses entre dos fechas.
ADD_MONTHS(d, n): Función que suma un número (positivo o negativo) de meses a una fecha.
SYSDATE: Función que retorna la fecha del sistema.
LOCALTIMESTAMP: Función que retorna la fecha y la hora actuales en la zona horaria de la sesión con un valor del tipo de datos timestamp. La diferencia entre esta función y current_timestamp es que localtimestamp devuelve un valor timestamp, mientras que current_timestamp devuelve un valor timestamp with time zone.
SYSTIMESTAMP: Función que retorna la fecha del sistema incluido fracción de segundo y zona horaria del sistema donde reside la base de datos. El valor devuelto es timestamp with time zone.
DBTIMEZONE: Función que retorna el valor de la zona horaria de la base de datos.
SESSIONTIMEZONE: Función que retorna el valor de la zona horaria de la sesión actual.
EXTRACT: Función que retorna el valor de un campo de fecha/hora especificado de una expresión de valor de fecha/hora o intervalo.
ROUND(d, n): Función que redondea la fecha según el formato indicado en n.
TRUNC(d, n): Función que retorna la fecha d según el formato indicado en n.
TO_CHAR(n): función que transforma un tipo date o number en una cadena de caracteres.
TO_TIMESTAMP(n): Función que convierte una cadena de tipo de datos char, varchar2, nchar o nvarchar2 a un valor del tipo de datos timestamp.
TO_TIMESTAMP_TZ(n): Función que convierte una cadena de tipo de datos char, varchar2, nchar o nvarchar2 a un valor de tipo de datos timestamp with time zone.
TO_DSINTERVAL(char, ’nlsparam’): Función que convierte una cadena de los tipos char, varchar2, nchar, nvarchar2 a un valort del tipo interval day to second.
TO_YMINTERVAL(char): Función que convierte una cadena de caracteres de tipo de datos char, varchar2, nchar o nvarchar2 a un tipo de datos interval year to month.
Funciones de conversión:
ASCIISTR(n): Función que convierte cualquier carácter de string que no son ascii a un formato utf-16.
BIN_TO_NUM(n1, n2, n3): Función que convierte una cadena binaria a formato decimal, cada expresión n debe ser una valor de 0 o 1.
CHARTOROWID(n): Función que convierte una cadena en tipo de dato rowid.
CAST(n): Función que te permite convertir temporalmente el valor de un tipo de datos a otro.
CONVERT(char, destino, origen): Función que convierte char del conjunto de caracteres origen al conjunto de caracteres destino.
COMPOSE(‘char’): Función que convierte char a una cadena unicode normalizada al conjunto de caracteres del dato de entrada.
DECOMPOSE(char): Función que convierte char en una cadena único.
HEXTORAW(char): Función que convierte char a rowid.
RAWTOHEX(raw): Función que convierte un carácter de tipo raw a su equivalente hexadecimal.
RAWTONHEX(raw): Función que convierte un carácter de tipo raw a nvarchar2.
ROWIDTOCHAR(rowid): Función que convierte un valor del tipo rowid a un valor de tipo varchar2 cuya longitud es siempre 18.
ROWIDTONCHAR(rowid): Función que convierte un valor de tipo rowid a nvarchar2.
SCN_TO_TIMESTAMP(number): Función que transforma el valor number scn (system change number) al valor aproximado de tipo timestamp asociado a dicho number.
TIMESTAMP_TO_SCN(timestamp): Función que convierte el valor introducido timestamp del tipo timestamp y devuelve el valor aproximado de scn.
TO_BINARY_DOUBLE(expr, gfmt,’nlsparam’): Función que devuelve un número con doble precisión en coma flotante.
TO_BINARY_FLOAT(expr, fmt,’nlsparam’): Función que devuelve un número con precisión sencilla en coma flotante.
TO_CLOB(char): Función que convierte chart al tipo clob values. Char puede ser de uno de los tipos char, varchar2, nchar, nvarchar2, clob, o nclob.
TO_DATE(n1, [n2]): Función que convierte la cadena n1 en fecha, conforme al formato de conversión n2.
TO_LOB(long_column): Función que convierte un valor long o long raw de la columna long_column a un valor lob.
TO_MULTI_BYTE(char): Función que retorna un valor de carácter con todos los caracteres de un solo byte convertidos en caracteres multibyte.
TO_NUMBER(n): Función que convierte una cadena de caracteres en valor numérico.
TO_SINGLE_BYTE(char): Función que devuelve char con todos sus multibytes caracteres convertidos a sus correspondientes caracteres simples. Char debe ser de los tipos char, varchar2, nchar, o nvarchar2. El valor devuelto es del mismo tipo que el de char
Una expresión no puede contener valores con tipos de datos diferentes, por ejemplo, no se podría multiplicar un número por una letra.
Oracle al recuperar datos de una tabla o vista, puede que encuentre tipos de datos no esperados, y para mostrarlos realiza una conversión automática de los datos encontrados al tipo de datos esperado, por ejemplo, al indicar que queremos hacer una operación aritmética sobre campos que son alfanuméricos, los cuales pueden almacenar números, pero al ser un campo alfanumérico realmente no se consideran números, por lo que Oracle convierte esos números alfanuméricos en numéricos, en ese caso se tendría que usar la función TO_NUMBER.
Tipos de conversiones:
Conversión implícita: Oracle al recuperar datos de una tabla o vista, puede que encuentre tipos de datos no esperados y para mostrarlos realiza una conversión automática de los datos encontrados al tipo de datos esperado. A esta conversión automática se le denomina conversión implícita.
Conversión explícita: Es cuando el programador no espera a que Oracle realice la conversión, sino que es él, el que la realiza, usando las funciones, tales como TO_CHAR, TO_DATE, TO_NUMBER.
Ventajas de la conversión explícita a la implícita:
La sentencia SQL puede tener un mayor rendimiento ya que no tiene que decidir qué tipo de conversión debería realizar.
La sentencia SQL es más fácil de entender, ya que visualizando el nombre de una función podemos saber cuál es el tipo del dato origen, y a qué tipo de datos se va a convertir.
Las funciones numéricas son funciones que se aplica a números.
ROUND: Devuelve el número redondeado, indicando la posición por el que se redondea.
Ejemplo: Select ROUND(32.345, 2) From Dual;
o Resultado: 32,35.
Ejemplo: Select Round(32.345) From Dual;
o Resultado: 32.
TRUNC: Devuelve el número truncado por la posición indicada.
Ejemplo: Select Trunc (32.345, 2) From Dual;
o Resultado: 32,34.
Ejemplo: Select Trunc(32,345) From Dual;
o Resultado: 32.
FLOOR: Devuelve el número entero menor, más cercano al número.
Ejemplo: Select Floor(32.345) From Dual;
o Resultado: 32.
CEIL: Devuelve el número entero mayor, más cercano al número.
Ejemplo: Select Ceil(32.345) From Dual;
o Resultado: 33.
ABS: Retorna el valor absoluto del argumento "x".
Ejemplo: Select Abs(-32) From Dual;
o Resultado: 32.
SIGN: Si el argumento es un valor positivo, retorna 1, si es negativo, devuelve -1 y 0 si es 0.
Ejemplo: Select Sign(-32) From Dual;
o Resultado: -1.
Ejemplo: Select Sign(32) From Dual;
o Resultado: 1.
SIN: Retorna seno de n.
Ejemplo: Select Sin(32) From Dual;
o Resultado: 0,5514.
COS: Retorna coseno de n.
Ejemplo: Select Cos(32) From Dual;
o Resultado: 0,8342.
TAN: Retorna tangente de n.
Ejemplo: Select Tan(32) From Dual;
o Resultado: 0,6610.
ACOS: Retorna arco coseno de n.
Ejemplo: Select Acos(.3) From Dual;
o Resultado: 1,26.
ASIN: Retorna arco seno de n.
Ejemplo: Select Asin(.3) From Dual;
o Resultado: 0,3046.
ATAN: Retorna arco tangente de n.
Ejemplo: Select Atan(.3) From Dual;
o Resultado: 0,2914.
EXP: Retorna e elevado a la n potencia
Ejemplo: Select Exp(4) From Dual;
o Resultado: 54,5981.
POWER: Retorna el valor de "x" elevado a la "y" potencia.
Ejemplo: Select Power(2,3) From Dual;
o Resultado: 8.
LOG: Retorna logaritmo en base m de n.
Ejemplo: Select Log(2,3) From Dual;
o Resultado: 1,5849.
SQRT: Devuelve la raíz cuadrada del valor enviado como argumento.
Ejemplo: Select Sqrt(2) From Dual;
o Resultado: 1,4142.
MOD: Devuelve el resto de la división x/y.
Ejemplo: Select Mod(2,3) From Dual;
o Resultado: 2.
Las funciones numéricas son funciones que se aplica a números.
ROUND: Devuelve el número redondeado, indicando la posición por el que se redondea.
Ejemplo: Select ROUND(32.345, 2) From Dual;
o Resultado: 32,35.
Ejemplo: Select Round(32.345) From Dual;
o Resultado: 32.
TRUNC: Devuelve el número truncado por la posición indicada.
Ejemplo: Select Trunc (32.345, 2) From Dual;
o Resultado: 32,34.
Ejemplo: Select Trunc(32,345) From Dual;
o Resultado: 32.
FLOOR: Devuelve el número entero menor, más cercano al número.
Ejemplo: Select Floor(32.345) From Dual;
o Resultado: 32.
CEIL: Devuelve el número entero mayor, más cercano al número.
Ejemplo: Select Ceil(32.345) From Dual;
o Resultado: 33.
ABS: Retorna el valor absoluto del argumento "x".
Ejemplo: Select Abs(-32) From Dual;
o Resultado: 32.
SIGN: Si el argumento es un valor positivo, retorna 1, si es negativo, devuelve -1 y 0 si es 0.
Ejemplo: Select Sign(-32) From Dual;
o Resultado: -1.
Ejemplo: Select Sign(32) From Dual;
o Resultado: 1.
SIN: Retorna seno de n.
Ejemplo: Select Sin(32) From Dual;
o Resultado: 0,5514.
COS: Retorna coseno de n.
Ejemplo: Select Cos(32) From Dual;
o Resultado: 0,8342.
TAN: Retorna tangente de n.
Ejemplo: Select Tan(32) From Dual;
o Resultado: 0,6610.
ACOS: Retorna arco coseno de n.
Ejemplo: Select Acos(.3) From Dual;
o Resultado: 1,26.
ASIN: Retorna arco seno de n.
Ejemplo: Select Asin(.3) From Dual;
o Resultado: 0,3046.
ATAN: Retorna arco tangente de n.
Ejemplo: Select Atan(.3) From Dual;
o Resultado: 0,2914.
EXP: Retorna e elevado a la n potencia
Ejemplo: Select Exp(4) From Dual;
o Resultado: 54,5981.
POWER: Retorna el valor de "x" elevado a la "y" potencia.
Ejemplo: Select Power(2,3) From Dual;
o Resultado: 8.
LOG: Retorna logaritmo en base m de n.
Ejemplo: Select Log(2,3) From Dual;
o Resultado: 1,5849.
SQRT: Devuelve la raíz cuadrada del valor enviado como argumento.
Ejemplo: Select Sqrt(2) From Dual;
o Resultado: 1,4142.
MOD: Devuelve el resto de la división x/y.
Ejemplo: Select Mod(2,3) From Dual;
o Resultado: 2.
Son funciones que se aplican a fechas (date).
Un valor tipo date almacena:
El año (4 posiciones).
El mes (2 posiciones).
El día (2 posiciones).
La hora (2 posiciones).
Los minutos (2 posiciones).
Los segundos (2 posiciones).
El formato de salida estándar en Oracle es dd-mmm-yy, ejemplo 01-dic-20.
CURRENT_DATE: Retorna la fecha actual.
> Ejemplo: select current_date from dual;
# Resultado: 14/09/20.
CURRENT_TIMESTAMP: Retorna la fecha y hora actual de la sesión.
> Ejemplo: select current_timestamp from dual;
# Resultado: 14/09/20 20:23:34,376000000 america/new_york.
SYSTIMESTAMP: retorna fecha y hora actuales del sistema.
> Ejemplo: select systimestamp from dual;
# Resultado: 14/09/20 20:24:39,137000000 -04:00.
NEW_TIME(fecha, zona1, zona2): convierte una fecha de una zona horaria a otra.
> Ejemplo: select new_time (to_date ('2003/11/01 01:45', 'yyyy/mm/dd hh24:mi'), 'ast', 'mst') from dual;
# Resultado: 31/10/03.
LAST_DAY(f): retorna el último día de mes de la fecha enviada como argumento.
> Ejemplo: select last_day('10/02/2020') from dual;
# Resultado: 29/02/20.
> Ejemplo: select last_day('10/08/2020') from dual;
# Resultado: 31/08/20.
NEXT_DAY (fecha, dia): retorna una fecha correspondiente al primer día especificado en "día" luego de la fecha especificada.
> Ejemplo: select next_day('10/08/2020','lunes') from dual;
# Resultado: 17/08/20.
TO_DATE(cadena, formato): convierte una cadena a tipo de dato "date". La cadena tiene una fecha en el formato establecido por el parámetro “formato”.
> Ejemplo: select to_date ('05-sep-2019 10:00 am','dd-mon-yyyy hh:mi am') from dual;
# Resultado: 05/09/19.
TO_CHAR(fecha, formato): devuelve una fecha en el formato indicado.
> Ejemplo: select to_char('10/10/2020')from dual;
# Resultado: 10/10/2020.
ADD_MONTHS(fecha, num_meses): suma el número de meses indicado, a la fecha. Si el argumento num_meses es negativo, se resta.
> Ejemplo: select add_months('10/06/2020',5) from dual;
# Resultado: 10/11/20.
> Ejemplo: select add_months('10/06/2020',-5) from dual;
# Resultado: 10/01/20.
SYSDATE: devuelve la fecha y hora actual del sistema operativo de la base de datos.
> Ejemplo: Select Sysdate From Dual;
# Resultado: 14/09/20.
Extract(): extrae el indicador de una fecha.
SECOND: los segundos.
> Ejemplo: Select Extract(second from systimestamp) from dual;
# Resultado: 19,95.
TIMEZONE_HOUR: la hora de la zona horaria correspondiente.
> Ejemplo: select extract(timezone_hour from systimestamp) from dual;
# Resultado: -4.
TIMEZONE_MINUTE: los minutos de la zona horaria correspondiente.
> Ejemplo: Select Extract(timezone_minute from systimestamp) from dual;
# Resultado:0.
TIMEZONE_REGION: la región de la zona horaria correspondiente.
> Ejemplo: Select Extract(timezone_region from systimestamp) from dual;
# Resultado: unknown.
TIMEZONE_ABBR: devuelve la abreviatura de la zona horaria correspondiente.
> Ejemplo: Select Extract(timezone_abbr from systimestamp) from dual;
# Resultado: unk.
Oracle permite que una función llame a otra función.
Las funciones a nivel de filas pueden ser anidadas hasta cualquier nivel.
Las funciones anidadas son evaluadas desde el nivel más profundo, al nivel menos profundo.
EJEMPLOS:
SELECT TO_CHAR(SYSDATE) FROM DUAL;
RESULTADO: 20/09/20.
SELECT CONCAT ('ESTAMOS EN EL MES ‘,
( SELECT TO_CHAR(( SELECT EXTRACT(MONTH FROM SYSDATE)
FROM DUAL)
)FROM DUAL)
) FROM DUAL;
RESULTADO: ESTAMOS EN EL MES 9.
Los datos de las tablas se almacenan en celdas, estas celdas se agrupan en una fila a la cual se denomina registro, las cuales forman una tabla, que equivalen a una fila.
En SQL existen varias sentencias que sirven para manipular los datos de estos registros, a este grupo de sentencias se les denomina sentencias DML, y está formado por las sentencias:
Select: Se utiliza para consultar los registros de las tablas.
Insert: Se utiliza para insertar registros en las tablas.
Update: Se utiliza para actualizar los datos existentes en los registros de las tablas.
Delete: Se utiliza para eliminar los registros de las tablas.
Commit: Se utiliza para hacer permanente los cambios realizados en una tabla con las sentencia DML
Rollback: Se utiliza para deshacer los cambios realizados en una tabla con las sentencia DML.
Cuando se insertan o se modifican registros en las tablas, hay que tener en cuenta las reglas de integridad (restricciones) que posee dicha tabla, ya que si se los nuevos datos incumplen estas restricciones, estas sentencias fallaran.
Existen varias formas de insertar datos en las tablas:
Insert: Es la sentencia más utilizada y permite insertar uno o varios registros.
Sintaxis para insertar un solo registro:
INSERT INTO NOMBRE_TABLA [LISTA_DE COLUMNAS] VALUES LISTA_DE_VALORES.
Ejemplo:
INSERT INTO HR.DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME ) VALUES ( 1000, ‘COMPRAS’);
Sintaxis para insertar un grupo de registros:
INSERT INTO NOMBRE_TABLA [LISTA_DE_COLUMNAS] SUBCONSULTA.
Ejemplo:
INSERT INTO HR.DEPARTMENTS SELECT * FROM HR.DEPART_NEW;
Utilidades de carga: Se utiliza para insertar grandes cantidades de registros, por ejemplo “SQL *Loader”
EJEMPLOS:
Esta sentencia que especifica las columnas en las que se van a insertar datos, inserta el valor 1000 en la columna id del departamento, y el valor compras en la columna nombre de departamento de la tabla departamentos, el resto de campos los dejara sin informar.
INSERT INTO HR.DEPARTMENTS (DEPARTMENT_ID, DEPARTMENT_NAME ) VALUES ( 1000, ‘COMPRAS’);
Esta sentencia que no específica las columnas en las que se van a insertar datos, inserta el valor 1000 a la primera columna de la tabla, el valor compras a la segunda columna, el valor 101, a la tercera columna y el valor 1700, a la cuarta columna de la tabla. Cuando no se especifica las columnas, el listado de valores tiene que tener el mismo número de valores que columnas tiene la tabla.
INSERT INTO HR.DEPARTMENTS VALUES ( 1000, ‘COMPRAS’, 101, 1700);
Esta sentencia que utiliza una subconsulta para obtener los datos a insertar, inserta todos los datos recuperados de la tabla “nuevos departamentos”, en la tabla departamentos. El número de columnas recuperadas en la subconsulta es el mismo que el de la tabla departamentos.
INSERT INTO HR.DEPARTMENTS SELECT * FROM HR.DEPART_NEW;
La sentencia UPDATE permite modificar una o varias columnas de uno o varios registros.
Las modificaciones se aplicaran a los registros que cumplan la condición de la cláusula “WHERE” de la sentencia, por lo que, si una sentencia UPDATE no implementase esta cláusula, se modificaran todos los registros de la tabla.
Su sintaxis es:
UPDATE nombre_tabla
SETnom_columna = (nuevo_valor) [, nom_columna = (nuevo_valor )]
[WHEREcondición.]
Para asignar un valor a las columnas se pueden usar:
Un valor único.
UPDATE hr.employes SET salary = 30000
Esta sentencia UPDATE, actualiza el campo salario de todos los empleados.
Una subconsulta, pero esta subconsulta solo puede devolver un solo campo con un solo registro, en caso contrario se producirá un error.
UPDATE hr.employes SET salary = (select max(salary) FROM employees)
Esta sentencia UPDATE, actualiza el campo salario de todos los empleados, para que tenga el mismo salario que el salario más alto.
Ejemplos sentencia update:
La siguiente sentencia que está actualizando 2 campos con la función LOWER y donde no está usando la cláusula ” WHERE”, convertirá el nombre y apellido de todos los empleados de la tabla profesores a minúsculas
UPDATE profesores
SET nombre = LOWER(nombre) , apellido = LOWER(nombre);
La siguiente sentencia que está actualizando el campo sueldo con el resultado de una subconsulta y usando la cláusula ” WHERE”, actualizará el sueldo de todos los empleados cuya id sea mayo a 4 y el nuevo sueldo será igual al sueldo mayor que existe en la tabla.
UPDATE profesores
SET sueldo = (select MAX(sueldo) FROMprofesores)
WHERE id_profesor > 4;
La siguiente sentencia que actualiza el campo sueldo, usando el operador ”IN” en la cláusula “WHEREe”, actualizará el sueldo a 45000 de todos los profesores cuya id sea igual a alguna id devuelta por la subconsulta.
UPDATE profesores SET sueldo = 45000
WHERE id_profesor IN( SELECT id_profesor FROMprofesore WHERE sueldo < 45000);
La sentencia DELETE permite eliminar uno o varios registros de una tabla, este borrado se realizara según la condición de la cláusula “WHERE”, por lo que si se omite esta cláusula en una sentencia DELETE, se producirá el borrado completo de la tabla.
A diferencia de la sentencia UPDATE que actúa sobre las columnas de los registros, la sentencia DELETE actúa sobre un registro completo, por lo que para borrar el contenido de una columna o de una celda, no se usa la sentencia DELETE, si no la sentencia UPDATE.
Su sintaxis es:
DELETE FROM nombre_tabla [WHERE condición];
Ejemplos:
DELETE FROM EMPLOYEES;
DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID = 100;
DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID > 10000;
Ejemplos;
DELETE FROM EMPLOYEES;
DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID = 100;
DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID > 10000;
Una transacción es una o más sentencias DML(INSERT, UPDATE, DELETE) seguidas de las sentencias:
COMMIT: Que se utiliza para hacer permanente las modificaciones. (para hacer permanente las modificaciones realizadas por una sentencia DML, hay que ejecutar una sentencia COMMIT, o una sentencia DDL).
ROLLBACK: Para deshacer las modificaciones realizadas.
También existe la sentencia SAVEPOINT, que se utiliza para crear puntos de grabado, el cual es utilizado por la sentencia ROLLBACK para restaurar los datos hasta la ejecución de un SAVEPOINT.
Se puede realizar varios SAVEPOINT y restaurar la que se considere necesaria.
CARACTERISTICAS ACID:
Toda transacción debe cumplir con ciertas características, las cuales se denominan ACID:
ATOMICIDAD (A): Todas partes de una transacción deben realizarse, y en caso contrario no se realizara ninguna, es decir, no se puede terminar una transacción con un aparte de sus sentencias DML sin realizar.
Ejemplo: Si una transacción realiza la actualización de varias tablas, solo puede terminar:
Modificando todas las tablas.
No realizando modificación en ninguna de ellas.
CONSISTENCIA (C): Esta característica asegura que sólo se empieza aquello que se puede acabar. Solo se ejecutaran las transacciones que no van a romper las reglas y directrices de Integridad de la base de datos, es decir, esta característica sostiene que cualquier transacción llevará a la base de datos desde un estado válido a otro también válido.
Ejemplo: Si una transacción va a realizar actualizaciones sobre tablas que tienen una relación entre ellas y estas modificaciones van a romper esta relación, la transacción no se ejecutara.
AISLAMIENTO (ISOLATION): La modificaciones realizadas sobre una base de datos deben ser invisibles para el resto de usuarios, hasta que se confirme su permanencia, es decir, las modificaciones realizadas no serán efectuadas hasta que se realice una sentencia COMMIT o una sentencia DDL.
Ejemplo: Cuando un usuario lanza una transacción y no se producido un COMMIT, las modificaciones solo serán visibles para el usuario que lanzara esa transacción, el resto de usuarios verán el estado de la base de datos, tal como estaba antes de ejecutarse la transacción, y será así, hasta que se ejecute una sentencia que haga permanente los cambios.
DURABILIDAD (D): Esta característica asegura que una vez realizada la operación, esta persistirá y no se podrá deshacer aunque falle el sistema y que de esta forma los datos sobrevivan de alguna manera.
Ejemplo: Toda base de datos debe tener un sistema de seguridad, para que en el caso que se produzca un fallo, se puedan recuperar todos los datos, por ejemplo, un servidor de BACKUP.
CREACIÓN DE UNA TRANSACCIÓN:
Las transacciones no se pueden crear con un comando o una sentencia, se crean de forma automática.
Cuando un usuario se conecta a un servidor, este crea una sesión de usuario. Y cuando este ejecuta la primera sentencia DML (INSERT, UPDATE, DELETE), se crea una transacción de forma automática.
Todas las posteriores sentencias DML, formaran parte de la misma transacción, que solo terminara con:
Una sentencia COMMIT ( que hará permanente todos los cambios) o una sentencia ROCKBALL ( que deshará los cambios)
O cuando se cierre la sesión del usuario, el cual ejecutará un ROCKBALL que deshará todos los cambios no confirmados
Ejemplo sentencia commit:
La siguiente sentencia insert la cual está especificando los valores que se van a insertar, insertará los datos de un nuevo profesor llamado José en la tabla.
> INSERT INTO PROFESORES VALUES (5,'JOSÉ',60);
Si el usuario que ejecutó la sentencia insert anterior, ejecuta la siguiente sentencia select, se mostrarán los datos de todos los profesores que estaban originalmente en la tabla, incluyendo además al profesor José que acaba de insertar.
> SELECT * FROM PROFESORES;
Si otro usuario diferente ejecuta la siguiente sentencia select, sólo se verán los 4 profesores que estaban originalmente en la tabla previo a la sentencia insert.
> SELECT * FROM PROFESORES;
Si el usuario que ejecutó la sentencia insert realiza un commit.
> COMMIT;
Y el otro usuario ejecuta nuevamente la sentencia select, se mostrarán todos los profesores de la tabla, incluyendo al profesor José, ya que la transacción fue confirmada con la sentencia commit.
> SELECT * FROM PROFESORES;
Ejemplo sentencia rollback:
Si se ejecuta la siguiente sentencia update, se modificará el campo edad del registro número 1 de 45 años a 20 años.
> UPDATE PROFESORES SET EDAD = 20 WHERE ID_PROFESOR = 1;
Si luego se ejecuta la siguiente sentencia.
> ROLLBACK;
Y finalmente se ejecuta la siguiente sentencia select, se mostrarán todos los registros de la tabla profesores, donde podemos ver que en el campo edad del registro número 1, no aparece 20 años, sino 45, ya que la sentencia rollback deshizo la modificación realizada anteriormente.
> SELECT * FROM PROFESORES
Ejemplo sentencia savepoint:
Si ejecutamos la siguiente sentencia insert, insertará los datos de un nuevo profesor llamado José en la tabla.
> INSERT INTO PROFESORES VALUES (5,'JOSÉ',60);
Luego ejecutamos la sentencia commit para confirmar los datos.
> COMMIT;
Si ejecutamos la siguiente sentencia update, se actualizarán los datos del campo edad del registro número 5, el cual se insertó anteriormente, de 60 años a 20 años.
> UPDATE PROFESORES SET EDAD = 20 WHERE ID_PROFESOR = 5;
Ejecutamos la sentencia savepoint para crear un punto de grabado de los datos.
> SAVEPOINT SALVA_DATOS;
Si ejecutamos la siguiente sentencia delete, se eliminará de la tabla el registro número 5 que acababa de ser modificado.
> DELETE FROM PROFESORES WHERE ID_PROFESOR = 5;
Si luego ejecutamos la siguiente sentencia.
> ROLLBACK TO SAVEPOINT SALVA_DATOS;
Y finalmente, si ejecutamos la siguiente sentencia select, se mostrarán todos los registros de la tabla, donde vemos que también aparece el registro 5 que acabamos de eliminar, pero no aparece con sus valores originales, ya que la sentencia rollback restauró los valores al punto de grabado SALVA_DATOS definido con la sentencia savepoint, el cual se realizó justo después de que el valor de su campo edad fuera actualizado a 20 años.
> SELECT * FROM PROFESORES;
En Oracle existe una gran cantidad de objetos, los más usados por los programadores son:
Tablas.
Vistas.
Sinónimos.
Índices.
Secuencias.
Y pueden ser creados o modificados por sentencias sql, a este grupo de sentencias se les denomina “sentencias DDL”, que son:
Create: Se usa para crear bases de datos, tablas, vistas, etc.
Alter: Se utiliza para modificar las estructuras de un objeto.
Drop: Se utiliza para eliminar objetos.
También existen muchos objetos que tienen información sobre el reto de objetos de la base de datos, algunos de ellos son:
Dba_objects: contiene los nombres e información de todos los objetos de la base de datos, pero solo puede ser consultado por el administrador del sistema. (todos los objetos que tengan el prefijo dba, indican que solo pueden ser usados por el administrador de sistema).
User_objects: contiene los nombres e información de todos los objetos que poseemos, es decir, a cada usuario se le mostrara un listado diferente, para mostrarle únicamente los objetos que son de su propiedad.
All_objects: contiene el nombre e información de todos los objetos que poseemos y también de los objetos a los que tenemos permisos.
La sentencia DESCRIBE, permite conocer la estructura de una tabla, (es decir, el número de columnas que tiene, sus nombres, de qué tipo de datos son etc.)
Durante la instalación del sistema se crean diversos usuarios, los cuales tienen diferentes permisos, los más importantes son:
SYS: es el propietario del diccionario de datos, el cual contiene toda la información del contenido de la base de datos y su definición.
SYSTEM: es el propietario de objetos que se utilizan para la administración y monitorización de la base de datos.
A parte de esto usuarios, se pueden crear más y concederles privilegios diferentes a cada uno de ellos.
Para que un usuario se pueda conectar a una base de datos necesitan un nombre de usuario y una contraseña, y tener concedido el privilegio de conectarse a la base de datos.
Todo usuario tiene asignado un esquema, que se considera como un contenedor de todos los objetos que tiene el usuario, cuando nos referimos a un esquema, nos estamos refiriendo a un usuario y sus objetos.
Para referirse a cualquier objeto de la base de datos hay que utilizar el nombre del objeto y del esquema al que pertenece, ya que un nombre puede estar repetido para una misma clase de objeto.
Ejemplo:
SELECT * FROM HR.COMPRAS.
SELECT * FROM SYS.COMPRAS;
En la primera sentencia se está accediendo a la tabla compras del esquema HR y en la segunda sentencia se está accediendo a la tabla compras del esquema SYS, como es obligatorio indicar el esquema de un objeto, esto permite que varios objetos puedan tener el mismo nombre)
Para ponerle un nombre a un objeto, tiene que cumplirse:
Tiene que empezar por un carácter alfabético y solo puede contener letras, números y los siguiente caracteres:
_.
&.
#.
Que no sea mayor a 30 caracteres.
Utilizar palabras reservadas.
No es sensible a Mayúsculas y minúsculas, es decir, no distingue entre mayúsculas y minúsculas
Existe una gran variedad de restricciones, las cuales nos permite controlar como se relacionan las tablas y los datos que se introducen en ellas, estas restricciones se suelen crear para garantizar las reglas de negocio, por ejemplo para evitar que se cree una factura en la tabla de facturas si no existe el cliente en la tabla de clientes.
Si una sentencia DML viola alguna restricción, se lanzará un ROLLBACK que producirá que se deshaga todos los cambios realizados hasta el momento.
Algunas clases de restricciones son:
UNIQUE: Impide que un valor (excepto valores nulos) se repita en una o varias columnas.
NOT NULL: No permite Nulos en la columna especificada,
PRIMARY KEY: Permite definir que columna o grupo de columnas serán la clave principal de la tabla, impidiendo que los valores se puedan repetir, esta restricción conlleva implícitamente:
La restricción “UNIQUE”, impidiendo que los valores se puedan repetir.
La creación de un índice, que facilite la búsqueda de datos.
FOREIGN KEY: Obliga a que el valor de una o varias columnas ya existan en las columnas PRIMARY KEY de otra tabla.
CHECK: Se usa para especificar los valores de datos aceptables en una o más columnas
Las tablas son los objetos de la base de datos que contienen los datos de un usuario. Estos datos se organizan con arreglo a un formato de filas y columnas, similar al de una hoja de cálculo. Cada fila representa un registro único y cada columna un campo dentro del registro.
También es el concepto central de una base de datos relacional.
Sintaxis:
CREATE TABLE [esquema.]Nombre_tabla
(nombre_columna1 tipo_de_datos [DEFAULT valor] [ [CONSTRAINT
“nombre_del_constraint”] clase_de_constraint [ENABLE/DISABLE]]
(, nombre_columna2 tipo_de_datos [default valor] [ [CONSTRAINT
“nombre_del_constraint”] clase_de_constraint [ENABLE/DISABLE]]
[… [CONSTRAINT "nombre_constraint" clase_de_constraint [ENABLE/DISABLE]]
);
Creación de restricciones:
Unique:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) UNIQUE);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CONSTRAINT
DEPARTMENT_ID_UK UNIQUE ENABLE);
3º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_IDN NUMBER(4,0), CONSTRAINT
DEPARTMENT_ID_UK UNIQUE (DEPARTMENT_ID) ENABLE);
Not null:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) NOT NULL);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CONSTRAINT DEPARTMENT_ID_NN
NOT NULL ENABLE);
3º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
CONSTRAINT DEPARTMENT_ID_NN NOT NULL (DEPARTMENT_ID) ENABLE);
Primary key:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) PRIMARY KEY);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CONSTRAINT DEPARTMENT_ID_PK
PRIMARY KEY ENABLE);
3º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
CONSTRAINT DEPARTMENT_ID_PK PRIMARY KEY (DEPARTMENT_ID) ENABLE);
Foreign key:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
FOREIGN KEY (“DEPARTMENT_ID”)
REFERENCES HR.EMPLOYEES(EMPLOYEE_ID) ENABLE);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
CONSTRAINT DEPARTMENT_ID_FK FOREIGN KEY (DEPARTMENT_ID)
REFERENCES HR.EMPLOYEES(EMPLOYEE_ID) ENABLE);
CHEK:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CHECK (DEPARTMENT_ID > 1000);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CONSTRAINT DEPARTMENT_ID_MIN
CHECK (DEPARTMENT_ID > 1000) ENABLE);
3º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
CONSTRAINT DEPARTMENT_ID_MIN CHECK (DEPARTMENT_ID > 1000));
CREANDO TABLAS CON SUBCONSULTAS:
También existe una forma de crear tablas usando subconsultas, de esta forma se crean las tablas según lo campos de que devuelve la subconsulta y posteriormente insertar los datos.
Esta opción solo copia la estructura de una tabla, no copia sus restricciones.
SINTAXIS:
CREATE TABLE NOMBRE_TABLA AS SUBCONSULTA;
EJEMPLOS:
CREATE TABLE DEPARTAMENTO AS SELECT * FROM DEPARTMENTS;
CREATE TABLE DEPARTAMENTO AS SELECT DEPARTMENT_ID, DEPARTMENT_NAME FROM DEPARTMENTS WHERE DEPARTMENT_ID > 50;
Las tablas son los objetos de la base de datos que contienen los datos de un usuario. Estos datos se organizan con arreglo a un formato de filas y columnas, similar al de una hoja de cálculo. Cada fila representa un registro único y cada columna un campo dentro del registro.
También es el concepto central de una base de datos relacional.
Sintaxis:
CREATE TABLE [esquema.]Nombre_tabla
(nombre_columna1 tipo_de_datos [DEFAULT valor] [ [CONSTRAINT
“nombre_del_constraint”] clase_de_constraint [ENABLE/DISABLE]]
(, nombre_columna2 tipo_de_datos [default valor] [ [CONSTRAINT
“nombre_del_constraint”] clase_de_constraint [ENABLE/DISABLE]]
[… [CONSTRAINT "nombre_constraint" clase_de_constraint [ENABLE/DISABLE]]
);
Creación de restricciones:
Unique:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) UNIQUE);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CONSTRAINT
DEPARTMENT_ID_UK UNIQUE ENABLE);
3º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_IDN NUMBER(4,0), CONSTRAINT
DEPARTMENT_ID_UK UNIQUE (DEPARTMENT_ID) ENABLE);
Not null:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) NOT NULL);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CONSTRAINT DEPARTMENT_ID_NN
NOT NULL ENABLE);
3º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
CONSTRAINT DEPARTMENT_ID_NN NOT NULL (DEPARTMENT_ID) ENABLE);
Primary key:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) PRIMARY KEY);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CONSTRAINT DEPARTMENT_ID_PK
PRIMARY KEY ENABLE);
3º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
CONSTRAINT DEPARTMENT_ID_PK PRIMARY KEY (DEPARTMENT_ID) ENABLE);
Foreign key:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
FOREIGN KEY (“DEPARTMENT_ID”)
REFERENCES HR.EMPLOYEES(EMPLOYEE_ID) ENABLE);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
CONSTRAINT DEPARTMENT_ID_FK FOREIGN KEY (DEPARTMENT_ID)
REFERENCES HR.EMPLOYEES(EMPLOYEE_ID) ENABLE);
CHEK:
1º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CHECK (DEPARTMENT_ID > 1000);
2º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0) CONSTRAINT DEPARTMENT_ID_MIN
CHECK (DEPARTMENT_ID > 1000) ENABLE);
3º Forma:
CREATE TABLE HR.DEPARTMENTO
(DEPARTMENT_ID NUMBER(4,0),
CONSTRAINT DEPARTMENT_ID_MIN CHECK (DEPARTMENT_ID > 1000));
CREANDO TABLAS CON SUBCONSULTAS:
También existe una forma de crear tablas usando subconsultas, de esta forma se crean las tablas según lo campos de que devuelve la subconsulta y posteriormente insertar los datos.
Esta opción solo copia la estructura de una tabla, no copia sus restricciones.
SINTAXIS:
CREATE TABLE NOMBRE_TABLA AS SUBCONSULTA;
EJEMPLOS:
CREATE TABLE DEPARTAMENTO AS SELECT * FROM DEPARTMENTS;
CREATE TABLE DEPARTAMENTO AS SELECT DEPARTMENT_ID, DEPARTMENT_NAME FROM DEPARTMENTS WHERE DEPARTMENT_ID > 50;
Para modificar la estructura de una tabla se utiliza el comando DDL “ALTER TABLE”.
Este comando realiza un COMMIT implícito y permite:
Añadir columnas:
ALTER TABLE hr.employees ADD(job_id number);
Modificar columnas:
ALTER TABLE hr.employees MODIFY(job_id number (5,2));
Borrar columnas:
ALTER TABLE hr.employees DROP COLUMN job_id;
Renombrar columnas:
ALTER TABLE hr.employees RENAME COLUMN job_id to job_id2;
Marcar una columna como no usada:
ALTER TABLE hr.employees SET UNUSED COLUMN job_id;
Modificar una tabla a solo lectura:
ALTER TABLE hr.employees READ ONLY;
Consideraciones al modificar los campos de una tabla:
Si se cambia el tipo de dato de un campo, la tabla debe estar vacía.
No se puede cambiar el tipo de dato de un campo que es "FOREIGN KEY" o que es referenciado por una "FOREIGN KEY".
Para modificar un campo disminuyendo la longitud (precisión o escala) del tipo de dato, la tabla debe estar vacía, los registros deben tener valores nulos en tal campo o los datos existentes deben ser inferiores o iguales a la nueva longitud.
Se puede modificar un campo definido "NULL" a "NOT NULL", siempre que la tabla esté vacía o no contenga valores nulos.
No puede redefinirse como "NOT NULL" un campo que es clave primaria.
Sí un campo tiene un valor por defecto y se modifica el tipo de dato de tal campo, Oracle analiza que el valor por defecto pueda convertirse al nuevo tipo de dato cuando sea necesario insertarlo; si el valor por defecto no se puede convertir al nuevo tipo de dato que se intenta modificar, la modificación del campo no se realiza.
Para modificar la estructura de una tabla se utiliza el comando DDL “ALTER TABLE”.
Este comando realiza un COMMIT implícito y permite:
Añadir columnas:
ALTER TABLE hr.employees ADD(job_id number);
Modificar columnas:
ALTER TABLE hr.employees MODIFY(job_id number (5,2));
Borrar columnas:
ALTER TABLE hr.employees DROP COLUMN job_id;
Renombrar columnas:
ALTER TABLE hr.employees RENAME COLUMN job_id to job_id2;
Marcar una columna como no usada:
ALTER TABLE hr.employees SET UNUSED COLUMN job_id;
Modificar una tabla a solo lectura:
ALTER TABLE hr.employees READ ONLY;
Consideraciones al modificar los campos de una tabla:
Si se cambia el tipo de dato de un campo, la tabla debe estar vacía.
No se puede cambiar el tipo de dato de un campo que es "FOREIGN KEY" o que es referenciado por una "FOREIGN KEY".
Para modificar un campo disminuyendo la longitud (precisión o escala) del tipo de dato, la tabla debe estar vacía, los registros deben tener valores nulos en tal campo o los datos existentes deben ser inferiores o iguales a la nueva longitud.
Se puede modificar un campo definido "NULL" a "NOT NULL", siempre que la tabla esté vacía o no contenga valores nulos.
No puede redefinirse como "NOT NULL" un campo que es clave primaria.
Sí un campo tiene un valor por defecto y se modifica el tipo de dato de tal campo, Oracle analiza que el valor por defecto pueda convertirse al nuevo tipo de dato cuando sea necesario insertarlo; si el valor por defecto no se puede convertir al nuevo tipo de dato que se intenta modificar, la modificación del campo no se realiza.
DROP:
Se usa para eliminar toda la tabla, no solo los datos.
Ejemplo: DROP TABLE hr.empleyees;
TRUNCATE:
Elimina los datos que contiene la tabla dejando intacto su estructura.
Elimina todos los registros de la tabla.
Ejemplo: TRUNCATE TABLE hr.employees;
Al emplear "DELETE“ se guarda una copia de los registros borrados y son recuperables.
Con TRUNCATE no es posible la recuperación.
DROP:
Se usa para eliminar toda la tabla, no solo los datos.
Ejemplo: DROP TABLE hr.empleyees;
TRUNCATE:
Elimina los datos que contiene la tabla dejando intacto su estructura.
Elimina todos los registros de la tabla.
Ejemplo: TRUNCATE TABLE hr.employees;
Al emplear "DELETE“ se guarda una copia de los registros borrados y son recuperables.
Con TRUNCATE no es posible la recuperación.
La sentencia DESCRIBE TABLE, describe las columnas de una tabla o sus valores actuales, así como los valores predeterminados, para las propiedades de la etapa de una tabla.
También se puede abreviar como desc.
Ejemplo: DESC TABLE jobs
No se permite a los usuarios trabajar directamente sobre las tablas y los motivos son:
Por la seguridad, ya que puede eliminar datos importantes.
Prevenir errores del usuario.
Para lo cual se les ofrece las vistas.
Una vista, aunque se parezca a una tabla no lo es.
Es una consulta a una o varias tablas a las que se le asigna un nombre.
Permite que los datos de la consulta se puedan tratar como si fuese una tabla.
Características de la estructura de una vista:
No es obligatorio que la vista tenga todas las columnas de una tabla.
Se le puede asignar la columna o columnas que se desee de una o varias tablas.
No es obligatorio que contenga todos los registros de las tablas.
Se puede crear filtrando los registros.
La vista realmente no contiene datos físicos, lo que consulta la tabla para recuperar los datos.
Cuando se realiza una operación dml sobre una vista, realmente se aplica a las tablas origen.
Con las vistas se ofrece al usuario final:
Simplificar el sql.
Mejorar la comprensión de los datos de las tablas, utilizando nombres de columnas más simples o intuitivas.
Existen 2 tipos de vistas:
Vistas simples:
Se crean con los datos de una única tabla y se le puede realizar sentencia DML.
Vistas complejas:
Se crean con los datos de una o varias tablas utilizando joins.
Generalmente no se le puede realizar sentencias DML.
Creación y opciones de vistas:
Sintaxis:
Create [or replace] [forcé | noforce] View nombre_vista as subconsulta [with ckeck option [constraint nombre_restriccion]] [with read only [constraint nombre_restriccion]]
Opciones:
Or replace: remplaza la vista, si esta ya existe.
Force / noforce: obliga a crear la vista aunque la tabla origen no exista.
With ckeck option: si la vista se crea utilizando la cláusula where, no se permite realizar insert o updates sobre registros que no son accesibles con la vista.
With read only: solo permite realizar consultas sobre la vista, es decir impide realizar insert, update o deletes.
Constraint: permite poner nombres a las restricciones para hacer más legibles los mensajes de error asociados a su violación.
Modificación y opciones de vistas:
Sintaxis:
Alter view nombrevista [add | drop restriccion | compile];
Opciones:
Add: se usa para añadir una restricción a la vista.
Modify constraint: se usa para borrar una restricción a la vista.
Compile: se usa para recompilar la vista.
Eliminación de vistas:
Sintaxis
Drop view nombrevista;
Consultando una vista:
Sintaxis:
Select * from nombrevista;
Consultando una vista:
Sintaxis:
Select * from nombrevista;
Ejemplo:
Select * from emp_details_view order by job_title;
No se permite a los usuarios trabajar directamente sobre las tablas y los motivos son:
Por la seguridad, ya que puede eliminar datos importantes.
Prevenir errores del usuario.
Para lo cual se les ofrece las vistas.
Una vista, aunque se parezca a una tabla no lo es.
Es una consulta a una o varias tablas a las que se le asigna un nombre.
Permite que los datos de la consulta se puedan tratar como si fuese una tabla.
Características de la estructura de una vista:
No es obligatorio que la vista tenga todas las columnas de una tabla.
Se le puede asignar la columna o columnas que se desee de una o varias tablas.
No es obligatorio que contenga todos los registros de las tablas.
Se puede crear filtrando los registros.
La vista realmente no contiene datos físicos, lo que consulta la tabla para recuperar los datos.
Cuando se realiza una operación dml sobre una vista, realmente se aplica a las tablas origen.
Con las vistas se ofrece al usuario final:
Simplificar el sql.
Mejorar la comprensión de los datos de las tablas, utilizando nombres de columnas más simples o intuitivas.
Existen 2 tipos de vistas:
Vistas simples:
Se crean con los datos de una única tabla y se le puede realizar sentencia DML.
Vistas complejas:
Se crean con los datos de una o varias tablas utilizando joins.
Generalmente no se le puede realizar sentencias DML.
Creación y opciones de vistas:
Sintaxis:
Create [or replace] [forcé | noforce] View nombre_vista as subconsulta [with ckeck option [constraint nombre_restriccion]] [with read only [constraint nombre_restriccion]]
Opciones:
Or replace: remplaza la vista, si esta ya existe.
Force / noforce: obliga a crear la vista aunque la tabla origen no exista.
With ckeck option: si la vista se crea utilizando la cláusula where, no se permite realizar insert o updates sobre registros que no son accesibles con la vista.
With read only: solo permite realizar consultas sobre la vista, es decir impide realizar insert, update o deletes.
Constraint: permite poner nombres a las restricciones para hacer más legibles los mensajes de error asociados a su violación.
Modificación y opciones de vistas:
Sintaxis:
Alter view nombrevista [add | drop restriccion | compile];
Opciones:
Add: se usa para añadir una restricción a la vista.
Modify constraint: se usa para borrar una restricción a la vista.
Compile: se usa para recompilar la vista.
Eliminación de vistas:
Sintaxis
Drop view nombrevista;
Consultando una vista:
Sintaxis:
Select * from nombrevista;
Consultando una vista:
Sintaxis:
Select * from nombrevista;
Ejemplo:
Select * from emp_details_view order by job_title;
Los sinónimos son nombres alternativos que se le asignan a objetos que contienen datos como son las tablas y las vistas.
La ventaja de crear un sinónimo es que elimina la necesidad de especificar el propietario del esquema.
Se consigue una capa de abstracción entre el objeto y su esquema.
Se pueden crear sinónimos de:
Tablas.
Vistas y otros sinónimos.
Paquetes, procedimientos y funciones.
Secuencias.
Tipos.
Java Class.
Existen 2 tipos de sinónimos:
Públicos:
Existen independientemente del esquema.
Puede ser referido por cualquier usuario.
Pueden tener el mismo nombre que otro objeto del esquema.
Privados:
Debe ser un nombre único dentro del esquema.
Oracle busca al objeto en el esquema local, y si no lo encuentra, lo buscará como un sinónimo público.
Un usuario necesita tener asignado permisos para crear sinónimos.
Normalmente solo el administrador de bases de datos puede crear y eliminar sinónimos públicos.
Sintaxis para crear un sinónimo:
Create [public] synonym nombre_sinonimo for object;
La opción “public” indica que no es un objeto de esquema y por lo tanto no se indica el esquema.
Esto no significa que todos los usuarios tengan permisos para utilizarlo.
Sintaxis para borrar un sinónimo:
Drop [public] synonym nombre_sinonimo;
Sintaxis para compilar un sinónimo:
Alter synonym nombre_sinonimo COMPILE
Un sinónimo no se puede modificar hay que borrarlo y volverlo a crear
Los sinónimos son nombres alternativos que se le asignan a objetos que contienen datos como son las tablas y las vistas.
La ventaja de crear un sinónimo es que elimina la necesidad de especificar el propietario del esquema.
Se consigue una capa de abstracción entre el objeto y su esquema.
Se pueden crear sinónimos de:
Tablas.
Vistas y otros sinónimos.
Paquetes, procedimientos y funciones.
Secuencias.
Tipos.
Java Class.
Existen 2 tipos de sinónimos:
Públicos:
Existen independientemente del esquema.
Puede ser referido por cualquier usuario.
Pueden tener el mismo nombre que otro objeto del esquema.
Privados:
Debe ser un nombre único dentro del esquema.
Oracle busca al objeto en el esquema local, y si no lo encuentra, lo buscará como un sinónimo público.
Un usuario necesita tener asignado permisos para crear sinónimos.
Normalmente solo el administrador de bases de datos puede crear y eliminar sinónimos públicos.
Sintaxis para crear un sinónimo:
Create [public] synonym nombre_sinonimo for object;
La opción “public” indica que no es un objeto de esquema y por lo tanto no se indica el esquema.
Esto no significa que todos los usuarios tengan permisos para utilizarlo.
Sintaxis para borrar un sinónimo:
Drop [public] synonym nombre_sinonimo;
Sintaxis para compilar un sinónimo:
Alter synonym nombre_sinonimo COMPILE
Un sinónimo no se puede modificar hay que borrarlo y volverlo a crear
Una secuencia es una tabla con un campo numérico en el cual se almacena un valor.
Las secuencias se crean para generar valores enteros únicos y consecutivos.
Se utiliza principalmente para generar valores para las claves primarias (pks).
Sentencia crear una secuencia:
CREATE SEQUENCE [esquema.] Nombre_secuencia [START WITH número] [INCREMENT BY número] [MAXVALUE número | NOMAXVALUE] [MINVALUE número | NOMINVALUE] [CYCLE | NOCYCLE];
Ejemplo crear una secuencia:
CREATE SEQUENCE hr.nueva_seq START WITH 1;
Opciones para crear una secuencia:
INCREMENT BY:
El valor que se va a sumar al valor actual.
Puede ser un número negativo o diferente de 0.
Si no se indica, por defecto es 1.
MAXVALUE:
Indica el máximo valor al que puede llegar la secuencia.
Si no se indica, por defecto es 99999999999999999999999999.
MINVALUE:
Indica el mínimo valor al que puede llegar la secuencia.
Si no se indica, por defecto es 1.
CYCLE:
Indica que cuando se llegue al máximo valor, se reinicie al mínimo valor nuevamente.
Si no se indica, por defecto la secuencia se crea nocycle.
Sentencias para recuperar los valores:
NEXTVAL: devuelve el siguiente valor del valor actual (incrementándolo o decrementándolo).
Ejemplo: SELECT nueva_seq.NEXTVAL FROM dual;
CURRVAL: devuelve el valor actual de la secuencia.
Ejemplo: SELECT nueva_seq.currval FROM dual;
Ejemplo de uso de secuencias en un insert:
Ejemplo: INSERT INTO hr.jobs VALUES (hr.nueva_seq.currval, 'designer', 1700, 2500);
Sentencia y opciones para modificar una sentencia:
ALTER SEQUENCE [esquema.] Nombre_secuencia [INCREMENT BY número] [MAXVALUE número | NOMAXVALUE] [MINVALUE número | NOMINVALUE] [CYCLE | NOCYCLE]
El único valor que no se puede modificar de una sentencia es el valor de comienzo.
Ejemplo para incrementar el valor de la secuencia:
ALTER SEQUENCE hr.nueva2_seq INCREMENT BY 3;
Sentencia para eliminar una secuencia:
DROP SEQUENCE nombre_secuencias;
Ejemplo: DROP SEQUENCE nueva2_seq;
Sentencia para ver todas las secuencias a la que se tiene acceso:
SELECT * FROM all_sequences;
Sentencia para ver todos los objetos a los que se tiene acceso:
SELECT * FROM all_objects;
Los índices son estructuras asociadas a tablas.
Se utilizan para proporcionar acceso inmediato a valores claves y realizan la búsqueda de estos valores de forma instantánea.
Los índices aumentan la velocidad de búsqueda, pero ocupan espacio.
Sus funciones principales son:
Obligar al cumplimiento de las restricciones primary key y unique ya que cada vez que se inserta un nuevo registro obliga a que no viole ninguna restricción.
Mejoran el rendimiento de las consultas a las tablas por lo que la consulta se realizará más rápido.
Todas las columnas claves primary key (pks) o unique se crean automáticamente con un índice.
Sintaxis y opciones para crear un índice:
CREATE [UNIQUE |BITMAP ] INDEX [esquema.]Nombre_indice ON [esquema.]Nombre_tabla (columna1 [columna n]);
Opciones:
UNIQUE: se utiliza cuando queremos que el valor de la columna o columnas no se repita y sea único.
BITMAP: se utiliza para especificar que el índice se cree con un mapa de bits por cada clave distinta y no para cada registro separado.
Ejemplo crear índice:
CREATE BITMAP INDEX hr.minsalary On hr.jobs(min_salary);
Sintaxis para borrar índices:
DROP INDEX [esquema.]Nombre_indice;
Ejemplo borrar índice:
DROP INDEX hr.minsalary;
Al completar el 100% de los estudios, puedes solicitar el Certificado de Mywebstudies
Este curso esta basado en los documentos oficiales del curso para la certificación Oracle Database SQL 1Z0-061 Y 1Z0-071. con el que se te dará acceso gratuito a:
Los exámenes 1Z0-061 en inglés y español.
Los exámenes 1Z0-071 en inglés y español.
Ejercicios basados en los exámenes oficiales para la certificación oficial de ORACLE DATABASE 1Z0-061 Y 1Z0-71.
Al curso COMPLETO DE ORACLE SQL.
Videos de ejercicios.
TEST de verificación de conocimientos, con los cuales puedes comprobar lo aprendido.
Ejercicios por tema.
Ejercicios con las soluciones para desarrollarte aun más.
FICHERO DE APUNTES, el cual te servirá de apoyo en los estudios, conteniendo y agrupando los comandos enseñados hasta el momento.
DOCUMENTACIÓN EXTRA, el cual contiene toda la información del curos y te ayudará a poder repasar o buscar ayuda fuera del curso.
Y al completarlo obtendrás nuestro CERTIFICADO DE ESTUDIOS.
Con este curso no necesitas conocimientos previos al SQL ya que empezamos desde lo más básico para que cualquiera que quiera aprender pueda tomar el curso y terminando con un nivel de experto, ya que el curso esta alineado al proporcionado por oracle university.
Una vez realizado el curso, te recomendamos realizar los exámenes 1Z0-061 y 1Z0-71, con los cuales podrás poner en practica tus conocimientos y prepararte para los exámenes oficiales