all about sql and rdbms

311
RDBMS RDBMS and SQL and SQL Presented by Presented by Gaurav Koriya Gaurav Koriya Powered by:- Powered by:- Korian Korian Corperation Company Corperation Company

Upload: gaurav-koriya

Post on 17-Jan-2015

4.422 views

Category:

Education


9 download

DESCRIPTION

Hello people this is first time in the history when somebody has take a pain to create such a large ppt it is almost my 5 months laborious work..although i know ppt cannot b more than 30 slides but at the same time i dont want my readers to to feel the lack of knowledgeTHIS PPT BELONGS TO TECHNICALS PERSONS hope u like it thanking you ........

TRANSCRIPT

Page 1: ALL ABOUT SQL AND RDBMS

RDBMSRDBMS and SQL and SQL

Presented byPresented by – – Gaurav KoriyaGaurav Koriya Powered by:- Powered by:- Korian Corperation Korian Corperation

CompanyCompany

Page 2: ALL ABOUT SQL AND RDBMS

Introduction to Introduction to RDBMSRDBMS

Page 3: ALL ABOUT SQL AND RDBMS

3

Relational Database Concept Dr. E.F. Codd proposed the relational

model for database systems in 1970. It is the basis for the relational database

management system (RDBMS). The relational model consists of the

following:Collection of objects or relationsSet of operators to act on the relationsData integrity for accuracy and

consistency

Page 4: ALL ABOUT SQL AND RDBMS

4

Definition of a Relational Database

A relational database is a collection of related tables

OracleOracleserverserver

Table Name: EMPLOYEES Table Name: DEPARTMENTS

… …

Page 5: ALL ABOUT SQL AND RDBMS

5

Relational Database Properties

A relational database: Can be accessed and modified by

executing structured query language (SQL) statements

Contains a collection of tables Uses a set of operators

Page 6: ALL ABOUT SQL AND RDBMS

6 System Consultant

Communicating with a RDBMS Using SQL

SELECT department_name FROM departments;

SELECT department_name FROM departments;

SQL statementis entered.

Oracleserver

Statement is sent to Oracle Server.

Page 7: ALL ABOUT SQL AND RDBMS

7

Relational Database Management System

User tables Data dictionary

Oracleserver

Page 8: ALL ABOUT SQL AND RDBMS

8

SQL StatementsSELECT INSERTUPDATEDELETECREATEALTERDROPRENAMETRUNCATE

COMMITROLLBACKSAVEPOINT

GRANTREVOKE

Data retrieval

Data manipulation language (DML)

Data definition language (DDL)

Transaction control

Data control language (DCL)

Page 9: ALL ABOUT SQL AND RDBMS

Writing Basic Writing Basic SQL StatementsSQL Statements

Page 10: ALL ABOUT SQL AND RDBMS

10

Capabilities of SQL SELECT Statements

SelectionProjection

Table 1 Table 2

Table 1Table 1

Join

Page 11: ALL ABOUT SQL AND RDBMS

11 System Consultant

Displaying Table Structure

Use the SQL*Plus DESCRIBE command to display the structure of a table.

DESC[RIBE] tablenameDESC[RIBE] tablename

Page 12: ALL ABOUT SQL AND RDBMS

12 System Consultant

Displaying Table Structure

DESCRIBE employeesDESCRIBE employees

Page 13: ALL ABOUT SQL AND RDBMS

13 System Consultant

Basic SELECT Statement

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table;

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table;

SELECT identifies what columns FROM identifies which table

Page 14: ALL ABOUT SQL AND RDBMS

14 System Consultant

SELECT *FROM departments;

Selecting All Columns

Page 15: ALL ABOUT SQL AND RDBMS

15 System Consultant

Selecting Specific Columns

SELECT department_id, location_idFROM departments;

Page 16: ALL ABOUT SQL AND RDBMS

16 System Consultant

Writing SQL Statements

SQL statements are not case sensitive. SQL statements can be on one or more

lines. Keywords cannot be abbreviated or split

across lines. Clauses are usually placed on separate

lines. Indents are used to enhance readability.

Page 17: ALL ABOUT SQL AND RDBMS

17 System Consultant

Arithmetic Expressions

Create expressions by using arithmetic operators.

Operator

+

-

*

/

Description

Add

Subtract

Multiply

Divide

Page 18: ALL ABOUT SQL AND RDBMS

18 System Consultant

Using Arithmetic Operators

SELECT last_name, salary, salary + 300FROM employees;

Page 19: ALL ABOUT SQL AND RDBMS

19 System Consultant

Operator Precedence

Multiplication and division take priority over addition and subtraction.

Operators of the same priority are evaluated from left to right.

Parentheses are used to force prioritized evaluation and to clarify statements.

**** //// ++++ ____

Page 20: ALL ABOUT SQL AND RDBMS

20

Operator Precedence

SELECT last_name, salary, 12*salary+100FROM employees;

Page 21: ALL ABOUT SQL AND RDBMS

21 System Consultant

Using Parentheses

SELECT last_name, salary, 12*(salary+100)FROM employees;

Page 22: ALL ABOUT SQL AND RDBMS

22 System Consultant

Defining a Null Value

A null is a value that is unavailable, unassigned, unknown, or inapplicable.

A null is not the same as zero or a blank space.

SELECT last_name, job_id, salary, commission_pctFROM employees;

Page 23: ALL ABOUT SQL AND RDBMS

23 System Consultant

SELECT last_name, 12*salary*commission_pctFROM employees;

Null Values in Arithmetic Expressions Arithmetic expressions containing a null value evaluate to null.

Page 24: ALL ABOUT SQL AND RDBMS

24 System Consultant

Defining a Column AliasA column alias: Renames a column heading Is useful with calculations Immediately follows the column name

- there can also be the optional AS keyword between the column name and alias

Requires double quotation marks if it contains spaces or special characters

Page 25: ALL ABOUT SQL AND RDBMS

25 System Consultant

Using Column Aliases

SELECT last_name "Name", salary*12 "Annual Salary"FROM employees;

SELECT last_name AS name, commission_pct commFROM employees;

Page 26: ALL ABOUT SQL AND RDBMS

26 System Consultant

Concatenation Operator

A concatenation operator: Concatenates columns or character

strings to other columns Is represented by two vertical bars (||) Creates a resultant column that is a

character expression

Page 27: ALL ABOUT SQL AND RDBMS

27 System Consultant

Using the Concatenation Operator

SELECT last_name||job_id AS "Employees"FROM employees;

Page 28: ALL ABOUT SQL AND RDBMS

28 System Consultant

Literal Character Strings

A literal is a character, a number, or a date included in the SELECT list.

Date and character literal values must be enclosed within single quotation marks.

Each character string is output once for each row returned.

Page 29: ALL ABOUT SQL AND RDBMS

29 System Consultant

Using Literal Character StringsSELECT last_name ||' is a '||job_id AS "Employee Details"FROM employees;

Page 30: ALL ABOUT SQL AND RDBMS

30

Duplicate Rows

The default display of queries is all rows, including duplicate rows.

SELECT department_idFROM employees;

SELECT department_idFROM employees;

Page 31: ALL ABOUT SQL AND RDBMS

31 System Consultant

Eliminating Duplicate Rows

Eliminate duplicate rows by using the DISTINCT keyword in the SELECT clause.

SELECT DISTINCT department_idFROM employees;

Page 32: ALL ABOUT SQL AND RDBMS

Restricting and Restricting and Sorting DataSorting Data

Page 33: ALL ABOUT SQL AND RDBMS

33 System Consultant

Limiting Rows Using a Selection

“retrieve allemployeesin department 90”

EMPLOYEES

Page 34: ALL ABOUT SQL AND RDBMS

34 System Consultant

Limiting the Rows Selected

Restrict the rows returned by using the WHERE clause.

The WHERE clause follows the FROM clause.

SELECT *|{[DISTINCT] column|expression [alias],...}FROM table[WHERE condition(s)];

Page 35: ALL ABOUT SQL AND RDBMS

35 System Consultant

Using the WHERE Clause

SELECT employee_id, last_name, job_id, department_idFROM employeesWHERE department_id = 90 ;

Page 36: ALL ABOUT SQL AND RDBMS

36 System Consultant

Character Strings and Dates

Character strings and date values are enclosed in single quotation marks.

Character values are case sensitive, and date values are format sensitive.

The default date format is DD-MON-RR.

SELECT last_name, job_id, department_idFROM employeesWHERE last_name = 'Whalen';

Page 37: ALL ABOUT SQL AND RDBMS

37 System Consultant

Comparison Conditions

Operator

=

>

>=

<

<=

<>

Meaning

Equal to

Greater than

Greater than or equal to

Less than

Less than or equal to

Not equal to

Page 38: ALL ABOUT SQL AND RDBMS

38 System Consultant

SELECT last_name, salaryFROM employeesWHERE salary <= 3000;

Using Comparison Conditions

Page 39: ALL ABOUT SQL AND RDBMS

39 System Consultant

Other Comparison Conditions

Operator

BETWEEN

...AND...

IN(set)

LIKE

IS NULL

Meaning

Between two values (inclusive),

Match any of a list of values

Match a character pattern

Is a null value

Page 40: ALL ABOUT SQL AND RDBMS

40System Consultant

Using the BETWEEN Condition

Use the BETWEEN condition to display rows based on a range of values.SELECT last_name, salaryFROM employeesWHERE salary BETWEEN 2500 AND 3500;

Lower limit Upper limit

Page 41: ALL ABOUT SQL AND RDBMS

41 System Consultant

SELECT employee_id, last_name, salary, manager_idFROM employeesWHERE manager_id IN (100, 101, 201);

Using the IN Condition Use the IN condition to test for values in

a list.

Page 42: ALL ABOUT SQL AND RDBMS

42 System Consultant

Using the LIKE Condition Use the LIKE condition to perform

wildcard searches of valid search string values.

Search conditions can contain either literal characters or numbers:% denotes zero or many characters._ denotes one character.

SELECT first_nameFROM employeesWHERE first_name LIKE 'S%';

Page 43: ALL ABOUT SQL AND RDBMS

43 System Consultant

You can combine pattern-matching characters.

Using the LIKE Condition

SELECT last_nameFROM employeesWHERE last_name LIKE '_o%';

Page 44: ALL ABOUT SQL AND RDBMS

44 System Consultant

Using the NULL Conditions

Test for nulls with the IS NULL operator.

SELECT last_name, manager_idFROM employeesWHERE manager_id IS NULL;

Page 45: ALL ABOUT SQL AND RDBMS

45 System Consultant

Logical Conditions

Operator

AND

OR

NOT

Meaning

Returns TRUE if both component

conditions are true

Returns TRUE if either component

condition is true

Returns TRUE if the following condition is false

Page 46: ALL ABOUT SQL AND RDBMS

46 System Consultant

Using the AND Operator

• AND requires both conditions to be true.

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >=10000AND job_id LIKE '%MAN%';

Page 47: ALL ABOUT SQL AND RDBMS

47 System Consultant

Using the OR Operator

OR requires either condition to be true.OR requires either condition to be true.

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary >= 10000OR job_id LIKE '%MAN%';

Page 48: ALL ABOUT SQL AND RDBMS

48 System Consultant

SELECT last_name, job_idFROM employeesWHERE job_id NOT IN ('IT_PROG', 'ST_CLERK', 'SA_REP');

Using the NOT Operator

Page 49: ALL ABOUT SQL AND RDBMS

49 System Consultant

Rules of Precedence

Override rules of precedence by using parentheses.

Order Evaluated Operator

1 Arithmetic operators

2 Concatenation operator

3 Comparison conditions

4 IS [NOT] NULL, LIKE, [NOT] IN5 [NOT] BETWEEN6 NOT logical condition

7 AND logical condition

