Practica en Clases Mas de SQL (DEPTyEMP)

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 28

UNIVERSIDAD TECNOLÓGICA DE PANAMÁ

FACULTAD DE INGENIERIA DE SISTEMAS COMPUTACIONALES


DEPARTAMENTO DE SISTEMAS DE INFORMACION, EVALUACION Y
CONTROL DE RECURSOS INFORMATICOS
LICENCIATURA EN DESARROLLO DE SOFTWARE

PRÁCTICA #1

INDIVIDUAL

Prof. Luis A. Martínez H. Grupo: ________

Valor de la práctica: 10 ptos. Nombres: Luis Barnett

Oracle es un sistema gestor de Bases de datos relacionales y utiliza, para consultar los datos
que mantiene, el lenguaje SQL. Este lenguaje es el que se analiza a continuación, en sus tres
aspectos, consulta, modificación, y manipulación de los datos. Los ejemplos que se incluyen se
realizan sobre unas tablas, que corresponden a un modelo relacional sencillo, y son las
siguientes:
Para que el estudiante adquiera mayor conocimiento del lenguaje SQL deberá realizar las
prácticas que siguen a continuación, las cuales explican detalladamente el uso de los diferentes
comandos SQL y mostrando los resultados de la ejecución de los mismos.

TEMA 1: Mandato "Select" Básico.

La sintaxis de este mandato es:


SELECT [DISTINCT] {*, nombre_columna [alias], ....}
FROM nombre_tabla [alias];
Este mandato muestra los valores incluidos en las columnas seleccionadas de la
tabla especificada. Los comandos incluidos entre corchetes, son opcionales, y los
incluidos entre llaves indican que ha de escogerse entre uno de ellos. Por
ejemplo, la siguiente consulta:
SELECT ename, job, sal
FROM emp;
Muestra el siguiente resultado:
La opción "distinct" selecciona únicamente las diferentes ocurrencias que
existen en las tuplas de una columna, o conjunto de ellas.
La opción "*" selecciona todas las columnas de la tabla especificada. Si
especificamos únicamente una columna de la tabla, deberemos incluir su nombre.
Podemos asignarle un alias, es decir, un encabezamiento de la columna en
la salida producida, que describa el contenido de las tuplas de la columna que se
va a mostrar. Para poder incluir un alias, se escribe dicho alias después del
nombre de la columna, sin coma. Si el alias posee espacios entre sus caracteres
deberemos usar las comillas dobles para delimitar dicho alias. También se puede
incluir opcionalmente la palabra clave "AS" para indicar que se debe renombrar la
columna con la palabra que se incluye después.
Existen operadores que permiten realizar cambios sobre los datos de salida,
estos operadores son:
TEMA 2: Restricción y Ordenación de los datos
recuperados

Vamos a incluir en la sintaxis del mandato "select" básico, una nueva


sentencia, "WHERE", que nos va a permitir restringir la salida del mandato según
las condiciones indicadas en esta sentencia. Así, la sintaxis queda como:
SELECT [DISTINCT] {*, columna [alias],...}
FROM nombre_tabla
[WHERE condition(s)];

Como se puede observar, la inclusión de esta cláusula es opcional. Un


mandato "select" con una cláusula "where" mostrará únicamente los datos que
cumplan la condición especificada en ella. La condición se expresa mediante una
serie de operadores que son:

Se pueden concatenar condiciones, de manera que la salida será según el


operador:
Para ordenar los datos que recuperamos mediante el mandato "select", se
usa la cláusula "ORDER BY nombre_columna" así tenemos ahora:

SELECT [DISTINCT] {*, columna [alias],...}


