Sei sulla pagina 1di 27

BA2_ora_01

Oracle Database 11g SQL


INTRODUCCIN AL LENGUAJE DE CONSULTA ESTRUCTURADO (SQL)
Data Manipulation Language (DML) comandos que modifican el contenido de tablas. Hay tres comandos DML: INSERT agrega filas a una tabla. UPDATE cambia filas. DELETE remueve filas. Data Definition Language (DDL) comandos que definen la estructura de los datos, por ejemplo las tablas, eso compone una base de datos. Hay cinco tipos bsicos de comandos DDL: CREATE crea una estructura de la base de datos. Por ejemplo, CREATE TABLE se utiliza para crear una tabla; otro ejemplo es CREATE USER, que se utiliza para crear a un usuario de la base de datos. ALTER modifica una estructura de la base de datos. Por ejemplo, ALTER TABLE se utiliza modificar una tabla. DROP quita una estructura de la base de datos. Por ejemplo, DROP TABLE se utiliza para quitar una tabla. RENAME cambia el nombre de una tabla. TRUNCATE elimina todas las filas de una tabla. Transaction Control (TC) registran permanentemente cualquier cambio realizado a las filas, o deshacen esos cambios. Hay tres declaraciones del TC: COMMIT registra permanentemente los cambios realizados a las filas. ROLLBACK deshace los cambios realizados a las filas. SAVEPOINT fija un punto de grabacin al cul usted puede deshacer cambios. Data Control Language (DCL) cambian los permisos en las estructuras de la base de datos. Hay dos comandos de DCL: GRANT da otro acceso de usuario a sus estructuras de la base de datos. REVOKE evita que otro usuario tenga acceso a sus estructuras de la base de datos.

SQL DEVELOPER

Escuela Tecnolgica Superior - UDEP

Pgina 1

BA2_ora_01

CREANDO EL ESQUEMA DE ALMACENAMIENTO


Corriendo un SQL Plus Script para crear un esquema CREATE SMALLFILE TABLESPACE "NORTHWIN" DATAFILE 'D:\ORACLE11G\ORADATA\ORCLETS\DATANORTHWIN' SIZE 100M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO DEFAULT NOCOMPRESS;

Escuela Tecnolgica Superior - UDEP

Pgina 2

BA2_ora_01
CREATE SMALLFILE TABLESPACE " NORTHWIN " DATAFILE 'D:\ORACLE11G\ORADATA\ORCLETS\DATANORTHWIN' SIZE 50M AUTOEXTEND ON NEXT 5M MAXSIZE 70M LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO DEFAULT NOCOMPRESS; CREATE SMALLFILE TABLESPACE " NORTHWIN " DATAFILE 'D:\ORACLE11G\ORADATA\ORCLETS\DATANORTHWIN' SIZE 50M AUTOEXTEND ON NEXT 5K MAXSIZE UNLIMITED LOGGING EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO DEFAULT NOCOMPRESS; ALTER TABLESPACE "NORTHWIN" RENAME TO "NORTHWIN1"; ALTER DATABASE DATAFILE 'D:\ORACLE11G\ORADATA\ORCLETS\DATANORTHWIN' RESIZE 60M;

Creando un usuario de Base de Datos


CREATE USER user_nombre IDENTIFIED BY user_clave; Donde: user_nombre es el nombre del usuario user_clave es la clave del usuario CREATE USER almacen IDENTIFIED BY ucisa; GRANT connect, resource TO almacen;

CREATE USER "LINUX01" IDENTIFIED BY "LIN01"; GRANT "CONNECT", "DBA" TO "LINUX01";

CREATE USER "U_NORTHWIN" PROFILE "DEFAULT" IDENTIFIED BY "*******" DEFAULT TABLESPACE "NORTHWIN" TEMPORARY TABLESPACE "TEMP" QUOTA UNLIMITED ON "NORTHWIN" ACCOUNT UNLOCK; GRANT "CONNECT" TO "U_NORTHWIN"; GRANT "DBA" TO "U_NORTHWIN"; GRANT "AQ_ADMINISTRATOR_ROLE" TO "U_NORTHWIN"; GRANT "CONNECT", "DBA", "AQ_ADMINISTRATOR_ROLE" TO "U_NORTHWIN";

