Introduction to SQL
SQL is a standard language for
accessing and manipulating databases.
What
is SQL?
- SQL stands for Structured Query Language
- SQL lets you access and manipulates databases
- SQL is an ANSI (American National Standards Institute)
standard
What
Can SQL do?
- SQL can execute queries against a database
- SQL can retrieve data from a database
- SQL can insert records in a database
- SQL can update records in a database
- SQL can delete records from a database
- SQL can create new databases
- SQL can create new tables in a database
- SQL can create stored procedures in a database
- SQL can create views in a database
- SQL can set permissions on tables, procedures, and
views
SQL
is a Standard - BUT...
Although SQL is an ANSI (American
National Standards Institute) standard, there are different versions of the SQL
language.
However, to be compliant with the
ANSI standard, they all support at least the major commands (such as SELECT,
UPDATE, DELETE, INSERT, WHERE) in a similar manner.
Note: Most of the SQL database programs also have their own proprietary extensions in addition to the SQL standard!
Using
SQL in Your Web Site
To build a website that shows data
from a database, you will need:
- An RDBMS database program (i.e. MS Access, SQL Server,
MySQL)
- To use a server-side scripting language, like PHP or
ASP
- To use SQL to get the data you want
- To use HTML / CSS
RDBMS
RDBMS stands for Relational Database
Management System.
RDBMS is the basis for SQL, and for
all modern database systems such as MS SQL Server, IBM DB2, Oracle, MySQL, and
Microsoft Access.
The data in RDBMS is stored in
database objects called tables.
A table is a collection of related
data entries and it consists of columns and rows.
Database
Tables
A database most often contains one
or more tables. Each table is identified by a name (e.g. "Customers"
or "Orders"). Tables contain records (rows) with data.
In this tutorial, we will use the
well-known Northwind sample database (included in MS Access and MS SQL Server).
Below is a selection from the
"Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
The table above contains five
records (one for each customer) and seven columns (CustomerID, CustomerName,
ContactName, Address, City, PostalCode, and Country).
SQL
Statements
Most of the actions you need to
perform on a database are done with SQL statements.
The following SQL statement selects
all the records in the "Customers" table:
Example
SELECT * FROM Customers;
In this tutorial, we will teach you all about the different SQL statements.
Keep
in Mind That...
- SQL is NOT case sensitive: SELECT is the same as select
The semicolon after SQL Statements?
Some database systems require the semicolon at the end of each SQL statement.
The semicolon is the standard way to
separate each SQL statement in database systems that allow more than one SQL
statement to be executed in the same call to the server.
In this tutorial, we will use the semicolon at the end of each SQL statement.
Some
of The Most Important SQL Commands
- SELECT
- extracts data from a database
- UPDATE
- updates data in a database
- DELETE
- deletes data from a database
- INSERT INTO
- inserts new data into a database
- 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 (search key)
- DROP INDEX
- deletes an index
SQL SELECT Statement
The SELECT statement is used to select data from a database.
The SQL SELECT Statement
The SELECT statement is used to select data from a database.
The result is stored in a result table, called the result-set.
SQL SELECT Syntax
SELECT column_name,column_name
FROM table_name;
and
SELECT * FROM table_name;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
SELECT Column Example
The following SQL statement selects the "CustomerName" and
"City" columns from the "Customers" table:
Example
SELECT CustomerName, City FROM Customers;
SELECT * Example
The following SQL statement selects all the columns from the
"Customers" table:
Example
SELECT * FROM Customers;
SQL SELECT DISTINCT Statement
The SELECT DISTINCT statement is used to return only distinct
(different) values.
The SQL SELECT DISTINCT Statement
In a table, a column may contain many duplicate values; and sometimes you
only want to list the different (distinct) values.
The DISTINCT keyword can be used to return only distinct (different) values.
SQL SELECT DISTINCT Syntax
SELECT DISTINCT column_name,column_name
FROM table_name;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
SELECT DISTINCT Example
The following SQL statement selects only the distinct values from the
"City" columns from the "Customers" table:
Example
SELECT DISTINCT City FROM Customers;
SQL WHERE Claus
The WHERE clause is used to filter records.
The SQL WHERE Clause
The WHERE clause is used to extract only those records that fulfill a
specified criterion.
SQL WHERE Syntax
SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
WHERE Clause Example
The following SQL statement selects all the customers from the country
"Mexico", in the "Customers" table:
Example
SELECT * FROM Customers
WHERE Country='Mexico';
Text Fields vs. Numeric Fields
SQL requires single quotes around text values (most database systems will
also, allow double quotes).
However, numeric fields should not be enclosed in quotes:
Example
SELECT * FROM Customers
WHERE CustomerID=1;
Operators in The WHERE Clause
The following operators can be used in the WHERE clause:
Operator |
Description |
= |
Equal |
<> |
Not equal. Note: In some versions of SQL this the operator may be written as != |
> |
Greater than |
< |
Less than |
>= |
Greater than or equal |
<= |
Less than or equal |
BETWEEN |
Between an inclusive range |
LIKE |
Search for a pattern |
IN |
To specify multiple possible values for a column |
SQL AND & OR Operators
The AND & OR operators are used
to filter records based on more than one condition.
The
SQL AND & OR Operators
The AND operator displays a record
if both the first condition AND the second condition are true.
The OR operator displays a record if
either the first condition OR the second condition is true.
Demo
Database
In this tutorial, we will use the
well-known Northwind sample database.
Below is a selection from the
"Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
AND
Operator Example
The following SQL statement selects
all customers from the country "Germany" AND the city
"Berlin", in the "Customers" table:
Example
SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';
OR
Operator Example
The following SQL statement selects
all customers from the city "Berlin" OR "München", in the
"Customers" table:
Example
SELECT * FROM Customers
WHERE City='Berlin'
OR City='München';
Combining
AND & OR
You can also combine AND and OR (use
parenthesis to form complex expressions).
The following SQL statement selects
all customers from the country "Germany" AND the city must be equal
to "Berlin" OR "München", in the "Customers"
table:
Example
SELECT * FROM Customers
WHERE Country='Germany'
AND (City='Berlin' OR City='München');
SQL ORDER BY Keyword
The ORDER BY keyword is used to sort the result-set.
The SQL ORDER BY Keyword
The ORDER BY keyword is used to sort the result-set by one or more columns.
The ORDER BY keyword sorts the records in ascending order by default. To
sort the records in descending order, you can use the DESC keyword.
SQL ORDER BY Syntax
SELECT column_name,column_name
FROM table_name
ORDER BY column_name,column_name ASC|DESC;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
ORDER BY Example
The following SQL statement selects all customers from the
"Customers" table, sorted by the "Country" column:
Example
SELECT * FROM Customers
ORDER BY Country;
ORDER BY DESC Example
The following SQL statement selects all customers from the
"Customers" table, sorted DESCENDING by the "Country"
column:
Example
SELECT * FROM Customers
ORDER BY Country DESC;
ORDER BY Several Columns Example
The following SQL statement selects all customers from the
"Customers" table, sorted by the "Country" and the
"CustomerName" column:
Example
SELECT * FROM Customers
ORDER BY Country, CustomerName;
SQL INSERT INTO Statement
The INSERT INTO statement is used to insert new records in a
table.
The SQL INSERT INTO Statement
The INSERT INTO statement is used to insert new records in a table.
SQL INSERT INTO Syntax
It is possible to write the INSERT INTO statement in two forms.
The first form does not specify the column names where the data will be
inserted, only their values:
INSERT INTO table_name
VALUES (value1,value2,value3,...);
The second form specifies both the column names and the values to be
inserted:
INSERT INTO table_name (column1,column2,column3,...)
VALUES (value1,value2,value3,...);
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
87 |
Wardian Herkku |
Pirkko Koskitalo |
Trikatu 38 |
Oulu |
90110 |
Finland |
88 |
Wellington Importadora |
Paula Parente |
Rua do Mercado, 12 |
Resende |
08737-363 |
Brazil |
89 |
White Clover Markets |
Karl Jablonski |
305 - 14th Ave. S. Suite 3B |
Seattle |
98128 |
USA |
90 |
Wilman Kala |
Matti Karttunen |
Keskuskatu 45 |
Helsinki |
21240 |
Finland |
91 |
Wolski |
Zbyszek |
ul. Filtra 68 |
Walla |
01-012 |
Poland |
INSERT INTO Example
Assume we wish to insert a new row in the "Customers" table.
We can use the following SQL statement (without specifying column names):
INSERT INTO Customers
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');
or this SQL statement (including column names):
INSERT INTO Customers (CustomerName, ContactName, Address,
City, PostalCode, Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');
The selection from the "Customers" table will now look like this:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
87 |
Wardian Herkku |
Pirkko Koskitalo |
Trikatu 38 |
Oulu |
90110 |
Finland |
Did
you notice that we did not insert any number into the CustomerID field?
The CustomerID column is an AutoNumber field and is automatically updated with
a unique number for each record in the table.
AutoNumber is a type of data used in Microsoft Access tables to generate an automatically incremented numeric counter. The default AutoNumber type has a start value of 1 and an increment of 1.
Insert Data Only in Specified Columns
It is also possible to only insert data in specific columns.
The following SQL statement will insert a new row, but only insert data in
the "CustomerName", "City", and "Country" columns
(and the CustomerID field will of course also be updated automatically):
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
The selection from the "Customers" table will now look like this:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
87 |
Wardian Herkku |
Pirkko Koskitalo |
Trikatu 38 |
Oulu |
90110 |
Finland |
88 |
Wellington Importadora |
Paula Parente |
Rua do Mercado, 12 |
Resende |
08737-363 |
Brazil |
89 |
White Clover Markets |
Karl Jablonski |
305 - 14th Ave. S. Suite 3B |
Seattle |
98128 |
USA |
90 |
Wilman Kala |
Matti Karttunen |
Keskuskatu 45 |
Helsinki |
21240 |
Finland |
91 |
Wolski |
Zbyszek |
ul. Filtra 68 |
Walla |
01-012 |
Poland |
92 |
Cardinal |
Stavanger |
Norway |
SQL UPDATE Statement
The UPDATE statement is used to update records in a table.
The SQL UPDATE Statement
The UPDATE statement is used to update existing records in a table.
SQL UPDATE Syntax
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
|
Notice the WHERE clause in
the SQL UPDATE statement! |
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
SQL UPDATE Example
Assume we wish to update the customer "Alfreds Futterkiste" with a
new contact person and city.
We use the following SQL statement:
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg'
WHERE CustomerName='Alfreds Futterkiste';
The selection from the "Customers" table will now look like this:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Alfred Schmidt |
Obere Str. 57 |
Hamburg |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
Update Warning!
Be careful when updating records. If we had omitted the WHERE clause in the the example above, like this:
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Hamburg';
The "Customers" table would have looked like this:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Alfred Schmidt |
Obere Str. 57 |
Hamburg |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Alfred Schmidt |
Avda. de la Constitución 2222 |
Hamburg |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Alfred Schmidt |
Mataderos 2312 |
Hamburg |
05023 |
Mexico |
4 |
Around the Horn |
Alfred Schmidt |
120 Hanover Sq. |
Hamburg |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Alfred Schmidt |
Berguvsvägen 8 |
Hamburg |
S-958 22 |
Sweden |
SQL DELETE Statement
The DELETE statement is used to delete records in a table.
The SQL DELETE Statement
The DELETE statement is used to delete rows in a table.
SQL DELETE Syntax
DELETE FROM table_name
WHERE some_column=some_value;
|
Notice the WHERE clause in
the SQL DELETE statement! |
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
SQL DELETE Example
Assume we wish to delete the customer "Alfreds Futterkiste" from
the "Customers" table.
We use the following SQL statement:
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste' AND ContactName='Maria Anders';
The "Customers" table will now look like this:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
Delete All Data
It is possible to delete all rows in a table without deleting the table.
This means that the table structure, attributes, and indexes will be intact:
DELETE FROM table_name;
or
DELETE * FROM table_name;
Note: Be very careful when deleting records. You cannot undo this
statement!
SQL SELECT TOP Clause
The SQL SELECT TOP Clause
The SELECT TOP clause is used to specify the number of records to return.
The SELECT TOP clause can be very useful on large tables with thousands of
records. Returning a large number of records can impact performance.
Note: Not all database systems support the SELECT TOP clause.
SQL Server / MS Access Syntax
SELECT TOP number|percent column_name(s)
FROM table_name;
SQL SELECT TOP Equivalent in MySQL and Oracle
MySQL Syntax
SELECT column_name(s)
FROM table_name
LIMIT number;
Example
SELECT *
FROM Persons
LIMIT 5;
Oracle Syntax
SELECT column_name(s)
FROM table_name
WHERE ROWNUM <= number;
Example
SELECT *
FROM Persons
WHERE ROWNUM <=5;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
SQL SELECT TOP Example
The following SQL statement selects the two first records from the
"Customers" table:
Example
SELECT TOP 2 * FROM Customers;
SQL SELECT TOP PERCENT Example
The following SQL statement selects the first 50% of the records from the
"Customers" table:
Example
SELECT TOP 50 PERCENT * FROM Customers;
SQL LIKE Operator
The LIKE operator is used in a WHERE clause to search for a the specified pattern in a column.
The SQL LIKE Operator
The LIKE operator is used to search for a specified pattern in a column.
SQL LIKE Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name LIKE pattern;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
SQL LIKE Operator Examples
The following SQL statement selects all customers with a City starting with
the letter "s":
Example
SELECT * FROM Customers
WHERE City LIKE 's%';
Tip: The "%" sign is used to define wildcards
(missing letters) both before and after the pattern. You will learn more
about wildcards in the next chapter.
The following SQL statement selects all customers with a City ending with
the letter "s":
Example
SELECT * FROM Customers
WHERE City LIKE '%s';
The following SQL statement selects all customers with a Country containing
the pattern "land":
Example
SELECT * FROM Customers
WHERE Country LIKE '%land%';
Using the NOT keyword allows you to select records that do NOT match the
pattern.
The following SQL statement selects all customers with a Country NOT
containing the pattern "land":
Example
SELECT * FROM Customers
WHERE Country NOT LIKE '%land%';
SQL Wildcards
A wildcard character can be used to
substitute for any other character(s) in a string.
SQL
Wildcard Characters
In SQL, wildcard characters are used
with the SQL LIKE operator.
SQL wildcards are used to search for
data within a table.
With SQL, the wildcards are:
Wildcard |
Description |
% |
A substitute for zero or more
characters |
_ |
A substitute for a single
character |
[charlist] |
Sets and ranges of characters to
match |
[^charlist] |
Matches only a character NOT
specified within the brackets |
Demo
Database
In this tutorial, we will use the
well-known Northwind sample database.
Below is a selection from the
"Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
Using
the SQL % Wildcard
The following SQL statement selects
all customers with a City starting with "ber":
Example
SELECT * FROM Customers
WHERE City LIKE 'ber%';
The following SQL statement selects all customers with a City containing the
pattern "es":
Example
SELECT * FROM Customers
WHERE City LIKE '%es%';
Using
the SQL _ Wildcard
The following SQL statement selects
all customers with a City starting with any character, followed by
"merlin":
Example
SELECT * FROM Customers
WHERE City LIKE '_erlin';
The following SQL statement selects
all customers with a City starting with "L", followed by any
character, followed by "n", followed by any character, followed by
"on":
Example
SELECT * FROM Customers
WHERE City LIKE 'L_n_on';
Using
the SQL [charlist] Wildcard
The following SQL statement selects
all customers with a City starting with "b", "s", or
"p":
Example
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
The following SQL statement selects all customers with a City starting with
"a", "b", or "c":
Example
SELECT * FROM Customers
WHERE City LIKE '[a-c]%';
The following SQL statement selects all customers with a City NOT starting with
"b", "s", or "p":
Example
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
SQL IN Operator
The IN Operator
The IN operator allows you to specify multiple values in a WHERE clause.
SQL IN Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name IN (value1,value2,...);
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
IN Operator Example
The following SQL statement selects all customers with a City of
"Paris" or "London":
Example
SELECT * FROM Customers
WHERE City IN ('Paris', 'London');
SQL BETWEEN Operator
The BETWEEN operator is used to select values within a range.
The SQL BETWEEN Operator
The BETWEEN operator selects values within a range. The values can be
numbers, text, or dates.
SQL BETWEEN Syntax
SELECT column_name(s)
FROM table_name
WHERE column_name BETWEEN value1 AND value2;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Products" table:
ProductID |
ProductName |
SupplierID |
CategoryID |
Unit |
Price |
1 |
Chais |
1 |
1 |
10 boxes x 20 bags |
18 |
2 |
Chang |
1 |
1 |
24 - 12 oz bottles |
19 |
3 |
Aniseed Syrup |
1 |
2 |
12 - 550 ml bottles |
10 |
4 |
Chef Anton's Cajun Seasoning |
1 |
2 |
48 - 6 oz jars |
22 |
5 |
Chef Anton's Gumbo Mix |
1 |
2 |
36 boxes |
21.35 |
BETWEEN Operator Example
The following SQL statement selects all products with a price BETWEEN 10 and
20:
Example
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
NOT BETWEEN Operator Example
To display the products outside the range of the previous example, use NOT
BETWEEN:
Example
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
BETWEEN Operator with IN Example
The following SQL statement selects all products with a price BETWEEN 10 and
20, but products with a CategoryID of 1,2, or 3 should not be displayed:
Example
SELECT * FROM Products
WHERE (Price BETWEEN 10 AND 20)
AND NOT CategoryID IN (1,2,3);
BETWEEN Operator with Text Value Example
The following SQL statement selects all products with a ProductName
beginning with any of the letters BETWEEN 'C' and 'M':
Example
SELECT * FROM Products
WHERE ProductName BETWEEN 'C' AND 'M';
NOT BETWEEN Operator with Text Value Example
The following SQL statement selects all products with a ProductName
beginning with any of the letters NOT BETWEEN 'C' and 'M':
Example
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'C' AND 'M';
Sample Table
Below is a selection from the "Orders" table:
OrderID |
CustomerID |
EmployeeID |
OrderDate |
shipped |
10248 |
90 |
5 |
7/4/1996 |
3 |
10249 |
81 |
6 |
7/5/1996 |
1 |
10250 |
34 |
4 |
7/8/1996 |
2 |
10251 |
84 |
3 |
7/9/1996 |
1 |
10252 |
76 |
4 |
7/10/1996 |
2 |
BETWEEN Operator with Date Value Example
The following SQL statement selects all orders with an OrderDate BETWEEN
'04-July-1996' and '09-July-1996':
Example
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;
|
Notice that the BETWEEN operator can produce different results in
different databases! Therefore: Check how your database treats the BETWEEN operator! |
SQL Aliases
SQL aliases are used to temporarily rename a table or a column
heading.
SQL Aliases
SQL aliases are used to give a database table or a column in a table a
temporarily name.
Basically, aliases are created to make column names more readable.
SQL Alias Syntax for Columns
SELECT column_name AS alias_name
FROM table_name;
SQL Alias Syntax for Tables
SELECT column_name(s)
FROM table_name AS alias_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
And a selection from the "Orders" table:
OrderID |
CustomerID |
EmployeeID |
OrderDate |
ShipperID |
10643 |
1 |
6 |
1997-08-25 |
1 |
10644 |
88 |
3 |
1997-08-25 |
2 |
10645 |
34 |
4 |
1997-08-26 |
1 |
Alias Example for Table Columns
The following SQL statement specifies two aliases, one for the CustomerName
column and one for the ContactName column. Tip: It requires
double quotation marks or square brackets if the column name contains spaces:
Example
SELECT CustomerName AS Customer, ContactName AS [Contact
Person]
FROM Customers;
In the following SQL statement, we combine four columns (Address, City,
PostalCode, and Country) and create an alias named "Address":
Example
SELECT CustomerName, Address+', '+City+', '+PostalCode+',
'+Country AS Address
FROM Customers;
Alias Example for Tables
The following SQL statement selects all the orders from the customer "Alfreds
Futterkiste". We use the "Customers" and "Orders"
tables, and give them the table aliases of "c" and "o"
respectively (Here we have used aliases to make the SQL shorter):
Example
SELECT o.OrderID, o.OrderDate, c.CustomerName
FROM Customers AS c, Orders AS o
WHERE c.CustomerName='Alfreds Futterkiste';
The same SQL statement without aliases:
Example
SELECT Orders.OrderID, Orders.OrderDate,
Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName='Alfreds Futterkiste';
Aliases can be useful when:
- There are
more than one table involved in a query
- Functions
are used in the query
- Column
names are big or not very readable
- Two or
more columns are combined together
SQL Joins
SQL joins are used to combine rows
from two or more tables.
SQL
JOIN
An SQL JOIN clause is used to
combine rows from two or more tables, based on a common field between them.
The most common type of join is: SQL
INNER JOIN (simple join). An SQL INNER JOIN return all rows from multiple
tables where the join condition is met.
Let's look at a selection from the
"Orders" table:
OrderID |
CustomerID |
OrderDate |
10308 |
2 |
1996-09-18 |
10309 |
37 |
1996-09-19 |
10310 |
77 |
1996-09-20 |
Then, have a look at a selection
from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mexico |
Notice that the
"CustomerID" column in the "Orders" table refers to the
customer in the "Customers" table. The relationship between the two
tables above is the "CustomerID" column.
Then, if we run the following SQL
statement (that contains an INNER JOIN):
Example
SELECT Orders.OrderID,
Customers.CustomerName, Orders.OrderDate
FROM Orders
INNER JOIN Customers
ON Orders.CustomerID=Customers.CustomerID;
it will produce something like this:
OrderID |
CustomerName |
OrderDate |
10308 |
Ana Trujillo Emparedados y helados |
9/18/1996 |
10365 |
Antonio Moreno Taquería |
11/27/1996 |
10383 |
Around the Horn |
12/16/1996 |
10355 |
Around the Horn |
11/15/1996 |
10278 |
Berglunds snabbköp |
8/12/1996 |
Different
SQL JOINs
Before we continue with examples, we
will list the types the different SQL JOINs you can use:
- INNER JOIN:
Returns all rows when there is at least one match in BOTH tables
- LEFT JOIN:
Return all rows from the left table, and the matched rows from the right
table
- RIGHT JOIN:
Return all rows from the right table, and the matched rows from the left
table
- FULL JOIN:
Return all rows when there is a match in ONE of the tables
SQL INNER JOIN Keyword
SQL INNER JOIN Keyword
The INNER JOIN keyword selects all rows from both tables as long as there is
a match between the columns in both tables.
SQL INNER JOIN Syntax
SELECT column_name(s)
FROM table1
INNER JOIN table2
ON table1.column_name=table2.column_name;
or:
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
PS! INNER JOIN is the same as JOIN.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
And a selection from the "Orders" table:
OrderID |
CustomerID |
EmployeeID |
OrderDate |
ShipperID |
10308 |
2 |
7 |
1996-09-18 |
3 |
10309 |
37 |
3 |
1996-09-19 |
1 |
10310 |
77 |
8 |
1996-09-20 |
2 |
SQL INNER JOIN Example
The following SQL statement will return all customers with orders:
Example
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
Note: The INNER JOIN keyword selects all rows
from both tables as long as there is a match between the columns. If there are
rows in the "Customers" table that do not have matches in
"Orders", these customers will NOT be listed.
SQL LEFT JOIN Keyword
SQL LEFT JOIN Keyword
The LEFT JOIN keyword returns all rows from the left table (table1), with
the matching rows in the right table (table2). The result is NULL on the right
side when there is no match.
SQL LEFT JOIN Syntax
SELECT column_name(s)
FROM table1
LEFT JOIN table2
ON table1.column_name=table2.column_name;
or:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
PS! In some databases LEFT JOIN is called LEFT OUTER JOIN.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
And a selection from the "Orders" table:
OrderID |
CustomerID |
EmployeeID |
OrderDate |
ShipperID |
10308 |
2 |
7 |
1996-09-18 |
3 |
10309 |
37 |
3 |
1996-09-19 |
1 |
10310 |
77 |
8 |
1996-09-20 |
2 |
SQL LEFT JOIN Example
The following SQL statement will return all customers, and any orders they
might have:
Example
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
Note: The LEFT JOIN keyword returns all the rows
from the left table (Customers), even if there are no matches in the right
table (Orders).
SQL FULL OUTER JOIN Keyword
SQL FULL OUTER JOIN Keyword
The FULL OUTER JOIN keyword returns all rows from the left table (table1)
and from the right table (table2).
The FULL OUTER JOIN keyword combines the result of both LEFT and RIGHT
joins.
SQL FULL OUTER JOIN Syntax
SELECT column_name(s)
FROM table1
FULL OUTER JOIN table2
ON table1.column_name=table2.column_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
And a selection from the "Orders" table:
OrderID |
CustomerID |
EmployeeID |
OrderDate |
ShipperID |
10308 |
2 |
7 |
1996-09-18 |
3 |
10309 |
37 |
3 |
1996-09-19 |
1 |
10310 |
77 |
8 |
1996-09-20 |
2 |
SQL FULL OUTER JOIN Example
The following SQL statement selects all customers and all orders:
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
FULL OUTER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
A selection from the result set may look like this:
CustomerName |
OrderID |
Alfreds Futterkiste |
|
Ana Trujillo Emparedados y helados |
10308 |
Antonio Moreno Taquería |
10365 |
|
10382 |
|
10351 |
Note: The FULL OUTER JOIN keyword returns all
the rows from the left table (Customers), and all the rows from the right table
(Orders). If there are rows in "Customers" that do not have matches
in "Orders", or if there are rows in "Orders" that do not
have matches in "Customers", those rows will be listed as well.
SQL UNION Operator
The SQL UNION operator combines two or more SELECT statements.
The SQL UNION Operator
The UNION operator is used to combine the result-set of two or more SELECT statements.
Notice that each SELECT statement within the UNION must have the same number
of columns. The columns must also have similar data types. Also, the columns in
each SELECT statement must be in the same order.
SQL UNION Syntax
SELECT column_name(s) FROM table_name1
UNION
SELECT column_name(s) FROM table_name2;
Note: The UNION operator selects only distinct values by default. To
allow duplicate values, use UNION ALL.
SQL UNION ALL Syntax
SELECT column_name(s) FROM table_name1
UNION ALL
SELECT column_name(s) FROM table_name2;
PS: The column names in the result-set of a UNION are always equal to
the column names in the first SELECT statement in the UNION.
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
And a selection from the "Suppliers" table:
SupplierID |
SupplierName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Exotic Liquid |
Charlotte Cooper |
49 Gilbert St. |
Londona |
EC1 4SD |
UK |
2 |
New Orleans Cajun Delights |
Shelley Burke |
P.O. Box 78934 |
New Orleans |
70117 |
USA |
3 |
Grandma Kelly's Homestead |
Regina Murphy |
707 Oxford Rd. |
Ann Arbor |
48104 |
USA |
SQL UNION Example
The following SQL statement selects all the different
cities from the "Customers" and "Suppliers" tables:
Example
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers;
Note: This command cannot be used to list all cities from the two
tables. In the example above several customers and suppliers share the same
city, but each city will only be listed once. The UNION command selects only
distinct values.
SQL UNION ALL Example
The following SQL statement selects all the
cities from the "Customers" and "Suppliers" tables:
Example
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
SQL CREATE DATABASE Statement
The CREATE DATABASE Statement
The CREATE DATABASE statement is used to create a database.
SQL CREATE DATABASE Syntax
CREATE DATABASE database_name
CREATE DATABASE Example
Now we want to create a database called "my_db".
We use the following CREATE DATABASE statement:
CREATE DATABASE my_db
Database tables can be added with the CREATE TABLE statement.
SQL CREATE TABLE Statement
The CREATE TABLE Statement
The CREATE TABLE statement is used to create a table in a database.
SQL CREATE TABLE Syntax
CREATE TABLE table_name
(
column_name1 data_type,
column_name2 data_type,
column_name3 data_type,
....
)
The data type specifies what type of data the column can hold. For a
complete reference of all the data types available in MS Access, MySQL, and SQL
Server
CREATE TABLE Example
Now we want to create a table called "Persons" that contains five
columns: P_Id, LastName, FirstName, Address, and City.
We use the following CREATE TABLE statement:
CREATE TABLE Persons
(
P_Id int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
The P_Id column is of type int and will hold a number. The LastName,
FirstName, Address, and City columns are of type varchar with a maximum length
of 255 characters.
SQL Constraints
SQL
Constraints
Constraints are used to limit the
type of data that can go into a table.
Constraints can be specified when a the table is created (with the CREATE TABLE statement) or after the table is
created (with the ALTER TABLE statement).
We will focus on the following
constraints:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
SQL NOT NULL Constraint
By default, a table column can hold
NULL values.
SQL
NOT NULL Constraint
The NOT NULL constraint enforces a
column to NOT accept NULL values.
The NOT NULL constraint enforces a
field to always contain a value. This means that you cannot insert a new
record, or update a record without adding a value to this field.
The following SQL enforces the
"P_Id" column and the "LastName" 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)
)
SQL UNIQUE Constraint
SQL
UNIQUE Constraint
The UNIQUE constraint uniquely
identifies each record in a database table.
The UNIQUE and PRIMARY KEY
constraints 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.
Note that you can have many UNIQUE
constraints per table, but only one PRIMARY KEY constraint per table.
SQL
UNIQUE Constraint on CREATE TABLE
The following SQL creates a UNIQUE
constraint on the "P_Id" column when the "Persons" table is
created:
MySQL:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
UNIQUE (P_Id)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL UNIQUE,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
To allow naming of a UNIQUE
constraint, and for defining a UNIQUE constraint on multiple columns, use the
following SQL syntax:
MySQL / SQL Server / Oracle / MS
Access:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
)
SQL
UNIQUE Constraint on ALTER TABLE
To create a UNIQUE constraint on the
"P_Id" column when the table is already created, use the following
SQL:
MySQL / SQL Server / Oracle / MS
Access:
ALTER TABLE Persons
ADD UNIQUE (P_Id)
To allow naming of a UNIQUE
constraint, and for defining a UNIQUE constraint on multiple columns, use the
following SQL syntax:
MySQL / SQL Server / Oracle / MS
Access:
ALTER TABLE Persons
ADD CONSTRAINT uc_PersonID UNIQUE (P_Id,LastName)
To
DROP a UNIQUE Constraint
To drop a UNIQUE constraint, use the
following SQL:
MySQL:
ALTER TABLE Persons
DROP INDEX uc_PersonID
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT uc_PersonID
SQL PRIMARY KEY Constraint
SQL
PRIMARY KEY Constraint
The PRIMARY KEY constraint uniquely
identifies each record in a database table.
Primary keys must contain unique
values.
A primary key column cannot contain
NULL values.
Each table should have a primary
key and each table can have only ONE primary key.
SQL
PRIMARY KEY Constraint on CREATE TABLE
The following SQL creates a PRIMARY
KEY on the "P_Id" column when the "Persons" table is
created:
MySQL:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (P_Id)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL PRIMARY KEY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
To allow naming of a PRIMARY KEY
constraint, and for defining a PRIMARY KEY constraint on multiple columns, use
the following SQL syntax:
MySQL / SQL Server / Oracle / MS
Access:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
)
Note: In the example above there is only ONE PRIMARY KEY
(pk_PersonID). However, the value of the pk_PersonID is made up of two columns (P_Id
and LastName).
SQL
PRIMARY KEY Constraint on ALTER TABLE
To create a PRIMARY KEY constraint
on the "P_Id" column when the table is already created, use the
following SQL:
MySQL / SQL Server / Oracle / MS
Access:
ALTER TABLE Persons
ADD PRIMARY KEY (P_Id)
To allow naming of a PRIMARY KEY
constraint, and for defining a PRIMARY KEY constraint on multiple columns, use
the following SQL syntax:
MySQL / SQL Server / Oracle / MS
Access:
ALTER TABLE Persons
ADD CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
Note: If you use the ALTER TABLE statement to add a primary key,
the primary key column(s) must already have been declared to not contain NULL
values (when the table was first created).
To
DROP a PRIMARY KEY Constraint
To drop a PRIMARY KEY constraint,
use the following SQL:
MySQL:
ALTER TABLE Persons
DROP PRIMARY KEY
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT pk_PersonID
SQL FOREIGN KEY Constraint
SQL
FOREIGN KEY Constraint
A FOREIGN KEY in one table points to
a PRIMARY KEY in another table.
Let's illustrate the foreign key
with an example. Look at the following two tables:
The "Persons" table:
P_Id |
LastName |
FirstName |
Address |
City |
1 |
Hansen |
Ola |
Timoteivn 10 |
Sandnes |
2 |
Svendson |
Tove |
Borgen 23 |
Sandnes |
3 |
Pettersen |
Kari |
Storage 20 |
Stavanger |
The "Orders" table:
O_Id |
OrderNo |
P_Id |
1 |
77895 |
3 |
2 |
44678 |
3 |
3 |
22456 |
2 |
4 |
24562 |
1 |
Note that the "P_Id"
column in the "Orders" table points to the "P_Id" column in
the "Persons" table.
The "P_Id" column in the The "Persons" table is the PRIMARY KEY in the "Persons" table.
The "P_Id" column in the The "Orders" table is a FOREIGN KEY in the "Orders" table.
The FOREIGN KEY constraint is used
to prevent actions that would destroy links between tables.
The FOREIGN KEY constraint also
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.
SQL
FOREIGN KEY Constraint on CREATE TABLE
The following SQL creates a FOREIGN
KEY on the "P_Id" column when the "Orders" table is
created:
MySQL:
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)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)
To allow naming of a FOREIGN KEY
constraint, and for defining a FOREIGN KEY constraint on multiple columns, use
the following SQL syntax:
MySQL / SQL Server / Oracle / MS
Access:
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)
SQL
FOREIGN KEY Constraint on ALTER TABLE
To create a FOREIGN KEY constraint
on the "P_Id" column when the "Orders" table is already
created, use the following SQL:
MySQL / SQL Server / Oracle / MS
Access:
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
To allow naming of a FOREIGN KEY
constraint, and for defining a FOREIGN KEY constraint on multiple columns, use
the following SQL syntax:
MySQL / SQL Server / Oracle / MS
Access:
ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
To
DROP a FOREIGN KEY Constraint
To drop a FOREIGN KEY constraint,
use the following SQL:
MySQL:
ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders
SQL Server / Oracle / MS Access:
ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders
SQL CHECK Constraint
SQL
CHECK Constraint
The CHECK constraint is used to
limit the value range that can be placed in a column.
If you define a CHECK constraint on
a single column it allows only certain values for this column.
If you define a CHECK constraint on
a table it can limit the values in certain columns based on values in other
columns in the row.
SQL
CHECK Constraint on CREATE TABLE
The following SQL creates a CHECK
constraint on the "P_Id" column when the "Persons" table is
created. The CHECK constraint specifies that the column "P_Id" must
only include integers greater than 0.
MySQL:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CHECK (P_Id>0)
)
SQL Server / Oracle / MS Access:
CREATE TABLE Persons
(
P_Id int NOT NULL CHECK (P_Id>0),
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
To allow naming of a CHECK
constraint, and for defining a CHECK constraint on multiple columns, use the
following SQL syntax:
MySQL / SQL Server / Oracle / MS
Access:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
)
SQL
CHECK Constraint on ALTER TABLE
To create a CHECK constraint on the
"P_Id" column when the table is already created, use the following
SQL:
MySQL / SQL Server / Oracle / MS
Access:
ALTER TABLE Persons
ADD CHECK (P_Id>0)
To allow naming of a CHECK
constraint, and for defining a CHECK constraint on multiple columns, use the
following SQL syntax:
MySQL / SQL Server / Oracle / MS
Access:
ALTER TABLE Persons
ADD CONSTRAINT chk_Person CHECK (P_Id>0 AND City='Sandnes')
To
DROP a CHECK Constraint
To drop a CHECK constraint, use the
following SQL:
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
DROP CONSTRAINT chk_Person
MySQL:
ALTER TABLE Persons
DROP CHECK chk_Person
SQL DEFAULT Constraint
SQL
DEFAULT Constraint
The DEFAULT constraint is used to
insert a default value into a column.
The default value will be added to
all new records, if no other value is specified.
SQL
DEFAULT Constraint on CREATE TABLE
The following SQL creates a DEFAULT
constraint on the "City" column when the "Persons" table is
created:
My SQL / SQL Server / Oracle / MS
Access:
CREATE TABLE Persons
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255) DEFAULT 'Sandnes'
)
The DEFAULT constraint can also be
used to insert system values, by using functions like GETDATE():
CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
OrderDate date DEFAULT GETDATE()
)
SQL
DEFAULT Constraint on ALTER TABLE
To create a DEFAULT constraint on
the "City" column when the table is already created, use the
following SQL:
MySQL:
ALTER TABLE Persons
ALTER City SET DEFAULT 'SANDNES'
SQL Server / MS Access:
ALTER TABLE Persons
ALTER COLUMN City SET DEFAULT 'SANDNES'
Oracle:
ALTER TABLE Persons
MODIFY City DEFAULT 'SANDNES'
To
DROP a DEFAULT Constraint
To drop a DEFAULT constraint, use
the following SQL:
MySQL:
ALTER TABLE Persons
ALTER City DROP DEFAULT
SQL Server / Oracle / MS Access:
ALTER TABLE Persons
ALTER COLUMN City DROP DEFAULT
SQL ALTER TABLE Statement
The ALTER TABLE Statement
The ALTER TABLE statement is used to add, delete, or modify columns in an
existing table.
SQL ALTER TABLE Syntax
To add a column in a table, use the following syntax:
ALTER TABLE table_name
ADD column_name datatype
To delete a column in a table, use the following syntax (notice that some database
systems don't allow deleting a column):
ALTER TABLE table_name
DROP COLUMN column_name
To change the data type of a column in a table, use the following syntax:
SQL Server / MS Access:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
My SQL / Oracle:
ALTER TABLE table_name
MODIFY column_name datatype
SQL ALTER TABLE Example
Look at the "Persons" table:
P_Id |
LastName |
FirstName |
Address |
City |
1 |
Hansen |
Ola |
Timoteivn 10 |
Sandnes |
2 |
Svendson |
Tove |
Borgvn 23 |
Sandnes |
3 |
Pettersen |
Kari |
Storgt 20 |
Stavanger |
Now we want to add a column named "DateOfBirth" in the
"Persons" table.
We use the following SQL statement:
ALTER TABLE Persons
ADD DateOfBirth date
Notice that the new column, "DateOfBirth", is of type date and is
going to hold a date. The data type specifies what type of data the column can
hold. For a complete reference of all the data types available in MS Access,
MySQL and SQL ServerThe "Persons" table will now like this:
P_Id |
LastName |
FirstName |
Address |
City |
DateOfBirth |
1 |
Hansen |
Ola |
Timoteivn 10 |
Sandnes |
|
2 |
Svendson |
Tove |
Borgen 23 |
Sandnes |
|
3 |
Pettersen |
Kari |
Storage 20 |
Stavanger |
|
Change Data Type Example
Now we want to change the data type of the column named
"DateOfBirth" in the "Persons" table.
We use the following SQL statement:
ALTER TABLE Persons
ALTER COLUMN DateOfBirth year
Notice that the "DateOfBirth" column is now of type year and is
going to hold a year in a two-digit or four-digit format.
DROP COLUMN Example
Next, we want to delete the column named "DateOfBirth" in the "Persons"
table.
We use the following SQL statement:
ALTER TABLE Persons
DROP COLUMN DateOfBirth
The "Persons" table will now like this:
P_Id |
LastName |
FirstName |
Address |
City |
1 |
Hansen |
Ola |
Timoteivn 10 |
Sandnes |
2 |
Svendson |
Tove |
Borgen 23 |
Sandnes |
3 |
Pettersen |
Kari |
Story 20 |
Stavanger |
SQL AUTO INCREMENT Field
Auto-increment allows a unique
number to be generated when a new record is inserted into a table.
AUTO
INCREMENT a Field
Very often we would like the value
of the primary key field to be created automatically every time a new record is
inserted.
We would like to create an auto-increment field in a table.
Syntax
for MySQL
The following SQL statement defines
the "P_Id" column to be an auto-increment primary key field in the
"Persons" table:
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)
)
MySQL uses the AUTO_INCREMENT
keyword to perform an auto-increment feature.
By default, the starting value for
AUTO_INCREMENT is 1, and it will increment by 1 for each new record.
To let the AUTO_INCREMENT sequence
start with another value, use the following SQL statement:
ALTER TABLE Persons
AUTO_INCREMENT=100
To insert a new record into the
"Persons" table, we will not have to specify a value for the
"P_Id" column (a unique value will be added automatically):
INSERT INTO Persons
(FirstName,LastName)
VALUES ('Lars','Monsen')
The SQL statement above would insert
a new record into the "Persons" table. The "P_Id" column
would be assigned a unique value. The "FirstName" column would be set
to "Lars" and the "LastName" column would be set to
"Monsen".
Syntax
for SQL Server
The following SQL statement defines
the "P_Id" column to be an auto-increment primary key field in the
"Persons" table:
CREATE TABLE Persons
(
P_Id int PRIMARY KEY IDENTITY,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
The MS SQL Server uses the IDENTITY
keyword to perform an auto-increment feature.
By default, the starting value for
IDENTITY is 1, and it will increment by 1 for each new record.
To specify that the "P_Id" the column should start at value 10 and increment by 5, change the identity to
IDENTITY(10,5).
To insert a new record into the
"Persons" table, we will not have to specify a value for the
"P_Id" column (a unique value will be added automatically):
INSERT INTO Persons
(FirstName,LastName)
VALUES ('Lars','Monsen')
The SQL statement above would insert
a new record into the "Persons" table. The "P_Id" column
would be assigned a unique value. The "FirstName" column would be set
to "Lars" and the "LastName" column would be set to
"Monsen".
Syntax
for Access
The following SQL statement defines
the "P_Id" column to be an auto-increment primary key field in the
"Persons" table:
CREATE TABLE Persons
(
P_Id PRIMARY KEY AUTOINCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
MS Access uses the AUTOINCREMENT
keyword to perform an auto-increment feature.
By default, the starting value for
AUTOINCREMENT is 1, and it will increment by 1 for each new record.
To specify that the "P_Id" the column should start at value 10 and increment by 5, change the autoincrement to
AUTOINCREMENT(10,5).
To insert a new record into the
"Persons" table, we will not have to specify a value for the
"P_Id" column (a unique value will be added automatically):
INSERT INTO Persons
(FirstName,LastName)
VALUES ('Lars','Monsen')
The SQL statement above would insert
a new record into the "Persons" table. The "P_Id" column
would be assigned a unique value. The "FirstName" column would be set
to "Lars" and the "LastName" column would be set to
"Monsen".
Syntax
for Oracle
In Oracle, the code is a little bit
more tricky.
You will have to create an
auto-increment field with the sequence object (this object generates a number
sequence).
Use the following CREATE SEQUENCE
syntax:
CREATE SEQUENCE seq_person
MIN VALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10
The code above creates a sequence of an object called seq_person, that starts with 1 and will increment by 1. It will
also cache up to 10 values for performance. The cache option specifies how many
sequence values will be stored in memory for faster access.
To insert a new record into the
"Persons" table, we will have to use the nextval function (this
function retrieves the next value from seq_person sequence):
INSERT INTO Persons
(P_Id,FirstName,LastName)
VALUES (seq_person.nextval,'Lars','Monsen')
The SQL statement above would insert
a new record into the "Persons" table. The "P_Id" column
would be assigned the next number from the seq_person sequence. The
"FirstName" column would be set to "Lars" and the
"LastName" column would be set to "Monsen".
SQL Views
A view is a virtual table.
This chapter shows how to create, update, and delete a view.
SQL CREATE VIEW Statement
In SQL, a view is a virtual table based on the result-set of an SQL
statement.
A view contains rows and columns, just like a real table. The fields in a
view are fields from one or more real tables in the database.
You can add SQL functions, WHERE, and JOIN statements to a view and present
the data as if the data were coming from one single table.
SQL CREATE VIEW Syntax
CREATE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Note: A view always shows up-to-date data! The database engine
recreates the data, using the view's SQL statement, every time a user queries a
view.
SQL CREATE VIEW Examples
If you have the Northwind database you can see that it has several views
installed by default.
The view "Current Product List" lists all active products
(products that are not discontinued) from the "Products" table. The view is created with the following SQL:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName
FROM Products
WHERE Discontinued=No
We can query the view above as follows:
SELECT * FROM [Current Product List]
Another view in the Northwind sample database selects every product in the
"Products" table with a unit price higher than the average unit
price:
CREATE VIEW [Products Above Average Price] AS
SELECT ProductName,UnitPrice
FROM Products
WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products)
We can query the view above as follows:
SELECT * FROM [Products Above Average Price]
Another view in the Northwind database calculates the total sale for each
category in 1997. Note that this view selects its data from another view called
"Product Sales for 1997":
CREATE VIEW [Category Sales For 1997] AS
SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales
FROM [Product Sales for 1997]
GROUP BY CategoryName
We can query the view above as follows:
SELECT * FROM [Category Sales For 1997]
We can also add a condition to the query. Now we want to see the total sale
only for the category "Beverages":
SELECT * FROM [Category Sales For 1997]
WHERE CategoryName='Beverages'
SQL Updating a View
You can update a view by using the following syntax:
SQL CREATE OR REPLACE VIEW Syntax
CREATE OR REPLACE VIEW view_name AS
SELECT column_name(s)
FROM table_name
WHERE condition
Now we want to add the "Category" column to the "Current
Product List" view. We will update the view with the following SQL:
CREATE VIEW [Current Product List] AS
SELECT ProductID,ProductName,Category
FROM Products
WHERE Discontinued=No
SQL Dropping a View
You can delete a view with the DROP VIEW command.
SQL DROP VIEW Syntax
DROP VIEW view_name
SQL NULL Values
NULL values represent missing
unknown data.
By default, a table column can hold
NULL values.
This chapter will explain the IS
NULL and IS NOT NULL operators.
SQL
NULL Values
If a column in a table is optional,
we can insert a new record or update an existing record without adding a value
to this column. This means that the field will be saved with a NULL value.
NULL values are treated differently
from other values.
NULL is used as a placeholder for
unknown or inapplicable values.
Note: It is not
possible to compare NULL and 0; they are not equivalent.
SQL
Working with NULL Values
Look at the following
"Persons" table:
P_Id |
LastName |
FirstName |
Address |
City |
1 |
Hansen |
Ola |
|
Sandnes |
2 |
Svendson |
Tove |
Borgen 23 |
Sandnes |
3 |
Pettersen |
Kari |
|
Stavanger |
Suppose that the "Address"
column in the "Persons" table is optional. This means that if we insert
a record with no value for the "Address" column, the The "Address" column will be saved with a NULL value.
How can we test for NULL values?
It is not possible to test for NULL
values with comparison operators, such as =, <, or <>.
We will have to use the IS NULL and
IS NOT NULL operators instead.
SQL
IS NULL
How do we select only the records
with NULL values in the "Address" column?
We will have to use the IS NULL
operator:
SELECT LastName,FirstName,Address
FROM Persons
WHERE Address IS NULL
The result-set will look like this:
LastName |
FirstName |
Address |
Hansen |
Ola |
|
Pettersen |
Kari |
|
Tip: Always
use IS NULL to look for NULL values.
SQL
IS NOT NULL
How do we select only the records
with no NULL values in the "Address" column?
We will have to use the IS NOT NULL
operator:
SELECT LastName,FirstName,Address
FROM Persons
WHERE Address IS NOT NULL
The result-set will look like this:
LastName |
FirstName |
Address |
Svendson |
Tove |
Borgen 23 |
Iwe will look at
the ISNULL(), NVL(), IFNULL() and COALESCE() functions.
SQL NULL Functions
SQL
ISNULL(), NVL(), IFNULL() and COALESCE() Functions
Look at the following
"Products" table:
P_Id |
ProductName |
UnitPrice |
UnitsInStock |
UnitsOnOrder |
1 |
Jarlsberg |
10.45 |
16 |
15 |
2 |
Mascarpone |
32.56 |
23 |
|
3 |
Gorgonzola |
15.67 |
9 |
20 |
Suppose that the "UnitsOnOrder" column is optional, and may contain NULL values.
We have the following SELECT
statement:
SELECT
ProductName,UnitPrice*(UnitsInStock+UnitsOnOrder)
FROM Products
In the example above, if any of the "UnitsOnOrder"
values are NULL, the result is NULL.
Microsoft's ISNULL() function is
used to specify how we want to treat NULL values.
The NVL(), IFNULL(), and COALESCE()
functions can also be used to achieve the same result.
In this case we want NULL values to
be zero.
Below, if "UnitsOnOrder"
is NULL it will not harm the calculation, because ISNULL() returns a zero if
the value is NULL:
SQL Server / MS Access
SELECT
ProductName,UnitPrice*(UnitsInStock+ISNULL(UnitsOnOrder,0))
FROM Products
Oracle
Oracle does not have an ISNULL()
function. However, we can use the NVL() function to achieve the same result:
SELECT
ProductName,UnitPrice*(UnitsInStock+NVL(UnitsOnOrder,0))
FROM Products
MySQL
MySQL does have an ISNULL()
function. However, it works a little bit different from Microsoft's ISNULL()
function.
In MySQL we can use the IFNULL()
function, like this:
SELECT
ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
or we can use the COALESCE()
function, like this:
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
SQL General Data Types
A data type defines what kind of
value a column can contain.
SQL
General Data Types
Each column in a database table is
required to have a name and a data type.
SQL developers have to decide what
types of data will be stored inside each and every table column when creating a
SQL table. The data type is a label and a guideline for SQL to understand what
type of data is expected inside of each column, and it also identifies how SQL
will interact with the stored data.
The following table lists the
general data types in SQL:
Data
type |
Description |
CHARACTER(n) |
Character string. Fixed-length n |
VARCHAR(n) or |
Character string. Variable length.
Maximum length n |
BINARY(n) |
Binary string. Fixed-length n |
BOOLEAN |
Stores TRUE or FALSE values |
VARBINARY(n) or |
Binary string. Variable length.
Maximum length n |
INTEGER(p) |
Integer numerical (no decimal).
Precision p |
SMALLINT |
Integer numerical (no decimal).
Precision 5 |
INTEGER |
Integer numerical (no decimal).
Precision 10 |
BIGINT |
Integer numerical (no decimal).
Precision 19 |
DECIMAL(p,s) |
Exact numerical, precision p,
scale s. Example: decimal(5,2) is a number that has 3 digits before the
decimal and 2 digits after the decimal |
NUMERIC(p,s) |
Exact numerical, precision p,
scale s. (Same as DECIMAL) |
FLOAT(p) |
Approximate numerical, mantissa
precision p. A floating number in base 10 exponential notation. The size the argument for this type consists of a single number specifying the minimum
precision |
REAL |
Approximate numerical, mantissa
precision 7 |
FLOAT |
Approximate numerical, mantissa
precision 16 |
DOUBLE PRECISION |
Approximate numerical, mantissa
precision 16 |
DATE |
Stores year, month, and day values |
TIME |
Stores hour, minute, and second
values |
TIMESTAMP |
Stores year, month, day, hour,
minute, and second values |
INTERVAL |
Composed of a number of integers
fields, representing a period of time, depending on the type of interval |
ARRAY |
A set-length and ordered collection
of elements |
MULTISET |
A variable-length and unordered
collection of elements |
XML |
Stores XML data |
SQL
Data Type Quick Reference
However, different databases offer
different choices for the data type definition.
The following table shows some of
the common names of data types between the various database platforms:
Data
type |
Access |
SQLServer |
Oracle |
MySQL |
PostgreSQL |
boolean |
Yes/No |
Bit |
Byte |
N/A |
Boolean |
integer |
Number (integer) |
Int |
Number |
Int |
Int |
float |
Number (single) |
Float |
Number |
Float |
Numeric |
currency |
Currency |
Money |
N/A |
N/A |
Money |
string (fixed) |
N/A |
Char |
Char |
Char |
Char |
string (variable) |
Text (<256) |
Varchar |
Varchar |
Varchar |
Varchar |
binary object |
OLE Object Memo |
Binary (fixed up to 8K) |
Long |
Blob |
Binary |
SQL
Server Data Types
String types:
Data
type |
Description |
Storage |
char(n) |
Fixed width character string.
Maximum 8,000 characters |
Defined width |
varchar(n) |
Variable width character string.
Maximum 8,000 characters |
2 bytes + number of chars |
varchar(max) |
Variable width character string.
Maximum 1,073,741,824 characters |
2 bytes + number of chars |
text |
Variable width character string.
Maximum 2GB of text data |
4 bytes + number of chars |
nchar |
Fixed width Unicode string.
Maximum 4,000 characters |
Defined width x 2 |
nvarchar |
Variable width Unicode string.
Maximum 4,000 characters |
|
nvarchar(max) |
Variable width Unicode string.
Maximum 536,870,912 characters |
|
ntext |
Variable width Unicode string.
Maximum 2GB of text data |
|
bit |
Allows 0, 1, or NULL |
|
binary(n) |
Fixed width binary string. Maximum
8,000 bytes |
|
varbinary |
Variable width binary string.
Maximum 8,000 bytes |
|
varbinary(max) |
Variable width binary string.
Maximum 2GB |
|
image |
Variable width binary string.
Maximum 2GB |
|
Number types:
Data
type |
Description |
Storage |
tinyint |
Allows whole numbers from 0 to 255 |
1 byte |
smallint |
Allows whole numbers between
-32,768 and 32,767 |
2 bytes |
int |
Allows whole numbers between
-2,147,483,648 and 2,147,483,647 |
4 bytes |
bigint |
Allows whole numbers between
-9,223,372,036,854,775,808 and 9,223,372,036,854,775,807 |
8 bytes |
decimal(p,s) |
Fixed precision and scale numbers.
Allows numbers from -10^38 +1 to
10^38 –1. The p parameter indicates the
maximum total number of digits that can be stored (both to the left and to
the right of the decimal point). p must be a value from 1 to 38. Default is
18. The s parameter indicates the
maximum number of digits stored to the right of the decimal point. s must be
a value from 0 to p. Default value is 0 |
5-17 bytes |
numeric(p,s) |
Fixed precision and scale numbers.
Allows numbers from -10^38 +1 to
10^38 –1. The p parameter indicates the
maximum total number of digits that can be stored (both to the left and to
the right of the decimal point). p must be a value from 1 to 38. Default is
18. The s parameter indicates the
maximum number of digits stored to the right of the decimal point. s must be
a value from 0 to p. Default value is 0 |
5-17 bytes |
smallmoney |
Monetary data from -214,748.3648
to 214,748.3647 |
4 bytes |
money |
Monetary data from
-922,337,203,685,477.5808 to 922,337,203,685,477.5807 |
8 bytes |
float(n) |
Floating precision number data
from -1.79E + 308 to 1.79E + 308. The n parameter indicates whether
the field should hold 4 or 8 bytes. float(24) holds a 4-byte field and
float(53) holds an 8-byte field. Default value of n is 53. |
4 or 8 bytes |
real |
Floating precision number data
from -3.40E + 38 to 3.40E + 38 |
4 bytes |
Date types:
Data
type |
Description |
Storage |
datetime |
From January 1, 1753 to December
31, 9999 with an accuracy of 3.33 milliseconds |
8 bytes |
datetime2 |
From January 1, 0001 to December
31, 9999 with an accuracy of 100 nanoseconds |
6-8 bytes |
smalldatetime |
From January 1, 1900 to June 6,
2079 with an accuracy of 1 minute |
4 bytes |
date |
Store a date only. From January 1,
0001 to December 31, 9999 |
3 bytes |
time |
Store a time only to an accuracy
of 100 nanoseconds |
3-5 bytes |
datetimeoffset |
The same as datetime2 with the
addition of a time zone offset |
8-10 bytes |
timestamp |
Stores a unique number that gets
updated every time a row gets created or modified. The timestamp value is
based upon an internal clock and does not correspond to real time. Each table
may have only one timestamp variable |
|
Other data types:
Data
type |
Description |
sql_variant |
Stores up to 8,000 bytes of data
of various data types, except text, ntext, and timestamp |
uniqueidentifier |
Stores a globally unique
identifier (GUID) |
xml |
Stores XML formatted data. Maximum
2GB |
cursor |
Stores a reference to a cursor
used for database operations |
table |
Stores a result-set for later
processing |
SQL Functions
SQL has many built-in functions for
performing calculations on data.
SQL
Aggregate Functions
SQL aggregate functions return a single
value, calculated from values in a column.
Useful aggregate functions:
- 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
Scalar functions
SQL scalar functions return a single
value, based on the input value.
Useful scalar functions:
- UCASE() - Converts a field to upper case
- LCASE() - Converts a field to lower case
- MID() - Extract 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
SQL AVG() Function
The AVG() Function
The AVG() function returns the average value of a numeric column.
SQL AVG() Syntax
SELECT AVG(column_name) FROM table_name
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Products" table:
ProductID |
ProductName |
SupplierID |
CategoryID |
Unit |
Price |
1 |
Chais |
1 |
1 |
10 boxes x 20 bags |
18 |
2 |
Chang |
1 |
1 |
24 - 12 oz bottles |
19 |
3 |
Aniseed Syrup |
1 |
2 |
12 - 550 ml bottles |
10 |
4 |
Chef Anton's Cajun Seasoning |
2 |
2 |
48 - 6 oz jars |
21.35 |
5 |
Chef Anton's Gumbo Mix |
2 |
2 |
36 boxes |
25 |
SQL AVG() Example
The following SQL statement gets the average value of the "Price"
column from the "Products" table:
Example
SELECT AVG(Price) AS PriceAverage FROM Products;
The following SQL statement selects the "ProductName" and
"Price" records that have an above average price:
Example
SELECT ProductName, Price FROM Products
WHERE Price>(SELECT AVG(Price) FROM Products);
SQL COUNT() Function
The COUNT() function returns the number of rows that matches a
specified criteria.
SQL COUNT(column_name) Syntax
The COUNT(column_name) function returns the number of values (NULL values
will not be counted) of the specified column:
SELECT COUNT(column_name) FROM table_name;
SQL COUNT(*) Syntax
The COUNT(*) function returns the number of records in a table:
SELECT COUNT(*) FROM table_name;
SQL COUNT(DISTINCT column_name) Syntax
The COUNT(DISTINCT column_name) function returns the number of distinct
values of the specified column:
SELECT COUNT(DISTINCT column_name) FROM table_name;
Note: COUNT(DISTINCT) works with ORACLE and Microsoft SQL Server, but
not with Microsoft Access.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Orders" table:
OrderID |
CustomerID |
EmployeeID |
OrderDate |
ShipperID |
10265 |
7 |
2 |
1996-07-25 |
1 |
10266 |
87 |
3 |
1996-07-26 |
3 |
10267 |
25 |
4 |
1996-07-29 |
1 |
SQL COUNT(column_name) Example
The following SQL statement counts the number of orders from
"CustomerID"=7 from the "Orders" table:
Example
SELECT COUNT(CustomerID) AS OrdersFromCustomerID7 FROM
Orders
WHERE CustomerID=7;
SQL COUNT(*) Example
The following SQL statement omits the WHERE clause and counts the total
number of orders from the "Orders" table:
Example
SELECT COUNT(*) AS NumberOfOrders FROM Orders;
SQL COUNT(DISTINCT column_name) Example
Now we want to count the number of unique customers in the
"Orders" table.
We use the following SQL statement:
SELECT COUNT(DISTINCT CustomerID) AS NumberOfCustomers FROM
Orders;
The result-set will look like this:
NumberOfCustomers |
89 |
which is the number of unique customers in the "Orders" table.
SQL MAX() Function
The MAX() Function
The MAX() function returns the largest value of the selected column.
SQL MAX() Syntax
SELECT MAX(column_name) FROM table_name;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Products" table:
ProductID |
ProductName |
SupplierID |
CategoryID |
Unit |
Price |
1 |
Chais |
1 |
1 |
10 boxes x 20 bags |
18 |
2 |
Chang |
1 |
1 |
24 - 12 oz bottles |
19 |
3 |
Aniseed Syrup |
1 |
2 |
12 - 550 ml bottles |
10 |
4 |
Chef Anton's Cajun Seasoning |
2 |
2 |
48 - 6 oz jars |
21.35 |
5 |
Chef Anton's Gumbo Mix |
2 |
2 |
36 boxes |
25 |
SQL MAX() Example
The following SQL statement gets the largest value of the "Price"
column from the "Products" table:
Example
SELECT MAX(Price) AS HighestPrice FROM Products;
SQL MIN() Function
The MIN() Function
The MIN() function returns the smallest value of the selected column.
SQL MIN() Syntax
SELECT MIN(column_name) FROM table_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Products" table:
ProductID |
ProductName |
SupplierID |
CategoryID |
Unit |
Price |
1 |
Chais |
1 |
1 |
10 boxes x 20 bags |
18 |
2 |
Chang |
1 |
1 |
24 - 12 oz bottles |
19 |
3 |
Aniseed Syrup |
1 |
2 |
12 - 550 ml bottles |
10 |
4 |
Chef Anton's Cajun Seasoning |
2 |
2 |
48 - 6 oz jars |
21.35 |
5 |
Chef Anton's Gumbo Mix |
2 |
2 |
36 boxes |
25 |
SQL MIN() Example
The following SQL statement gets the smallest value of the "Price"
column from the "Products" table:
Example
SELECT MIN(Price) AS SmallestOrderPrice FROM Products;
SQL SUM() Function
The SUM() Function
The SUM() function returns the total sum of a numeric column.
SQL SUM() Syntax
SELECT SUM(column_name) FROM table_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "OrderDetails" table:
OrderDetailID |
OrderID |
ProductID |
Quantity |
1 |
10248 |
11 |
12 |
2 |
10248 |
42 |
10 |
3 |
10248 |
72 |
5 |
4 |
10249 |
14 |
9 |
5 |
10249 |
51 |
40 |
SQL SUM() Example
The following SQL statement finds the sum of all the "Quantity"
fields for the "OrderDetails" table:
Example
SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
SQL GROUP BY Statement
Aggregate functions often need an added GROUP BY statement.
The GROUP BY Statement
The GROUP BY statement is used in conjunction with the aggregate functions
to group the result-set by one or more columns.
SQL GROUP BY Syntax
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Orders" table:
OrderID |
CustomerID |
EmployeeID |
OrderDate |
ShipperID |
10248 |
90 |
5 |
1996-07-04 |
3 |
10249 |
81 |
6 |
1996-07-05 |
1 |
10250 |
34 |
4 |
1996-07-08 |
2 |
And a selection from the "Shippers" table:
ShipperID |
ShipperName |
Phone |
1 |
Speedy Express |
(503) 555-9831 |
2 |
United Package |
(503) 555-3199 |
3 |
Federal Shipping |
(503) 555-9931 |
And a selection from the "Employees" table:
EmployeeID |
LastName |
FirstName |
BirthDate |
Photo |
Notes |
1 |
Davolio |
Nancy |
1968-12-08 |
EmpID1.pic |
Education includes a BA.... |
2 |
Fuller |
Andrew |
1952-02-19 |
EmpID2.pic |
Andrew received his BTS.... |
3 |
Leverling |
Janet |
1963-08-30 |
EmpID3.pic |
Janet has a BS degree.... |
SQL GROUP BY Example
Now we want to find the number of orders sent by each shipper.
The following SQL statement counts as orders grouped by shippers:
Example
SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS
NumberOfOrders FROM Orders
LEFT JOIN Shippers
ON Orders.ShipperID=Shippers.ShipperID
GROUP BY ShipperName;
GROUP BY More Than One Column
We can also use the GROUP BY statement on more than one column, like this:
Example
SELECT Shippers.ShipperName, Employees.LastName,
COUNT(Orders.OrderID) AS NumberOfOrders
FROM ((Orders
INNER JOIN Shippers
ON Orders.ShipperID=Shippers.ShipperID)
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID)
GROUP BY ShipperName,LastName;
SQL HAVING Clause
The HAVING Clause
The HAVING clause was added to SQL because the WHERE keyword could not be
used with aggregate functions.
SQL HAVING Syntax
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name
HAVING aggregate_function(column_name) operator value;
Demo Database
In this tutorial, we will use the well-known Northwind sample database.
Below is a selection from the "Orders" table:
OrderID |
CustomerID |
EmployeeID |
OrderDate |
ShipperID |
10248 |
90 |
5 |
1996-07-04 |
3 |
10249 |
81 |
6 |
1996-07-05 |
1 |
10250 |
34 |
4 |
1996-07-08 |
2 |
And a selection from the "Employees" table:
EmployeeID |
LastName |
FirstName |
BirthDate |
Photo |
Notes |
1 |
Davolio |
Nancy |
1968-12-08 |
EmpID1.pic |
Education includes a BA... |
2 |
Fuller |
Andrew |
1952-02-19 |
EmpID2.pic |
Andrew received his BTS... |
3 |
Levering |
Janet |
1963-08-30 |
EmpID3.pic |
Janet has a BS degree... |
SQL HAVING Example
Now we want to find if any of the customers have a total order of less than
2000.
We use the following SQL statement:
The following SQL statement finds if any of the employees have registered
more than 10 orders:
Example
SELECT Employees.LastName, COUNT(Orders.OrderID) AS
NumberOfOrders FROM (Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID)
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 10;
Now we want to find the if the employees "Davolio" or
"Fuller" has more than 25 orders
We add an ordinary WHERE clause to the SQL statement:
Example
SELECT Employees.LastName, COUNT(Orders.OrderID) AS
NumberOfOrders FROM Orders
INNER JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
WHERE LastName='Davolio' OR LastName='Fuller'
GROUP BY LastName
HAVING COUNT(Orders.OrderID) > 25;
SQL LEN() Function
The LEN() Function
The LEN() function returns the length of the value in a text field.
SQL LEN() Syntax
SELECT LEN(column_name) FROM table_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
CustomerID |
CustomerName |
ContactName |
Address |
City |
PostalCode |
Country |
1 |
Alfreds Futterkiste |
Maria Anders |
Obere Str. 57 |
Berlin |
12209 |
Germany |
2 |
Ana Trujillo Emparedados y helados |
Ana Trujillo |
Avda. de la Constitución 2222 |
México D.F. |
05021 |
Mexico |
3 |
Antonio Moreno Taquería |
Antonio Moreno |
Mataderos 2312 |
México D.F. |
05023 |
Mexico |
4 |
Around the Horn |
Thomas Hardy |
120 Hanover Sq. |
London |
WA1 1DP |
UK |
5 |
Berglunds snabbköp |
Christina Berglund |
Berguvsvägen 8 |
Luleå |
S-958 22 |
Sweden |
SQL LEN() Example
The following SQL statement selects the "CustomerName" and the
length of the values in the "Address" column from the
"Customers" table:
Example
SELECT CustomerName,LEN(Address) as LengthOfAddress
FROM Customers;
SQL Quick Reference
SQL Statement |
Syntax |
AND / OR |
SELECT column_name(s) |
ALTER TABLE |
ALTER TABLE table_name or ALTER TABLE table_name |
AS (alias) |
SELECT column_name AS column_alias or SELECT column_name |
BETWEEN |
SELECT column_name(s) |
CREATE DATABASE |
CREATE DATABASE database_name |
CREATE TABLE |
CREATE TABLE table_name |
CREATE INDEX |
CREATE INDEX index_name or CREATE UNIQUE INDEX index_name |
CREATE VIEW |
CREATE VIEW view_name AS |
DELETE |
DELETE FROM table_name or DELETE FROM table_name DELETE * FROM table_name |
DROP DATABASE |
DROP DATABASE database_name |
DROP INDEX |
DROP INDEX table_name.index_name
(SQL Server) |
DROP TABLE |
DROP TABLE table_name |
GROUP BY |
SELECT column_name, aggregate_function(column_name) |
HAVING |
SELECT column_name,
aggregate_function(column_name) |
IN |
SELECT column_name(s) |
INSERT INTO |
INSERT INTO table_name or INSERT INTO table_name |
INNER JOIN |
SELECT column_name(s) |
LEFT JOIN |
SELECT column_name(s) |
RIGHT JOIN |
SELECT column_name(s) |
FULL JOIN |
SELECT column_name(s) |
LIKE |
SELECT column_name(s) |
ORDER BY |
SELECT column_name(s) |
SELECT |
SELECT column_name(s) |
SELECT * |
SELECT * |
SELECT DISTINCT |
SELECT DISTINCT column_name(s) |
SELECT INTO |
SELECT * or SELECT column_name(s) |
SELECT TOP |
SELECT TOP number|percent
column_name(s) |
TRUNCATE TABLE |
TRUNCATE TABLE table_name |
UNION |
SELECT column_name(s) FROM
table_name1 |
UNION ALL |
SELECT column_name(s) FROM table_name1 |
UPDATE |
UPDATE table_name |
WHERE |
SELECT column_name(s) |
No comments:
Post a Comment
Submit a Comment