You are on page 1of 81

1. 1. 1.

The dual Table


dual is a table that contains a single row. The dual table has one VARCHAR2 column named dummy. dual contains a single row with the value X. The structure of the dual table: SQL> SQL> DESCRIBE dual; Name DUMMY Null? Type VARCHAR2(1)

SQL> SELECT * FROM dual; D X SQL>

1. 1. 2. Do simple calculation by using dual


SQL> SQL> select 123 * 456 from dual; 123*456 ---------56088 SQL> SQL> select sysdate from dual; SYSDATE ---------26-10-2009 SQL>

1. 2. 1. The normal rules of arithmetic operator precedence apply in SQL

The normal rules of arithmetic operator precedence apply in SQL: multiplication and division are performed first. followed by addition and subtraction. If operators of the same precedence are used, they are performed from left to right. SQL> SELECT 10 * 12 / 3 - 1 FROM dual; 10*12/3-1 ---------39 SQL>

1. 2. 2. Use parentheses () to specify the order of execution for the operators


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

1. 3. 1. Using Comparison Operators


There are many comparison operators that you can use in a WHERE clause: The following table lists the comparison operators. Operator = < > <= >= ANY ALL Equal Not equal Less than Greater than Less than or equal Greater than or equal Compares one value with any value in a list Compares one value with all values in a list <> or != Description

1. 3. 2. Uses the not equal (<>) operator in the WHERE clause


SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL, VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 / Table created.

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 / 1 row created. SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 12-DEC-78 15-MAR-90 24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02 1234.56 Toronto

SALARY CITY

Programmer

21-MAR-76 21-FEB-86

6661.78 Vancouver Tester 6544.78 Vancouver Tester 2334.78 Vancouver Tester

2344.78 Vancouver Manager 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected. SQL> SQL> SQL> SELECT * FROM employee WHERE id <> 2; ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 12-DEC-78 15-MAR-90 24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02 1234.56 Toronto Programmer 6544.78 Vancouver Tester 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester SALARY CITY

2344.78 Vancouver Manager

7 rows selected. SQL> SQL> SQL>

SQL> SQL> -- clean the table SQL> drop table Employee 2 / Table dropped.

1. 3. 3. Using the > operator


SQL> SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL, VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 / Table created. SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 / 1 row created. SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 / ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison Martin Mathews 25-JUL-96 25-JUL-06 1234.56 Toronto Programmer 21-MAR-76 21-FEB-86 6661.78 Vancouver Tester SALARY CITY

03 James 04 Celia 05 Robert 06 Linda 07 David 08 James

Smith Rice Black Green Larry Cat

12-DEC-78 15-MAR-90 24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

6544.78 Vancouver Tester 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager

2344.78 Vancouver Manager

1232.78 Vancouver Tester

8 rows selected. SQL> SQL> SQL> SELECT id, first_name FROM employee WHERE id > 3; ID FIRST_NAME ---- ---------04 Celia 05 Robert 06 Linda 07 David 08 James SQL> SQL> SQL> -- clean the table SQL> drop table Employee 2 / Table dropped.

1. 3. 4. Use >= operator (2)


SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL, VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 / Table created. SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 / 1 row created. SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 / ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 12-DEC-78 15-MAR-90 24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02 1234.56 Toronto Programmer 21-MAR-76 21-FEB-86 6661.78 Vancouver Tester 6544.78 Vancouver Tester 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester SALARY CITY

2344.78 Vancouver Manager

8 rows selected. SQL> SQL> SQL> select id, first_name from employee where id >= 3;

ID FIRST_NAME ---- ---------03 James 04 Celia 05 Robert 06 Linda 07 David 08 James 6 rows selected. SQL> SQL> SQL> SQL> -- clean the table SQL> drop table Employee 2 / Table dropped. SQL> SQL>

1. 3. 5. Use <= operator

SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL,

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 / Table created.

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 / 1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 1234.56 Toronto

SALARY CITY

Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90

6661.78 Vancouver Tester 6544.78 Vancouver Tester

24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL> select id, first_name from employee where id <= 3;

ID FIRST_NAME ---- ---------01 Jason 02 Alison 03 James SQL> SQL> SQL> -- clean the table SQL> drop table Employee 2 / Table dropped.

SQL> SQL>

1. 3. 6. Larger and equals