CREATE USER "Usuario01" PROFILE "DEFAULT" IDENTIFIED BY "oracle" DEFAULT TABLESPACE "UT18-01" TEMPORARY TABLESPACE "TEMP" QUOTA UNLIMITED ON "UT18-01" ACCOUNT UNLOCK; GRANT "CONNECT", "DBA", "AQ_ADMINISTRATOR_ROLE" TO "Usuario01";

Escuela Tecnolgica Superior - UDEP

Pgina 3

BA2_ora_01
Tipos de datos Oracle CHAR (longitud) Almacena cadenas de caracteres de una longitud fija. El parmetro longitud especifica la longitud de la secuencia. Si se almacena una cadena de longitud ms pequea, se rellena con espacios en el extremo. Por ejemplo, el CHAR (2) puede utilcese para almacenar una cadena de longitud fija de dos caracteres; si C se almacena en un CHAR (2), un solo espacio se agrega al final; CA se almacena como es. VARCHAR2 (longitud) Almacena cadenas de caracteres de una longitud variable. El parmetro longitud especifica la longitud mxima de la secuencia. Por ejemplo, VARCHAR2 (20) se puede utilizar para almacenar una cadena de hasta 20 caracteres en longitud. No se utiliza ningn espacio en el final de cadenas ms pequeas. DATE almacena fechas y hora. El tipo DATE almacena el siglo, todo los 4 dgitos de un ao, el mes, el da, la hora (en formato de 24 horas), el minuto, y el segundo. El tipo DATE se puede utilizar para almacenar fechas y hora entre el 1 de enero de 4712 B.C. y el 31 de diciembre de 4712 A.D. INTEGER almacena nmeros enteros. Un nmero entero no contiene una coma flotante: es un nmero entero, tal como 1, 10, y 115. NUMBER (precisin, escala) Almacena nmeros de coma flotante, pero puede tambin ser utilizado para almacenar nmeros enteros. La precisin es el nmero mximo de los dgitos (a la izquierda y a la derecha del punto decimal, si es utilizado) que se pueden utilizar para el nmero. La precisin mxima apoyada por la base de datos de Oracle es 38. La escala es el nmero mximo de dgitos a la derecha de una coma (si es utilizado). Si ni la precisin ni la escala se especifica, cualquier nmero puede ser almacenado hasta una precisin de 38 dgitos. Cualquier tentativa de almacenar un nmero que exceda la precisin es rechazada por la base de datos. BINARY_FLOAT introducido por la base de datos Oracle 10g, almacena un nmero de coma flotante de simple precisin de 32 bit. BINARY_DOUBLE introducido en la base de datos Oracle 10g, almacena un nmero de coma flotante de precisin doble de 64-bit. Examinando las tablas del almacn CREATE TABLE ClientesOK ( Cliente_id INTEGER CONSTRAINT cliente_PK PRIMARY KEY, Nombre VARCHAR2(10) NOT NULL, Apellido VARCHAR2(10) NOT NULL, Fecha DATE, Telefono VARCHAR2(12) ); Begin Insert into ClientesOK values (1,'John','Brown','01/01/65','800-555-1211'); Insert into ClientesOK values (2,'Cynthia','Green','05/02/68','800-555-1212'); Insert into ClientesOK values (3,'Steve','White','16/03/71','800-555-1213'); Insert into ClientesOK values (4,'Gail','Black',NULL,'800-555-1214'); Insert into ClientesOK values (5,'Doreen','Blue','20/05/70',NULL); End; SELECT * FROM ClientesOK;

Escuela Tecnolgica Superior - UDEP

Pgina 4

BA2_ora_01
CREATE TABLE Tipos_productos ( Tipo_producto_id INTEGER CONSTRAINT Tipo_producto_PK PRIMARY KEY, Nombre VARCHAR2(10) NOT NULL ); Begin Insert into Tipos_productos values (1, 'Book'); Insert into Tipos_productos values (2,'Video'); Insert into Tipos_productos values (3,'DVD'); Insert into Tipos_productos values (4,'CD'); Insert into Tipos_productos values (5,'Magazine'); End; SELECT * FROM Tipos_productos;

