You are on page 1of 14

SQL Conductions

Comparison
Operator
=
>
>=
<
<=
<>

Conditions
Meaning
Equal to
Greater than
Greater than or equal to
Less than
Less than or equal to
Not equal to

Other Comparison Conditions


Operator
Meaning
BETWEEN ...AND... Between two values (inclusive)
IN(set)
Match any of a list of values
LIKE
Match a character pattern
IS NULL
Is a null value
,
Match any of a list of values Match a character pattern Is a null value
Logical Conditions
Operator
Meaning
AND
Returns TRUE if both component conditions are true
OR
Returns TRUE if either component condition is true
NOT
Returns TRUE if the following condition is false
select*fromtab
select*fromdepartments
Select*fromemployees
select*fromemployeeswheredepartment_id=90
selectlast_name,job_id,department_idfromemployees
wherejob_id='SA_REP'

selectlast_name,job_id,department_idfromemployees
wherelast_name='Whalen'
selectlast_name,salary,department_id
fromemployees
wheresalary<>3000
selectemployee_id,last_name,salary,hire_date,department_id

fromemployees
wheresalarybetween3000and3500
whereemployee_idbetween111and120
wherehire_datebetween'01jun05'and'31dec05'
orderbyhire_date
selectemployee_id,last_name,salary,manager_id,job_id,hire_date
fromemployees
wheremanager_idin(100,101)and
wherejob_idin('SA_REP','IT_PROG')
wherehire_datein('03jun06')
wherelast_namein('King','Vargas')
grantallonhr.employeestoSYSTEM

selectemployee_id,last_name,salary,hire_date
fromemployees
wherelast_namelike'S%'
wherelast_namelike'%ng'
wherehire_datelike'%05'

selectemployee_id,last_name,salary,commission_pct
fromemployees
wheremanager_idisnull
wherecommission_pctisnotnull
selectemployee_id,last_name,job_id,salary,hire_date,commission_pct
fromemployees
wheresalary>5000
wherehire_Datebetween'01jan2005'and'31dec2005'
andjob_idlike'%MAN%'
andjob_idin('AD_VP','IT_PROG','SA_REP')
andcommission_pctisnotnull
selectemployee_id,last_name,job_id,salary,hire_date,commission_pct
fromemployees
wheresalary>10000
orhire_Datebetween'01jan2005'and'31dec2005'
orjob_idlike'%MAN%'
orjob_idin('AD_VP','IT_PROG','SA_REP')
orcommission_pctisnotnull
selectemployee_id,last_name,job_id,salary,hire_date,commission_pct
fromemployees
wheresalary>10000
andhire_Datebetween'01jan2005'and'31dec2005'
orjob_idlike'%MAN%'
andjob_idnotin('AD_VP','IT_PROG','SA_REP')
andcommission_pctisnotnull

selectemployee_id,last_name,job_id,salary,hire_date,commission_pct
fromemployees
WHEREjob_idNOTIN('AD_VP','AC_ACCOUNT','AD_VP')
andsalaryNOTBETWEEN10000AND15000
andcommission_pctISNOTNULL
selectemployee_id,last_name,job_id,salary,hire_date,commission_pct
fromemployees
wherejob_id='SA_REP'
orjob_id='IT_PROG'
andsalary>10000
selectemployee_id,last_name,job_id,salary,hire_date,commission_pct
fromemployees
where(job_id='SA_REP'
orjob_id='IT_PROG')
andsalary>10000
selectemployee_id,last_name,job_id,salary,hire_date,commission_pct,
department_id
fromemployees
whereHire_datebetween'01jan2005'and'31dec2006'
and(job_id='SA_REP'orjob_id='IT_PROG')
andsalary>5000
andcommission_pctisnull
orderbyhire_datedesc,salary,department_id
selectemployee_id,last_name,salary*12annsal
fromemployees
whereHire_datebetween'01jan2007'and'31dec2010'
orderby3desc
orderbydepartment_id,annsaldesc
selectlast_name,salaryfromemployees
wheresalary>12000
selectlast_name,department_idfromemployees
whereemployee_id=176
selectlast_name,salaryfromemployees
wheresalarynotbetween'5000'and12000
selectlast_name,job_id,hire_datestartdatefromemployees
wherehire_datebetween'01jun05'and'31dec05'
orderbystartdate
selectlast_name,department_idfromemployees
wheredepartment_idin(20,50)
orderbylast_name
selectlast_nameEmployees,salaryNonthlySalaryfromemployees
wheresalarybetween'5000'and12000
anddepartment_idin(20,50)