SQL> SQL> create table emp 2 ( empno 3 , ename 4 , init 5 , job 6 , mgr 7 , bdate 8 , sal 9 , comm 10 , deptno 11 ) ; NUMBER(4) VARCHAR2(8) VARCHAR2(5) VARCHAR2(8) NUMBER(4) DATE NUMBER(6,2) NUMBER(6,2) NUMBER(2) default 10 constraint E_PK primary key

Table created.

SQL> insert into emp values(1,'Tom','N', 'Coder', 13,date '1965-12-17', 800 , NULL, 20);

1 row created.

SQL> insert into emp values(2,'Jack','JAM', 'Tester',6,date '1961-02-20', 1600, 300, 30);

1 row created.

SQL> insert into emp values(3,'Wil','TF' , 'Tester',6,date '1962-02-22', 1250, 500, 30);

1 row created.

SQL> insert into emp values(4,'Jane','JM', 'Designer', 9,date '1967-04-02', 2975, NULL, 20);

1 row created.

SQL> insert into emp values(5,'Mary','P', 'Tester',6,date '1956-09-28', 1250, 1400, 30);

1 row created.

SQL> insert into emp values(6,'Black','R', 'Designer', 9,date '1963-11-01', 2850, NULL, 30);

1 row created.

SQL> insert into emp values(7,'Chris','AB', 'Designer', 9,date '1965-06-09', 2450, NULL, 10);

1 row created.

SQL> insert into emp values(8,'Smart','SCJ', 'Coder', 4,date '1959-11-26', 3000, NULL, 20);

1 row created.

SQL> insert into emp values(9,'Peter','CC', 'Designer',NULL,date '1952-11-17', 5000, NULL, 10);

1 row created.

SQL> insert into emp values(10,'Take','JJ', 'Tester',6,date '1968-09-28', 1500, 0,

30);

1 row created.

SQL> insert into emp values(11,'Ana','AA', 'Coder', 8,date '1966-12-30', 1100, NULL, 20);

1 row created.

SQL> insert into emp values(12,'Jane','R', 'Manager', 6,date '1969-12-03', 800 , NULL, 30);

1 row created.

SQL> insert into emp values(13,'Fake','MG', 'Coder', 4,date '1959-02-13', 3000, NULL, 20);

1 row created.

SQL> insert into emp values(14,'Mike','TJA','Manager', 7,date '1962-01-23', 1300, NULL, 10);

1 row created.

SQL> SQL> select ename, init, sal 2 from emp 3 where sal >= 3000;

ENAME

INIT

SAL

-------- ----- ---------Smart Peter Fake SCJ CC MG 3000 5000 3000

SQL> SQL> SQL> drop table emp;

Table dropped.

1. 3. 7. Less and equals

SQL> SQL> create table emp 2 ( empno 3 , ename 4 , init 5 , job 6 , mgr 7 , bdate 8 , sal 9 , comm 10 , deptno 11 ) ; NUMBER(4) VARCHAR2(8) VARCHAR2(5) VARCHAR2(8) NUMBER(4) DATE NUMBER(6,2) NUMBER(6,2) NUMBER(2) default 10 constraint E_PK primary key

Table created.

SQL> insert into emp values(1,'Tom','N', 'Coder', 13,date '1965-12-17', 800 , NULL, 20);

1 row created.

SQL> insert into emp values(2,'Jack','JAM', 'Tester',6,date '1961-02-20', 1600, 300, 30);

1 row created.

SQL> insert into emp values(3,'Wil','TF' , 'Tester',6,date '1962-02-22', 1250, 500, 30);

1 row created.

SQL> insert into emp values(4,'Jane','JM', 'Designer', 9,date '1967-04-02', 2975, NULL, 20);

1 row created.

SQL> insert into emp values(5,'Mary','P', 'Tester',6,date '1956-09-28', 1250, 1400, 30);

1 row created.

SQL> insert into emp values(6,'Black','R', 'Designer', 9,date '1963-11-01', 2850, NULL, 30);

1 row created.

SQL> insert into emp values(7,'Chris','AB', 'Designer', 9,date '1965-06-09', 2450, NULL, 10);

1 row created.

SQL> insert into emp values(8,'Smart','SCJ', 'Coder', 4,date '1959-11-26', 3000, NULL, 20);

