You are on page 1of 100

SQL

From:
http://www.w3schools.com/sql

SQL
It is a standard language for accessing and
manipulating databases
MySQL, SQL Server, Access, Oracle, Sybase,
DB2, and others

SQL stands for Structured Query Language


SQL is an ANSI (American National
Standards Institute) standard
There are many variations and different
systems have their own extensions
But the major commands are same

SQL
SQL include
Data Manipulation Language (DML)
Data Definition Language (DDL)

The query and update commands for DML

SELECT: extracts data from a database


UPDATE: updates data in a database
DELETE: deletes data from a database
INSERT INTO: insert new data into a database
DDL: permits database tables to be created or deleted, define indexes (keys),
impose constraints between tables. Some important statements:

CREATE DATABASE: creates a new database


ALTER DATABASE: modifies a database
CREATE TABLE: creates a new table
ALTER TABLE: modifies a table
DROP TABLE: deletes a table
CREATE INDEX: creates an index
DROP INDEX: deletes an index

Create Persons Table


Persons Table
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn
10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

Pettersen

Kari

Storgt 20

Stavanger

CREATE DATABASE test;


CREATE TABLE persons (
P_Id
INT,
LastName VARCHAR(25),
FirstName VARCHAR(25),
Address
VARCHAR(25),
City
VARCHAR(15),
PRIMARY KEY (P_Id)
);
INSERT INTO persons VALUES (1, 'Hansen', 'Ola', 'Timoteivn10',
'Sandnes');
INSERT INTO persons VALUES (2, 'Svendson', 'Tove',
'Borgvn23','Sandnes');

Aqua Data Studio


You can use either go or / to replace the ;
so that it can process multiple SQLs at the same
time.
More info:
http://www.aquafold.com/support_faq.html#co
select * from t1
/
mmands
select * from t1
select * from t2
select * from t3

select * from t2
/
select * from t3
/
select * from t1
go
select * from t2
go
select * from t3
go

SQL BASIC

SELECT
SELECT is used to select data from a database
The result is stored in a result table, called the
result-set
SQL is not case sensitive
SELECT syntax
SELECT column_name(s)
FROM table_name;
SELECT * FROM table_name;

SELECT
Persons Table
P_Id

LastName

FirstName

Address

City

Hansen

Ola

Timoteivn
10

Sandnes

Svendson

Tove

Borgvn 23

Sandnes

3
Pettersen
Kari
Storgt 20
SELECT LastName, FirstName FROM
Persons;

SELECT *FROM Persons;

Stavanger

SELECT DISTINCT
SELECT DISTINCT column_name(s)
FROM table_name;

SELECT DISTINCT city FROM persons;

WHERE clause
SELECT column_name(s)
FROM table_name
WHERE column_name operator value;
SELECT * FROM persons
WHERE city=Sandnes;

WHERE Clause
Text values should be quoted by single
quotes or double quotes
Numeric values do not need to be
enclosed in quotes
SELECT * FROM
persons
WHERE
city=Sandnes;
Or
SELECT * FROM
persons
WHERE
city=Sandnes;
Or
SELECT * FROM

WHERE Clause
Operator

Description

Equal

<>

Not equal

>

Greater than

<

Less than

>=

Greater than or equal

<=

Less than or equal

BETWEEN

Between an inclusive range

LIKE

Search for a pattern

IN

If you know the exact value you want to return for at


least one of the columns

AND or OR
AND, OR operators are used to filter records
based on more than one condition
AND=both the first and the second conditions is
true
OR=either the first or the second condition is true

AND or OR
SELECT * FROM persons
WHERE firstname=Tove AND
lastname=Svendson;

SELECT * FROM persons


WHERE firstname=Tove OR
firstname=Ola;

SELECT * FROM persons


WHERE lastname=Svendson AND (firstname=Tove OR
firstname=Ola);

ORDER BY

The ORDER BY keyword is used to sort the result-set by a


specified column
It sorts the records in ascending order by default
Use DESC for a descending order

SELECT column_name(s)
FROM table_name
ORDER BY column_name(s) ASC|DESC;

ORDER BY
INSERT INTO persons VALUES (4, Nilsen, Tom, Vingvn23',
'Stavanger');

SELECT * FROM Persons


ORDER BY lastname;

SELECT * FROM Persons


ORDER BY lastname DESC;

