0% found this document useful (0 votes)
106 views

SQL Udemy

This document provides information on SQL commands and functions for querying and manipulating data in databases. It covers basic SQL commands like SELECT, WHERE, ORDER BY, LIMIT, aggregate functions, JOINs and more advanced concepts like data types, date/time functions and formatting. Examples are given for each concept to demonstrate proper syntax and usage.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
106 views

SQL Udemy

This document provides information on SQL commands and functions for querying and manipulating data in databases. It covers basic SQL commands like SELECT, WHERE, ORDER BY, LIMIT, aggregate functions, JOINs and more advanced concepts like data types, date/time functions and formatting. Examples are given for each concept to demonstrate proper syntax and usage.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 34

Databases:

- Data integrity
- Can handle massive amounts of data
- Quickly combine different datasets
- Automate steps for re-use
- Can support data for websites and applications

SQL is the Programming language used to communicate with our Database.

 SELECT column_name FROM table_name


 Select c1 from table
 Select c1,c2 from table
To write All Distinct values:

 Selet Distinct c1 form column


 select distinct(rating) from film;

Use count:

 select count(name) from table name;


 select count(distinct(name)) from table;
 =,>+,<=,<,> amd !=

Where

 Select name from table_name where name=client nmarked


 Select name from table_name where name=client nmaem and Thanya =100;

Order by

 Select company,name from table order by company,sales


 SELECT * FROM customer ORDER BY first_name DESC;
 select store_id,first_name,last_name from customer order by store_id Desc,first_name asc;
 ASC and DESC

LIMIT

 to limit the rows to return


 select * from payment where staff_id=1 order by payment_date;
 select * from payment where staff_id=1 order by payment_date limit 5;
 select * from payment where staff_id=1 order by payment_date desc limit 5;

Between:

 The BETWEEN operator can be used to match a value against a range of values:
 Value between low and high
 select * from country where country_id between 5 and 15;

IN

 We can use the IN operator to create a condition that checks to see if a value in included in a
list of multiple options.
 Select colour From table WHERE colour IN(‘red’,’blue’)
 select * from payment where customer_id in(341,342 );
 select * from payment where amount in(0.99,1.98,1.98);

LIKE and ILIKE

 Like operator allows us to perform pattern matching against string data with the use of
wildcard characters:
 - Percent%
Matches any sequence of characters

 Underscore_
 - Matches any single character
 All names begin with an ‘A’ : where name LIKE ‘A%’
 All names that end with an ‘a’: Where name LIKE ‘%a”
 _____ that LIKE is case-sensitive, we can use ILIKE which is case-insensitive
 Using the underscore allows us to replace just a single character
o Get all mission impossible films
o Where title LIKE “Mission Impossible_”
 Where name LIKE ‘_her%’
o Cheryl
o Theresa
o Sherri
 select * from customer where first_name like 'J%'
 select * from customer where first_name like '_a%'
 select * from customer where first_name like '_a%'and last_name like 'S%';
 select * from customer where first_name like '%r%';
 select * from film where title like '%Truman%';

GROUP BY and Aggregate functions

 select min(replacement_cost) from film;


 select max(replacement_cost) from film;
 select avg(replacement_cost) from film;
 select sum(replacement_cost) from film;
 select (avg(replacement_cost)) from film;
 select round(avg(replacement_cost),2) from film;
 select round(avg(replacement_cost)) from film;
 select min(replacement_cost),max(replacement_cost),avg(replacement_cost) from film;

Group By:

select staff_id,sum(amount) from payment group by(staff_id);

select customer_id,staff_id,sum(amount) from payment group by(staff_id,customer_id) order by


sum(amount);

select customer_id,sum(amount) from payment group by customer_id order by sum(amount) desc


limit 5;
Having:

select customer_id,sum(amount) from payment group by customer_id having sum(amount)>200;

select customer_id,count(payment_id) from payment group by customer_id having


count(payment_id)>=40;

select customer_id,staff_id,sum(amount) from payment group by(staff_id,customer_id) order by


sum(amount);

select customer_id,sum(amount) from payment group by customer_id having sum(amount)>200;

select customer_id,count(payment_id) from payment group by customer_id having


