PL/SQL - Set Operator

PL/SQL - Set Operator


UNION , INTERSECT , MINUS , DISTINCT:

SQL*Plus: Release 11.2.0.2.0 Production on Wed Feb 27 12:46:26 2013

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Enter user-name: system
Enter password:

Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production

SQL> CREATE TABLE supplierenginetab
  2  (sengid number,
  3  sengcompname varchar2(20)
  4  );

Table created.

SQL> DESC supplierenginetab;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 SENGID                                             NUMBER
 SENGCOMPNAME                                       VARCHAR2(20)

SQL> INSERT INTO supplierenginetab
  2  (sengid, sengcompname)
  3  VALUES(101,'Toyota');

1 row created.

SQL> INSERT INTO supplierenginetab
  2  (sengid, sengcompname)
  3  VALUES(102,'Eicher');

1 row created.

SQL> INSERT INTO supplierenginetab
  2  (sengid, sengcompname)
  3  VALUES(103,'Ford');

1 row created.

SQL> INSERT INTO supplierenginetab
  2  (sengid, sengcompname)
  3  VALUES(104,'imcl');

1 row created.

SQL> SELECT * FROM supplierenginetab;

    SENGID SENGCOMPNAME
---------- --------------------
       101 Toyota
       102 Eicher
       103 Ford
       104 imcl

SQL> CREATE TABLE supplierbraketab
  2  (
  3  sbrakeid number,
  4  sbrakecompname varchar2(15)
  5  );

Table created.

SQL> INSERT INTO supplierbraketab
  2  (sbrakeid, sbrakecompname)
  3  VALUES(9960, 'brembo');

1 row created.

SQL> INSERT INTO supplierbraketab
  2  (sbrakeid, sbrakecompname)
  3  VALUES(9961, 'Eicher');

1 row created.

SQL> INSERT INTO supplierbraketab
  2  (sbrakeid, sbrakecompname)
  3  VALUES(9962, 'Amg');

1 row created.

SQL> INSERT INTO supplierbraketab
  2  (sbrakeid, sbrakecompname)
  3  VALUES(9963, 'imcl');

1 row created.

SQL> SELECT * FROM supplierenginetab;

    SENGID SENGCOMPNAME
---------- --------------------
       101 Toyota
       102 Eicher
       103 Ford
       104 imcl

SQL> SELECT * FROM supplierbraketab;

  SBRAKEID SBRAKECOMPNAME
---------- ---------------
      9960 brembo
      9961 Eicher
      9962 Amg
      9963 imcl

SQL> SELECT sengid AS "ID", SENGCOMPNAME AS "Supplier"
  2  FROM supplierenginetab
  3  UNION
  4  SELECT sbrakeid AS "ID", SBRAKECOMPNAME AS "Supplier"
  5  FROM supplierbraketab;

        ID Supplier
---------- --------------------
       101 Toyota
       102 Eicher
       103 Ford
       104 imcl
      9960 brembo
      9961 Eicher
      9962 Amg
      9963 imcl

8 rows selected.

SQL> SELECT sengid AS "ID", SENGCOMPNAME AS "Supplier"
  2  FROM supplierenginetab
  3  INTERSECT
  4  SELECT sbrakeid AS "ID", SBRAKECOMPNAME AS "Supplier"
  5  FROM supplierbraketab;

no rows selected

SQL> SELECT SENGCOMPNAME AS "Supplier"
  2  FROM supplierenginetab
  3  INTERSECT
  4  SELECT SBRAKECOMPNAME AS "Supplier"
  5  FROM supplierbraketab;

Supplier
--------------------
Eicher
imcl

SQL> SELECT SENGCOMPNAME AS "Common Supplier"
  2  FROM supplierenginetab
  3  INTERSECT
  4  SELECT SBRAKECOMPNAME AS "Common Supplier"
  5  FROM supplierbraketab;

Common Supplier
--------------------
Eicher
imcl

SQL> SELECT SENGCOMPNAME AS "Eng. Supp. who are not supplying brakes"
  2  FROM supplierenginetab
  3  MINUS
  4  SELECT SBRAKECOMPNAME AS "Eng. Supp. who are not supplying brakes"
  5  FROM supplierbraketab;
SELECT SENGCOMPNAME AS "Eng. Supp. who are not supplying brakes"
                       *
ERROR at line 1:
ORA-00972: identifier is too long


SQL> SELECT SENGCOMPNAME AS "Eng. Supp. only"
  2  FROM supplierenginetab
  3  MINUS
  4  SELECT SBRAKECOMPNAME AS "Eng. Supp. only"
  5  FROM supplierbraketab;

Eng. Supp. only
--------------------
Ford
Toyota