8 OR logical condition

Page 50: ALL ABOUT SQL AND RDBMS

50 System Consultant

SELECT last_name, job_id, salaryFROM employeesWHERE job_id = 'SA_REP'OR job_id = 'AD_PRES'AND salary > 15000;

Rules of Precedence

Page 51: ALL ABOUT SQL AND RDBMS

51 System Consultant

SELECT last_name, job_id, salaryFROM employeesWHERE (job_id = 'SA_REP'OR job_id = 'AD_PRES')AND salary > 15000;

Rules of Precedence

Use parentheses to force priority.Use parentheses to force priority.

Page 52: ALL ABOUT SQL AND RDBMS

52 System Consultant

SELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date ;

ORDER BY Clause Sort rows with the ORDER BY clause

ASC: ascending order, defaultDESC: descending order

The ORDER BY clause comes last in the SELECT statement.

Page 53: ALL ABOUT SQL AND RDBMS

53 System Consultant

Sorting in Descending OrderSELECT last_name, job_id, department_id, hire_dateFROM employeesORDER BY hire_date DESC ;

Page 54: ALL ABOUT SQL AND RDBMS

54 System Consultant

Sorting by Column AliasSELECT employee_id, last_name, salary*12 annsalFROM employeesORDER BY annsal;

Page 55: ALL ABOUT SQL AND RDBMS

55 System Consultant

The order of ORDER BY list is the order of sort.

You can sort by a column that is not in the SELECT list.

SELECT last_name, department_id, salaryFROM employeesORDER BY department_id, salary DESC;

Sorting by Multiple Columns

Page 56: ALL ABOUT SQL AND RDBMS

Single-Row Single-Row FunctionsFunctions

Page 57: ALL ABOUT SQL AND RDBMS

57 System Consultant

Two Types of SQL Functions

FunctionsFunctions

Single-row Single-row functionsfunctions

Multiple-rowMultiple-rowfunctionsfunctions

Page 58: ALL ABOUT SQL AND RDBMS

58 System Consultant

Single-Row FunctionsSingle row functions: Manipulate data items Accept arguments and return one value Act on each row returned Return one result per row May modify the data type Can be nested Accept arguments which can be a

column or an expression

Page 59: ALL ABOUT SQL AND RDBMS

59 System Consultant

Single-Row Functions

ConversionConversion

CharacterCharacter

NumberNumber

DateDate

GeneralGeneralSingle-row Single-row functionsfunctions

Page 60: ALL ABOUT SQL AND RDBMS

60 System Consultant

Character FunctionsCharacterCharacterfunctionsfunctions

LOWERUPPERINITCAP

CONCATSUBSTRLENGTHINSTRLPAD | RPADTRIMREPLACE

Case-manipulation Case-manipulation functionsfunctions

Character-manipulationCharacter-manipulationfunctionsfunctions

Page 61: ALL ABOUT SQL AND RDBMS

61 System Consultant

Function Result

Case Manipulation Functions These functions convert case for character

strings.

LOWER('SQL Course')

UPPER('SQL Course')

INITCAP('SQL Course')

sql course

SQL COURSE

Sql Course

Page 62: ALL ABOUT SQL AND RDBMS

62 System Consultant

Using Case Manipulation FunctionsDisplay the employee number, name, and department number for employee Higgins:

SELECT employee_id, last_name, department_idFROM employeesWHERE last_name = 'higgins';no rows selectedno rows selected

SELECT employee_id, last_name, department_idFROM employeesWHERE last_name = 'higgins';no rows selectedno rows selected

SELECT employee_id, last_name, department_idFROM employeesWHERE LOWER(last_name) = 'higgins';

Page 63: ALL ABOUT SQL AND RDBMS

63 System Consultant

CONCAT('Hello', 'World')

SUBSTR('HelloWorld',1,5)

LENGTH('HelloWorld')

INSTR('HelloWorld', 'W')

LPAD(salary,10,'*')

RPAD(salary, 10, '*')

TRIM('H' FROM 'HelloWorld')

HelloWorld

Hello

10

6

*****24000

24000*****

elloWorld

Function Result

Character-Manipulation Functions These functions manipulate character

strings:

Page 64: ALL ABOUT SQL AND RDBMS

64 System Consultant

Number Functions ROUND: Rounds value to specified

decimal ROUND(45.926, 2) 45.93

TRUNC: Truncates value to specified decimal TRUNC(45.926, 2) 45.92

MOD: Returns remainder of division MOD(1600, 300) 100

Page 65: ALL ABOUT SQL AND RDBMS

65 System Consultant

SELECT ROUND(45.923,2), ROUND(45.923,0), ROUND(45.923,-1)FROM DUAL;

Using the ROUND Function

• DUAL is a dummy table you can use to view results from functions and calculations.

1 2

3

31 2

Page 66: ALL ABOUT SQL AND RDBMS

66 System Consultant

SELECT TRUNC(45.923,2), TRUNC(45.923), TRUNC(45.923,-2)FROM DUAL;

Using the TRUNC Function

31 2

1 2

3

Page 67: ALL ABOUT SQL AND RDBMS

67 System Consultant

SELECT last_name, salary, MOD(salary, 5000)FROM employeesWHERE job_id = 'SA_REP';

Using the MOD Function

Calculate the remainder of a salary after it is divided by 5000 for all employees whose job title is sales representative.

Page 68: ALL ABOUT SQL AND RDBMS

68 System Consultant

Working with Dates

Oracle database stores dates in an internal numeric format: century, year, month, day, hours, minutes, seconds.

The default date display format is

DD-MON-RR. SELECT last_name, hire_dateFROM employeesWHERE last_name like ''G%';';

Page 69: ALL ABOUT SQL AND RDBMS

69 System Consultant

Working with Dates

SYSDATE is a function that returns: Date Time

Page 70: ALL ABOUT SQL AND RDBMS

70 System Consultant

Arithmetic with Dates

Add or subtract a number to or from a date for a resultant date value.

Subtract two dates to find the number of days between those dates.

Add hours to a date by dividing the number of hours by 24.

Page 71: ALL ABOUT SQL AND RDBMS

71 System Consultant

Using Arithmetic Operatorswith Dates

SELECT last_name, (SYSDATE-hire_date)/7 AS WEEKSFROM employeesWHERE department_id = 90;

Page 72: ALL ABOUT SQL AND RDBMS

72 System Consultant

Date Functions

Number of monthsbetween two dates

MONTHS_BETWEEN

ADD_MONTHS

NEXT_DAY

LAST_DAY

ROUND

TRUNC

Add calendar months to date

Next day of the date specified

Last day of the month

Round date

Truncate date

Function Description

Page 73: ALL ABOUT SQL AND RDBMS

73 System Consultant

• MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')

Using Date Functions

• ADD_MONTHS ('11-JAN-94',6)

• NEXT_DAY ('01-SEP-95','FRIDAY')

• LAST_DAY('01-FEB-95')

19.6774194

'11-JUL-94'

'08-SEP-95'

'28-FEB-95'

Page 74: ALL ABOUT SQL AND RDBMS

74 System Consultant

• ROUND(SYSDATE,'MONTH') 01-AUG-95

• ROUND(SYSDATE ,'YEAR') 01-JAN-96

• TRUNC(SYSDATE ,'MONTH') 01-JUL-95

• TRUNC(SYSDATE ,'YEAR') 01-JAN-95

Using Date Functions

Assume SYSDATE = '25-JUL-95':

Page 75: ALL ABOUT SQL AND RDBMS

75 System Consultant

Conversion Functions

NUMBER CHARACTER

TO_CHAR

TO_NUMBER

DATE

TO_CHAR

TO_DATE

Page 76: ALL ABOUT SQL AND RDBMS

76 System Consultant

Using the TO_CHAR Function with Dates

The format model: Must be enclosed in single quotation marks

and is case sensitive Can include any valid date format element Is separated from the date value by a

comma

TO_CHAR(date, 'format_model')TO_CHAR(date, 'format_model')

Page 77: ALL ABOUT SQL AND RDBMS

77 System Consultant

YYYY

Elements of the Date Format Model

YEAR

MM

MONTH

DY

DAY

Full year in numbers

Year spelled out

Two-digit value for month

Three-letter abbreviation of the day of the week

Full name of the day of the week

Full name of the month

MONThree-letter abbreviation of the month

DD Numeric day of the month

Page 78: ALL ABOUT SQL AND RDBMS

78 System Consultant

Elements of the Date Format Model

Time elements format the time portion of the date.

Add character strings by enclosing them in double quotation marks.

Number suffixes spell out numbers.

HH24:MI:SS AM 15:45:32 PM

DD "of" MONTH 12 of OCTOBER

ddspth fourteenth

Page 79: ALL ABOUT SQL AND RDBMS

79 System Consultant

Using the TO_CHAR Function with DatesSELECT last_name, TO_CHAR(hire_date, 'DD Month YYYY') AS HIREDATEFROM employees;

Page 80: ALL ABOUT SQL AND RDBMS

80 System Consultant

Using the TO_CHAR Function with Numbers

These are some of the format elements you can use with the TO_CHAR function to display a number value as a character:

TO_CHAR(number, 'format_model')TO_CHAR(number, 'format_model')

9

0

$

L

.

,

Represents a number

Forces a zero to be displayed

Places a dollar sign

Uses the local currency symbol

Prints a decimal point

Prints a thousand indicator

Page 81: ALL ABOUT SQL AND RDBMS

81 System Consultant

SELECT TO_CHAR(salary, '$99,999.00') SALARYFROM employeesWHERE last_name = 'Ernst';

Using the TO_CHAR Function with Numbers

Page 82: ALL ABOUT SQL AND RDBMS

82 System Consultant

Using the TO_NUMBER and TO_DATE Functions Convert a character string to a

number format using the TO_NUMBER function:

Convert a character string to a date format using the TO_DATE function:

TO_NUMBER(char[, 'format_model'])TO_NUMBER(char[, 'format_model'])

TO_DATE(char[, 'format_model'])TO_DATE(char[, 'format_model'])

Page 83: ALL ABOUT SQL AND RDBMS

83 System Consultant

RR Date Format

Current Year1995199520012001

Specified Date27-OCT-9527-OCT-1727-OCT-1727-OCT-95

RR Format1995201720171995

YY Format1995191720172095

If two digits of the current year are:

0–49

0–49 50–99

50–99

The return date is in the current century

The return date is in the century after the current one

The return date is in the century before the current oneThe return date is in the current century

If the specified two-digit year is:

Page 84: ALL ABOUT SQL AND RDBMS

84 System Consultant

Example of RR Date Format To find employees hired prior to 1990,

use the RR format, which produces the same results whether the command is run in 1999 or now:

SELECT last_name, TO_CHAR(hire_date, 'DD-Mon-YYYY')FROM employeesWHERE hire_date < TO_DATE('01-Jan-90', 'DD-Mon-RR');

Page 85: ALL ABOUT SQL AND RDBMS

85 System Consultant

Nesting Functions Single-row functions can be nested to any

level. Nested functions are evaluated from

deepest level to the least deep level.

F3(F2(F1(col,arg1),arg2),arg3)

Step 1 = Result 1

Step 2 = Result 2

Step 3 = Result 3

Page 86: ALL ABOUT SQL AND RDBMS

86 System Consultant

SELECT last_name, NVL(TO_CHAR(manager_id), 'No Manager')FROM employeesWHERE manager_id IS NULL;

Nesting Functions

Page 87: ALL ABOUT SQL AND RDBMS

87 System Consultant

General Functions

These functions work with any data

type and pertain to using nulls. NVL (expr1, expr2) NVL2 (expr1, expr2, expr3) NULLIF (expr1, expr2) COALESCE (expr1, expr2, ..., exprn)

Page 88: ALL ABOUT SQL AND RDBMS