selectlast_name,hire_datefromemployees
wherehire_datelike'%04'
selectlast_name,job_idfromemployees
wheremanager_idisnull
selectlast_name,salary,commission_pctfromemployees
wherecommission_pctisnotnull
orderbysalarydesc,commission_pctdesc
selectlast_namefromemployees
wherelast_namelike'__a%'
selectlast_namefromemployees
wherelast_namelike'%a%'
andlast_namelike'%e%'
selectlast_name,job_id,salaryfromemployees
where(job_id='SA_REP'orjob_id='ST_CLERK')
andsalaryin(2500,3500,7000)
selectlast_name,salary,commission_pctfromemployees
wherecommission_pctisnotnull
andcommission_pct=.2
orderbysalarydesc
select*fromemployees

SQL Functions
There are two distinct types of functions:
Single-row functions
Multiple-row functions
Single-Row Functions
These functions operate on single rows only and return one result per row. There are different types of
single-row functions. This lesson covers the following ones:
Character
Number
Date
Conversion
Multiple-Row Functions
Functions can manipulate groups of rows to give one result per group of rows. These functions are
known as group functions. This is covered in a later lesson.

Character Functions
Case-manipulation
Functions
LOWER
UPPER

INITCAP

Character-manipulation
Functions
CONCAT
SUBSTR
LENGTH
INSTR
LPAD|RPAD
TRIM
REPLACE
Operation Result Description
date + number Date Adds a number of days to a date
date - number Date Subtracts a number of days from a date
date - date Number of days Subtracts one date from another
date + number/24 Date Adds a number of hours to a date

Date Functions
Function

Description

MONTHS_BETWEEN
ADD_MONTHS
NEXT_DAY
LAST_DAY
ROUND
TRUNC

Number of months
between two dates
Add calendar months to date
Next day of the date specified
Last day of the month
Round date
Truncate date

Implicit Data Type Conversion


For assignments, the Oracle server can automatically
convert the following:
From
To
VARCHAR2orCHAR
NUMBER
VARCHAR2orCHAR
DATE
NUMBER
VARCHAR2
DATE
VARCHAR2

TO_CHAR(number|date,[fmt],
[nlsparams])

Date Conversion: The nlsparamsparameter specifies the language in which month and day names and
abbreviations are returned. If this parameter is omitted, this function uses the default date languages for the
session.
TO_NUMBER(char,[fmt],
[nlsparams])
Converts a character string containing digits to a number in the format specified by the optional format model
fmt. The nlsparamsparameter has the same purpose in this function as in the TO_CHARfunction for
number conversion.
TO_DATE(char,[fmt],[nlsparams])
Converts a character string representing a date to a date value according to the fmtspecified. If fmtis
omitted, the format is DD-MON-YY. The nlsparamsparameter has the same purpose in this function as in
the TO_CHARfunction for date conversion.
select'Thejobidfor'||upper(last_name)||'is'||
lower(job_id)as"EMPLOYEEDETAILS"
fromemployees
selectemployee_id,last_name,department_id
fromemployees
wherelast_name='Higgins'
wherelower(last_name)='higgins'
selectemployee_id,upper(last_name),department_id
fromemployees
whereinitcap(last_name)='Higgins'
selectemployee_id,concat(first_name,last_name)NAME,job_id,
length(last_name),
instr(last_name,'a')"Contains'a'?"
fromemployees
wheresubstr(job_id,4)='REP'
selectemployee_id,concat(first_name,last_name)NAME,job_id,
length(last_name),
instr(last_name,'a')"Contains'a'?"
fromemployees
wheresubstr(lower(last_name),1,1)='a'
SELECTROUND(45.923,2),ROUND(45.923,0),
ROUND(45.923,1)
FROMDUAL
SELECTTRUNC(45.923,2),TRUNC(45.923),
TRUNC(45.923,2)
FROMDUAL
selectemployee_id,last_name,mod(salary,5000)
fromemployees
wherehire_datebetween'01jan05'and'31dec06'
andjob_id='SA_REP'
selectlast_name,hire_date,job_idfromemployees
wherehire_datenotbetween'01jan05'and'31dec06'