INSERT INTO
Use to insert new records in a table
INSERT INTO table_name
VALUES (value1, value2,
value3,);
INSERT INTO table_name (column1, column2, column3,
VALUES (value1, value2, value3,);
INSERT INTO persons VALUES (4, Nilsen, Tom, Vingvn23',
'Stavanger');
INSERT INTO persons (P_Id, lastname, firstname)
VALUES (5, Tjessem, Jakob);

UPDATE
Update records in a table
UPDATE table_name
SET column=value, column2=value2,
WHERE some_column=some_value;
UPDATE Persons
SET Address=Nissestien 67, city=Sandnes
WHERE lastname=Tjessem AND firstname=Jakob;

Warning: if you forget to add WHERE clause, all the address and
city will be set to Nissestien 67 and Sandnes.

DELETE statement
Used to delete records in a table
DELETE FROM table_name
WHERE some_column=some_value;
DELETE FROM persons
WHERE lastname=Tjessem AND firstname=Jakob;

DELETE FROM table_name;


Or
DELETE * FROM table_name;

CompanyName
Alfreds Futterkiste
Berglunds snabbkp
Centro comercial
Moctezuma
Ernst Handel
FISSA Fabrica Inter.
Salchichas S.A.
Galera del gastrnomo

Test

ContactName
Maria Anders
Christina
Berglund
Francisco
Chang
Roland
Mendel
Diego Roel

Address
Obere Str. 57
Berguvsvgen 8

City
Berlin
Lule

Sierras de Granada
9993
Kirchgasse 6

Mxico D.F.

C/ Moralzarzal, 86

Madrid

Graz

Eduardo
Rambla de Catalua, 23 Barcelona
Saavedra
Island Trading
Helen
Garden House Crowther Cowes
Bennett
Way
Kniglich Essen
Philip Cramer Maubelstr. 90
Brandenburg
Laughing Bacchus Wine
Yoshi
1900 Oak St.
Vancouver
Cellars
Tannamuri
Magazzini Alimentari
Giovanni
Via Ludovico il Moro 22 Bergamo
Riuniti
Rovelli
North/South
Simon
South House 300
London
Crowther
Queensbridge
Paris spcialits
Marie
265, boulevard
Paris
Bertrand
Charonne
Rattlesnake Create
Canyon this Customers
Paula Wilson
2817
Milton
Dr.following
Albuquerque
table
and
do the
Grocery

SQL queries

CREATE TABLE customers (


CompanyName VARCHAR(100),
ContactName
VARCHAR(100),
Address
VARCHAR(100),
City
VARCHAR(50)
);
INSERT INTO customers
INSERT INTO customers
INSERT INTO customers
'Mxico D.F.');
INSERT INTO customers
INSERT INTO customers
'Madrid');
INSERT INTO customers
'Barcelona');
INSERT INTO customers
INSERT INTO customers
INSERT INTO customers
'Vancouver');
INSERT INTO customers
'Bergamo');
INSERT INTO customers
INSERT INTO customers
INSERT INTO customers
'Albuquerque');
INSERT INTO customers
INSERT INTO customers
INSERT INTO customers
INSERT INTO customers

TEST

VALUES ('Alfreds Futterkiste', 'Maria Anders', 'Obere Str. 57', 'Berlin');


