SQLNotes PDF
SQLNotes PDF
Complete SQL
Bootcamp
Table of Contents
SELECT
SELECT DISTINCT
WHERE
LIMIT
IN Operator
NOT IN Operator
ORDER BY
BETWEEN
LIKE
GROUP BY
HAVING
Example
JOINS
SUBQUERY
1
PostgreSQL CREATE TABLE example
2
SELECT
Oneofthemostcommontasks,whenyouworkwithPostgreSQL,istoquerydatafrom
tablesbyusingthe statement.The
SELECT statementisoneofthemost
SELECT
complexstatementsinPostgreSQL.Ithasmanyclausesthatyoucancombinetoform
apowerfulquery.
Becauseofitscomplexity,wedividethePostgreSQL statementtutorialinto
SELECT
manyshorttutorialssothatyoucanlearneachclauseofthe statementeasier.
SELECT
Thefollowingaretheclausesthatappearinthe statement:
SELECT
SelectdistinctrowsbyusingDISTINCToperator.
FilterrowsbyusingWHEREclause.
SortrowsbyusingtheORDERBYclause.
SelectrowsbasedonvariousoperatorssuchasBETWEEN,INandLIKE.
GrouprowsintogroupsbyusingGROUPBYclause
ApplyconditionforgroupsbyusingHAVINGclause.
JointoanothertablebyusingINNERJOIN,LEFTJOIN,RIGHTJOIN
clauses.
3
Letsstartwithabasicformofthe statementtoquerydatafromatable.The
SELECT
followingillustratesthesyntaxofthe statement:
SELECT
1 SELECTcolumn_1,column_2,
2 FROMtable_name
Letsexaminethe statementinmoredetail:
SELECT
First,youspecifyalistofcolumnsinthetablefromwhichyouwanttoquery
datainthe clause.Youuseacommabetweeneachcolumnincase
SELECT
youwanttoquerydatafrommultiplecolumns.Ifyouwanttoquerydata
fromallcolumn,youcanuseanasterisk(*)astheshorthandforall
columns.
Second,youindicatethetablenameafterthe keyword
FROM
NoticethatSQLlanguageiscaseinsensitive.Itmeansifyouuse or
SELECT the
select
effectisthesame.Byconvention,wewilluseSQLkeywordsinuppercasetomakethe
codeeasiertoreadandstandoutclearly.
4
SELECT DISTINCT
The clauseisusedintheSELECTstatementtoremoveduplicaterowsfroma
DISTINCT
resultset.The clausekeepsonerowforeachgroupofduplicates.Youcan
DISTINCT
usethe clauseononeormorecolumnsofatable.
DISTINCT
Thesyntaxof clauseisasfollows:
DISTINCT
1 SELECTDISTINCTcolumn_1
2 FROMtable_name
Ifyouspecifymultiplecolumns,the clausewillevaluatetheduplicatebased
DISTINCT
onthecombinationofvaluesofthosecolumns.
1 SELECTDISTINCTcolumn_1,column_2
2 FROMtbl_name
PostgreSQLalsoprovidesthe (expression)tokeepthefirstrowofeach
DISTINCTON
groupofduplicateswheretheexpressionisequal.Seethefollowingsyntax:
1 SELECTDISTINCTON(column_1),column_2
2 FROMtbl_name
3
ORDERBYcolumn_1,column_2
Theorderofrowsreturnedfromthe statementisunpredictablethereforethe
SELECT
firstrowofeachgroupoftheduplicateisalsounpredictable.Itisgoodpracticeto
5
alwaysusethe clausewiththe
ORDERBY tomaketheresult
DISTINCTON(expression)
obvious.
Noticethatthe expressionmustmatchtheleftmostexpressioninthe
DISTINCTON
clause.
ORDERBY
6
WHERE
ThesyntaxofthePostgreSQL clauseisasfollows:
WHERE
1 SELECTcolumn_1,column_2column_n
2 FROMtable_name
3 WHEREconditions
The clauseappearsrightafterthe
WHERE clauseofthe
FROM statement.The
SELECT
conditionsareusedtofiltertherowsreturnedfromthe statement.PostgreSQL
SELECT
providesyouwithvariousstandardoperatorstoconstructtheconditions.
Thefollowingtableillustratesthestandardcomparisonoperators.
OPERATOR DESCRIPTION
= Equal
> Greaterthan
< Lessthan
>= Greaterthanorequal
7
<= Lessthanorequal
<>or!= Notequal
AND LogicaloperatorAND
OR LogicaloperatorOR
Letspracticewithsomeexamplesofusingthe clausewithconditions.
WHERE
Ifyouwanttogetallcustomerswhosefirstnamesare ,youcanusethe
Jamie WHERE
clausewiththeequal(=)operatorasfollows:
1 SELECTlast_name,first_name
2 FROMcustomer
3 WHEREfirst_name='Jamie'
Ifyouwanttoselectthecustomerwhosefirstnameis andlastnamesis
Jamie ,you
rice
canusethe logicaloperatorthatcombinestwoconditionsasthefollowingquery:
AND
1 SELECTlast_name,first_name
2 FROMcustomer
8
3 WHEREfirst_name='Jamie'AND
4 last_name='Rice'
Ifyouwanttoknowwhopaidtherentalwithamountiseitherlessthan1USDorgreater
than8USD,youcanusethefollowingquerywith operator:
OR
1 SELECTcustomer_id,amount,payment_date
2 FROMpayment
3 WHEREamount<=1ORamount>=8
9
LIMIT
PostgreSQLLIMITisusedintheSELECTstatementtogetasubsetofrowsreturnedby
thequery.ThefollowingisthecommonsyntaxoftheLIMITclause:
1 SELECT*
2 FROMTABLE
3 LIMITn
PostgreSQLreturnsnumberofrowsgeneratedbythequery.If
n iszeroor
n ,it
NULL
producestheresultthatissameasomittingthe clause.
LIMIT
Incaseyouwanttoskipanumberofrowsbeforereturningrows,youuse
n OFFSET
clausefollowedbythe clauseasfollows:
LIMIT
1 SELECT*FROMtable
2 LIMITnOFFSETm
PostgreSQLfirstskipsrowsbeforereturningnrowsgeneratedbythequery.Ifmis
m
zero,PostgreSQLwillbehavelikewithoutthe clause.
OFFSET
Becausetheorderoftherowsinthedatabasetableisunknownandunpredictable,
whenyouusethe clause,youshouldalwaysusethe
LIMIT clausetocontrol
ORDERBY
theorderofrows.Ifyoudontdoso,youwillgetanunpredictableresult.
10
IN Operator
Youusethe operatorintheWHEREclausetocheckifavaluematchesanyvaluein
IN
alistofvalues.Thesyntaxofthe operatorisasfollows:
IN
1 valueIN(value1,value2,...)
Theexpressionreturnstrueifthevaluematchesanyvalueinthelisti.e.,value1,
value2,etc.Thelistofvaluesisnotlimitedtoalistofnumbersorstringsbutalsoa
resultsetofa statementasshowninthefollowingquery:
SELECT
1 valueIN(SELECTvalueFROMtbl_name)
Thestatementinsidetheparenthesesiscalledasubquery,whichisaquerynested
insideanotherquery.
the operatorintheWHEREclauseasfollows:
IN
1 SELECTcustomer_id,rental_id,return_date
2 FROMrental
3 WHEREcustomer_idIN(1,2)
11
4 ORDERBYreturn_dateDESC
NOT IN Operator
Youcancombinethe operatorwiththe
IN operatortoselectrowswhosevaluesdo
NOT
notmatchthevaluesinthelist.Thefollowingstatementselectsrentalsofcustomers
whosecustomeridisnot1or2.
1 SELECTcustomer_id,rental_id,return_date
2 FROMrental
3 WHEREcustomer_idNOTIN(1,2)
12
ORDER BY
Whenyouquerydatafromatable,PostgreSQLreturnstherowsintheorderthatthey
wereinsertedintothetable.Inordertosorttheresultset,youusethe clause
ORDERBY
intheSELECTstatement.
The clauseallowsyoutosorttherowsreturnedfromthe
ORDERBY statementin
SELECT
ascendingordescendingorderbasedoncriteriaspecifiedbydifferentcriteria.
Thefollowingillustratesthesyntaxofthe clause:
ORDERBY
1 SELECTcolumn_1,column_2
2 FROMtbl_name
3 ORDERBYcolumn_1ASC,column_2DESC
Letsexaminethesyntaxofthe clauseinmoredetail:
ORDERBY
Specifythecolumnthatyouwanttosortinthe clause.Ifyousort
ORDERBY
theresultsetbymultiplecolumns,useacommatoseparatebetweentwo
columns.
Use tosorttheresultsetinascendingorderand
ASC tosorttheresult
DESC
setindescendingorder.Ifyouleaveitblank,the clausewilluse
ORDERBY
bydefault.
ASC
13
LetstakesomeexamplesofusingthePostgreSQL clause.
ORDERBY
1 SELECTfirst_name,last_name
2 FROMcustomer
3 ORDERBYfirst_nameASC
14
BETWEEN
Weusethe operatortomatchavalueagainstarangeofvalues.Thefollowing
BETWEEN
illustratesthesyntaxofthe operator:
BETWEEN
1 valueBETWEENlowANDhigh
Ifthevalueisgreaterthanorequaltothelowvalueandlessthanorequaltothehigh
value,theexpressionreturnstrue,orviceversa.
Wecanrewritethe operatorbyusingthegreaterthanorequal(
BETWEEN )orless
>=
thanorequal( )operatorsasthefollowingstatement:
<=
1 value>=lowandvalue<=high
Ifwewanttocheckifavalueisoutofarange,weusethe operatoras
NOTBETWEEN
follows:
1 valueNOTBETWEENlowANDhigh
Thefollowingexpressionisequivalenttotheexpressionthatusesthe
NOTBETWEEN
operator:
1 value<lowORvalue>high
WeoftenusetheBETWEENoperatorintheWHEREclauseofaSELECT,INSERT,
UPDATEorDELETEstatement.
15
PostgreSQL BETWEEN operator examples
Letstakealookatthe tableinthesampledatabase.
payment
Thefollowingqueryselectsanypaymentwhoseamountisbetween8and9:
1 SELECTcustomer_id,payment_id,amount
2 FROMpayment
3 WHEREamountBETWEEN8AND9
16
LIKE
Supposethestoremanagerasksyoufindacustomerthathedoesnotremember
thenameexactly.Hejustremembersthatcustomersfirstnamebeginswith
somethinglike .Howdoyoufindtheexactcustomerthatthestoremanageris
Jen
asking?Youmayfindthecustomerinthe tablebylookingatthefirst
customer
namecolumntoseeifthereisanyvaluethatbeginswith .Itiskindoftedious
Jen
becausetheremanyrowsinthe table.
customer
Fortunately,youcanusethePostgreSQL operatortoasthefollowingquery:
LIKE
1 SELECTfirst_name,last_name
2 FROMcustomer
3 WHEREfirst_nameLIKE'Jen%'
Noticethatthe clausecontainsaspecialexpression:the
WHERE ,the
first_name LIKE
operatorandastringthatcontainsapercent )character,whichisreferredasa
(%
pattern
.
Thequeryreturnsrowswhosevaluesinthefirstnamecolumnbeginwith andmay
Jen
befollowedbyanysequenceofcharacters.Thistechniqueiscalledpatternmatching.
17
Youconstructapatternbycombiningastringwithwildcardcharactersandusethe
LIKE
or operatortofindthematches.PostgreSQLprovidestwowildcardcharacters:
NOTLIKE
Percent()formatchinganysequenceofcharacters.
%
Underscore()formatchinganysinglecharacter.
_
18
GROUP BY
The clausedividestherowsreturnedfromtheSELECTstatementinto
GROUPBY
groups.Foreachgroup,youcanapplyanaggregatefunctione.g.,tocalculatethesum
ofitemsorcountthenumberofitemsinthegroups.
Thefollowingstatementillustratesthesyntaxofthe clause:
GROUPBY
1 SELECTcolumn_1,aggregate_function(column_2)
2 FROMtbl_name
3 GROUPBYcolumn_1
The clausemustappearrightafterthe
GROUPBY or
FROM clause.Followedby
WHERE
the clauseisonecolumnoralistofcommaseparatedcolumns.Youcanalso
GROUPBY
putanexpressioninthe clause.
GROUPBY
The clauseisusefulwhenitisusedinconjunctionwithanaggregate
GROUPBY
function.Forexample,togethowmuchacustomerhasbeenpaid,youusethe
GROUP
clausetodividethe
BY tableintogroupsforeachgroup,youcalculatethe
payments
totalamountsofmoneybyusingthe functionasthefollowingquery:
SUM
19
1 SELECTcustomer_id,
2 SUM(amount)
3 FROMpayment
4 GROUPBYcustomer_id
20
HAVING
Weoftenusethe clauseinconjunctionwiththeGROUPBYclausetofilter
HAVING
grouprowsthatdonotsatisfyaspecifiedcondition.
Thefollowingstatementillustratesthetypicalsyntaxofthe clause:
HAVING
1 SELECTcolumn_1,aggregate_function(column_2)
2 FROMtbl_name
3 GROUPBYcolumn_1
4 HAVINGcondition
The clausesetstheconditionforgrouprowscreatedbythe
HAVING clause
GROUPBY
afterthe clauseapplieswhiletheWHEREclausesetstheconditionfor
GROUPBY
individualrowsbefore clauseapplies.Thisisthemaindifferencebetweenthe
GROUPBY
and
HAVING clauses.
WHERE
InPostgreSQL,youcanusethe clausewithoutthe
HAVING clause.Inthis
GROUPBY
case,the clausewillturnthequeryintoasinglegroup.Inaddition,the
HAVING
listand
SELECT clausecanonlyrefertocolumnsfromwithinaggregate
HAVING
functions.Thiskindofqueryreturnsasinglerowiftheconditioninthe clauseis
HAVING
trueorzerorowifitisfalse.
21
Example
Youcanapplythe clausetoselectstheonlycustomerwhohasbeenspending
HAVING
morethan asthefollowingquery:
200
1 SELECTcustomer_id,
2 SUM(amount)
3
FROMpayment
4
GROUPBYcustomer_id
5
HAVINGSUM(amount)>200
22
JOINS
A full review of SQL JOINS is available online here:
https://medium.com/@josemarcialportilla/review-of-sql-joins-ac5463dc71c9#.ayjcuatvj
23
SUBQUERY
Asubqueryisaquerynestedinsideanotherquerysuchas and
SELECT,INSERT,DELETE
.Inthistutorial,wearefocusingonthe
UPDATE statementonly.
SELECT
Toconstructasubquery,weputthesecondqueryinbracketsanduseitintheWHERE
clauseasanexpression:
1 SELECTfilm_id,title,rental_rate
2 FROMfilm
3 WHERErental_rate>(
4 SELECTAVG(rental_rate)
5 FROMfilm)
Thequeryinsidethebracketsiscalledasubqueryoraninnerquery.Thequerythat
containsthesubqueryisknownasanouterquery.
PostgreSQLexecutesthequerythatcontainsasubqueryinthefollowingsequence:
First,executesthesubquery.
Second,getstheresultandpassesittotheouterquery.
Third,executestheouterquery.
24
CREATE TABLE and Constraints
TocreateanewtableinPostgreSQL,youusethe statement.The
CREATETABLE
followingillustratesthesyntaxofthe statement:
CREATETABLE
1 CREATETABLEtable_name(
2 column_nameTYPEcolumn_constraint,
3 table_constrainttable_constraint
4 )INHERITSexisting_table_name
Letsexaminethesyntaxofthe statementinmoredetail.
CREATETABLE
First,youspecifythenameofthenewtableafterthe clause.
CREATETABLE
The keywordisforcreatingatemporarytable,whichwewill
TEMPORARY
discussinthetemporarytabletutorial.
Next,youlistthecolumnname,itsdatatype,andcolumnconstraint.You
canhavemultiplecolumnsinatable,eachcolumnisseparatedbya
comma(,).Thecolumnconstraintdefinestherulesforthecolumne.g.,
NOTNULL.
Then,afterthecolumnlist,youdefineatablelevelconstraintthatdefines
rulesforthedatainthetable.
Afterthat,youspecifyanexistingtablefromwhichthenewtableinherits.It
meansthenewtablecontainsallcolumnsoftheexistingtableandthe
25
columnsdefinedinthe statement.ThisisaPostgreSQLs
CREATETABLE
extensiontoSQL.
PostgreSQLcolumnconstraints
ThefollowingarethecommonlyusedcolumnconstraintsinPostgreSQL:
NOTNULLthevalueofthecolumncannotbe .
NULL
UNIQUEthevalueofthecolumnmustbeuniqueacrossthewholetable.
However,thecolumncanhavemany valuesbecausePostgreSQL
NULL
treatseach valuetobeunique.NoticethatSQLstandardonlyallows
NULL
one valueinthecolumnthathasthe
NULL constraint.
UNIQUE
PRIMARYKEYthisconstraintisthecombinationof and
NOTNULL
constraints.Youcandefineonecolumnas
UNIQUE byusing
PRIMARYKEY
columnlevelconstraint.Incasetheprimarykeycontainsmultiplecolumns,
youmustusethetablelevelconstraint.
CHECKenablestocheckaconditionwhenyouinsertorupdatedata.For
example,thevaluesinthe columnofthe
price tablemustbe
product
positivevalues.
REFERENCESconstrainsthevalueofthecolumnthatexistsinacolumn
inanothertable.Youuse todefinetheforeignkeyconstraint.
REFERENCES
26
PostgreSQL table constraints
Thetableconstraintsaresimilartocolumnconstraintsexceptthattheyareappliedto
theentiretableratherthantoanindividualcolumn.
Thefollowingarethetableconstraints:
UNIQUE(column_list)
toforcethevaluestoredinthecolumnslistedinside
theparenthesestobeunique.
PRIMARYKEY(column_list)
todefinetheprimarykeythatconsistsof
multiplecolumns.
CHECK(condition)
tocheckaconditionwheninsertingorupdatingdata.
REFERENCES
toconstrainthevaluestoredinthecolumnthatmustexistin
acolumninanothertable.
PostgreSQLCREATETABLEexample
Wewillcreateanewtablenamed thathasthefollowingcolumnswiththe
account
correspondingconstraints:
user_idprimarykey
usernameuniqueandnotnull
passwordnotnull
emailuniqueandnotnull
created_onnotnull
27
last_loginnull
Thefollowingstatementcreatesthe table:
account
1 CREATETABLEaccount(
2 user_idserialPRIMARYKEY,
3 usernameVARCHAR(50)UNIQUENOTNULL,
4 passwordVARCHAR(50)NOTNULL,
5 emailVARCHAR(355)UNIQUENOTNULL,
6 created_onTIMESTAMPNOTNULL,
7 last_loginTIMESTAMP)
28