count(payment_id)>=40;

select customer_id,sum(amount) from payment where staff_id=2 group by customer_id having


sum(amount)>110;

select count(*) from film where title like('J%');


Joins:
Joins will allow us to combine information from multiple tables

To rename column name use AS clause {as}

AS CLAUSE:

Create Alias to column name

 Select SUM(column) AS new_name From table;


 select count(amount) as sunny from payment;

INNER JOINT

 select * from TableA INNER Join TableB on TableA.col_match=TableB.col_match

id name id name

-- ---- -- ----

1 Pirate 1 Rutabaga

2 Monkey 2 Pirate

3 Ninja 3 Darth Vader

4 Spaghetti 4 Ninja

conceptual match to those nifty Venn diagrams.


SELECT * FROM TableA

INNER JOIN TableB

ON TableA.name = TableB.name

id name id name

1 Pirate 2 Pirate

3 Ninja 4 Ninja

Inner join produces only the set of records that


match in both Table A and Table B.

select * from payment inner join customer on payment.customer_id=customer.customer_id;

select payment_id,customer.customer_id from payment inner join customer on


payment.customer_id=customer.customer_id;
Full Outer Joint:

select * from payment full outer join customer on payment.customer_id=customer.customer_id


where payment.staff_id=1;

select * from payment full outer join customer on payment.customer_id=customer.customer_id;

left joint

left outer joint

right joint

right outer joint

Union:

Select * from T1 Union select * from T2;

id name id name

-- ---- -- ----

1 Pirate 1 Rutabaga

2 Monkey 2 Pirate

3 Ninja 3 Darth Vader

4 Spaghetti 4 Ninja

Let's join these tables by the name field in a few different ways and see if we
can get a conceptual match to those nifty Venn diagrams.
SELECT * FROM TableA

INNER JOIN TableB

ON TableA.name = TableB.name

id name id name

1 Pirate 2 Pirate

3 Ninja 4 Ninja

Inner join produces only the set of records that


match in both Table A and Table B.

SELECT * FROM TableA

FULL OUTER JOIN TableB

ON TableA.name = TableB.name

id name id name
SELECT * FROM TableA

INNER JOIN TableB

ON TableA.name = TableB.name

id name id name

1 Pirate 2 Pirate

3 Ninja 4 Ninja

Inner join produces only the set of records that


match in both Table A and Table B.

SELECT * FROM TableA

LEFT OUTER JOIN TableB

ON TableA.name = TableB.name

id name id name

-- ---- -- ----

1 Pirate 2 Pirate
SELECT * FROM TableA

INNER JOIN TableB

ON TableA.name = TableB.name

id name id name

1 Pirate 2 Pirate

3 Ninja 4 Ninja

Inner join produces only the set of records that


match in both Table A and Table B.

SELECT * FROM TableA

LEFT OUTER JOIN TableB

ON TableA.name = TableB.name

WHERE TableB.id IS null

id name id name
SELECT * FROM TableA

INNER JOIN TableB

ON TableA.name = TableB.name

id name id name

1 Pirate 2 Pirate

3 Ninja 4 Ninja

Inner join produces only the set of records that


match in both Table A and Table B.

SELECT * FROM TableA

FULL OUTER JOIN TableB

ON TableA.name = TableB.name

WHERE TableA.id IS null

OR TableB.id IS null

id name id name
There's also a cartesian product or cross join, which as far as I can tell, can't
be expressed as a Venn diagram:

SELECT * FROM TableA

CROSS JOIN TableB

There's also a cartesian product or cross join, which as far as I can tell, can't be expressed as
a Venn diagram:

SELECT * FROM TableA

CROSS JOIN TableB

This joins "everything to everything", resulting in 4 x 4 = 16 rows, far more than we had in
the original sets. If you do the math, you can see why this is a very dangerous join to run
against large tables.

NEXT
Advanced Concepts of SQL:

Some Datatypes:
Time--- Contains only time
Date----Contains only Date
Timestamp--- contains date and time
Timestamptz--- contains data,time and timezon

Specific Data types:


- TimeZone
- Now
- TimeOfDay
- Current_Time
- Current_date

- show timezone
- select now()
- select timeofday()
- select current_time
- select current_date

Extract------------------------------EXTRACT():

 allows you to “exrtract” or obtain a sub-component of a data value:


o YEAR
o MONTH
o DAY
o WEEK
o QUARTER
o
AGE()

 Calculates and returns the current age given a timestamp


 Usage:
o AGE(date_col)
 Returns
o 13 years 1 mon 5days 01:34:13.003423

TO_CHAR()

 TO_CHAR(date_col, ‘mm-dd-yyyy’)

select extract(year from payment_date) as year from payment;


select extract(month from payment_date) as Month from payment;
select extract(day from payment_date) as Day from payment;

Age:
select age(payment_date) from payment;

DATA TYPE formatting functions

To_char(timestamp,__________)

select to_char(payment_date,'MONTH-YYYY') from payment;

9.8. Data Type Formatting Functions


The PostgreSQL formatting functions provide a powerful set of tools for converting various
data types (date/time, integer, floating point, numeric) to formatted strings and for converting
from formatted strings to specific data types. Table 9.24 lists them. These functions all follow
a common calling convention: the first argument is the value to be formatted and the second
argument is a template that defines the output or input format.

Table 9.24. Formatting Functions

Return
Function Type Description Example

to_char(timestamp, text) text convert time to_char(current_timestamp,


'HH12:MI:SS')
stamp to
string
to_char(interval, text) text convert to_char(interval
'15h 2m 12s', 'HH24:MI:SS')
interval to
string
to_char(int, text) text convert to_char(125, '999')
integer to
string
to_char(double text convert to_char(125.8::real,
precision, text)
real/double '999D9')
precision to
string
to_char(numeric, text) text convert to_char(-125.8, '999D99S')
numeric to
string
to_date(text, text) date convert to_date('05 Dec 2000',
'DD Mon YYYY')
string to
date
to_number(text, text) numeric convert to_number('12,454.8-',
'99G999D9S')
string to
numeric
to_timestamp(text, text) timestamp convert to_timestamp('05 Dec 2000',
with time 'DD Mon YYYY')
string to
zone
time stamp

Note
There is also a single-argument to_timestamp function; see Table 9.31.

Tip
to_timestamp and to_date exist to handle input formats that cannot be converted by
simple casting. For most standard date/time formats, simply casting the source string to the
required data type works, and is much easier. Similarly, to_number is unnecessary for
standard numeric representations.
In a to_char output template string, there are certain patterns that are recognized and
replaced with appropriately-formatted data based on the given value. Any text that is not a
template pattern is simply copied verbatim. Similarly, in an input template string (for the other
functions), template patterns identify the values to be supplied by the input data string. If
there are characters in the template string that are not template patterns, the corresponding
characters in the input data string are simply skipped over (whether or not they are equal to
the template string characters).

Table 9.25 shows the template patterns available for formatting date and time values.

Table 9.25. Template Patterns for Date/Time Formatting

Pattern Description

HH hour of day (01-12)


HH12 hour of day (01-12)
HH24 hour of day (00-23)
MI minute (00-59)
SS second (00-59)
MS millisecond (000-999)
US microsecond (000000-999999)
SSSS seconds past midnight (0-86399)
AM, am, PM or pm meridiem indicator (without periods)
A.M., a.m., P.M. or p.m. meridiem indicator (with periods)
Y,YYY year (4 or more digits) with comma
YYYY year (4 or more digits)
YYY last 3 digits of year
YY last 2 digits of year
Y last digit of year
IYYY ISO 8601 week-numbering year (4 or more digits)
IYY last 3 digits of ISO 8601 week-numbering year
IY last 2 digits of ISO 8601 week-numbering year
I last digit of ISO 8601 week-numbering year
BC, bc, AD or ad era indicator (without periods)
Pattern Description

B.C., b.c., A.D. or a.d. era indicator (with periods)