CREATE TABLE Productos ( Producto_id INTEGER CONSTRAINT productos_PK PRIMARY KEY, Tipo_producto_id INTEGER CONSTRAINT productos_FK_Tipo_productos REFERENCES Tipos_productos(Tipo_producto_id), Nombre VARCHAR2(30) NOT NULL, Descripcion VARCHAR2(50), Precio NUMBER(5, 2) ); Begin Insert into Productos values (1,1,'Modern Science','A Description of modern science',19.95); Insert into Productos values (2,1,'Chemistry','Introduction to Chemistry',30); Insert into Productos values (3,2,'Supernova','A star explodes',25.99); Insert into Productos values (4,2,'Tank War','Action movie about a future war', 13.95); End;

SELECT * FROM Productos;

CREATE TABLE Adquisicion ( Producto_id INTEGER CONSTRAINT adquisicion_FK_productos REFERENCES productos(Producto_id), Cliente_id INTEGER CONSTRAINT adquisicion_FK_clientes REFERENCES ClientesOk(Cliente_id), cantidad INTEGER NOT NULL, CONSTRAINT adquisicion_PK PRIMARY KEY (Producto_id, Cliente_id) );

Escuela Tecnolgica Superior - UDEP

Pgina 5

BA2_ora_01
Begin Insert into Adquisicion values (1,1,1); Insert into Adquisicion values (2,1,3); Insert into Adquisicion values (1,4,1); Insert into Adquisicion values (2,2,1); Insert into Adquisicion values (1,3,1); End;

SELECT * FROM Adquisicion;

CREATE TABLE Empleados ( Empleado_id INTEGER CONSTRAINT empleados_PK PRIMARY KEY, Encargado_id INTEGER, Nombre VARCHAR2(10) NOT NULL, Apellido VARCHAR2(10) NOT NULL, Titulo VARCHAR2(20), Sueldo NUMBER(6, 0) ); Begin Insert into Empleados values (1, null,'James','Smith','CEO',800000); Insert into Empleados values (2, 1,'Ron', 'Johnson','Sales Manager',600000); Insert into Empleados values (3, 2,'Fred','Hobbs','Salesperson',150000); Insert into Empleados values (4, 2,'Susan','Jones','Salesperson',500000); End; SELECT * FROM Empleados;

CREATE TABLE Grado_sueldos ( Grado_sueldo_id INTEGER CONSTRAINT grado_sueldos_PK PRIMARY KEY, Sueldo_Min NUMBER(6, 0), Sueldo_Max NUMBER(6, 0) ); Begin Insert into Grado_sueldos values (1,1,250000); Insert into Grado_sueldos values (2,250001,500000); Insert into Grado_sueldos values (3,500001,750000); Insert into Grado_sueldos values (4,750001,999999); End;

SELECT * FROM Grado_sueldos;

Escuela Tecnolgica Superior - UDEP

Pgina 6

BA2_ora_01 ADICIONANDO, MODIFICANDO Y REMOVIENDO FILAS Adicionando una fila a una tabla
DESCRIBE ClientesOK; Name Null? Type ----------------------------------------- -------- -----------CUSTOMER_ID NOT NULL NUMBER(38) FIRST_NAME NOT NULL VARCHAR2(10) LAST_NAME NOT NULL VARCHAR2(10) DOB DATE PHONE VARCHAR2(12)

INSERT INTO ClientesOK (Cliente_id, Nombre, Apellido, Fecha, Telefono) VALUES (6, 'Fred', 'Brown', '01/01/1970', '800-555-1215'); SELECT * FROM ClientesOK;

INSERT INTO ClientesOK (Cliente_id, Nombre, Apellido, Fecha, Telefono) VALUES (1, 'Lisa', 'Jones', '02/01/1971', '800-555-1225');

Modificar una existente fila de una tabla


