Diseño de bases de datos Práctica-1 Definición de datos

Documentos relacionados
Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

Oracle Express y Toad for Oracle

Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers

Creación y Gestión de Tablas. Copyright Oracle Corporation, All rights reserved.

Constraints (Restricciones) Copyright Oracle Corporation, All rights reserved.

Informática Básica Práctica Tema 3 Ejercicios de SQL

Grupo Kybele, Pág. 1

Sistema Gestor de Bases de Datos Relacionales (SGBDR), que maneja distintos tipos de datos:

GBD Diseño físico de DDBB

Triggers 27/11/2014. Escuela Técnica Superior de Ingeniería Informática Departamento de Lenguajes y Sistemas Informáticos. Triggers en Oracle

Ejercicios SQL - Select TutorialesNET Versión Revisión 1 25 de julio de 2015

Unidad. Lenguaje SQL. (Structured Query Language)

CHAR VARCHAR2 VARCHAR NCHAR NVARCHAR2 LONG

CREACIÓN, SUPRESIÓN Y MODIFICACIÓN DE TABLAS.

Bases de Datos Ejercicios de SQL

ÍNDICE INTRODUCCIÓN...17

3. El catálogo 26. Laboratorio de Bases de Datos

Tema 4. Manipulación de datos con SQL

1. Lenguaje de Definición de Datos. 2. Lenguaje de Manipulación de. Datos. M. C. Gustavo Alfonso Gutiérrez Carreón

Access SQL: DDL y DML. Una empresa de Ingeniería precisa una base de datos para la gestión de sus proyectos.

Diseño de bases de datos

Ampliación de Bases de Datos Práctica 1: El lenguaje PL/SQL de Oracle Sesión 1: Introducción al PL/SQL

LEA ATENTAMENTE LAS PREGUNTAS Y RESUELVA CADA EJERCICIO COMO SE INDIQUE (EN CASO CONTRARIO EL EJERCICIO NO PUNTUARÁ) CADA EJERCICIO VALE UN PUNTO

Escritura Básica de Sentencias SQL. Copyright Oracle Corporation, All rights reserved.

BASE DE DATOS - CURSO 02/03 PRÁCTICA 2: SQL: Lenguaje de definición de datos (DDL)

Integridad Referencial. Restricciones (constraints)

Introducción a SQL sobre Oracle

Creación de Vistas. Copyright Oracle Corporation, All rights reserved.

A.1. Definiciones de datos en SQL

DISPARADORES EN SQL DISPARADORES EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999 SINTAXIS GENERAL DE UN DISPARADOR EN SQL:1999

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

ÍNDICE. Introducción... Capítulo 1. Novedades de Access

Bases de Datos I Práctica 1 Ejercicios de SQL

ÍNDICE. Introducción... XVII. Capítulo 1. Oracle 10g y el Grid Computing... 1

Diseño físico de datos. Oracle

Tutorial de SQL - El comando SELECT

m047a Curso Programando una Base de Datos SQL Server 2008, 36 h Creación B.D. y Constraints

LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)

Modulo I: Introducción Gestores de Bases De Datos

Manipulación de Datos. Copyright Oracle Corporation, All rights reserved.

TEMA 6: LENGUAJE DE DEFINICIÓN DE DATOS (LDD)

Introducción al lenguaje SQL

EL ENTORNO DE TRABAJO SQL ORACLE

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: DML. Ing. Alfonso Vicente, PMP

Introducción SQL. Ges2ón y Modelación de Datos María Constanza Pabón

Interacción con el Servidor Oracle8. Copyright Oracle Corporation, All rights reserved.

VISUALIZACIÓN DE DATOS A PARTIR DE VARIAS TABLAS

Guía de ejercicios de SQL Prof. Mauricio E. Fernández N. Semestre Agosto-Diciembre de 2012

GONZALEZ VARGAS ANA KAREN GUTIERREZ MUNGUIA LUIS DANIEL TELLEZ ARCOS DIANA FATIMA PROBLEMA A RESOLVER

GESTORES GESTORES DE BASES DE DATOS

CURSO DE SQL SERVER 2005

Tema 33. El lenguaje SQL

RESUMEN DEL LENGUAJE SQL

SQL Los fundamentos del lenguaje

Si queremos modificar la contraseña de sys, una vez que accedamos al sistema como sys, escribiremos la sentencia:

Funciones, procedimientos y cursores en Oracle

