Fundamentos de Base de Datos1.odt

Descargar como odt, pdf o txt
Descargar como odt, pdf o txt
Está en la página 1de 44

6 Fundamentos de base de datos

introducción a Oracle application express

lenguaje de consulta estructurado sql

lenguaje de definición de datos DDL

lenguaje de manipulacion de datos DML

lenguaje de control de transacciones TCL

recuperación de datos mediante SELECT

restricción de datos mediante WHERE

Ordenación de datos mediante ORDER BY

unión de tablas mediante JOIN

6.1 introducción a Oracle application express

Objetivos

- distinguir entre software de aplicación y software del sistema y dar un ejemplo de cada uno

- conectarse al entorno de practica de Oracle application express

- ejecutar una consulta simple para recuperar información de la base de datos

- aplicar las reglas de SQL para mostrar todas las columnas y un subjuego de columnas
especificas por criterios

- cada día de un modo a otro, utilizamos aplicaciones informáticas

- si ha consultado hoy su correo electrónico, probablemente lo ha hecho por medio de


una aplicación

- si ha adquirido un producto en un supermercado, el dependiente ha escaneado el


producto mediante una aplicación que ha calculado la cuenta y ha actualizado el inventario del
Almacen

- 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

 Los programas de aplicaciones permitían el usuario final (personas normales y


corrientes) comprar programas completamente desarrollados y listos para usar. Ya no
era necesario conocer el funcionamiento del programa, bastaba con saber que
funcionaba y que realizaba la función que deseábamos

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.

 Yahoo.com utiliza la base de datos Oracle para almacenar datos

 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

- Una aplicación es como un coche

- para conducirlo, debes saber lo suficiente para hacer que funcione

- 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

- Oracle application express es una herramienta de desarrollo, despliegue y mantenimiento de


aplicaciones web … funciones clave (report, foim, chart, data loading, calendar, plug ins)

• 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.

Nota: En este curso, utilizará Oracle Application Express.

Componentes de Oracle application express

- Oracle application express tiene los siguientes componentes

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

- Para diseñar una aplicación, utilizara application builder

Inicio de sesión en un espacio de trabajo

- para conectarse a un espacio de trabajo de Oracle application express


- introduzca la URL correcta en la barra de dirección del explorador

- introduzca el nombre del espacio de trabajo

- introduzca el nombre de usuario y la contraseña

- a continuación, haga clic en sing in

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.

¿Qué es SQL Workshop?

- SQL Workshop es una herramienta de application express que se utiliza para interactuar con
los objetos de base de datos

- crear, ver y editar objetos de base de datos

- cargar y descargar datos

- generar sentencias DDL

Componentes de SQL Workshop

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

Servicios RESTful: activa la especificación declarativa de los servicios web RESTful


utilizados para acceder a la base de datos. Estos servicios funcionan junto con el
listener de Oracle application express para activar el consumo de estos servicios

Ejecución de comandos SQL

1. vaya a +

2. introduzca el comando en el editor de comandos

3. haga clic en el botón run

4. vea el resultado en el separador results

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

1. abra SQL Scripts en SQL Workshop

2. haga clic en botón upload

3. examine para seleccionar el archivo que contiene el script que desea cargar

4. haga clic en el botón upload

5. cuando se haya cargado el script, haga clic en el botón run

6. seleccione el botón run now

7. cuando se haya ejecutado el script, haga clic en el botón view results para ver los
resultados

Sentencia SELECT básica

- el comando SELECT * devuelve todas las filas en una tabla

- la sintaxis es la siguiente

Select * from <table name>;

- por exempla

Select * from employees;

Sintaxis: las reglas que rigen la formación de sentencias en un lenguaje de programación.

Los alumnos deben introducir el ejemplo anterior en APEX para ver los resultados.

Sentencia SELECT con una condición

• Para devolver un subjuego de los datos, modifique la

sentencia SELECT.

• La sintaxis es la siguiente:

SELECT <column_name I, column_name 2, etc. >

FROM <table_name>

WHERE <condition>;

• Por exempla:

SELECT first_name, last_name , job_id

FROM employees

WHERE job_id = 'SA REP'

La condición (<condition>) empieza por la palabra WHERE seguida de <column_name> y un


operador de comparación (=, >, <, etc.) seguidos de un valor o IS NULL, IS NOT NULL.
Corrección de errores
• Al introducir comandos SQL, es importante utilizar la ortografía correcta, de lo contrario, se mostrará
un mensaje de error.

• Por ejemplo (SELECT: ortografía incorrecta):

Select * FROM employees ;

• Se generaría el mensaje de error: ora=00900: invalid SQL statement

• Para rectificar, basta con corregir la ortografía y volver a ejecutarlo.


Terminología
Entre los términos clave utilizados en esta lección se incluyen:
• Software de la aplicación
• Software del sistema
• Oracle Application Express
• Sintaxis
• Subjuego
• Operador de comparación
6.2 lenguaje de consulta estructurado sql
Objetivos
En esta lección se abordan los siguientes objetivos:

• Describir cómo se organizan los datos en una base de datos relacional


• Explicar las distintas terminologías de bases de datos relacionales
• Definir el lenguaje de consulta estructurado y sus funciones
• Describir cómo se produce el procesamiento SQL
• Identificar las herramientas que se utilizan para acceder a la base de datos relacional
¿Cómo se organizan los datos en bases de datos relacionales?
• Los datos se almacenan en una matriz bidimensional conocida como tabla.
SERVIDOR DE ORACLE
Nombre de la tabla: EMPLOYEES
• EMPLOYEE_ID
• FIRST_NAME
• LAST_NAME
• email
Nombre de la tabla: DEPARTMENTS
• DEPARTMENT_ID
• DEPARTMENT_NAME
• MANAGER_ID
¿Cómo se organizan los datos en bases de datos relacionales?

• Se utiliza el software de DBMS para gestionar la lectura y manipulación de datos.


SERVIDOR DE ORACLE
Nombre de la tabla: EMPLOYEES
 EMPLOYEE_ID
 FIRST_NAME
 LAST_NAME
 email

Nombre de la tabla: DEPARTMENTS

• 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.

6.3 lenguaje de definición de datos DDL

Objetivos

Identificar los pasos necesarios para crear tablas de base de datos

Describir la finalidad del lenguaje de definición de datos DDL

Mostrar las operaciones DDL necesarias para crear y mantener las tablas de una base de datos

Objetos de base de datos

 Tabla: unidad básica de almacenamiento, consta de filas

 Vista: representa de forma lógica subjuegos de datos de una o más tablas

 Secuencia: genera valores numéricos

 Índice: mejora el rendimiento de algunas consultas

 Sinónimo: ofrece un nombre alternativo para un objeto

Nota: vamos a crear y recuperar información de la unidad básica de almacenamiento, las


tablas, hay más objetos de base de datos disponibles que los enumerados
Reglas de nomenclatura para tablas y columnas

Los nombres de tabla y de columna deben:

- Empezar por una letra

- Tener entre 1 y 30 caracteres

- Contener solo A-Z, a-z, 0-9, _, $ y #

- No ser un duplicado de otro nombre de objeto propiedad del mismo usuario

- No ser una palabra reservada del servidor ORACLE

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

Sentencia CREATE TABLE

Para emitir una sentencia CREATE TABLE, se debe disponer de lo siguiente:

- El privilegio CREATE TABLE

- 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:

• schema es el mismo nombre que el del propietario.

• table es el nombre de la tabla.

• DEFAULT expr especifica un valor por defecto si se omite un valor en la sentencia INSERT.

• column es el nombre de la columna.

• datatype es el tipo de dato y la longitud de la columna.

Nota: Se necesita el privilegio CREATE ANY TABLE para crear una tabla en cualquier esquema
distinto del esquema del usuario.