88 System Consultant

NVL Function

Converts a null to an actual value. Data types that can be used are date,

character, and number. Data types must match:

NVL(commission_pct,0)NVL(hire_date,'01-JAN-97')NVL(job_id,'No Job Yet')

Page 89: ALL ABOUT SQL AND RDBMS

89 System Consultant

SELECT last_name, salary, NVL(commission_pct, 0), (salary*12) + (salary*12*NVL(commission_pct, 0)) AN_SALFROM employees;

Using the NVL Function

1 2

12

Page 90: ALL ABOUT SQL AND RDBMS

90 System Consultant

SELECT last_name, salary, commission_pct, NVL2(commission_pct, 'SAL+COMM', 'SAL') incomeFROM employees WHERE department_id IN (50, 80);

Using the NVL2 Function• The NVL2 function examines the first expression. If the first expression is not null, then the NVL2 function returns the second expression. If the first expression is null, then the third expression is returned.

Page 91: ALL ABOUT SQL AND RDBMS

91 System Consultant

SELECT first_name, LENGTH(first_name) "expr1", last_name, LENGTH(last_name) "expr2", NULLIF(LENGTH(first_name), LENGTH(last_name)) resultFROM employees;

Using the NULLIF Function

• The NULLIF function compares two expressions. If they are equal, the function returns null. If they are not equal, the function returns the first expression.

Page 92: ALL ABOUT SQL AND RDBMS

92 System Consultant

Using the COALESCE Function

The COALESCE function returns the first non-null expression in the list

The advantage of the COALESCE function over the NVL function is that the COALESCE function can take multiple alternate values.

If the first expression is not null, it returns that expression; otherwise, it does a COALESCE of the remaining expressions.

Page 93: ALL ABOUT SQL AND RDBMS

93 System Consultant

SELECT last_name, COALESCE(commission_pct, salary, 10) commFROM employeesORDER BY commission_pct;

Using the COALESCE Function

Page 94: ALL ABOUT SQL AND RDBMS

94 System Consultant

Conditional Expressions

Provide the use of IF-THEN-ELSE logic within a SQL statement

Use two methods:CASE expressionDECODE function

Page 95: ALL ABOUT SQL AND RDBMS

95 System Consultant

The CASE Expression

Facilitates conditional inquiries by doing the work of an IF-THEN-ELSE statement:

CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr]END

CASE expr WHEN comparison_expr1 THEN return_expr1 [WHEN comparison_expr2 THEN return_expr2 WHEN comparison_exprn THEN return_exprn ELSE else_expr]END

Page 96: ALL ABOUT SQL AND RDBMS

96 System Consultant

SELECT last_name, job_id, salary, CASE job_id WHEN 'IT_PROG' THEN 1.10*salary WHEN 'ST_CLERK' THEN 1.15*salary WHEN 'SA_REP' THEN 1.20*salary ELSE salary END "REVISED_SALARY"FROM employees;

Using the CASE Expression

Page 97: ALL ABOUT SQL AND RDBMS

97 System Consultant

The DECODE Function

Facilitates conditional inquiries by doing the work of a CASE or IF-THEN-ELSE statement:

DECODE(col|expression, search1, result1 [, search2, result2,...,] [, default])

DECODE(col|expression, search1, result1 [, search2, result2,...,] [, default])

Page 98: ALL ABOUT SQL AND RDBMS

98 System Consultant

Using the DECODE Function

SELECT last_name, job_id, salary, DECODE(job_id, 'IT_PROG', 1.10*salary, 'ST_CLERK', 1.15*salary, 'SA_REP', 1.20*salary, salary) REVISED_SALARYFROM employees;

Page 99: ALL ABOUT SQL AND RDBMS

Aggregating Data Aggregating Data Using Group Using Group

FunctionsFunctions

Page 100: ALL ABOUT SQL AND RDBMS

100 System Consultant

What Are Group Functions? Group functions operate on sets of rows to give one result per group.EMPLOYEES

The maximum salary in the EMPLOYEES table.

Page 101: ALL ABOUT SQL AND RDBMS

101 System Consultant

Types of Group Functions

AVG COUNT MAX MIN STDDEV SUM VARIANCE

Page 102: ALL ABOUT SQL AND RDBMS

102 System Consultant

SELECT [column,] group_function(column), ...FROM table[WHERE condition][GROUP BY column][ORDER BY column];

Group Functions Syntax

Page 103: ALL ABOUT SQL AND RDBMS

103 System Consultant

SELECT AVG(salary), MAX(salary), MIN(salary), SUM(salary)FROM employeesWHERE job_id LIKE '%REP%';

Using the AVG and SUM Functions You can use AVG and SUM for numeric

data.

Page 104: ALL ABOUT SQL AND RDBMS

104 System Consultant

Using the MIN and MAX Functions You can use MIN and MAX for any data

type.SELECT MIN(hire_date), MAX(hire_date)FROM employees;

Page 105: ALL ABOUT SQL AND RDBMS

105 System Consultant

SELECT COUNT(*)FROM employeesWHERE department_id = 50;

Using the COUNT Function

COUNT(*) returns the number of rows in a table.

Page 106: ALL ABOUT SQL AND RDBMS

106 System Consultant

Using the COUNT Function

COUNT(expr) returns the number of rows with non-null values for the expr.

Display the number of department values in the EMPLOYEES table, excluding the null values.SELECT COUNT(commission_pct)FROM employeesWHERE department_id = 80;

Page 107: ALL ABOUT SQL AND RDBMS

107 System Consultant

SELECT COUNT(DISTINCT department_id)FROM employees;

Using the DISTINCT Keyword

COUNT(DISTINCT expr) returns the number of distinct non-null values of the expr.

Display the number of distinct department values in the EMPLOYEES table.

Page 108: ALL ABOUT SQL AND RDBMS

108 System Consultant

SELECT AVG(commission_pct)FROM employees;

Group Functions and Null Values Group functions ignore null values in the

column.

Page 109: ALL ABOUT SQL AND RDBMS

109 System Consultant

SELECT AVG(NVL(commission_pct, 0))FROM employees;

Using the NVL Function with Group Functions The NVL function forces group functions to

include null values.

Page 110: ALL ABOUT SQL AND RDBMS

110 System Consultant

Creating Groups of Data EMPLOYEES

The averagesalary

in EMPLOYEES

table for each

department.

4400

9500

3500

6400

10033

Page 111: ALL ABOUT SQL AND RDBMS

111 System Consultant

SELECT column, group_function(column)FROM table[WHERE condition][GROUP BY group_by_expression][ORDER BY column];

Creating Groups of Data: The GROUP BY Clause Syntax

Divide rows in a table into smaller groups by using the GROUP BY clause.

Page 112: ALL ABOUT SQL AND RDBMS

112 System Consultant

SELECT department_id, AVG(salary)FROM employeesGROUP BY department_id ;

Using the GROUP BY Clause All columns in the SELECT list that are not

in group functions must be in the GROUP BY clause.

Page 113: ALL ABOUT SQL AND RDBMS

113 System Consultant

Using the GROUP BY Clause

The GROUP BY column does not have to be in the SELECT list.SELECT AVG(salary)FROM employeesGROUP BY department_id ;

Page 114: ALL ABOUT SQL AND RDBMS

114 System Consultant

Grouping by More Than One ColumnEMPLOYEES

“Add up the salaries in

the EMPLOYEES table

for each job, grouped by department.

Page 115: ALL ABOUT SQL AND RDBMS

115 System Consultant

SELECT department_id dept_id, job_id, SUM(salary)FROM employeesGROUP BY department_id, job_id ;

Using the GROUP BY Clause on Multiple Columns

Page 116: ALL ABOUT SQL AND RDBMS

116 System Consultant

Excluding Group Results

The maximumsalary

per departmentwhen it is

greater than$10,000

EMPLOYEES

Page 117: ALL ABOUT SQL AND RDBMS

117 System Consultant

SELECT column, group_functionFROM table[WHERE condition][GROUP BY group_by_expression][HAVING group_condition][ORDER BY column];

Excluding Group Results: The HAVING ClauseUse the HAVING clause to restrict groups:

1.Rows are grouped.

2.The group function is applied.

3.Groups matching the HAVING clause are displayed.

Page 118: ALL ABOUT SQL AND RDBMS

118 System Consultant

Using the HAVING Clause

SELECT department_id, MAX(salary)FROM employeesGROUP BY department_idHAVING MAX(salary)>10000 ;

Page 119: ALL ABOUT SQL AND RDBMS

119 System Consultant

SELECT job_id, SUM(salary) PAYROLLFROM employeesWHERE job_id NOT LIKE '%REP%'GROUP BY job_idHAVING SUM(salary) > 13000ORDER BY SUM(salary);

Using the HAVING Clause

Page 120: ALL ABOUT SQL AND RDBMS

120 System Consultant

Nesting Group Functions

Display the maximum average salary. SELECT MAX(AVG(salary))FROM employeesGROUP BY department_id;

Page 121: ALL ABOUT SQL AND RDBMS

Displaying Data Displaying Data from Multiple from Multiple

TablesTables

Page 122: ALL ABOUT SQL AND RDBMS

122 System Consultant

Obtaining Data from Multiple TablesEMPLOYEES DEPARTMENTS

Page 123: ALL ABOUT SQL AND RDBMS

123 System Consultant

Types of Joins

Cross Join Equi-Join Non Equi-Join Outer Join

Page 124: ALL ABOUT SQL AND RDBMS

124 System Consultant

Creating Cross Joins The CROSS JOIN clause produces the

cross-product of two tables.

SELECT last_name, department_nameFROM employeesCROSS JOIN departments ;

Page 125: ALL ABOUT SQL AND RDBMS

125 System Consultant

Creating Natural Joins

The NATURAL JOIN clause is based on all columns in the two tables that have the same name.

It selects rows from the two tables that have equal values in all matched columns.

If the columns having the same names have different data types, an error is returned.

Page 126: ALL ABOUT SQL AND RDBMS

126 System Consultant

SELECT department_id, department_name, location_id, cityFROM departmentsNATURAL JOIN locations ;

Retrieving Records with Natural Joins

Page 127: ALL ABOUT SQL AND RDBMS

127 System Consultant

Creating Joins with the USING Clause

If several columns have the same names but the data types do not match, the NATURAL JOIN clause can be modified with the USING clause to specify the columns that should be used for an equijoin.

Use the USING clause to match only one column when more than one column matches.

Do not use a table name or alias in the referenced columns.

Page 128: ALL ABOUT SQL AND RDBMS

128 System Consultant

SELECT e.employee_id, e.last_name, d.location_idFROM employees e JOIN departments dUSING (department_id) ;

Retrieving Records with the USING Clause

Page 129: ALL ABOUT SQL AND RDBMS

129 System Consultant

Creating Joins with the ON Clause

The join condition for the natural join is basically an equijoin of all columns with the same name.

To specify columns to join, the ON clause is used.

The join condition is separated from other search conditions.

Page 130: ALL ABOUT SQL AND RDBMS

130 System Consultant

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id);

Retrieving Records with the ON Clause

Page 131: ALL ABOUT SQL AND RDBMS

131 System Consultant

Creating Three-Way Joins with the ON Clause

SELECT employee_id, city, department_nameFROM employees e JOIN departments dON d.department_id = e.department_id JOIN locations lON d.location_id = l.location_id;

Page 132: ALL ABOUT SQL AND RDBMS

132 System Consultant

OUTER Join

A join between two tables that returns the results of the inner join as well as unmatched rows left (or right) tables is a left (or right) outer join.

A join between two tables that returns the results of an inner join as well as the results of a left and right join is a full outer join.

Page 133: ALL ABOUT SQL AND RDBMS

133 System Consultant