UPDATE ClientesOK SET Apellido = 'Orange' WHERE Cliente_id = 2; SELECT * FROM ClientesOK WHERE Cliente_id = 2;

Escuela Tecnolgica Superior - UDEP

Pgina 7

BA2_ora_01

Removiendo una fila desde una tabla DELETE FROM ClientesOK WHERE Cliente_id = 5; SELECT * FROM ClientesOK; ROLLBACK;

USANDO BINARY_FLOAT Y BINARY_DOUBLE EN UNA TABLA


CREATE TABLE Prueba_binario ( bin_float BINARY_FLOAT, bin_double BINARY_DOUBLE ); INSERT INTO Prueba_binario (bin_float, bin_double) VALUES (39.5f, 15.7d); -- F de float / d de double INSERT INTO Prueba_binario (bin_float, bin_double) VALUES (BINARY_FLOAT_INFINITY, BINARY_DOUBLE_INFINITY); Valores Especiales BINARY_FLOAT_NAN BINARY_FLOAT_INFINITY BINARY_DOUBLE_NAN BINARY_DOUBLE_INFINITY SELECT * FROM Prueba_binario; Descripcin No un numero (NaN) para el tipo BINARY_FLOAT Infinito (INF) para el tipo BINARY_FLOAT No un numero (NaN) para el tipo BINARY_DOUBLE Infinito (INF) para el tipo BINARY_DOUBLE

SALIENDO DEL SQL*PLUS


EXIT

INTRODUCCIN AL ORACLE PL/SQL


CREATE PROCEDURE Actualizar_pecio_producto ( p_producto_id IN Productos.Producto_id%TYPE, p_factor IN NUMBER ) AS producto_contador INTEGER; BEGIN -- cuenta el numero de productos con el supplied product_id (ser 1 si el producto existe)

Escuela Tecnolgica Superior - UDEP

Pgina 8

BA2_ora_01
SELECT COUNT(*) INTO producto_contador FROM Productos WHERE Producto_id = p_producto_id; -- Si el producto existe (Por ejemplo: product_count = 1) entonces actualiza el precio del producto IF producto_contador = 1 THEN UPDATE Productos SET precio = precio * p_factor WHERE producto_id = p_producto_id; COMMIT; END IF; EXCEPTION WHEN OTHERS THEN ROLLBACK; END Actualizar_pecio_producto; /

DECLARE V_producto_id Productos.Producto_id%TYPE; V_factor NUMBER; BEGIN V_producto_id := 2; V_factor := 1.1; Actualizar_pecio_producto(V_producto_id , V_factor ); END; Select * from productos;
Oracle Database 11g SQL Capitulo 2

RECUPERANDO INFORMACIN DESDE TABLAS DE UNA BASE DE DATOS


Ejecutando nica Tabla Instruccin SELECT SELECT Cliente_id, Nombre, Apellido, Fecha, Telefono FROM ClientesOK;

Recopilando todas las columnas desde una Tabla SELECT * FROM ClientesOK;

Escuela Tecnolgica Superior - UDEP

Pgina 9

BA2_ora_01

Especificando filas a recuperar usando la clausura WHERE


SELECT list of items FROM list of tables WHERE list of conditions; SELECT * FROM ClientesOK WHERE Cliente_id = 2;

Identificador de filas
SELECT ROWID, Cliente_id FROM ClientesOK;

DESCRIBE ClientesOK

Numero de fila
SELECT ROWNUM, Cliente_id, Nombre, Apellido FROM ClientesOK;

Escuela Tecnolgica Superior - UDEP

Pgina 10

BA2_ora_01
SELECT ROWNUM, Cliente_id, Nombre, Apellido FROM ClientesOK WHERE Cliente_id = 3;

Ejecucin Aritmtica
SELECT 2*6 FROM dual;

Ejecucin Aritmtica de fechas


SELECT TO_DATE('25-JUL-2007') + 2 FROM dual;

La tabla dual
Dual es una tabla que contiene una sola fila. El comando DESCRIBE muestra la estructura de la tabla dual, junto con la consulta que recupera la fila de la tabla dual: DESCRIBE dual

SELECT * FROM dual;

SELECT TO_DATE('02-AUG-2007') - 3 FROM dual;

SELECT TO_DATE('02-AUG-2007') - TO_DATE('25-JUL-2007') FROM dual;

Usando aritmtica en Columnas


SELECT Nombre, precio + 2 FROM productos;

Escuela Tecnolgica Superior - UDEP

Pgina 11

BA2_ora_01

SELECT Nombre, precio* 3 + 1 FROM productos;

SELECT 10 * 12 / 3 1 FROM dual;

SELECT 10 * (12 / 3 - 1) FROM dual;

Usando alias en Columnas


SELECT precio * 2 DOBLE_PRECIO FROM productos

Escuela Tecnolgica Superior - UDEP

Pgina 12

BA2_ora_01

SELECT precio * 2 "Doble Precio" FROM productos;

SELECT 10 * (12 / 3 - 1) AS "Computacion" FROM dual;

Combinando Columnas de Salida usando Concatenacin


SELECT Nombre || ' ' || Apellido AS "Nombre del cliente" FROM ClientesOK;

Valores Nulos
SELECT * FROM ClientesOK;

SELECT Cliente_id, Nombre, Apellido, Fecha FROM ClientesOK WHERE Fecha IS NULL;

Escuela Tecnolgica Superior - UDEP

Pgina 13

BA2_ora_01

SELECT Cliente_id, Nombre, Apellido, Telefono FROM ClientesOK WHERE Telefono IS NULL;

SELECT Cliente_id, Nombre, Apellido, NVL(Telefono, 'Numero de telefono desconocido') AS NUMERO_TELEFONO FROM ClientesOK;

SELECT Cliente_id, Nombre, Apellido, NVL(Fecha, TO_DATE('01-JAN-2000')) AS FECHA FROM ClientesOK;

Visualizando distintas filas


SELECT Cliente_id FROM Adquisicion;

SELECT DISTINCT Cliente_id FROM Adquisicion;

Escuela Tecnolgica Superior - UDEP

Pgina 14

BA2_ora_01 Comparando Valores


Operador = <> or ! = < > <= >= ANY SOME ALL Descripcin Igual No igual Menos que Mayor que Menor o igual Mayor o igual Compara un valor con cualquier valor en una lista Idnticos al operador ANY; usted debe utilizar ANY mas que SOME porque ANY es ms ampliamente utilizado y legible. Compara un valor con todos los valores en una lista

SELECT * FROM ClientesOK WHERE Cliente_id <> 2;

SELECT Producto_id, Nombre FROM Productos WHERE Producto_id > 8;

SELECT ROWNUM, Producto_id, Nombre FROM Productos WHERE ROWNUM <= 3;

SELECT * FROM ClientesOK WHERE Cliente_id > ANY (2, 3, 4);

SELECT * FROM ClientesOK

Escuela Tecnolgica Superior - UDEP

Pgina 15

BA2_ora_01
WHERE Cliente_id > ALL (2, 3, 4);

Usando operadores SQL


Operador LIKE (COMO) IN (EN) BETWEEN (ENTRE) IS NULL (ES NULO) IS NAN (ES NAN) IS INFINITE Descripcin Empareja patrones en cadenas de texto Empareja listas de valores Empareja una rango de valores Empareja valores nulos Empareja el valor especial de NAN, que significa no es un nmero (introducido en la base de datos 10 de Oracleg) Empareja valores BINARY_FLOAT y BINARY_DOUBLE (introducidos en la base de datos 10 de Oracleg)

NOT LIKE (NO COMO) NOT IN (NO ADENTRO) NOT BETWEEN (NO EN MEDIO) IS NOT NULL (NO ES NULO) IS NOT NAN (NO ES NAN) IS NOT INFINITE (NO ES INFINITO)

Usando el operador LIKE Raya (_) Empareja un carcter en una posicin especificada Por ciento (%) Empareja cualquier nmero de caracteres que comienzan en la posicin especificada SELECT * FROM ClientesOK WHERE Nombre LIKE '_o%';

SELECT * FROM ClientesOK WHERE Nombre NOT LIKE '_o%';

CREATE TABLE Promociones ( Promocion_id INTEGER CONSTRAINT promocion_PK PRIMARY KEY, Nombre VARCHAR2(20) NOT NULL ); Begin Insert into Promociones values (1,'10% off Z_Files'); Insert into Promociones values (2,'20% off Pop 3');

Escuela Tecnolgica Superior - UDEP

Pgina 16

BA2_ora_01
Insert into Promociones values (3,'30% off Moder Sci'); Insert into Promociones values (4,'20% off Tank War'); Insert into Promociones values (5,'10% off Chemistry'); Insert into Promociones values (6,'20% off Creative'); Insert into Promociones values (7,'15% off My Front'); End; SELECT * FROM Promociones; SELECT Nombre FROM Promociones WHERE Nombre LIKE '%\%%' ESCAPE '\';

SELECT Nombre FROM Promociones WHERE Nombre LIKE '%\_%' ESCAPE '\';

Usando el operador IN
SELECT * FROM ClientesOK WHERE Cliente_id IN (2, 3, 5);

SELECT * FROM ClientesOK WHERE Cliente_id NOT IN (2, 3, 5);

SELECT * FROM ClientesOK WHERE Cliente_id NOT IN (2, 3, 5, NULL);

Usando el operador BETWEEN


SELECT * FROM ClientesOK WHERE Cliente_id BETWEEN 1 AND 3;

Escuela Tecnolgica Superior - UDEP

Pgina 17

BA2_ora_01

SELECT * FROM ClientesOK WHERE Cliente_id NOT BETWEEN 1 AND 3;

Usando operadores Lgicos


Operador x AND y x OR y NOT x Descripcin Vuelve verdad cuando ambos x y y sea verdad Vuelve verdad cuando cualquiera x o y es verdad Vuelve verdad si x es falso, y vuelve falso si x es verdad

SELECT * FROM ClientesOK WHERE Fecha > '01-ENE-1970' AND Cliente_ID > 3;

SELECT * FROM ClientesOK WHERE Fecha > '01-ENE-1970' OR Cliente_ID > 3;

Precedencia de Operadores
SELECT * FROM ClientesOK WHERE Fecha > '01-ENE-1970' OR Cliente_ID < 2 AND Telefono LIKE '%1211';

WHERE Fecha > '01-ENE-1970' OR (Cliente_ID < 2 AND Telefono LIKE '%1211'); Ordenando filas usando la clausura ORDER BY

Escuela Tecnolgica Superior - UDEP

Pgina 18

BA2_ora_01
SELECT * FROM ClientesOK ORDER BY Apellido;

SELECT * FROM ClientesOK ORDER BY Nombre ASC, Apellido DESC;

SELECT Cliente_ID, Nombre, Apellido FROM ClientesOK ORDER BY 1;

Ejecucin de la instruccin SELECT que usa dos tablas


SELECT nombre, tipo_producto_ID FROM productos WHERE producto_id = 3;

SELECT nombre FROM Tipos_productos WHERE tipo_producto_ID = 2;

SELECT productos.nombre, Tipos_productos.nombre FROM productos, Tipos_productos WHERE productos.tipo_producto_ID = Tipos_productos.tipo_producto_ID

Escuela Tecnolgica Superior - UDEP

Pgina 19

BA2_ora_01
AND productos.producto_id = 3;

SELECT productos.nombre, Tipos_productos.nombre FROM productos, Tipos_productos WHERE productos.tipo_producto_ID = Tipos_productos.tipo_producto_ID ORDER BY productos.nombre;

Usando alias en Tablas


SELECT productos.nombre, Tipos_productos.nombre FROM productos, Tipos_productos WHERE productos.tipo_producto_ID = Tipos_productos.tipo_producto_ID ORDER BY productos.nombre; SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID = pt.tipo_producto_ID ORDER BY p.nombre;

Producto Cartesiano
SELECT pt.tipo_producto_ID, p.producto_id FROM Tipos_productos pt, productos p;

Ejecutando instruccin SELECT que usa ms de dos tablas SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt

Escuela Tecnolgica Superior - UDEP

Pgina 20

BA2_ora_01
WHERE p.tipo_producto_ID = pt.tipo_producto_ID ORDER BY p.nombre; SELECT c.Nombre, c.Apellido, p.nombre AS PRODUCTO, pt.nombre AS TYPE FROM ClientesOK c, Adquisicion pr, productos p, Tipos_productos pt WHERE c.Cliente_ID = pr.Cliente_ID AND p.producto_id = pr.producto_id AND p.tipo_producto_ID = pt.tipo_producto_ID ORDER BY p.nombre;

Condicin de enlace y tipos de enlace Igualdad utilice el operador de igualdad (=). Desigualdad utilice a operador con excepcin del operador de igualdad, por ejemplo: < >, BETWEEN, y as sucesivamente. Hay tambin tres diversos tipos de ensambla: Inner joins retorna una fila solamente cuando las columnas en el ensamble contienen los valores que satisfacen la condicin de unin. Esto significa eso si una fila tiene un valor nulo en una de las columnas en la condicin de unin, esa fila no se muestra. Outer joins retorna una fila aun cuando una de las columnas en la condicin del unin contiene un valor nulo. Self joins retorna las filas ensambladas en la misma tabla.

Enlaces de desigualdad
SELECT * FROM Grado_Sueldos;

SELECT e.Nombre, e.Apellido, e.Titulo, e.Sueldo, sg.Grado_sueldo_id FROM Empleados e, Grado_Sueldos sg WHERE e.sueldo BETWEEN sg.sueldo_Min AND sg.Sueldo_Max ORDER BY Grado_sueldo_id;

Escuela Tecnolgica Superior - UDEP

Pgina 21

BA2_ora_01 Outer Joins


SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID = pt.tipo_producto_ID (+) ORDER BY p.nombre;

SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID ORDER BY p.nombre;

Left Outer Join


SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID = pt.tipo_producto_ID (+) ORDER BY p.nombre;

Right Outer Join SELECT * FROM Tipos_productos;

Escuela Tecnolgica Superior - UDEP

Pgina 22

BA2_ora_01

SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID ORDER BY p.nombre;

Limitaciones de Outer Joins


SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID (+);

SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) IN (1, 2, 3, 4);

SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID OR p.tipo_producto_ID = 1;

Escuela Tecnolgica Superior - UDEP

Pgina 23

BA2_ora_01 Self Joins

SELECT w.Nombre || ' ' || w.Apellido || ' trabaja para '|| m.Nombre || ' ' || m.Apellido FROM Empleados w, Empleados m WHERE w.Encargado_id = m.Empleado_id ORDER BY w.Nombre;

SELECT w.Apellido || ' trabaja para ' || NVL(m.Apellido, 'Los accionistas') FROM Empleados w, Empleados m WHERE w.Encargado_id = m.Empleado_id (+) ORDER BY w.Nombre;

Ejecutando Inner Joins sobre dos tablas Usando SQL/92


SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID = pt.tipo_producto_ID ORDER BY p.Nombre; SELECT p.nombre, pt.nombre FROM productos p INNER JOIN Tipos_productos pt ON p.tipo_producto_ID = pt.tipo_producto_ID ORDER BY p.Nombre; SELECT e.Nombre, e.Apellido, e.Titulo, e.Sueldo, sg.Grado_sueldo_id FROM Empleados e, Grado_Sueldos sg WHERE e.sueldo BETWEEN sg.sueldo_Min AND sg.Sueldo_Max ORDER BY Grado_sueldo_id; SELECT e.Nombre, e.Apellido, e.Titulo, e.Sueldo, sg.Grado_sueldo_id FROM Empleados e INNER JOIN Grado_Sueldos sg ON e.sueldo BETWEEN sg.sueldo_Min AND sg.Sueldo_Max ORDER BY Grado_sueldo_id; Simplificando enlaces con la palabra clave USING SELECT p.nombre, pt.nombre

Escuela Tecnolgica Superior - UDEP

Pgina 24

