Fundamentos de Base de Datos1.odt
Fundamentos de Base de Datos1.odt
Fundamentos de Base de Datos1.odt
Objetivos
- distinguir entre software de aplicación y software del sistema y dar un ejemplo de cada uno
- aplicar las reglas de SQL para mostrar todas las columnas y un subjuego de columnas
especificas por criterios
- en este curso se aprenderá sintaxis de SQL mediante la aplicación Oracle Application Express
Programas de aplicaciones
Aunque las computadoras han existido durante mucho tiempo, su uso en el ámbito
personal y de los negocios no se produjo hasta que se desarrollaron los programas de
software de aplicaciones
El software del programa de aplicación es distinto al software del sistema. El software del
sistema consta de programas de bajo nivel diseñados para interactuar con el hardware de la
computadora. Los sistemas operativos, compiladores y utilidades del sistema son ejemplos de
software del sistema. Por el contrario, el software de aplicación incluye programas para
procesamiento de texto, bases de datos, juegos, correo electrónico y gráficos.
En lugar de hacer que todos los usuarios que desean buscar en la base de datos o
recuperar correo electrónico aprendan SQL, la aplicación ya viene con todo el SQL (y
otros lenguajes de codificación) programado previamente
Con solo unos clics de mouse, los usuarios pueden acceder a toda la información que
necesitan
Uso de aplicaciones
- tiene un chasis para ocultar todos los elementos que no necesita conocer, como el
modo de funcionamiento de la transmisión o como se utiliza el combustible (gasolina o Diesel)
para impulsar el motor
- ¿podría conseguir el carnet de conducir si tuviera que demostrar que conoce todos los
sistemas (electrónico, transmisión, hidráulico, combustible, etc.) que se utilizan para que el
coche arranque?
• Oracle Application Express es una herramienta de desarrollo y despliegue basada en web que
está disponible con la base de datos Oracle. Le permite crear aplicaciones web centradas en
bases de datos que son fiables, escalables y seguras. Tiene varias funciones y asistentes
incorporados que agilizan el proceso de desarrollo. En la diapositiva se muestran algunas de las
funciones clave.
• La herramienta tiene una interfaz gráfica fácil de usar. El uso de Oracle Application Express
requiere pocos conocimientos de programación.
o Taller de SQL
o Creador de aplicaciones
o Explorador de objetos
- Para obtener más información sobre SQL, utilizará el componente SQL Workshop
Cuando se haya conectado correctamente a APEX, siga las instrucciones de la guía del usuario
de Oracle Application Express para acceder a SQL Commands desde SQL Workshop.
- SQL Workshop es una herramienta de application express que se utiliza para interactuar con
los objetos de base de datos
Explorador de objetos: Le permite explorar, crear y editar objetos en una base de datos
comandos SQL: Le permiten crear, editar, ver, ejecutar y suprimir objetos de base de datos
Scripts SQL: Es un juego de comandos SQL guardados como archivo en Scripts SQL, un
script SQL puede contener una o más sentencias SQL o bloques PL/SQL. Pueden utilizar
SQL Script para crear, editar, ver, ejecutar y suprimir objetos de base de datos
Utilidades: Le permiten crear consultas SQL, cargar y descargar datos de una base de datos
Oracle, generar DDL, ver informes de objetos, gestionar valores por defecto de la
interfaz de usuario, restaurar objetos de base de datos borrados, comparar esquemas,
supervisar la base de datos y ver detalles de la base de datos
1. vaya a +
5. haga clic en download para exportar los resultados a una hoja de calculo
Nota:
– Si tiene varios comandos en el editor de comandos, puede ejecutar solo un comando a la vez.
Seleccione el comando y haga clic en Run. Solo se ejecuta el comando seleccionado.
– Los comandos SQL que se han creado y guardado mediante Query Builder pueden ejecutarse
desde la página Comandos SQL.
Carga y ejecución de un script SQL
3. examine para seleccionar el archivo que contiene el script que desea cargar
7. cuando se haya ejecutado el script, haga clic en el botón view results para ver los
resultados
- la sintaxis es la siguiente
- por exempla
Los alumnos deben introducir el ejemplo anterior en APEX para ver los resultados.
sentencia SELECT.
• La sintaxis es la siguiente:
FROM <table_name>
WHERE <condition>;
• Por exempla:
FROM employees
• DEPARTMENT_ID
• DEPARTMENT_NAME
• MANAGER_ID
El software de Oracle se ejecuta en muchas arquitecturas de hardware y sistemas operativos.
La computadora en la que reside el software de Oracle Database se conoce como el servidor
de Oracle Database. Además, el servidor de Oracle Database puede hacer referencia al
software de Oracle Database y sus datos.
TERMINOLOGIA DE BASE DE DATOS RELACIONALES
Nota: consulte las notas para obtener explicaciones sobre las notificaciones numericas
Una base de datos relacional puede contener una o más tablas. Una tabla es la estructura
básica de almacenamiento de RDBMS. Una tabla contiene todos los datos necesarios sobre
algo del mundo real, como empleados, facturas o clientes. La diapositiva muestra el contenido
de la relación o tabla EMPLOYEES. Los números indican lo siguiente:
1.Una única fila (o tupla), que representa todos los datos necesarios para un empleado concreto. Cada
fila de una tabla se debe identificar por una clave primaria, que no permite duplicar filas. El orden de las
filas no es importante. Se puede especificar cuando se recuperen los datos.
2.Una columna o un atributo que contiene el valor de la clave primaria. El número de employee_id
identifica a un único empleado en la tabla EMPLOYEES. En este ejemplo, la columna del número de
employee_id está designada como clave primaria. Una clave primaria debe contener un valor y el valor
debe ser único.
3.Una columna que no es un valor clave. Una columna representa un tipo de dato en una tabla; en este
ejemplo, los datos son los salarios de todos los empleados. El orden de las columnas no es importante al
almacenar datos; se puede especificar el orden de la columna al recuperar los datos.
4.Una columna o atributo que contiene el valor de clave ajena, que también es una clave ajena. Una
clave ajena es una columna que define cómo se relacionan las tablas entre sí. Una clave ajena hace
referencia a una clave primaria o única en la misma tabla o en otra tabla. En el ejemplo,
DEPARTMENT_ID identifica de forma única un departamento en la tabla DEPARTMENTS.
5.Un campo puede estar en la intersección de una fila y una columna. Solo puede contener un valor.
6.Un campo puede no contener ningún valor. Esto se denomina valor nulo. En la tabla EMPLOYEES, solo
aquellos empleados que tienen el rol de representante de ventas tienen un valor en el campo
COMMISSION_PCT (comisiones).
Relación de varias tablas
• Cada fila de datos de una tabla se puede identificar de forma única mediante una clave primaria.
• Puede relacionar datos de forma lógica desde varias tablas mediante claves ajenas.
Debido a que los datos sobre las diferentes entidades se almacenan en diferentes tablas,
puede que tenga que combinar dos o más tablas para responder a una pregunta determinada.
Por ejemplo, puede que desee conocer la ubicación del departamento en el que trabaja un
empleado. En este caso, necesita información de la tabla EMPLOYEES (que contiene datos
sobre los empleados) y la tabla DEPARTMENTS (que contiene información sobre los
departamentos). Con RDBMS, puede relacionar los datos de una tabla con los datos de otra
utilizando las claves ajenas. Una clave ajena es una columna (o un juego de columnas) que
hace referencia a una clave primaria en la misma tabla o en otra tabla.
Tiene la posibilidad de relacionar datos de una tabla con datos de otra tabla para organizar la
información en unidades separadas y gestionables. Los datos de empleado se pueden
mantener, de forma lógica, separados de los datos de departamento almacenándolos en una
tabla independiente.
¿Qué es SQL?
• En una base de datos relacional, no es necesario especificar la ruta de acceso a las tablas y tampoco es
necesario saber cómo se organizan los datos de forma física.
• Para acceder a la base de datos, ejecute una sentencia SQL, que es el lenguaje estándar de ANSI
(American
National Standards Institute) para el funcionamiento las de bases de datos relacionales.
• SQL también es compatible con el estándar ISO (SQL 1999).
• El lenguaje de consulta estructurado (SQL) es el lenguaje declarativo basado en juegos utilizado para
acceder a los datos de una base de datos Oracle.
• SQL proporciona una interfaz para una base de datos relacional y proporciona las sentencias que
ayudan a trabajar con la base de datos.
• SQL es:
— Eficiente, fácil de aprender y de utilizar
— Funcionalidad completa (con SQL, puede definir, recuperar y manipular datos en las tablas).
Funciones de SQL
• Creación, sustitución, modificación y borrado de objetos de base de datos
• Inserción, actualización y supresión de filas en una tabla
• Consulta de datos almacenados en la base de datos
• Control de acceso a la base de datos y los objetos de base de datos
• Garantía de integridad y consistencia de la base de datos
SQL ofrece ventajas para todos los tipos de usuarios:
•Programadores de aplicaciones
•Administradores de base de datos
•Gestores
•Usuarios finales
SQL procesa los juegos de datos como grupos en lugar de como unidades individuales. Permite
a los usuarios:
•Acceder y describir los datos almacenados en la base de datos
•Definir los datos almacenados en la base de datos y manipular esos datos
Tipos de comandos SQL
• DDL (Lenguaje de definición de datos): Define estructuras de bases de datos
• DML (Lenguaje de manipulación de datos): Manipula los datos (INSERT, UPDATE, DELETE)
• DQL (Lenguaje de consulta de datos): Selecciona datos (SELECT)
• DCL (Lenguaje de control de datos): Controla el acceso de usuario
• TCL (Lenguaje de control transaccional): Gestiona las transacciones de bases de datos
Procesamiento SQL
• Fases del procesamiento SQL
1. Análisis
2. Optimización
3. Origen de fila Generación
4. Ejecución
* Consulte las definiciones de las fases en las notas
•Análisis SQL: La primera etapa del procesamiento SQL es el análisis, que implica la separación
de partes de una sentencia SQL en una estructura de datos que puedan procesar otras rutinas.
La base de datos analiza una sentencia cuando lo indica la aplicación, lo que significa que solo
la aplicación, no solo la base de datos en sí, puede reducir el número de análisis. Durante el
análisis, la base de datos realiza una comprobación de la sintaxis, una comprobación de la
semántica y una comprobación del pool compartido.
•Optimización SQL: Es el proceso de selección del medio más eficaz de ejecutar una sentencia
SQL. La base de datos optimiza las consultas basándose en las estadísticas recopiladas sobre
los datos reales a los que se está accediendo. El optimizador utiliza el número de filas, el
tamaño del juego de datos y otros factores para generar posibles planes de ejecución,
asignando un costo numérico a cada plan. La base de datos utiliza el plan con el costo más
reducido.
•Generación de origen de fila SQL:El generador de origen de fila es el software que recibe el
plan de ejecución óptimo desde el optimizador y produce un plan iterativo, denominado plan
de consulta, que puede utilizar el resto de la base de datos. El plan iterativo es un programa
binario que, cuando se ejecuta, genera el juego de resultados. El plan de consulta adopta la
forma de una combinación de pasos. Cada paso devuelve un juego de filas. Las filas de este
juego se utilizan en el siguiente paso o, en el último paso, se devuelven a la aplicación
mediante la emisión de una sentencia SQL.
•Ejecución de motor SQL ejecuta cada origen de fila del árbol producido por el generador de
orígenes de fila.
Acceso a los datos en el servidor de Oracle Database
Herramientas especializadas instaladas en las computadoras de los usuarios les permiten acceder a los
datos en el servidor de Oracle Database. Estas herramientas se denominan clientes y se utilizan para
enviar instrucciones SQL (comandos) al servidor. Tres de estas herramientas son:
Oracle Application Express
SQL*Plus
Application Builder
SOL Workshop
Team Devebpment
Packaged Aops
Oracle SQL Developer
* Nota: En esta clase utilizaremos Oracle Application Express.
Escenario de caso: Necesidad de extraer datos
Profesor: Sean, ya debería comprenderla necesidad de utilizar SQL para acceder a los datos de una base
de datos relacional. ¿Puede pensar en los casos en los que sería necesario recuperar datos de una tabla
de base de datos?
Alumno: Claro. Déjeme pensar en algunos casos de uso.
Casos de uso: piense y analice el uso de las bases de datos para almacenar datos y producir información
en estas y en otras áreas: hospitales, ventas al por mayor, aeropuertos, escuelas
La necesidad de almacenar y manipular datos se produce en distintos sectores. Entre los
ejemplos se incluyen servicios de salud, transporte, venta al por menor y educación.
•Los datos de los pacientes se almacenan en un hospital y se denominan registros médicos.
•Las aerolíneas almacenan datos para que los pasajeros puedan adquirir sus billetes y realizar
la facturación en línea.
•Las escuelas mantienen registros de los alumnos y los profesores para realizar
transcripciones.
Objetivos
Mostrar las operaciones DDL necesarias para crear y mantener las tablas de una base de datos
Nota: los nombres no son sensibles a mayúsculas o minúsculas, por ejemplo, EMPLOYEES se
considera lo mismo que emPloyes, sin embargo, los identificadores entre comillas son
sensibles a mayúsculas y minúsculas
- Un área de almacenamiento
Para crear una tabla, un usuario debe tener el privilegio CREATE TABLE y un área de
almacenamiento en la que crear los objetos. El administrador de la base de datos (DBA) utiliza
sentencias de lenguaje de control de datos (DCL) para otorgar privilegios a los usuarios.
En la sintaxis:
• DEFAULT expr especifica un valor por defecto si se omite un valor en la sentencia INSERT.
Nota: Se necesita el privilegio CREATE ANY TABLE para crear una tabla en cualquier esquema
distinto del esquema del usuario.
Especifique en la sentencia
- nombre de la tabla
Creación de tablas
Nota: Puede ver la lista de las tablas que posee realizando consultas en el diccionario de datos.
Por ejemplo, select table_name from user_tables;
CREACION DE TABLAS
TIPOS DE DATOS
CHAR (size) datos de tipo carácter de longitud fija de longitud (size) en bytes (el tamaño
por defecto y mínimo es 1; el tamaño máximo es 2000)
DATE valores de fecha y hora hasta el segundo más próximo entre el 1 de enero de 4712
a.c. y 31 de diciembre de 9999 d.c.
CLOB Objeto grande de caracteres que contiene caracteres de un solo byte o multibyte, el
tamaño máximo es (4GB - 1) *(DB_BLOCK_SIZE); almacena datos del juego de carácter
nacional
NCLOB clob que contiene características Unicode, se soportan los juegos de caracteres de
ancho fijo y variable y ambos utilizan el juego de caracteres nacional de la base de datos.
El tamaño máximo es (4GB -1) *(tamaño de bloque de base de datos); almacena datos del
juego de carácter nacional
RAW datos binarios raw con una longitud en bytes especificada por size, debe especificar
size para un valor raw: el tamaño size máximo es: 32767 bytes si MAX_SQL_STRING_SIZE =
EXTENDED, 4000 bytes si MAX_SQL_STRING_SIZE = LEGACY
TIMESTAMP: permite almacenar los datos de tiempo como fecha con segundos
fraccionarios, almacena el valor de año, mes, día, hora, minuto y segundo del tipo de dato
DATE, así como el valor para segundos fraccionarios, existen diversas variedades de este
tipo de dato, como, por ejemplo, WITH TIMEZONE y WHITELOCALTIMEZONE
INTERVAL DAY TO SECOND permite almacenar el tiempo como un intervalo de días, horas,
minutos y segundos, se utiliza para representar la diferencia exacta entre dos valore de
fecha y hora
TIMESTAMP WITH TIME ZONE variante de TIMESTAMP que incluye el nombre de la región
de zona horaria o el desplazamiento de zona horaria en su valor
TIME ZONE);
EJ de una tabla con las columnas TIMESTAMP, INTERVAL YEAR TO MONTH e INTERVAL DAY TO
SECOND
(start_time TIMESTAMP,
OPCION DEFAULT
- Especifica un valor por defecto para una columna durante la operación CREATE TABLE
- Esta opción evita que se introduzcan valores nulos en las columnas si se inserta una fila
sin un valor para la columna
Hire_date DATE DEFAULT SYSDATE
- El tipo de dato por defecto debe coincidir con el tipo de dato de la columna
Observe el siguiente ejemplo, donde la sentencia inserta el valor NULL en lugar del valor por
defecto:
DEFAULT:
Inclusión de restricciones
UNIQUE, los valores de una columna o una combinación de columnas deben ser únicos
para todas las filas de la tabla
PRIMARY KEY, la columna (o una combinación de columnas) debe contener el valor AND IS
NOT NULL único para todas las filas
FOREING KEY, la columna (o una combinación de columnas debe establecer y aplicar una
referencia a una columna o una combinación de columnas de otra tabla (o de la misma))
DIRECTRICES DE RESTRICCION
Es fácil hacer referencia a las restricciones si se les asigna un nombre significativo (por
ejemplo, employee_employee_id_pk)
Por ejemplo, al crear una tabla, si especifica una columna para que sea la clave primaria sin
utilizar la palabra reservada "CONSTRAINT", Oracle genera un nombre de restricción, como se
muestra a continuación:
Las restricciones que se aplican a más de una columna se deben especificar en el nivel de
tabla
Definición de restricciones
En la sintaxis:
• DEFAULT expr especifica un valor por defecto que se utiliza si se omite un valor en la
sentencia INSERT.
Columna
(CONSTRAINT constraint_name)constraint_type
Ejemplos: definición de restricciones
En este ejemplo, la restricción de clave primaria utiliza el UID designado para dicha entidad y
crea la clave primaria (esta se puede crear en el nivel de columna o de tabla); en las
diapositivas 33 a 34 encontrará más información sobre las restricciones de clave primaria.
Nota: Los ejemplos de esta diapositiva y los de las siguientes solo muestran una parte del
código utilizado para crear la tabla employees y, por lo tanto, no se pueden ejecutar tal y como
aparecen.
Restricción NOT NULL
Restricción UNIQUE
Una restricción de integridad de clave UNIQUE requiere que todos
los valores de la columna o de un juego de columnas sean únicos.
Si la restricción UNIQUE tiene más de una columna, el grupo de
columnas se denomina clave única compuesta.
Las restricciones UNIQUE permiten la entrada de valores nulos.
Un valor nulo en una columna (o en todas las columnas de una clave
UNIQUE compuesta) cumple siempre una restricción UNIQUE.
Nota: Debido al mecanismo de búsqueda de restricciones UNIQUE en más de una columna,
no puede tener valores idénticos en las columnas no nulas de una restricción de clave
UNIQUE compuesta parcialmente nula.
Restricción PRIMARY KEY
Una restricción PRIMARY KEY crea una clave primaria para la tabla.
Por ejemplo:
create table dept(
dept_id number(8),
dept_name varchar2(30),
loc_id number(4),
constraint pk_dept primary key(dept_id,loc_id));
Nota: Puesto que la unicidad forma parte de la definición de restricción de clave primaria, el
servidor de Oracle aplica la unicidad mediante la creación implícita de un índice único en la
columna o columnas de clave primaria.
Restricción FOREIGN KEY
Nota: Si una tabla ya contiene filas cuando se agrega una columna, la nueva columna será
inicialmente nula o utilizará el valor por defecto para todas las filas. Solo puede agregar una
columna NOT NULL obligatoria a una tabla que contenga datos en las demás columnas si
especifica un valor por defecto. Puede agregar una columna NOT NULL a una tabla vacía sin
el valor por defecto.
Modificación de columnas
• Puede cambiar el tipo de dato, tamaño y valor por defecto de una columna:
ALTER TABLE dept
MODIFY dname VARCHAR2 (30) ;
• El cambio de un valor por defecto solo afecta a las inserciones posteriores en la tabla.
• Las modificaciones están sujetas a determinadas condiciones.
A continuación, se muestran las directrices para modificar una columna:
•Puede aumentar el ancho o la precisión de una columna numérica.
•Puede aumentar el ancho de las columnas de caracteres.
•Puede reducir el ancho de una columna si:
–La columna solo contiene valores nulos.
–La tabla no tiene filas.
–La disminución del ancho de columna no es inferior a los valores existentes en dicha columna.
•Puede cambiar el tipo de dato si la columna solo contiene valores nulos. La única excepción
son las conversiones de CHAR a VARCHAR2, que se pueden realizar con los datos de las
columnas.
•Solo puede convertir una columna CHAR al tipo de dato VARCHAR2 o una columna
VARCHAR2 al tipo de dato CHAR si la columna contiene valores nulos o si no cambia el
tamaño.
•El cambio a un valor por defecto de una columna solo afecta a las inserciones posteriores en
la tabla.
•Puede agregar una restricción NOT NULL mediante las cláusulas MODIFY.
Borrado de columnas
• Usar la cláusula DROP COLUMN para borrar columnas que ya no son
necesarias:
ALTER TABLE dept
DROP (job_id) ;
A continuación, se muestran las directrices para borrar una columna:
•La columna puede o no contener datos.
•Con la sentencia ALTERTABLEDROPCOLUMN, solo se puede borrar una columna en cada
ocasión.
•La tabla debe tener al menos una columna después de modificarla.
•Después de borrar una columna, no se puede recuperar.
•Una clave primaria a la que hace referencia otra columna no se puede borrar, a menos que se
agregue la opción de cascada.
•El borrado de una columna puede tardar un rato si tiene muchos valores. En este caso, puede
ser mejor definirla para que no se utilice y borrarla cuando haya menos usuarios en el sistema.
De esta forma, se evitan los bloqueos ampliados.
Opción SET UNUSED
• La opción SET UNUSED marca una o más columnas como no utilizadas para que se puedan
borrar simultáneamente cuando la demanda de recursos del sistema sea menor.
• Puede utilizar la opción SET UNUSED para marcar una o más columnas como no utilizadas.
• Puede utilizar la opción DROP UNUSED COLUMNS para eliminar las columnas marcadas como
no utilizadas.
Las columnas no utilizadas se tratan como si se hubieran borrado, aunque sus datos de
columna permanezcan en las filas de la tabla.
Después de que una columna se marque como no utilizada, no tendrá acceso a dicha columna.
Las consultas SELECT*no recuperan datos de las columnas marcadas como no utilizadas.
Además, los nombres y tipos de columnas marcados como no utilizados no se muestran
durante la sentencia DESCRIBE, y puede agregar a la tabla una nueva columna con el mismo
nombre que la columna no utilizada.
Puede especificar la palabra clave ONLINE para indicar que se permiten las operaciones de
lenguaje de manipulación de datos (DML) en la tabla al marcar la columna o columnas como
UNUSED. El siguiente ejemplo de código muestra el uso de SETUNUSEDCOLUMN, que
define una columna como no utilizada para siempre mediante la adición de la palabra clave
ONLINE:
ALTER TABLE dept80 SET UNUSED(hire_date)ONLINE;
La información de SET UNUSED se almacena en la vista de diccionario
USER_UNUSED_COL_TABS.
Nota: Las instrucciones para definir una columna como UNUSED son similares a las
instrucciones para borrar una columna.
Opción SET UNUSED
Profesor
Sean, estaba examinando la tabla AUTHORS y me he dado cuenta de que:
• Falta el campo de dirección de correo electrónico del autor.
• Hay que aumentar longitud de la columna de nombre del autor.
¿Puede realizar estos cambios?
alumno
Claro, puedo hacerlo. La modificación consiste en agregar una nueva
columna y aumentar la longitud de columna, así que no debe haber
ningún problema.
Tablas de solo lectura
Puede utilizar la sintaxis de ALTER TABLE para:
• Definir una tabla en modo de solo lectura para evitar cambios de
DDLo DML durante el mantenimiento de la tabla
• Volver a definir la tabla en modo de lectura/escritura
ALTER TABLE dept READ ONLY,•
- perform table maintenance and then
- return table back to read/write mode
ALTER TABLE dept READ WRITE,•
A continuación, se muestran las directrices para definir una tabla en modo de solo lectura:
• Puede especificar READ ONLY para definir una tabla en modo de solo lectura.
• Cuando una tabla está en modo de solo lectura, no se pueden emitir sentencias DML que
afecten a la tabla o cualquier sentencia SELECT... FOR UPDATE .
• Puede emitir sentencias DDL siempre y cuando no modifique los datos de la tabla.
• Se permiten operaciones sobre los índices asociados a la tabla cuando la tabla está en modo
de solo lectura.
• Especifique READ/WRITE para volver a definir una tabla de solo lectura en modo de
lectura/escritura.
Nota: Si es necesario, puede borrar una tabla en modo READ ONLY . El comando DROP se
ejecuta solo en el diccionario de datos, por lo que no es necesario el acceso al contenido de la
tabla. El espacio utilizado por la tabla no se reclamará hasta que el tablespace se vuelva a
definir en modo de lectura/escritura y, acontinuación, se podrán realizar los cambios
necesarios en las cabeceras de segmentos de bloque, etc.
Borrado de una tabla
• Mueve una tabla a la papelera de reciclaje.
• Elimina la tabla y sus datos si se especifica la cláusula PURGE.
• Invalida los objetos dependientes y elimina privilegios de objeto en
la tabla.
DROP TABLE dept;
Table dropped.
A menos que especifique la cláusula PURGE, la sentencia DROPTABLE no vuelve a liberar
espacio en los tablespaces para que lo utilicen otros objetos, y el espacio sigue contando en la
cuota de espacio del usuario. El borrado de una tabla invalida objetos dependientes y elimina
privilegios de objeto en la tabla.
Al borrar una tabla, la base de datos pierde todos los datos de la tabla y todos los índices
asociados a esta.
Sintaxis
DROP TABLE table [PURGE]
En la sintaxis, tablees el nombre de la tabla.
A continuación, se muestran las directrices para borrar una tabla:
•Se suprimen todos los datos de la tabla.
•Se mantienen las vistas y los sinónimos, pero no son válidos.
•Se confirman las transacciones pendientes.
•Solo el creador de la tabla o un usuario con el privilegio DROPANYTABLE puede eliminar
una tabla.
6.4 lenguaje de manipulacion de datos DML
Objetivos
En esta lección se abordan los siguientes objetivos:
• Describir la finalidad del lenguaje de manipulación de datos (DML)
• Explicar las operaciones DML que son necesarias para gestionar los
datos de tabla de una base de datos:
— INSERT
— UPDATE
— DELETE
Lenguaje de manipulación de datos
• Las sentencias DML se ejecutan al:
— Agregar nuevas filas a una tabla (INSERT)
— Modificar filas existentes en una tabla (UPDATE)
— Eliminar filas existentes de una tabla (DELETE)
• Una transacción consta de una recopilación de sentencias DML que
forman una unidad lógica de trabajo.
Piense en una base de datos bancaria. Cuando un cliente del banco transfiere dinero de su
cuenta de ahorro a una cuenta corriente, la transacción puede constar de las siguientes tres
acciones diferentes: reducir la cuenta de ahorro, aumentar la cuenta corriente y registrar la
transacción en el diario de transacciones. El servidor de Oracle debe garantizar que se ejecuten
las tres sentencias SQL para mantener el balance correcto de las cuentas. Si algo impide que
una de las sentencias de la transacción se ejecute, las demás sentencias de la transacción se
deben deshacer.
Adición de una nueva fila a una tabla
Sintaxis de la sentencia INSERT
• Agregue filas a una tabla mediante la sentencia INSERT:
INSERT INTO table [ (column column. . . ] ) ]
VALUES (value value. ] ) ;
• Con esta sintaxis, solo se inserta una fila cada vez.
En la sintaxis:
•tablees el nombre de la tabla.
•columnes el nombre de la columna de la tabla que desea rellenar.
•valuees el valor correspondiente para la columna.
Profesor
Por supuesto. Puede utilizar la sentencia
INSERT para especificar las columnas para las que no se introducirán
valores.
Inserción de filas con valores nulos
• Método explícito: Omita la columna en la lista de columnas.
INSERT INTO copy departments (department id, department name)
VALUES (30, ' Purchasing' ) ;
• Método implícito : Especifique la palabra clave NULL en la cláusula
VALUES.
INSERT INTO copy departments
VALUES (100, ‘finance’. Null, null);
Asegúrese de que puede utilizar valores nulos en la columna de destino mediante la
verificación del estado Null con el comando DESCRIBE.
El servidor de Oracle aplica automáticamente todos los tipos de dato, rangos de datos y
restricciones de integridad de los datos. Las columnas que no se muestran explícitamente
obtienen un valor nulo en la nueva fila, a menos que haya valores por defecto para las
columnas que faltan que se utilizan.
Los errores comunes que se producen durante la entrada del usuario se comprueban en el
siguiente orden:
•Falta el valor obligatorio de una columna NOT NULL.
•Un valor duplicado viola cualquier restricción de clave única o primaria.
•El valor Any viola una restricción CHECK.
•Una clave ajena viola la restricción de integridad referencial.
•No coincidencias de tipos de dato o los valores son demasiado anchos para la
columna.
Nota: Se recomienda el uso de la lista de columnas porque hace la sentencia INSERT más
legible y fiable, y menos proclive a errores.
Inserción de valores especiales
especiales en la tabla.
• Agregue un empleado.
• Verifique la adición.
Sintaxis de la sentencia UPDATE
• Modifique los valores existentes en una tabla con la sentencia
UPDATE:
UPDATE table
SET column = value [ , column = value
[WHERE condition] ;
• En general, utilice la columna de clave primaria en la cláusula
WHERE para identificar una única fila para la actualización.
• Actualice más de una fila cada vez (si es necesario).
En la sintaxis:
•tablees el nombre de la tabla.
•columnes el nombre de la columna de la tabla que se debe rellenar.
•valuees el valor o subconsulta correspondiente para la columna.
•condition identifica las filas que se van a actualizar y consta de los nombres de columna,
expresiones, constantes, subconsultas y operadores de comparación.
Actualización de filas en una tabla
• Si se especifica la cláusula WHERE, se modifican los valores de una
fila o varias filas específicas:
UPDATE copy employees
SET department id = 50
WHERE employee id = 113;
• Si se omite la cláusula WHERE, se modifican los valores de todas las
filas de la tabla:
UPDATE copy employees
SET department id = 110;
Por ejemplo, un empleado que era SA_REP ahora ha cambiado su puesto a IT_PROG. Por
lo tanto, se debe actualizar su JOB_ID y el campo de comisiones se debe definir en NULL.
UPDATE copy_employees
SET job_id = 'IT_PROG', commission_pct = NULL
...
WHERE employee_id = 114;
Nota: La tabla copy_employees tiene los mismos datos que la tabla EMPLOYEES
Actualización de filas en una tabla
• Especifique SET column name= NULL para actualizar un valor de
columna a NULL .
UPDATE copy employees
SET department id = NULL
WHERE employee id = 124;
Violación de restricciones
Nota: Tenga en cuenta que la consulta utiliza la tabla employees, que tiene restricciones de
integridad aplicadas (copy_employees no tiene estas restricciones aplicadas).
Si hay restricciones aplicadas en las columnas, se devolverá un error si intenta violar la regla de
restricción. Por ejemplo, si intenta actualizar un registro con un valor ligado a una restricción
de integridad, se devuelve un error.
En el ejemplo de la diapositiva, el departamento 55 no existe en la tabla principal, DEPARTMENTS,
por lo tanto, recibirá la violación ORA-02291 "parent key not found".
Eliminación de filas de una tabla
En esta diapositiva se muestra que el departamento de relaciones
públicas se ha eliminado de la tabla DEPARTMENTS
(asumiendo que no se han violado las restricciones en la tabla
DEPARTMENTS).
SENTENCIA DELETE
Puede eliminar filas existentes de una tabla mediante la sentencia
DELETE
DELETE (FROM) TABLE
(WHERE CONDITION);
En la sintaxis:
•tablees el nombre de la tabla.
•condition identifica las filas que se van a suprimir y consta de los nombres de columna,
expresiones, constantes, subconsultas y operadores de comparación.
Violación de restricciones
• No se puede suprimir una fila que contenga una clave primaria
utilizada como clave ajena en otra tabla.
DELETE FROM departments
WHERE department id = 60 ;
Nota: Tenga en cuenta que la consulta utiliza la tabla departments, que tiene restricciones de
integridad aplicadas (copy_departments no tiene estas restricciones aplicadas).
Por ejemplo, si intenta suprimir un registro con un valor ligado a una restricción de integridad,
se devuelve un error.
En el ejemplo de la diapositiva, se muestra un intento de suprimir el departamento 60 de la
tabla DEPARTMENTS, pero se produce un error porque ese número de departamento se
utiliza como clave ajena en la tabla EMPLOYEES. Si el registro principal que intenta suprimir
tiene registros secundarios, recibirá la violación ORA-02292"child record found".
Sentencia TRUNCATE
• Elimina todas las filas de una tabla, dejando la tabla vacía y la
estructura de la misma intacta.
• Es una sentencia DDL más que una sentencia DML; no se puede deshacer
fácilmente.
• Sintaxis:
TRUNCATE TABLE table name ;
• Ejemplo: TRUNCATE TABLE copy employees ;
** Consulte las notas sobre el truncamiento de tablas principales
La sentencia TRUNCATE es un método más eficaz para eliminar todas las filas de una tabla o
cluster.
La eliminación de filas con las sentencia TRUNCATE es más rápida que la eliminación con la
sentencia DELETE por las siguientes razones:
•La sentencia TRUNCATE es una sentencia DDL y no genera ninguna información de rollback.
La información de rollback se trata más adelante en esta lección.
•El truncamiento de una tabla no arranca los disparadores de supresión de la tabla.
UPDATE. ..
SAVEPOINT update done;
SAVEPOINT update_done succeeded.
INSERT. . .
ROLLBACK TO update done;
ROLLBACK TO succeeded.
Nota: Si crea un segundo punto de grabación con el mismo nombre que un punto de grabación
anterior, éste se suprime.
Procesamiento de Transacciones Implícitas
• Una transacción automática se produce en las
siguientes circunstancias:
— Se emite una sentencia DDL.
— Se emite una sentencia TCL.
— Hay una salida normal del software SQL, sin emitir explícitamente
las sentencias COMMIT o ROLLBACK
• Se produce un rollback automático cuando hay una terminación anormal
del software SQL o cuando hay un fallo del sistema para proteger la
integridad de la base de datos.
Estado de los datos antes de COMMIT o ROLLBACK
ROLLBACK
Estado de los datos después de ROLLBACK:
Ejemplo
Imagine que hay una tabla de prueba con 4 registros:
DELETE FROM test;
4 rows deleted.
ROLLBACK ;
Roll back complete .
DELETE FROM test WHERE id = 100
1 row deleted.
SELECT * FROM test WHERE id = 100
No rows selected.
COMMIT ;
Commit comple te .
Nota:La sentencia ROLLBACK no está soportada actualmente en APEX.
Rollback a nivel de sentencia
• Si falla una sentencia DML durante la ejecución, solo se realiza un
rollback de dicha sentencia.
• El servidor de Oracle implementa un punto de grabación implícito.
• Los demás cambios se retienen.
• El usuario debe terminar las transacciones explícitamente con la
ejecución de una sentencia
COMMIT o ROLLBACK .
El servidor de Oracle emite una confirmación implícita antes y después de cualquier sentencia
DDL.
Por lo tanto, si la sentencia DDL no se ejecuta correctamente, no podrá realizar rollback de la
sentencia anterior porque el servidor ha emitido una confirmación.
Termine las transacciones explícitamente con la ejecución de una sentencia COMMITo
ROLLBACK.
Consistencia de Lectura
• La consistencia de lectura garantiza una vista consistente de los datos en todo momento.
• Los cambios realizados por un usuario no entran en conflicto con los cambios realizados por
otro usuario.
Nota: El mismo usuario se puede conectar a diferentes sesiones. Cada sesión mantiene la
consistencia de lectura, independientemente de la sesión en la que esté conectado el usuario.
La consistencia de lectura es una implementación automática. Mantiene una copia parcial de
la base de datos en los segmentos de deshacer. La imagen de lectura consistente se crea a
partir de los datos confirmados de la tabla y de los datos antiguos que se están cambiando y
que aún no se han confirmado del segmento de deshacer.
Al realizar una operación de inserción, actualización o supresión en la base de datos, el
servidor de Oracle realiza una copia de los datos antes de cambiarlos y los escribe en un
segmento de deshacer.
Todos los lectores, excepto el que haya realizado el cambio, seguirán viendo la base de datos
como estaba antes de que comenzaran los cambios; verán una “instantánea” de los datos del
segmento de deshacer.
Antes de confirmar los cambios en la base de datos, sólo el usuario que modifica los datos ve la
base de datos con modificaciones. Todos los demás verán la instantánea en el segmento de
deshacer. Esto garantiza que los lectores de los datos lean datos consistentes en los que no se
esté realizando actualmente ningún cambio.
Al confirmar una sentencia DML, el cambio realizado en la base de datos se hace visible para
todos aquellos que emiten una sentencia SELECT después de realizar la confirmación. El
espacio ocupado por los datos antiguos en el archivo de segmentos de deshacer se libera para
volver a utilizarlo.
Si se realiza un rollback de la transacción, los cambios se deshacen: La versión original anterior
de los datos del segmento de deshacer se vuelve a escribir en la tabla y todos los usuarios ven
la base de datos como estaba antes de comenzar la transacción.
SQL SELECT
Nota: A lo largo de este curso, las palabras palabra clave, cláusula y sentenciase utilizan de la
siguiente forma:
•Una palabra clavehace referencia a un elemento SQL individual; por ejemplo, SELECTy
FROMson palabras clave.
•Una cláusulaes una parte de una sentencia SQL; por ejemplo, SELECT employee_id,
last_name.
•Una sentenciaes una combinación de dos o más cláusulas; por ejemplo, SELECT * FROM
employees.
Prioridad de operadores
Use parentesis para reforzar el orden estandar de prioridad y mejor calidad
Puede sustituir reglas de prioridad utilizando parentesis para especificar el orden en el que
se ejecutan los operadores
El primer ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de
los empleados. Calcula la compensación anual multiplicando el salario mensual por 12, más un
incentivo de 100 $. La multiplicación se realiza antes que la suma.
El segundo ejemplo de la diapositiva muestra el apellido, el salario y la compensación anual de
los empleados. Calcula la compensación anual sumando un incentivo mensual de 100 $ al
salario mensual y, a continuación, multiplicando ese subtotal por 12.
Debido a los paréntesis, la suma tiene prioridad sobre la multiplicación.
Definición de valor nulo
• Un valor nulo es un valor que no está disponible, sin asignar,
desconocido o que no es aplicable.
• Un valor nulo no es lo mismo que un cero o un espacio en blanco.
SELECT last name, job id, salary,
FROM employees ;
Las columnas de cualquier tipo de dato pueden contener valores nulos. Sin embargo, algunas
restricciones (NOT NULL y PRIMARY KEY) evitan que se utilicen valores nulos en la
columna.
Valores Nulos en Expresiones Aritméticas
• Cualquier expresión aritmética que contenga valores nulos se evalúa
como nula.
SELECT last name, 12*sa1ary*commission_pct
FROM employees ;
Objetivos
— Cláusula WHERE
• Los valores de caracteres son sensibles a mayúsculas/minúsculas y los valores de datos son
sensibles al formato.
FROM employees
Operadores Lógicos
• Una condición lógica combina el resultado de dos condiciones de
componente para producir un resultado único basado en dichas
condiciones o invierte el resultado de una condición única si se
utiliza NOT.
Operador
Y Devuelve TRUE si ambas condiciones de componente son TRUE
OR Devuelve TRUE si cualquier condición de componente es TRUE
NOT Devuelve TRUE si la condición es FALSE Devuelve FALSE si la
condición es TRUE
Uso del operador AND
• AND necesita que ambas condiciones de componente sean verdaderas:
SELECT employee id, last name, job id, salary
FROM employees
WHERE salary 10000
Nota: Todas las búsquedas de caracteres son sensibles a
mayúsculas/minúsculas y deben incluirse entre comillas.
Uso del operador OR
• OR necesita que cualquier condición de componente sea verdadera:
SELECT employee id, last name, job id, salary
FROM employees
WHERE salary >= 10000
OR job id 1,110 '
Uso del operador NOT
NOT invierte el valor de la condición:
SELECT last name, job id
FROM employees
WHERE job id
NOT IN ('IT_PROG', ‘ST_CLERK’, ‘SA_REP’)
El operador NOTtambién se puede utilizar con otros operadores SQL, como BETWEEN, LIKE
y NULL. Estos son algunos ejemplos:
... WHERE job_id NOT IN ('AC_ACCOUNT', 'AD_VP')
... WHERE salary NOT BETWEEN 10000 AND 15000
... WHERE last_name NOT LIKE '%A%'
... WHERE commission_pct IS NOT NULL
Reglas de prioridad
Operador
1. Operadores aritméticos
2. Operador de concatenación
3. Condiciones de comparación
4. is[NOT] NULL, LIKE, [NOT] IN
5. [NOT] BETWEEN
6. Distinto de
7. Operador lógico NOT
8. Operador lógico AND
9. Operador lógico OR
Utilice los paréntesis para sustituir las reglas de prioridad.
Orden
• Ordenar en orden descendente:
SELECT last name, job id, department id, hire date
FROM employees
Objetivos
• Escribir sentencias SELECT para acceder a datos de más de una tabla mediante uniones
igualitarias y no igualitarias
• Utilizar uniones OUTER para visualizar datos que normalmente no cumplen una condición de
unión
• Generar un producto cartesiano (unión cruzada) de todas las filas de dos o más tablas
Obtención de datos de varias tablas
Una unión en tres direcciones es una unión de tres tablas. El optimizador decide la ejecución
de la unión, así como el orden. Aquí, la primera unión que se realiza es EMPLOYEES JOIN
DEPARTMENTS. La primera condición de unión puede hacer referencia a las columnas de
EMPLOYEESy DEPARTMENTS, pero no puede hacer referencia a las columnas de
LOCATIONS. La segunda condición de unión puede hacer referencia a las columnas de las
tres tablas.
El ejemplo de código de la diapositiva también se puede realizar con la cláusula USING:
SELECT e.employee_id, l.city, d.department_name
FROM employees e
JOIN departments d
USING (department_id)
JOIN locations l
USING (location_id);
Aplicación de condiciones adicionales a una unión
• Uso de la cláusula AND o WHERE para aplicar condiciones adicionales:
SELECT e. employee id, e. last name, e. department id, d. department
id, d. location id
FROM employees e JOIN departments d
ON (e. department id = d. department id)
and e. manager id = 149
Durante este proceso, busca dos veces en la tabla. La primera vez, cuando consulta la tabla
para buscar a Kochar en la columna LAST_NAMEy el valor MANAGER_ID de 100. La segunda
vez, cuando consulta la columna EMPLOYEE_IDpara buscar 100 y la columna
LAST_NAMEpara buscar King.
Uniones automáticas con la cláusula ON
Una unión no igualitaria es una condición de unión que contiene algún operador diferente del
operador de igualdad.
La relación entre la tabla EMPLOYEESy JOB_GRADESes un ejemplo de unión no igualitaria.
Los rangos de la columna SALARYen la tabla EMPLOYEESoscilan entre los valores en las
columnas LOWEST_SALy HIGHEST_SALde la tabla JOB_GRADES. Por lo tanto, se pueden
agregar grados a los empleados según su salario. La relación se obtiene mediante un operador
distinto del operador de igualdad (=).
Recuperación de registros con uniones no
igualitarias
ON e.salart
Between j.lowest_sal and j.highest_sal;
Es importante tener en cuenta que todos los empleados aparecerán solo una vez al ejecutar
esta consulta. Ningún empleado se repite en la lista por los siguientes motivos:
•Ninguna de las filas de la tabla JOB_GRADEScontiene grados que se solapen. Es decir, el
valor de salario de un empleado solo puede oscilar entre los valores de salario bajo y alto de
una de las filas de la tabla de grados de salario.
•Todos los salarios de los empleados oscilan entre los límites proporcionados por la tabla de
grados de cargo. Es decir, ningún empleado gana menos que el valor más bajo de la columna
LOWEST_SALo más que el valor más alto de la columna HIGHEST_SAL.
Para devolver el registro de departamento que no tiene ningún empleado, o los empleados
que no tienen un departamento asignado, puede utilizar la unión OUTER.
• Una unión entre dos tablas que devuelve los resultados de la unión
INNER así como las filas no coincidentes de la tabla de la izquierda
(o de la derecha) se denomina una unión OUTER izquierda (o derecha).
• Una unión entre dos tablas que devuelve los resultados de una unión
INNER así como los resultados de una unión OUT ER izquierda y derecha
es una unión OUTER completa.
LEFT OUTER JOIN
• En este caso queremos ver los registros de todos los empleados(tabla
de la izquierda) incluso si no están asignados a un departamento.
SELECT e . last name, e. deparünent id, d. department nane
FROM employees e LEFT OUTER JOIN departments d
ON (e. department id = d. department id)
RIGHT OUTER JOIN