MONTH full upper case month name (blank-padded to 9 chars)
Month full capitalized month name (blank-padded to 9 chars)
month full lower case month name (blank-padded to 9 chars)
MON abbreviated upper case month name (3 chars in English,
localized lengths vary)
Mon abbreviated capitalized month name (3 chars in English,
localized lengths vary)
mon abbreviated lower case month name (3 chars in English,
localized lengths vary)
MM month number (01-12)
DAY full upper case day name (blank-padded to 9 chars)
Day full capitalized day name (blank-padded to 9 chars)
day full lower case day name (blank-padded to 9 chars)
DY abbreviated upper case day name (3 chars in English, localized
lengths vary)
Dy abbreviated capitalized day name (3 chars in English, localized
lengths vary)
dy abbreviated lower case day name (3 chars in English, localized
lengths vary)
DDD day of year (001-366)
IDDD day of ISO 8601 week-numbering year (001-371; day 1 of the
year is Monday of the first ISO week)
DD day of month (01-31)
D day of the week, Sunday (1) to Saturday (7)
ID ISO 8601 day of the week, Monday (1) to Sunday (7)
W week of month (1-5) (the first week starts on the first day of the
month)
WW week number of year (1-53) (the first week starts on the first day
of the year)
IW week number of ISO 8601 week-numbering year (01-53; the first
Thursday of the year is in week 1)
CC century (2 digits) (the twenty-first century starts on 2001-01-01)
J Julian Date (integer days since November 24, 4714 BC at local
Pattern Description

midnight; see Section B.7)
Q quarter
RM month in upper case Roman numerals (I-XII; I=January)
rm month in lower case Roman numerals (i-xii; i=January)
TZ upper case time-zone abbreviation (only supported in to_char)
tz lower case time-zone abbreviation (only supported in to_char)
TZH time-zone hours
TZM time-zone minutes
OF time-zone offset from UTC (only supported in to_char)
Modifiers can be applied to any template pattern to alter its behavior. For
example, FMMonth is the Month pattern with the FM modifier. Table 9.26 shows the modifier
patterns for date/time formatting.

Table 9.26. Template Pattern Modifiers for Date/Time Formatting

Modifier Description Example

FM prefix fill mode (suppress leading zeroes and padding blanks) FMMonth

TH suffix upper case ordinal number suffix DDTH, e.g., 12TH


th suffix lower case ordinal number suffix DDth, e.g., 12th
FX prefix fixed format global option (see usage notes) FX Month DD Day

TM prefix translation mode (print localized day and month names based TMMonth
on lc_time)
SP suffix spell mode (not implemented) DDSP

Usage notes for date/time formatting:

 FM suppresses leading zeroes and trailing blanks that would otherwise be added to
make the output of a pattern be fixed-width. In PostgreSQL, FM modifies only the
next specification, while in Oracle FM affects all subsequent specifications, and
repeated FM modifiers toggle fill mode on and off.
 TM does not include trailing blanks. to_timestamp and to_date ignore
the TM modifier.
 to_timestamp and to_date skip multiple blank spaces at the beginning of the
input string and around date and time values unless the FX option is used. For
example, to_timestamp(' 2000    JUN', 'YYYY
MON') and to_timestamp('2000 - JUN', 'YYYY-MON') work,
but to_timestamp('2000    JUN', 'FXYYYY MON') returns an error
because to_timestamp expects only a single space. FX must be specified as the
first item in the template.
 A separator (a space or non-letter/non-digit character) in the template string
of to_timestamp and to_date matches any single separator in the input string or
is skipped, unless the FX option is used. For
example, to_timestamp('2000JUN',
'YYYY///MON') and to_timestamp('2000/JUN', 'YYYY MON') work,
but to_timestamp('2000//JUN', 'YYYY/MON') returns an error because the
number of separators in the input string exceeds the number of separators in the
template.

If FX is specified, a separator in the template string matches exactly one character in
the input string. But note that the input string character is not required to be the same
as the separator from the template string. For
example, to_timestamp('2000/JUN', 'FXYYYY MON') works,
but to_timestamp('2000/JUN', 'FXYYYY  MON') returns an error because
the second space in the template string consumes the letter J from the input string.

 A TZH template pattern can match a signed number. Without the FX option, minus


signs may be ambiguous, and could be interpreted as a separator. This ambiguity is
resolved as follows: If the number of separators before TZH in the template string is
less than the number of separators before the minus sign in the input string, the
minus sign is interpreted as part of TZH. Otherwise, the minus sign is considered to
be a separator between values. For example, to_timestamp('2000 -10',
'YYYY TZH') matches -10 to TZH, but to_timestamp('2000 -10',
'YYYY  TZH') matches 10 to TZH.
 Ordinary text is allowed in to_char templates and will be output literally. You can
put a substring in double quotes to force it to be interpreted as literal text even if it
contains template patterns. For example, in '"Hello Year "YYYY', the YYYY will
be replaced by the year data, but the single Y in Year will not be.
In to_date, to_number, and to_timestamp, literal text and double-quoted strings
result in skipping the number of characters contained in the string; for
example "XX" skips two input characters (whether or not they are XX).

Tip
Prior to PostgreSQL 12, it was possible to skip arbitrary text in the input string using
non-letter or non-digit characters. For example, to_timestamp('2000y6m1d',
'yyyy-MM-DD') used to work. Now you can only use letter characters for this
purpose. For example, to_timestamp('2000y6m1d',
'yyyytMMtDDt') and to_timestamp('2000y6m1d',
'yyyy"y"MM"m"DD"d"') skip y, m, and d.
 If you want to have a double quote in the output you must precede it with a
backslash, for example '\"YYYY Month\"'. Backslashes are not otherwise special
outside of double-quoted strings. Within a double-quoted string, a backslash causes
the next character to be taken literally, whatever it is (but this has no special effect
unless the next character is a double quote or another backslash).
 In to_timestamp and to_date, if the year format specification is less than four
digits, e.g., YYY, and the supplied year is less than four digits, the year will be
adjusted to be nearest to the year 2020, e.g., 95 becomes 1995.
 In to_timestamp and to_date, negative years are treated as signifying BC. If you
write both a negative year and an explicit BC field, you get AD again. An input of year
zero is treated as 1 BC.
 In to_timestamp and to_date, the YYYY conversion has a restriction when
processing years with more than 4 digits. You must use some non-digit character or
template after YYYY, otherwise the year is always interpreted as 4 digits. For
example (with the year 20000): to_date('200001131', 'YYYYMMDD') will be
interpreted as a 4-digit year; instead use a non-digit separator after the year,
like to_date('20000-1131', 'YYYY-MMDD') or to_date('20000Nov31',
'YYYYMonDD').
 In to_timestamp and to_date, the CC (century) field is accepted but ignored if
there is a YYY, YYYY or Y,YYY field. If CC is used with YY or Y then the result is
computed as that year in the specified century. If the century is specified but the year
is not, the first year of the century is assumed.
 In to_timestamp and to_date, weekday names or numbers (DAY, D, and related
field types) are accepted but are ignored for purposes of computing the result. The
same is true for quarter (Q) fields.
 In to_timestamp and to_date, an ISO 8601 week-numbering date (as distinct
from a Gregorian date) can be specified in one of two ways:
o Year, week number, and weekday: for example to_date('2006-42-4',
'IYYY-IW-ID') returns the date 2006-10-19. If you omit the weekday it is
assumed to be 1 (Monday).
o Year and day of year: for example to_date('2006-291', 'IYYY-
IDDD') also returns 2006-10-19.

Attempting to enter a date using a mixture of ISO 8601 week-numbering fields and
Gregorian date fields is nonsensical, and will cause an error. In the context of an ISO
8601 week-numbering year, the concept of a “month” or “day of month” has no
meaning. In the context of a Gregorian year, the ISO week has no meaning.

Caution
While to_date will reject a mixture of Gregorian and ISO week-numbering date
fields, to_char will not, since output format specifications like YYYY-MM-DD
(IYYY-IDDD) can be useful. But avoid writing something like IYYY-MM-DD; that
would yield surprising results near the start of the year. (See Section 9.9.1 for more
information.)
 In to_timestamp, millisecond (MS) or microsecond (US) fields are used as the
seconds digits after the decimal point. For example to_timestamp('12.3',
'SS.MS') is not 3 milliseconds, but 300, because the conversion treats it as 12 +
0.3 seconds. So, for the format SS.MS, the input values 12.3, 12.30,
and 12.300 specify the same number of milliseconds. To get three milliseconds, one
must write 12.003, which the conversion treats as 12 + 0.003 = 12.003 seconds.

Here is a more complex example: to_timestamp('15:12:02.020.001230',


'HH24:MI:SS.MS.US') is 15 hours, 12 minutes, and 2 seconds + 20 milliseconds
+ 1230 microseconds = 2.021230 seconds.

 to_char(..., 'ID')'s day of the week numbering matches


the extract(isodow from ...) function, but to_char(..., 'D')'s does not
match extract(dow from ...)'s day numbering.
 to_char(interval) formats HH and HH12 as shown on a 12-hour clock, for
example zero hours and 36 hours both output as 12, while HH24 outputs the full hour
value, which can exceed 23 in an interval value.

Table 9.27 shows the template patterns available for formatting numeric values.

Table 9.27. Template Patterns for Numeric Formatting

Pattern Description

9 digit position (can be dropped if insignificant)


0 digit position (will not be dropped, even if insignificant)
. (period) decimal point
, (comma) group (thousands) separator
PR negative value in angle brackets
S sign anchored to number (uses locale)
L currency symbol (uses locale)
D decimal point (uses locale)
G group separator (uses locale)
MI minus sign in specified position (if number < 0)
PL plus sign in specified position (if number > 0)
SG plus/minus sign in specified position
RN Roman numeral (input between 1 and 3999)
TH or th ordinal number suffix
V shift specified number of digits (see notes)
EEEE exponent for scientific notation
Usage notes for numeric formatting:

 0 specifies a digit position that will always be printed, even if it contains a


leading/trailing zero. 9 also specifies a digit position, but if it is a leading zero then it
will be replaced by a space, while if it is a trailing zero and fill mode is specified then
it will be deleted. (For to_number(), these two pattern characters are equivalent.)
 The pattern characters S, L, D, and G represent the sign, currency symbol, decimal
point, and thousands separator characters defined by the current locale
(see lc_monetary and lc_numeric). The pattern characters period and comma
represent those exact characters, with the meanings of decimal point and thousands
separator, regardless of locale.
 If no explicit provision is made for a sign in to_char()'s pattern, one column will be
reserved for the sign, and it will be anchored to (appear just left of) the number.
If S appears just left of some 9's, it will likewise be anchored to the number.
 A sign formatted using SG, PL, or MI is not anchored to the number; for
example, to_char(-12, 'MI9999') produces '-  12' but to_char(-12,
'S9999') produces '  -12'. (The Oracle implementation does not allow the use
of MI before 9, but rather requires that 9 precede MI.)
 TH does not convert values less than zero and does not convert fractional numbers.
 PL, SG, and TH are PostgreSQL extensions.
 In to_number, if non-data template patterns such as L or TH are used, the
corresponding number of input characters are skipped, whether or not they match the
template pattern, unless they are data characters (that is, digits, sign, decimal point,
or comma). For example, TH would skip two non-data characters.
 V with to_char multiplies the input values by 10^n, where n is the number of digits
following V. V with to_number divides in a similar
manner. to_char and to_number do not support the use of V combined with a
decimal point (e.g., 99.9V99 is not allowed).
 EEEE (scientific notation) cannot be used in combination with any of the other
formatting patterns or modifiers other than digit and decimal point patterns, and must
be at the end of the format string (e.g., 9.99EEEE is a valid pattern).

Certain modifiers can be applied to any template pattern to alter its behavior. For
example, FM99.99 is the 99.99 pattern with the FM modifier. Table 9.28 shows the modifier
patterns for numeric formatting.

Table 9.28. Template Pattern Modifiers for Numeric Formatting

Modifie
r Description Example

FM prefix fill mode (suppress trailing zeroes and padding blanks) FM99.99
TH suffix upper case ordinal number suffix 999TH

th suffix lower case ordinal number suffix 999th

Table 9.29 shows some examples of the use of the to_char function.

Table 9.29. to_char Examples

Expression Result

to_char(current_timestamp, 'Tuesday  , 06  05:39:18'
'Day, DD  HH12:MI:SS')
to_char(current_timestamp, 'Tuesday, 6  05:39:18'
'FMDay, FMDD  HH12:MI:SS')
to_char(-0.1, '99.99') '  -.10'
to_char(-0.1, 'FM9.99') '-.1'
to_char(-0.1, 'FM90.99') '-0.1'
to_char(0.1, '0.9') ' 0.1'
Expression Result

to_char(12, '9990999.9') '    0012.0'


to_char(12, 'FM9990999.9') '0012.'
to_char(485, '999') ' 485'
to_char(-485, '999') '-485'
to_char(485, '9 9 9') ' 4 8 5'
to_char(1485, '9,999') ' 1,485'
to_char(1485, '9G999') ' 1 485'
to_char(148.5, '999.999') ' 148.500'
to_char(148.5, 'FM999.999') '148.5'
to_char(148.5, 'FM999.990') '148.500'
to_char(148.5, '999D999') ' 148,500'
to_char(3148.5, '9G999D999') ' 3 148,500'
to_char(-485, '999S') '485-'
to_char(-485, '999MI') '485-'
to_char(485, '999MI') '485 '
to_char(485, 'FM999MI') '485'
to_char(485, 'PL999') '+485'
to_char(485, 'SG999') '+485'
to_char(-485, 'SG999') '-485'
to_char(-485, '9SG99') '4-85'
to_char(-485, '999PR') '<485>'
to_char(485, 'L999') 'DM 485'
to_char(485, 'RN') '        CDLXXXV'
to_char(485, 'FMRN') 'CDLXXXV'
to_char(5.2, 'FMRN') 'V'
to_char(482, '999th') ' 482nd'
to_char(485, '"Good number:"999') 'Good number: 485'
to_char(485.8, '"Pre:"999" Post:" .999') 'Pre: 485 Post: .800'
to_char(12, '99V999') ' 12000'
to_char(12.4, '99V999') ' 12400'
to_char(12.45, '99V9') ' 125'
to_char(0.0004859, '9.99EEEE') ' 4.86e-04'

Prev 
select distinct(to_char(payment_date,'MONTH')) from payment;

select * from payment;


select extract(year from payment_date) as year from payment;
select extract(month from payment_date) as Month from payment;
select extract(day from payment_date) as Day from payment;

select age(payment_date) from payment;

select to_char(payment_date,'MONTH-YYYY') from payment;

select distinct(to_char(payment_date,'MONTH')) from payment;


select count(*) from payment where to_char(payment_date,'DAY')='MONDAY';

Mathematical functions and operatos

select * from film;


select round((rental_rate/replacement_cost),3) from film;
String functions and Operators:

select first_name || ' ' || last_name from customer

SubQuery:
Select student,grade from test_scores where student IN (select student from
honor_roll_table)

select title from film where rental_rate >(select avg(rental_rate) from film);

SELF-join
Select tableA.col,tableB.col from table AS tableA JOIN table AS tableB on
tableA.some_col =table.other_col
BASIC COMMANDS:

Boolean= true or false


Chat= char, varchar and text
Numeric= integer and floating-point number
Temporal: date, time, timestamp, and interval:
UUID= universal Unique Identifier
Array + stores an array of strings, number
Json= Hstore key-value pair

PrimaryKey and Foreignkey:

PrimaryKey
A Primary key is a column or a group of columns used to identify a row uniquely in a table.
For example, in our dvdrental database we saw customers had a unique, non-null
customer_id column as their primary key.

Foreign Key:
A foreign key is a field or group of fields in a table that uniquely identifies a row in another
table.
A foreign key is defined in a table that references to primary key of the other table.
Constraints:
Constraints can be divided into two main categories:
- Column constraints--- constrains the data in a column to adhere to certain
conditions.
- Table Constraints---- applied to the entire table rather than to an individual column.
- NOT NULL---- no null values
- UNIQUE------ all values are different
- Primary key
- Foreign key
- Check---- ensures that all values in a column satisfy certain conditions
- EXCLUSION----- ensures that if any two rows are compared on the specified column
or expression using the specified operator, not all of these comparisons will return
TRUE

SERIAL:
- A sequence is a special kind of database object that generates a sequence of
integers.
- If a row is later removed, the column with the serial data type will not adjust,
marking the fact that a row was removed from the sequence, for ex:::: 1,2,3,5,6,7,

CREATE ____

create table account_job(user_id integer references account(user_id),job_id integer


references job(job_id),hire_date timestamp);

INSERT______
insert into job(job_name)values('police')
insert into job(job_name)values('police')
insert into job(job_name)values('begger')

insert into account_job(user_id,job_id,hire_date)values(2,1,current_timestamp)


select * from account_job;

update______

update account set user_id=1 where user_id=2;

DELET_______

update account set user_id=1 where user_id=2;

ALTER TABLE__________
Ater table tablename condition

Drop
Check--------------------
Check and give condition
Means (age int check (age>30))
Assessment Test 3
Welcome to your final assessment test! This will test your knowledge of the
previous section, focused on creating databases and table operations. This test will
actually consist of a more open-ended assignment below:

Complete the following task:


Create a new database called "School" this database should have two
tables: teachers and students.
The students table should have columns for student_id,
first_name,last_name, homeroom_number, phone,email, and graduation year.
The teachers table should have columns for teacher_id, first_name, last_name,
homeroom_number, department, email, and phone.

The constraints are mostly up to you, but your table constraints do have to consider
the following:

1.  We must have a phone number to contact students in case of an emergency.


2.  We must have ids as the primary key of the tables
3. Phone numbers and emails must be unique to the individual.

Once you've made the tables, insert a student named Mark Watney (student_id=1)
who has a phone number of 777-555-1234 and doesn't have an email. He graduates
in 2035 and has 5 as a homeroom number.

Solutions to Assessment Test 3


To create the database  simply right-click on the databases drop down
menu and select "New Database".

Then you can use the following SQL scripts to execute the tasks:
To create the students table:
1. CREATE TABLE students(
2. student_id serial PRIMARY KEY,
3. first_name VARCHAR(45) NOT NULL,
4. last_name VARCHAR(45) NOT NULL,
5. homeroom_number integer,
6. phone VARCHAR(20) UNIQUE NOT NULL,
7. email VARCHAR(115) UNIQUE,
8. grad_year integer);

To create the teachers table:


1. CREATE TABLE teachers(
2. teacher_id serial PRIMARY KEY,
3. first_name VARCHAR(45) NOT NULL,
4. last_name VARCHAR(45) NOT NULL, 
5. homeroom_number integer,
6. department VARCHAR(45),
7. email VARCHAR(20) UNIQUE,
8. phone VARCHAR(20) UNIQUE);
Then for inserting the student information:
1. INSERT INTO students(first_name,last_name, homeroom_number,phone,grad_year)VALUES
('Mark','Watney',5,'7755551234',2035);

Then for inserting the teacher information:


1. INSERT INTO teachers(first_name,last_name, homeroom_number,departmen
Conditional Expressions and Procedures Introduction

CASE-------

 There are two main ways to use CASE statement, either a general CASE or a CASE
expression.
 GENERAL CASE
select * from customer;

select customer_id,
CASE
when (customer_id<=100) then 'Premium'
when (customer_id between 100 and 200) then 'plus'
else 'Normal'
END
from customer;

select customer_id,
CASE
when (customer_id<=100) then 'Premium'
when (customer_id between 100 and 200) then 'plus'
else 'Normal'
END as membership
from customer;

select customer_id,
CASE customer_id
when 2 then 'winner'
when 5 then 'second place'
else 'normal'
END as results
from customer;

COALESCE::::::::

Example
Select coalesce(1,2)
=1
Select coalesce(null,2,3)
=2

Select item,(price-COALESCE(discount,0)) as final from table


# ve use this to escape from null values in the table
COALESCE function in case you encounter a table with null values that you want to perform
operations on
CAST
Cast opersator lets you convert from one data type into another.
Not every instance of a data type can be CAST to another data type, it must be reasonable
to convert the data
Syntax= select CAST(‘5’ AS integer)

Or
You can then use this in a SELECT query with a column name instead of a single instance
------ select cast(date as timestamp) from table

NULLIF
The NULLIF function takes in 2 inputs and returns NULL if both are equal, otherwise it
returns the first argument passed.
- NULLIF(arg1,arg2)
- Explw
- NULLIF(10,12)
- Returns 10

Creating views for references===

Import and export:


The import command does not create a table for you
It assumes a table is already created

You might also like