1 row created.

SQL> insert into emp values(9,'Peter','CC', 'Designer',NULL,date '1952-11-17', 5000, NULL, 10);

1 row created.

SQL> insert into emp values(10,'Take','JJ', 'Tester',6,date '1968-09-28', 1500, 0,

30);

1 row created.

SQL> insert into emp values(11,'Ana','AA', 'Coder', 8,date '1966-12-30', 1100, NULL, 20);

1 row created.

SQL> insert into emp values(12,'Jane','R', 'Manager', 6,date '1969-12-03', 800 , NULL, 30);

1 row created.

SQL> insert into emp values(13,'Fake','MG', 'Coder', 4,date '1959-02-13', 3000, NULL, 20);

1 row created.

SQL> insert into emp values(14,'Mike','TJA','Manager', 7,date '1962-01-23', 1300, NULL, 10);

1 row created.

SQL> SQL> select ename, job, deptno 2 from emp 3 where deptno <= 10;

ENAME

JOB

DEPTNO

-------- -------- ---------Chris Peter Mike Designer Designer Manager 10 10 10

SQL> SQL> SQL> drop table emp;

Table dropped.

1. 3. 8. invalid relational operator

SQL> create table emp 2 ( empno 3 , ename 4 , init 5 , job 6 , mgr 7 , bdate 8 , sal 9 , comm 10 , deptno 11 ) ; NUMBER(4) VARCHAR2(8) VARCHAR2(5) VARCHAR2(8) NUMBER(4) DATE NUMBER(6,2) NUMBER(6,2) NUMBER(2) default 10 constraint E_PK primary key

Table created.

SQL> insert into emp values(1,'Tom','N', 'Coder', 13,date '1965-12-17', 800 , NULL, 20);

1 row created.

SQL> insert into emp values(2,'Jack','JAM', 'Tester',6,date '1961-02-20', 1600, 300, 30);

1 row created.

SQL> insert into emp values(3,'Wil','TF' , 'Tester',6,date '1962-02-22', 1250, 500, 30);

1 row created.

SQL> insert into emp values(4,'Jane','JM', 'Designer', 9,date '1967-04-02', 2975, NULL, 20);

1 row created.

SQL> insert into emp values(5,'Mary','P', 'Tester',6,date '1956-09-28', 1250, 1400, 30);

1 row created.

SQL> insert into emp values(6,'Black','R', 'Designer', 9,date '1963-11-01', 2850, NULL, 30);

1 row created.

SQL> insert into emp values(7,'Chris','AB', 'Designer', 9,date '1965-06-09', 2450, NULL, 10);

1 row created.

SQL> insert into emp values(8,'Smart','SCJ', 'Coder', 4,date '1959-11-26', 3000, NULL, 20);

1 row created.

SQL> insert into emp values(9,'Peter','CC', 'Designer',NULL,date '1952-11-17', 5000, NULL, 10);

1 row created.

SQL> insert into emp values(10,'Take','JJ', 'Tester',6,date '1968-09-28', 1500, 0,

30);

1 row created.

SQL> insert into emp values(11,'Ana','AA', 'Coder', 8,date '1966-12-30', 1100, NULL, 20);

1 row created.

SQL> insert into emp values(12,'Jane','R', 'Manager', 6,date '1969-12-03', 800 , NULL, 30);

1 row created.

SQL> insert into emp values(13,'Fake','MG', 'Coder', 4,date '1959-02-13', 3000, NULL, 20);

1 row created.

SQL> insert into emp values(14,'Mike','TJA','Manager', 7,date '1962-01-23', 1300, NULL, 10);

1 row created.

SQL> SQL> select ename, job, deptno 2 from emp 3 where deptno NOT > 10; where deptno NOT > 10 * ERROR at line 3: ORA-00920: invalid relational operator

SQL> SQL> SQL> drop table emp;

Table dropped.

1. 4. 1. Using the Logical Operators


There are three logical operators that may be used in a WHERE clause. The logical operators allow you to limit rows based on logical conditions. The logical operators are listed in the following table: Operator x AND y x OR y Description Returns true when both x and y are true Returns true when either x or y is true

NOT xReturns true if x is false, and returns false if x is true

1. 4. 2. Use the AND operator to retrieve rows


SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL primary key,

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 / Table created.

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 / 1 row created. SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 / 1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 /