SQL> SELECT SBRAKECOMPNAME AS "Brake Supp. only"
  2  FROM supplierbraketab
  3  MINUS
  4  SELECT SENGCOMPNAME AS "Brake Supp. only"
  5  FROM supplierenginetab;

Brake Supp. only
--------------------
Amg
brembo

SQL> SELECT * FROM employeetab;

     EMPID EMPNAME         G DOJ             BSAL        ITR       GSAL
---------- --------------- - --------- ---------- ---------- ----------
       101 Julie           f 14-MAR-07       2222      888.8     1333.2
       102 Toffee          f 12-APR-08       5400       2160       3240
       103 Larry           M 01-SEP-10    15175.1    6070.04    9105.06
       105 Julie           f 01-OCT-00       9000       3600       5400
       106 Aan Kaur Brar   f 10-OCT-01       7000       2800       4200

SQL> SELECT gender from employeetab;

G
-
f
f
M
f
f

SQL> SELECT DISTINCT gender from employeetab;

G
-
M
f

SQL> SELECT DISTINCT empname from employeetab;

EMPNAME
---------------
Julie
Toffee
Larry
Aan Kaur Brar

SQL> SELECT COUNT(empname) FROM employee;
SELECT COUNT(empname) FROM employee
                           *
ERROR at line 1:
ORA-00942: table or view does not exist


SQL> SELECT COUNT(empname) FROM employeetab;

COUNT(EMPNAME)
--------------
             5

SQL> SELECT DISTINCT COUNT(empname) FROM employeetab;

COUNT(EMPNAME)
--------------
             5

SQL> SELECT COUNT(DISTINCT empname) FROM employeetab;

COUNT(DISTINCTEMPNAME)
----------------------
                     4


SQL>
------------------------------------------------------------

SELF JOIN, CREATE TABLE FROM SELECT:

->s1. alter the table to add a new column "mgrid number(6)"
->s2. alter the table to convert the empid as the PK & the mgrid as the FK
->s3. add the mgrid s of the employees using the UPDATE command

-------------------------------------------
SQL> DESC employeetab;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 EMPID                                              NUMBER(6)
 EMPNAME                                            VARCHAR2(15)
 GENDER                                             CHAR(1)
 DOJ                                                DATE
 BSAL                                               NUMBER(7,2)
 ITR                                                NUMBER(7,2)
 GSAL                                               NUMBER(7,2)

SQL> select * from employeetab;

     EMPID EMPNAME         G DOJ             BSAL        ITR       GSAL
---------- --------------- - --------- ---------- ---------- ----------
       101 Julie           f 14-MAR-07       2222      888.8     1333.2
       102 Toffee          f 12-APR-08       5400       2160       3240
       103 Larry           M 01-SEP-10    15175.1    6070.04    9105.06
       105 Julie           f 01-OCT-00       9000       3600       5400
       106 Aan Kaur Brar   f 10-OCT-01       7000       2800       4200

SQL> ALTER TABLE employeetab
  2  Add Mgrid number(6);

Table altered.

SQL> DESC employeetab;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 EMPID                                              NUMBER(6)
 EMPNAME                                            VARCHAR2(15)
 GENDER                                             CHAR(1)
 DOJ                                                DATE
 BSAL                                               NUMBER(7,2)
 ITR                                                NUMBER(7,2)
 GSAL                                               NUMBER(7,2)
 MGRID                                              NUMBER(6)

SQL> UPDATE employeetab
  2  SET Mgrid = 101
  3  WHERE empid = 102;

1 row updated.

SQL> UPDATE employeetab
  2  SET Mgrid = 103
  3  WHERE empid = 105;

1 row updated.

SQL> UPDATE employeetab
  2  SET Mgrid = 105
  3  WHERE empid = 106;

1 row updated.

SQL> SELECT *FROM employeetab;

     EMPID EMPNAME         G DOJ             BSAL        ITR       GSAL
---------- --------------- - --------- ---------- ---------- ----------
     MGRID
----------
       101 Julie           f 14-MAR-07       2222      888.8     1333.2


       102 Toffee          f 12-APR-08       5400       2160       3240
       101

       103 Larry           M 01-SEP-10    15175.1    6070.04    9105.06



     EMPID EMPNAME         G DOJ             BSAL        ITR       GSAL
---------- --------------- - --------- ---------- ---------- ----------
     MGRID
----------
       105 Julie           f 01-OCT-00       9000       3600       5400
       103

       106 Aan Kaur Brar   f 10-OCT-01       7000       2800       4200
       105


SQL> ALTER TABLE employeetab
  2  Add CONSTRAINT PK_employeetab_empid PRIMARY KEY(empid),
  3  CONSTRAINT FK_employeetab_Mgrid FOREIGN KEY(Mgrid);