andsubstr(job_id,4)='REP'
andlast_namelike'G%'
andsubstr(lower(last_name),1,1)='g'
selectupper(concat(first_name,last_name))Name,hire_date,commission_pct,
job_idfromemployees
wherehire_datenotbetween'01jan05'and'31dec05'
andsubstr(job_id,4)in('REP','PROG')
andfirst_namelike'%S%'
andsubstr(lower(last_name),1,1)='a'
andcommission_pctisnotnull
selectsysdatefromdual
selectupper(last_name),salary,commission_pct,round((sysdatehire_date)/7,0)
as"WEEKS"
fromemployees
wheredepartment_idin(80,50)
andlast_namelike'%a%'
andcommission_pctisnotnull
andcommission_pct>.2
and(sysdatehire_date)/7>=300
orderbyweeksdesc
selectlast_name,hire_date,round(months_between(sysdate,hire_date))
Months,
add_months(hire_date,6)asREVIEWDATE,
next_day(hire_date,'MONDAY')as"1stMonday",
last_day(hire_date)aslastdayofJOINMONTH
fromemployees
wherehire_date<'31dec05'
andmonths_between(sysdate,hire_date)<=100
selectconcat(first_name,last_name),last_name,hire_date,department_id,
salary,
round(months_between(sysdate,hire_date))AS"Months",
round(hire_date,'month'),
trunc(hire_date,'month')
fromemployees
wherehire_datelike'%05'
anddepartment_idin(80,90,50)
andsubstr(job_id,4)='REP'
andsubstr(lower(last_name),1,1)='h'
andsalary>=9000
selectemployee_id,last_name,to_char(hire_date,'MM/YY'),salary,
commission_pct
fromemployees
wheresubstr(job_id,4)in('REP','PROG')
andcommission_pctisnotnull
andsalarynotbetween8000and9000
selectemployee_id,last_name,
to_char(hire_date,'fmDDMonthYYYY')asJoindate,

to_char(hire_date,'fmDdspth"of"MonthYYYYfmHH:MI:SSAM')asJoindate,
to_char(salary,'$99,999.00')SALARY,commission_pct
fromemployees
wheresubstr(job_id,4)in('REP','PROG')
andcommission_pctisnotnull
andsalarynotbetween8000and9000
selectmonths_between(sysdate,'02jun76')/12asAGEfromdual
SELECTlast_name,hire_date,department_id,substr(upper(last_name),
1,1),substr(upper(last_name),1,1)
FROMemployees
WHEREhire_datebetweenTO_DATE('May01,2000','fxMonthDD,YYYY')and
TO_DATE('June30,2006','fxMonthDD,YYYY')
anddepartment_idnotin(90,100,30,80)
and(job_id='IT_PROG'orjob_id='SA_REP'orjob_id='ST_CLERK')
andsubstr(upper(last_name),1,1)in('A','B','P')
SELECTlast_name,
TO_CHAR(hire_date,'DDMonYYYY')
TO_CHAR(hire_date,'DDMonyyyy')
FROMemployees
WHEREhire_date<TO_DATE('01Jan05','DDMonRR')
WHERETO_DATE(hire_date,'DDMonyy')<'01Jan05'
selectlast_name,nvl(to_char(manager_id),'NoManager')"NoManager"from
employees
wheremanager_idisnull
selectlast_name,salary,to_char(next_day(add_months(Hire_date,
6),'FRIDAY'),'fmDay,MonthDDth,YYYY')"Next6MonthREVIEW"
fromemployees
wherehire_datebetweento_date('March01,2003','fmMonthDD,YYYY')and
to_date('July31,2007','fmMonthDD,YYYY')
andsubstr(upper(last_name),1,1)in('A','P','K','J')
orderbyhire_date
SELECTlast_name,salary,NVL(commission_pct,0),
(salary*12)+(salary*12*NVL(commission_pct,0))AN_SAL
FROMemployees
select*fromemployees

Conditional Expressions
Provide the use of IF-THEN-ELSE logic within a
SQL statement
Use two methods:
CASEexpression
DECODEfunction

Single-Row Functions
Single-row functions can be nested to any level. Single-row functions can manipulate the following:
Character data: LOWER, UPPER, INITCAP, CONCAT, SUBSTR, INSTR, LENGTH
Number data: ROUND, TRUNC, MOD
Date data: MONTHS_BETWEEN, ADD_MONTHS, NEXT_DAY, LAST_DAY, ROUND, TRUNC
Date values can also use arithmetic operators.
Conversion functions can convert character, date, and numeric values: TO_CHAR, TO_DATE,
TO_NUMBER
There are several functions that pertain to nulls, including NVL, NVL2, NULLIF, and
COALESCE.
IF-THEN-ELSE logic can be applied within a SQL statement by using the CASEexpression or
the DECODEfunction.
SYSDATEand DUAL
SYSDATEis a date function that returns the current date and time. It is customary to select SYSDATE
from a dummy table called DUAL.
select'Thejobidfor'||upper(last_name)||'is'||
lower(job_id)as"EMPLOYEEDETAILS"
fromemployees
selectemployee_id,last_name,department_id
fromemployees
wherelast_name='Higgins'
wherelower(last_name)='higgins'
selectemployee_id,upper(last_name),department_id
fromemployees
whereinitcap(last_name)='Higgins'
selectemployee_id,concat(first_name,last_name)NAME,job_id,
length(last_name),
instr(last_name,'a')"Contains'a'?"
fromemployees
wheresubstr(job_id,4)='REP'
selectemployee_id,concat(first_name,last_name)NAME,job_id,
length(last_name),
instr(last_name,'a')"Contains'a'?"
fromemployees
wheresubstr(lower(last_name),1,1)='a'
SELECTROUND(45.923,2),ROUND(45.923,0),
ROUND(45.923,1)
FROMDUAL
SELECTTRUNC(45.923,2),TRUNC(45.923),
TRUNC(45.923,2)
FROMDUAL
selectemployee_id,last_name,mod(salary,5000)
fromemployees
wherehire_datebetween'01jan05'and'31dec06'

andjob_id='SA_REP'
selectlast_name,hire_date,job_idfromemployees
wherehire_datenotbetween'01jan05'and'31dec06'
andsubstr(job_id,4)='REP'
andlast_namelike'G%'
andsubstr(lower(last_name),1,1)='g'
selectupper(concat(first_name,last_name))Name,hire_date,commission_pct,
job_idfromemployees
wherehire_datenotbetween'01jan05'and'31dec05'
andsubstr(job_id,4)in('REP','PROG')
andfirst_namelike'%S%'
andsubstr(lower(last_name),1,1)='a'
andcommission_pctisnotnull
selectsysdatefromdual
selectupper(last_name),salary,commission_pct,round((sysdatehire_date)/7,0)
as"WEEKS"
fromemployees
wheredepartment_idin(80,50)
andlast_namelike'%a%'
andcommission_pctisnotnull
andcommission_pct>.2
and(sysdatehire_date)/7>=300
orderbyweeksdesc
selectlast_name,hire_date,round(months_between(sysdate,hire_date))
Months,
add_months(hire_date,6)asREVIEWDATE,
next_day(hire_date,'MONDAY')as"1stMonday",
last_day(hire_date)aslastdayofJOINMONTH
fromemployees
wherehire_date<'31dec05'
andmonths_between(sysdate,hire_date)<=100
selectconcat(first_name,last_name),last_name,hire_date,department_id,
salary,
round(months_between(sysdate,hire_date))AS"Months",
round(hire_date,'month'),
trunc(hire_date,'month')
fromemployees
wherehire_datelike'%05'
anddepartment_idin(80,90,50)
andsubstr(job_id,4)='REP'
andsubstr(lower(last_name),1,1)='h'
andsalary>=9000
selectemployee_id,last_name,to_char(hire_date,'MM/YY'),salary,
commission_pct
fromemployees
wheresubstr(job_id,4)in('REP','PROG')
andcommission_pctisnotnull

andsalarynotbetween8000and9000
selectemployee_id,last_name,
to_char(hire_date,'fmDDMonthYYYY')asJoindate,
to_char(hire_date,'fmDdspth"of"MonthYYYYfmHH:MI:SSAM')asJoindate,
to_char(salary,'$99,999.00')SALARY,commission_pct
fromemployees
wheresubstr(job_id,4)in('REP','PROG')
andcommission_pctisnotnull
andsalarynotbetween8000and9000
selectmonths_between(sysdate,'02jun76')/12asAGEfromdual
SELECTlast_name,hire_date,department_id,substr(upper(last_name),
1,1),substr(upper(last_name),1,1)
FROMemployees
WHEREhire_datebetweenTO_DATE('May01,2000','fxMonthDD,YYYY')and
TO_DATE('June30,2006','fxMonthDD,YYYY')
anddepartment_idnotin(90,100,30,80)
and(job_id='IT_PROG'orjob_id='SA_REP'orjob_id='ST_CLERK')
andsubstr(upper(last_name),1,1)in('A','B','P')
SELECTlast_name,
TO_CHAR(hire_date,'DDMonYYYY')
TO_CHAR(hire_date,'DDMonyyyy')
FROMemployees
WHEREhire_date<TO_DATE('01Jan05','DDMonRR')
WHERETO_DATE(hire_date,'DDMonyy')<'01Jan05'
selectlast_name,nvl(to_char(manager_id),'NoManager')"NoManager"from
employees
wheremanager_idisnull
selectlast_name,salary,to_char(next_day(add_months(Hire_date,
6),'FRIDAY'),'fmDay,MonthDDth,YYYY')"Next6MonthREVIEW"
fromemployees
wherehire_datebetweento_date('March01,2003','fmMonthDD,YYYY')and
to_date('July31,2007','fmMonthDD,YYYY')
andsubstr(upper(last_name),1,1)in('A','P','K','J')
orderbyhire_date
SELECTlast_name,salary,NVL(commission_pct,0),
(salary*12)+(salary*12*NVL(commission_pct,0))AN_SAL
FROMemployees
selectlast_name,salary,job_id,commission_pct,NVL2(commission_pct,
'SAL+COMM','SAL')income
fromemployees
wheredepartment_idin(50,80)
andsubstr(job_id,4)in('REP','PROG','CLERK')
selectfirst_name,length(first_name)"expr1",
last_name,length(last_name)"espr2",
nullif(length(first_name),length(last_name))result