SELECT e.last_name, e.department_id, d.department_nameFROM employees eLEFT OUTER JOIN departments dON (e.department_id = d.department_id) ;

LEFT OUTER JOIN

Page 134: ALL ABOUT SQL AND RDBMS

134 System Consultant

SELECT e.last_name, e.department_id, d.department_nameFROM employees eRIGHT OUTER JOIN departments dON (e.department_id = d.department_id) ;

RIGHT OUTER JOIN

Page 135: ALL ABOUT SQL AND RDBMS

135 System Consultant

SELECT e.last_name, e.department_id, d.department_nameFROM employees eFULL OUTER JOIN departments dON (e.department_id = d.department_id) ;

FULL OUTER JOIN

Page 136: ALL ABOUT SQL AND RDBMS

136 System Consultant

SELECT e.employee_id, e.last_name, e.department_id, d.department_id, d.location_idFROM employees e JOIN departments dON (e.department_id = d.department_id)AND e.manager_id = 149 ;

Additional Conditions

Page 137: ALL ABOUT SQL AND RDBMS

SubqueriesSubqueries

Page 138: ALL ABOUT SQL AND RDBMS

138 System Consultant

Using a Subquery to Solve a Problem

Who has a salary greater than Abel’s?

Which employees have salaries greater than Abel’s salary?

Main Query:

??

What is Abel’s salary???

Subquery

Page 139: ALL ABOUT SQL AND RDBMS

139 System Consultant

Subquery Syntax

The subquery (inner query) executes once before the main query. The result of the subquery is used by the main query (outer query).

SELECT select_listFROM tableWHERE expr operator

(SELECT select_list FROM table);

Page 140: ALL ABOUT SQL AND RDBMS

140 System Consultant

SELECT last_nameFROM employeesWHERE salary > (SELECT salary FROM employees WHERE last_name = 'Abel');

Using a Subquery

11000

Page 141: ALL ABOUT SQL AND RDBMS

141 System Consultant

Guidelines for Using Subqueries

Enclose subqueries in parentheses. Place subqueries on the right side of the

comparison condition. Use single-row operators with single-

row subqueries and use multiple-row operators with multiple-row subqueries.

Page 142: ALL ABOUT SQL AND RDBMS

142 System Consultant

Types of Subqueries

Main query

Subquery returns

ST_CLERK

• Multiple-row subquery

ST_CLERKSA_MAN

Main query

Subquery returns

• Single-row subquery

Page 143: ALL ABOUT SQL AND RDBMS

143 System Consultant

Single-Row Subqueries

Return only one row Use single-row comparison operators

Operator

=

>

>=

<

<=

<>

Meaning

Equal to

Greater than

Greater than or equal to

Less than

Less than or equal to

Not equal to

Page 144: ALL ABOUT SQL AND RDBMS

144 System Consultant

SELECT last_name, job_id, salaryFROM employeesWHERE job_id = (SELECT job_id FROM employees WHERE employee_id = 141)AND salary > (SELECT salary FROM employees WHERE employee_id = 143);

Executing Single-Row Subqueries

ST_CLERK

2600

Page 145: ALL ABOUT SQL AND RDBMS

145 System Consultant

SELECT last_name, job_id, salaryFROM employeesWHERE salary = (SELECT MIN(salary) FROM employees);

Using Group Functions in a Subquery

2500

Page 146: ALL ABOUT SQL AND RDBMS

146 System Consultant

The HAVING Clause with Subqueries The Oracle server executes subqueries

first. The Oracle server returns results into the HAVING clause of the main query.

SELECT department_id, MIN(salary)FROM employeesGROUP BY department_idHAVING MIN(salary) > (SELECT MIN(salary) FROM employees WHERE department_id = 50);

2500

Page 147: ALL ABOUT SQL AND RDBMS

147 System Consultant

Multiple-Row Subqueries

Return more than one row Use multiple-row comparison operators

Operator

IN

NOT IN

<ANY

>ANY

<ALL

>ALL

Meaning

Equal to any

Not Equal to all

Less than maximum

More than minimum

Less than minimum

More than maximum

Page 148: ALL ABOUT SQL AND RDBMS

148 System Consultant

Using the ANY Operator in Multiple-Row Subqueries