RICHARD ALEXANDER BETANCUR SIERRA

SINTAXIS DE SQL-92. <definición de esquema >::= CREATE SCHEMA <cláusula de nombre de esquema> [ <elemento de esquema>... ]

Integridad en sistemas de bases de datos relacionales

Manual de introducción SQL Centro de Tecnología Informática

LENGUAJE DE CONSULTA ESTRUCTURADO - SQL CONTENIDO

Temario. Índices simples Árboles B Hashing

Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando su:

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

Práctica Consultas SQL DML

SUBPROGRAMAS PL/SQL César Martínez C. Profesor Instructor de Base de Datos Sede Puente Alto DUOC

Subconsultas Multi-Columna. Copyright Oracle Corporation, All rights reserved.

Lenguaje para descripción de datos

Vistas en InformiX Sistemas de Bases de Datos II EMT CETP A/S Leonardo Carámbula

Oracle Database: Introducción a SQL

Administración Básica de Oracle9i

//Sección de manejo de excepciones. Las rutinas de manejo de errores //aparecen aqui

Conceptos de Bases de Datos Relacionales Triggers

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

ORACLE 10g. Descripción A QUIEN VA DIRIGIDO?

El Lenguaje SQL TEMA V. Grupo de Bas ses de Datos Avanzadas Univ. Carlo os III de Madrid. V.1 SQL como Lenguaje de Definición de Datos

3 GESTIÓN DE TABLESPACES

Lenguaje SQL (2ª Parte) Definición de datos

8 SQL SERVER 2008 RA-MA

ÍNDICE PRIMERA PARTE... 17

Ejemplo de gestión de datos con SQL

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Bases de Datos 2. Teórico

ÍNDICE INTRODUCCIÓN...13

Práctica 4: Estudio del SGBD Oracle 10 Gestión de Transacciones

MANUAL BÁSICO DEL LENGUAJE SQL

Restricciones de Integridad

MANUAL BÁSICO DE MYSQL

Bases de Datos: Structured Query Language (SQL)

Diseño de Bases de Datos y Seguridad en la Información &8562

APÉNDICE SQL (Structures Query Language)

SQL (Structured Query Language)

8 MICROSOFT SQL SERVER 2008 R2. CURSO PRÁCTICO RA-MA

Grandes volúmenes de datos Particionamiento. bases de datos

Estándar de desarrollo de aplicaciones del Govern de les Illes Balears

SQL (Structured Query Language)- DML

PROGRAMANDO BASES DE DATOS PostgreSQL INTRODUCCIÓN INTRODUCCIÓN A LAS BASES DE DATOS (L1)

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

PROGRAMAS DE ESTUDIO FORMATO 7 INTRODUCCIÓN A SQL. Área de Formación Profesional

Características del lenguaje SQL

Transcripción:

Departamento de Lenguajes y Sistemas Informáticos Avda Reina Mercedes s/n. 41012 Sevilla Tlf/Fax 954 557 139 E-mail lsi@lsi.us.es www.lsi.us.es E.T.S. Ingeniería Informática Diseño de bases de datos Práctica-1 Sevilla, febrero 2007 V 2007.02.2

Indice 1 INTRODUCCIÓN... 3 2 CREACIÓN DE TABLAS... 3 2.1 SINTAXIS DE CREACIÓN DE TABLA... 3 2.1.1 Tipos de datos.... 3 3 RESTRICCIONES DE INTEGRIDAD.... 4 3.1 SINTAXIS PARA RESTRICCIONES DE INTEGRIDAD.... 4 3.1.1 Restricciones sobre columnas.... 4 3.1.2 Restricciones sobre tablas... 5 3.1.3 Ejemplos... 5 4 SQL VS SQL*PLUS... 5 4.1 LOGGING EN SQL*PLUS... 5 4.2 LOGGING EN SQL*PLUS WORKSHEET.... 7 EJERCICIO 1.... 8 EJERCICIO 2... 10 Pág. 2 de 12