FROM nombre_tabla
[WHERE condition(s)]
[ORDER BY column_name [{DESC, ASC}];

Se puede observar que esta cláusula también es opcional. La ordenación es


por defecto ascendente, es decir, de menor a mayor, excepto en el caso de que se
incluya la palabra reservada "DESC". Esta palabra reservada, hay que incluirla para
cada una de las columnas que se incluyen dentro de la sentencia 'ORDER BY...'. Por
ejemplo, la consulta:

SELECT ename, sal, comm FROM emp WHERE comm IS NOT NULL ORDER BY sal,comm DESC;

Ofrece la salida:

Donde se puede observar que se ha ordenado de mayor a menor la columna


de las comisiones ('comm') pero de menor a mayor en el campo del salario,
tomando además este como el campo de ordenación principal. Así, el salario ('sal')
esta ordenado en orden ascendente por defecto. Para poder ordenar en orden
descendente de salario y comisiones la consulta correcta es:

SELECT ename,sal,comm
FROM emp
WHERE comm IS NOT NULL
ORDER BY sal DESC,comm DESC;
Que ofrece la salida:
TEMA 3: Funciones sobre cadenas de caracteres
y tipos de datos especiales.
Funciones para cadenas:

Para la manipulación de cadenas de caracteres existen funciones como:

Estas funciones nos permiten consultas como:

SELECT ename, job, hiredate


FROM emp
WHERE LOWER(ename)='blake';
Donde el nombre que encontramos en la tabla, puede estar escrito de
cualquier manera, pero se pasa a letras minúsculas para ser comparado con el
nombre 'blake'.

ENAME JOB HIREDATE

BLAKE MANAGER 01-may-81


Funciones numéricas:

También existen funciones numéricas tales como:

Donde la utilidad de estas es similar a la que se muestra en el conjunto de


funciones anterior, pero además se puede utilizar (como las anteriores también) en
consultas como la siguiente:

SELECT empno,ename,sal,round (sal*1.15) "New Salary"


FROM emp;

Que ofrece la salida siguiente:


Donde en la columna 'New Salary', se ofrece el redondeo de la cifra
obtenida al multiplicar el salario del trabajador por 1.15.

Funciones para fechas:

También existen funciones específicas para el tipo de dato 'fecha', de Oracle que
son:

Para realizar conversiones explicitas entre tipos de datos en relación al tipo


de dato 'fecha', se usan funciones como:

En este último grupo de funciones, encontramos un parámetro, que es el


formato de fecha. Este formato está formado por una serie de caracteres dados,
que permiten al SGBD determinar el formato en el que se ha pasado la fecha. El
formato por defecto es: DD-Month-YY, es decir, una fecha con este formato podría
ser: '12-May-03'. Estos caracteres especiales son:
Como ejemplo, podemos ver los empleados dados de alta entre el 20 de
febrero del 81, y el 1 de mayo del mismo año.
SELECT ename,hiredate
FROM emp
WHERE hiredate BETWEEN to_date('20-February-81','DD-Month-RRRR') AND
to_date('01-May-81','DD-Month-RRRR');

ENAME HIREDATE
WARD 22-feb-81

JONES 02-APR-1981

BLAKE 01-may-81
ALLEN 20-feb-81

Funciones especiales:
Existen otras funciones especiales, no asociadas a ningún tipo de dato en
especial, entre las que podemos encontrar:

• NVL(columna,sustitución): Permite cambiar cualquier valor nulo por el dato


que interese. Detecta los valores nulos en la columna pasada como primer
parámetro y los sustituye por el dato pasado en el segundo parámetro. Por
ejemplo, en esta consulta, se muestra con un cero a los empleados que no
ganan comisiones:

SELECT ename, NVL(comm,0) "Commisions"
FROM emp;

Esta función es especialmente interesante ya que cualquier operación con un


dato nulo da como resultado otro dato nulo, lo cual puede no interesarnos, en
casos como el de calcular el salario total de todos los empleados, ya que
aquellos que no cobran comisión, tienen un valor NULL en este campo
(comm=NULL), y sumado al salario, daría el valor nulo, con lo que la salida
no sería correcta.

• DECODE: Esta función es similar a un "case" de C, o un "Según" en


pseudocódigo, permite especificar los valores a mostrar, según una columna
dada, o el valor de una expresión. Por ejemplo:

SELECT job, sal, DECODE (job, 'ANALYST', sal*1.1,


'CLERK', sal*1.5,
'MANAGER',sal*1.20,
sal) "Revised Salary"
FROM emp;
De esta manera adecuamos la subida de salario en función del trabajo.
TEMA 4: Productos Cartesianos.
En este tema se aprende a obtener datos de múltiples tablas dentro de la
base de datos que tenemos, así en nuestro caso, tenemos las tablas 'emp' y 'dept'
definidas al comienzo del presente documento. Para ello es necesario que ambas
tablas posean una clave foránea, que es un campo que permite relacionar los datos
que ambas contienen, así, para conocer la localización del departamento donde
trabaja un empleado, necesitaremos ambas tablas.

Este tipo de consultas se realiza teniendo en cuenta los siguientes puntos:

• Incluir las tablas que vamos a necesitar en la cláusula 'from' que en nuestro
caso serán, como ya se ha dicho antes, las tablas 'emp' y 'dept'.
• Es necesario, en algunos casos, definir a que tabla pertenece la columna que
deseamos recuperar con nuestra consulta. Así, en caso de que una columna
este en ambas tablas, se deberá hacer mención a esas columnas mediante el
nombre de la tabla, un punto, y el nombre de la columna.
• También, debemos evitar que se produzca un producto cartesiano. Siempre
que utilicemos dos o más tablas en una consulta, deberemos "emparejar" las
tuplas de las tablas, de manera que el SGBD de Oracle pueda mostrarnos la
información correcta. si no se realiza esta acción, emparejará cada tupla de
una tabla con todas las de la otra u otras, es decir, realiza un producto
cartesiano de las tablas que intervienen en la consulta.

A continuación veremos un ejemplo de lo que se acaba de explicar. Supongamos


que queremos recuperar los nombres de los trabajadores, y el departamento
donde trabajan, así como la localización de este departamento. Podríamos realizar
la siguiente consulta, sin tener en cuenta el producto cartesiano, que provocará
que la salida sea incorrecta:

SELECT ename, deptno, loc


FROM emp, dept;

Esta consulta ofrece a la salida lo siguiente:


Debido a que la columna 'deptno', está definida tanto en la tabla 'emp' como
en la tabla 'dept', así es que nos informa de que la columna está definida
ambiguamente. Si subsanamos ese error, queda la consulta:

SELECT ename, dept.deptno, loc


FROM emp, dept;
Tal y como podemos comprobar, esta no es la salida que deseamos obtener,
ya que tenemos 60 filas, y en realidad en nuestra empresa tan solo hay 15
trabajadores, luego algo ha pasado. Efectivamente se ha producido un producto
cartesiano entre las tuplas de las tablas 'emp' y 'dept'. Para evitar esto, debemos
emparejar cada empleado con la localización del departamento en que trabaja,
ya que antes se han emparejado todos los empleados con todos los
departamentos existentes en nuestra empresa (producto cartesiano). Así, la
consulta correcta que nos ofrece los datos requeridos es:

SELECT ename, dept.deptno , loc


FROM emp, dept
WHERE emp.deptno=dept.deptno;
Dependiendo del tipo de relación a que estén sujetas las tablas, se pueden
definir varios tipos de emparejamiento dentro de este tipo de consultas que
veremos mediante ejemplos, así, tenemos:

• Equijoins (igualdad): Cuando la relación es de uno a uno, es el caso anterior.


Un ejemplo es la consulta realizada anteriormente.
• Non-equijoins (no igualdad): son relaciones que no son de igualdad, como
ejemplo utilizaremos la tabla 'salgrade' en la siguiente consulta:

Pero antes debe crear la siguiente tabla e introducirle los datos que siguen a
continuación:

CREATE TABLE SALGRADE


(GRADE NUMBER,
LOSAL NUMBER,
HISAL NUMBER)

INSERT INTO SALGRADE VALUES (1,700,1200);


INSERT INTO SALGRADE VALUES (2,1201,1400);
INSERT INTO SALGRADE VALUES (3,1401,2000);
INSERT INTO SALGRADE VALUES (4,2001,3000);
INSERT INTO SALGRADE VALUES (5,3001,9999);
INSERT INTO SALGRADE VALUES (6,10000,12500);
Ahora ejecute la siguiente sentencia:

SELECT ename, sal, grade


FROM emp, salgrade
WHERE sal BETWEEN losal AND hisal;

Que ofrece la siguiente salida:

• Outer-joins (filas que no tienen ningún valor): Si existen filas que no tiene
ningún valor asociado, ejemplo:

SELECT e.ename, d.deptno, d.dname


FROM emp e, dept d
WHERE e.deptno(+)=d.deptno
ORDER BY e.deptno;
Que ofrece la siguiente salida:

Donde se puede observar que se coloca el símbolo (+) para indicar que la
salida puede ser nula en los campos que poseen ese símbolo, y así, mostramos
todos los departamentos existentes, aunque estos no tengan asignado ningún
trabajador.

• Self-joins (para datos almacenados en la misma tabla): este tipo de consultas,


se realizan entre datos de la misma tabla. Como se ha podido observar, se
pueden asignar alias a las tablas, de manera que no haga falta que se escriba
el nombre completo de la tabla cuando queremos distinguir dos campos de
igual nombre, pero que pertenecen a tablas distintas. esto podemos usarlo para
realizar consultas como la siguiente:

SELECT worker.ename||' works for '||manager.ename


FROM emp worker, emp manager
WHERE worker.mgr=manager.empno;
Consulta que ofrece a la salida, el nombre de todos los empleados, y el jefe del cual
depende:
Al final de la práctica el estudiante hará lo siguiente:

1- Hacer un resumen de todas las observaciones que encontró en cada


tema.
2- Las observaciones deben estar bien documentadas haciendo referencia a
la instrucción o sentencia de la cual se trata el tema y los resultados
obtenidos en su nube de Oracle, señalando las diferencias si las hay.
DOCUMENTACION

Tema 1

En este tema pudimos observar el funcionamiento de Select. El cual


elige una tabla y sus datos y no los muestra. Al añadir distinc selecciona
únicamente las diferentes ocurrencias que existen en las tuplas de una
columna, o conjunto de ellas.
TEMA 2
Un mandato "select" con una cláusula "where" mostrará únicamente
los datos que cumplan la condición especificada en ella.

SELECT ename, sal, comm FROM emp WHERE comm IS NOT NULL
ORDER BY sal,comm DESC;

SELECT ename,sal,comm
FROM emp
WHERE comm IS NOT NULL
ORDER BY sal DESC,comm DESC;
TEMA 3

FUNCIONES PARA CADENAS DE CARACTERES:


➢ LOWER
➢ UPPER
➢ INITCAP
➢ CONCAT
➢ SUBSTR
➢ LENGTH
➢ LPAD
Nos permite hacer consultas como la siguiente:

Funciones Matematicas

➢ ROUND
➢ TRUNC
➢ MOD
FUNCIONES PARA FECHAS:

➢ MONTHS_BETWEEN
➢ ADD_MONTHS
➢ NEXT_DAY
➢ LAST_DAY

FUNCIONES ESPECIALES
➢ NVL
➢ DECODE
TEMA 4
En el tema de productos cartesianos en bases de datos, se aprende a obtener datos de múltiples tablas
dentro de la base de datos. Para ello, es necesario que las tablas tengan una clave foránea que permita
relacionar los datos entre ellas. Al realizar consultas con múltiples tablas, es importante incluir las tablas
necesarias en la cláusula FROM, y en algunos casos, especificar a qué tabla pertenece una columna en
particular. También es crucial evitar que se produzca un producto cartesiano, emparejando las tuplas de
las tablas de manera adecuada para obtener la información correcta.

Debido a que la columna 'deptno', está definida tanto en la tabla 'emp' como en la
tabla 'dept', así es que nos informa de que la columna está definida ambiguamente.
Si subsanamos ese error, queda la consulta:
Tal y como podemos comprobar, esta no es la salida que deseamos obtener, ya que tenemos 60 filas, y
en realidad en nuestra empresa tan solo hay 15 trabajadores, luego algo ha pasado

Dependiendo del tipo de relación a que estén sujetas las tablas, se pueden
definir varios tipos de emparejamiento dentro de este tipo de consultas que
veremos mediante ejemplos, así, tenemos:

• Equijoins (igualdad): Cuando la relación es de uno a uno, es el caso anterior.


Un ejemplo es la consulta realizada anteriormente.
Non-equijoins (no igualdad): son relaciones que no son de igualdad, como ejemplo
utilizaremos la tabla 'salgrade' en la siguiente consulta.
Donde se puede observar que se coloca el símbolo (+) para indicar que la salida
puede ser nula en los campos que poseen ese símbolo, y así, mostramos todos los
departamentos existentes, aunque estos no tengan asignado ningún trabajador.

También podría gustarte

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy