Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Resumen SQL Oracle PDF
Resumen SQL Oracle PDF
15 rows selected.
Ofrece la salida:
SELECT ename,sal,comm
FROM emp
WHERE comm IS NOT NULL
ORDER BY sal DESC,comm DESC;
FROM emp
WHERE LOWER(ename)='blake';
15 rows selected.
SELECT ename,hiredate
FROM emp
WHERE hiredate BETWEEN to_date('20-February-81','DD-Month-YY')
AND to_date('01-May-81','DD-Month-YY');
Funciones especiales
Existen otras funciones especiales, no asociadas a ningún tipo de
dato en especial, entre las que podemos encontrar:
60 rows selected.
15 rows selected.
SMITH 800 1
ADAMS 1100 1
MARTIN 1250 2
WARD 1250 2
MILLER 1300 2
ALLEN 1600 3
TURNER 1500 3
BLAKE 2850 4
.........
14 rows selected.
WORKER.ENAME||'WORKSFOR'||MANAG
-------------------------------
BLAKE works for KING
CLARK works for KING
JONES works for KING
MARTIN works for BLAKE
ALLEN works for BLAKE
TURNER works for BLAKE
JAMES works for BLAKE
WARD works for BLAKE
FORD works for JONES
SMITH works for FORD
SCOTT works for JONES
ADAMS works for SCOTT
MILLER works for CLARK
DOE works for BLAKE
14 rows selected.
Que ofrece a la salida una sola fila que contendrá los valores
especificados en las funciones definidas anteriormente.
Dentro de estas funciones, es de especial importancia, la función
COUNT, ya que esta puede tener en cuenta valores nulos en el momento de
realizar la cuenta, o no. Así, podemos ver que en la siguiente consulta, se
realiza una cuenta de todas las ocurrencias de las columnas, sin importar si
estas contienen valores nulos o no:
SELECT count(*)
FROM emp
WHERE deptno=30;
Esta consulta ofrece a la salida una sola fila (y columna) con el valor
de todas las ocurrencias de la tabla en las que se encuentre un valor en la
columna 'deptno' igual a 30. Sin embargo, en el siguiente caso, en el que se
especifica un nombre de columna, si se tienen en cuenta aquellos valores
que poseen un valor nulo:
SELECT count(comm)
FROM emp
WHERE deptno=30;
SELECT avg(nvl(comm,0))
FROM emp;
En este caso, la media tendrá en cuenta todos los valores nulos, que
serán sustituidos por un cero.
Estas funciones son llamadas "de grupo" debido a que permiten la
inclusión de una nueva cláusula que permite presentar la información por
grupos de datos que tengan características distintivas. Así podremos
agrupar la salida de una consulta que calcule la media del salario para los
distintos departamentos que existen en nuestra empresa. Esto es posible
mediante la cláusula GROUP BY que se añade a la sintaxis original de la
orden SELECT quedando como se muestra a continuación en caso de que
utilicemos funciones de grupo:
Que nos mostrará a la salida, la media del salario de cada uno de los
diferentes departamentos que podemos encontrar en nuestra empresa.
DEPTNO AVG(SAL)
--------- ---------
10 2916.6667
20 2175
30 1566.6667
DEPTNO AVG(SAL)
--------- ---------
10 1300
10 2450
10 5000
20 3000
20 950
20 2975
30 950
30 2850
30 1400
9 rows selected.
MGR MIN(SAL)
--------- ---------
7566 3000
7839 2450
7782 1300
7788 1100
TEMA 6: Subconsultas
Por último, hallaremos los empleados cuyo salario sea mayor que el
de todos los empleados (mayor que el mayor de todos los salarios) de lso
empleados cuyo trabajo sea CLERK de la siguiente manera:
FROM emp
WHERE sal>(SELECT sal
FROM emp
WHERE empno=7566)
AND job like (SELECT job
FROM emp
WHERE empno = 7369);
Otro ejemplo del uso de este tipo de operadores nos permite mostrar
aquellos empleados que están en ambas tablas a la vez de la siguiente
manera:
SELECT ename,job, deptno
FROM emp
INTERSECT
SELECT name,title,deptid
FROM emp_history;
Así, para realizar este tipo de consultas, tenemos que tener en cuenta
los siguientes puntos:
SQL> @a:/p2ej.sql
introduzca el número de depto.: 50
introduzca el nombre de depto.: DEVELOPMENT
introduzca localizacion de depto.: DETROIT
old 2: VALUES (&num_dept,'nom_dept','locdept')
new 2: VALUES (50,'nom_dept','locdept')
1 row created.
SQL>
UPDATE nombre_tabla
SET columna=valor [, columna2=valor2, .....]
[WHERE condicion]
Savepoint created.
Rollback complete.
SQL>
Asi se crea una tabla que contiene todas las columnas que devuelva
la consulta realizada en esta orden, y con todas las tuplas que devuelva esta
orden. Como ejemplo vamos a crear una tabla llamada 'dept30' que
contendrá todos los empleados de dicho departamento, y las columnas
empno, ename, y sal:
Alter table
Esta orden, nos permite modificar las columnas de una tabla, para
añadir o para modificar el tipo de dato de la columna en cuestión. La
sintaxis de la sentencia ALTER TABLE es la siguiente:
Drop table
Truncate table
Esta orden vacía el contenido de la tabla, es decir borra todas las filas
que contiene, pero deja la estructura. La sintaxis es la siguiente:
Comment on table
Vistas
Una vista crea un subconjunto de datos a partir de una tabla. Sirve
para tener un acceso más rápido a una determinada tabla, para dar acceso
solo de lectura a un usuario de las tablas etc. Existen dos tipos de vistas ,
simples y compuestas.
Las vistas simples, contienen una sola tabla, y no contiene funciones,
ni grupos de datos, así como DML (data modification languaje) a través de
Así como ejemplo vamos a crear una vista llamada EMPVU10 que
contenga el numero de empleado, el nombre y el trabajo, de todos los
empleados que pertenecen al departamento 10.
Orden que crea una vista que contendrá un campo (columna) que
será el nombre de departamento, otra columna con el salario mínimo del
departamento, otra con el salario máximo del departamento y otra con la
media del salario del departamento.
Se pueden usar operaciones DML en vistas simples. No se pueden
borrar filas si contienen funciones de grupo, una cláusula GROUP BY o la
palabra clave DISTINCT.
Para borrar una vista, se utiliza la orden DROP VIEW nombre_vista.
Secuencias
Una secuencia genera automáticamente números consecutivos. Es un
objeto ocultable y típicamente usado para crear valores de llaves primarias.
Se crean mediante la orden CREATE con la siguiente sintaxis.
SELECT dept_deptno.CURRVAL
FROM dual;
nombre_variable tipo_de_dato;
BEGIN
v_cadena:='Anderson'||':'||sysdate;
...........
BEGIN
v_cadena:='Anderson'||':'||to_char(sysdate);
...........
dbms_output.put_line({'cadena_a_mostrar',variable_de_caden
a});
DECLARE
v_deptno dept.deptno%TYPE;
v_loc dept.loc%TYPE;
BEGIN
select deptno,loc
into v_deptno,v_loc
from dept
where dname='SALES';
dbms_output.put_line(v_deptno);
dbms_output.put_line(v_loc);
END;
/
SQL> @a:/plsql1.sql
30
CHICAGO
SQL>
DECLARE
v_empno emp.empno%TYPE;
BEGIN
select empno_secuence.NEXTVAL
into v_empno
from dual;
insert into emp(empno, ename, job, deptno)
values (v_empno,'Harding','clerk', 10);
END;
/
IF condición THEN
sentencias_1;
[ELSIF condición THEN
sentencias_2;]
[ELSE
sentencias_3;]
ENDIF;
LOOP
sentencias:
...
EXIT [WHEN condición];
END LOOP;
nombre_record type_name;
job VARCHAR2(9),
sal NUMBER(7,2));
emp_record emp_record_type;
dept_record dept%ROWTYPE;
ename_table ename_table_type;
ename_table(1):='Cameron';
IF ename_table.EXISTS(1) THEN
INSERT INTO...........
CURSOR nombre_cursor IS
SELECT [lista_de variables]
FROM nombre_tabla;
OPEN nombre_cursor;
CLOSE nombre_cursor;
Orden que devolverá una fila cada vez que sea ejecutada, y avanzará
a la siguiente posición dentro de las filas que devuelve la consulta
especificada en la declaración del cursor. El funcionamiento de los
atributos de los cursores vistos anteriormente (%ROWCOUNT, %FOUND,
%NOTFOUND, %ISOPEN) es similar, solo que el valor de %ISOPEN,
puede ser TRUE en este caso si el cursor esta abierto.
Existe un tipo de bucle para los cursores, que ejecuta
automáticamente las ordenes OPEN, CLOSE y FETCH, y es el bucle FOR,
cuya sintaxis es la siguiente:
DECLARE
CURSOR c1 IS
SELECT empno, ename
FROM emp;
emp_record c1%ROWTYPE;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO emp_record;
dbms_output.put_line(to_char(emp_record.empno));
dbms_output.put_line(emp_record.ename);
DECLARE
CURSOR c1 IS
SELECT empno, ename
FROM emp;
emp_record c1%ROWTYPE;
BEGIN
FOR emp_record IN c1 LOOP
dbms_output.put_line(to_char(emp_record.empno));
dbms_output.put_line(emp_record.ename);
END LOOP;
END;
/