1 Introducción. Las tablas son las unidades básicas de almacenamiento de datos. Veremos como se crean las tablas en Oracle y como se definen las restricciones de integridad asociadas a dichas tablas. En ausencia de dominios, se definirán las columnas y se asociarán todas las restricciones de integridad semánticas admitidas (Nulos, Claves Primarias, Claves Alternativas (Claúsula UNIQUE)) y restricciones de integridad sobre valores de columnas en la tabla (Cláusula CHECK). 2 Creación de tablas. Para crear una tabla es necesario tener el privilegio CREATE TABLE y un Área de Almacenamiento. 2.1 Sintaxis de creación de tabla. CREATE TABLE [esquema.]tabla {(columna tipo_de_datos [DEFAULT expr] [restricción_columna] [restricción_tabla] [,columna ] [TABLESPACE nom_tablespace CLUSTER nom_cluster (columna [,columna])] [AS consulta] }; restricción_columna y restricción_tabla: son las restricciones impuestas a la columna y tabla. nom_tablespace: indica el espacio lógico donde se quiere almacenar la tabla. Si no se especifica se utiliza el asignado por defecto. nom_cluster: es el nombre del agrupamiento si la tabla forma parte de uno. Las columnas listadas son las columnas que la tabla aporta al agrupamiento, generalmente, las claves primarias. Si se especifica un cluster ya no se especifica el tablespace ya que se utilizará el tablespace donde se encuentra el agrupamiento. consulta: inserta los registros procedentes de una consulta. No se especificarán los tipos de datos ya que se toman de la consulta. La restricción PRIMARY KEY no se copia y se añade con ALTER TABLE. 2.1.1 Tipos de datos. Tipo Descripción VARCHAR2 (s) Caracteres de longitud variable. Máximo s caracteres. Límite 4000 caracteres. CHAR (s) Caracteres de longitud fija. Límite 2000 caracteres. NUMBER (p,s) Numérico. DATE Fecha/hora LONG Caracteres de longitud variable. Límite 2Gb. RAW (s) Datos binarios de longitud fija. LONG RAW Datos binarios de longitud variable. Límite 2Gb. Pág. 3 de 12

3 Restricciones de integridad. Es importante que los datos de una base de datos, estén sujetos a reglas de integridad predefinidas. Oracle permite definir y forzar que se verifiquen las reglas de integridad de los datos declarando Restricciones de Integridad y definiendo Database Triggers. Una Restricción de Integridad, es un método declarativo de definir una restricción para una columna de una tabla. Oracle soporta: Not Null. No admite valores nulos. Unique. Sólo admite valores únicos. Primary Key. Clave primaria. Check. Definición de reglas complejas. Foreign Key. Restricciones de integridad referencial. Soporta las acciones Update y Delete Restrict y Delete Cascade. Se declaran al crear ó modificar la tabla (CREATE/ALTER TABLE). 3.1 Sintaxis para restricciones de integridad. Pueden ser aplicadas sobre columnas, que se colocan tras la definición de la columna o sobre la tabla, que implican más de una columna. 3.1.1 Restricciones sobre columnas. [CONSTRAINT restricción] [NOT NULL [UNIQUE PRIMARY KEY] [REFERENCES [esquema.]tabla [(columna)] [ON DELETE CASCADE] ] [CHECK (condición) ] ] [[USING INDEX [TABLESPACE nom_tablespace ]] DISABLE] Restricción: nombre que le damos a la restricción. Por defecto, Oracle le signa SY_Cn, siendo n un entero. NOT NULL: no admite valores nulos. UNIQUE: los valores de la columna son únicos. PRIMARY KEY: la columna es clave primaria. REFERENCES: indica que la columna es clave ajena en una relación de integridad referencial. ON DELETE CASCADE: Mantiene la integridad referencial eliminando los registros del lado relacionado cuando se eliminan los registros del lado principal de la relación. CHECK: todo valor que se introduzca en la columna debe cumplir la condición Admite las mismas expresiones que una cláusula WHERE. USING INDEX: indica el tablespace donde se almacenan los índices generados por UNIQUE y PRIMARY KEY. DISABLE: permite desactivar la restricción al crearla. Se puede activar con ENABLE/DISABLE del ALTER TABLE. Pág. 4 de 12

3.1.2 Restricciones sobre tablas. [CONSTRAINT restricción] [[UNIQUE PRIMARY KEY] (columna [, columna] ) [FOREIGN KEY (columna [, columna] ) REFERENCES [esquema.]tabla [(columna)] [ON DELETE CASCADE] ] [CHECK (condición) ] ] [[USING INDEX [TABLESPACE nom_tablespace ]] DISABLE] 3.1.3 Ejemplos. CREATE TABLE dept (Deptno NUMBER(2) PRIMARY KEY, Dname VARCHAR2(14), Loc VARCHAR2(10) NOT NULL, CONSTRAINT dept_dname_uk UNIQUE (Dname), CONSTRAINT dept_deptno_ck CHECK (Deptno BETWEEN 10 ADND 99); CREATE TABLE emp1 AS SELECT * FROM emp; 4 SQL vs SQL*Plus. SQL es un lenguaje para acceder a los datos del servidor. PL/SQL es un lenguaje procedural de Oracle que extiende SQL con lógica de aplicación. SQL*Plus es una herramienta de Oracle que permite editar sentencias SQL y PL/SQL, enviarlas al servidor y recoger su respuesta. Tiene su propio lenguaje de comandos. (Ej. el comando DESCRIBE tabla presenta la estructura de una tabla.) Permite crear ficheros de script para almacenar sentencias PL/SQL. 4.1 Logging en SQL*Plus. Al acceder desde el entorno Windows aparece: Pág. 5 de 12

Para ver las tablas que existen en el sistema se puede consultar la tabla tabs (guarda información de la estructura de todas las tablas existentes). Mediante la opción Spool es posible crear un fichero script. Crea un archivo con extensión.lst donde se almacenarán los script (.sql) creados. SQL> edit ejemplo3 Aparece el editor y se crea el script ejemplo3.sql Pág. 6 de 12

start ejemplo3: Ejecuta dicho script. 4.2 Logging en SQL*Plus worksheet. Pág. 7 de 12

QUIT Ejecutar / F5 Historial Ejercicio 1. a) Crear la tabla de empleados. Cada empleado puede tener un jefe o ninguno (null). El jefe es a su vez un empleado por lo que hay una clave ajena definida sobre la misma tabla. CREATE TABLE empleados (cod_emp char(4), nom_emp char(10) not null, salario integer DEFAULT 10000, fecha_nac date DEFAULT SYSDATE, comision integer CONSTRAINT mas_comision CHECK (comision>100), cod_jefe char(4), PRIMARY KEY (cod_emp), FOREIGN KEY (cod_jefe) REFERENCES empleados ON DELETE CASCADE); Pág. 8 de 12

b) Insertar filas en dicha tabla c) Borrar datos. Para borrar las filas y borrar además la definición de las tablas en el diccionario de datos se utiliza: DROP TABLE [esquema.]tabla [CASCADE CONSTRAINT] d) Modificar los datos. Pág. 9 de 12

