Sei sulla pagina 1di 6

JOINS

Vamos a realizar los diferentes tipos de JOINS con estas dos tablas

SUPPLIERS ORDERS
SUPNO SNAME ORDNO SUPNO ORDERDATE
10000 IBM 500125 10000 12/05/2003
10001 Hewlett Packard 500126 10001 13/05/2003
10002 Microsoft 500127 10004 14/05/2003
10003 NVIDIA PK
PK

Esquema de todos los tipos de JOINS:

1
INNER JOIN

LEFT OUTER JOIN


SUPNO SNAME ORDERDATE
10000 IBM 12/05/2003
10001 Hewlett Packard 13/05/2003
10002 Microsoft null
10003 NVIDIA null
New syntax:
SELECT suppliers.SUPNO, suppliers.SNAME, orders.ORDERDATE
FROM suppliers
INNER JOIN orders
ON suppliers.SUPNO = orders.SUPNO;

Old syntax:

SELECT suppliers.SUPNO, suppliers.SNAME, orders.ORDERDATE


FROM suppliers, orders
WHERE suppliers.SUPNO = orders.SUPNO;

LEFT OUTER JOIN

LEFT OUTER JOIN


SUPNO SNAME ORDERDATE
10000 IBM 12/05/2003
10001 Hewlett Packard 13/05/2003
10002 Microsoft null
10003 NVIDIA null

New syntax:

SELECT suppliers.SUPNO, suppliers.SNAME, orders.ORDERDATE


FROM suppliers
LEFT OUTER JOIN orders
ON suppliers.SUPNO = orders.SUPNO;

Old syntax:

SELECT suppliers.SUPNO, suppliers.SNAME, orders.ORDERDATE


FROM suppliers, orders
WHERE suppliers.SUPNO = orders.SUPNO (+);

2
LEFT OUTER JOIN (Only NULL)
SUPNO SNAME ORDERDATE
10002 Microsoft (null)
10003 NVIDIA (null)

SELECT suppliers.SUPNO, suppliers.SNAME, orders.ORDERDATE


FROM suppliers
LEFT OUTER JOIN orders
ON suppliers.SUPNO = orders.SUPNO
WHERE orders.SUPNO IS NULL;

RIGHT OUTER JOIN

RIGHT OUTER JOIN


ORDNO ORDERDATE SNAME
500125 12/05/2003 IBM
500126 13/05/2003 Hewlett Packard
500127 14/05/2003 (null)

New syntax:

SELECT orders.ORDNO, orders.ORDERDATE, suppliers.SNAME


FROM SUPPLIERS
RIGHT OUTER JOIN orders
ON suppliers.SUPNO = orders.SUPNO;

Old syntax:

SELECT orders.ORDNO, orders.ORDERDATE, suppliers.SNAME


FROM SUPPLIERS, ORDERS
WHERE suppliers.SUPNO (+) = orders.SUPNO;

RIGHT OUTER JOIN (Only NULL)


ORDNO ORDERDATE SNAME
500127 14/05/2003 (null)

SELECT orders.ORDNO, orders.ORDERDATE, suppliers.SNAME


FROM SUPPLIERS
RIGHT OUTER JOIN orders
ON suppliers.SUPNO = orders.SUPNO
WHERE suppliers.SUPNO IS NULL;

3
FULL OUTER JOIN

FULL OUTER JOIN


SUPNO SNAME ORDERDATE
10000 IBM 12/05/2003
10001 Hewlett Packard 13/05/2003
10002 Microsoft (null)
10003 NVIDIA (null)
(null) (null) 14/05/03

SELECT suppliers.SUPNO, suppliers.SNAME, orders.ORDERDATE


FROM suppliers
FULL OUTER JOIN orders
ON suppliers.SUPNO = orders.SUPNO;

FULL OUTER JOIN (Only NULL)


SUPNO SNAME ORDERDATE
10002 Microsoft (null)
10003 NDIVIA (null)
(null) (null) 14/05/03

SELECT suppliers.SUPNO, suppliers.SNAME, orders.ORDERDATE


FROM suppliers
FULL OUTER JOIN orders
ON suppliers.SUPNO = orders.SUPNO
WHERE suppliers.SUPNO IS NULL OR
orders.SUPNO IS NULL;

4
CÓDIGO PARA CREAR LAS TABLAS

DROP TABLE "SUPPLIERS";


CREATE TABLE "SUPPLIERS"
( "SUPNO" NUMBER(5,0),
"SNAME" VARCHAR2(1000),
PRIMARY KEY ("SUPNO")
);

INSERT INTO SUPPLIERS ("SUPNO", "SNAME") VALUES (10000,'IBM');


INSERT INTO SUPPLIERS ("SUPNO", "SNAME") VALUES
(10001,'Hewlett Packard'); INSERT INTO SUPPLIERS ("SUPNO",
"SNAME") VALUES (10002,'Microsoft'); INSERT INTO SUPPLIERS
("SUPNO", "SNAME") VALUES (10003,'NVIDIA');

DROP TABLE "ORDERS";


CREATE TABLE "ORDERS"
("ORDNO" NUMBER NOT
NULL, "SUPNO" NUMBER
NOT NULL, "ORDERDATE"
DATE,
CONSTRAINT orders_pk PRIMARY KEY ("ORDNO")
);

INSERT INTO ORDERS ("ORDNO","SUPNO","ORDERDATE") VALUES


(500125, 10000, '12/05/2003');
INSERT INTO ORDERS ("ORDNO","SUPNO","ORDERDATE") VALUES
(500126, 10001, '13/05/2003');
INSERT INTO ORDERS ("ORDNO","SUPNO","ORDERDATE") VALUES
(500127, 10004, '14/05/2003');

5
6

Potrebbero piacerti anche