Add CONSTRAINT PK_employeetab_empid PRIMARY KEY(empid),
                                                      *
ERROR at line 2:
ORA-01735: invalid ALTER TABLE option


SQL> ALTER TABLE employeetab
  2  CONSTRAINT PK_employeetab_empid PRIMARY KEY(empid);
CONSTRAINT PK_employeetab_empid PRIMARY KEY(empid)
*
ERROR at line 2:
ORA-01735: invalid ALTER TABLE option


SQL> ALTER TABLE employeetab
  2  Add CONSTRAINT PK_employeetab_empid PRIMARY KEY(empid),
  3  ADD CONSTRAINT FK_employeetab_Mgrid FOREIGN KEY(Mgrid)
  4     REFERENCES employeetab(empid);
Add CONSTRAINT PK_employeetab_empid PRIMARY KEY(empid),
                                                      *
ERROR at line 2:
ORA-01735: invalid ALTER TABLE option


SQL> ALTER TABLE employeetab
  2  Add CONSTRAINT PK_employeetab_empid PRIMARY KEY(empid);

Table altered.

SQL> ALTER TABLE employeetab
  2  ADD CONSTRAINT FK_employeetab_Mgrid FOREIGN KEY(Mgrid)
  3     REFERENCES employeetab(empid);

Table altered.

SQL> DESC employeetab;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 EMPID                                     NOT NULL NUMBER(6)
 EMPNAME                                            VARCHAR2(15)
 GENDER                                             CHAR(1)
 DOJ                                                DATE
 BSAL                                               NUMBER(7,2)
 ITR                                                NUMBER(7,2)
 GSAL                                               NUMBER(7,2)
 MGRID                                              NUMBER(6)

SQL> SELECT empid, empname, mgrid FROM employeetab;

     EMPID EMPNAME              MGRID
---------- --------------- ----------
       101 Julie
       102 Toffee                 101
       103 Larry
       105 Julie                  103
       106 Aan Kaur Brar          105

SQL> SELECT e.empid AS "EMP ID", e.empname AS "EMP NAME"
  2  ;

*
ERROR at line 2:
ORA-00923: FROM keyword not found where expected


SQL> SELECT e.empid AS "EMP ID", e.empname AS "EMP NAME",
  2  m.empname AS "MGR NAME"
  3  FROM employeetab e, employeetab m
  4  WHERE e.empid = m.mgrid;

    EMP ID EMP NAME        MGR NAME
---------- --------------- ---------------
       101 Julie           Toffee
       103 Larry           Julie
       105 Julie           Aan Kaur Brar

SQL> SELECT e.empid AS "EMP ID", e.empname AS "EMP NAME",
  2  m.empname AS "MGR NAME"
  3  FROM employeetab e, employeetab m
  4  WHERE m.empid = e.mgrid;

    EMP ID EMP NAME        MGR NAME
---------- --------------- ---------------
       102 Toffee          Julie
       105 Julie           Larry
       106 Aan Kaur Brar   Julie

SQL> SELECT empid, empname, empname AS "Mgr name"
  2  FROM employeetab
  3  WHERE empid=mgrid;

no rows selected

SQL> SELECT e.empid AS "EMP ID", e.empname AS "EMP NAME",
  2  m.empname AS "MGR NAME"
  3  FROM employeetab e, employeetab m
  4  WHERE m.mgrid = e.empid;

    EMP ID EMP NAME        MGR NAME
---------- --------------- ---------------
       101 Julie           Toffee
       103 Larry           Julie
       105 Julie           Aan Kaur Brar

SQL> CREATE TABLE EmpMgr
  2  AS
  3  SELECT e.empid AS "EMP ID", e.empname AS "EMP NAME",
  4  m.empname AS "MGR NAME"
  5  FROM employeetab e, employeetab m
  6  WHERE e.mgrid = m.empid;

Table created.

SQL> SELECT * FROM empmgr;

    EMP ID EMP NAME        MGR NAME
---------- --------------- ---------------
       102 Toffee          Julie
       105 Julie           Larry
       106 Aan Kaur Brar   Julie

SQL> DESC empmgr;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------

 EMP ID                                             NUMBER(6)
 EMP NAME                                           VARCHAR2(15)
 MGR NAME                                           VARCHAR2(15)

SQL> SELECT * FROM empmgr;

    EMP ID EMP NAME        MGR NAME
---------- --------------- ---------------
       102 Toffee          Julie
       105 Julie           Larry
       106 Aan Kaur Brar   Julie

SQL> SELECT * FROM empmgr
  2  WHERE Emp id=105;
WHERE Emp id=105
          *
ERROR at line 2:
ORA-00920: invalid relational operator


SQL>
----------------------------------------------------------------------------------

Post a Comment

0 Comments