Ejercicio 2. Utilizar las tablas emp y dept 1.- Hacer una consulta sobre la tabla empleados. select * from emp; 2.- Obtener el nombre de todos los departamentos y su localización, formateando la columna para una mejor presentación. Antes de escribir la consulta hay que consultar las columnas de la tabla. desc dept; select dname Nombre Dept, loc Localización from Dep; 3.- Listar el nombre, ocupación y salario de aquellos empleados cuyo salario sea mayor que 1600. select ename, job from emp where sal > 1600; 4.- Obtener aquellos empleados que trabajen en el departamento 20, su sueldo sea mayor que 800 dólares y su nombre empiece por S. select * from emp where deptno=20 and sal > 800 and ename like S% ; 5.- Obtener el nombre y el departamento de aquellos empleados que se encuentren en el departamento 10 y 20 y cuya comisión no sea nula. (Añadir al final ordenación del nombre). select ename,deptno from emp where deptno in (10,20) and comm is not null order by 1 desc; 6.- Obtener de la tabla de empleados un listado con los distintos departamentos en los que los empleados trabajan. select distinct deptno from emp; 7.- Visualizar el nombre, empleo y fecha de incorporación de aquellos empleados que hayan entrado en la empresa entre las siguientes fechas: 02-APR- 81 y 23-JAN-82. select ename, job, hiredate from emp where hiredate >= to_date('02/04/1981') and hiredate <= to_date('23/01/1982'); select ename, job, hiredate from emp where hiredate between to_date('02/04/1981') and to_date('23/01/1982'); 8.- Queremos que por cada empleado aparezca la siguiente linea: El empleado NOMBRE se dio de alta en la empresa el FECHA. select El empleado ename se dio de alta en la empresa el hiredate from emp; 9.- Por cada jefe o manager obtener el número de empleados y la media de sus sueldos + comisiones (en el caso de que las hubiera), solo para los empleados que pertenezcan al departamento 20. Formatear las columnas. No contar al Presidente Ordenar descendente por manager. select mgr Manager, count(*) Num de empleados, AVG(sal+nvl(comm,0)) Media de salarios from emp where mgr is not null group by mgr order by mgr desc; select mgr Manager, count(*) Num de empleados, AVG(sal+nvl(comm,0)) Media de salarios from emp group by mgr having mgr is not null order by mgr desc; Pág. 10 de 12