9000, 6000, 4200

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ANY (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id <> 'IT_PROG';

Page 149: ALL ABOUT SQL AND RDBMS

149 System Consultant

SELECT employee_id, last_name, job_id, salaryFROM employeesWHERE salary < ALL (SELECT salary FROM employees WHERE job_id = 'IT_PROG')AND job_id <> 'IT_PROG';

Using the ALL Operator in Multiple-Row Subqueries

9000, 6000, 4200

Page 150: ALL ABOUT SQL AND RDBMS

150 System Consultant

Null Values in a Subquery

SELECT emp.last_nameFROM employees empWHERE emp.employee_id NOT IN (SELECT mgr.manager_id FROM employees mgr);

no rows selectedno rows selected

Page 151: ALL ABOUT SQL AND RDBMS

Data Definition Data Definition Language (DDL)Language (DDL)

Page 152: ALL ABOUT SQL AND RDBMS

152 System Consultant

Database Objects

Object Description

Table Basic unit of storage; composed of rows

and columns

View Logically represents subsets of data from

one or more tables

Sequence Numeric value generator

Index Improves the performance of some queries

Synonym Gives alternative names to objects

Page 153: ALL ABOUT SQL AND RDBMS

153 System Consultant

Naming RulesTable names and column names: Must begin with a letter Must be 1–30 characters long Must contain only A–Z, a–z, 0–9, _, $,

and # Must not duplicate the name of

another object owned by the same user

Page 154: ALL ABOUT SQL AND RDBMS

154 System Consultant

The CREATE TABLE Statement

You must have:CREATE TABLE privilege

You specify:Table nameColumn name, column data type, and

column size

CREATE TABLE [schema.]table (column datatype [DEFAULT expr][, ...]);

Page 155: ALL ABOUT SQL AND RDBMS

155 System Consultant

Referencing Another User’s Tables

Tables belonging to other users are not in the user’s schema.

You should use the owner’s name as a prefix to those tables.

Page 156: ALL ABOUT SQL AND RDBMS

156 System Consultant

The DEFAULT Option Specify a default value for a column

during an insert.

Literal values, expressions, or SQL functions are allowed.

The default data type must match the column data type.

... hire_date DATE DEFAULT SYSDATE, ...

Page 157: ALL ABOUT SQL AND RDBMS

157 System Consultant

Create the table.

Confirm table creation.

Creating Tables

CREATE TABLE dept(deptno NUMBER(2),dname VARCHAR2(14),loc VARCHAR2(13));

Table created.Table created.

DESCRIBE dept

Page 158: ALL ABOUT SQL AND RDBMS

158 System Consultant

Tables in the Oracle Database

User Tables:Are a collection of tables created and

maintained by the userContain user information

Data Dictionary: Is a collection of tables created and

maintained by the Oracle ServerContain database information

Page 159: ALL ABOUT SQL AND RDBMS

159 System Consultant

SELECT table_name FROM user_tables ;

Querying the Data Dictionary

• View distinct object types owned by the user.• View distinct object types owned by the user.

SELECT DISTINCT object_type FROM user_objects ;

• See the names of tables owned by the user.• See the names of tables owned by the user.

Page 160: ALL ABOUT SQL AND RDBMS

160 System Consultant

Data TypesData Type Description

VARCHAR(size) Variable-length character data

CHAR(size) Fixed-length character data

NUMBER(p,s) Variable-length numeric data

DATE Date and time values

LONG Variable-length character data up to 2 gigabytes

CLOB Character data up to 4 gigabytes

RAW and LONG RAW Raw binary data

BLOB Binary data up to 4 gigabytes

BFILE Binary data stored in an external file; up to 4 gigabytes

Page 161: ALL ABOUT SQL AND RDBMS

161 System Consultant

Creating a Table by Using a Subquery Syntax

Create a table and insert rows by combining the CREATE TABLE statement and the AS subquery option.

CREATE TABLE table [(column, column...)]AS subquery;

Page 162: ALL ABOUT SQL AND RDBMS

162 System Consultant

Creating a Table by Using a Subquery

DESCRIBE dept80

CREATE TABLE dept80 AS SELECT employee_id, last_name, salary*12 ANNSAL, hire_date FROM employees WHERE department_id = 80;Table created.Table created.

Page 163: ALL ABOUT SQL AND RDBMS

163 System Consultant

The ALTER TABLE Statement

Use the ALTER TABLE statement to: Add a new column Modify an existing column Define a default value for the new

column Drop a column

Page 164: ALL ABOUT SQL AND RDBMS

164 System Consultant

The ALTER TABLE Statement

Use the ALTER TABLE statement toadd, modify, or drop columns.ALTER TABLE tableADD (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE tableMODIFY (column datatype [DEFAULT expr]

[, column datatype]...);

ALTER TABLE tableDROP (column);

Page 165: ALL ABOUT SQL AND RDBMS

165 System Consultant

Adding a Column

DEPT80

“Add a new column to the DEPT80 table.”

DEPT80

New column

Page 166: ALL ABOUT SQL AND RDBMS

166 System Consultant

Adding a Column

You use the ADD clause to add columns.

The new column becomes the last column.

ALTER TABLE dept80ADD (job_id VARCHAR2(9));Table altered.Table altered.

Page 167: ALL ABOUT SQL AND RDBMS

167 System Consultant

Modifying a Column

You can change a column’s data type, size, and default value.

A change to the default value affects only subsequent insertions to the table.

ALTER TABLE dept80MODIFY (last_name VARCHAR2(30));Table altered.Table altered.

Page 168: ALL ABOUT SQL AND RDBMS

168 System Consultant

ALTER TABLE tableSET UNUSED (column);

ALTER TABLE tableSET UNUSED COLUMN column;

ALTER TABLE tableSET UNUSED (column);

ALTER TABLE tableSET UNUSED COLUMN column;

The SET UNUSED Option You use the SET UNUSED option to mark one

or more columns as unused. You use the DROP UNUSED COLUMNS option

to remove the columns that are marked as unused.

OR

ALTER TABLE tableDROP UNUSED COLUMNS;

ALTER TABLE tableDROP UNUSED COLUMNS;

Page 169: ALL ABOUT SQL AND RDBMS

169 System Consultant

Dropping a Column

Use the DROP COLUMN clause to drop columns you no longer need from the table.ALTER TABLE dept80

DROP COLUMN job_id; Table altered.Table altered.

Page 170: ALL ABOUT SQL AND RDBMS

170 System Consultant

Dropping a Table All data and structure in the table is

deleted. Any pending transactions are committed. All indexes are dropped. You cannot roll back the DROP TABLE

statement.DROP TABLE dept80;Table dropped.Table dropped.

Page 171: ALL ABOUT SQL AND RDBMS

171 System Consultant

Changing the Name of an Object

To change the name of a table, view, sequence, or synonym, you execute the RENAME statement.

You must be the owner of the object.

RENAME dept TO detail_dept;Table renamed.Table renamed.

Page 172: ALL ABOUT SQL AND RDBMS

172 System Consultant

Truncating a Table The TRUNCATE TABLE statement:

Removes all rows from a tableReleases the storage space used by that

table

You cannot roll back row removal when using TRUNCATE.

TRUNCATE TABLE detail_dept;Table truncated.Table truncated.

Page 173: ALL ABOUT SQL AND RDBMS

Including Including ConstraintsConstraints

Page 174: ALL ABOUT SQL AND RDBMS

174 System Consultant

What are Constraints? Constraints enforce rules at the table

level. Constraints prevent the deletion of a

table if there are dependencies. The following constraint types are valid:

NOT NULLUNIQUE PRIMARY KEYFOREIGN KEYCHECK

Page 175: ALL ABOUT SQL AND RDBMS

175 System Consultant

Constraint Guidelines Name a constraint or the Oracle server

generates a name by using the SYS_Cnnnnnn format.

Create a constraint either:At the same time as the table is created,

orAfter the table has been created

Define a constraint at the column or table level.

View a constraint in the data dictionary.

Page 176: ALL ABOUT SQL AND RDBMS

176 System Consultant

Defining Constraints

CREATE TABLE [schema.]table (column datatype [DEFAULT expr]

[column_constraint],...[table_constraint][,...]);

CREATE TABLE employees( employee_id NUMBER(6), first_name VARCHAR2(20), ... job_id VARCHAR2(10) NOT NULL,

CONSTRAINT emp_emp_id_pk PRIMARY KEY (EMPLOYEE_ID));

Page 177: ALL ABOUT SQL AND RDBMS

177 System Consultant

Defining Constraints Column constraint level

Table constraint level

column [CONSTRAINT constraint_name] constraint_type,column [CONSTRAINT constraint_name] constraint_type,

column,... [CONSTRAINT constraint_name] constraint_type (column, ...),

column,... [CONSTRAINT constraint_name] constraint_type (column, ...),

Page 178: ALL ABOUT SQL AND RDBMS

178 System Consultant

The NOT NULL ConstraintEnsures that null values are not permitted for the column:

NOT NULL constraint(No row can containa null value forthis column.)

Absence of NOT NULL constraint(Any row can containnull for this column.)

NOT NULL constraint

Page 179: ALL ABOUT SQL AND RDBMS

179 System Consultant

CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL,...

The NOT NULL Constraint

Is defined at the column level:

System named

Usernamed

Page 180: ALL ABOUT SQL AND RDBMS

180 System Consultant

The UNIQUE Constraint

EMPLOYEES UNIQUE constraint

INSERT INTO

Not allowed: already exists

Allowed

Page 181: ALL ABOUT SQL AND RDBMS

181 System Consultant

The UNIQUE Constraint

Defined at either the table level or the column level: CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL,... CONSTRAINT emp_email_uk UNIQUE(email));

Page 182: ALL ABOUT SQL AND RDBMS

182 System Consultant

The PRIMARY KEY Constraint

DEPARTMENTS PRIMARY KEY

INSERT INTONot allowed(Null value)

Not allowed (50 already exists)

Page 183: ALL ABOUT SQL AND RDBMS

183 System Consultant

CREATE TABLE departments( department_id NUMBER(4), department_name VARCHAR2(30) CONSTRAINT dept_name_nn NOT NULL, manager_id NUMBER(6), location_id NUMBER(4), CONSTRAINT dept_id_pk PRIMARY KEY(department_id));

The PRIMARY KEY Constraint

Defined at either the table level or the column level:

Page 184: ALL ABOUT SQL AND RDBMS

184 System Consultant

The FOREIGN KEY ConstraintDEPARTMENTS

EMPLOYEESFOREIGNKEY

INSERT INTONot allowed(9 does not

exist)

AllowedAllowed

PRIMARYKEY

Page 185: ALL ABOUT SQL AND RDBMS

185 System Consultant

The FOREIGN KEY Constraint Defined at either the table level or the

column level:CREATE TABLE employees( employee_id NUMBER(6), last_name VARCHAR2(25) NOT NULL, email VARCHAR2(25), salary NUMBER(8,2), commission_pct NUMBER(2,2), hire_date DATE NOT NULL,... department_id NUMBER(4), CONSTRAINT emp_dept_fk FOREIGN KEY (department_id) REFERENCES departments(department_id), CONSTRAINT emp_email_uk UNIQUE(email));

Page 186: ALL ABOUT SQL AND RDBMS

186 System Consultant

FOREIGN KEY Constraint Keywords

• FOREIGN KEY: Defines the column in the child table at the table constraint level

• REFERENCES: Identifies the table and column in the parent table

• ON DELETE CASCADE: Deletes the dependent rows in the child table when a row in the parent table is deleted.

• ON DELETE SET NULL: Converts dependent foreign key values to null

Page 187: ALL ABOUT SQL AND RDBMS

187 System Consultant

The CHECK Constraint

Defines a condition that each row must satisfy

..., salary NUMBER(2) CONSTRAINT emp_salary_min CHECK (salary > 0),...

Page 188: ALL ABOUT SQL AND RDBMS

188 System Consultant

Adding a Constraint Syntax

Use the ALTER TABLE statement to: Add or drop a constraint, but not modify

its structure Enable or disable constraints Add a NOT NULL constraint by using the MODIFY clause

ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

ALTER TABLE table ADD [CONSTRAINT constraint] type (column);

Page 189: ALL ABOUT SQL AND RDBMS

189 System Consultant

Adding a Constraint

Add a FOREIGN KEY constraint to the EMPLOYEES table indicating that amanager must already exist as a validemployee in the EMPLOYEES table.ALTER TABLE employeesADD CONSTRAINT emp_manager_fk FOREIGN KEY(manager_id) REFERENCES employees(employee_id);Table altered.Table altered.

Page 190: ALL ABOUT SQL AND RDBMS

190 System Consultant

Dropping a Constraint Remove the manager constraint from the EMPLOYEES table.

Remove the PRIMARY KEY constraint on the DEPARTMENTS table and drop the associated FOREIGN KEY constraint on the EMPLOYEES.DEPARTMENT_ID column.

ALTER TABLE employeesDROP CONSTRAINT emp_manager_fk;Table altered.Table altered.

ALTER TABLE employeesDROP CONSTRAINT emp_manager_fk;Table altered.Table altered.

ALTER TABLE departmentsDROP PRIMARY KEY CASCADE;Table altered.Table altered.

ALTER TABLE departmentsDROP PRIMARY KEY CASCADE;Table altered.Table altered.

Page 191: ALL ABOUT SQL AND RDBMS

191 System Consultant

Disabling Constraints Execute the DISABLE clause of the ALTER TABLE statement to deactivate an integrity constraint.

Apply the CASCADE option to disable dependent integrity constraints.

ALTER TABLE employeesDISABLE CONSTRAINT emp_emp_id_pk CASCADE;Table altered.Table altered.

ALTER TABLE employeesDISABLE CONSTRAINT emp_emp_id_pk CASCADE;Table altered.Table altered.

Page 192: ALL ABOUT SQL AND RDBMS

192 System Consultant

Enabling Constraints Activate an integrity constraint currently

disabled in the table definition by using the ENABLE clause.

A UNIQUE or PRIMARY KEY index is automatically created if you enable a UNIQUE key or PRIMARY KEY constraint.

ALTER TABLE employeesENABLE CONSTRAINT emp_emp_id_pk;Table altered.Table altered.

ALTER TABLE employeesENABLE CONSTRAINT emp_emp_id_pk;Table altered.Table altered.

Page 193: ALL ABOUT SQL AND RDBMS

193 System Consultant

SELECT constraint_name, constraint_type,search_condition

FROM user_constraintsWHERE table_name = 'EMPLOYEES';

Viewing Constraints Query the USER_CONSTRAINTS table

to view all constraint definitions and names.

Page 194: ALL ABOUT SQL AND RDBMS

194 System Consultant

SELECT constraint_name, column_nameFROM user_cons_columnsWHERE table_name = 'EMPLOYEES';

Viewing the Columns Associated with Constraints

View the columns associated with the constraint names in the USER_CONS_COLUMNS view.

Page 195: ALL ABOUT SQL AND RDBMS

Manipulating Data Manipulating Data (DML)(DML)

Page 196: ALL ABOUT SQL AND RDBMS

196 System Consultant

Data Manipulation Language A DML statement is executed when

you:Add new rows to a tableModify existing rows in a tableRemove existing rows from a table

A transaction consists of a collection of DML statements that form a logical unit of work.

Page 197: ALL ABOUT SQL AND RDBMS

197 System Consultant

Adding a New Row to a TableDEPARTMENTS

New row

……insert a new row into the

DEPARMENTS table…

Page 198: ALL ABOUT SQL AND RDBMS

198 System Consultant

The INSERT Statement Syntax

Add new rows to a table by using the INSERT statement.

INSERT INTO table [(column [, column...])]VALUES (value [, value...]);

INSERT INTO table [(column [, column...])]VALUES (value [, value...]);

Page 199: ALL ABOUT SQL AND RDBMS

199 System Consultant

Inserting New Rows Insert a new row containing values for

each column. List values in the default order of the

columns in the table. Optionally, list the columns in the INSERT clause.

Enclose character and date values within single quotation marks.

INSERT INTO departments(department_id, department_name, manager_id, location_id)VALUES (70, 'Public Relations', 100, 1700);1 row created.

Page 200: ALL ABOUT SQL AND RDBMS

200 System Consultant

INSERT INTO departmentsVALUES (100, 'Finance', NULL, NULL);1 row created.1 row created.

INSERT INTO departments (department_id, department_name )VALUES (30, 'Purchasing');1 row created.1 row created.

Inserting Rows with Null Values

Implicit method: Omit the column from the column list.

• Explicit method: Specify the NULL keyword in the VALUES clause.

Page 201: ALL ABOUT SQL AND RDBMS

201 System Consultant

Write your INSERT statement with a subquery.

Do not use the VALUES clause. Match the number of columns in the INSERT clause to those in the subquery.

INSERT INTO sales_reps(id, name, salary, commission_pct) SELECT employee_id, last_name, salary, commission_pct FROM employees WHERE job_id LIKE '%REP%';

4 rows created.4 rows created.

Copying Rows from Another Table

Page 202: ALL ABOUT SQL AND RDBMS

202 System Consultant

Changing Data in a TableEMPLOYEES

Update rows in the EMPLOYEES table.

Page 203: ALL ABOUT SQL AND RDBMS

203 System Consultant

The UPDATE Statement Syntax

Modify existing rows with the UPDATE statement.

Update more than one row at a time, if required.

UPDATE tableSET column = value [, column = value, ...][WHERE condition];

UPDATE tableSET column = value [, column = value, ...][WHERE condition];

Page 204: ALL ABOUT SQL AND RDBMS

204 System Consultant

UPDATE employeesSET department_id = 70WHERE employee_id = 113;1 row updated.1 row updated.

Specific row or rows are modified if you specify the WHERE clause.

All rows in the table are modified if you omit the WHERE clause.

Updating Rows in a Table

UPDATE copy_empSET department_id = 110;22 rows updated.22 rows updated.

UPDATE copy_empSET department_id = 110;22 rows updated.22 rows updated.

Page 205: ALL ABOUT SQL AND RDBMS

205 System Consultant

UPDATE employeesSET job_id = (SELECT job_id FROM employees WHERE employee_id = 205), salary = (SELECT salary FROM employees WHERE employee_id = 205) WHERE employee_id = 114;1 row updated.1 row updated.

Updating Two Columns with a Subquery

Update employee 114’s job and salary to match that of employee 205.

Page 206: ALL ABOUT SQL AND RDBMS

206 System Consultant

Delete a row from the DEPARTMENTS table.

Removing a Row from a Table DEPARTMENTS

Page 207: ALL ABOUT SQL AND RDBMS

207 System Consultant

The DELETE Statement

You can remove existing rows from a table by using the DELETE statement.

DELETE [FROM] table[WHERE condition];

DELETE [FROM] table[WHERE condition];

Page 208: ALL ABOUT SQL AND RDBMS

208 System Consultant

Specific rows are deleted if you specify the WHERE clause.

All rows in the table are deleted if you omit the WHERE clause.

Deleting Rows from a Table

DELETE FROM departments WHERE department_name = 'Finance';1 row deleted.1 row deleted.

DELETE FROM departments WHERE department_name = 'Finance';1 row deleted.1 row deleted.

DELETE FROM copy_emp;22 rows deleted.22 rows deleted.

DELETE FROM copy_emp;22 rows deleted.22 rows deleted.

Page 209: ALL ABOUT SQL AND RDBMS

209 System Consultant

Database Transactions

A database transaction consists of oneof the following: DML statements which constitute one

consistent change to the data One DDL statement One DCL statement

Page 210: ALL ABOUT SQL AND RDBMS

210 System Consultant

Database Transactions Begin when the first DML SQL

statement is executed End with one of the following events:

A COMMIT or ROLLBACK statement is issued

A DDL or DCL statement executes (automatic commit)

The user exits iSQL*PlusThe system crashes

Page 211: ALL ABOUT SQL AND RDBMS

211 System Consultant

Controlling Transactions

SAVEPOINT B

SAVEPOINT A

DELETE

INSERT

UPDATE

INSERT

COMMITTime

Transaction

ROLLBACK to SAVEPOINT B

ROLLBACK to SAVEPOINT A

ROLLBACK

Page 212: ALL ABOUT SQL AND RDBMS

212 System Consultant

UPDATE...SAVEPOINT update_done;Savepoint created.Savepoint created.INSERT...ROLLBACK TO update_done;Rollback complete.Rollback complete.

Rolling Back Changes to a Marker Create a marker in a current transaction

by using the SAVEPOINT statement. Roll back to that marker by using the ROLLBACK TO SAVEPOINT statement.

Page 213: ALL ABOUT SQL AND RDBMS

213 System Consultant

An automatic commit occurs under the following circumstances:DDL statement is issuedDCL statement is issuedNormal exit from iSQL*Plus, without

explicitly issuing COMMIT or ROLLBACK statements

An automatic rollback occurs under an abnormal termination of iSQL*Plus or a system failure.

Implicit Transaction Processing

Page 214: ALL ABOUT SQL AND RDBMS

Creating ViewsCreating ViewsCreating ViewsCreating Views

Page 215: ALL ABOUT SQL AND RDBMS

215 System Consultant

Database ObjectsDatabase Objects

Description

Basic unit of storage; composed of rows and columns

Logically represents subsets of data from one or more tables

Generates primary key values

Improves the performance of some queries

Alternative name for an object

Object

Table

View

Sequence

Index

Synonym

Page 216: ALL ABOUT SQL AND RDBMS

216 System Consultant

What is a View?What is a View?EMPLOYEES Table:

Page 217: ALL ABOUT SQL AND RDBMS

217 System Consultant

Why Use Views?Why Use Views?

To restrict data access To make complex queries easy To present different views of the

same data

To restrict data access To make complex queries easy To present different views of the

same data

Page 218: ALL ABOUT SQL AND RDBMS

218 System Consultant

Creating a View You embed a subquery within the CREATE VIEW statement.

The subquery can contain complex SELECT syntax.

CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY [CONSTRAINT constraint]];