VALUES ('Berglunds snabbkp', 'Christina Berglund', 'Berguvsvgen 8','Lule');
VALUES ('Centro comercial Moctezuma', 'Francisco Chang', 'Sierras de Granada 9993',
VALUES ('Ernst Handel', 'Roland Mendel', 'Kirchgasse 6', 'Graz');
VALUES ('FISSA Fabrica Inter. Salchichas S.A.', 'Diego Roel', 'C/Moralzarzal, 86',
VALUES ('Galera del gastrnomo', 'Eduardo Saavedra', 'Rambla de Catalua, 23',
VALUES ('Island Trading', 'Helen Bennett', 'Garden House Crowther Way', 'Cowes');
VALUES ('Kniglich Essen', 'Philip Cramer', 'Maubelstr. 90', 'Brandenburg');
VALUES ('Laughing Bacchus Wine Cellars', 'Yoshi Tannamuri', '1900 Oak St.',
VALUES ('Magazzini Alimentari Riuniti', 'Giovanni Rovelli', 'Via Ludovico il Moro 22',
VALUES ('North/South', 'Simon Crowther', 'South House 300 Queensbridge', 'London');
VALUES ('Paris spcialits', 'Marie Bertrand', '265, boulevard Charonne', 'Paris');
VALUES ('Rattlesnake Canyon Grocery', 'Paula Wilson', '2817 Milton Dr.',
VALUES
VALUES
VALUES
VALUES

('Simons bistro', 'Jytte Petersen', 'Vinbltet 34', 'Kbenhavn');


('The Big Cheese', 'Liz Nixon', '89 Jefferson Way Suite 2', 'Portland');
('Vaffeljernet', 'Palle Ibsen', 'Smagslget 45', 'rhus');
('Wolski Zajazd', 'Zbyszek Piestrzeniewicz', 'ul. Filtrowa 68', 'Warszawa');

TEST
SELEC * FROM customers;
SELECT CompanyName, ContactName FROM
customers;
SELECT * FROM customers WHERE companyname
LIKE a%;
SELECT * FROM customers WHERE companyname
LIKE A%;
SELECT companyname, contactname
FROM customers
WHERE companyname > A;
SELECT companyname, contactname
FROM customers
WHERE companyname > G
AND contactname > G;

SQL ADVANCED

LIMIT clause
Used to specify the number of records to return
SELECT column_name(s)
FROM table_name
LIMIT number;
SELECT * FROM persons LIMIT 2;

Oracle, SQL Server: Top number|


percent (e.g., Top 2, or Top 50
PERCENT
Oracle: ROWNUM<=number
(e.g., ROWNUM<=5)

LIKE operator

Used in a WHERE clause to search for a specified pattern in a column

SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
SELECT * FROM persons WHERE city LIKE
S%;

SELECT * FROM persons WHERE city


LIKE %s;

%: define
wildcards
(missing letters)
both before and
after the pattern

SQL Wildcards

SQL Wildcards can substitute for one or more characters


when searching for data in a database
SQL wildcards must be used with the SQL LIKE operator
Wildcard

Description

A substitute for zero or more


characters

A substitute for exactly one


character

SQL Wildcards
SELECT * FROM persons WHERE city
LIKE Sa%;

SELECT * FROM persons WHERE city


LIKE %nes%;
SELECT * FROM persons WHERE firstname LIKE _la;

SELECT * FROM persons WHERE lastname LIKE


S_end_on;

IN operator
To specify multiple values in a
SELECT
column_name(s)
WHERE
clause
FROM table_name
WHERE column_name IN (value1, value2,)
SELECT * FROM Persons
WHERE lastname IN (Hansen, Pettersen)
SELECT * FROM Persons
WHERE lastname IN (SELECT lastname from Persons
where city=Sandnes)

BETWEEN operator

Used in a WHERE clause to select a range of data between


two values
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value 2;
SELECT * FROM persons
WHERE lastname BETWEEN Hansen AND
Pettersen;

SELECT * FROM persons


WHERE lastname NOT BETWEEN Hansen AND
Pettersen;

Warning:
different
database
systems have
different ways of
processing
BETWEEN
operator

Alias
An alias name can be given to a table or a column
SELECT column_name(s)
FROM table_name AS alias_name;
Or
SELECT column_name AS alias_name
FROM table_name;
SELECT po.O_ID, p.LastName, p.FirstName
FROM Persons AS p, Orders AS po
WHERE p.LastName='Hansen' AND p.FirstName='Ola';
Without alias
SELECT Orders.OrderID, Persons.LastName,
Persons.FirstName
FROM Persons, Orders
WHERE Persons.LastName=Hansen AND
Persons.FirstName=Ola;

JOIN
Used to query data from two or more tables
JOIN: return rows when there is at least one match in
both tables
LEFT JOIN: return all rows from the left table, even if
there are no matches in the right table
RIGHT JOIN: return all rows from the right table, even if
there are no matches in the left table
FULL JOIN: return rows where there is a match in one of
the tables

JOIN
O_Id

OrderNo

P_Id

77895

44678

22456

24562

34764

15

CREATE DATABASE test;


CREATE TABLE orders (
O_Id
INT,
OrderNO
INT,
P_Id
INT,
PRIMARY KEY (O_Id)
);
INSERT
INSERT
INSERT
INSERT
INSERT

Same as INNER JOIN

INTO
INTO
INTO
INTO
INTO

orders
orders
orders
orders
orders

VALUES
VALUES
VALUES
VALUES
VALUES

(1,
(2,
(3,
(4,
(5,

77895,
44678,
22456,
24562,
34764,

3);
3);
1);
1);
15);

INNER JOIN
SELECT column_name(s)
FROM table_name1 INNER JOIN table_name2
ON
table_name1.column_name=table_name2.column_n
ame;
SELECT persons.lastname, persons.firstname,
orders.orderNo
From Persons INNER JOIN Orders
ON persons.P_Id=orders.P_Id
ORDER BY persons.Lastname;
The INNER JOIN keyword returns
rows where there is at least one
match in both tables. If there are
rows in Persons that do not have
matches in Orders, those rows
will NOT be listed.

LEFT JOIN

Returns all rows from the left table, even if there are no matches in the right table

SELECT column_name(s)
FROM table_name1 LEFT JOIN table_name2
ON
table_name1.column_name=table_name2.column_n
ame;
SELECT persons.lastname, persons.firstname,
orders.orderno
FROM persons LEFT JOIN orders
ON persons.P_Id=orders.P_Id
ORDER BY persons.lastname;

In some
databases,
LEFT JOIN
is called
LEFT
OUTER
JOIN

RIGHT JOIN

Returns all rows from the right table (table 2), even if there are no matches in the left table (table 1)

SELECT column_name(s)
FROM table_name1 RIGHT JOIN table_name2
ON
table_name1.column_name=table_name2.column_n
ame;
SELECT persons.lastname, persons.firstname,
orders.orderno
FROM persons RIGHT JOIN orders
ON persons.P_Id=orders.P_Id
ORDER BY persons.lastname;

In some
databases,
RIGHT JOIN
is called
RIGHT
OUTER
JOIN

FULL JOIN

Return rows when there is a match in one of the tables


SELECT column_name(s)
FULL JOIN
FROM table_name1 FULL JOIN table_name2
is not
ON
supported
table_name1.column_name=table_name2.column
by
_name;
MySQL.
SELECT persons.lastname, persons.firstname,
orders.orderno
FULL JOIN
FROM persons FULL JOIN orders
= LEFT
ON persons.P_Id=orders.P_Id
JOIN
ORDER BY persons.lastname;
UNION
SELECT persons.lastname, persons.firstname,
RIGHT
orders.orderno
JOIN
FROM persons LEFT JOIN orders
ON persons.P_Id=orders.P_Id
UNION
SELECT persons.lastname, persons.firstname,
orders.orderno
FROM persons RIGHT JOIN orders

UNION operator

Combines two or more SELECT statements


Each SELECT statement must have the same columns
(same name, same data types, in the same order)
UNION selects only distinct values by default. To allow
duplicate values, use UNION ALL.

SELECT column_name(s) FROM table_name1


UNION
SELECT column_name(s) FROM table_name2;
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2;
SELECT P_Id FROM persons
UNION
SELECT P_Id FROM orders;

CREATE DATABASE

Used to create a database

CREATE DATABASE database_name;


CREATE DATABASE my_db;

CREATE TABLE

Used to create a table within a database

CREATE TABLE table_name


(column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
.);
CREATE TABLE persons (
P_Id
INT,
LastName VARCHAR(25),
FirstName VARCHAR(25),
Address
VARCHAR(25),
City
VARCHAR(15),
PRIMARY KEY (P_Id)
);

Constraints
Used to limit the type of data that can go into a table
Can be specified when a table is created (with the
CREATE TABLE statement) or after the table is created
(with the ALTER TABLE statement)
Type of constraints:

NOT NULL
UNIQUE
PRIMARY KEY
FOREIGN KEY
CHECK
DEFAULT

NOT NULL
Enforce a column to not accept NULL
values
CREATE
TABLE Persons
(
P_Id
INT NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address
varchar(255),
City
varchar(255)
);

UNIQUE
Uniquely identifies each record in a
database table
UNIQUE and PRIMARY KEY both
provide a guarantee for uniqueness
for a column or set of columns
A PRIMARY KEY constraint
automatically has a UNIQUE
constraint defined on it.

UNIQUE
CREATE TABLE Persons
CREATE TABLE Persons
(
(
P_Id
INT NOT NULL,
P_Id
INT NOT NULL UNIQUE,
LastName varchar(255) NOT
LastName varchar(255) NOT
NULL,
NULL,
FirstName varchar(255),
FirstName varchar(255),
Addressvarchar(255),MySQ
Addressvarchar(255),
Cityvarchar(255)
Cityvarchar(255)
L
UNIQUE (P_Id)
); SQL Server/Oracle/MS
Access
);
CREATE TABLE Persons
(
MySQL/SQL Server/Oracle/MS
P_Id
INT NOT NULL,
Access
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Addressvarchar(255),
Cityvarchar(255)
CONSTRAINT uc_PersonID UNIQUE (P_Id,
LastName)
);

UNIQUE
When Persons table has already been
created, use Alter to add new
constraints.
ALTER TABLE
ALTER TABLE Persons
Persons
ADD CONSTRAINT un_PersonID UNIQUE (P_Id,
ADD UNIQUE (P_Id)
LastName)
To drop a UNIQUE constraint
ALTER TABLE Persons
DROP INDEX un_PersonID MySQL
ALTER TABLE Persons
DROP CONSTRAINT
un_PersonID

SQL Server/Oracle/MS Access

PRIMARY KEY
Each table should have one and only one primary key
Primary key should be unique and does not contain NULL values
CREATE TABLE Persons
CREATE TABLE Persons
(
(
P_Id
INT NOT NULL,
P_Id
INT NOT NULL PRIMARY
LastName varchar(255) NOT
KEY,
NULL,
LastName varchar(255) NOT
FirstName varchar(255),
NULL,
Addressvarchar(255),
FirstName varchar(255),
Cityvarchar(255)
Addressvarchar(255),
SQL Server/Oracle/MS
MySQL
PRIMARY KEY (P_Id)
Cityvarchar(255)
Access
);
);
CREATE TABLE Persons
( P_Id INT NOT NULL,
LastName varchar(255) NOT NULL,MySQL/SQL
Server/Oracle/MS Access
FirstName varchar(255),
Addressvarchar(255),
Cityvarchar(255)
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,

PRIMARY KEY
When Persons table has already been
created, use Alter to add new
constraints.
ALTER TABLE Persons ALTER TABLE Persons
ADD PRIMARY KEY
ADD CONSTRAINT un_PersonID PRIMARY KEY (P_Id,
(P_Id)
LastName)
To drop a constraint
ALTER TABLE Persons
DROP PRIMARY KEY
ALTER TABLE Persons
DROP CONSTRAINT
pk_PersonID

MySQL

SQL Server/Oracle/MS Access

FOREIGN KEY
A foreign key in one table points to a primary key in another table
The foreign key constraint prevents invalid data from being inserted into the foreign
key column because it has to be one of the values contained in the table it points to.

CREATE TABLE Orders


(
O_Id
INT NOT NULL,
OrderNo INT NOT NULL,
P_Id
INT,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id)
REFERENCES Persons (P_Id)
MySQL
);

CREATE TABLE Orders


(
O_Id
INT NOT NULL PRIMARY
KEY,
OrderNo INT NOT NULL,
P_Id
INT FOREIGN KEY
REFERENCES
Persons(P_Id)
SQL Server/Oracle/MS
);
Access

CREATE TABLE Orders


( O_Id INT NOT NULL,
MySQL/SQL
OrderNo INT NOT NULL,
Server/Oracle/MS Access
P_Id
INT,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id) REFERENCES
Persons (P_Id));

FOREIGN KEY
When Orders table has already been
created, use Alter to add new
constraints.
ALTER TABLE Orders
ALTER TABLE Orders
ADD CONSTRAINT
ADD FOREIGN KEY (P_Id)
fk_PerOrders
REFERENCES Persons
FOREIGN KEY (P_Id)
(P_Id)
REFERENCES Persons(P_Id)
To drop a constraint
MySQL
ALTER TABLE Orders
DROP FOREIGN KEY
fk_PerOrders
ALTER TABLE Orders
DROP CONSTRAINT
fk_PerOrders

SQL Server/Oracle/MS Access

CHECK Constraint

Used to limit the value range of a column

CREATE TABLE Persons


CREATE TABLE Persons
(
(
P_Id int NOT NULL,
P_Id int NOT NULL CHECK
LastName varchar(255) NOT
(P_Id>0),
NULL,
LastName varchar(255) NOT
FirstName varchar(255),
NULL,
Address varchar(255),
FirstName varchar(255),
City varchar(255),
Address
SQLvarchar(255),
Server/Oracle/MS
MySQL
CHECK (P_Id>0)
City varchar(255)
Access
)
)
CREATE TABLE Persons
(P_Id int NOT NULL,
LastName varchar(255) NOT NULL, MySQL/SQL
Server/Oracle/MS Access
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes));

CHECK Constraint
When a table has already been created,
use Alter to add new constraints.
ALTER TABLE Persons
ADD CHECK (P_Id>0)

ALTER TABLE Persons


ADD CONSTRAINT chk_Person
CHECK (P_Id>0 AND
City=Sandnes)

To drop a constraint
ALTER TABLE Persons
DROP CONSTRAINT
chk_Person

SQL Server/Oracle/MS Access

DEFAULT Constraint

Used to insert a default value into a column

CREATE TABLE Persons


CREATE TABLE Orders
(
(
P_Id int NOT NULL,
O_Id int NOT NULL,
LastName varchar(255) NOT
OrderNo int NOT NULL,
NULL,
P_Id int,
FirstName varchar(255),
OrderDate date DEFAULT
Address varchar(255),
GETDATE()
City varchar(255) DEFAULT
)MySQL/SQL Server/Oracle/MS
MySQL/SQL Server/Oracle/MS
Access
'Sandnes'
Access
)

DEFAULT Constrain
When a table has already been created,
use Alter to add new constraints.
ALTER TABLE Persons
ALTER COLUMN City SET
DEFAULT Sandnes

ALTER TABLE Persons


ALTER City SET DEFAULT
Sandnes
MySQL

SQL Server/Oracle/MS Access

To drop a constraint
MySQL
ALTER TABLE Persons
ALTER City DROP DEFAULT
ALTER TABLE Persons
ALTER COLUMN City DROP
DEFAULT

SQL Server/Oracle/MS Access

CREATE INDEX statement


An index can be created in a table to find
data more quickly and efficiently.
The users cannot see the indexes.
Indexes can speed up searches/queries
Updating a table with indexes takes more
time than updating a table without indexes.
Because indexes also need to update.
So please create indexes on columns (and
tables) that will be frequently searched.

CREATE INDEX statement


CREATE INDEX index_name
ON table_name
(column_name)
CREATE UNIQUE INDEX
index_name
ON table_name (column_name)
CREATE INDEX PIndex
ON Persons (lastname)

CREATE INDEX PIndex


ON Persons (LastName,
FirstName)

Duplicate values are


allowed
Duplicate values are not
allowed

SQL DROP INDEX, DROP TABLE,


DROP DATABASE
MS
DROP INDEX index_name ON
Access
table_name
DROP INDEX
MS SQL
table_name.index_name
Server
DROP INDEX index_name
DB2/Oracle
ALTER TABLE table_name DROP INDEX
index_name
DROP TABLE table_name

MySQL

DROP DATABASE database_name


TRUNCATE TABLE table_name

Delete data inside the


table, not the table
itself

SQL ALTER TABLE statement

Alter table statement is used to add, delete, or modify


columns in an existing table

ALTER TABLE table_name


To add a column in a table
ADD column_name
datatype
ALTER TABLE table_name
To delete a column in a table (some
DROP COLUMN
database systems dont allow
column_name
deleting a column)
ALTER TABLE table_name
To change the data type of a
ALTER COLUMN column_name
column in a table
datatype

SQL ALTER TABLE statement


ALTER TABLE Persons
ADD DateOfBirth date

ALTER TABLE Persons


DROP COLUMN
DateOfBirth

SQL AUTO INCREMENT


Auto-increment allows a unique number to be generated
when a new record is inserted into a table
MySQL
CREATE TABLE Persons
(
P_Id int NOT NULL
AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)

ALTER TABLE Persons


AUTO_INCREMENT=100
To start the
auto_increment with
another value
INSERT INTO Persons
(FirstName, LastName)
VALUES (Lars, Monsen)

SQL AUTO INCREMENT


Auto-increment allows a unique number to be generated
when a new record is inserted into a table
SQL Server
CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
To start at 10 and increment
by 5 IDENTITY(10,5)

ALTER TABLE Persons


AUTO_INCREMENT=100
To start the
auto_increment with
another value
INSERT INTO Persons
(FirstName, LastName)
VALUES (Lars, Monsen)

SQL AUTO INCREMENT


Auto-increment allows a unique number to be generated
when a new record is inserted into a table
Access
CREATE TABLE Persons
(
P_Id PRIMARY KEY
AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
To start at 10 and increment
by 5
AUTOINCREMENT(10,5)

INSERT INTO Persons


(FirstName, LastName)
VALUES (Lars, Monsen)

SQL AUTO INCREMENT


Auto-increment allows a unique number to be generated
when a new record is inserted into a table
Oracle
CREATE SEQUENCE seq_person
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
INSERT INTO Persons
(P_Id,FirstName,LastName)
VALUES
(seq_person.nextval,'Lars','Monsen')
To start at 10 and increment
by 5
AUTOINCREMENT(10,5)

SQL Views
A view is a virtual table based on the result-set of an SQL statement
A view just looks like a real table with fields and records from one or
more real tables in the database

CREATE VIEW view_name AS


SELECT column_name(s)
FROM table_name
WHERE condition
CREATE VIEW Sandnes AS
SELECT LastName,
FirstName
FROM Persons
WHERE city=Sandnes
SELECT * FROM Sandnes

CREATE VIEW
SandnesLastName AS
SELECT LastName
FROM Sandnes
SELECT * FROM
SandnesLastName

SQL Views
A view can be updated or dropped
CREATE OR REPLACE OR ALTER VIEW
view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
ALTER VIEW Sandnes AS
SELECT LastName, FirstName,
Address
FROM Persons
WHERE city=Sandnes

DROP VIEW view_name

SELECT * FROM Sandnes

DROP VIEW Sandnes

SQL FUNCTIONS

SQL Functions
SQL Aggregate functions: return a single
value calculated from values in a column
AVG() Returns the average value
COUNT() Returns the number of rows
FIRST() Returns the first value
LAST() Returns the last value
MAX() Returns the largest value
MIN() Returns the smallest value
SUM() Returns the sum

SQL Functions
SQL Scalar functions: returns a single value
based on the input value
UCASE() Converts a field to upper case
LCASE() Converts a field to lower case
MID() Extracts characters from a text field
LEN() Returns the length of a text field
ROUND() Rounds a numeric field to the number of
decimals specified
NOW() Returns the current system date and time
FORMAT() Formats how a field is to be displayed

Create Products Table


Persons Table
P_Id

ProductNa
me

UnitPrice

UnitsInStoc UnitsOnOrd
k
er

Jarlsberg

10.45

16

15

Mascarpon
e

32.56

23

20

3
Gorgonzola
15.67
CREATE
TABLE products
(
P_Id
INT,
ProductName VARCHAR(25),
UnitPrice
decimal,
UnitsInStock
INT,
UnitsOnOrder
INT,
PRIMARY KEY (P_Id)
);

INSERT INTO products VALUES (1, Jarlsberg', 10.45, 16, 15);


INSERT INTO products VALUES (2, Mascarpone', 32.56, 23,NULL);
INSERT INTO products VALUES (3, Gorgonzola', 15.67, 9, 20);

SQL AVG() Function


AVG() returns the average value of a numeric column
SELECT AVG(column_name) FROM table_name
SELECT AVG(UnitPrice) AS UnitAverage FROM
Products

SELECT ProductName FROM products


WHERE UnitPrice>( SELECT AVG(UnitPrice) FROM
Products)

SQL COUNT() Function


COUNT() returns the number of rows that matches a specified criteria

SELECT COUNT(column_name) FROM table_name


SELECT COUNT(*) FROM Products

SELECT COUNT(DISTINCT column_name) FROM


table_name
SELECT COUNT(DISTINCT city) As CityName From
persons

SQL MAX() Function


MAX() returns the largest value of the selected column
SELECT MAX(column_name) FROM table_name
SELECT MAX(UnitPrice) AS LargestUnitPrice FROM
Products

SQL SUM() Function


SUM() returns the total sum of the selected column
SELECT SUM(column_name) FROM table_name
SELECT SUM(UnitPrice) AS TotalUnitPrice FROM
Products

Create CumOrders Table


O_Id

OrderDate

OrderPrice

Customer

2008/11/12

1000

Hansen

2008/10/23

1600

Nilsen

2008/09/02

700

Hansen

2008/09/03

300

Hansen

2008/08/30

2000

Jensen

2008/10/04

100

Nilsen

CREATE TABLE CumOrders (


O_Id
INT,
OrderDate
Date,
OrderPrice
INT,
Customer
Varchar(30),
PRIMARY KEY (O_Id)
);
INSERT INTO cumorders VALUES (1,
INSERT INTO cumorders VALUES (2,
INSERT INTO cumorders VALUES (3,
INSERT INTO cumorders VALUES (4,
INSERT INTO cumorders VALUES (5,
INSERT INTO cumorders VALUES (6,

2011-08-06,
2011-08-07,
2011-08-08,
2011-08-09,
2011-08-10,
2011-08-11,

1000, Hansen);
1600, Nilsen);
700, Hansen);
300, Hansen);
2000, Jensen);
100, Nilsen);

SQL GROUP BY Statement


Aggregate functions often need an added GROUP
BY statement to group the result-set by one or
more columns
SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
SELECT Customer, SUM(OrderPrice) FROM
CumOrders
GROUP BY Customer

SELECT Customer, OrderDate, SUM(OrderPrice) FROM


CumOrders
GROUP BY Customer, OrderDate

SQL HAVING Clause


HAVING was added to SQL because the WHERE
keyword could not be used wit the aggregate
functions
SELECT column_name,
aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name)
SELECT
SUM(OrderPrice) FROM
operatorCustomer,
value
CumOrders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000

SQL HAVING Clause


SELECT Customer, SUM(OrderPrice) FROM CumOrders
WHERE Customer=Hansen OR Customer=Jensen
GROUP BY Customer
HAVING SUM(OrderPrice)>1500

SQL UCASE() Function


UCASE() converts the value of a field to uppercase.
SELECT UCASE(column_name) FROM table_name
SELECT UCASE(LastName) as LastName From
Persons

SQL LCASE() Function


LCASE() converts the value of a field to lowercase.
SELECT LCASE(column_name) FROM table_name
SELECT LCASE(LastName) as LastName From
Persons

SQL MID() Function


MID() extracts characters from a text field
SELECT MID(column_name, start[, length]) FROM
table_name
Parameter
Description
column_na
me

Required. The field to extract characters from

start

Required. Specifies the starting position (starts at


1)

length
Optional. The number of characters to return. If
omitted,
MID() function
SELECT MID(City,
1, 4) the
as SmallCity
From returns the rest of the
MySQL
text
Persons
SELECT substr(City, 1, 4) as SmallCity
From Persons
PostgreS
QL
PostgreSQL: http://www.postgresql.org/docs/9.1/static/functions-

SQL LENGTH() Function


LENGTH() returns the length of the value in a text field.
SELECT LENGTH(column_name) FROM table_name
SELECT LENGTH(Address) as LengthOfAddress From
Persons

SQL ROUND() Function


ROUND() rounds a numeric field to the number of decimals specified

SELECT ROUND(column_name, decimals) FROM table_name


Parameter

Description

column_na
me

Required. The field to round.

decimals
Required. Specifies the number of decimals to be
returned.
UPDATE Products
SET
UnitPrice=10.49
WHERE P_Id=1
SELECT ROUND(UnitPrice, 0) as Price
From Products

SQL Date Functions


Introduces some build-in functions to deal with dates
MySQL
Date
Functions

Function

Description

NOW()

Returns the current date and time

CURDATE()

Returns the current date

CURTIME()

Returns the current time

DATE()

Extracts the date part of a date or date/time


expression

EXTRACT()

Returns a single part of a date/time

DATE_ADD()

Adds a specified time interval to a date

DATE_SUB()

Subtracts a specified time interval from a date

DATEDIFF()

Returns the number of days between two dates

DATE_FORMAT Displays date/time data in different formats


()

PostgreSQL: http://www.postgresql.org/docs/8.2/static/functionsdatetime.html

MySQL NOW() Function


NOW() returns the current date and time
SELECT NOW(), CURDATE(),
CURTIME()

MySQL

SELECT
NOW()

CREATE TABLE Orders


(
OrderId int NOT NULL,
ProductName varchar(50) NOT
NULL,
OrderDate datetime NOT NULL,
PRIMARY KEY (OrderId)
)
INSERT INTO orders VALUES (1, Jarlsberg
Cheese, NOW())
SELECT ProductName, UnitPrice, NOW() as PerDate
FROM Products

PostgreS
QL

MySQL CURDATE() Function


CURDATE() returns the current date
SELECT NOW(), CURDATE(),
CURTIME()

CREATE TABLE Orders


(
OrderId int NOT NULL,
ProductName varchar(50) NOT
NULL,
OrderDate datetime NOT NULL,
PRIMARY KEY (OrderId)
)
INSERT INTO orders VALUES (2, Jarlsberg Cheese,
CURDATE())

MySQL DATE() Function


DATE() function extracts the date part of a date or date/time expression

DATE(date)
SELECT ProductName, DATE(OrderDate) as
OrderDate
FROM Orders
WHERE OrderId=1

MySQL EXTRACT() Function


The EXTRACT() function returns a single part of a date/time, such as
year, month, day, hour, minute, etc.
Unit value can be: SECOND, MINUTE, HOUR, DAY, WEEK, MONTH,
QUARTER, YEAR, or any combination of them

EXTRACT(unit FROM date)


SELECT EXTRACT(YEAR FROM OrderDate) as
OrderYear,
EXTRACT(Month FROM OrderDate) as
OrderMonth,
EXTRACT(DAY FROM OrderDate) as
OrderDay
FROM Orders
WHERE OrderID=1

MySQL DATE_ADD()
Function

The DATE_ADD() function adds a specified time interval to a date.

DATE_ADD(date, INTERVAL expr


type)
SELECT OrderID, DATE_ADD(OrderDate, INTERVAL 45 DAY) AS
OrderPayDate
FROM Orders

MySQL DATE_SUB() Function

The DATE_SUB() function subtracts a specified time interval from a date.

DATE_SUB(date, INTERVAL expr


type)
SELECT OrderID, DATE_SUB(OrderDate, INTERVAL 5 DAY) AS
SubtractDate
FROM Orders

MySQL DATEIFF() Function

The DATEDIFF() function returns the time between two dates.


DATEDIFF(date1, date2)
SELECT DATEDIFF ( 2010-11-30, 2010-11-29) AS DiffDate

MySQL DATE_FORMAT()
Function

The DATE_FORMAT() function displays the date/time in different formats.

DATE_FORMAT(date, format)
SELECT DATE_FORMAT(NOW(), %m-%d-%y)

SQL Date Functions


Introduces some build-in functions to deal with dates
SQL Server
Date
Functions

Function

Description

GETDATE()

Returns the current date and time

DATEPART()

Returns a single part of a date/time

DATEADD()

Adds or subtracts a specified time interval


from a date

DATEDIFF()

Returns the time between two dates

CONVERT()

Displays date/time data in different formats

SQL Date Datatypes


MySQL
Date: YYYY-MM-DD
Datetime: YYYY-MM-DD HH:MM:SS
Timestamp: YYYY-MM-DD HH:MM:SS
Year: YYYY or YY
SELECT * FROM Orders WHERE OrderDate=2011-08-06

SQL NULL Values


NULL values represent missing unknown data.
NULL is used as a placeholder for unknown or
inapplicable values
NULL vs. 0
INSERT INTO persons VALUES (5, 'Ding', 'Ying', NULL, NULL);
SELECT * FROM Persons
WHERE Address IS NULL

SELECT * FROM Persons


WHERE Address IS NOT
NULL

DELETE FROM Persons WHERE P_ID=5

SQL NULL Functions


SELECT ProdcutName,
UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
ISNULL(), NVL(), IFNULL(), COALESCE() are used to treat NULL
values.
Below all makes nulls to be zero
SELECT ProductName,
UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
SQL
FROM Products
Server/Access
SELECT ProductName,
Oracle
UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
SELECT ProductName,
UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0)) AS Price
MySQL
FROM Products
SELECT ProductName,
UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))AS Price
FROM Products

SQL DATATYPES

SQL Datatype
Access
Data type
Text
Memo
Byte
Integer
Long
Single
Double
Currency
AutoNumber
Date/Time
Yes/No

OLE Object
Hyperlink

Description
Storage
Use for text or combinations of text and numbers. 255

characters maximum
Memo is used for larger amounts of text. Stores up to 65,536
characters. Note: You cannot sort a memo field. However,
they are searchable
Allows whole numbers from 0 to 255
1 byte
Allows whole numbers between -32,768 and 32,767
2 bytes
Allows whole numbers between -2,147,483,648 and
4 bytes
2,147,483,647
Single precision floating-point. Will handle most decimals
4 bytes
Double precision floating-point. Will handle most decimals
8 bytes
Use for currency. Holds up to 15 digits of whole dollars, plus 4 8 bytes
decimal places. Tip: You can choose which country's currency
to use
AutoNumber fields automatically give each record its own
4 bytes
number, usually starting at 1
Use for dates and times
8 bytes
A logical field can be displayed as Yes/No, True/False, or
1 bit
On/Off. In code, use the constants True and False (equivalent
to -1 and 0). Note: Null values are not allowed in Yes/No
fields
Can store pictures, audio, video, or other BLOBs (Binary Large up to
OBjects)
1GB
Contain links to other files, including web pages

SQL Datatype
Data type
CHAR(size)

MySQL:
Text

Description
Holds a fixed length string (can contain letters, numbers, and
special characters). The fixed size is specified in parenthesis. Can
store up to 255 characters
VARCHAR(size) Holds a variable length string (can contain letters, numbers, and
special characters). The maximum size is specified in
parenthesis. Can store up to 255 characters. Note: If you put a
greater value than 255 it will be converted to a TEXT type
TINYTEXT
Holds a string with a maximum length of 255 characters
TEXT
Holds a string with a maximum length of 65,535 characters
BLOB
For BLOBs (Binary Large OBjects). Holds up to 65,535 bytes of
data
MEDIUMTEXT
Holds a string with a maximum length of 16,777,215 characters
MEDIUMBLOB
For BLOBs (Binary Large OBjects). Holds up to 16,777,215 bytes
of data
LONGTEXT
Holds a string with a maximum length of 4,294,967,295
characters
LONGBLOB
For BLOBs (Binary Large OBjects). Holds up to 4,294,967,295
bytes of data
ENUM(x,y,z,etc. Let you enter a list of possible values. You can list up to 65535
)
values in an ENUM list. If a value is inserted that is not in the list,
a blank value will be inserted.Note: The values are sorted in the
order you enter them.

SQL Datatype
Data type
TINYINT(size)

MySQL:
Number

Description
-128 to 127 normal. 0 to 255 UNSIGNED*. The maximum number of
digits may be specified in parenthesis
SMALLINT(size) -32768 to 32767 normal. 0 to 65535 UNSIGNED*. The maximum
number of digits may be specified in parenthesis
MEDIUMINT(size) -8388608 to 8388607 normal. 0 to 16777215 UNSIGNED*. The
maximum number of digits may be specified in parenthesis
INT(size)
-2147483648 to 2147483647 normal. 0 to 4294967295 UNSIGNED*.
The maximum number of digits may be specified in parenthesis
BIGINT(size)
-9223372036854775808 to 9223372036854775807 normal. 0 to
18446744073709551615 UNSIGNED*. The maximum number of digits
may be specified in parenthesis
FLOAT(size,d)
A small number with a floating decimal point. The maximum number
of digits may be specified in the size parameter. The maximum
number of digits to the right of the decimal point is specified in the d
parameter
DOUBLE(size,d) A large number with a floating decimal point. The maximum number of
digits may be specified in the size parameter. The maximum number
of digits to the right of the decimal point is specified in the d
parameter
DECIMAL(size,d) A DOUBLE stored as a string , allowing for a fixed decimal point. The
maximum number of digits may be specified in the size parameter.
The maximum number of digits to the right of the decimal point is
specified in the
d parameter
Unsigned:
integer
cannot be

SQL Datatype

MySQL:
Date

Data type

Description

DATE()

A date. Format: YYYY-MM-DDNote: The supported


range is from '1000-01-01' to '9999-12-31'
*A date and time combination. Format: YYYY-MM-DD
HH:MM:SSNote: The supported range is from '100001-01 00:00:00' to '9999-12-31 23:59:59'
*A timestamp. TIMESTAMP values are stored as the
number of seconds since the Unix epoch ('1970-01-01
00:00:00' UTC). Format: YYYY-MM-DD HH:MM:SSNote:
The supported range is from '1970-01-01 00:00:01'
UTC to '2038-01-09 03:14:07' UTC
A time. Format: HH:MM:SSNote: The supported range
is from '-838:59:59' to '838:59:59'

DATETIME()

TIMESTAMP(
)

TIME()
YEAR()

A year in two-digit or four-digit format.Note: Values


allowed in four-digit format: 1901 to 2155. Values
allowed in two-digit format: 70 to 69, representing
years from 1970 to 2069

Homework 5
Create one database containing
several tables using PostgreSQL
SELECT * FROM Persons
10 SQL queries WHERE lastname IN (SELECT
lastname from Persons
querieswhere city=Sandnes)

Embedded
GroupBy queries
Join queries SELECT Customer, SUM(OrderPrice)
FROM CumOrders
GROUP BY Customer
HAVING SUM(OrderPrice)<2000

SELECT persons.lastname, persons.firstname,


orders.orderNo
From Persons INNER JOIN Orders
ON persons.P_Id=orders.P_Id
ORDER BY persons.Lastname;

SQL Quiz
http://www.w3schools.com/sql/sql_qu
iz.asp