1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME CITY DESCRIPTION

START_DAT END_DATE

SALARY

---- -------------------- -------------------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David Martin Mathews Smith Rice Black Green Larry 25-JUL-96 25-JUL-06 1234.56 Toronto Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90 24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98

6661.78 Vancouver Tester 6544.78 Vancouver Tester

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager

08 James

Cat

17-SEP-96 15-APR-02

1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL> SELECT * FROM employee WHERE start_date > '01-JAN-1970' AND id > 3;

ID FIRST_NAME LAST_NAME CITY DESCRIPTION

START_DAT END_DATE

SALARY

---- -------------------- -------------------- --------- --------- ---------- ---------- --------------04 Celia 05 Robert 06 Linda 07 David 08 James Rice Black Green Larry Cat 24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02 2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

5 rows selected.

SQL> SQL> SQL> SQL> SQL> SQL> -- clean the table

SQL> drop table Employee 2 / Table dropped.

1. 4. 3. Use the OR operator to retrieve rows


SQL>

SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL primary key,

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 /

Table created.

SQL> SQL> -- prepare data

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')

3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 /

1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME CITY DESCRIPTION

START_DAT END_DATE

SALARY

---- -------------------- -------------------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David Martin Mathews Smith Rice Black Green Larry 25-JUL-96 25-JUL-06 1234.56 Toronto Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90 24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98

6661.78 Vancouver Tester 6544.78 Vancouver Tester

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager

08 James

Cat

17-SEP-96 15-APR-02

1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL> SQL> SELECT * FROM employee WHERE start_date > '01-JAN-1970' OR id > 3;

ID FIRST_NAME LAST_NAME CITY DESCRIPTION

START_DAT END_DATE

SALARY

---- -------------------- -------------------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 1234.56 Toronto Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90 24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

6661.78 Vancouver Tester 6544.78 Vancouver Tester

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected.

SQL> SQL>

SQL> SQL> SQL> -- clean the table SQL> drop table Employee 2 /

Table dropped.

SQL> SQL>

1. 4. 4. Use NOT in where clause

SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL,

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 /

Table created.

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester')

3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 /

1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 1234.56 Toronto

SALARY CITY

Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90

6661.78 Vancouver Tester 6544.78 Vancouver Tester

24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL> SELECT * FROM employee WHERE not(start_date > '01-JAN-1970');

no rows selected

SQL> SQL> SQL> SQL> -- clean the table SQL> drop table Employee

2 / Table dropped. SQL>

1. 4. 5. Understanding Operator Precedence


If you combine AND and OR in the same expression, the AND operator takes precedence over the OR operator.

The comparison operators take precedence over AND. You can override these using parentheses. SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL,

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 /

Table created.

SQL>

SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description)

2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 /

1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda Martin Mathews Smith Rice Black Green 25-JUL-96 25-JUL-06 1234.56 Toronto

SALARY CITY

Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90

6661.78 Vancouver Tester 6544.78 Vancouver Tester

24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester

07 David 08 James

Larry Cat

31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected. SQL> SQL> SQL> SQL> SELECT * FROM employee 2 WHERE Start_Date > '01-JAN-1970' OR id < 2 AND first_name LIKE '%e'; ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 1234.56 Toronto Programmer SALARY CITY

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90

6661.78 Vancouver Tester 6544.78 Vancouver Tester

24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL>

SQL> -- clean the table SQL> drop table Employee 2 / Table dropped.

1. 5. 1. Understanding Null Values

A database use null value to represent a unknown value. A null value is not a blank string. A null value means the value for the column is unknown. When you select a column that contains a null value, you see nothing in that column. SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL,

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 /

Table created.

SQL> SQL> -- prepare data

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager')

3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08',NULL, 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 /

1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select first_name from Employee 2 /

FIRST_NAME ---------Jason Alison James Celia Robert Linda David

8 rows selected.

SQL> SQL> SQL> SQL> SQL> SQL> -- clean the table SQL> drop table Employee 2 /

Table dropped.

1. 5. 2. How do you tell the difference between a null value and a blank string if you retrieve all the rows?

The answer is to use one of Oracle's built-in functions: NVL(). NVL() allows you to convert a null value into another value. NVL() accepts two parameters: a column, and the value that should be substituted.