CREATE [OR REPLACE] VIEW view [(alias[, alias]...)] AS subquery[WITH CHECK OPTION [CONSTRAINT constraint]][WITH READ ONLY [CONSTRAINT constraint]];

Page 219: ALL ABOUT SQL AND RDBMS

219 System Consultant

Creating a View Create a view, EMPVU80, that contains

details of employees in department 80.

Describe the structure of the view by using the SQL*Plus DESCRIBE command.DESCRIBE empvu80DESCRIBE empvu80

CREATE VIEW empvu80 AS SELECT employee_id, last_name, salary FROM employees WHERE department_id = 80;View created.View created.

Page 220: ALL ABOUT SQL AND RDBMS

220 System Consultant

Creating a View

Create a view by using column aliases in the subquery.

Select the columns from this view by the given alias names.

CREATE VIEW salvu50 AS SELECT employee_id ID_NUMBER, last_name NAME, salary*12 ANN_SALARY FROM employees WHERE department_id = 50;View created.View created.

Page 221: ALL ABOUT SQL AND RDBMS

221 System Consultant

Retrieving Data from a ViewRetrieving Data from a View

SELECT *FROM salvu50;

Page 222: ALL ABOUT SQL AND RDBMS

222 System Consultant

Querying a ViewQuerying a View

USER_VIEWSUSER_VIEWS EMPVU80EMPVU80SELECT employee_id, last_name, salaryFROM employeesWHERE department_id=80;

iSQL*Plus

SELECT *FROM empvu80;

EMPLOYEES

Oracle ServerOracle Server

Page 223: ALL ABOUT SQL AND RDBMS

223 System Consultant

Modifying a View

Modify the EMPVU80 view by using CREATE OR REPLACE VIEW clause. Add an alias for each column name.

Column aliases in the CREATE VIEW clause are listed in the same order as the columns in the subquery.

CREATE OR REPLACE VIEW empvu80 (id_number, name, sal, department_id)AS SELECT employee_id, first_name || ' ' || last_name, salary, department_id FROM employees WHERE department_id = 80;View created.View created.

Page 224: ALL ABOUT SQL AND RDBMS

224 System Consultant

Creating a Complex View

Create a complex view that contains group functions to display values from two tables.

CREATE VIEW dept_sum_vu (name, minsal, maxsal, avgsal)AS SELECT d.department_name, MIN(e.salary), MAX(e.salary),AVG(e.salary) FROM employees e, departments d WHERE e.department_id = d.department_id GROUP BY d.department_name;View created.View created.

Page 225: ALL ABOUT SQL AND RDBMS

225 System Consultant

Rules for Performing DML Operations on a View

You can perform DML operations on simple views.

You cannot modify or remove a row if the view contains the following:Group functionsA GROUP BY clauseThe DISTINCT keyword

Page 226: ALL ABOUT SQL AND RDBMS

226 System Consultant

Rules for Performing DML Operations on a View

You cannot add data through a view ifthe view includes: Group functions A GROUP BY clause The DISTINCT keyword NOT NULL columns in the base tables

that are not selected by the view

Page 227: ALL ABOUT SQL AND RDBMS

227 System Consultant

You can ensure that DML operations performed on the view stay within the domain of the view by using the WITH CHECK OPTION clause.

Any attempt to change the department number for any row in the view fails because it violates the WITH CHECK OPTION constraint.

CREATE OR REPLACE VIEW empvu20AS SELECT * FROM employees WHERE department_id = 20 WITH CHECK OPTION CONSTRAINT empvu20_ck ;View created.View created.

Using the WITH CHECK OPTION Clause

Page 228: ALL ABOUT SQL AND RDBMS

228 System Consultant

Denying DML Operations

You can ensure that no DML operations occur by adding the WITH READ ONLY option to your view definition.

Any attempt to perform a DML on any row in the view results in an Oracle server error.

Page 229: ALL ABOUT SQL AND RDBMS

229 System Consultant

Denying DML Operations

CREATE OR REPLACE VIEW empvu10 (employee_number, employee_name, job_title)AS SELECT employee_id, last_name, job_id FROM employees WHERE department_id = 10 WITH READ ONLY;View created.View created.

Page 230: ALL ABOUT SQL AND RDBMS

230 System Consultant

Removing a ViewRemoving a View

You can remove a view without losing data because a view is based on underlying tables in the database.

You can remove a view without losing data because a view is based on underlying tables in the database.

DROP VIEW empvu80;View dropped.View dropped.

DROP VIEW view;DROP VIEW view;

Page 231: ALL ABOUT SQL AND RDBMS

231 System Consultant

Inline ViewsInline Views

An inline view is a subquery with an alias that you can use within an SQL statement.

A named subquery in the FROM clause of the main query is an example of an inline view.

An inline view is not a schema object.

An inline view is a subquery with an alias that you can use within an SQL statement.

A named subquery in the FROM clause of the main query is an example of an inline view.

An inline view is not a schema object.

Page 232: ALL ABOUT SQL AND RDBMS

232 System Consultant

Top-N AnalysisTop-N Analysis

Top-N queries ask for the n largest or smallest values of a column. For example:What are the ten best selling products?What are the ten worst selling products?

Both largest values and smallest values sets are considered Top-N queries.

Top-N queries ask for the n largest or smallest values of a column. For example:What are the ten best selling products?What are the ten worst selling products?

Both largest values and smallest values sets are considered Top-N queries.

Page 233: ALL ABOUT SQL AND RDBMS

233 System Consultant

Performing Top-N Analysis

The high-level structure of a Top-N analysis query is:

SELECT [column_list], ROWNUM FROM (SELECT [column_list] FROM table ORDER BY Top-N_column)WHERE ROWNUM <= N;

SELECT [column_list], ROWNUM FROM (SELECT [column_list] FROM table ORDER BY Top-N_column)WHERE ROWNUM <= N;

Page 234: ALL ABOUT SQL AND RDBMS

234 System Consultant

Example of Top-N AnalysisExample of Top-N Analysis

To display the top three earner names and salaries from the EMPLOYEES table:To display the top three earner names and salaries from the EMPLOYEES table:

SELECT ROWNUM as RANK, last_name, salary FROM (SELECT last_name,salary FROM employees ORDER BY salary DESC)WHERE ROWNUM <= 3;

31 2

1 2 3

Page 235: ALL ABOUT SQL AND RDBMS

Other Database Other Database ObjectsObjects

Page 236: ALL ABOUT SQL AND RDBMS

236 System Consultant

Database ObjectsDatabase Objects

Description

Basic unit of storage; composed of rows and columns

Logically represents subsets of data from one or more tables

Generates primary key values

Improves the performance of some queries

Alternative name for an object

Object

Table

View

Sequence

Index

Synonym

Page 237: ALL ABOUT SQL AND RDBMS

237 System Consultant

What Is a Sequence?A sequence: Automatically generates unique

numbers Is a sharable object Is typically used to create a primary

key value Speeds up the efficiency of accessing

sequence values when cached in memory

Page 238: ALL ABOUT SQL AND RDBMS

238 System Consultant

The CREATE SEQUENCE Statement Syntax Define a sequence to generate sequential

numbers automatically:CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

CREATE SEQUENCE sequence [INCREMENT BY n] [START WITH n] [{MAXVALUE n | NOMAXVALUE}] [{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}];

Page 239: ALL ABOUT SQL AND RDBMS

239 System Consultant

Creating a Sequence Create a sequence named DEPT_DEPTID_SEQ to be used for the primary key of the DEPARTMENTS table.

CREATE SEQUENCE dept_deptid_seq INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE;Sequence created.Sequence created.

CREATE SEQUENCE dept_deptid_seq INCREMENT BY 10 START WITH 120 MAXVALUE 9999 NOCACHE NOCYCLE;Sequence created.Sequence created.

Page 240: ALL ABOUT SQL AND RDBMS

240 System Consultant

Confirming Sequences Verify your sequence values in the USER_SEQUENCES data dictionary table.

The LAST_NUMBER column displays the next available sequence number

SELECT sequence_name, min_value, max_value, increment_by, last_number

FROM user_sequences;

SELECT sequence_name, min_value, max_value, increment_by, last_number

FROM user_sequences;

Page 241: ALL ABOUT SQL AND RDBMS

241 System Consultant

NEXTVAL and CURRVAL Pseudocolumns

NEXTVAL returns the next available sequence value. It returns a unique value every time it is referenced, even for different users.

CURRVAL obtains the current sequence value.

NEXTVAL must be issued for that sequence before CURRVAL contains a value.

Page 242: ALL ABOUT SQL AND RDBMS

242 System Consultant

Using a Sequence Insert a new department named

“Support” in location ID 2500.

View the current value for the DEPT_DEPTID_SEQ sequence.

INSERT INTO departments(department_id, department_name, location_id)VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);1 row created.1 row created.

INSERT INTO departments(department_id, department_name, location_id)VALUES (dept_deptid_seq.NEXTVAL, 'Support', 2500);1 row created.1 row created.

SELECT dept_deptid_seq.CURRVALFROM dual;