fromemployees

selectlast_name,
coalesce(commission_pct,salary,10)result
fromemployees
wherehire_datebetween
orderbycommission_pct

selectlast_name,job_id,salary,
casejob_idwhen'IT_PROG'then1.10*salary
when'ST_CLERK'then1.15*salary
when'SA_REP'then1.20*salary
elsesalaryend"REVISED_SALARY"
fromemployees;

selectlast_name,job_id,salary,
decode(job_id,'IT_PROG',1.10*salary,
'ST_CLERK',1.15*salary,
'SA_REP',1.20*salary,
'FI_ACCOUNT',1.10*salary,
salary*1.05)REVISED_SALARY
fromemployees

SELECTlast_name,salary,
DECODE(TRUNC(salary/2000,0),
0,0.00,
1,0.09,
2,0.20,
3,0.30,
4,0.40,
5,0.42,
6,0.44,
0.45)TAX_RATE
FROMemployees
WHEREdepartment_id=80
SELECTlast_name,salary,
DECODE(TRUNC(salary/1000,0),
0,0,
1,1,
2,2,
3,3,
4,4,
5)RANK
FROMemployees
selectto_char(sysdate,'fmDDMONYY')as"Date"fromdual
selectemployee_id,last_name,salary,salary+salary*.15as"NewSalary"
fromemployees
selectemployee_id,last_name,salary,salary+salary*.15as"NewSalary",
salary+salary*.15salaryas"Increase"
fromemployees

selectemployee_id,initcap(last_name)as"Name",length(last_name)as"Length
ofName"
fromemployees
wheresubstr(upper(last_name),1,1)in('J','A','M')
orderbylast_name
selectlast_name,round(months_between(sysdate,hire_date))MONTHS_WORKED
fromemployees
orderby2
select'Thejobidfor'||upper(last_name)||'is'||
lower(job_id)as"EMPLOYEEDETAILS"
selectlast_name||'earns'||to_char(salary,'$99999.99')
||'monthlybutwants'||to_char(salary*3,'$99999.99')as"DreamSalary"
fromemployees
selectlast_name,lpad(salary,15,'$')asSALARY
fromemployees
selectlast_name,to_char(hire_date,'fmDDMONYYYY')ashire_Date,
to_char(next_day(add_months(Hire_date,6),'Monday'),
'fmDay,"the"fmDdspth"of"Month,YYYY')AS"Review"
'fmDay,MonthDDth,YYYY')"Review"
fromemployees
selectlast_name,hire_date,to_char(hire_date,'fmDay')as"Day"
fromemployees
orderbyto_char(hire_date,'fmD')
Displaythelastname,hiredate,anddayoftheweekonwhichtheemployee
started.Label
thecolumnDAY.OrdertheresultsbythedayoftheweekstartingwithMonday.

select*fromemployees

SELECTlast_name,NVL(to_char(commission_pct),'NoCommission')asCOMM
fromemployees
selectlast_name||lpad('*',round(salary/1000),'*')as
EMPLOYEE_AND_THERE_SALARIES
fromemployees
wheremod(salary,1000)=0
orderbysalaryDESC

selectjob_id,
decode(job_id,'AD_PRES','A',
'ST_MAIN','B',
'IT_PROG','C',
'SA_REP','D',

'ST_CLERK','E',
'0')GRADE
fromemployees
selectjob_id,
casejob_idwhen'AD_PRES'then'A'
when'ST_MAIN'then'B'
when'IT_PROG'then'C'
when'SA_REP'then'D'
when'ST_CLERK'then'E'
else'0'endGRADE
fromemployees

You might also like