In the following example, NVL() is used to convert a null value in the first_name column to the string Unknown First Name: SQL> -- create demo table SQL> create table Employee( 2 ID VARCHAR2(4 BYTE) NOT NULL,

3 4 5 6 7 8 9

First_Name Last_Name Start_Date End_Date Salary City Description

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 /

Table created.

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08',NULL, 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 /

1 row created.

SQL> SQL> SQL>

SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 1234.56 Toronto

SALARY CITY

Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90

6661.78 Vancouver Tester 6544.78 Vancouver Tester

24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager

17-SEP-96 15-APR-02

1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL> SELECT id, first_name, last_name, NVL(first_name, 'Unknown First Name') FROM employee;

ID FIRST_NAME LAST_NAME NVL(FIRST_NAME,'UN ---- ---------- ---------- -----------------01 Jason Martin Jason

02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08

Mathews Smith Rice Black Green Larry Cat

Alison James

Celia Robert Linda David

Unknown First Name

8 rows selected.

SQL> SQL> -- clean the table SQL> drop table Employee 2 /

Table dropped.

SQL>

1. 6. 1. Print: output the value of a predefined variable

SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL,

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 /

Table created.

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')

3 /

1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 1234.56 Toronto

SALARY CITY

Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90

6661.78 Vancouver Tester 6544.78 Vancouver Tester

24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL> VARIABLE average_salary NUMBER; SQL> SQL> UPDATE employee 2 SET salary = salary * 0.75 3 RETURNING AVG(salary) INTO :average_salary;

8 rows updated.

SQL> SQL> PRINT average_salary;

AVERAGE_SALARY -------------3053.81875

SQL> SQL> SQL> -- clean the table SQL> drop table Employee 2 /

Table dropped.

1. 7. 1. Define variable and use it in SQL command

SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL,

VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 /

Table created.

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester')

3 /

1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME START_DAT END_DATE DESCRIPTION ---- ---------- ---------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James 04 Celia 05 Robert 06 Linda 07 David 08 James Martin Mathews Smith Rice Black Green Larry Cat 25-JUL-96 25-JUL-06 1234.56 Toronto

SALARY CITY

Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90

6661.78 Vancouver Tester 6544.78 Vancouver Tester

24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL> VARIABLE average_salary NUMBER; SQL> SQL> UPDATE employee 2 SET salary = salary * 0.75 3 RETURNING AVG(salary) INTO :average_salary;

8 rows updated.

SQL> SQL> PRINT average_salary;

AVERAGE_SALARY -------------3053.81875

SQL> SQL> SQL> -- clean the table SQL> drop table Employee 2 / Table dropped.

1. 8. 1. Use multi-line comment blocks

SQL> SQL> SQL> SET SERVEROUTPUT ON ESCAPE OFF SQL> /* SQL> DECLARE SQL> v_price BOOKS.PRICE%TYPE;

SQL> BEGIN SQL> SQL> SQL> EXCEPTION SQL> SQL> WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLERRM);

SQL> END; SQL> / SQL> SQL> */ SQL>

1. 8. 2. multiple-line commenting

SQL> /* SQL> This script is designed to show how multiple-line commenting SQL> SQL> SQL> works. SQL> SQL> */

1. 8. 3. Use single line comments


SQL> SQL> SQL> SQL> -- create demo table SQL> create table Employee( 2 3 4 5 6 7 8 9 ID First_Name Last_Name Start_Date End_Date Salary City Description VARCHAR2(4 BYTE) NOT NULL primary key, VARCHAR2(10 BYTE), VARCHAR2(10 BYTE), DATE, DATE, Number(8,2), VARCHAR2(10 BYTE), VARCHAR2(15 BYTE)

10 ) 11 / Table created.

SQL> SQL> -- prepare data SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values ('01','Jason', 'Martin', to_date('19960725','YYYYMMDD'), to_date('20060725','YYYYMMDD'), 1234.56, 'Toronto', 'Programmer') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('02','Alison', 'Mathews', to_date('19760321','YYYYMMDD'), to_date('19860221','YYYYMMDD'), 6661.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('03','James', 'Smith', to_date('19781212','YYYYMMDD'), to_date('19900315','YYYYMMDD'), 6544.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('04','Celia', 'Rice', to_date('19821024','YYYYMMDD'), to_date('19990421','YYYYMMDD'), 2344.78, 'Vancouver','Manager') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('05','Robert', 'Black', to_date('19840115','YYYYMMDD'), to_date('19980808','YYYYMMDD'), 2334.78, 'Vancouver','Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('06','Linda', 'Green', to_date('19870730','YYYYMMDD'), to_date('19960104','YYYYMMDD'), 4322.78,'New York', 'Tester') 3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('07','David', 'Larry', to_date('19901231','YYYYMMDD'), to_date('19980212','YYYYMMDD'), 7897.78,'New York', 'Manager')

3 /

1 row created.

SQL> insert into Employee(ID, First_Name, Last_Name, Start_Date, End_Date, Salary, City, Description) 2 values('08','James', 'Cat', to_date('19960917','YYYYMMDD'), to_date('20020415','YYYYMMDD'), 1232.78,'Vancouver', 'Tester') 3 /

1 row created.

SQL> SQL> SQL> SQL> -- display data in the table SQL> select * from Employee 2 /

ID FIRST_NAME LAST_NAME CITY DESCRIPTION

START_DAT END_DATE

SALARY

---- -------------------- -------------------- --------- --------- ---------- ---------- --------------01 Jason 02 Alison 03 James Martin Mathews Smith 25-JUL-96 25-JUL-06 1234.56 Toronto Programmer

21-MAR-76 21-FEB-86 12-DEC-78 15-MAR-90

6661.78 Vancouver Tester 6544.78 Vancouver Tester

04 Celia 05 Robert 06 Linda 07 David 08 James

Rice Black Green Larry Cat

24-OCT-82 21-APR-99 15-JAN-84 08-AUG-98 30-JUL-87 04-JAN-96 31-DEC-90 12-FEB-98 17-SEP-96 15-APR-02

2344.78 Vancouver Manager 2334.78 Vancouver Tester 4322.78 New York Tester 7897.78 New York Manager 1232.78 Vancouver Tester

8 rows selected.

SQL> SQL> SQL> SQL> SET SERVEROUTPUT ON ESCAPE OFF SQL> SQL> DECLARE 2 v_salary employee.salary%TYPE;

3 BEGIN 4 5 6 7 8 9 10 11 12 v_salary := v_salary * .9; DBMS_OUTPUT.PUT_LINE('The original salary for id 7 was: '||v_salary); SELECT salary INTO v_salary FROM employee WHERE id = '07';

13 14 15 16 17 18 DBMS_OUTPUT.PUT_LINE(CHR(0)); UPDATE employee SET salary = v_salary WHERE id = '07';

19 -- DBMS_OUTPUT.PUT_LINE('The new salary for id 7 is: '||v_salary); 20 21 EXCEPTION 22 23 WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE (SQLERRM);

24 END; 25 / The original salary for id 7 was: 7897.78

PL/SQL procedure successfully completed.

SQL> SQL> SQL> -- clean the table SQL> drop table Employee 2 / Table dropped.

SQL>

1. 9. 1. Understanding basic database terminology


A database consists of tables and columns. Database Design Terminology Logical/Relational Entity Class Table Attribute Instance Attribute Object Row Column Logical/Object-Oriented Physical Implementation

Entity: An entity maps something in the real world. For example, departments within an organization, employees, or sales.

Attribute: Represent information about an entity instance or an object. For example, the birth date or Social Security number of an employee.

Entities (classes) are implemented in the database as tables. Attributes are implemented in the database as columns. Instances (objects) are implemented in the database as rows. A primary key uniquely identifies a specific instance of an entity. No two instances of an entity can have the same primary key. The values of all parts of the primary key must never be null. The most common types of primary keys in relational databases are ID numbers. Sometimes more than one attribute (or sets of attributes) can be used as a primary key.

1. 10. 1. Introducing database normalization

Database normalization is useful for several reasons: It helps to build a structure that is logical and easy to maintain. Normalized databases are the industry standard. Retrieving data will be easier. First Normal Form means that the database doesn't contain any repeating attributes. Violations of Second Normal Form occur when the table contains attributes that depend on a portion of the primary key. Second Normal Form violations can exist only when you have a multi-column primary key. Third Normal Form violations occur when a transitive dependency exists. All attributes in entities (columns in tables) must be dependent upon the primary key or one of the candidate keys and not on other attributes.

You might also like