BA2_ora_01
FROM productos p INNER JOIN Tipos_productos pt USING (tipo_producto_ID); SELECT p.nombre, pt.nombre, tipo_producto_ID FROM productos p INNER JOIN Tipos_productos pt USING (tipo_producto_ID);

SELECT p.nombre, pt.nombre, p.tipo_producto_ID FROM productos p INNER JOIN Tipos_productos pt USING (tipo_producto_ID);

SELECT p.nombre, pt.nombre, p.tipo_producto_ID FROM productos p INNER JOIN Tipos_productos pt USING (p.tipo_producto_ID);

Ejecutando Inner Joins sobre ms de dos tablas usando SQL/92


SELECT c.Nombre, c.Apellido, p.nombre AS PRODUCTO, pt.nombre AS TIPO FROM ClientesOK c, Adquisicion pr, productos p, Tipos_productos pt WHERE c.Cliente_ID = pr.Cliente_ID AND p.producto_id = pr.producto_id AND p.tipo_producto_ID = pt.tipo_producto_ID ORDER BY p.nombre; SELECT c.Nombre, c.Apellido, p.nombre AS PRODUCTO, pt.nombre AS TIPO FROM ClientesOK c INNER JOIN Adquisicion pr USING (Cliente_ID) INNER JOIN productos p USING (producto_id) INNER JOIN Tipos_productos pt USING (tipo_producto_ID) ORDER BY p.nombre; Ejecutando Inner Joins sobre mltiples Columnas usando SQL/92 SELECT ... FROM tabla1 INNER JOIN tabla2 ON tabla1.columna1 = tabla2.columna1 AND tabla1.columna2 = tabla2.columna2; SELECT ... FROM tabla1 INNER JOIN tabla2 USING (columna1, columna2); Ejecutando Outer Joins usando SQL/92 FROM tabla1 { LEFT | RIGHT | FULL } OUTER JOIN tabla2

Escuela Tecnolgica Superior - UDEP

Pgina 25

BA2_ora_01
tabla1 y tabla2 son las tablas que quieren unirse. LEFT nombra que tu deseas realizar un ensamble externo a la izquierda. RIGHT nombra que tu deseas realizar un ensamble externo a la derecha. FULL nombra que tu deseas realizar un ensamble externo completo. Un ensamble externo completo utiliza todas las filas de la tabla1 y tabla2, incluyendo los que tienen valores nulos en las columnas usadas en el ensamble. Usted no puedes realizar directamente un ensamble externo completo con el operador (+).

Ejecutando Left Outer Joins usando SQL/92


SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID = pt.tipo_producto_ID (+) ORDER BY p.nombre; SELECT p.nombre, pt.nombre FROM productos p LEFT OUTER JOIN Tipos_productos pt USING (tipo_producto_ID) ORDER BY p.nombre;

Ejecutando Right Outer Joins usando SQL/92 SELECT p.nombre, pt.nombre FROM productos p, Tipos_productos pt WHERE p.tipo_producto_ID (+) = pt.tipo_producto_ID ORDER BY p.nombre; SELECT p.nombre, pt.nombre FROM productos p RIGHT OUTER JOIN Tipos_productos pt USING (tipo_producto_ID) ORDER BY p.nombre; SELECT p.nombre, pt.nombre FROM productos p FULL OUTER JOIN Tipos_productos pt USING (tipo_producto_ID) ORDER BY p.nombre;

Escuela Tecnolgica Superior - UDEP

Pgina 26

BA2_ora_01
Ejecutando Self Joins usando SQL/92 SELECT w.Apellido || ' trabaja para '|| m.Apellido FROM Empleados w, Empleados m WHERE w.Encargado_id = m.Empleado_id; SELECT w.Apellido || ' trabaja para '|| m.Apellido FROM Empleados w INNER JOIN Empleados m ON w.Encargado_id = m.Empleado_id;

Ejecutando Cross Joins usando SQL/92 SELECT * FROM Tipos_productos CROSS JOIN productos;

Escuela Tecnolgica Superior - UDEP

Pgina 27

Potrebbero piacerti anche