SELECT dept_deptid_seq.CURRVALFROM dual;

Page 243: ALL ABOUT SQL AND RDBMS

243 System Consultant

Using a Sequence Caching sequence values in memory gives

faster access to those values. Gaps in sequence values can occur when:

A rollback occurs The system crashes A sequence is used in another table

Page 244: ALL ABOUT SQL AND RDBMS

244 System Consultant

Modifying a Sequence Change the increment value, maximum value, minimum value, cycle option, or cache option.

ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE;Sequence altered.Sequence altered.

ALTER SEQUENCE dept_deptid_seq INCREMENT BY 20 MAXVALUE 999999 NOCACHE NOCYCLE;Sequence altered.Sequence altered.

Page 245: ALL ABOUT SQL AND RDBMS

245 System Consultant

Guidelines for Modifying a Sequence

You must be the owner or have the ALTER privilege for the sequence.

Only future sequence numbers are affected.

The sequence must be dropped and re-created to restart the sequence at a different number.

Page 246: ALL ABOUT SQL AND RDBMS

246 System Consultant

Removing a Sequence Remove a sequence from the data

dictionary by using the DROP SEQUENCE statement.

Once removed, the sequence can no longer be referenced.

DROP SEQUENCE dept_deptid_seq;Sequence dropped.Sequence dropped.

DROP SEQUENCE dept_deptid_seq;Sequence dropped.Sequence dropped.

Page 247: ALL ABOUT SQL AND RDBMS

247 System Consultant

What is an Index?An index: Is a schema object Is used by the Oracle server to speed up

the retrieval of rows by using a pointer Can reduce disk I/O by using a rapid path

access method to locate data quickly Is independent of the table it indexes Is used and maintained automatically by

the Oracle server

Page 248: ALL ABOUT SQL AND RDBMS

248 System Consultant

How Are Indexes Created?

Automatically: A unique index is created automatically when you define a PRIMARY KEY or UNIQUE constraint in a table definition.

Manually: Users can create indexes on columns to speed up access to the rows.

Page 249: ALL ABOUT SQL AND RDBMS

249 System Consultant

Creating an Index Create an index on one or more

columns.

Improve the speed of query access to the LAST_NAME column in the EMPLOYEES table.

CREATE INDEX emp_last_name_idxON employees(last_name);Index created.`Index created.`

CREATE INDEX emp_last_name_idxON employees(last_name);Index created.`Index created.`

CREATE INDEX indexON table (column[, column]...);

CREATE INDEX indexON table (column[, column]...);

Page 250: ALL ABOUT SQL AND RDBMS

250 System Consultant

When to Create an IndexYou should create an index if: A column contains a wide range of values A column contains a large number of null

values One or more columns are frequently used

together in a WHERE clause or a join condition

The table is large and most queries are expected to retrieve less than 2 to 4 percent of the rows

Page 251: ALL ABOUT SQL AND RDBMS

251 System Consultant

When Not to Create an IndexIt is usually not worth creating an index if: The table is small The columns are not often used as a

condition in the query Most queries are expected to retrieve more

than 2 to 4 percent of the rows in the table The table is updated frequently

Page 252: ALL ABOUT SQL AND RDBMS

252 System Consultant

SELECT ic.index_name, ic.column_name,ic.column_position col_pos,ix.uniqueness

FROM user_indexes ix, user_ind_columns icWHERE ic.index_name = ix.index_nameAND ic.table_name = 'EMPLOYEES';

Confirming Indexes

The USER_INDEXES data dictionary view contains the name of the index and its uniqueness.

The USER_IND_COLUMNS view contains the index name, the table name, and the column name.

Page 253: ALL ABOUT SQL AND RDBMS

253 System Consultant

Removing an Index Remove an index from the data dictionary

by using the DROP INDEX command.

Remove the UPPER_LAST_NAME_IDX index from the data dictionary.

To drop an index, you must be the owner of the index or have the DROP ANY INDEX privilege.

DROP INDEX upper_last_name_idx;Index dropped.Index dropped.

DROP INDEX upper_last_name_idx;Index dropped.Index dropped.

DROP INDEX index;DROP INDEX index;

Page 254: ALL ABOUT SQL AND RDBMS

254 System Consultant

Synonyms

Simplify access to objects by creating a

synonym (another name for an object).

With synonyms, you can: Ease referring to a table owned by

another user Shorten lengthy object names

CREATE [PUBLIC] SYNONYM synonymFOR object;

CREATE [PUBLIC] SYNONYM synonymFOR object;

Page 255: ALL ABOUT SQL AND RDBMS

255 System Consultant

Creating and Removing Synonyms

Create a shortened name for the DEPT_SUM_VU view.

Drop a synonym.

CREATE SYNONYM d_sumFOR dept_sum_vu;Synonym Created.Synonym Created.

CREATE SYNONYM d_sumFOR dept_sum_vu;Synonym Created.Synonym Created.

DROP SYNONYM d_sum;Synonym dropped.Synonym dropped.

DROP SYNONYM d_sum;Synonym dropped.Synonym dropped.

Page 256: ALL ABOUT SQL AND RDBMS

Using Using SETSET OperatorsOperators

Page 257: ALL ABOUT SQL AND RDBMS

257 System Consultant

The SET OperatorsA B

UNION/UNION ALL

A B

A B

INTERSECT

A B

MINUS

Page 258: ALL ABOUT SQL AND RDBMS

258 System Consultant

The UNION Operator

The The UNIONUNION operator returns results from operator returns results fromboth queries after eliminating duplications.both queries after eliminating duplications.

A B

Page 259: ALL ABOUT SQL AND RDBMS

259 System Consultant

Using the UNION Operator Display the current and previous job

details of all employees. Display each employee only once.SELECT employee_id, job_idFROM employeesUNIONSELECT employee_id, job_idFROM job_history;

Page 260: ALL ABOUT SQL AND RDBMS

260 System Consultant

The UNION ALL OperatorA B

The The UNION ALLUNION ALL operator returns results operator returns results from both queries, including all duplications.from both queries, including all duplications.The The UNION ALLUNION ALL operator returns results operator returns results from both queries, including all duplications.from both queries, including all duplications.

Page 261: ALL ABOUT SQL AND RDBMS

261 System Consultant

Using the UNION ALL Operator Display the current and previous departments of all employees.SELECT employee_id, job_id, department_idFROM employeesUNION ALLSELECT employee_id, job_id, department_idFROM job_historyORDER BY employee_id;

Page 262: ALL ABOUT SQL AND RDBMS

262 System Consultant

The INTERSECT OperatorA B

TheThe INTERSECTINTERSECT operator returns all operator returns all rows common to multiple queriesrows common to multiple queries

Page 263: ALL ABOUT SQL AND RDBMS

263 System Consultant

Using the INTERSECT Operator

Display the employee IDs and job IDs of employees who currently have a job title that they held before beginning their tenure with the company.SELECT employee_id, job_idFROM employeesINTERSECTSELECT employee_id, job_idFROM job_history;

Page 264: ALL ABOUT SQL AND RDBMS

264 System Consultant

The MINUS OperatorA B

The MINUS operator returns rows returned The MINUS operator returns rows returned by the first query that are not present in the by the first query that are not present in the second querysecond query

Page 265: ALL ABOUT SQL AND RDBMS

265 System Consultant

The MINUS OperatorDisplay the employee IDs of those employees who have Display the employee IDs of those employees who have not changed their jobs even once.not changed their jobs even once.Display the employee IDs of those employees who have Display the employee IDs of those employees who have not changed their jobs even once.not changed their jobs even once.

SELECT employee_id,job_idFROM employeesMINUSSELECT employee_id,job_idFROM job_history;

Page 266: ALL ABOUT SQL AND RDBMS

266 System Consultant

SET Operator Guidelines

The expressions in the SELECT lists must match in number and data type.

Parentheses can be used to alter the sequence of execution.

The ORDER BY clause:Can appear only at the very end of the

statementWill accept the column name, aliases

from the first SELECT statement

Page 267: ALL ABOUT SQL AND RDBMS

267 System Consultant

The Oracle Server and SET Operators

Duplicate rows are automatically eliminated except in UNION ALL.

Column names from the first query appear in the result.

The output is sorted in ascending order by default except in UNION ALL.

Page 268: ALL ABOUT SQL AND RDBMS

Oracle9Oracle9ii Datetime Datetime FunctionsFunctions

Page 269: ALL ABOUT SQL AND RDBMS

269 System Consultant

TIME ZONES

-08:00

The image represents the time for each time zone when Greenwich time is 12:00.

The image represents the time for each time zone when Greenwich time is 12:00.

-05:00+02:00 +10:00

+07:00

Page 270: ALL ABOUT SQL AND RDBMS

270 System Consultant

Oracle9i Datetime Support In Oracle9i, you can include the time zone in your

date and time data, and provide support for fractional seconds.

Three new data types are added to DATE: TIMESTAMP TIMESTAMP WITH TIME ZONE (TSTZ) TIMESTAMP WITH LOCAL TIME ZONE (TSLTZ)

Page 271: ALL ABOUT SQL AND RDBMS

271 System Consultant

TZ_OFFSET

SELECT TZ_OFFSET('US/Eastern') FROM DUAL;

SELECT TZ_OFFSET('Canada/Yukon') FROM DUAL;

SELECT TZ_OFFSET('Europe/London') FROM DUAL;

• Display the time zone offset for the time zone 'US/Eastern'

• Display the time zone offset for the time zone 'Canada/Yukon'

• Display the time zone offset for the time zone 'Europe/London'

Page 272: ALL ABOUT SQL AND RDBMS

272 System Consultant

CURRENT_DATE

• CURRENT_DATE is sensitive to the session time zone.

ALTER SESSION SET TIME_ZONE = '-8:0';SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

ALTER SESSION SET TIME_ZONE = '-5:0';SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

• Display the current date and time in the session’s time zone .

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';

Page 273: ALL ABOUT SQL AND RDBMS

273 System Consultant

CURRENT_TIMESTAMP

ALTER SESSION SET TIME_ZONE = '-8:0';SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

ALTER SESSION SET TIME_ZONE = '-5:0';SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

• Display the current date and fractional time in the session's time zone.

• CURRENT_TIMESTAMP is sensitive to the session time zone.

• The return value is of the TIMESTAMP WITH TIME ZONE datatype.

Page 274: ALL ABOUT SQL AND RDBMS

274 System Consultant

LOCALTIMESTAMP

ALTER SESSION SET TIME_ZONE = '-5:0';SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;

ALTER SESSION SET TIME_ZONE = '-8:0';SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;

• Display the current date and time in the session time zone in a value of TIMESTAMP data type.

• LOCALTIMESTAMP returns a TIMESTAMP value, whereas CURRENT_TIMESTAMP returns a TIMESTAMP WITH TIME ZONE value.

Page 275: ALL ABOUT SQL AND RDBMS

275 System Consultant

DBTIMEZONE and SESSIONTIMEZONE

SELECT DBTIMEZONE FROM DUAL;

SELECT SESSIONTIMEZONE FROM DUAL;

• Display the value of the database time zone.

• Display the value of the session's time zone.

Page 276: ALL ABOUT SQL AND RDBMS

Advanced Advanced SubqueriesSubqueries

Page 277: ALL ABOUT SQL AND RDBMS

277 System Consultant

What Is a Subquery?

A subquery is a SELECT statementembedded in a clause of another SQL statement.

SELECT ... FROM ...WHERE ...

(SELECT ... FROM ... WHERE ...)

MainMainqueryquery

SubquerySubquery

Page 278: ALL ABOUT SQL AND RDBMS

278 System Consultant

Subqueries

The subquery (inner query) executes once before the main query.

The result of the subquery is used by the main query (outer query).

SELECT select_listFROM tableWHERE expr operator (SELECT select_list

FROM table);

