SQL
SQL
Our SQL tutorial will teach you how to use SQL to access and manipulate data in: MySQL,
SQL Server, Access, Oracle, Sybase, DB2, and other database systems.
Example
SELECT * FROM Customers;
Try it Yourself
What is SQL?
SQL stands for Structured Query Language
SQL lets you access and manipulate databases
SQL is an ANSI (American National Standards Institute) standard
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!
RDBMS is the basis for SQL, and for all modern database systems such as MS SQL Server,
IBM DB2, Oracle, MySQL, and Microsoft Access.
A table is a collection of related data entries and it consists of columns and rows.
SQL Syntax
PreviousNext
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).
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;
Try it Yourself
In this tutorial we will teach you all about the different SQL statements.
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 semicolon at the end of each SQL statement.
SQL Comments
PreviousNext
Comments can also be used to prevent execution, when testing alternative SQL
statements.
Any line between -- and the end of the line will be ignored (will not be executed).
Example
A single-line comment as an explanation:
--Select all:
SELECT * FROM Customers;
Try it Yourself
Example
A single-line comment to ignore the end of a line:
Try it Yourself
Example
A single-line comment to ignore a statement:
--SELECT * FROM Customers;
SELECT * FROM Products;
Try it Yourself
Multi-line Comments
Multi-line comments start with /* and end with */.
Example
A multi-line comment as an explanation:
Try it Yourself
Example
A multi-line comment to ignore many statements:
Try it Yourself
Comments in Statements
To ignore just a part of a statement, use the /* */ comment.
Example
Ignore part of a line:
Try it Yourself
Example
Ignore a parts of a statment:
and
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
Example
SELECT CustomerName,City FROM Customers;
Try it Yourself
SELECT * Example
The following SQL statement selects all the columns from the "Customers" table:
Example
SELECT * FROM Customers;
Try it Yourself
Navigation in a Result-set
Most database software systems allow navigation in the result-set with programming
functions, like: Move-To-First-Record, Get-Record-Content, Move-To-Next-Record, etc.
Programming functions like these are not a part of this tutorial. To learn about accessing data
with function calls, please visit our PHP tutorial.
SQL SELECT DISTINCT Statement
PreviousNext
The SELECT DISTINCT statement is used to return only distinct (different) values.
The DISTINCT keyword can be used to return only distinct (different) values.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Example
SELECT DISTINCT City FROM Customers;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
Example
SELECT * FROM Customers
WHERE Country='Mexico';
Try it Yourself
Example
SELECT * FROM Customers
WHERE CustomerID=1;
Try it Yourself
Operator Description
= Equal
<> Not equal. Note: In some versions of SQL this operator may be written
as !=
The AND & OR operators are used to filter records based on more than one condition.
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.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds snabbkp Christina Berguvsvgen 8 Lule S-958 22 Sweden
Berglund
Example
SELECT * FROM Customers
WHERE Country='Germany'
AND City='Berlin';
Try it Yourself
OR Operator Example
The following SQL statement selects all customers from the city "Berlin" OR "Mnchen", in the
"Customers" table:
Example
SELECT * FROM Customers
WHERE City='Berlin'
OR City='Mnchen';
Try it Yourself
The following SQL statement selects all customers from the country "Germany" AND the city
must be equal to "Berlin" OR "Mnchen", in the "Customers" table:
Example
SELECT * FROM Customers
WHERE Country='Germany'
AND (City='Berlin' OR City='Mnchen');
Try it Yourself
SQL ORDER BY Keyword
PreviousNext
The ORDER BY keyword sorts the records in ascending order by default. To sort the records in
a descending order, you can use the DESC keyword.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
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;
Try it Yourself
Example
SELECT * FROM Customers
ORDER BY Country DESC;
Try it Yourself
Example
SELECT * FROM Customers
ORDER BY Country, CustomerName;
Try it Yourself
Example
SELECT * FROM Customers
ORDER BY Country ASC, CustomerName DESC;
Try it Yourself
The first form does not specify the column names where the data will be inserted, only their
values:
The second form specifies both the column names and the values to be inserted:
Demo Database
In this tutorial we will use the well-known Northwind sample database.
89 White Clover Karl Jablonski 305 - 14th Ave. S. Seattle 98128 USA
Markets Suite 3B
Example
INSERT INTO Customers (CustomerName, ContactName, Address, City, PostalCode,
Country)
VALUES ('Cardinal','Tom B. Erichsen','Skagen 21','Stavanger','4006','Norway');
Try it Yourself
The selection from the "Customers" table will now look like this:
89 White Clover Karl Jablonski 305 - 14th Ave. Seattle 98128 USA
Markets S. Suite 3B
Did you notice that we did not insert any number into the CustomerID field?
The CustomerID column is automatically updated with a unique number for each record in the
table.
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):
Example
INSERT INTO Customers (CustomerName, City, Country)
VALUES ('Cardinal', 'Stavanger', 'Norway');
Try it Yourself
The selection from the "Customers" table will now look like this:
CustomerID CustomerName ContactName Address City PostalCode Country
89 White Clover Karl Jablonski 305 - 14th Ave. Seattle 98128 USA
Markets S. Suite 3B
UPDATE Customers
SET City='Hamburg'
WHERE CustomerID=1;
Try it Yourself
Syntax
UPDATE table_name
SET column1=value1,column2=value2,...
WHERE some_column=some_value;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
Assume we wish to update the customer "Alfreds Futterkiste" with a new contact
person and city.
Example
UPDATE Customers
SET ContactName='Alfred Schmidt', City='Frankfurt'
WHERE CustomerID=1;
Try it Yourself
The selection from the "Customers" table will now look like this:
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
The WHERE clause: WHERE Country='Mexico' will update all records which have the value
"Mexico" in the field "Country".
Example
UPDATE Customers
SET ContactName='Juan'
WHERE Country='Mexico';
Try it Yourself
The selection from the "Customers" table will now look like this:
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
Example
UPDATE Customers
SET ContactName='Juan';
Try it Yourself
The selection from the "Customers" table will now look like this:
4 Around the Horn Juan 120 Hanover Sq. London WA1 1DP UK
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
5 Berglunds Christina Berguvsvgen 8 Lule S-958 22 Sweden
snabbkp Berglund
Example
DELETE FROM Customers
WHERE CustomerName='Alfreds Futterkiste' AND ContactName='Maria Anders';
Try it Yourself
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
or
Note: Be very careful when deleting records. You cannot undo this statement!
SQL Injection
PreviousNext
When SQL is used to display data on a web page, it is common to let web users input their
own search values.
Since SQL statements are text only, it is easy, with a little piece of computer code, to
dynamically change SQL statements to provide the user with selected data:
Server Code
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
The example above, creates a select statement by adding a variable (txtUserId) to a select
string. The variable is fetched from the user input (Request) to the page.
The rest of this chapter describes the potential dangers of using user input in SQL statements.
SQL Injection
SQL injection is a technique where malicious users can inject SQL commands into an SQL
statement, via web page input.
Injected SQL commands can alter SQL statement and compromise the security of a web
application.
SQL Injection Based on 1=1 is Always True
Look at the example above, one more time.
Let's say that the original purpose of the code was to create an SQL statement to select a
user with a given user id.
If there is nothing to prevent a user from entering "wrong" input, the user can enter some
"smart" input like this:
UserId:
Server Result
SELECT * FROM Users WHERE UserId = 105 or 1=1;
The SQL above is valid. It will return all rows from the table Users, since WHERE 1=1 is
always true.
Does the example above seem dangerous? What if the Users table contains names and
passwords?
SELECT UserId, Name, Password FROM Users WHERE UserId = 105 or 1=1;
A smart hacker might get access to all the user names and passwords in a database by simply
inserting 105 or 1=1 into the input box.
User Name:
Password:
Server Code
uName = getRequestString("UserName");
uPass = getRequestString("UserPass");
sql = 'SELECT * FROM Users WHERE Name ="' + uName + '" AND Pass ="' + uPass + '"'
Result
SELECT * FROM Users WHERE Name ="John Doe" AND Pass ="myPass"
A smart hacker might get access to user names and passwords in a database by simply
inserting " or ""=" into the user name or password text box:
User Name:
Password:
The code at the server will create a valid SQL statement like this:
Result
SELECT * FROM Users WHERE Name ="" or ""="" AND Pass ="" or ""=""
The result SQL is valid. It will return all rows from the table Users, since WHERE ""="" is
always true.
Example
SELECT * FROM Users; DROP TABLE Suppliers
The SQL above will return all rows in the Users table, and then delete the table called
Suppliers.
Server Code
txtUserId = getRequestString("UserId");
txtSQL = "SELECT * FROM Users WHERE UserId = " + txtUserId;
User id:
The code at the server would create a valid SQL statement like this:
Result
SELECT * FROM Users WHERE UserId = 105; DROP TABLE Suppliers
Parameters for Protection
Some web developers use a "blacklist" of words or characters to search for in SQL input, to
prevent SQL injection attacks.
This is not a very good idea. Many of these words (like delete or drop) and characters (like
semicolons and quotation marks), are used in common language, and should be allowed in
many types of input.
(In fact it should be perfectly legal to input an SQL statement in a database field.)
The only proven way to protect a web site from SQL injection attacks, is to use SQL
parameters.
SQL parameters are values that are added to an SQL query at execution time, in a controlled
manner.
The SQL engine checks each parameter to ensure that it is correct for its column and are
treated literally, and not as part of the SQL to be executed.
Another Example
txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
db.Execute(txtSQL,txtNam,txtAdd,txtCit);
You have just learned to avoid SQL injection. One of the top website vulnerabilities.
Examples
The following examples shows how to build parameterized queries in some common web
languages.
txtUserId = getRequestString("UserId");
sql = "SELECT * FROM Customers WHERE CustomerId = @0";
command = new SqlCommand(sql);
command.Parameters.AddWithValue("@0",txtUserID);
command.ExecuteReader();
txtNam = getRequestString("CustomerName");
txtAdd = getRequestString("Address");
txtCit = getRequestString("City");
txtSQL = "INSERT INTO Customers (CustomerName,Address,City) Values(@0,@1,@2)";
command = new SqlCommand(txtSQL);
command.Parameters.AddWithValue("@0",txtNam);
command.Parameters.AddWithValue("@1",txtAdd);
command.Parameters.AddWithValue("@2",txtCit);
command.ExecuteNonQuery();
The SELECT TOP clause can be very useful on large tables with thousands of records.
Returning a large number of records can impact on performance.
Note: Not all database systems support the SELECT TOP clause.
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.
Example
SELECT TOP 2 * FROM Customers;
Try it Yourself
Example
SELECT TOP 50 PERCENT * FROM Customers;
The LIKE operator is used in a WHERE clause to search for a specified pattern in a
column.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Example
SELECT * FROM Customers
WHERE City LIKE 's%';
Try it Yourself
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';
Try it Yourself
The following SQL statement selects all customers with a Country containing the pattern
"land":
Example
SELECT * FROM Customers
WHERE Country LIKE '%land%';
Try it Yourself
Using the NOT keyword allows you to select records that do NOT match the pattern.
The following SQL statement selects all customers with Country NOT containing the pattern
"land":
Example
SELECT * FROM Customers
WHERE Country NOT LIKE '%land%';
SQL Wildcards
PreviousNext
A wildcard character can be used to substitute for any other character(s) in a string.
Wildcard Description
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover Sq. Londo WA1 1DP UK
n
Example
SELECT * FROM Customers
WHERE City LIKE 'ber%';
Try it Yourself
The following SQL statement selects all customers with a City containing the pattern "es":
Example
SELECT * FROM Customers
WHERE City LIKE '%es%';
Try it Yourself
Example
SELECT * FROM Customers
WHERE City LIKE '_erlin';
Try it Yourself
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';
Try it Yourself
Example
SELECT * FROM Customers
WHERE City LIKE '[bsp]%';
Try it Yourself
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]%';
Try it Yourself
The two following SQL statements selects all customers with a City NOT starting with "b", "s",
or "p":
Example
SELECT * FROM Customers
WHERE City LIKE '[!bsp]%';
Try it Yourself
Or:
Example
SELECT * FROM Customers
WHERE City NOT LIKE '[bsp]%';
SQL IN Operator
PreviousNext
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.
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
5 Berglunds Christina Berguvsvgen Lule S-958 22 Sweden
snabbkp Berglund 8
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');
Try it Yourself
Demo Database
In this tutorial we will use the well-known Northwind sample database.
2 Chang 1 1 24 - 12 oz bottles 19
Example
SELECT * FROM Products
WHERE Price BETWEEN 10 AND 20;
Try it Yourself
Example
SELECT * FROM Products
WHERE Price NOT BETWEEN 10 AND 20;
Try it Yourself
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);
Try it Yourself
Example
SELECT * FROM Products
WHERE ProductName BETWEEN 'C' AND 'M';
Try it Yourself
Example
SELECT * FROM Products
WHERE ProductName NOT BETWEEN 'C' AND 'M';
Try it Yourself
Sample Table
Below is a selection from the "Orders" table:
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
Example
SELECT * FROM Orders
WHERE OrderDate BETWEEN #07/04/1996# AND #07/09/1996#;
Try it Yourself
Notice that the BETWEEN operator can produce different result in different
databases!
In some databases, BETWEEN selects fields that are between and excluding the test values.
In other databases, BETWEEN selects fields that are between and including the test values.
And in other databases, BETWEEN selects fields between the test values, including the first
test value and excluding the last test value.
SQL Aliases
PreviousNext
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
10355 4 6 1996-11-15 1
10356 86 6 1996-11-18 2
Example
SELECT CustomerName AS Customer, ContactName AS [Contact Person]
FROM Customers;
Try it Yourself
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;
Try it Yourself
Note: To get the SQL statement above to work in MySQL use the following:
Try it Yourself
Example
SELECT Orders.OrderID, Orders.OrderDate, Customers.CustomerName
FROM Customers, Orders
WHERE Customers.CustomerName="Around the
Horn" AND Customers.CustomerID=Orders.CustomerID;
Try it Yourself
SQL Joins
PreviousNext
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
returns all rows from multiple tables where the join condition is met.
10309 37 1996-09-19
10310 77 1996-09-20
Notice that the "CustomerID" column in the "Orders" table refers to the "CustomerID" 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;
Try it Yourself
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
or:
SELECT column_name(s)
FROM table1
JOIN table2
ON table1.column_name=table2.column_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2
Example
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
INNER JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
Try it Yourself
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.
or:
SELECT column_name(s)
FROM table1
LEFT OUTER JOIN table2
ON table1.column_name=table2.column_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2
Example
SELECT Customers.CustomerName, Orders.OrderID
FROM Customers
LEFT JOIN Orders
ON Customers.CustomerID=Orders.CustomerID
ORDER BY Customers.CustomerName;
Try it Yourself
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).
or:
SELECT column_name(s)
FROM table1
RIGHT OUTER JOIN table2
ON table1.column_name=table2.column_name;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2
Example
SELECT Orders.OrderID, Employees.FirstName
FROM Orders
RIGHT JOIN Employees
ON Orders.EmployeeID=Employees.EmployeeID
ORDER BY Orders.OrderID;
Try it Yourself
Note: The RIGHT JOIN keyword returns all the rows from the right table (Employees), even if
there are no matches in the left table (Orders).
The FULL OUTER JOIN keyword combines the result of both LEFT and RIGHT joins.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
10308 2 7 1996-09-18 3
10309 37 3 1996-09-19 1
10310 77 8 1996-09-20 2
CustomerName OrderID
Alfreds Futterkiste
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.
The SQL UNION operator combines the result 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.
Note: The UNION operator selects only distinct values by default. To allow duplicate values,
use the ALL keyword with UNION.
PS: The column names in the result-set of a UNION are usually 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.
2 New Orleans Cajun Shelley Burke P.O. Box 78934 New 70117 USA
Delights Orleans
3 Grandma Kelly's Regina Murphy 707 Oxford Rd. Ann 48104 USA
Homestead Arbor
SQL UNION Example
The following SQL statement selects all the different cities (only distinct values) from the
"Customers" and the "Suppliers" tables:
Example
SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;
Try it Yourself
Note: UNION cannot be used to list ALL cities from the two tables. If several customers and
suppliers share the same city, each city will only be listed once. UNION selects only distinct
values. Use UNION ALL to also select duplicate values!
Example
SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;
Try it Yourself
Example
SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;
SQL SELECT INTO Statement
PreviousNext
With SQL, you can copy information from one table into another.
The SELECT INTO statement copies data from one table and inserts it into a new table.
SELECT *
INTO newtable [IN externaldb]
FROM table1;
Or we can copy only the columns we want into the new table:
SELECT column_name(s)
INTO newtable [IN externaldb]
FROM table1;
The new table will be created with the column-names and types as defined in the SELECT
statement. You can apply new names using the AS clause.
SELECT *
INTO CustomersBackup2013
FROM Customers;
SELECT *
INTO CustomersBackup2013 IN 'Backup.mdb'
FROM Customers;
SELECT *
INTO CustomersBackup2013
FROM Customers
WHERE Country='Germany';
Copy data from more than one table into the new table:
Tip: The SELECT INTO statement can also be used to create a new, empty table using the
schema of another. Just add a WHERE clause that causes the query to return no data:
SELECT *
INTO newtable
FROM table1
WHERE 1=0;
With SQL, you can copy information from one table into another.
The INSERT INTO SELECT statement copies data from one table and inserts it into an
existing table.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
2 New Orleans Shelley Burke P.O. Box New 70117 USA (100)
Cajun Delights 78934 Orleans 555-4822
3 Grandma Kelly's Regina 707 Oxford Ann Arbor 48104 USA (313)
Homestead Murphy Rd. 555-5735
Example
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers;
Try it Yourself
Example
INSERT INTO Customers (CustomerName, Country)
SELECT SupplierName, Country FROM Suppliers
WHERE Country='Germany';
Tables are organized into rows and columns; and each table must have a name.
The column_name parameters specify the names of the columns of the table.
The data_type parameter specifies what type of data the column can hold (e.g. varchar,
integer, decimal, date, etc.).
The size parameter specifies the maximum length of the column of the table.
Tip: For an overview of the data types available in MS Access, MySQL, and SQL Server, go to
our complete Data Types Reference.
Example
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Try it Yourself
The PersonID column is of type int and will hold an integer.
The LastName, FirstName, Address, and City columns are of type varchar and will hold
characters, and the maximum length for these fields is 255 characters.
Tip: The empty table can be filled with data with the INSERT INTO statement.
SQL Constraints
PreviousNext
SQL Constraints
SQL constraints are used to specify rules for the data in a table.
If there is any violation between the constraint and the data action, the action is aborted by
the constraint.
Constraints can be specified when the table is created (inside the CREATE TABLE statement)
or after the table is created (inside the ALTER TABLE statement).
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:
Example
CREATE TABLE PersonsNotNull
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255)
)
Note that you can have many UNIQUE constraints per table, but only one PRIMARY KEY
constraint per table.
MySQL:
To allow naming of a UNIQUE constraint, and for defining a UNIQUE constraint on multiple
columns, use the following SQL syntax:
To allow naming of a UNIQUE constraint, and for defining a UNIQUE constraint on multiple
columns, use the following SQL syntax:
MySQL:
Most tables 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:
To allow naming of a PRIMARY KEY constraint, and for defining a PRIMARY KEY constraint on
multiple columns, use the following SQL syntax:
Note: In the example above there is only ONE PRIMARY KEY (pk_PersonID). However, the
VALUE of the primary key is made up of TWO COLUMNS (P_Id + LastName).
To allow naming of a PRIMARY KEY constraint, and for defining a PRIMARY KEY constraint on
multiple columns, use the following SQL syntax:
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).
MySQL:
Let's illustrate the foreign key with an example. Look at the following two tables:
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 "Persons" table is the PRIMARY KEY in the "Persons" table.
The "P_Id" column in 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.
MySQL:
To allow naming of a FOREIGN KEY constraint, and for defining a FOREIGN KEY constraint on
multiple columns, use the following SQL syntax:
To allow naming of a FOREIGN KEY constraint, and for defining a FOREIGN KEY constraint on
multiple columns, use the following SQL syntax:
MySQL:
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.
MySQL:
To allow naming of a CHECK constraint, and for defining a CHECK constraint on multiple
columns, use the following SQL syntax:
MySQL:
The default value will be added to all new records, if no other value is specified.
The DEFAULT constraint can also be used to insert system values, by using functions like
GETDATE():
MySQL:
Oracle:
MySQL:
Indexes allow the database application to find data fast; without reading the whole table.
Indexes
An index can be created in a table to find data more quickly and efficiently.
The users cannot see the indexes, they are just used to speed up searches/queries.
Note: Updating a table with indexes takes more time than updating a table without (because
the indexes also need an update). So you should only create indexes on columns (and tables)
that will be frequently searched against.
Note: The syntax for creating indexes varies among different databases. Therefore: Check
the syntax for creating indexes in your database.
If you want to create an index on a combination of columns, you can list the column names
within the parentheses, separated by commas:
CREATE INDEX PIndex
ON Persons (LastName, FirstName)
Indexes, tables, and databases can easily be deleted/removed with the DROP statement.
To delete a column in a table, use the following syntax (notice that some database systems
don't allow deleting a column):
To change the data type of a column in a table, use the following syntax:
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 Server, go to our complete Data Types
reference.
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.
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:
To insert a new record into the "Persons" table, we will NOT have to specify a value for the
"ID" column (a unique value will be added automatically):
The MS SQL Server uses the IDENTITY keyword to perform an auto-increment feature.
In the example above, the starting value for IDENTITY is 1, and it will increment by 1 for each
new record.
Tip: To specify that the "ID" column should start at value 10 and increment by 5, change it to
IDENTITY(10,5).
To insert a new record into the "Persons" table, we will NOT have to specify a value for the
"ID" column (a unique value will be added automatically):
The SQL statement above would insert a new record into the "Persons" table. The "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".
By default, the starting value for AUTOINCREMENT is 1, and it will increment by 1 for each
new record.
Tip: To specify that the "ID" 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
"ID" column (a unique value will be added automatically):
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".
You will have to create an auto-increment field with the sequence object (this object
generates a number sequence).
The code above creates a sequence 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):
The SQL statement above would insert a new record into the "Persons" table. The "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
PreviousNext
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.
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.
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:
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)
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":
We can also add a condition to the query. Now we want to see the total sale only for the
category "Beverages":
Now we want to add the "Category" column to the "Current Product List" view. We will update
the view with the following SQL:
SQL Dates
The most difficult part when working with dates is to be sure that the format of the date you
are trying to insert, matches the format of the date column in the database.
As long as your data contains only the date portion, your queries will work as expected.
However, if a time portion is involved, it gets complicated.
Before talking about the complications of querying for dates, we will look at the most
important built-in functions for working with dates.
Function Description
Function Description
SQL Server comes with the following data types for storing a date or a date/time value in the
database:
Note: The date types are chosen for a column when you create a new table in your database!
For an overview of all data types available, go to our complete Data Types reference.
1 Geitost 2008-11-11
2 Camembert Pierrot 2008-11-09
Now we want to select the records with an OrderDate of "2008-11-11" from the table above.
1 Geitost 2008-11-11
Now, assume that the "Orders" table looks like this (notice the time component in the
"OrderDate" column):
we will get no result! This is because the query is looking only for dates with no time portion.
Tip: If you want to keep your queries simple and easy to maintain, do not allow time
components in your dates!
This chapter will explain the IS NULL and IS NOT NULL operators.
Note: It is not possible to compare NULL and 0; they are not equivalent.
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 "Address" column will be saved
with a NULL value.
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?
Hansen Ola
Pettersen Kari
In the next chapter we will look at the ISNULL(), NVL(), IFNULL() and COALESCE() functions.
2 Mascarpone 32.56 23
3 Gorgonzola 15.67 9 20
Suppose that the "UnitsOnOrder" column is optional, and may contain NULL values.
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.
Below, if "UnitsOnOrder" is NULL it will not harm the calculation, because ISNULL() returns a
zero if the value is NULL:
MS Access
SELECT ProductName,UnitPrice*(UnitsInStock+IIF(ISNULL(UnitsOnOrder),0,UnitsOnOrder)
)
FROM Products
SQL Server
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.
SELECT ProductName,UnitPrice*(UnitsInStock+IFNULL(UnitsOnOrder,0))
FROM Products
SELECT ProductName,UnitPrice*(UnitsInStock+COALESCE(UnitsOnOrder,0))
FROM Products
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.
TIMESTAMP Stores year, month, day, hour, minute, and second values
The following table shows some of the common names of data types between the various
database platforms:
Data type Access SQLServer Oracle MySQL PostgreSQL
Note: Data types might have different names in different database. And even if the name is
the same, the size and other details may be different! Always check the documentation!
Data types and ranges for Microsoft Access, MySQL and SQL Server.
Microsoft Access Data Types
Text Use for text or combinations of text and numbers. 255 characters maximum
Memo 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
Currency Use for currency. Holds up to 15 digits of whole dollars, plus 4 decimal 8 bytes
places. Tip: You can choose which country's currency to use
AutoNumber AutoNumber fields automatically give each record its own number, usually starting 4 bytes
at 1
Ole Object Can store pictures, audio, video, or other BLOBs (Binary Large OBjects) up to 1GB
Lookup Let you type a list of options, which can then be chosen from a drop-down list 4 bytes
Wizard
Text types:
CHAR(size) 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
BLOB For BLOBs (Binary Large OBjects). Holds up to 65,535 bytes of data
MEDIUMBLOB For BLOBs (Binary Large OBjects). Holds up to 16,777,215 bytes of data
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.
SET Similar to ENUM except that SET may contain up to 64 list items and can store more than one
choice
Number types:
TINYINT(size) -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(siz -8388608 to 8388607 normal. 0 to 16777215 UNSIGNED*. The maximum number of digits
e) 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
*The integer types have an extra option called UNSIGNED. Normally, the integer goes from
an negative to positive value. Adding the UNSIGNED attribute will move that range up so it
starts at zero instead of a negative number.
Date types:
TIMESTAMP() *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:MI:SS
*Even if DATETIME and TIMESTAMP return the same format, they work very differently. In an
INSERT or UPDATE query, the TIMESTAMP automatically set itself to the current date and
time. TIMESTAMP also accepts various formats, like YYYYMMDDHHMISS, YYMMDDHHMISS,
YYYYMMDD, or YYMMDD.
text Variable width character string. Maximum 2GB of text data 4 bytes +
number of
chars
Number types:
Data type Description Storage
5-17 bytes
decimal(p,s) Fixed precision and scale numbers.
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
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
float(n) Floating precision number data from -1.79E + 308 to 1.79E + 308. 4 or 8 bytes
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.
Date types:
datetime From January 1, 1753 to December 31, 9999 with an accuracy of 3.33 8 bytes
milliseconds
datetime2 From January 1, 0001 to December 31, 9999 with an accuracy of 100 6-8 bytes
nanoseconds
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
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:
sql_variant Stores up to 8,000 bytes of data of various data types, except text, ntext, and
timestamp
SQL Functions
PreviousNext
Tip: The aggregate functions and the scalar functions will be explained in details in the next
chapters.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Example
SELECT AVG(Price) AS PriceAverage FROM Products;
Try it Yourself
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);
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.
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;
Try it Yourself
Example
SELECT COUNT(*) AS NumberOfOrders FROM Orders;
Try it Yourself
Example
SELECT COUNT(DISTINCT CustomerID) AS NumberOfCustomers FROM Orders;
Example
SELECT TOP 1 CustomerName FROM Customers
ORDER BY CustomerID ASC;
MySQL Syntax
SELECT column_name FROM table_name
ORDER BY column_name ASC
LIMIT 1;
Example
SELECT CustomerName FROM Customers
ORDER BY CustomerID ASC
LIMIT 1;
Oracle Syntax
SELECT column_name FROM table_name
WHERE ROWNUM <=1
ORDER BY column_name ASC;
Example
SELECT CustomerName FROM Customers
WHERE ROWNUM <=1
ORDER BY CustomerID ASC;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Customers" table:
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
Example
SELECT FIRST(CustomerName) AS FirstCustomer FROM Customers;
Example
SELECT TOP 1 CustomerName FROM Customers
ORDER BY CustomerID DESC;
MySQL Syntax
SELECT column_name FROM table_name
ORDER BY column_name DESC
LIMIT 1;
Example
SELECT CustomerName FROM Customers
ORDER BY CustomerID DESC
LIMIT 1;
Oracle Syntax
SELECT column_name FROM table_name
ORDER BY column_name DESC
WHERE ROWNUM <=1;
Example
SELECT CustomerName FROM Customers
ORDER BY CustomerID DESC
WHERE ROWNUM <=1;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Example
SELECT LAST(CustomerName) AS LastCustomer FROM Customers;
SQL MAX() Function
PreviousNext
Demo Database
In this tutorial we will use the well-known Northwind sample database.
2 Chang 1 1 24 - 12 oz bottles 19
Example
SELECT MAX(Price) AS HighestPrice FROM Products;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
2 Chang 1 1 24 - 12 oz bottles 19
Example
SELECT MIN(Price) AS SmallestOrderPrice FROM Products;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
1 10248 11 12
2 10248 42 10
3 10248 72 5
4 10249 14 9
5 10249 51 40
Example
SELECT SUM(Quantity) AS TotalItemsOrdered FROM OrderDetails;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
10248 90 5 1996-07-04 3
10249 81 6 1996-07-05 1
10250 34 4 1996-07-08 2
ShipperID ShipperName
1 Speedy Express
2 United Package
3 Federal Shipping
Example
SELECT Shippers.ShipperName,COUNT(Orders.OrderID) AS NumberOfOrders FROM Orders
LEFT JOIN Shippers
ON Orders.ShipperID=Shippers.ShipperID
GROUP BY ShipperName;
Try it Yourself
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
PreviousNext
Demo Database
In this tutorial we will use the well-known Northwind sample database.
10248 90 5 1996-07-04 3
10249 81 6 1996-07-05 1
10250 34 4 1996-07-08 2
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;
Try it Yourself
Now we want to find if the employees "Davolio" or "Fuller" have registered more than 25
orders.
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 UCASE() Function
PreviousNext
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Example
SELECT UCASE(CustomerName) AS Customer, City
FROM Customers;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Example
SELECT LCASE(CustomerName) AS Customer, City
FROM Customers;
Try it Yourself
Parameter Description
length Optional. The number of characters to return. If omitted, the MID() function
returns the rest of the text
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover Sq. London WA1 1DP UK
Example
SELECT MID(City,1,4) AS ShortCity
FROM Customers;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
4 Around the Horn Thomas Hardy 120 Hanover London WA1 1DP UK
Sq.
Note: Many database systems do rounding differently than you might expect. When rounding
a number with a fractional part to an integer, our school teachers told us to round .1 through
.4 DOWN to the next lower integer, and .5 through .9 UP to the next higher integer. But if all
the digits 1 through 9 are equally likely, this introduces a slight bias towards infinity, since we
always round .5 up. Many database systems have adopted the IEEE 754 standard for
arithmetic operations, according to which the default rounding behavior is "round half to
even." In this scheme, .5 is rounded to the nearest even integer. So, both 11.5 and 12.5
would be rounded to 12.
Parameter Description
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Products" table:
2 Chang 1 1 24 - 12 oz bottles 19
Example
SELECT ProductName, ROUND(Price,0) AS RoundedPrice
FROM Products;
Demo Database
In this tutorial we will use the well-known Northwind sample database.
2 Chang 1 1 24 - 12 oz bottles 19
Example
SELECT ProductName, Price, Now() AS PerDate
FROM Products;
SQL FORMAT() Function
PreviousNext
Parameter Description
Demo Database
In this tutorial we will use the well-known Northwind sample database.
2 Chang 1 1 24 - 12 oz bottles 19
3 Aniseed Syrup 1 2 12 - 550 ml bottles 10
Example
SELECT ProductName, Price, FORMAT(Now(),'YYYY-MM-DD') AS PerDate
FROM Products;
or
or
SELECT column_name
FROM table_name AS table_alias
or
or
IN SELECT column_name(s)
FROM table_name
WHERE column_name
IN (value1,value2,..)
or
SELECT * SELECT *
FROM table_name
or
SELECT column_name(s)
INTO new_table_name [IN externaldatabase]
FROM old_table_name
Source : http://www.w3schools.com/sql/sql_quickref.asp
SQL Hosting
PreviousNext
SQL Hosting
If you want your web site to be able to store and retrieve data from a database, your web
server should have access to a database-system that uses the SQL language.
If your web server is hosted by an Internet Service Provider (ISP), you will have to look for
SQL hosting plans.
The most common SQL hosting databases are MS SQL Server, Oracle, MySQL, and MS Access.
MS SQL Server
Microsoft's SQL Server is a popular database software for database-driven web sites with high
traffic.
SQL Server is a very powerful, robust and full featured SQL database system.
Oracle
Oracle is also a popular database software for database-driven web sites with high traffic.
Oracle is a very powerful, robust and full featured SQL database system.
MySQL
MySQL is also a popular database software for web sites.
MySQL is a very powerful, robust and full featured SQL database system.
Access is not well suited for very high-traffic, and not as powerful as MySQL, SQL Server, or
Oracle.
SQL Quiz
PreviousNext
The Test
The test contains 25 questions and there is no time limit.
The test is not official, it's just a nice way to see how much you know, or don't know, about
SQL.
The JavaScript Certificate documents your knowledge of JavaScript and HTML DOM.
The PHP Certificate documents your knowledge of PHP and SQL (MySQL).
The XML Certificate documents your knowledge of XML, XML DOM and XSLT.
SQL Tutorial
HomeNext
Our SQL tutorial will teach you how to use SQL to access and manipulate data in: MySQL,
SQL Server, Access, Oracle, Sybase, DB2, and other database systems.
Example
SELECT * FROM Customers;
Try it Yourself
W3Schools Exam
The JavaScript Certificate documents your knowledge of JavaScript and HTML DOM.
The PHP Certificate documents your knowledge of PHP and SQL (MySQL).
The XML Certificate documents your knowledge of XML, XML DOM and XSLT.
http://www.w3schools.com/quiztest/result.asp