10.- Obtener para cada empleado el nombre y la localización del departamento en el que se encuentran. select a.ename Empleado, b.dname Departamento,b.loc Localizacion from emp a, dept b where a.deptno=b.deptno; 11.- De la tabla de departamentos obtener aquellos que tengan al menos un empleado. select * from dept where deptno in (select distinct deptno from emp); 12.- Obtener el nombre y ocupación de todos aquellos empleados que trabajen en el departamento de SMITH. Select ename, job from emp where deptno = (select deptno from emp where ename= SMITH ); 13.- Obtener el nombre y departamento de aquellos empleados cuyo sueldo sea mayor que cualquier salario del puesto de CLERK select ename, deptno from emp where sal > ANY (select sal from emp where job= CLERK ); 14.- Obtener los empleados, junto con sus salarios, que ganan más que la media de su departamento. select a.ename, a.sal, b.promedio from emp a, ( select deptno,avg(sal) AS promedio from emp group by deptno ) b where a.sal > b.promedio and a.deptno=b.deptno; (Estos comandos de actualización (insert, update y delete) son bloqueantes, por lo que es posible que las sentencias tarden un poco o no se puedan llevar a cabo) 15.- Realizar las siguientes inserciones: En la tabla de empleados introducir los siguientes empleados: EMPNO: 7935 ENAME: Santiago JOB: Clerk MGR: 7902 HIREDATE: Fecha actual SAL: 799 COMM:0 DEPTNO: 40 Insert into emp values (7935, SANTIAGO, CLERK,7902,SYSDATE,799,0,40); =================================== EMPNO: 7936 ENAME: Juan JOB: MGR: ó HIREDATE: el 29 de Febrero del 2004 SAL: COMM:5 DEPTNO: Insert into emp (empno,ename,hiredate,comm) values (7936, JUAN, TO_DATE ( 29/02/2004, DD/MM/YYYY ), 5); Insert into emp values (7936, JUAN, NULL,NULL, TO_DATE ( 29/02/2004, DD/MM/YYYY ), NULL 5,NULL); En la tabla manager introducir todos aquellos empleados que sean manager: Columna Tipo ID_MGR NUMBER(4) NOT NULL MGR_NAME VARCHAR2(10) SAL NUMBER(7, 2) HIREDATE DATE Pág. 11 de 12

insert into manager (id_mgr,mgr_name,sal,hiredate) select empno,ename,sal,hiredate from emp where job= MANAGER ; commit; De esta forma podemos introducir más de una fila a la vez basándonos en otras tablas. (Dos personas no pueden insertar a la vez el mismo registro pero si se pueden realizar inserciones distintas de forma simultanea. En el segmento de rollback se almacen los rowid de las filas que se están insertando, de tal forma que si hacemos rollback Oracle las puede localizar y borrar. Hasta que no se haga commit las personas que hagan SELECT sobre la tabla no verán las nuevas filas). 16.- Como se harían las siguientes modificaciones? a) Dar una comisión con valor 0 a todos los empleados de la empresa. Update emp set comm=0 ; b) Actualizar el departamento haciendo que todos pertenezcan al departamento localizado en BOSTON. Update emp set deptno=(select deptno from dept where loc= BOSTON ); c) Bajarle el sueldo al PRESIDENT a 4000. Update emp set sal=4000 where job= PRESIDENT ; (Update funciona bloqueando en la tabla aquellas filas que va a modificar, por lo cual éstas no pueden ser consultadas hasta que se ejecute un comando de commit/rollback. A medida que se va realizando la actualización los registros antiguos se van almacenando en el segmento de rollback. Si se lleva a cabo una operación de rollback todos los registros almacenados en el segmento de rollback volverán a su lugar). 17.- Escribir las sentencias necesarias para realizar las siguientes eliminaciones de registros. a) Eliminar todos los registros de la tabla departamentos. Delete from dept; ó Truncate table dept; El truncado es más rápido por las siguientes razones: - No genera información de Rollback - No ejecuta los triggers de Delete que la tabla tenga asociados. b) Eliminar aquellos empleados cuyo jefe sea el empleado Clark Delete from emp where mgr = (select empno from emp where ename= CLARK ); Pág. 12 de 12