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