Page 279: ALL ABOUT SQL AND RDBMS

279 System Consultant

SELECT last_nameFROM employeesWHERE salary > (SELECT salary FROM employees WHERE employee_id = 149) ;

Using a Subquery10500

Page 280: ALL ABOUT SQL AND RDBMS

280 System Consultant

Multiple-Column SubqueriesMain query

WHERE (MANAGER_ID, DEPARTMENT_ID) IN

Subquery

100 90

102 60

124 50

Each row of the main query is compared to Each row of the main query is compared to values from a multiple-row and multiple-column values from a multiple-row and multiple-column subquery.subquery.

Page 281: ALL ABOUT SQL AND RDBMS

281 System Consultant

Column Comparisons

Column comparisons in a multiple-column subquery can be: Pairwise comparisons Nonpairwise comparisons

Page 282: ALL ABOUT SQL AND RDBMS

282 System Consultant

Pairwise Comparison

Display the details of the employees who are managed by the same manager and work in the same department as the employees with EMPLOYEE_ID 178 or 174.SELECT employee_id, manager_id, department_idFROM employeesWHERE (manager_id, department_id) IN (SELECT manager_id, department_id FROM employees WHERE employee_id IN (178,174))AND employee_id NOT IN (178,174);

Page 283: ALL ABOUT SQL AND RDBMS

283 System Consultant

Nonpairwise Comparison Subquery

SELECT employee_id, manager_id, department_idFROM employeesWHERE manager_id IN (SELECT manager_id FROM employees WHERE employee_id IN (174,141))AND department_id IN (SELECT department_id FROM employees WHERE employee_id IN (174,141))

AND employee_id NOT IN(174,141);

Display the details of the employees who are managed by the same manager as the employees with EMPLOYEE_ID 174 or 141 and work in the same department as the employees with EMPLOYEE_ID 174 or 141.

Page 284: ALL ABOUT SQL AND RDBMS

284 System Consultant

SELECT a.last_name, a.salary, a.department_id, b.salavgFROM employees a, (SELECT department_id, AVG(salary) salavg FROM employees GROUP BY department_id) bWHERE a.department_id = b.department_idAND a.salary > b.salavg;

Using a Subquery in the FROM Clause

Page 285: ALL ABOUT SQL AND RDBMS

285 System Consultant

Scalar Subquery Expressions A scalar subquery expression is a

subquery that returns exactly one column value from one row.

In Oracle9i, scalar subqueries can be used in:Condition and expression part of DECODE and CASE

All clauses of SELECT except GROUP BY

Page 286: ALL ABOUT SQL AND RDBMS

286 System Consultant

Scalar Subqueries: ExamplesScalar Subqueries in CASE ExpressionsSELECT employee_id, last_name, (CASE WHEN department_id = THEN 'Canada' ELSE 'USA' END) locationFROM employees;

(SELECT department_id FROM departmentsWHERE location_id = 1800)

Scalar Subqueries in ORDER BY ClauseScalar Subqueries in ORDER BY Clause

SELECT employee_id, last_nameFROM employees eORDER BY

20

(SELECT department_name FROM departments d WHERE e.department_id = d.department_id);

Page 287: ALL ABOUT SQL AND RDBMS

287 System Consultant

Correlated SubqueriesCorrelated subqueries are used for row-by-row processing. Each subquery is executedonce for every row of the outer query.

GETcandidate row from outer query

EXECUTEinner query using candidate row value

USEvalues from inner query to qualify or

disqualify candidate row

Page 288: ALL ABOUT SQL AND RDBMS

288 System Consultant

Correlated Subqueries SELECT column1, column2, ... FROM table1 WHERE column1 operator

(SELECT colum1, column2 FROM table2 WHERE expr1 =

.expr2);

The subquery references a column from a table in The subquery references a column from a table in the parent query.the parent query.The subquery references a column from a table in The subquery references a column from a table in the parent query.the parent query.

outer

outer

Page 289: ALL ABOUT SQL AND RDBMS

289 System Consultant

SELECT last_name, salary, department_idFROM employees outerWHERE salary >

Using Correlated Subqueries

Each time a row from the outer queryis processed, theinner query isevaluated.

Find all employees who earn more than the average salary in their department.

(SELECT AVG(salary) FROM employees WHERE department_id = outer.department_id) ;

Page 290: ALL ABOUT SQL AND RDBMS

290 System Consultant

Using Correlated Subqueries

SELECT e.employee_id, last_name,e.job_idFROM employees e WHERE 2 <= (SELECT COUNT(*) FROM job_history WHERE employee_id = e.employee_id);

Display details of those employees who have switchedjobs at least twice.

Page 291: ALL ABOUT SQL AND RDBMS

291 System Consultant

Using the EXISTS Operator The EXISTS operator tests for

existence of rows in the results set of the subquery.

If a subquery row value is found:The search does not continue in the

inner queryThe condition is flagged TRUE

If a subquery row value is not found:The condition is flagged FALSEThe search continues in the inner query

Page 292: ALL ABOUT SQL AND RDBMS

292 System Consultant

SELECT employee_id, last_name, job_id, department_idFROM employees outerWHERE EXISTS ( SELECT 'X' FROM employees WHERE manager_id = outer.employee_id);

Using the EXISTS OperatorFind employees who have at least one person reporting to them.

Page 293: ALL ABOUT SQL AND RDBMS

293 System Consultant

SELECT department_id, department_nameFROM departments dWHERE NOT EXISTS (SELECT 'X' FROM employees WHERE department_id = d.department_id);

Using the NOT EXISTS OperatorFind all departments that do not have any employees.

Page 294: ALL ABOUT SQL AND RDBMS

294 System Consultant

Correlated UPDATE

Use a correlated subquery to update rows in one table based on rows from another table.

UPDATE table1 alias1SET column = (SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);

Page 295: ALL ABOUT SQL AND RDBMS

295 System Consultant

Correlated UPDATEALTER TABLE employeesADD(department_name VARCHAR2(14));

UPDATE employees eSET department_name = (SELECT department_name

FROM departments d WHERE e.department_id = d.department_id);

Page 296: ALL ABOUT SQL AND RDBMS

296 System Consultant

DELETE FROM table1 alias1 WHERE column operator

(SELECT expression FROM table2 alias2 WHERE alias1.column = alias2.column);

Correlated DELETE

Use a correlated subquery to delete rows in one table based on rows from another table.

Page 297: ALL ABOUT SQL AND RDBMS

297 System Consultant

DELETE FROM employees EWHERE employee_id = (SELECT employee_id FROM emp_history WHERE employee_id = E.employee_id);

Use a correlated subquery to delete only those rows from the EMPLOYEES table that also exist in the EMP_HISTORY table.

Correlated DELETE

Page 298: ALL ABOUT SQL AND RDBMS

Hierarchical Hierarchical RetrievalRetrieval

Page 299: ALL ABOUT SQL AND RDBMS

299 System Consultant

Sample Data from the EMPLOYEES Table

Page 300: ALL ABOUT SQL AND RDBMS

300 System Consultant

Natural Tree Structure

De HannDe Hann

KingKing

HunoldHunold

EMPLOYEE_ID = 100 (Parent)

MANAGER_ID = 100 (Child)

WhalenWhalen

KochharKochhar

HigginsHiggins

MourgosMourgosZlotkeyZlotkey

RajsRajs DaviesDavies MatosMatos

GietzGietz ErnstErnst LorentzLorentz

HartsteinHartstein

Fay Fay

AbelAbel TaylorTaylor GrantGrant

VargasVargas

Page 301: ALL ABOUT SQL AND RDBMS

301 System Consultant

Hierarchical Queries

WHEREWHERE conditioncondition::WHEREWHERE conditioncondition::

expr comparison_operator expr

SELECT [LEVEL], column, expr...FROM table[WHERE condition(s)][START WITH condition(s)][CONNECT BY PRIOR condition(s)] ;

Page 302: ALL ABOUT SQL AND RDBMS

302 System Consultant

Walking the TreeStarting Point

Specifies the condition that must be met

Accepts any valid condition

Using the EMPLOYEES table, start with the employee whose last name is Kochhar.

...START WITH last_name = 'Kochhar'

START WITH column1 = value

Page 303: ALL ABOUT SQL AND RDBMS

303 System Consultant

Walking the Tree

Direction

Top down Top down Column1 = Parent KeyColumn1 = Parent KeyColumn2 = Child KeyColumn2 = Child Key

Bottom up Bottom up Column1 = Child KeyColumn1 = Child KeyColumn2 = Parent KeyColumn2 = Parent Key

Walk from the top down, using the Walk from the top down, using the EMPLOYEESEMPLOYEES table.table.Walk from the top down, using the Walk from the top down, using the EMPLOYEESEMPLOYEES table.table.

CONNECT BY PRIOR column1 = column2

... CONNECT BY PRIOR employee_id = manager_id

Page 304: ALL ABOUT SQL AND RDBMS

304 System Consultant

Walking the Tree: From the Bottom Up

SELECT employee_id, last_name, job_id, manager_idFROM employeesSTART WITH employee_id = 101CONNECT BY PRIOR manager_id = employee_id ;

Page 305: ALL ABOUT SQL AND RDBMS

305 System Consultant

Walking the Tree: From the Top Down

SELECT last_name||' reports to '|| PRIOR last_name "Walk Top Down"FROM employeesSTART WITH last_name = 'King'CONNECT BY PRIOR employee_id = manager_id ;

Page 306: ALL ABOUT SQL AND RDBMS

306 System Consultant

Ranking Rows with the LEVEL Pseudocolumn

De HannDe Hann

KingKing

HunoldHunoldWhalenWhalen

KochharKochhar

HigginsHiggins

MourgosMourgosZlotkeyZlotkey

RajsRajs DaviesDavies MatosMatos

GietzGietz ErnstErnst LorentzLorentz

HartsteinHartstein

Fay Fay

AbelAbel TaylorTaylor GrantGrant

VargasVargas

Level 1root/parent

Level 2parent/child

Level 3parent/child

/leaf

Level 4leaf

Page 307: ALL ABOUT SQL AND RDBMS

307 System Consultant

Formatting Hierarchical Reports Using LEVEL and LPADCreate a report displaying company management levels, beginning with thehighest level and indenting each of thefollowing levels.

COLUMN org_chart FORMAT A12SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chartFROM employees START WITH last_name='King' CONNECT BY PRIOR employee_id=manager_id

Page 308: ALL ABOUT SQL AND RDBMS

308 System Consultant

Pruning Branches

Use the Use the WHEREWHERE clause clause to eliminate a node.to eliminate a node.

Use the Use the CONNECT BYCONNECT BY clause clauseto eliminate a branch.to eliminate a branch.

WHERE last_name != 'Higgins'WHERE last_name != 'Higgins' CONNECT BY PRIOR CONNECT BY PRIOR employee_id = manager_id employee_id = manager_id AND last_name != 'Higgins'AND last_name != 'Higgins'KochharKochhar

HigginsHiggins

GietzGietz

WhalenWhalen

KochharKochhar

HigginsHigginsWhalenWhalen

GietzGietz

Page 309: ALL ABOUT SQL AND RDBMS

Oracle Oracle Architecture Architecture

OverviewOverview

Page 310: ALL ABOUT SQL AND RDBMS

310 System Consultant

Passwordfile

Overview of Primary ComponentsInstance

SGA

Redo LogBuffer

Shared Pool

Data DictionaryCache

LibraryCache

DBWRSMONPMON CKPTLGWR Others

Userprocess

Serverprocess

PGA

Control files

Datafiles

Database

DatabaseBuffer Cache

Redo Log files

Java Pool Large Pool

Parameterfile

Archived Log files

Page 311: ALL ABOUT SQL AND RDBMS

311

THANK-YOU