Sentencia CREATE TABLE

Especifique en la sentencia

- nombre de la tabla

- nombre de columna, tipo de dato de columna, tamaño de columna

- restricción de integridad (opcional)

- valores por defecto (opcional)

Creación de tablas

- Crear una tabla


CREATE TABLE dept

(deptno NUBER (2),

Dname VERCHARD2 (14),

Loc VARCHARD2 (13),

Créate_date DATE DEFAULT SYSDATE);

- Para confirmar que se ha creado la tabla, ejecute el comando DESCRIBE

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

Confirmar la reacción de la tabla DESCRIBE dept;

TIPOS DE DATOS

 Varchar2(size) dato de carácter de longitud variable (se debe especificar un tamaño


máximo 32767 bytes si MAX_SQL_STRING_SIZE = EXTENDED , 4000 bytes si
MAX_SQL_STRING_SIZE = LEGACY ; tamaño mínimo es 1)

 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)

 NUMBER (p, s) datos numéricos de longitud variable, la precisión es p, y la escala s (la


precisión es el número total de dígitos decimales, y la escala el número de dígitos a la
derecha del punto decimal: la precisión puede ir de 1 38 Y La escala de -84 a 127)

 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.

 LONG datos de carácter de longitud variable (hasta 2 GB)

 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

 LONG RAW datos binarios raw de longitud variable hasta 2 GB

 BLOB objeto grande binario, el tamaño máximo es (4GB - 1) *(parámetro de inicialización


DB_BLOCK_SIZE (de 8 TB * 128 TB))

 BFILE datos binarios almacenados en un archivo externo (hasta 4 GB)


 ROWID cadena de base 64 que representa la dirección única de una fila en su tabla
correspondiente, este tipo de dato es principalmente para valores devueltos por la
pseudocolumna rowid

Tipos de dato de fecha

 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 YEAR TO MONTH permite el tiempo como un intervalo de años y meses, se


utiliza para representar la diferencia entre dos valores de fecha y hora en los que las
únicas partes significativas son el año y él es

 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

Puede utilizar varios tipos de dato de fecha.

Ejemplo de TIMESTAMP WITH TIMEZONE:

CREATE TABLE table_tstz (c_id NUMBER, c_tstz TIMESTAMP WITH

TIME ZONE);

INSERT INTO table_tstz VALUES(1, '01-JAN-2003 2:00:00 AM – 07:00');

Ejemplo, tipos de datos de fecha

Ej. de tipo de dato tiemstamp

CREATE TABLE table_ts(c_id NUMBER(6), c_ts TIMESTAMP);

INSERT INTO table_ts VALUES (1. ’01-JAN-2003 2:00:00’);

EJ de una tabla con las columnas TIMESTAMP, INTERVAL YEAR TO MONTH e INTERVAL DAY TO
SECOND

CREATE TABLE time_table

(start_time TIMESTAMP,

DURATION_1 INTERVAL DAY (6) TO SECOND (5),

DURATION_2 INTERVAL YEAR TO MONTH)

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

- Los valores literales, expresiones o funciones SQL son valores validos

- El nombre de otra columna o una pseudocolumna son valores no validos

- El tipo de dato por defecto debe coincidir con el tipo de dato de la columna

CREATE TABLE hire_dates

(id NUMBER (8),

Hire_date DATE DEFAULT SYSDATE); table created

Observe el siguiente ejemplo, donde la sentencia inserta el valor NULL en lugar del valor por
defecto:

INSERT INTO hire_dates values(45, NULL);

En el siguiente ejemplo, la sentencia inserta SYSDATE para la columna HIRE_DATE, ya que es el


valor

DEFAULT:

INSERT INTO hire_dates(id) values(35);

Inclusión de restricciones

 Las restricciones aplican reglas en el nivel de tabla

 Las restricciones garantizan la consistencia e integridad de la base de datos

 Los siguientes tipos de restricciones son válidos:

NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK

RESTRICCIONES DE INTEGRIDAD DE DATOS

 NOT NULL, La columna no puede contener un valor nulo

 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))

 CHECK una condición debe ser true

DIRECTRICES DE RESTRICCION

 Asignar un nombre a una restricción (de lo contrario el servidor de ORACLE genera un


nombre con el formato SYS_Cn).

 Es fácil hacer referencia a las restricciones si se les asigna un nombre significativo (por
ejemplo, employee_employee_id_pk)

 Crear una restricción en uno de los siguientes momentos


o En el momento de la creación de la tabla

o Después de la creación de la tabla

 Definir una restricción en el nivel de columna o de tabla

 Ver una restricción en el diccionario de datos

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:

CREATE TABLE DEPT_SAMPLE(DEPT_ID NUMBER(2) PRIMARY KEY, DEPARTMENT_ID


VARCHAR2(50));

 Las restricciones de nivel de columna se incluyen al definir columna

 Las restricciones de nivel de tabla se definen al final de la definición de tabla y deben


hacer referencia a la columna o las columnas a las que pertenece la restricción

 Funcionalmente una restricción de nivel de columna es lo mismo que una restricción de


nivel de tabla

 Las restricciones not null solo se pueden definir en el nivel de columna

 Las restricciones que se aplican a más de una columna se deben especificar en el nivel de
tabla

Definición de restricciones

Sintaxis de CREATE TABLE con CONSTRAINTS

En la sintaxis:

• schema es el mismo nombre que el del propietario.

• table es el nombre de la tabla.

• DEFAULT expr especifica un valor por defecto que se utiliza si se omite un valor en la
sentencia INSERT.

• column es el nombre de la columna.

• datatype es el tipo de dato y la longitud de la columna.

• column_constraint es una restricción de integridad como parte de la definición de


columna.

• table_constraint es una restricción de integridad como parte de la definición de


tabla.

 Sintaxis de restricciones de nivel columna

Columna (CONSTRAINT constraint_name) constraint_type;

 Sintaxis de restricción de nivel de tabla

Columna

(CONSTRAINT constraint_name)constraint_type
Ejemplos: definición de restricciones

- Restricción de nivel de columna

o Employee:id NUMBER(6)CONSTRAINT emp_emp_:id_pk PRIMARY KEY

- Restricción de nivel de tabla

o …. CONTRAINT emp_emp_id_pk PRIMARY KEY (employee_id);

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

• Garantiza que no se permiten los valores nulos para la columna:


 Restricción NOT NULL (La clave primaria aplica la restricción NOT
NULL)
 Ausencia de la restricción NOT NULL (cualquier fila puede contener
un valor nulo para esta columna)
La creación de restricciones NOT NULL aplica los atributos
obligatorios en el diseño.
Restricción NOT NULL

• Solo se puede definir en el nivel de columna:

CRE.ATE TABLE employees (


employee id NUMBER (6) ,
last name VARCHAR2 (25) NOT NULL,
email VARCHAR2 (25) ,
salary NUMBER (8 ,2)
commission_pct NUMBER (2 ,2)
hire_date DATE CONSTRAINT hire date nn 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.

 Solo se puede crear una clave primaria para cada tabla.

 La restricción PRIMARY KEY es una columna o un juego de columnas que identifica de


forma única cada fila de una tabla.
 Ninguna columna que forme parte de la clave primaria puede contener un valor nulo.

 Se debe crear una clave primaria compuesta en el nivel de 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

 La restricción FOREIGN KEY (o integridad referencial) designa una


columna o una combinación de columnas como clave ajena.
 Establece una relación con una clave primaria en la misma tabla o
en una diferente.
 A continuación, se muestran las directrices para las restricciones
de clave ajena:
* El valor de clave ajena debe coincidir con un valor existente de
la tabla principal o ser un valor NULL.
Las claves ajenas se basan en los valores de datos y son punteros
puramente lógicos, en lugar de físicos.
Las claves ajenas compuestas se deben crear mediante la definición de nivel de tabla.
En la diapositiva, el ejemplo define una restricción FOREIGNKEY en la columna
DEPARTMENT_ID de la tabla EMPLOYEES, mediante la sintaxis de nivel de tabla. El nombre
de la restricción es EMP_DEPT_FK.
La clave ajena se puede definir también en el nivel de columna, siempre que la restricción esté
basada en una sola columna. La sintaxis difiere en que las palabras clave FOREIGNKEY no
aparecen. Por ejemplo:
CREATE TABLE employees
(...
department_id NUMBER(4) CONSTRAINT emp_deptid_fk
REFERENCES departments(department_id),
...
)
Se debe crear una clave ajena compuesta en el nivel de la tabla, por ejemplo:
CREATE TABLE supplier
( sup_id numeric(15) not null,
sup_name varchar2(45) not null,
contact_name varchar2(45),
CONSTRAINT sup_pk PRIMARY KEY (sup_id, sup_name)
);
Restricción FOREIGN KEY: Palabras clave
• FOREIGN KEY: Define la columna en la tabla secundaria en el nivel de
restricción de tabla.
• REFERENCES: Identifica la tabla y la columna en la tabla principal.
• ON DELE TE CASCADE: Suprime las filas dependientes de la tabla
secundaria cuando se suprime una fila de la tabla principal.
• ON DELETE SET NULL: Convierte los valores de clave ajena dependiente
en nulos.

Sin las opciones ONDELETECASCADE u ONDELETESETNULL, la fila de la tabla principal no


se puede suprimir si se hace referencia a ella en la tabla secundaria. Y estas palabras clave no
se pueden utilizar en la sintaxis en el nivel de columna.
Restricción CHECK
• Define una condición que debe cumplir cada fila.
• No puede hacer referencia a columnas de otras tablas.
CREATE TABLE employees
salary CONSTRAINT emp salary min
CHECK (salary > 0)
(CHECK constraint shown here at column level)
Para cumplir la restricción, en cada fila de la tabla se debe definir la condición como TRUE o
desconocida (debido a un valor nulo).
Una sola columna puede tener varias restricciones CHECK que hagan referencia a la columna
en su definición. No hay ningún límite en cuanto al número de restricciones CHECK que
puede definir en una columna.
Las restricciones CHECK se pueden definir en el nivel de tabla o de columna.
Escenario de caso: Creación de tablas
¿Cómo agregar restricciones a las tablas de la base de datos de
biblioteca simplificada?
Lenguaje de definición de datos
• La creación de tablas forma parte del lenguaje de definición de
datos de SQL
• Entre otras sentencias DDL se incluyen:
— ALTER: Para modificar la estructura de un objeto
— DROP: Para eliminar un objeto de la base de datos
— RENAME: Para cambiar el nombre de un objeto de base de datos
Sentencia ALTER TABLE
Utilice la sentencia ALTER TABLE para cambiar la estructura de tabla:
•Agregar una columna
• Modificar una definición de columna existente
• Definir un valor por defecto para la nueva columna
• Borrar una columna
• Cambiar el nombre de una columna
• Cambiar una tabla al estado de solo lectura
Después de crear una tabla, puede que necesite cambiar la estructura de la tabla por
cualquiera de las siguientes razones:
•Ha omitido una columna.
•Debe cambiar la definición de columna o su nombre.
•Debe eliminar columnas.
•Desea definir la tabla en modo de solo lectura.
Sentencia ALTER TABLE
• Utilizar la sentencia ALTER TABLE para agregar, modificar y borrar
columnas:
ALTER TABLE table
ADD (column data type [DEFAULT expr]
[ , column data type]
ALTER TABLE table
MODIFY (column data type [DEFAULT expr]
column data type] . )
ALTER TABLE table
DROP (column column]
En la sintaxis:
•table es el nombre de la tabla.
•ADD|MODIFY|DROPes el tipo de modificación.
•column es el nombre de la columna.
•data type es el tipo de dato y la longitud de la columna.
•DEFAULT expr especifica el valor por defecto de una columna.
Adición de columnas

• Puede utilizar la cláusula ADD para agregar columnas:

ALTER TABLE dept

ADD job_id VARCHAR2 (9) ;

• La nueva columna se convierte en la última:

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

ALTER TABLE <table name>


SET U)USED (<column name> [
OR
ALTER TABLE <table name>
SET UNUSED COLI-nm <column name> [
<column name>] ;

ALTER TABLE <table name>


DROP UNUSED ;

ALTER TABLE dept


SET tm-JSED (dname) ;

ALTER TABLE dept


DROP UNUSED COLUMNS ;

Al definir una columna como UNUSED , tiene la opción de borrar esa


Puede utilizar DROP UNUSED COLUMNS para eliminar de la tabla todas las columnas que estén
marcadas actualmente como no utilizadas. Puede utilizar esta sentencia cuando desee
reclamar el espacio en disco adicional de las columnas no utilizadas en la tabla. Si la tabla no
contiene columnas no utilizadas, la sentencia no devuelve ningún error.
Nota:
Una opción DROP UNUSED COLUMNS posterior elimina físicamente todas las columnas no
utilizadas de una tabla, de forma similar a DROP COLUMN
Escenario de caso: Modificación de tablas

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.

Sintaxis de la sentencia INSERT


• Antes de ejecutar cualquier operación DML en una tabla, realice una
copia de la tabla:
CREATE TABLE copy departments
AS (SELECT * FROM departments) ;
• Tenga en cuenta que, al copiar una tabla de esta manera, no se
copian todas las restricciones (solo las NOT NULL).
Inserción de filas
• Si inserta una fila que contiene valores para cada columna, no es
necesaria la lista de columnas en la cláusula INSERT
• Mostrar valores en el orden por defecto de las columnas de la tabla
• Se debe proporcionar un valor para cada columna
INSERT INTO copy departments
VALUES (40, ‘advertising’, 201,1800)
• Opcionalmente, enumere las columnas en la
cláusula1NSERT.
INSERT INTO copy departments (department id, department name, manager
id, location id)
VALUES (70, ' Public Relations ' 100, 1700);
• Enumere los valores en el mismo orden en que aparecen los campos.
• Delimite los valores de caracteres y de fecha entre comillas
simples.
Escenario de caso: Inserción de filas
Alumno
Entiendo que la sentencia INSERT se utiliza para agregar filas a una
tabla.
¿Es posible insertar una fila si algunas columnas no tienen valores?

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

• Puede utilizar funciones para introducir valores

especiales en la tabla.

• La función SYSDATE registra la fecha y la hora actuales.


INSERT INTO copy employees (employee id,
First_name, last_name ,
email, phone_number ,
hire date, job_id, salary ,
commission_pct, manager_id,
department_id)
VALUES (113,
' Louis' , Popp'
' LPOPP ', '515.124.4567',
SYSDATE , 'AC ACCOUNT' , 6900,
NULL, 205, 110) ;
Nota: En primer lugar, cree la tabla copy_employees: CREATE copy_employees AS (SELECT *
FROM employees);
En el ejemplo de la diapositiva se registra información sobre el empleado Popp en la tabla
EMPLOYEES. Proporciona la fecha y hora actuales en la columna HIRE_DATE. Utiliza la
función SYSDATE para devolver la fecha y hora actuales del servidor de base de datos.
También puede utilizar la función CURRENT_DATE para devolver la fecha actual en la zona
horaria de la sesión.
Al insertar filas en una tabla, también puede utilizar la función USER para registrar el nombre
de usuario actual.
Inserción de valores de fecha y hora específicos

• 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.

Nota: Si no se suprime ninguna fila, se devuelve el mensaje “0 rows deleted”.


Supresión de filas de una tabla

• Si se incluye la cláusula WHERE, se suprimen filas concretas:


DELETE FROM copy departments
WHERE department name = ' Purchasing' ;
• Si se omite la cláusula WHERE, se suprimen todas las filas de la
tabla:
DELETE FROM copy departments ;
A continuación, se muestra un ejemplo de eliminación de las filas identificadas en la cláusula
WHERE:
DELETE FROM copy_departments WHERE department_id IN (30, 40);

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.

Si la tabla es el principal de una restricción de integridad referencial, no puede truncarla. Debe


desactivar la restricción antes de emitir la sentencia TRUNCATE. La desactivación de las
restricciones se trata en la lección titulada "Introducción a sentencias DDL".

6.5 lenguaje de control de transacciones TCL


Objetivos
En esta lección se abordan los siguientes objetivos:
• Describir la finalidad del lenguaje de control de transacciones
(TCL)
• Explicar las operaciones TCL que son necesarias para gestionar una
transacción:
- COMMIT
— SAVEPOINT
— ROLLBACK
• Describir la necesidad de consistencia de lectura
Application Express
• COMMIT, ROLLBACK y SAVEPOINT no están soportados en Oracle
Application Express, debido a la forma en que Oracle Application
Express gestiona las conexiones a la base de datos.
Transacciones de Base de Datos
• Las transacciones constan de sentencias DML que representan un
cambio consistente en los datos.
• El servidor de Oracle garantiza la consistencia de los datos basada
en transacciones.
• Las transacciones le proporcionan más flexibilidad y control al
cambiar los datos y garantizan la consistencia de los datos en caso de
fallo de proceso de usuario o del sistema.
• Por ejemplo, una transferencia de fondos entre dos cuentas debe
incluir el débito en una cuenta y el crédito en otra con la misma
cantidad. Ambas acciones deben ser correctas o incorrectas por igual;
el crédito no se debe confirmar sin el débito.
Una transacción de base de datos consta de una de las siguientes
sentencias:
• Sentencias DML que representan un cambio consistente en los datos
• Una sentencia DDL
• Una sentencia TCL
Transacciones de base de datos: Inicio y fin
• Una transacción empieza cuando se ejecuta la
primera sentencia SQL de DML.
• Termina con uno de los siguientes eventos:
— Se emite una sentencia COMMIT o ROLLBACK.
— Se ejecuta una sentencia DDL o TCL (confirmación
automática).
— El usuario sale del software SQL en uso.
— El sistema falla.
Ventajas de las sentencias COMMIT y ROLLBACK
con las sentencias COMMIT y ROLLBACK, puede:
• Garantizar la consistencia
• Visualizar una presentación preliminar de los cambios de los datos
antes de hacerlos permanentes
• Agrupan componentes relacionados de forma lógica
• Tener control sobre cambios permanentes de los datos
Sentencias de Control de Transacciones
COMMIT: Finaliza la transacción actual convirtiendo todos los cambios
de datos pendientes en permanentes.
SAVEPOINT nombre: Marca un punto de grabación en la transacción
actual.
ROLLBACK: Finaliza la transacción actual desechando todos los cambios
de datos pendientes.
ROLLBACK TO SAVEPOINT nombre: Realiza un rollback de la transacción
actual en el punto de grabación especificado, desechando de esta forma
los cambios y/o puntos de grabación creados después del punto de
grabación en el que está realizando el rollback. Si omite la cláusula
TO SAVEPOINT, la sentencia ROLLBACK realiza un rollback de toda la
transacción. Puesto que los puntos de grabación son lógicos, no hay
forma de mostrar los puntos de grabación que ha creado.

Sentencia de control de transacciones explicitas


Puede controlar la lógica de las transacciones mediante las sentencias COMMIT, SAVEPOINT y
ROLLBACK.
Nota: No puede aplicar la sentencia COMMIT en SAVEPOINT. SAVEPOINT no es SQL
estándar de ANSI.
Nota: COMMIT y ROLLBACK no están soportadas actualmente en APEX.
Cómo Deshacer Cambios de un Marcador
• Cree un marcador en una transacción actual mediante la sentencia
SAVEPOINT.
• Descarte cambios pendientes realizando rollback en dicho marcador
mediante la sentencia ROLLBACK TO SAVEPOINT.

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

• Todos los cambios realizados durante una transacción son temporales


si no se confirman, por lo tanto, se puede recuperar el estado
anterior de los datos.
• La sesión actual puede revisar los resultados de las operaciones DML
mediante la sentencia SELECT.
• Las demás sesiones no pueden ver los resultados de las sentencias
DML emitidas por la sesión actual.
• Las filas afectadas están bloqueadas; otras sesiones no pueden
cambiar los datos de las filas afectadas.
Estado de los datos después de COMMIT
• Los cambios de datos se guardan en la base de datos.
• Se sobrescribe el estado anterior de los datos.
• Todas las sesiones pueden ver los resultados.
• Los bloqueos de las filas afectadas se liberan y dichas filas quedan
disponibles para que las manipulen otras sesiones.
• Se borran todos los puntos de grabación.
Confirmación de Datos

• Realice estos cambios:


DELETE FROM copy employees
WHERE employee id=113;
I row(s) deleted.
INSERT INTO copy departnents
VALUES (290, ' corporate Tax' NULL , 1700) ;
I row(s) inserted.
• Confirme los cambios:
COMMIT ;
En el siguiente ejemplo, se eliminan los departamentos 290 y 300 en la tabla
copy_departments, actualiza una fila en la tabla copy_employeesy guarda los cambios en los
datos.
DELETE FROM copy_departments
WHERE department_id IN (290, 300);
UPDATE copy_employees
SET department_id = 80
WHERE employee_id = 206;
COMMIT;
Nota:La sentencia COMMIT no está soportada actualmente en APEX.
Estado de los datos después de ROLLBACK

Deseche todos los cambios pendientes mediante la sentencia ROLLBACK:

• Se deshacen los cambios de datos.

• Se restaura el estado anterior de los datos.

• Se liberan los bloqueos de las filas afectadas.

DELETE FROM copy employees,•

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.

Cada usuario ve los datos como estaban en la última sentencia COMMIT.

• Los cambios realizados por un usuario no entran en conflicto con los cambios realizados por
otro usuario.

• La consistencia de lectura garantiza que en los mismos datos:

— Los lectores no esperen a los escritores.

— Los escritores no esperen a los lectores.

— Los escritores esperen a los escritores.

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.

6.6 recuperación de datos mediante SELECT


Objetivos

En esta lección se abordan los siguientes objetivos:

• Enumerar las capacidades de las sentencias

SQL SELECT

• Escribir y ejecutar una sentencia SELECT que:

— Devuelve todas las filas y columnas de una tabla

— Devuelve columnas específicas de una tabla

— Utiliza alias de columna para mostrar cabeceras de columna descriptivas


En esta lección se abordan los siguientes objetivos:
• Escribir y ejecutar una sentencia SELECT que:
— Utiliza operadores aritméticos y de concatenación
— Utiliza cadenas de caracteres literales
— Elimina filas duplicadas
• Describir la estructura de una tabla
Sentencia SELECT básica
• SELECT identifica las columnas que se van a mostrar.
• FROM identifica la tabla que contiene esas columnas.
SELECT { * I [DISTINCT] columnl expression [alias]
FROM table;
En la sintaxis:
•SELECT es una lista de una o más columnas.
•* selecciona todas las columnas.
•DISTINCT suprime los duplicados.
•column|expression selecciona la columna o expresión con nombre.
•alias proporciona diferentes cabeceras a las columnas seleccionadas.
•FROM tableespecifica la tabla que contiene las columnas.

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.

Selección de todas las columnas


Para ver todas las columnas de una tabla coloque * despues de la palabra select
Selección de columnas concretas: proyección

• Puede utilizar la sentencia SELECT para mostrar columnas concretas


de la tabla indicando los nombres de columna en el orden que desea
verlas, separadas por comas.
SELECT department id, location id
FROM departments ;
Escritura de Sentencias SQL
Con estas sencillas reglas y directrices que se muestran a
continuación, puede construir sentencias válidas que son fáciles de
leer y editar.
Las sentencias SQL no son sensibles a mayúsculas/minúsculas.
Las sentencias SQL se pueden introducir en una o más líneas.
Las palabras clave no se pueden abreviar o dividir entre líneas y
suelen aparecer en mayúscula.
Las cláusulas se suelen colocar en líneas independientes.
El sangrado se utiliza para mejorar la legibilidad
En Application Express, las sentencias SQL pueden terminar con punto y
coma (;), pero no es obligatorio.
Expresiones Aritméticas
• Crear expresiones con datos de fecha y números mediante operadores
aritméticos.
• Los nombres de columna, constantes numéricas y operadores
aritméticos se pueden utilizar en expresiones aritméticas.
Operador Descripción
Sumar
Restar
Multiplicar
Dividir

• Los operadores aritméticos se pueden utilizar en cualquier cláusula


de sentencia SQL, excepto FROM.
Nota: Con los tipos de dato DATEy TIMESTAMP, solo puede utilizar operadores de suma y
resta.
Uso de Operadores Aritméticos
En este caso, el operador de suma se utiliza para calcular un aumento
de salario de 300 $ para todos los empleados.
SALARY + 300 se muestra como cabecera de columna.
SELECT last name, salary, salary + 300
FROM employees ;
La columna calculada resultante, salary + 300, no es una nueva columna en la tabla
EMPLOYEES; es solo para visualización. Por defecto, el nombre de una nueva columna
procede del cálculo que lo genera (en este caso, salary + 300).
Nota: El servidor de Oracle ignora los espacios en blanco antes y después del operador
aritmético.
Reglas de prioridad
•La multiplicación y división se evalúan antes de la suma y la resta.
•Los operadores de la misma prioridad se evalúan de izquierda a derecha.
•Los paréntesis se utilizan para sustituir la prioridad por defecto o para aclarar la sentencia.

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 ;

Definición de alias de columna


Un alias de columna:
• Cambia el nombre de una cabecera de columna
• Es útil para realizar cálculos
• Sigue inmediatamente al nombre de columna (también puede ser la
palabra clave opcional AS entre el nombre de columna y el alias).
• Necesita comillas dobles si contiene espacios o caracteres
especiales o si es sensible a mayúsculas/minúsculas.
Uso de alias de columna
SELECT last name AS name,
commission_pct conun
FROM employees ;
• La palabra clave AS es opcional
• Los nombres de columna aparecen en mayúscula por defecto
SELECT last name "Name "
salary*12 "Annual Salary"
FROM employees ;
• Los nombres de columna entre paréntesis aparecerán como se hayan
introducido
Nota: No se puede hacer referencia a un alias en la lista de columna que contiene la definición
del alias. Por ejemplo, al escribir una sentencia SELECTdel siguiente modo, se devuelve un
error:
SELECT last_name "Name" , salary*12 "Annual Salary", Annual Salary
+100
FROM employees;
ORA-00904: "ANNUAL SALARY": invalid identifier
Operador de concatenación
• Enlaza columnaso cadenas de caracteresa otras columnas
• Se representa con dos barras verticales (l l)
• Crea una columna que es una expresión de carácter
SELECT last namel I job id AS "Employees "
FROM employees ;
• La concatenación de una sentencia NULL con un carácter da como
resultado una cadena de caracteres.
Cadenas de caracteres literales
• Un literal es un carácter, un número o una fecha
que se incluye en la sentencia SELECT.
• Los valores literales de caracteres y fecha se deben
incluir entre comillas simples.
• Cada cadena de caracteres es la salida una vez
para cada fila devuelta.
Uso de Cadenas de Caracteres Literales
SELECT last name I l' is a ' I I job id
AS "Employee Details "
FROM employees ;
• En el ejemplo, el apellido y el job_id de cada empleado se
concatenan con un literal para proporcionar a las filas devueltas más
significado.
Operador de comillas (q) alternativo
SELECT department name I I q' [ Department's Manager Id:
I I manager id
AS "Depar tment and Manager "
FROM departments ;
Muchas de las sentencias SQL utilizan literales de caracteres en
expresiones o condiciones.
Si el propio literal contiene una comilla simple, puede utilizar el
operador de comillas (q) y seleccionar su propio delimitador de
entrecomillado, en este caso, los corchetes []
Puede seleccionar cualquier delimitador adecuado, ya sea de un solo byte o multibyte, o bien
cualquiera de los siguientes pares de caracteres: [ ], { }, ( ) o < >.
Filas Duplicadas
• La visualización por defecto de las consultas incluye todas las
filas, también las filas duplicadas.
• Para eliminar filas duplicadas en el resultado, incluya la palabra
clave DISTINCT en la cláusula SELECT inmediatamente después de la
palabra clave SELECT
SELECT department id
FROM employees ;
DEPARTMENT_ID
Puede especificar varias columnas después del cualificador DISTINCT. Ese cualificador afecta
a todas las columnas seleccionadas y el resultado que se muestra es una combinación distinta
de las columnas.
SELECT DISTINCT department_id, job_id
FROM employees;
Nota: También puede especificar la palabra clave UNIQUE, que es sinónimo de la palabra
clave DISTINCT.
Visualización de la Estructura de Tabla
• Utilice el comando DESCRIBE para mostrar la estructura de una tabla,
incluidos el nombre de columna, tipo de dato y nulidad.
• O seleccione el explorador de objetos de APEX en el taller de SQL
para ver la estructura de la tabla.
• Puede hacer clic en el botón Buscar tablas en los comandos SQL de
APEX para ver las estructuras de tablas también.
DESC [RIBE] tablename
6.7 restriccion de datos mediante WHERE

Objetivos

En esta lección se abordan los siguientes objetivos:

• Limitar filas con:

— Cláusula WHERE

— Operadores de comparación que utilizan las condiciones =,<=,>=,<>,<,>,!=,^=, BETWEEN, IN,


LIKE y NULL

— Condiciones lógicas que utilizan los operadores AND, OR y NOT

• Describir las reglas de prioridad de los operadores en una expresión

Limitacion de filas con una selección (WHERE)


Limitación de las filas seleccionadas
• Restrinja las filas devueltas mediante la cláusula WHERE:
SELECT *l { [DISTINCT] columnl expression [alias]
FROM table
[WHERE Io ica1 expression (s) ] ;
• Si la expresión lógica se evalúa como true, sen devolverá la fila
que cumpla con la condición.
• La cláusula WHERE sigue a la cláusula FROM.
En la sintaxis:
•WHERErestringe la consulta a filas que cumplan con una condición.
•logical expression consta de nombres de columnas, constantes y un operador de
comparación. Especifica una combinación de una o más expresiones y operadores booleanos y
devuelve un valor de TRUE, FALSE o UNKNOWN.

La cláusula WHEREpuede comparar valores en columnas, literales, expresiones aritméticas o


funciones. Consta de tres elementos:
•Column name
•Condición de comparación
•Nombre de la columna, constante o lista de valores
Uso de la cláusula WHERE
• Recupere todos los empleados del departamento 90
SELECT employee id, last name, job id, department id
FROM employees
WHERE department id = 90
Nota: No puede utilizar un alias de columna en la cláusula WHERE.
Fechas y cadenas de caracteres

• Las cadenas de caracteres y valores de fecha se incluyen entre comillas simples.

• Los valores de caracteres son sensibles a mayúsculas/minúsculas y los valores de datos son
sensibles al formato.

SELECT last name, job id, department id

FROM employees

WHERE last name = ' Whalen '


Fechas y cadenas de caracteres
• El formato de visualización de la fecha por defecto es DD-Mon-YYYY .
SELECT last name
FROM employees
WHERE hire date = ' 29-Jan-2000 '
Operadores de comparacion
Nota: Los símbolos != y ^= también pueden representar la condición distinto de.

Uso de operadores de comparación


• Recupere registros de la tabla EMPLOYEES donde el
salario sea menor o igual que 3.000 $.
SELECT last name, salary
FROM employees
WHERE salary <= 3000
Otro ejemplo del uso de operadoresde comparación:
SELECT last_name, salary
FROM employees
WHERE hire_date > ‘01-JAN-1998’;
Nota: Al utilizar tipos de dato de fecha o caracteres, el literal debe incluirse entre comillas
simples.
Condiciones de rango: Operador BETWEEN
• Utilice el operador BETWEEN para mostrar filas basadas en un rango
de valores:
SELECT last name, salary
FROM employees
WHERE salary BETWEEN 2500 AND 3500
** Nota: al utilizar BETWEEN, el valor inferior debe especificarse
primero
Condiciones de la inscripción: Operador IN
• Utilice el operador IN para probar los valores en una lista:
SELECT employee id, last name, salary, manager id
FROM employees
WHERE manager id IN (100, 101, 201)
Nota: Los elementos de la lista pueden aparecer en cualquier orden
Otro ejemplo del uso del operador IN:
SELECT last_name, salary
FROM employees
WHERE job_id IN ('SA_MAN' , 'SA_REP');
Notas: Al utilizar tipos de dato de fecha o caracteres, el literal debe incluirse entre comillas
simples.
La columna utilizada para restringir filas no tiene que estar en la cláusula SELECT.
Condiciones de la inscripción: Operador
NOT IN
• Utilice el operador NOT IN para probar los valores
que no están en una lista:
SELECT employee id, last name, salary, manager id
FROM employees
Where department id NOT IN (60, 90, 100)
Otro ejemplo del uso del operador NOT IN:
SELECT last_name, salary
FROM employees
WHERE job_id NOT IN ('SA_MAN' , 'SA_REP');
Notas: Al utilizar tipos de dato de fecha o caracteres, el literal debe incluirse entre comillas
simples.
La columna utilizada para restringir filas no tiene que estar en la cláusula SELECT.
Coincidencia de Patrones: Operador LIKE
• Utilice el operador LI KE para realizar búsquedas con
comodines de valores de cadena de búsqueda válidos.
• Las condiciones de búsqueda pueden contener
caracteres literales o números:
— % indica cero o más caracteres.
indica un carácter.
SELECT first name
FROM employees
WHERE first nane 1,110 'SB '
En el ejemplo de la diapositiva, la sentencia SELECTdevuelve el nombre de la tabla
EMPLOYEESpara cualquier empleado cuyo nombre empiece por la letra "S". (tenga en cuenta
que se trata de la "S“ mayúscula). Por lo tanto, no se devolverán los nombres que empiecen
por "s" minúscula.
El operador LIKEse puede utilizar como método abreviado para algunas comparaciones
BETWEEN. El siguiente ejemplo muestra los apellidos y fechas de contratación de todos los
empleados que comenzaron a trabajar entre enero y diciembre de 2005:
SELECT last_name, hire_date
FROM employees
WHERE hire_date LIKE '%05';
Combinación de Caracteres Comodín

• Puede combinar los dos caracteres comodín (Z, con caracteres


literales para la coincidencia de patlones:
SELECT last name
FROM employees
WHERE last name LIKE ' OB'

• Puede utilizar el identificador ESCAPE para buscar los


símbolos % y reales.
SELECT employee id, last name, job id
FROM employees
WHERE job id LIKE 'BSA\ 8' ESCAPE ;
• De esta manera, se devolverán registros con SA _ en su job_id
El identificador ESCAPEidentifica la barra invertida (\) como el carácter de escape. En la
sentencia SQL, el carácter de escape precede al guion bajo (_) y hace que el servidor de Oracle
interprete el guion bajo de forma literal.
Uso de las condiciones NULL
• Pruebe condiciones nulas con los operadores IS
NULL o IS NOT NULL:
SELECT last name, manager id
FROM employees
WHERE manager id IS NULL
LAST_NAME MANAGER_ID
King
• No puede probar con — porque un valor nulo no puede ser igual o
desigual a cualquier valor.
Definición de Condiciones mediante los

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.

Existen dos condiciones en el ejemplo de la diapositiva para


establecer la prioridad del operador
AND
• La primera condición es que el ID de trabajo sea AD_PRES y que el
salario sea superior a 15.000 $.
• La segunda condición es que el ID de trabajo sea SA_REP
Por lo tanto, la sentencia
SELECT sería la siguiente: "Seleccionar la fila si un empleado es
presidente y
gana más de 15.000 $, o si el empleado es vendedor“.
Existen dos condiciones en el ejemplo de la diapositiva para los paréntesis.
•La primera condición es que el ID de trabajo sea AD_PRESo SA_REP.
•La segunda condición es que el salario sea superior a 15.000 $.

Por lo tanto, la sentencia SELECTsería la siguiente: "Seleccionar la fila si un empleado es


presidente o vendedor ysi el empleado gana más de 15.000 $".
6.8 Ordenacion de datos mediante ORDER BY
Objetivos
En esta lección se abordan los siguientes objetivos:
• Usar la cláusula ORDER BY para ordenar los resultados de las
consultas SQL
• Identificar la ubicación correcta de la cláusula ORDER BY en una
sentencia SELECT
• Utilizar ROWNUM para análisis de N principales
• Utilizar variables de sustitución en la cláusula WHERE
Uso de la cláusula ORDER BY
• Ordene las filas recuperadas con la cláusula ORDER BY:
—ASC: Orden ascendente (valor por defecto)
— DESC: Orden descendente
• La cláusula ORDER BY es la última en la sentencia
SELECT:
SELECT last name, job id, department id, hire date
FROM employees
ORDER BY hire date
Sintaxis:
SELECTexpr
FROM table
[WHERE condition(s)]
[ORDER BY{column, expr, numeric_position} [ASC|DESC]];
En la sintaxis:
•ORDER BY especifica el orden en el que se muestran las filas recuperadas.
•ASCordena las filas en orden ascendente. (Este es el orden por defecto).
•DESCordena las filas en orden descendente.
–Si no se utiliza la cláusula ORDER BY, el orden no está definido y puede que el servidor de
Oracle no vuelva a recuperar las filas en el mismo orden para la misma consulta. Utilice la
cláusula ORDER BY para mostrar las filas en un orden específico.
–Utilice las palabras clave NULLS FIRST o NULLS LASTpara especificar si las filas
devueltas que contengan valores nulos deben aparecer en primer o en último lugar en la
secuencia de ordenación.
Cláusula ORDER BY
• Los valores numéricos se muestran del más bajo al más alto.
• Los valores de fecha se muestran con el valor más reciente en primer
lugar.
• Los valores de caracteres se muestran en orden alfabético.
• Los valores nulos se muestran los últimos en orden ascendente y los
primeros si el orden es descendente.
• NULLS FIRST especifica que los valores NULL se deben devolver antes
que los valores que no son NULL.
• NULLS LAST especifica que los valores NULLse deben devolver después
que los valores que no son NULL.

Orden
• Ordenar en orden descendente:
SELECT last name, job id, department id, hire date
FROM employees

ORDER BY hire date DESC


• Ordenar por alias de columna:
SELECT employee id, last name,
FROM employees
ORDER BY annsal
El orden por defecto es ascendente:
•Los valores numéricos se muestran con los valores más bajos primero (por ejemplo,
de 1 a 999).
•Los valores de fecha se muestran con el valor más antiguo en primer lugar (por ejemplo, 01-
01-1992 antes que 01-01-1995).
•Los valores de caracteres se muestran en orden alfabético (por ejemplo, primero la "A" y por
último la "Z").
•Por defecto, los valores nulos se muestran al final para las secuencias ascendentes y al
principio para las secuencias descendentes. Puede cambiar esto si agrega la opción NULLS
FIRST o NULLS LAST.
•También puede ordenar por una columna que no esté en la lista SELECT.

Puede utilizar un alias de columna en la cláusula ORDER BY. El segundo ejemplo de la


diapositiva ordena los datos por salario anual.
Nota: No se debe confundir la palabra clave DESCque se utiliza aquí para la ordenación
descendente con la palabra clave DESCutilizada para describir las estructuras de tabla.
Orden
• Ordenar por posición numérica de la columna:
SELECT last name, job id, department id, hire date
FROM employees
ORDER BY 3;
• Ordenar por varias columnas:
SELECT last name, department id, salary
FROM employees
ORDER BY department id, salary DESC ;
Orden de ejecución
• El orden de ejecución de una sentencia SELECT es el siguiente:
— Cláusula FROM: busca la tabla que contiene los datos
— Cláusula WHERE: restringe las filas que se van a devolver
— Cláusula SELECT: selecciona las columnas solicitadas del juego de
datos reducido Cláusula ORDER B Y: ordena el juego de resultados
ANÁLISIS DE N PRINCIPALES
• El análisis de N principales es una operación SQL utilizada para
clasificar resultados.
SELECT ROWNUM As "Longest employed" , last name , hi re date
FROM
(SELECT last name, hire date
FROM employees
ORDER BY hire date)
WHERE ROWNUM <=3
Variables de sustitución
• Cuando ejecutan un informe, los usuarios normalmente buscan
restringir de forma dinámica los datos que se devuelven.
• Con ayuda de las variables de sustitución, puede crear informes que
soliciten a los usuarios proporcionar sus propios valores para
restringir el rango de datos devueltos.
• Puede embeber las variables de sustitución en un archivo de comandos
o en una única sentencia SQL. Una variable se puede considerar un
contenedor en el que se almacenan los valores temporalmente. Cuando se
ejecuta la sentencia, el valor almacenado se sustituye.
Uso de una variable de sustitución
• Utilice las variables de sustitución para solicitar valores
• Utilice una variable prefijada con un carácter de dos puntos ( : )
para solicitar al usuario un valor:
SELECT employee id, last name, salary, department id
FROM employees
WHERE employee id = : employee num
* *Nota: Debe permitir ventanas emergentes en el explorador.
SQL*Plus o SQL Developerproporciona esta flexibilidad al utilizar un signo &para identificar
cada variable de su sentencia SQL.
Uso de una variable de sustitución
• Si APEX detecta que la sentencia SQL contiene una variable de
sustitución, se le pide al usuario que introduzca un valor para esta.
 Después de introducir un valor y hacer clic en Submit, los
resultados aparecen en el separador
Results de la sesión de APEX.
Valores de carácter y fecha con variables de sustitución
• También puede utilizar valores de carácter o de fecha:
SELECT last name, department id, salary*12
FROM employees
WHERE job id - — : job ti tle

No es necesario que delimitelos literales con comillas si utiliza variables de sustitución en


APEX.
6.9 union de tablas mediante JOIN

Objetivos

En esta lección se abordan los siguientes objetivos:

• Escribir sentencias SELECT para acceder a datos de más de una tabla mediante uniones
igualitarias y no igualitarias

• Utilizar una unión automática para unir una tabla a sí misma

• 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

 A veces necesita utilizar datos de más de una tabla.

 Para producir el informe, necesita enlazar las tablas EMPLOYEES y


DEPARTMENTS, y acceder a los datos de ambas:
Tipos de uniones
• Uniones compatibles con el estándar SQL:1999:
— Uniones naturales con la cláusula NATURAL JOIN
— Uniones con la cláusula USING
— Uniones con la cláusula ON
— Uniones OUTER:
• LEFT OUTER JOIN
• RIGHT OUTER JOIN
• FULL OUTER JOIN
-CROSS JOIN
Unión de tablas mediante la sintaxis SQL:1999

• Utilizar una unión para consultar datos de más de una tabla:


SELECT tablel . column, table2. column
FROM tablel
[NATURAL JOIN table2] I
[JOIN
table2 USING (column name) ] I
[JOIN table2
ON (tablel . column name = table2. column name) ] I
[LEFT IRIGHTIFULL OUTER JOIN table2
ON (tablel . column nane = table2. column name) ] I
[CROSS JOIN table2] ;
En la sintaxis:
•table1.columnindica la tabla y la columna desde las que se recuperan los datos.
•NATURAL JOINune dos tablas basándose en el mismo nombre de la columna.
•JOIN table2 USING column_name realiza una unión igualitaria basándose en el
nombre de la columna.
•JOIN table2 ON table1.column_name = table2.column_name realiza una
unión igualitaria basándose en la condición de cláusula ON.
•LEFT/RIGHT/FULL OUTER se utiliza para realizar uniones OUTER.
•CROSS JOINdevuelve un producto cartesiano de las dos tablas.
Cualificación de nombres de columna ambiguos
• Utilizar prefijos de tabla para cualificar los nombres de columna
que están en varias tablas y evitar que se produzcan ambigüedades.
• Utilizar prefijos de tabla para aumentar la velocidad de análisis de
la sentencia.
• En lugar de prefijos de nombre de tabla completos, utilizar alias de
tabla.
• El alias de tabla proporciona a una tabla un nombre más corto,
mantiene el código SQL más pequeño y utiliza menos memoria.
Cualificación de nombres de columna ambiguos
• Utilizar alias de tabla para distinguir columnas que tienen nombres
idénticos, pero que residen en diferentes tablas.
SELECT e. first name , d. department name , d. manager id,
FROM employees e JOIN departments d
USING (deparment id)
Nota: Consulte las directrices de los alias de tabla en las notas de
la diapositiva

•El nombre de tabla se especifica por completo, seguido de


un espacio y del alias de tabla. Por ejemplo, a la tabla
EMPLOYEESse le puede proporcionar el alias e, y a la tabla
DEPARTMENTSel alias d.
•Los alias de tabla pueden tener hasta 30 caracteres de
longitud, pero los alias más cortos son mejores que los
largos.
•Si se utiliza un alias de tabla para un nombre de tabla
determinado en la cláusula FROM, el alias de tabla se deberá
sustituir por el nombre de tabla mediante la sentencia
SELECT (pero no en la cláusula USING; esto se analizará más
adelante).
•Los alias de tabla deben ser significativos.
•El alias de tabla es válido solo para la sentencia SELECT
actual.
Creación de uniones naturales
• La cláusula NATURAL JOIN está basada en todas las columnas de las
dos tablas que tienen el mismo nombre y el mismo tipo de dato.
• Selecciona filas de las dos tablas que tienen valores iguales en
todas las columnas coincidentes.
• Si las columnas con los mismos nombres tienen tipos de datos
diferentes, se devolverá un error.
Recuperación de registros con uniones naturales
• Utiliza el único campo que es común a las dos tablas
(DEPARTMENT_ID) para lleva a cabo la unión
SELECT department id, department name , location id, CITY
FROM departments NATURAL JOIN locations,•
Creación de uniones con la cláusula USING
• Si las tablas que se unen comparten varias columnas, se utilizarán
todos los campos comunes en la unión.
• Utilizar USING para especificar una única columna para una cláusula
JOIN en lugar de una cláusula NATURAL JOIN .
• La cláusula USING también se puede utilizar para hacer coincidir
columnas con el mismo nombre, pero diferentes tipos de datos.
• Las cláusulas NATURAL JOIN y USING se excluyen mutuamente.
Unión de nombres de columna
• Los valores de la columna DEPARTMENT ID deben ser iguales en ambas
tablas. Esto se denomina una unión igualitaria (también denominada
unión simple o interna)
EMPLOYEES
DEPARTMENT_ID
Recuperación de registros con la cláusula USING
• La cláusula USING especifica que la unión se realiza con la columna
DEPARTMENT IDy no con
MANAGER ID, que también es una columna común.
SELECT employee id, last name ,
location id, department id
FROM em Io ees JOIN de artments
USING (department id)
Uso de alias de tabla con la cláusula USING
• No utilizar un nombre o alias de la tabla en la cláusula USING.
• Si la misma columna se utiliza en otro lugar de la sentencia SQL, no
se le puede agregar un alias.
SELECT 1. city, d. department name
FROM locations 1 JOIN departments d
USING (location id)
WHERE d. location id = 1400;
Por ejemplo, la siguiente sentencia es válida:
SELECT l.city, d.department_name
FROM locations l JOIN departments d
USING (location_id)
WHERE location_id = 1400;
Las columnas comunes a ambas tablas, pero que no se utilizan en la cláusula USING, deben
tener como prefijo un alias de tabla, de lo contrario se devolverá el error “column ambiguously
defined”.
En la siguiente sentencia, manager_idestá presente tanto en la tabla EMPLOYEEScomo en
la tabla DEPARTMENTS; si manager_idno tiene un alias de tabla como prefijo, se devuelve
el error "column ambiguously defined".
La siguiente sentencia es válida:
SELECT first_name, d.department_name, d.manager_id
FROM employees e JOIN departments d USING (department_id)
WHERE department_id = 50;
Creación de uniones con la cláusula ON
• Con la cláusula NATURAL JOIN se crea una unión igualitaria de todas
las columnas con el mismo nombre y tipo de dato.
• Utilizar la cláusula ON para especificar las condiciones arbitrarias
o las columnas que se van a unir.
• La condición de unión está separada de otras condiciones de
búsqueda.
• La cláusula ON facilita la comprensión del código.
• La cláusula USING crea una unión igualitaria entre dos tablas
utilizando una columna con el mismo nombre, independientemente del
tipo de dato.
• La cláusula ON crea una unión igualitaria entre dos tablas
utilizando una columna de cada tabla independientemente del nombre o
el tipo de dato.
Recuperación de registros con la cláusula ON

• También puede utilizar la cláusula ON para unir columnas que tienen


nombres o tipos de datos diferentes.
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)
Creación de uniones en 3 direcciones con la cláusula ON
Debe haber 2 sentencias de unión al unir 3 tablas como se muestra
acontinuación:
SELECT employee id, city, department name
FROM employees e
JOIN departments d
ON d. department id = e. department id
JOIN locations I
ON d. location id = I. location id;

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

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)
where e. manager id = 149

union de una tabla consigo misma


Puede que a veces necesite unir una tabla consigo misma. Para buscar el nombre de cada
supervisor del empleado, necesita unir la tabla EMPLOYEESconsigo misma o realizar una
unión automática. Por ejemplo, para buscar el nombre del supervisor de Kochar:
•Busque a Kochar en la tabla EMPLOYEESconsultando la columna LAST_NAME.
•Busque el número del supervisor de Kochar consultando la columna MANAGER_ID. El
número del supervisor de Kochar es 100.
•Busque el nombre del supervisor con un EMPLOYEE_IDde 100 consultando la columna
LAST_NAME. El número de empleado de King es 100, por lo que King en el supervisor de
Kochar.

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

• La cláusula ON también se puede utilizar para unir columnas con


nombres diferentes, ya sea en la misma tabla o en otra diferente.

SELECT worker . last name enp, manager . last name mgr


FROM employees worker JOIN employees manager
ON (worker .manager id = manager . employee id) •
Uniones no igualitarias

La tabla JOB GRADES define el rango de valores de LOWEST_SAL y HIGHEST


SAL de cada GRADE LEVEL.

Por lo tanto, la columna GRADE LEVEL se puede utilizar para


asignargrados a cada empleado en función, de su salario.

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

Este ejemplo crea una unión no igualitaria para evaluar el grado de


salario de un empleado. El salario debe estar entre cualquier par

de los rangos de salario bajos y altos.

SELECT e. last name, e. salary, j . grade level

FROM employees e JOIN job grades j

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.

En el ejemplo de la diapositiva se han especificado los alias de tabla por motivos de


rendimiento, no por una posible ambigüedad.
Devolucion de registros sin concidencia directa con union outer
Si una fila no cumple una condición de unión, la fila no aparece en el resultado de consultas.
En el ejemplo de la diapositiva, se utiliza una condición de unión igualitaria simple en las tablas
EMPLOYEESy DEPARTMENTSpara devolver el resultado a la derecha.
SELECT employees.department_id, department_name, last_name
from employees, departments
where employees.department_id = departments.department_id;
El juego de resultados no contiene:
•El ID de departamento 190, porque no hay ningún empleado con dicho IDregistrado en la
tabla EMPLOYEES
•El empleado con apellido Grant, porque a este empleado no se le ha asignado un IDde
departamento

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.

Uniones INNER frente a uniones OUTER

• En SQL:1999, la unión de dos tablas que devuelven solo filas


coincidentes se denomina unión INNER. (Cláusulas NATURALJOIN, USING,
ON)

• 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

• En este caso queremos ver todos los registros de departamento


(tabla de la derecha) incluso si no contienen empleados.
SELECT e. last_name, d. department id, d. department_name
FROM anployees e RIGHT OUTER JOIN departments d
ON (e . department id = d. department id)

FULL OUTER JOIN

• En este caso queremos ver todos los registros de empleado y todos


los registros de departamento

SELECT e . last name, d. department id, d. department name

FROM employees e FULL OUTER JOIN departments d

On (e.department id = d. department id)


Productos cartesianos

• Un producto cartesiano se genera cuando se muestran todas las


combinaciones de filas. Todas las filas de la primera tabla se unen a
todas las filas de la segunda tabla.

SELECT last name, &part2tEnt nane


FROM employees, departrtEnts

• Se genera un producto cartesiano cuando se omite una condición de


unión o esta no es válida.

• Se incluye siempre una condición de unión válida si desea evitar un


producto cartesiano.

SELECT last name, name


FROM e Io ese d artrnents d
WHERE e. de artnent id = d. de artment id
Un producto cartesiano suele generar un gran número de filas y el resultado es poco
útil,salvopara determinadas pruebas en las que necesite generar un gran número de filas para
simular una cantidad razonable de datos.
Creación de uniones cruzadas

• La cláusula CROSS JOIN produce el producto combinado de dos tablas.

• Esto también se denomina un producto cartesiano entre dos tablas.


SELECT last name, department name
FROM em lo ees
CROSS JOIN de artments
La técnica CROSS JOINse puede aplicar de forma útil en algunas situaciones. Por ejemplo,
para devolver el coste de mano de obra total por oficina por mes, incluso si el mes X no tiene
ningún coste de mano de obra, puede realizar una unión cruzada de oficinas con la tabla de
todos los meses.
Es una práctica aconsejable declarar de forma explícita CROSS JOIN en SELECTsi desea
crear un producto cartesiano. Por lo tanto, queda muy claro que desea que esto ocurra y que
no se trata del resultado de la falta de uniones.

También podría gustarte